Commit ccc8f29d authored by Steve Plimpton's avatar Steve Plimpton
Browse files

added support for USER-AWPMD package

parent b6374bac
Loading
Loading
Loading
Loading
+17 −8
Original line number Diff line number Diff line
@@ -61,6 +61,20 @@ AtomVecWavepacket::AtomVecWavepacket(LAMMPS *lmp) : AtomVec(lmp)
  setup_fields();
}

/* ----------------------------------------------------------------------
   set local copies of all grow ptrs used by this class, except defaults
   needed in replicate when 2 atom classes exist and it calls pack_restart()
------------------------------------------------------------------------- */

void AtomVecWavepacket::grow_pointers()
{
  q = atom->q;
  spin = atom->spin;
  eradius = atom->eradius;
  ervel = atom->ervel;
  erforce = atom->erforce;
}

/* ----------------------------------------------------------------------
   clear extra forces starting at atom N
   nbytes = # of bytes to clear for a per-atom vector
@@ -68,7 +82,7 @@ AtomVecWavepacket::AtomVecWavepacket(LAMMPS *lmp) : AtomVec(lmp)

void AtomVecWavepacket::force_clear(int n, size_t nbytes)
{
  memset(&atom->erforce[n],0,nbytes);
  memset(&erforce[n],0,nbytes);
}

/* ----------------------------------------------------------------------
@@ -78,7 +92,7 @@ void AtomVecWavepacket::force_clear(int n, size_t nbytes)

void AtomVecWavepacket::create_atom_post(int ilocal)
{
  atom->q[ilocal] = 1.0;
  q[ilocal] = 1.0;
}

/* ----------------------------------------------------------------------
@@ -88,7 +102,7 @@ void AtomVecWavepacket::create_atom_post(int ilocal)

void AtomVecWavepacket::data_atom_post(int ilocal)
{
  atom->ervel[ilocal] = 0.0;
  ervel[ilocal] = 0.0;
}

/* ----------------------------------------------------------------------
@@ -113,33 +127,28 @@ int AtomVecWavepacket::property_atom(char *name)
void AtomVecWavepacket::pack_property_atom(int index, double *buf,
                                           int nvalues, int groupbit)
{
  int *mask = atom->mask;
  int nlocal = atom->nlocal;

  int n = 0;
  if (index == 0) {
    int *spin = atom->spin;
    for (int i = 0; i < nlocal; i++) {
      if (mask[i] & groupbit) buf[n] = spin[i];
      else buf[n] = 0.0;
      n += nvalues;
    }
  } else if (index == 1) {
    double *eradius = atom->eradius;
    for (int i = 0; i < nlocal; i++) {
      if (mask[i] & groupbit) buf[n] = eradius[i];
      else buf[n] = 0.0;
      n += nvalues;
    }
  } else if (index == 2) {
    double *ervel = atom->ervel;
    for (int i = 0; i < nlocal; i++) {
      if (mask[i] & groupbit) buf[n] = ervel[i];
      else buf[n] = 0.0;
      n += nvalues;
    }
  } else if (index == 3) {
    double *erforce = atom->erforce;
    for (int i = 0; i < nlocal; i++) {
      if (mask[i] & groupbit) buf[n] = erforce[i];
      else buf[n] = 0.0;
+6 −0
Original line number Diff line number Diff line
@@ -27,11 +27,17 @@ namespace LAMMPS_NS {
class AtomVecWavepacket : public AtomVec {
public:
  AtomVecWavepacket(class LAMMPS *);

  void grow_pointers();
  void force_clear(int, size_t);
  void create_atom_post(int);
  void data_atom_post(int);
  int property_atom(char *);
  void pack_property_atom(int, double *, int, int);

 private:
  int *spin;
  double *q,*eradius,*ervel,*erforce;
};

}
+13 −13
Original line number Diff line number Diff line
@@ -259,7 +259,7 @@ void PairAWPMDCut::compute(int eflag, int vflag)
      Vector_3 xx=Vector_3(x[i][0],x[i][1],x[i][2]);
      Vector_3 rv=m*Vector_3(v[i][0],v[i][1],v[i][2]);
      double pv=ermscale*m*atom->ervel[i];
      Vector_2 cc=Vector_2(atom->cs[2*i],atom->cs[2*i+1]);
      Vector_2 cc=Vector_2(atom->cs[i][0],atom->cs[i][1]);
      gmap[i]=wpmd->add_split(xx,rv,atom->eradius[i],pv,cc,1.,atom->q[i],i<nlocal ? atom->tag[i] : -atom->tag[i]);
      // resetting for the case constraints were applied
      v[i][0]=rv[0]/m;
@@ -284,7 +284,7 @@ void PairAWPMDCut::compute(int eflag, int vflag)
    } else { // electron
      int iel=gmap[i];
      int s=spin[i] >0 ? 0 : 1;
      wpmd->get_wp_force(s,iel,(Vector_3 *)f[i],(Vector_3 *)(atom->vforce+3*i),atom->erforce+i,atom->ervelforce+i,(Vector_2 *)(atom->csforce+2*i));
      wpmd->get_wp_force(s,iel,(Vector_3 *)f[i],(Vector_3 *)(atom->vforce[i]),atom->erforce+i,atom->ervelforce+i,(Vector_2 *)(atom->csforce[i]));
    }
  }

@@ -671,11 +671,11 @@ void PairAWPMDCut::min_xf_get(int /* ignore */)
  double *eradius = atom->eradius;
  double *erforce = atom->erforce;
  double **v=atom->v;
  double *vforce=atom->vforce;
  double **vforce=atom->vforce;
  double *ervel=atom->ervel;
  double *ervelforce=atom->ervelforce;
  double *cs=atom->cs;
  double *csforce=atom->csforce;
  double **cs=atom->cs;
  double **csforce=atom->csforce;

  int *spin = atom->spin;
  int nlocal = atom->nlocal;
