00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "lj.h"
00010
00011
00012 void LJFrame::initvars()
00013 {
00014 _RLIST=LJ_RC+1.1;
00015 _SKIN=_RLIST-LJ_RC;
00016
00017
00018 INFO("_RLIST="<<_RLIST<<" LJ_RC="<<LJ_RC);
00019 MDPARALLELFrame::initvars();
00020 }
00021
00022 void LJFrame::lennard_jones()
00023 {
00024
00025
00026
00027
00028
00029
00030 int i,j,ipt,jpt;
00031 double U,r,r2,ri6;
00032 Vector3 sij, rij, fij;
00033 DUMP(HIG"Lennard Jones"NOR);
00034
00035 refreshneighborlist();
00036
00037 _EPOT=0;
00038
00039 for(i=0;i<_NP;i++)
00040 {_F[i].clear(); _EPOT_IND[i]=0;}
00041 _VIRIAL.clear();
00042
00043 for(ipt=0;ipt<_NP;ipt++)
00044 {
00045
00046 for(j=0;j<nn[ipt];j++)
00047 {
00048 jpt=nindex[ipt][j];
00049 if(ipt>jpt) continue;
00050
00051 sij=_SR[jpt]-_SR[ipt];
00052 sij.subint();
00053 rij=_H*sij;
00054 r2=rij.norm2();
00055 r=sqrt(r2);
00056 if(r<=LJ_RC)
00057 {
00058 ri6=1./(r2*r2*r2);
00059 U=(A*ri6-B)*ri6-r*DUDRc+(LJ_RC*DUDRc-Uc);
00060
00061 fij=rij*((12*A*ri6-6*B)*ri6/r2+DUDRc/r);
00062
00063 _F[ipt]-=fij;
00064 _F[jpt]+=fij;
00065 _EPOT_IND[ipt]+=U*0.5;
00066 _EPOT_IND[jpt]+=U*0.5;
00067 _EPOT+=U;
00068 _VIRIAL.addnvv(1.,fij,rij);
00069 }
00070 }
00071 }
00072
00073 }
00074
00075
00076 void LJFrame::potential()
00077 {
00078 lennard_jones();
00079 }
00080
00081
00082
00083 #ifdef _TEST
00084 class LJFrame sim;
00085
00086
00087 #include "main.cpp"
00088
00089 #endif//_TEST
00090
00091
00092
00093
00094