00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "lj2.h"
00011
00012 void LJ2Frame::initparser()
00013 {
00014 MDPARALLELFrame::initparser();
00015
00016
00017 bindvar("C12_00",&_ALJ_00,DOUBLE);
00018 bindvar("C6_00",&_BLJ_00,DOUBLE);
00019
00020 bindvar("C12_11",&_ALJ_11,DOUBLE);
00021 bindvar("C6_11",&_BLJ_11,DOUBLE);
00022
00023 bindvar("C12_01",&_ALJ_01,DOUBLE);
00024 bindvar("C6_01",&_BLJ_01,DOUBLE);
00025
00026 }
00027
00028 int LJ2Frame::exec(char *name)
00029 {
00030 if(MDPARALLELFrame::exec(name)==0) return 0;
00031 bindcommand(name,"initLJ",initLJ());
00032 return -1;
00033 }
00034
00035 void LJ2Frame::initvars()
00036 {
00037 _RLIST=LJ_RC+1.1;
00038 _SKIN=_RLIST-LJ_RC;
00039 MDPARALLELFrame::initvars();
00040 }
00041
00042 void LJ2Frame::initLJ()
00043 {
00044 ALJ_00=_ALJ_00*LJ_ENERGY*POW12(LJ_LENGTH);
00045 BLJ_00=_BLJ_00*LJ_ENERGY*POW6(LJ_LENGTH);
00046 Uc_00=(ALJ_00*POW6(1/LJ_RC)-BLJ_00)*POW6(1/LJ_RC);
00047 DUDRc_00=-(12*ALJ_00/POW6(LJ_RC)-6*BLJ_00)/POW6(LJ_RC)/LJ_RC;
00048
00049 ALJ_11=_ALJ_11*LJ_ENERGY*POW12(LJ_LENGTH);
00050 BLJ_11=_BLJ_11*LJ_ENERGY*POW6(LJ_LENGTH);
00051 Uc_11=(ALJ_11*POW6(1/LJ_RC)-BLJ_11)*POW6(1/LJ_RC);
00052 DUDRc_11=-(12*ALJ_11/POW6(LJ_RC)-6*BLJ_11)/POW6(LJ_RC)/LJ_RC;
00053
00054 ALJ_01=_ALJ_01*LJ_ENERGY*POW12(LJ_LENGTH);
00055 BLJ_01=_BLJ_01*LJ_ENERGY*POW6(LJ_LENGTH);
00056 Uc_01=(ALJ_01*POW6(1/LJ_RC)-BLJ_01)*POW6(1/LJ_RC);
00057 DUDRc_01=-(12*ALJ_01/POW6(LJ_RC)-6*BLJ_01)/POW6(LJ_RC)/LJ_RC;
00058
00059 INFO_Printf("ALJ_00 = %e BLJ_00 = %e Uc_00 = %e DUDRc_00 = %e\n",ALJ_00,BLJ_00,Uc_00,DUDRc_00);
00060 INFO_Printf("ALJ_11 = %e BLJ_11 = %e Uc_11 = %e DUDRc_11 = %e\n",ALJ_11,BLJ_11,Uc_11,DUDRc_11);
00061 INFO_Printf("ALJ_01 = %e BLJ_01 = %e Uc_01 = %e DUDRc_01 = %e\n",ALJ_01,BLJ_01,Uc_01,DUDRc_01);
00062 }
00063
00064 void LJ2Frame::calcprop()
00065 {
00066 MDPARALLELFrame::calcprop();
00067 }
00068
00069 void LJ2Frame::lennard_jones_2()
00070 {
00071
00072
00073
00074
00075
00076
00077
00078 int i,j,ipt,jpt;
00079 double U,r,r2,ri6;
00080 double ALJ,BLJ,Uc,DUDRc;
00081 Vector3 sij, rij, fij;
00082
00083 DUMP(HIG"Lennard Jones"NOR);
00084
00085 refreshneighborlist();
00086
00087 _EPOT=0;
00088
00089 for(i=0;i<_NP;i++)
00090 {_F[i].clear(); _EPOT_IND[i]=0;}
00091 _VIRIAL.clear();
00092
00093 for(ipt=0;ipt<_NP;ipt++)
00094 {
00095 for(j=0;j<nn[ipt];j++)
00096 {
00097
00098 jpt=nindex[ipt][j];
00099 if(ipt>jpt) continue;
00100 sij=_SR[jpt]-_SR[ipt];
00101 sij.subint();
00102 rij=_H*sij;
00103 r2=rij.norm2();
00104 r=sqrt(r2);
00105 if(r<=LJ_RC)
00106 {
00107 if((species[ipt]==0)&&(species[jpt]==0))
00108 {
00109 ALJ=ALJ_00; BLJ=BLJ_00; Uc=Uc_00; DUDRc=DUDRc_00;
00110 }
00111 else if((species[ipt]==1)&&(species[jpt]==1))
00112 {
00113 ALJ=ALJ_11; BLJ=BLJ_11; Uc=Uc_11; DUDRc=DUDRc_11;
00114 }
00115 else
00116 {
00117 ALJ=ALJ_01; BLJ=BLJ_01; Uc=Uc_01; DUDRc=DUDRc_01;
00118 }
00119
00120
00121
00122 ri6=1./(r2*r2*r2);
00123
00124 U=(ALJ*ri6-BLJ)*ri6-r*DUDRc+(LJ_RC*DUDRc-Uc);
00125 fij=rij*((12*ALJ*ri6-6*BLJ)*ri6/r2+DUDRc/r);
00126
00127 _F[ipt]-=fij;
00128 _F[jpt]+=fij;
00129 _EPOT_IND[ipt]+=U*0.5;
00130 _EPOT_IND[jpt]+=U*0.5;
00131 _EPOT+=U;
00132 _VIRIAL.addnvv(1.,fij,rij);
00133 }
00134 }
00135 }
00136 }
00137
00138
00139 void LJ2Frame::potential()
00140 {
00141 lennard_jones_2();
00142 }
00143
00144 #ifdef _TEST
00145
00146
00147 class LJ2Frame sim;
00148
00149
00150 #include "main.cpp"
00151
00152 #endif//_TEST
00153