+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;
+ int i;
+
+ v3_zero(&p_total);
+ for(i=0;i<count;i++) {
+ v3_scale(&p,&(atom[i].v),atom[i].mass);
+ v3_add(&p_total,&p_total,&p);
+ }
+
+ return p_total;
+}
+
+
+/*
+ *
+ * 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;
+ int i,j;
+ int count;
+ t_3dvec distance;
+ double d,help;
+ double u;
+ double eps,sig6,sig12;
+
+ params=moldyn->pot_params;
+ atom=moldyn->atom;
+ count=moldyn->count;
+ eps=params->epsilon;
+ sig6=params->sigma6;
+ sig12=params->sigma12;
+
+ u=0.0;
+ for(i=0;i<count;i++) {
+ for(j=0;j<i;j++) {
+ v3_sub(&distance,&(atom[j].r),&(atom[i].r));
+ 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 */
+ u+=eps*(sig12*d-sig6*help);
+ }
+ }
+
+ 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;
+}
+