@@ -686,14 +686,14 @@ void PairAWPMDCut::min_xf_get(int /* ignore */)
      min_varforce[7*i] = eradius[i]*erforce[i];
      for(int j=0;j<3;j++){
        min_var[7*i+1+3*j] = v[i][j];
        min_varforce[7*i+1+3*j] = vforce[3*i+j];
        min_varforce[7*i+1+3*j] = vforce[i][j];
      }
      min_var[7*i+4] = ervel[i];
      min_varforce[7*i+4] = ervelforce[i];
      min_var[7*i+5] = cs[2*i];
      min_varforce[7*i+5] = csforce[2*i];
      min_var[7*i+6] = cs[2*i+1];
      min_varforce[7*i+6] = csforce[2*i+1];
      min_var[7*i+5] = cs[i][0];
      min_varforce[7*i+5] = csforce[i][0];
      min_var[7*i+6] = cs[i][1];
      min_varforce[7*i+6] = csforce[i][1];

    } else {
      for(int j=0;j<7;j++)
@@ -710,7 +710,7 @@ void PairAWPMDCut::min_x_set(int /* ignore */)
  double *eradius = atom->eradius;
  double **v=atom->v;
  double *ervel=atom->ervel;
  double *cs=atom->cs;
  double **cs=atom->cs;

  int *spin = atom->spin;
  int nlocal = atom->nlocal;
@@ -721,8 +721,8 @@ void PairAWPMDCut::min_x_set(int /* ignore */)
      for(int j=0;j<3;j++)
        v[i][j]=min_var[7*i+1+3*j];
      ervel[i]=min_var[7*i+4];
      cs[2*i]=min_var[7*i+5];
      cs[2*i+1]=min_var[7*i+6];
      cs[i][0]=min_var[7*i+5];
      cs[i][1]=min_var[7*i+6];
    }
  }
}
+1 −1
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ AtomVecSMD::AtomVecSMD(LAMMPS *lmp) : AtomVec(lmp)
    "x0 vest vfrac rmass radius contact_radius molecule e "
    "eff_plastic_strain eff_plastic_strain_rate smd_data_9 smd_stress damage";
  fields_data_atom = (char *) 
    "id type molecule vfrac rmass radius contact_radius x";
    "id type molecule vfrac rmass radius contact_radius x0 x";
  fields_data_vel = (char *) "id v";

  // set these array sizes based on defines
+4 −4
Original line number Diff line number Diff line
@@ -134,8 +134,8 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp)

  spin = NULL;
  eradius = ervel = erforce = NULL;
  ervelforce = cs = csforce = NULL;
  vforce = NULL;
  ervelforce = NULL;
  cs = csforce = vforce = NULL;
  etag = NULL;

  // USER-DPD package
@@ -512,8 +512,8 @@ void Atom::peratom_create()

  // USER-AWPMD package

  add_peratom("cs",&cs,DOUBLE,0);
  add_peratom("csforce",&csforce,DOUBLE,0);
  add_peratom("cs",&cs,DOUBLE,2);
  add_peratom("csforce",&csforce,DOUBLE,2);
  add_peratom("vforce",&vforce,DOUBLE,3);
  add_peratom("ervelforce",&ervelforce,DOUBLE,0);
  add_peratom("etag",&etag,INT,0);
Loading