return e;
}
+double get_e_pot(t_moldyn *moldyn) {
+
+ return(moldyn->potential(moldyn));
+}
+
+double get_total_energy(t_moldyn *moldyn) {
+
+ double e;
+
+ e=get_e_kin(moldyn->atom,moldyn->count);
+ e+=get_e_pot(moldyn);
+
+ return e;
+}
+
t_3dvec get_total_p(t_atom *atom, int count) {
t_3dvec p,p_total;
return p_total;
}
-double potential_lennard_jones_2(t_moldyn *moldyn,void *ptr) {
+
+/*
+ *
+ * potentials & corresponding forces
+ *
+ */
+
+/* lennard jones potential & force for one sort of atoms */
+
+double potential_lennard_jones(t_moldyn *moldyn) {
t_lj_params *params;
t_atom *atom;
double u;
double eps,sig6,sig12;
- params=ptr;
+ params=moldyn->pot_params;
atom=moldyn->atom;
count=moldyn->count;
eps=params->epsilon;
for(i=0;i<count;i++) {
for(j=0;j<i;j++) {
v3_sub(&distance,&(atom[j].r),&(atom[i].r));
- d=v3_absolute_square(&distance); /* 1/r^2 */
+ d=1.0/v3_absolute_square(&distance); /* 1/r^2 */
help=d*d; /* 1/r^4 */
help*=d; /* 1/r^6 */
d=help*help; /* 1/r^12 */
return u;
}
+int force_lennard_jones(t_moldyn *moldyn) {
+
+ t_lj_params *params;
+ int i,j,count;
+ t_atom *atom;
+ t_3dvec distance;
+ t_3dvec force;
+ double d,h1,h2;
+
+ atom=moldyn->atom;
+ count=moldyn->count;
+ params=moldyn->pot_params;
+
+ for(i=0;i<count;i++) {
+ for(j=0;j<i;j++) {
+ v3_sub(&distance,&(atom[j].r),&(atom[i].r));
+ v3_per_bound(&distance,&(moldyn->dim));
+ d=v3_absolute_square(&distance);
+ if(d<=moldyn->cutoff_square) {
+ h1=1.0/d; /* 1/r^2 */
+ d=h1*h1; /* 1/r^4 */
+ h2=d*d; /* 1/r^8 */
+ h1*=d; /* 1/r^6 */
+ h1*=h2; /* 1/r^14 */
+ }
+ }
+ }
+
+ return 0;
+}