2 * lennard_jones.c - lennard jones potential
4 * author: Frank Zirkelbach <frank.zirkelbach@physik.uni-augsburg.de>
12 #include <sys/types.h>
18 #include "../moldyn.h"
19 #include "../math/math.h"
20 #include "lennard_jones.h"
22 int lennard_jones(t_moldyn *moldyn,t_atom *ai,t_atom *aj,u8 bc) {
25 t_3dvec force,distance;
27 double eps,sig6,sig12;
30 params=moldyn->pot_params;
33 sig12=params->sigma12;
37 v3_sub(&distance,&(aj->r),&(ai->r));
38 if(bc) check_per_bound(moldyn,&distance);
39 d=v3_absolute_square(&distance); /* r^2 */
40 if(d<=moldyn->cutoff_square) {
44 h1=h2*h2; /* 1/r^12 */
45 energy=(eps*(sig12*h1-sig6*h2)-params->uc);
46 moldyn->energy+=energy; /* total energy */
47 ai->e+=0.5*energy; /* site energy */
55 v3_scale(&force,&distance,d);
56 v3_add(&(aj->f),&(aj->f),&force);
57 v3_scale(&force,&force,-1.0); /* f = - grad E */
58 v3_add(&(ai->f),&(ai->f),&force);
59 virial_calc(ai,&force,&distance);
60 virial_calc(aj,&force,&distance); /* f and d signe switched */