Commit 8fb52958 authored by sjplimp's avatar sjplimp
Browse files

git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@1193 f3b2605a-c512-4ea7-a41b-209d697bcdaa
parent d9df67de
Loading
Loading
Loading
Loading
+13 −21
Original line number Diff line number Diff line
@@ -74,15 +74,16 @@ PairGayBerne::~PairGayBerne()

void PairGayBerne::compute(int eflag, int vflag)
{
  int i,j,ii,jj,m,inum,jnum,itype,jtype;
  double one_eng,rsq,r2inv,r6inv,forcelj;
  int i,j,ii,jj,inum,jnum,itype,jtype;
  double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fx,fy,fz;
  double one_eng,rsq,r2inv,r6inv,forcelj,factor_lj;
  double fforce[3],ttor[3],rtor[3],r12[3];
  double a1[3][3],b1[3][3],g1[3][3],a2[3][3],b2[3][3],g2[3][3],temp[3][3];
  int *ilist,*jlist,*numneigh,**firstneigh;
  double factor_lj;

  eng_vdwl = 0.0;
  if (vflag) for (i = 0; i < 6; i++) virial[i] = 0.0;
  evdwl = 0.0;
  if (eflag || vflag) ev_setup(eflag,vflag);
  else evflag = vflag_fdotr = 0;

  double **x = atom->x;
  double **f = atom->f;
@@ -90,7 +91,7 @@ void PairGayBerne::compute(int eflag, int vflag)
  double **tor = atom->torque;
  int *type = atom->type;
  int nlocal = atom->nlocal;
  int nall = atom->nlocal + atom->nghost;
  int nall = nlocal + atom->nghost;
  double *special_lj = force->special_lj;
  int newton_pair = force->newton_pair;

@@ -188,25 +189,16 @@ void PairGayBerne::compute(int eflag, int vflag)
	  tor[j][2] += rtor[2];
        }

        if (eflag) {
	  if (newton_pair || j < nlocal) eng_vdwl += factor_lj*one_eng;
	  else eng_vdwl += 0.5*factor_lj*one_eng;
        }
        if (eflag) evdwl = factor_lj*one_eng;

        if (vflag == 1) {
	  if (newton_pair == 0 && j >= nlocal) 
	    for (m = 0; m < 6; m++) fforce[m] *= 0.5;
	  virial[0] -= r12[0]*fforce[0];
	  virial[1] -= r12[1]*fforce[1];
	  virial[2] -= r12[2]*fforce[2];
	  virial[3] -= r12[0]*fforce[1];
	  virial[4] -= r12[0]*fforce[2];
	  virial[5] -= r12[1]*fforce[2];
	}
	if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair,
				 evdwl,0.0,fforce[0],fforce[1],fforce[2],
				 -r12[0],-r12[1],-r12[2]);
      }
    }
  }
  if (vflag == 2) virial_compute();

  if (vflag_fdotr) virial_compute();
}

