angle amoeba with cross-term
This commit is contained in:
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
units real
|
units real
|
||||||
boundary p p p
|
boundary p p p
|
||||||
|
atom_modify sort 0 0.0
|
||||||
|
|
||||||
atom_style amoeba
|
atom_style amoeba
|
||||||
|
|
||||||
|
|||||||
@ -111,8 +111,8 @@ void AngleAmoeba::compute(int eflag, int vflag)
|
|||||||
|
|
||||||
if (tflag && nspecial[i2][0] == 3) {
|
if (tflag && nspecial[i2][0] == 3) {
|
||||||
anglep(i1,i2,i3,type,eflag);
|
anglep(i1,i2,i3,type,eflag);
|
||||||
continue;
|
|
||||||
}
|
} else {
|
||||||
|
|
||||||
// 1st bond
|
// 1st bond
|
||||||
|
|
||||||
@ -171,11 +171,19 @@ void AngleAmoeba::compute(int eflag, int vflag)
|
|||||||
|
|
||||||
//if (eflag) eangle = k2[type]*dtheta2 + k3[type]*dtheta3 +
|
//if (eflag) eangle = k2[type]*dtheta2 + k3[type]*dtheta3 +
|
||||||
// k4[type]*dtheta4 + k5[type]*dtheta5 + k6[type]*dtheta6;
|
// k4[type]*dtheta4 + k5[type]*dtheta5 + k6[type]*dtheta6;
|
||||||
eangle = 0.0;
|
}
|
||||||
|
|
||||||
// force & energy for bond-angle term
|
// force & energy for bond-angle term
|
||||||
// bond-stretch cross term in Tinker
|
// bond-stretch cross term in Tinker
|
||||||
|
|
||||||
|
if (ba_k1[type] > 0.0) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//NOTE: depends on r1,r2,c,s,rsq1,rsq2,delxyz1,delxyz2,dtheta
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
dr1 = r1 - ba_r1[type];
|
dr1 = r1 - ba_r1[type];
|
||||||
dr2 = r2 - ba_r2[type];
|
dr2 = r2 - ba_r2[type];
|
||||||
|
|
||||||
@ -215,10 +223,12 @@ void AngleAmoeba::compute(int eflag, int vflag)
|
|||||||
f3[1] -= vy21 + b2*dely2 + vy22;
|
f3[1] -= vy21 + b2*dely2 + vy22;
|
||||||
f3[2] -= vz21 + b2*delz2 + vz22;
|
f3[2] -= vz21 + b2*delz2 + vz22;
|
||||||
|
|
||||||
if (eflag) eangle += ba_k1[type]*dr1*dtheta + ba_k2[type]*dr2*dtheta;
|
//if (eflag) eangle += ba_k1[type]*dr1*dtheta + ba_k2[type]*dr2*dtheta;
|
||||||
|
if (eflag) eangle = ba_k1[type]*dr1*dtheta + ba_k2[type]*dr2*dtheta;
|
||||||
|
|
||||||
printf("Stretch-Bend: %ld %d %d: eng %g\n",
|
printf("Stretch-Bend: %ld %d %d: eng %g\n",
|
||||||
atom->tag[i1],atom->tag[i2],atom->tag[i3],eangle);
|
atom->tag[i1],atom->tag[i2],atom->tag[i3],eangle);
|
||||||
|
}
|
||||||
|
|
||||||
// apply force to each of 3 atoms
|
// apply force to each of 3 atoms
|
||||||
|
|
||||||
@ -350,8 +360,8 @@ void AngleAmoeba::anglep(int i1, int i2, int i3, int type, int eflag)
|
|||||||
deddt = 2.0*k2[type]*dtheta + 3.0*k3[type]*dtheta2 +
|
deddt = 2.0*k2[type]*dtheta + 3.0*k3[type]*dtheta2 +
|
||||||
4.0*k4[type]*dtheta3 + 5.0*k5[type]*dtheta4 + 6.0*k6[type]*dtheta5;
|
4.0*k4[type]*dtheta3 + 5.0*k5[type]*dtheta4 + 6.0*k6[type]*dtheta5;
|
||||||
|
|
||||||
if (eflag) eangle = k2[type]*dtheta2 + k3[type]*dtheta3 +
|
//if (eflag) eangle = k2[type]*dtheta2 + k3[type]*dtheta3 +
|
||||||
k4[type]*dtheta4 + k5[type]*dtheta5 + k6[type]*dtheta6;
|
// k4[type]*dtheta4 + k5[type]*dtheta5 + k6[type]*dtheta6;
|
||||||
|
|
||||||
// chain rule terms for first derivative components
|
// chain rule terms for first derivative components
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user