For linear angles. Now the distance parameter comes
first, and then the force constant, like in other
bonded potentials. In addition, the angle defined by
the same atom types but with the opposite order of
atoms now gets a modified constant (1-a).
Change-Id: I6db408be01b0cbb795edaa9943b72dbe149e3f97
newparam->qangle.c[i]=old[i+1];
break;
case F_LINEAR_ANGLES:
newparam->qangle.c[i]=old[i+1];
break;
case F_LINEAR_ANGLES:
- newparam->linangle.klinA = old[0];
- newparam->linangle.aA = old[1];
- newparam->linangle.klinB = old[2];
- newparam->linangle.aB = old[3];
+ newparam->linangle.aA = old[0];
+ newparam->linangle.klinA = old[1];
+ newparam->linangle.aB = old[2];
+ newparam->linangle.klinB = old[3];
break;
case F_ANGLES:
case F_BONDS:
break;
case F_ANGLES:
case F_BONDS:
memcpy(bt->param[bt->nr].c, b->c,sizeof(b->c));
memcpy(bt->param[bt->nr].a, b->a,sizeof(b->a));
memcpy(bt->param[bt->nr+1].c,b->c,sizeof(b->c));
memcpy(bt->param[bt->nr].c, b->c,sizeof(b->c));
memcpy(bt->param[bt->nr].a, b->a,sizeof(b->a));
memcpy(bt->param[bt->nr+1].c,b->c,sizeof(b->c));
+
+ /* The definitions of linear angles depend on the order of atoms,
+ * that means that for atoms i-j-k, with certain parameter a, the
+ * corresponding k-j-i angle will have parameter 1-a.
+ */
+ if (ftype == F_LINEAR_ANGLES)
+ {
+ bt->param[bt->nr+1].c[0] = 1-bt->param[bt->nr+1].c[0];
+ bt->param[bt->nr+1].c[2] = 1-bt->param[bt->nr+1].c[2];
+ }
+
for (j=0; (j < nral); j++)
{
bt->param[bt->nr+1].a[j] = b->a[nral-1-j];
for (j=0; (j < nral); j++)
{
bt->param[bt->nr+1].a[j] = b->a[nral-1-j];