/* ----------------------------------------------------------------------
+15 −24
Original line number Diff line number Diff line
@@ -80,23 +80,23 @@ PairRESquared::~PairRESquared()

void PairRESquared::compute(int eflag, int vflag)
{
  int i,j,ii,jj,m,inum,jnum,itype,jtype;
  double one_eng,rsq,r2inv,r6inv,forcelj;
  int i,j,ii,jj,inum,jnum,itype,jtype;
  double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fx,fy,fz;
  double one_eng,rsq,r2inv,r6inv,forcelj,factor_lj;
  double fforce[3],ttor[3],rtor[3],r12[3];
  int *ilist,*jlist,*numneigh,**firstneigh;
  double factor_lj;
  RE2Vars wi,wj;

  eng_vdwl = 0.0;
  if (vflag) for (i = 0; i < 6; i++) virial[i] = 0.0;
  evdwl = 0.0;
  if (eflag || vflag) ev_setup(eflag,vflag);
  else evflag = vflag_fdotr = 0;

  double **x = atom->x;
  double **f = atom->f;
  double **quat = atom->quat;
  double **tor = atom->torque;
  int *type = atom->type;
  int nlocal = atom->nlocal;
  int nall = atom->nlocal + atom->nghost;
  int nall = nlocal + atom->nghost;
  double *special_lj = force->special_lj;
  int newton_pair = force->newton_pair;

@@ -198,25 +198,16 @@ void PairRESquared::compute(int eflag, int vflag)
          f[j][2] -= fforce[2];
        }

        if (eflag) {
          if (newton_pair || j < nlocal) eng_vdwl += factor_lj*one_eng;
          else eng_vdwl += 0.5*factor_lj*one_eng;
        }
        if (eflag) evdwl = factor_lj*one_eng;

        if (vflag == 1) {
          if (newton_pair == 0 && j >= nlocal)
            for (m = 0; m < 6; m++) fforce[m] *= 0.5;
	  virial[0] -= r12[0]*fforce[0];
	  virial[1] -= r12[1]*fforce[1];
	  virial[2] -= r12[2]*fforce[2];
	  virial[3] -= r12[0]*fforce[1];
	  virial[4] -= r12[0]*fforce[2];
	  virial[5] -= r12[1]*fforce[2];
        }
	if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair,
				 evdwl,0.0,fforce[0],fforce[1],fforce[2],
				 -r12[0],-r12[1],-r12[2]);
      }
    }
  }
  if (vflag == 2) virial_compute();

  if (vflag_fdotr) virial_compute();
}

/* ----------------------------------------------------------------------
+40 −59
Original line number Diff line number Diff line
@@ -64,15 +64,17 @@ AngleClass2::~AngleClass2()

void AngleClass2::compute(int eflag, int vflag)
{
  int i1,i2,i3,n,type,factor;
  double delx1,dely1,delz1,delx2,dely2,delz2,rfactor;
  int i1,i2,i3,n,type;
  double delx1,dely1,delz1,delx2,dely2,delz2;
  double eangle,f1[3],f3[3];
  double dtheta,dtheta2,dtheta3,dtheta4,de_angle;
  double dr1,dr2,tk1,tk2,aa1,aa2,aa11,aa12,aa21,aa22;
  double rsq1,rsq2,r1,r2,c,s,a,a11,a12,a22,b1,b2,vx1,vx2,vy1,vy2,vz1,vz2;
  double rsq1,rsq2,r1,r2,c,s,a,a11,a12,a22,b1,b2;
  double vx11,vx12,vy11,vy12,vz11,vz12,vx21,vx22,vy21,vy22,vz21,vz22;

  energy = 0.0;
  if (vflag) for (n = 0; n < 6; n++) virial[n] = 0.0;
  eangle = 0.0;
  if (eflag || vflag) ev_setup(eflag,vflag);
  else evflag = 0;

  double **x = atom->x;
  double **f = atom->f;
@@ -82,21 +84,11 @@ void AngleClass2::compute(int eflag, int vflag)
  int newton_bond = force->newton_bond;

  for (n = 0; n < nanglelist; n++) {

    i1 = anglelist[n][0];
    i2 = anglelist[n][1];
    i3 = anglelist[n][2];
    type = anglelist[n][3];

    if (newton_bond) factor = 3;
    else {
      factor = 0;
      if (i1 < nlocal) factor++;
      if (i2 < nlocal) factor++;
      if (i3 < nlocal) factor++;
    }
    rfactor = factor/3.0;

    // 1st bond

    delx1 = x[i1][0] - x[i2][0];
@@ -139,22 +131,20 @@ void AngleClass2::compute(int eflag, int vflag)
    de_angle = 2.0*k2[type]*dtheta + 3.0*k3[type]*dtheta2 + 
      4.0*k4[type]*dtheta3;

    a = de_angle*s;
        
    a = -de_angle*s;
    a11 = a*c / rsq1;
    a12 = -a / (r1*r2);
    a22 = a*c / rsq2;
        
    vx1 = a11*delx1 + a12*delx2;
    vy1 = a11*dely1 + a12*dely2;
    vz1 = a11*delz1 + a12*delz2;
    f1[0] = a11*delx1 + a12*delx2;
    f1[1] = a11*dely1 + a12*dely2;
    f1[2] = a11*delz1 + a12*delz2;

    vx2 = a22*delx2 + a12*delx1;
    vy2 = a22*dely2 + a12*dely1;
    vz2 = a22*delz2 + a12*delz1;
    f3[0] = a22*delx2 + a12*delx1;
    f3[1] = a22*dely2 + a12*dely1;
    f3[2] = a22*delz2 + a12*delz1;

    if (eflag) energy += rfactor * 
      (k2[type]*dtheta2 + k3[type]*dtheta3 + k4[type]*dtheta4);
    if (eflag) eangle = k2[type]*dtheta2 + k3[type]*dtheta3 + k4[type]*dtheta4;

    // force & energy for bond-bond term

@@ -163,15 +153,15 @@ void AngleClass2::compute(int eflag, int vflag)
    tk1 = bb_k[type] * dr1;
    tk2 = bb_k[type] * dr2;

    vx1 += delx1*tk2/r1;
    vy1 += dely1*tk2/r1;
    vz1 += delz1*tk2/r1;
    f1[0] -= delx1*tk2/r1;
    f1[2] -= dely1*tk2/r1;
    f1[2] -= delz1*tk2/r1;

    vx2 += delx2*tk1/r2;
    vy2 += dely2*tk1/r2;
    vz2 += delz2*tk1/r2;
    f3[0] -= delx2*tk1/r2;
    f3[1] -= dely2*tk1/r2;
    f3[2] -= delz2*tk1/r2;

    if (eflag) energy += rfactor * bb_k[type]*dr1*dr2;
    if (eflag) eangle += bb_k[type]*dr1*dr2;

    // force & energy for bond-angle term

@@ -203,47 +193,38 @@ void AngleClass2::compute(int eflag, int vflag)
    b1 = ba_k1[type] * dtheta / r1;
    b2 = ba_k2[type] * dtheta / r2;

    vx1 += vx11 + b1*delx1 + vx12;
    vy1 += vy11 + b1*dely1 + vy12;
    vz1 += vz11 + b1*delz1 + vz12;
    f1[0] -= vx11 + b1*delx1 + vx12;
    f1[2] -= vy11 + b1*dely1 + vy12;
    f1[2] -= vz11 + b1*delz1 + vz12;

    vx2 += vx21 + b2*delx2 + vx22;
    vy2 += vy21 + b2*dely2 + vy22;
    vz2 += vz21 + b2*delz2 + vz22;
    f3[0] -= vx21 + b2*delx2 + vx22;
    f3[1] -= vy21 + b2*dely2 + vy22;
    f3[2] -= vz21 + b2*delz2 + vz22;

    if (eflag) energy += rfactor * 
		 ((ba_k1[type]*dr1*dtheta) + (ba_k2[type]*dr2*dtheta));
    if (eflag) eangle += ba_k1[type]*dr1*dtheta + ba_k2[type]*dr2*dtheta;

    // apply force to each of 3 atoms

    if (newton_bond || i1 < nlocal) {
      f[i1][0] -= vx1;
      f[i1][1] -= vy1;
      f[i1][2] -= vz1;
      f[i1][0] += f1[0];
      f[i1][1] += f1[1];
      f[i1][2] += f1[2];
    }

    if (newton_bond || i2 < nlocal) {
      f[i2][0] += vx1 + vx2;
      f[i2][1] += vy1 + vy2;
      f[i2][2] += vz1 + vz2;
      f[i2][0] -= f1[0] + f3[0];
      f[i2][1] -= f1[1] + f3[1];
      f[i2][2] -= f1[2] + f3[2];
    }

    if (newton_bond || i3 < nlocal) {
      f[i3][0] -= vx2;
      f[i3][1] -= vy2;
      f[i3][2] -= vz2;
      f[i3][0] += f3[0];
      f[i3][1] += f3[1];
      f[i3][2] += f3[2];
    }

    // virial contribution

    if (vflag) {
      virial[0] -= rfactor * (delx1*vx1 + delx2*vx2);
      virial[1] -= rfactor * (dely1*vy1 + dely2*vy2);
      virial[2] -= rfactor * (delz1*vz1 + delz2*vz2);
      virial[3] -= rfactor * (delx1*vy1 + delx2*vy2);
      virial[4] -= rfactor * (delx1*vz1 + delx2*vz2);
      virial[5] -= rfactor * (dely1*vz1 + dely2*vz2);
    }
    if (evflag) ev_tally(i1,i2,i3,nlocal,newton_bond,eangle,f1,f3,
			 delx1,dely1,delz1,delx2,dely2,delz2);
  }
}

+18 −42
Original line number Diff line number Diff line
@@ -49,11 +49,13 @@ BondClass2::~BondClass2()

void BondClass2::compute(int eflag, int vflag)
{
  int i1,i2,n,type,factor;
  double delx,dely,delz,rsq,r,dr,dr2,dr3,dr4,de_bond,fforce,rfactor;
  int i1,i2,n,type;
  double delx,dely,delz,ebond,fbond;
  double rsq,r,dr,dr2,dr3,dr4,de_bond;

  energy = 0.0;
  if (vflag) for (n = 0; n < 6; n++) virial[n] = 0.0;
  ebond = 0.0;
  if (eflag || vflag) ev_setup(eflag,vflag);
  else evflag = 0;

  double **x = atom->x;
  double **f = atom->f;
@@ -63,19 +65,10 @@ void BondClass2::compute(int eflag, int vflag)
  int newton_bond = force->newton_bond;

  for (n = 0; n < nbondlist; n++) {

    i1 = bondlist[n][0];
    i2 = bondlist[n][1];
    type = bondlist[n][2];

    if (newton_bond) factor = 2;
    else {
      factor = 0;
      if (i1 < nlocal) factor++;
      if (i2 < nlocal) factor++;
    }
    rfactor = 0.5 * factor;

    delx = x[i1][0] - x[i2][0];
    dely = x[i1][1] - x[i2][1];
    delz = x[i1][2] - x[i2][2];
@@ -91,36 +84,26 @@ void BondClass2::compute(int eflag, int vflag)
    // force & energy

    de_bond = 2.0*k2[type]*dr + 3.0*k3[type]*dr2 + 4.0*k4[type]*dr3;
    if (r > 0.0) fforce = -de_bond/r;
    else fforce = 0.0;
    if (r > 0.0) fbond = -de_bond/r;
    else fbond = 0.0;

    if (eflag) 
      energy += rfactor * (k2[type]*dr2 + k3[type]*dr3 + k4[type]*dr4);
    if (eflag) ebond = k2[type]*dr2 + k3[type]*dr3 + k4[type]*dr4;

    // apply force to each of 2 atoms

    if (newton_bond || i1 < nlocal) {
      f[i1][0] += delx*fforce;
      f[i1][1] += dely*fforce;
      f[i1][2] += delz*fforce;
      f[i1][0] += delx*fbond;
      f[i1][1] += dely*fbond;
      f[i1][2] += delz*fbond;
    }

    if (newton_bond || i2 < nlocal) {
      f[i2][0] -= delx*fforce;
      f[i2][1] -= dely*fforce;
      f[i2][2] -= delz*fforce;
      f[i2][0] -= delx*fbond;
      f[i2][1] -= dely*fbond;
      f[i2][2] -= delz*fbond;
    }

    // virial contribution

    if (vflag) {
      virial[0] += rfactor*delx*delx*fforce;
      virial[1] += rfactor*dely*dely*fforce;
      virial[2] += rfactor*delz*delz*fforce;
      virial[3] += rfactor*delx*dely*fforce;
      virial[4] += rfactor*delx*delz*fforce;
      virial[5] += rfactor*dely*delz*fforce;
    }
    if (evflag) ev_tally(i1,i2,nlocal,newton_bond,ebond,fbond,delx,dely,delz);
  }
}

@@ -215,19 +198,12 @@ void BondClass2::read_restart(FILE *fp)

/* ---------------------------------------------------------------------- */

void BondClass2::single(int type, double rsq, int i, int j,
			int eflag, double &fforce, double &eng)
void BondClass2::single(int type, double rsq, int i, int j, double &eng)
{
  double r = sqrt(rsq);
  double dr = r - r0[type];
  double dr2 = dr*dr;
  double dr3 = dr2*dr;
  double dr4 = dr3*dr;

  // force & energy
  
  double de_bond = 2.0*k2[type]*dr + 3.0*k3[type]*dr2 + 4.0*k4[type]*dr3;
  if (r > 0.0) fforce = -de_bond/r;
  else fforce = 0.0;
  if (eflag) eng = k2[type]*dr2 + k3[type]*dr3 + k4[type]*dr4;
  eng = k2[type]*dr2 + k3[type]*dr3 + k4[type]*dr4;
}
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ class BondClass2 : public Bond {
  double equilibrium_distance(int);
  void write_restart(FILE *);
  void read_restart(FILE *);
  void single(int, double, int, int, int, double &, double &);
  void single(int, double, int, int, double &);

 private:
  double *r0,*k2,*k3,*k4;
Loading