From c4579a75025401d0cd0bcc91ec38e1e4467c810b Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 30 Sep 2020 11:43:01 -0600 Subject: [PATCH 01/38] First commit - added spin/kk style files - modified few necessary files - compiles, but SegFault when running --- src/KOKKOS/Install.sh | 2 + src/KOKKOS/atom_kokkos.cpp | 6 + src/KOKKOS/atom_kokkos.h | 5 + src/KOKKOS/atom_vec_spin_kokkos.cpp | 1308 +++++++++++++++++++++++++++ src/KOKKOS/atom_vec_spin_kokkos.h | 132 +++ src/KOKKOS/kokkos_type.h | 59 ++ src/atom_masks.h | 6 + 7 files changed, 1518 insertions(+) create mode 100644 src/KOKKOS/atom_vec_spin_kokkos.cpp create mode 100644 src/KOKKOS/atom_vec_spin_kokkos.h diff --git a/src/KOKKOS/Install.sh b/src/KOKKOS/Install.sh index 03508578ae..4c5c9d7e1d 100755 --- a/src/KOKKOS/Install.sh +++ b/src/KOKKOS/Install.sh @@ -63,6 +63,8 @@ action atom_vec_bond_kokkos.cpp atom_vec_bond.cpp action atom_vec_bond_kokkos.h atom_vec_bond.h action atom_vec_charge_kokkos.cpp action atom_vec_charge_kokkos.h +action atom_vec_spin_kokkos.cpp +action atom_vec_spin_kokkos.h action atom_vec_dpd_kokkos.cpp atom_vec_dpd.cpp action atom_vec_dpd_kokkos.h atom_vec_dpd.h action atom_vec_full_kokkos.cpp atom_vec_full.cpp diff --git a/src/KOKKOS/atom_kokkos.cpp b/src/KOKKOS/atom_kokkos.cpp index a587494d09..b85b063190 100644 --- a/src/KOKKOS/atom_kokkos.cpp +++ b/src/KOKKOS/atom_kokkos.cpp @@ -76,6 +76,12 @@ AtomKokkos::~AtomKokkos() memoryKK->destroy_kokkos(k_improper_atom3, improper_atom3); memoryKK->destroy_kokkos(k_improper_atom4, improper_atom4); + // SPIN package + + memoryKK->destroy_kokkos(k_sp, sp); + memoryKK->destroy_kokkos(k_fm, fm); + memoryKK->destroy_kokkos(k_fm_long, fm_long); + // USER-DPD package memoryKK->destroy_kokkos(k_uCond,uCond); memoryKK->destroy_kokkos(k_uMech,uMech); diff --git a/src/KOKKOS/atom_kokkos.h b/src/KOKKOS/atom_kokkos.h index 6eebbad661..e2c666fea5 100644 --- a/src/KOKKOS/atom_kokkos.h +++ b/src/KOKKOS/atom_kokkos.h @@ -54,6 +54,11 @@ class AtomKokkos : public Atom { DAT::tdual_float_2d k_dvector; + // SPIN package + + DAT::tdual_sp_array k_sp; + DAT::tdual_fm_array k_fm; + DAT::tdual_fm_long_array k_fm_long; // USER-DPD package DAT::tdual_efloat_1d k_uCond, k_uMech, k_uChem, k_uCG, k_uCGnew, diff --git a/src/KOKKOS/atom_vec_spin_kokkos.cpp b/src/KOKKOS/atom_vec_spin_kokkos.cpp new file mode 100644 index 0000000000..c5c2ffb5be --- /dev/null +++ b/src/KOKKOS/atom_vec_spin_kokkos.cpp @@ -0,0 +1,1308 @@ +/* ---------------------------------------------------------------------- + + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. + +------------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------------ + Contributing authors: Julien Tranchida (SNL) + Aidan Thompson (SNL) + + Please cite the related publication: + Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). + Massively parallel symplectic algorithm for coupled magnetic spin dynamics + and molecular dynamics. Journal of Computational Physics. +------------------------------------------------------------------------- */ + +#include "atom_vec_spin_kokkos.h" + +#include "atom_kokkos.h" +#include "atom_masks.h" +#include "comm_kokkos.h" +#include "domain.h" +#include "error.h" +#include "fix.h" +#include "memory_kokkos.h" +#include "modify.h" + +using namespace LAMMPS_NS; + +#define DELTA 10 + +/* ---------------------------------------------------------------------- */ + +AtomVecSpinKokkos::AtomVecSpinKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) +{ + molecular = 0; + mass_type = 1; + forceclearflag = 1; + + comm_x_only = comm_f_only = 0; + size_forward = 7; + size_reverse = 9; + size_border = 10; + size_velocity = 3; + size_data_atom = 9; + size_data_vel = 4; + xcol_data = 4; + + atom->sp_flag = 1; + + k_count = DAT::tdual_int_1d("atom::k_count",1); + atomKK = (AtomKokkos *) atom; + commKK = (CommKokkos *) comm; +} + +/* ---------------------------------------------------------------------- + grow atom arrays + n = 0 grows arrays by a chunk + n > 0 allocates arrays to size n +------------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::grow(int n) +{ + int step = MAX(DELTA,nmax*0.01); + if (n == 0) nmax += step; + else nmax = n; + atomKK->nmax = nmax; + if (nmax < 0 || nmax > MAXSMALLINT) + error->one(FLERR,"Per-processor system is too big"); + + atomKK->sync(Device,ALL_MASK); + atomKK->modified(Device,ALL_MASK); + + memoryKK->grow_kokkos(atomKK->k_tag,atomKK->tag,nmax,"atom:tag"); + memoryKK->grow_kokkos(atomKK->k_type,atomKK->type,nmax,"atom:type"); + memoryKK->grow_kokkos(atomKK->k_mask,atomKK->mask,nmax,"atom:mask"); + memoryKK->grow_kokkos(atomKK->k_image,atomKK->image,nmax,"atom:image"); + + // allocating mech. quantities + + memoryKK->grow_kokkos(atomKK->k_x,atomKK->x,nmax,"atom:x"); + memoryKK->grow_kokkos(atomKK->k_v,atomKK->v,nmax,"atom:v"); + memoryKK->grow_kokkos(atomKK->k_f,atomKK->f,nmax,"atom:f"); + + // allocating mag. quantities + + memoryKK->grow_kokkos(atomKK->k_sp,atomKK->sp,nmax,"atom:sp"); + memoryKK->grow_kokkos(atomKK->k_fm,atomKK->fm,nmax,"atom:fm"); + memoryKK->grow_kokkos(atomKK->k_fm_long,atomKK->fm_long,nmax,"atom:fm_long"); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); +} + +/* ---------------------------------------------------------------------- + reset local array ptrs +------------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::grow_reset() +{ + tag = atomKK->tag; + d_tag = atomKK->k_tag.d_view; + h_tag = atomKK->k_tag.h_view; + + type = atomKK->type; + d_type = atomKK->k_type.d_view; + h_type = atomKK->k_type.h_view; + mask = atomKK->mask; + d_mask = atomKK->k_mask.d_view; + h_mask = atomKK->k_mask.h_view; + image = atomKK->image; + d_image = atomKK->k_image.d_view; + h_image = atomKK->k_image.h_view; + + x = atomKK->x; + d_x = atomKK->k_x.d_view; + h_x = atomKK->k_x.h_view; + v = atomKK->v; + d_v = atomKK->k_v.d_view; + h_v = atomKK->k_v.h_view; + f = atomKK->f; + d_f = atomKK->k_f.d_view; + h_f = atomKK->k_f.h_view; + + sp = atomKK->sp; + d_sp = atomKK->k_sp.d_view; + h_sp = atomKK->k_sp.h_view; + fm = atomKK->fm; + d_fm = atomKK->k_fm.d_view; + h_fm = atomKK->k_fm.h_view; + fm_long = atomKK->fm_long; + d_fm_long = atomKK->k_fm_long.d_view; + h_fm_long = atomKK->k_fm_long.h_view; +} + +/* ---------------------------------------------------------------------- + copy atom I info to atom J +------------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::copy(int i, int j, int delflag) +{ + h_tag[j] = h_tag[i]; + h_type[j] = h_type[i]; + mask[j] = mask[i]; + h_image[j] = h_image[i]; + h_x(j,0) = h_x(i,0); + h_x(j,1) = h_x(i,1); + h_x(j,2) = h_x(i,2); + h_v(j,0) = h_v(i,0); + h_v(j,1) = h_v(i,1); + h_v(j,2) = h_v(i,2); + + h_sp(j,0) = h_sp(i,0); + h_sp(j,1) = h_sp(i,1); + h_sp(j,2) = h_sp(i,2); + h_sp(j,3) = h_sp(i,3); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); +} + +/* ---------------------------------------------------------------------- */ + +template +struct AtomVecSpinKokkos_PackComm { + typedef DeviceType device_type; + + typename ArrayTypes::t_x_array_randomread _x; + typename ArrayTypes::t_sp_array_randomread _sp; + typename ArrayTypes::t_xfloat_2d_um _buf; + typename ArrayTypes::t_int_2d_const _list; + const int _iswap; + X_FLOAT _xprd,_yprd,_zprd,_xy,_xz,_yz; + X_FLOAT _pbc[6]; + + AtomVecSpinKokkos_PackComm( + const typename DAT::tdual_x_array &x, + const typename DAT::tdual_sp_array &sp, + const typename DAT::tdual_xfloat_2d &buf, + const typename DAT::tdual_int_2d &list, + const int & iswap, + const X_FLOAT &xprd, const X_FLOAT &yprd, const X_FLOAT &zprd, + const X_FLOAT &xy, const X_FLOAT &xz, const X_FLOAT &yz, const int* const pbc): + _x(x.view()),_sp(sp.view()), + _list(list.view()),_iswap(iswap), + _xprd(xprd),_yprd(yprd),_zprd(zprd), + _xy(xy),_xz(xz),_yz(yz) { + const size_t maxsend = (buf.view().extent(0)*buf.view().extent(1))/3; + // const size_t elements = 3; + const size_t elements = 7; + buffer_view(_buf,buf,maxsend,elements); + _pbc[0] = pbc[0]; _pbc[1] = pbc[1]; _pbc[2] = pbc[2]; + _pbc[3] = pbc[3]; _pbc[4] = pbc[4]; _pbc[5] = pbc[5]; + }; + + KOKKOS_INLINE_FUNCTION + void operator() (const int& i) const { + const int j = _list(_iswap,i); + if (PBC_FLAG == 0) { + _buf(i,0) = _x(j,0); + _buf(i,1) = _x(j,1); + _buf(i,2) = _x(j,2); + _buf(i,3) = _sp(j,0); + _buf(i,4) = _sp(j,1); + _buf(i,5) = _sp(j,2); + _buf(i,6) = _sp(j,3); + } else { + if (TRICLINIC == 0) { + _buf(i,0) = _x(j,0) + _pbc[0]*_xprd; + _buf(i,1) = _x(j,1) + _pbc[1]*_yprd; + _buf(i,2) = _x(j,2) + _pbc[2]*_zprd; + _buf(i,3) = _sp(j,0); + _buf(i,4) = _sp(j,1); + _buf(i,5) = _sp(j,2); + _buf(i,6) = _sp(j,3); + } else { + _buf(i,0) = _x(j,0) + _pbc[0]*_xprd + _pbc[5]*_xy + _pbc[4]*_xz; + _buf(i,1) = _x(j,1) + _pbc[1]*_yprd + _pbc[3]*_yz; + _buf(i,2) = _x(j,2) + _pbc[2]*_zprd; + _buf(i,3) = _sp(j,0); + _buf(i,4) = _sp(j,1); + _buf(i,5) = _sp(j,2); + _buf(i,6) = _sp(j,3); + } + } + } +}; + +/* ---------------------------------------------------------------------- */ + +template +struct AtomVecSpinKokkos_PackBorder { + typedef DeviceType device_type; + + typename ArrayTypes::t_xfloat_2d _buf; + const typename ArrayTypes::t_int_2d_const _list; + const int _iswap; + const typename ArrayTypes::t_x_array_randomread _x; + const typename ArrayTypes::t_tagint_1d _tag; + const typename ArrayTypes::t_int_1d _type; + const typename ArrayTypes::t_int_1d _mask; + const typename ArrayTypes::t_sp_array_randomread _sp; + X_FLOAT _dx,_dy,_dz; + + AtomVecSpinKokkos_PackBorder( + const typename ArrayTypes::t_xfloat_2d &buf, + const typename ArrayTypes::t_int_2d_const &list, + const int & iswap, + const typename ArrayTypes::t_x_array &x, + const typename ArrayTypes::t_tagint_1d &tag, + const typename ArrayTypes::t_int_1d &type, + const typename ArrayTypes::t_int_1d &mask, + const typename ArrayTypes::t_sp_array &sp, + const X_FLOAT &dx, const X_FLOAT &dy, const X_FLOAT &dz): + _buf(buf),_list(list),_iswap(iswap), + _x(x),_tag(tag),_type(type),_mask(mask),_sp(sp), + _dx(dx),_dy(dy),_dz(dz) {} + + KOKKOS_INLINE_FUNCTION + void operator() (const int& i) const { + const int j = _list(_iswap,i); + if (PBC_FLAG == 0) { + _buf(i,0) = _x(j,0); + _buf(i,1) = _x(j,1); + _buf(i,2) = _x(j,2); + _buf(i,3) = d_ubuf(_tag(j)).d; + _buf(i,4) = d_ubuf(_type(j)).d; + _buf(i,5) = d_ubuf(_mask(j)).d; + _buf(i,6) = _sp(j,0); + _buf(i,7) = _sp(j,1); + _buf(i,8) = _sp(j,2); + _buf(i,9) = _sp(j,3); + } else { + _buf(i,0) = _x(j,0) + _dx; + _buf(i,1) = _x(j,1) + _dy; + _buf(i,2) = _x(j,2) + _dz; + _buf(i,3) = d_ubuf(_tag(j)).d; + _buf(i,4) = d_ubuf(_type(j)).d; + _buf(i,5) = d_ubuf(_mask(j)).d; + _buf(i,6) = _sp(j,0); + _buf(i,7) = _sp(j,1); + _buf(i,8) = _sp(j,2); + _buf(i,9) = _sp(j,3); + } + } +}; + +/* ---------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, + int pbc_flag, int *pbc, ExecutionSpace space) +{ + X_FLOAT dx,dy,dz; + + if (pbc_flag != 0) { + if (domain->triclinic == 0) { + dx = pbc[0]*domain->xprd; + dy = pbc[1]*domain->yprd; + dz = pbc[2]*domain->zprd; + } else { + dx = pbc[0]; + dy = pbc[1]; + dz = pbc[2]; + } + if(space==Host) { + AtomVecSpinKokkos_PackBorder f( + buf.view(), k_sendlist.view(), + iswap,h_x,h_tag,h_type,h_mask,h_sp,dx,dy,dz); + Kokkos::parallel_for(n,f); + } else { + AtomVecSpinKokkos_PackBorder f( + buf.view(), k_sendlist.view(), + iswap,d_x,d_tag,d_type,d_mask,d_sp,dx,dy,dz); + Kokkos::parallel_for(n,f); + } + + } else { + dx = dy = dz = 0; + if(space==Host) { + AtomVecSpinKokkos_PackBorder f( + buf.view(), k_sendlist.view(), + iswap,h_x,h_tag,h_type,h_mask,h_sp,dx,dy,dz); + Kokkos::parallel_for(n,f); + } else { + AtomVecSpinKokkos_PackBorder f( + buf.view(), k_sendlist.view(), + iswap,d_x,d_tag,d_type,d_mask,d_sp,dx,dy,dz); + Kokkos::parallel_for(n,f); + } + } + return n*size_border; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::pack_border(int n, int *list, double *buf, + int pbc_flag, int *pbc) +{ + int i,j,m; + double dx,dy,dz; + + m = 0; + if (pbc_flag == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = h_x(j,0); + buf[m++] = h_x(j,1); + buf[m++] = h_x(j,2); + buf[m++] = ubuf(h_tag(j)).d; + buf[m++] = ubuf(h_type(j)).d; + buf[m++] = ubuf(h_mask(j)).d; + buf[m++] = h_sp(j,0); + buf[m++] = h_sp(j,1); + buf[m++] = h_sp(j,2); + buf[m++] = h_sp(j,3); + } + } else { + if (domain->triclinic == 0) { + dx = pbc[0]*domain->xprd; + dy = pbc[1]*domain->yprd; + dz = pbc[2]*domain->zprd; + } else { + dx = pbc[0]; + dy = pbc[1]; + dz = pbc[2]; + } + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = h_x(j,0) + dx; + buf[m++] = h_x(j,1) + dy; + buf[m++] = h_x(j,2) + dz; + buf[m++] = ubuf(h_tag(j)).d; + buf[m++] = ubuf(h_type(j)).d; + buf[m++] = ubuf(h_mask(j)).d; + buf[m++] = h_sp(j,0); + buf[m++] = h_sp(j,1); + buf[m++] = h_sp(j,2); + buf[m++] = h_sp(j,3); + } + } + + if (atom->nextra_border) + for (int iextra = 0; iextra < atom->nextra_border; iextra++) + m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); + + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::pack_border_vel(int n, int *list, double *buf, + int pbc_flag, int *pbc) +{ + int i,j,m; + double dx,dy,dz,dvx,dvy,dvz; + + m = 0; + if (pbc_flag == 0) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = h_x(j,0); + buf[m++] = h_x(j,1); + buf[m++] = h_x(j,2); + buf[m++] = ubuf(h_tag(j)).d; + buf[m++] = ubuf(h_type(j)).d; + buf[m++] = ubuf(h_mask(j)).d; + buf[m++] = h_sp(j,0); + buf[m++] = h_sp(j,1); + buf[m++] = h_sp(j,2); + buf[m++] = h_sp(j,3); + buf[m++] = h_v(j,0); + buf[m++] = h_v(j,1); + buf[m++] = h_v(j,2); + } + } else { + if (domain->triclinic == 0) { + dx = pbc[0]*domain->xprd; + dy = pbc[1]*domain->yprd; + dz = pbc[2]*domain->zprd; + } else { + dx = pbc[0]; + dy = pbc[1]; + dz = pbc[2]; + } + if (!deform_vremap) { + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = h_x(j,0) + dx; + buf[m++] = h_x(j,1) + dy; + buf[m++] = h_x(j,2) + dz; + buf[m++] = ubuf(h_tag(j)).d; + buf[m++] = ubuf(h_type(j)).d; + buf[m++] = ubuf(h_mask(j)).d; + buf[m++] = h_sp(j,0); + buf[m++] = h_sp(j,1); + buf[m++] = h_sp(j,2); + buf[m++] = h_sp(j,3); + buf[m++] = h_v(j,0); + buf[m++] = h_v(j,1); + buf[m++] = h_v(j,2); + } + } else { + dvx = pbc[0]*h_rate[0] + pbc[5]*h_rate[5] + pbc[4]*h_rate[4]; + dvy = pbc[1]*h_rate[1] + pbc[3]*h_rate[3]; + dvz = pbc[2]*h_rate[2]; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = h_x(j,0) + dx; + buf[m++] = h_x(j,1) + dy; + buf[m++] = h_x(j,2) + dz; + buf[m++] = ubuf(h_tag(j)).d; + buf[m++] = ubuf(h_type(j)).d; + buf[m++] = ubuf(h_mask(j)).d; + buf[m++] = h_sp(j,0); + buf[m++] = h_sp(j,1); + buf[m++] = h_sp(j,2); + buf[m++] = h_sp(j,3); + if (mask[i] & deform_groupbit) { + buf[m++] = h_v(j,0) + dvx; + buf[m++] = h_v(j,1) + dvy; + buf[m++] = h_v(j,2) + dvz; + } else { + buf[m++] = h_v(j,0); + buf[m++] = h_v(j,1); + buf[m++] = h_v(j,2); + } + } + } + } + + if (atom->nextra_border) + for (int iextra = 0; iextra < atom->nextra_border; iextra++) + m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); + + return m; +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::pack_border_hybrid(int n, int *list, double *buf) +{ + int i,j,m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = h_sp(j,0); + buf[m++] = h_sp(j,1); + buf[m++] = h_sp(j,2); + buf[m++] = h_sp(j,3); + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +template +struct AtomVecSpinKokkos_UnpackBorder { + typedef DeviceType device_type; + + const typename ArrayTypes::t_xfloat_2d_const _buf; + typename ArrayTypes::t_x_array _x; + typename ArrayTypes::t_tagint_1d _tag; + typename ArrayTypes::t_int_1d _type; + typename ArrayTypes::t_int_1d _mask; + typename ArrayTypes::t_sp_array _sp; + int _first; + + + AtomVecSpinKokkos_UnpackBorder( + const typename ArrayTypes::t_xfloat_2d_const &buf, + typename ArrayTypes::t_x_array &x, + typename ArrayTypes::t_tagint_1d &tag, + typename ArrayTypes::t_int_1d &type, + typename ArrayTypes::t_int_1d &mask, + typename ArrayTypes::t_sp_array &sp, + const int& first): + _buf(buf),_x(x),_tag(tag),_type(type),_mask(mask),_sp(sp),_first(first){ + }; + + KOKKOS_INLINE_FUNCTION + void operator() (const int& i) const { + _x(i+_first,0) = _buf(i,0); + _x(i+_first,1) = _buf(i,1); + _x(i+_first,2) = _buf(i,2); + _tag(i+_first) = (tagint) d_ubuf(_buf(i,3)).i; + _type(i+_first) = (int) d_ubuf(_buf(i,4)).i; + _mask(i+_first) = (int) d_ubuf(_buf(i,5)).i; + _sp(i+_first,0) = _buf(i,6); + _sp(i+_first,1) = _buf(i,7); + _sp(i+_first,2) = _buf(i,8); + _sp(i+_first,3) = _buf(i,9); + } +}; + +/* ---------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::unpack_border_kokkos(const int &n, const int &first, + const DAT::tdual_xfloat_2d &buf,ExecutionSpace space) { + if (first+n >= nmax) { + grow(first+n+100); + } + if(space==Host) { + struct AtomVecSpinKokkos_UnpackBorder + f(buf.view(),h_x,h_tag,h_type,h_mask,h_sp,first); + Kokkos::parallel_for(n,f); + } else { + struct AtomVecSpinKokkos_UnpackBorder + f(buf.view(),d_x,d_tag,d_type,d_mask,d_sp,first); + Kokkos::parallel_for(n,f); + } + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|SP_MASK); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::unpack_border(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + + for (i = first; i < last; i++) { + if (i == nmax) { + grow(0); + } + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|SP_MASK); + h_x(i,0) = buf[m++]; + h_x(i,1) = buf[m++]; + h_x(i,2) = buf[m++]; + h_tag(i) = (tagint) ubuf(buf[m++]).i; + h_type(i) = (int) ubuf(buf[m++]).i; + h_mask(i) = (int) ubuf(buf[m++]).i; + h_sp(i,0) = buf[m++]; + h_sp(i,1) = buf[m++]; + h_sp(i,2) = buf[m++]; + h_sp(i,3) = buf[m++]; + } + + if (atom->nextra_border) + for (int iextra = 0; iextra < atom->nextra_border; iextra++) + m += modify->fix[atom->extra_border[iextra]]-> + unpack_border(n,first,&buf[m]); +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::unpack_border_vel(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + if (i == nmax) grow(0); + atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|SP_MASK); + h_x(i,0) = buf[m++]; + h_x(i,1) = buf[m++]; + h_x(i,2) = buf[m++]; + h_tag(i) = (tagint) ubuf(buf[m++]).i; + h_type(i) = (int) ubuf(buf[m++]).i; + h_mask(i) = (int) ubuf(buf[m++]).i; + h_sp(i,0) = buf[m++]; + h_sp(i,1) = buf[m++]; + h_sp(i,2) = buf[m++]; + h_sp(i,3) = buf[m++]; + h_v(i,0) = buf[m++]; + h_v(i,1) = buf[m++]; + h_v(i,2) = buf[m++]; + } + + if (atom->nextra_border) + for (int iextra = 0; iextra < atom->nextra_border; iextra++) + m += modify->fix[atom->extra_border[iextra]]-> + unpack_border(n,first,&buf[m]); +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::unpack_border_hybrid(int n, int first, double *buf) +{ + int i,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) + h_sp(i,0) = buf[m++]; + h_sp(i,1) = buf[m++]; + h_sp(i,2) = buf[m++]; + h_sp(i,3) = buf[m++]; + return m; +} + +/* ---------------------------------------------------------------------- */ + +template +struct AtomVecSpinKokkos_PackExchangeFunctor { + typedef DeviceType device_type; + typedef ArrayTypes AT; + typename AT::t_x_array_randomread _x; + typename AT::t_v_array_randomread _v; + typename AT::t_tagint_1d_randomread _tag; + typename AT::t_int_1d_randomread _type; + typename AT::t_int_1d_randomread _mask; + typename AT::t_imageint_1d_randomread _image; + typename AT::t_sp_array_randomread _sp; + typename AT::t_x_array _xw; + typename AT::t_v_array _vw; + typename AT::t_tagint_1d _tagw; + typename AT::t_int_1d _typew; + typename AT::t_int_1d _maskw; + typename AT::t_imageint_1d _imagew; + typename AT::t_sp_array _spw; + + typename AT::t_xfloat_2d_um _buf; + typename AT::t_int_1d_const _sendlist; + typename AT::t_int_1d_const _copylist; + int _nlocal,_dim; + X_FLOAT _lo,_hi; + + AtomVecSpinKokkos_PackExchangeFunctor( + const AtomKokkos* atom, + const typename AT::tdual_xfloat_2d buf, + typename AT::tdual_int_1d sendlist, + typename AT::tdual_int_1d copylist,int nlocal, int dim, + X_FLOAT lo, X_FLOAT hi): + _x(atom->k_x.view()), + _v(atom->k_v.view()), + _tag(atom->k_tag.view()), + _type(atom->k_type.view()), + _mask(atom->k_mask.view()), + _image(atom->k_image.view()), + _sp(atom->k_sp.view()), + _xw(atom->k_x.view()), + _vw(atom->k_v.view()), + _tagw(atom->k_tag.view()), + _typew(atom->k_type.view()), + _maskw(atom->k_mask.view()), + _imagew(atom->k_image.view()), + _spw(atom->k_sp.view()), + _sendlist(sendlist.template view()), + _copylist(copylist.template view()), + _nlocal(nlocal),_dim(dim), + _lo(lo),_hi(hi){ + const size_t elements = 15; + const int maxsendlist = (buf.template view().extent(0)* + buf.template view().extent(1))/elements; + + buffer_view(_buf,buf,maxsendlist,elements); + } + + KOKKOS_INLINE_FUNCTION + void operator() (const int &mysend) const { + const int i = _sendlist(mysend); + _buf(mysend,0) = 15; + _buf(mysend,1) = _x(i,0); + _buf(mysend,2) = _x(i,1); + _buf(mysend,3) = _x(i,2); + _buf(mysend,4) = _v(i,0); + _buf(mysend,5) = _v(i,1); + _buf(mysend,6) = _v(i,2); + _buf(mysend,7) = d_ubuf(_tag[i]).d; + _buf(mysend,8) = d_ubuf(_type[i]).d; + _buf(mysend,9) = d_ubuf(_mask[i]).d; + _buf(mysend,10) = d_ubuf(_image[i]).d; + _buf(mysend,11) = _sp(i,0); + _buf(mysend,12) = _sp(i,1); + _buf(mysend,13) = _sp(i,2); + _buf(mysend,14) = _sp(i,3); + const int j = _copylist(mysend); + + if(j>-1) { + _xw(i,0) = _x(j,0); + _xw(i,1) = _x(j,1); + _xw(i,2) = _x(j,2); + _vw(i,0) = _v(j,0); + _vw(i,1) = _v(j,1); + _vw(i,2) = _v(j,2); + _tagw(i) = _tag(j); + _typew(i) = _type(j); + _maskw(i) = _mask(j); + _imagew(i) = _image(j); + _spw(i,0) = _sp(j,0); + _spw(i,1) = _sp(j,1); + _spw(i,2) = _sp(j,2); + _spw(i,3) = _sp(j,3); + } + } +}; + +/* ---------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2d &k_buf, + DAT::tdual_int_1d k_sendlist, + DAT::tdual_int_1d k_copylist, + ExecutionSpace space,int dim, + X_FLOAT lo,X_FLOAT hi ) +{ + if(nsend > (int) (k_buf.view().extent(0)*k_buf.view().extent(1))/15) { + int newsize = nsend*15/k_buf.view().extent(1)+1; + k_buf.resize(newsize,k_buf.view().extent(1)); + } + if(space == Host) { + AtomVecSpinKokkos_PackExchangeFunctor + f(atomKK,k_buf,k_sendlist,k_copylist,atom->nlocal,dim,lo,hi); + Kokkos::parallel_for(nsend,f); + return nsend*15; + } else { + AtomVecSpinKokkos_PackExchangeFunctor + f(atomKK,k_buf,k_sendlist,k_copylist,atom->nlocal,dim,lo,hi); + Kokkos::parallel_for(nsend,f); + return nsend*15; + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::pack_exchange(int i, double *buf) +{ + int m = 1; + buf[m++] = h_x(i,0); + buf[m++] = h_x(i,1); + buf[m++] = h_x(i,2); + buf[m++] = h_v(i,0); + buf[m++] = h_v(i,1); + buf[m++] = h_v(i,2); + buf[m++] = ubuf(h_tag(i)).d; + buf[m++] = ubuf(h_type(i)).d; + buf[m++] = ubuf(h_mask(i)).d; + buf[m++] = ubuf(h_image(i)).d; + buf[m++] = h_sp(i,0); + buf[m++] = h_sp(i,1); + buf[m++] = h_sp(i,2); + buf[m++] = h_sp(i,3); + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + m += modify->fix[atom->extra_grow[iextra]]->pack_exchange(i,&buf[m]); + + buf[0] = m; + return m; +} + +/* ---------------------------------------------------------------------- */ + +template +struct AtomVecSpinKokkos_UnpackExchangeFunctor { + typedef DeviceType device_type; + typedef ArrayTypes AT; + typename AT::t_x_array _x; + typename AT::t_v_array _v; + typename AT::t_tagint_1d _tag; + typename AT::t_int_1d _type; + typename AT::t_int_1d _mask; + typename AT::t_imageint_1d _image; + typename AT::t_sp_array _sp; + typename AT::t_xfloat_2d_um _buf; + typename AT::t_int_1d _nlocal; + int _dim; + X_FLOAT _lo,_hi; + + AtomVecSpinKokkos_UnpackExchangeFunctor( + const AtomKokkos* atom, + const typename AT::tdual_xfloat_2d buf, + typename AT::tdual_int_1d nlocal, + int dim, X_FLOAT lo, X_FLOAT hi): + _x(atom->k_x.view()), + _v(atom->k_v.view()), + _tag(atom->k_tag.view()), + _type(atom->k_type.view()), + _mask(atom->k_mask.view()), + _image(atom->k_image.view()), + _sp(atom->k_sp.view()), + _nlocal(nlocal.template view()),_dim(dim), + _lo(lo),_hi(hi){ + const size_t elements = 15; + const int maxsendlist = (buf.template view().extent(0)*buf.template view().extent(1))/elements; + + buffer_view(_buf,buf,maxsendlist,elements); + } + + KOKKOS_INLINE_FUNCTION + void operator() (const int &myrecv) const { + X_FLOAT x = _buf(myrecv,_dim+1); + if (x >= _lo && x < _hi) { + int i = Kokkos::atomic_fetch_add(&_nlocal(0),1); + _x(i,0) = _buf(myrecv,1); + _x(i,1) = _buf(myrecv,2); + _x(i,2) = _buf(myrecv,3); + _v(i,0) = _buf(myrecv,4); + _v(i,1) = _buf(myrecv,5); + _v(i,2) = _buf(myrecv,6); + _tag[i] = (tagint) d_ubuf(_buf(myrecv,7)).i; + _type[i] = (int) d_ubuf(_buf(myrecv,8)).i; + _mask[i] = (int) d_ubuf(_buf(myrecv,9)).i; + _image[i] = (imageint) d_ubuf(_buf(myrecv,10)).i; + _sp(i,0) = _buf(myrecv,11); + _sp(i,1) = _buf(myrecv,12); + _sp(i,2) = _buf(myrecv,13); + _sp(i,3) = _buf(myrecv,14); + } + } +}; + +/* ---------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int nrecv, + int nlocal,int dim,X_FLOAT lo,X_FLOAT hi, + ExecutionSpace space) { + if(space == Host) { + k_count.h_view(0) = nlocal; + AtomVecSpinKokkos_UnpackExchangeFunctor f(atomKK,k_buf,k_count,dim,lo,hi); + Kokkos::parallel_for(nrecv/15,f); + return k_count.h_view(0); + } else { + k_count.h_view(0) = nlocal; + k_count.modify(); + k_count.sync(); + AtomVecSpinKokkos_UnpackExchangeFunctor + f(atomKK,k_buf,k_count,dim,lo,hi); + Kokkos::parallel_for(nrecv/15,f); + k_count.modify(); + k_count.sync(); + + return k_count.h_view(0); + } +} + +/* ---------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::unpack_exchange(double *buf) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + MASK_MASK | IMAGE_MASK | SP_MASK); + + int m = 1; + h_x(nlocal,0) = buf[m++]; + h_x(nlocal,1) = buf[m++]; + h_x(nlocal,2) = buf[m++]; + h_v(nlocal,0) = buf[m++]; + h_v(nlocal,1) = buf[m++]; + h_v(nlocal,2) = buf[m++]; + h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; + h_type(nlocal) = (int) ubuf(buf[m++]).i; + h_mask(nlocal) = (int) ubuf(buf[m++]).i; + h_image(nlocal) = (imageint) ubuf(buf[m++]).i; + h_sp(nlocal,0) = buf[m++]; + h_sp(nlocal,1) = buf[m++]; + h_sp(nlocal,2) = buf[m++]; + h_sp(nlocal,3) = buf[m++]; + + if (atom->nextra_grow) + for (int iextra = 0; iextra < atom->nextra_grow; iextra++) + m += modify->fix[atom->extra_grow[iextra]]-> + unpack_exchange(nlocal,&buf[m]); + + atom->nlocal++; + return m; +} + +/* ---------------------------------------------------------------------- + size of restart data for all atoms owned by this proc + include extra data stored by fixes +------------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::size_restart() +{ + int i; + + int nlocal = atom->nlocal; + int n = 15 * nlocal; + + if (atom->nextra_restart) + for (int iextra = 0; iextra < atom->nextra_restart; iextra++) + for (i = 0; i < nlocal; i++) + n += modify->fix[atom->extra_restart[iextra]]->size_restart(i); + + return n; +} + +/* ---------------------------------------------------------------------- + pack atom I's data for restart file including extra quantities + xyz must be 1st 3 values, so that read_restart can test on them + molecular types may be negative, but write as positive +------------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::pack_restart(int i, double *buf) +{ + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + MASK_MASK | IMAGE_MASK | SP_MASK); + + int m = 1; + buf[m++] = h_x(i,0); + buf[m++] = h_x(i,1); + buf[m++] = h_x(i,2); + buf[m++] = ubuf(h_tag(i)).d; + buf[m++] = ubuf(h_type(i)).d; + buf[m++] = ubuf(h_mask(i)).d; + buf[m++] = ubuf(h_image(i)).d; + buf[m++] = h_v(i,0); + buf[m++] = h_v(i,1); + buf[m++] = h_v(i,2); + + buf[m++] = h_sp(i,0); + buf[m++] = h_sp(i,1); + buf[m++] = h_sp(i,2); + buf[m++] = h_sp(i,3); + + if (atom->nextra_restart) + for (int iextra = 0; iextra < atom->nextra_restart; iextra++) + m += modify->fix[atom->extra_restart[iextra]]->pack_restart(i,&buf[m]); + + buf[0] = m; + return m; +} + +/* ---------------------------------------------------------------------- + unpack data for one atom from restart file including extra quantities +------------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::unpack_restart(double *buf) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) { + grow(0); + if (atom->nextra_store) + memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); + } + + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + MASK_MASK | IMAGE_MASK | SP_MASK); + + int m = 1; + h_x(nlocal,0) = buf[m++]; + h_x(nlocal,1) = buf[m++]; + h_x(nlocal,2) = buf[m++]; + h_tag(nlocal) = (tagint) ubuf(buf[m++]).i; + h_type(nlocal) = (int) ubuf(buf[m++]).i; + h_mask(nlocal) = (int) ubuf(buf[m++]).i; + h_image(nlocal) = (imageint) ubuf(buf[m++]).i; + h_v(nlocal,0) = buf[m++]; + h_v(nlocal,1) = buf[m++]; + h_v(nlocal,2) = buf[m++]; + + h_sp(nlocal,0) = buf[m++]; + h_sp(nlocal,1) = buf[m++]; + h_sp(nlocal,2) = buf[m++]; + h_sp(nlocal,3) = buf[m++]; + + double **extra = atom->extra; + if (atom->nextra_store) { + int size = static_cast (buf[0]) - m; + for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; + } + + atom->nlocal++; + return m; +} + +/* ---------------------------------------------------------------------- + create one atom of itype at coord + set other values to defaults +------------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::create_atom(int itype, double *coord) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) { + atomKK->modified(Host,ALL_MASK); + grow(0); + } + atomKK->sync(Host,ALL_MASK); + atomKK->modified(Host,ALL_MASK); + + tag[nlocal] = 0; + type[nlocal] = itype; + h_x(nlocal,0) = coord[0]; + h_x(nlocal,1) = coord[1]; + h_x(nlocal,2) = coord[2]; + h_mask[nlocal] = 1; + h_image[nlocal] = ((imageint) IMGMAX << IMG2BITS) | + ((imageint) IMGMAX << IMGBITS) | IMGMAX; + h_v(nlocal,0) = 0.0; + h_v(nlocal,1) = 0.0; + h_v(nlocal,2) = 0.0; + + h_sp(nlocal,0) = 0.0; + h_sp(nlocal,1) = 0.0; + h_sp(nlocal,2) = 0.0; + h_sp(nlocal,3) = 0.0; + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + unpack one line from Atoms section of data file + initialize other atom quantities +------------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::data_atom(double *coord, imageint imagetmp, + char **values) +{ + int nlocal = atom->nlocal; + if (nlocal == nmax) grow(0); + + h_tag[nlocal] = utils::inumeric(FLERR,values[0],true,lmp); + h_type[nlocal] = utils::inumeric(FLERR,values[1],true,lmp); + if (type[nlocal] <= 0 || type[nlocal] > atom->ntypes) + error->one(FLERR,"Invalid atom type in Atoms section of data file"); + + h_sp(nlocal,3) = utils::numeric(FLERR,values[2],true,lmp); + h_sp(nlocal,0) = utils::numeric(FLERR,values[6],true,lmp); + h_sp(nlocal,1) = utils::numeric(FLERR,values[7],true,lmp); + h_sp(nlocal,2) = utils::numeric(FLERR,values[8],true,lmp); + double inorm = 1.0/sqrt(sp[nlocal][0]*sp[nlocal][0] + + sp[nlocal][1]*sp[nlocal][1] + + sp[nlocal][2]*sp[nlocal][2]); + h_sp(nlocal,0) *= inorm; + h_sp(nlocal,1) *= inorm; + h_sp(nlocal,2) *= inorm; + + h_x(nlocal,0) = coord[0]; + h_x(nlocal,1) = coord[1]; + h_x(nlocal,2) = coord[2]; + + h_image[nlocal] = imagetmp; + + h_mask[nlocal] = 1; + h_v(nlocal,0) = 0.0; + h_v(nlocal,1) = 0.0; + h_v(nlocal,2) = 0.0; + + atomKK->modified(Host,ALL_MASK); + + atom->nlocal++; +} + +/* ---------------------------------------------------------------------- + unpack hybrid quantities from one line in Atoms section of data file + initialize other atom quantities for this sub-style +------------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::data_atom_hybrid(int nlocal, char **values) +{ + h_sp(nlocal,3) = utils::numeric(FLERR,values[0],true,lmp); + h_sp(nlocal,0) = utils::numeric(FLERR,values[1],true,lmp); + h_sp(nlocal,1) = utils::numeric(FLERR,values[2],true,lmp); + h_sp(nlocal,2) = utils::numeric(FLERR,values[3],true,lmp); + double inorm = 1.0/sqrt(sp[nlocal][0]*sp[nlocal][0] + + sp[nlocal][1]*sp[nlocal][1] + + sp[nlocal][2]*sp[nlocal][2]); + sp[nlocal][0] *= inorm; + sp[nlocal][1] *= inorm; + sp[nlocal][2] *= inorm; + + return 4; +} + +/* ---------------------------------------------------------------------- + pack atom info for data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::pack_data(double **buf) +{ + int nlocal = atom->nlocal; + for (int i = 0; i < nlocal; i++) { + buf[i][0] = h_tag[i]; + buf[i][1] = h_type[i]; + buf[i][2] = h_sp(i,0); + buf[i][3] = h_x(i,0); + buf[i][4] = h_x(i,1); + buf[i][5] = h_x(i,2); + buf[i][2] = h_sp(i,1); + buf[i][2] = h_sp(i,2); + buf[i][2] = h_sp(i,3); + buf[i][6] = (h_image[i] & IMGMASK) - IMGMAX; + buf[i][7] = (h_image[i] >> IMGBITS & IMGMASK) - IMGMAX; + buf[i][8] = (h_image[i] >> IMG2BITS) - IMGMAX; + } +} + +/* ---------------------------------------------------------------------- + pack hybrid atom info for data file +------------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::pack_data_hybrid(int i, double *buf) +{ + buf[0] = h_sp(i,3); + buf[1] = h_sp(i,0); + buf[2] = h_sp(i,1); + buf[3] = h_sp(i,2); + return 4; +} + +/* ---------------------------------------------------------------------- + write atom info to data file including 3 image flags +------------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::write_data(FILE *fp, int n, double **buf) +{ + for (int i = 0; i < n; i++) + fprintf(fp,"%d %d %-1.16e %-1.16e %-1.16e %-1.16e %d %d %d\n", + (int) buf[i][0],(int) buf[i][1],buf[i][2],buf[i][3],buf[i][4], + buf[i][5],(int) buf[i][6],(int) buf[i][7],(int) buf[i][8]); +} + +/* ---------------------------------------------------------------------- + write hybrid atom info to data file +------------------------------------------------------------------------- */ + +int AtomVecSpinKokkos::write_data_hybrid(FILE *fp, double *buf) +{ + fprintf(fp," %-1.16e %-1.16e %-1.16e %-1.16e",buf[0],buf[1],buf[2],buf[3]); + return 4; +} + +/* ---------------------------------------------------------------------- + return # of bytes of allocated memory +------------------------------------------------------------------------- */ + +double AtomVecSpinKokkos::memory_usage() +{ + bigint bytes = 0; + + if (atom->memcheck("tag")) bytes += memory->usage(tag,nmax); + if (atom->memcheck("type")) bytes += memory->usage(type,nmax); + if (atom->memcheck("mask")) bytes += memory->usage(mask,nmax); + if (atom->memcheck("image")) bytes += memory->usage(image,nmax); + if (atom->memcheck("x")) bytes += memory->usage(x,nmax,3); + if (atom->memcheck("v")) bytes += memory->usage(v,nmax,3); + if (atom->memcheck("f")) bytes += memory->usage(f,nmax*commKK->nthreads,3); + + if (atom->memcheck("sp")) bytes += memory->usage(sp,nmax,4); + if (atom->memcheck("fm")) bytes += memory->usage(fm,nmax*comm->nthreads,3); + if (atom->memcheck("fm_long")) bytes += memory->usage(fm_long,nmax*comm->nthreads,3); + + return bytes; +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::sync(ExecutionSpace space, unsigned int mask) +{ + if (space == Device) { + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & SP_MASK) atomKK->k_sp.sync(); + if (mask & FM_MASK) atomKK->k_fm.sync(); + if (mask & FML_MASK) atomKK->k_fm_long.sync(); + } else { + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & SP_MASK) atomKK->k_sp.sync(); + if (mask & FM_MASK) atomKK->k_fm.sync(); + if (mask & FML_MASK) atomKK->k_fm_long.sync(); + } +} + +/* ---------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::modified(ExecutionSpace space, unsigned int mask) +{ + if (space == Device) { + if (mask & X_MASK) atomKK->k_x.modify(); + if (mask & V_MASK) atomKK->k_v.modify(); + if (mask & F_MASK) atomKK->k_f.modify(); + if (mask & TAG_MASK) atomKK->k_tag.modify(); + if (mask & TYPE_MASK) atomKK->k_type.modify(); + if (mask & MASK_MASK) atomKK->k_mask.modify(); + if (mask & IMAGE_MASK) atomKK->k_image.modify(); + if (mask & SP_MASK) atomKK->k_sp.modify(); + if (mask & FM_MASK) atomKK->k_fm.modify(); + if (mask & FML_MASK) atomKK->k_fm_long.modify(); + } else { + if (mask & X_MASK) atomKK->k_x.modify(); + if (mask & V_MASK) atomKK->k_v.modify(); + if (mask & F_MASK) atomKK->k_f.modify(); + if (mask & TAG_MASK) atomKK->k_tag.modify(); + if (mask & TYPE_MASK) atomKK->k_type.modify(); + if (mask & MASK_MASK) atomKK->k_mask.modify(); + if (mask & IMAGE_MASK) atomKK->k_image.modify(); + if (mask & SP_MASK) atomKK->k_sp.modify(); + if (mask & FM_MASK) atomKK->k_fm.modify(); + if (mask & FML_MASK) atomKK->k_fm_long.modify(); + } +} + +void AtomVecSpinKokkos::sync_overlapping_device(ExecutionSpace space, unsigned int mask) +{ + if (space == Device) { + if ((mask & X_MASK) && atomKK->k_x.need_sync()) + perform_async_copy(atomKK->k_x,space); + if ((mask & V_MASK) && atomKK->k_v.need_sync()) + perform_async_copy(atomKK->k_v,space); + if ((mask & F_MASK) && atomKK->k_f.need_sync()) + perform_async_copy(atomKK->k_f,space); + if ((mask & TAG_MASK) && atomKK->k_tag.need_sync()) + perform_async_copy(atomKK->k_tag,space); + if ((mask & TYPE_MASK) && atomKK->k_type.need_sync()) + perform_async_copy(atomKK->k_type,space); + if ((mask & MASK_MASK) && atomKK->k_mask.need_sync()) + perform_async_copy(atomKK->k_mask,space); + if ((mask & IMAGE_MASK) && atomKK->k_image.need_sync()) + perform_async_copy(atomKK->k_image,space); + if ((mask & SP_MASK) && atomKK->k_sp.need_sync()) + perform_async_copy(atomKK->k_sp,space); + if ((mask & FM_MASK) && atomKK->k_sp.need_sync()) + perform_async_copy(atomKK->k_fm,space); + if ((mask & FML_MASK) && atomKK->k_fm_long.need_sync()) + perform_async_copy(atomKK->k_fm_long,space); + } else { + if ((mask & X_MASK) && atomKK->k_x.need_sync()) + perform_async_copy(atomKK->k_x,space); + if ((mask & V_MASK) && atomKK->k_v.need_sync()) + perform_async_copy(atomKK->k_v,space); + if ((mask & F_MASK) && atomKK->k_f.need_sync()) + perform_async_copy(atomKK->k_f,space); + if ((mask & TAG_MASK) && atomKK->k_tag.need_sync()) + perform_async_copy(atomKK->k_tag,space); + if ((mask & TYPE_MASK) && atomKK->k_type.need_sync()) + perform_async_copy(atomKK->k_type,space); + if ((mask & MASK_MASK) && atomKK->k_mask.need_sync()) + perform_async_copy(atomKK->k_mask,space); + if ((mask & IMAGE_MASK) && atomKK->k_image.need_sync()) + perform_async_copy(atomKK->k_image,space); + if ((mask & SP_MASK) && atomKK->k_sp.need_sync()) + perform_async_copy(atomKK->k_sp,space); + if ((mask & FM_MASK) && atomKK->k_fm.need_sync()) + perform_async_copy(atomKK->k_fm,space); + if ((mask & FML_MASK) && atomKK->k_fm_long.need_sync()) + perform_async_copy(atomKK->k_fm_long,space); + } +} + +/* ---------------------------------------------------------------------- + clear all forces (mech and mag) +------------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::force_clear(int /*n*/, size_t nbytes) +{ + memset(&atom->f[0][0],0,3*nbytes); + memset(&atom->fm[0][0],0,3*nbytes); + memset(&atom->fm_long[0][0],0,3*nbytes); +} diff --git a/src/KOKKOS/atom_vec_spin_kokkos.h b/src/KOKKOS/atom_vec_spin_kokkos.h new file mode 100644 index 0000000000..a9f7077a24 --- /dev/null +++ b/src/KOKKOS/atom_vec_spin_kokkos.h @@ -0,0 +1,132 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef ATOM_CLASS + +AtomStyle(spin/kk,AtomVecSpinKokkos) +AtomStyle(spin/kk/device,AtomVecSpinKokkos) +AtomStyle(spin/kk/host,AtomVecSpinKokkos) + +#else + +#ifndef LMP_ATOM_VEC_SPIN_KOKKOS_H +#define LMP_ATOM_VEC_SPIN_KOKKOS_H + +#include "atom_vec_kokkos.h" +#include "kokkos_type.h" + +namespace LAMMPS_NS { + +class AtomVecSpinKokkos : public AtomVecKokkos { + public: + AtomVecSpinKokkos(class LAMMPS *); + void grow(int); + void copy(int, int, int); + int pack_border(int, int *, double *, int, int *); + int pack_border_vel(int, int *, double *, int, int *); + int pack_border_hybrid(int, int *, double *); + void unpack_border(int, int, double *); + void unpack_border_vel(int, int, double *); + int unpack_border_hybrid(int, int, double *); + int pack_exchange(int, double *); + int unpack_exchange(double *); + int size_restart(); + int pack_restart(int, double *); + int unpack_restart(double *); + void create_atom(int, double *); + void data_atom(double *, imageint, char **); + int data_atom_hybrid(int, char **); + void pack_data(double **); + int pack_data_hybrid(int, double *); + void write_data(FILE *, int, double **); + int write_data_hybrid(FILE *, double *); + double memory_usage(); + + // clear magnetic and mechanic forces + + void force_clear(int, size_t); + + void grow_reset(); + // input lists to be checked + int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, + DAT::tdual_xfloat_2d buf,int iswap, + int pbc_flag, int *pbc, ExecutionSpace space); + void unpack_border_kokkos(const int &n, const int &nfirst, + const DAT::tdual_xfloat_2d &buf, + ExecutionSpace space); + int pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2d &buf, + DAT::tdual_int_1d k_sendlist, + DAT::tdual_int_1d k_copylist, + ExecutionSpace space, int dim, + X_FLOAT lo, X_FLOAT hi); + int unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf, int nrecv, + int nlocal, int dim, X_FLOAT lo, X_FLOAT hi, + ExecutionSpace space); + + void sync(ExecutionSpace space, unsigned int mask); + void modified(ExecutionSpace space, unsigned int mask); + void sync_overlapping_device(ExecutionSpace space, unsigned int mask); + + protected: + tagint *tag; + int *type,*mask; + imageint *image; + double **x,**v,**f; // lattice quantities + + // spin quantities + double **sp; // sp[i][0-2] direction of the spin i + // sp[i][3] atomic magnetic moment of the spin i + double **fm; // fm[i][0-2] direction of magnetic precession + double **fm_long; // storage of long-range spin prec. components + + DAT::t_tagint_1d d_tag; + HAT::t_tagint_1d h_tag; + + DAT::t_int_1d d_type, d_mask; + HAT::t_int_1d h_type, h_mask; + + DAT::t_imageint_1d d_image; + HAT::t_imageint_1d h_image; + + DAT::t_x_array d_x; + DAT::t_v_array d_v; + DAT::t_f_array d_f; + + DAT::t_sp_array d_sp; + DAT::t_fm_array d_fm; + DAT::t_fm_long_array d_fm_long; + + HAT::t_sp_array h_sp; + HAT::t_fm_array h_fm; + HAT::t_fm_long_array h_fm_long; + + DAT::tdual_int_1d k_count; +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Per-processor system is too big + +The number of owned atoms plus ghost atoms on a single +processor must fit in 32-bit integer. + +E: Invalid atom type in Atoms section of data file + +Atom types must range from 1 to specified # of types. + +*/ diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index 5930a9e207..b6992602d0 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -758,6 +758,38 @@ typedef tdual_virial_array::t_dev_um t_virial_array_um; typedef tdual_virial_array::t_dev_const_um t_virial_array_const_um; typedef tdual_virial_array::t_dev_const_randomread t_virial_array_randomread; +// Spin Types + +//3d SP_FLOAT array n*4 +#ifdef LMP_KOKKOS_NO_LEGACY +typedef Kokkos::DualView tdual_sp_array; +#else +typedef Kokkos::DualView tdual_sp_array; +#endif +typedef tdual_sp_array::t_dev t_sp_array; +typedef tdual_sp_array::t_dev_const t_sp_array_const; +typedef tdual_sp_array::t_dev_um t_sp_array_um; +typedef tdual_sp_array::t_dev_const_um t_sp_array_const_um; +typedef tdual_sp_array::t_dev_const_randomread t_sp_array_randomread; + +//3d FM_FLOAT array n*3 + +typedef Kokkos::DualView tdual_fm_array; +typedef tdual_fm_array::t_dev t_fm_array; +typedef tdual_fm_array::t_dev_const t_fm_array_const; +typedef tdual_fm_array::t_dev_um t_fm_array_um; +typedef tdual_fm_array::t_dev_const_um t_fm_array_const_um; +typedef tdual_fm_array::t_dev_const_randomread t_fm_array_randomread; + +//3d FML_FLOAT array n*3 + +typedef Kokkos::DualView tdual_fm_long_array; +typedef tdual_fm_long_array::t_dev t_fm_long_array; +typedef tdual_fm_long_array::t_dev_const t_fm_long_array_const; +typedef tdual_fm_long_array::t_dev_um t_fm_long_array_um; +typedef tdual_fm_long_array::t_dev_const_um t_fm_long_array_const_um; +typedef tdual_fm_long_array::t_dev_const_randomread t_fm_long_array_randomread; + //Energy Types //1d E_FLOAT array n @@ -994,6 +1026,33 @@ typedef tdual_virial_array::t_host_um t_virial_array_um; typedef tdual_virial_array::t_host_const_um t_virial_array_const_um; typedef tdual_virial_array::t_host_const_randomread t_virial_array_randomread; +// Spin types + +//2d X_FLOAT array n*3 +typedef Kokkos::DualView tdual_sp_array; +typedef tdual_sp_array::t_host t_sp_array; +typedef tdual_sp_array::t_host_const t_sp_array_const; +typedef tdual_sp_array::t_host_um t_sp_array_um; +typedef tdual_sp_array::t_host_const_um t_sp_array_const_um; +typedef tdual_sp_array::t_host_const_randomread t_sp_array_randomread; + +//2d F_FLOAT array n*3 +typedef Kokkos::DualView tdual_fm_array; +//typedef Kokkos::DualView tdual_f_array; +typedef tdual_fm_array::t_host t_fm_array; +typedef tdual_fm_array::t_host_const t_fm_array_const; +typedef tdual_fm_array::t_host_um t_fm_array_um; +typedef tdual_fm_array::t_host_const_um t_fm_array_const_um; +typedef tdual_fm_array::t_host_const_randomread t_fm_array_randomread; + +//2d F_FLOAT array n*3 +typedef Kokkos::DualView tdual_fm_long_array; +//typedef Kokkos::DualView tdual_f_array; +typedef tdual_fm_long_array::t_host t_fm_long_array; +typedef tdual_fm_long_array::t_host_const t_fm_long_array_const; +typedef tdual_fm_long_array::t_host_um t_fm_long_array_um; +typedef tdual_fm_long_array::t_host_const_um t_fm_long_array_const_um; +typedef tdual_fm_long_array::t_host_const_randomread t_fm_long_array_randomread; //Energy Types diff --git a/src/atom_masks.h b/src/atom_masks.h index 8e29448488..daad323835 100644 --- a/src/atom_masks.h +++ b/src/atom_masks.h @@ -42,6 +42,12 @@ #define ENERGY_MASK 0x00010000 #define VIRIAL_MASK 0x00020000 +// SPIN + +#define SP_MASK 0x00000001 +#define FM_MASK 0x00000002 +#define FML_MASK 0x00000004 + // DPD #define DPDRHO_MASK 0x00040000 From aa1a87687bbaec39252f26afe77dc54931857b04 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 8 Oct 2020 07:32:36 -0600 Subject: [PATCH 02/38] Fix minor issues --- src/KOKKOS/atom_vec_spin_kokkos.cpp | 15 +++++++++------ src/KOKKOS/atom_vec_spin_kokkos.h | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/KOKKOS/atom_vec_spin_kokkos.cpp b/src/KOKKOS/atom_vec_spin_kokkos.cpp index c5c2ffb5be..188748d655 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.cpp +++ b/src/KOKKOS/atom_vec_spin_kokkos.cpp @@ -97,6 +97,9 @@ void AtomVecSpinKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_fm,atomKK->fm,nmax,"atom:fm"); memoryKK->grow_kokkos(atomKK->k_fm_long,atomKK->fm_long,nmax,"atom:fm_long"); + grow_pointers(); + atomKK->sync(Host,ALL_MASK); + if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); @@ -106,7 +109,7 @@ void AtomVecSpinKokkos::grow(int n) reset local array ptrs ------------------------------------------------------------------------- */ -void AtomVecSpinKokkos::grow_reset() +void AtomVecSpinKokkos::grow_pointers() { tag = atomKK->tag; d_tag = atomKK->k_tag.d_view; @@ -121,7 +124,7 @@ void AtomVecSpinKokkos::grow_reset() image = atomKK->image; d_image = atomKK->k_image.d_view; h_image = atomKK->k_image.h_view; - + x = atomKK->x; d_x = atomKK->k_x.d_view; h_x = atomKK->k_x.h_view; @@ -389,7 +392,7 @@ int AtomVecSpinKokkos::pack_border(int n, int *list, double *buf, buf[m++] = h_sp(j,3); } } - + if (atom->nextra_border) for (int iextra = 0; iextra < atom->nextra_border; iextra++) m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); @@ -478,7 +481,7 @@ int AtomVecSpinKokkos::pack_border_vel(int n, int *list, double *buf, } } } - + if (atom->nextra_border) for (int iextra = 0; iextra < atom->nextra_border; iextra++) m += modify->fix[atom->extra_border[iextra]]->pack_border(n,list,&buf[m]); @@ -1026,8 +1029,8 @@ void AtomVecSpinKokkos::create_atom(int itype, double *coord) atomKK->sync(Host,ALL_MASK); atomKK->modified(Host,ALL_MASK); - tag[nlocal] = 0; - type[nlocal] = itype; + h_tag[nlocal] = 0; + h_type[nlocal] = itype; h_x(nlocal,0) = coord[0]; h_x(nlocal,1) = coord[1]; h_x(nlocal,2) = coord[2]; diff --git a/src/KOKKOS/atom_vec_spin_kokkos.h b/src/KOKKOS/atom_vec_spin_kokkos.h index a9f7077a24..5dca7b4e13 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.h +++ b/src/KOKKOS/atom_vec_spin_kokkos.h @@ -56,7 +56,7 @@ class AtomVecSpinKokkos : public AtomVecKokkos { void force_clear(int, size_t); - void grow_reset(); + void grow_pointers(); // input lists to be checked int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, From e8ebce1b5281ca0d4e8651918c64f24d940d7ec0 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 8 Oct 2020 08:21:55 -0600 Subject: [PATCH 03/38] Fix GPU compile error --- src/KOKKOS/kokkos_type.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index b6992602d0..041a6d4771 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -1028,8 +1028,8 @@ typedef tdual_virial_array::t_host_const_randomread t_virial_array_randomread; // Spin types -//2d X_FLOAT array n*3 -typedef Kokkos::DualView tdual_sp_array; +//2d X_FLOAT array n*4 +typedef Kokkos::DualView tdual_sp_array; typedef tdual_sp_array::t_host t_sp_array; typedef tdual_sp_array::t_host_const t_sp_array_const; typedef tdual_sp_array::t_host_um t_sp_array_um; From c85498e98baf752c05ec5f2a8ea7ecaaba9535eb Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 9 Oct 2020 09:47:47 -0600 Subject: [PATCH 04/38] started to add spin/kk to the doc modified validaion tests for kokkos compatibility --- doc/src/atom_style.rst | 2 +- .../llg_exchange.py | 2 +- .../run-test-exchange.sh | 5 +++-- .../test-spin-precession.in | 12 ++++++++-- .../validation_damped_exchange/two_spins.data | 22 ------------------- .../validation_nve/in.spin.iron-nve | 7 +++++- .../validation_nve/run-test-nve.sh | 5 +++-- 7 files changed, 24 insertions(+), 31 deletions(-) delete mode 100644 examples/SPIN/test_problems/validation_damped_exchange/two_spins.data diff --git a/doc/src/atom_style.rst b/doc/src/atom_style.rst index 4957901676..a59f8d31e0 100644 --- a/doc/src/atom_style.rst +++ b/doc/src/atom_style.rst @@ -27,7 +27,7 @@ Syntax template-ID = ID of molecule template specified in a separate :doc:`molecule ` command *hybrid* args = list of one or more sub-styles, each with their args -* accelerated styles (with same args) = *angle/kk* or *atomic/kk* or *bond/kk* or *charge/kk* or *full/kk* or *molecular/kk* +* accelerated styles (with same args) = *angle/kk* or *atomic/kk* or *bond/kk* or *charge/kk* or *full/kk* or *molecular/kk* or *spin/kk* Examples """""""" diff --git a/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py b/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py index 49eecb5b44..dd1c543bb3 100755 --- a/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py +++ b/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py @@ -65,6 +65,6 @@ for t in range (0,N): # calc. average magnetization Sm = (S1+S2)*0.5 # calc. energy - en = -2.0*J0*(np.dot(S1,S2)) + en = -J0*(np.dot(S1,S2)) # print res. in ps for comparison with LAMMPS print(t*dt/1000.0,Sm[0],Sm[1],Sm[2],en) diff --git a/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh b/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh index 599730fe7b..ce8a6c3dbf 100755 --- a/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh +++ b/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh @@ -4,8 +4,9 @@ rm res_*.dat # compute Lammps -./../../../../src/lmp_serial \ - -in test-spin-precession.in +../../../../src/lmp_serial -in test-spin-precession.in +# mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \ +# -k on -sf kk -in test-spin-precession.in in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" in="$(echo "$in+1" | bc -l)" diff --git a/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in b/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in index 0ca49364d2..6eea93224e 100644 --- a/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in +++ b/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in @@ -2,10 +2,18 @@ units metal atom_style spin -atom_modify map array +# atom_style spin/kk boundary f f f -read_data two_spins.data +atom_modify map array +lattice sc 3.0 +region box block 0 2 0 1 0 1 +create_box 1 box +create_atoms 1 box + +mass 1 55.845 +set atom 1 spin 2.0 1.0 0.0 0.0 +set atom 2 spin 2.0 0.0 1.0 0.0 pair_style spin/exchange 3.1 pair_coeff * * exchange 3.1 11.254 0.0 1.0 diff --git a/examples/SPIN/test_problems/validation_damped_exchange/two_spins.data b/examples/SPIN/test_problems/validation_damped_exchange/two_spins.data deleted file mode 100644 index 013f813751..0000000000 --- a/examples/SPIN/test_problems/validation_damped_exchange/two_spins.data +++ /dev/null @@ -1,22 +0,0 @@ -LAMMPS data file via write_data, version 19 Sep 2019, timestep = 0 - -2 atoms -1 atom types - -0.0 6.0 xlo xhi -0.0 3.0 ylo yhi -0.0 3.0 zlo zhi - -Masses - -1 1 - -Atoms # spin - -1 1 2.0 0.0 0.0 0.0 1.0 0.0 0.0 0 0 0 -2 1 2.0 3.0 0.0 0.0 0.0 1.0 0.0 0 0 0 - -Velocities - -1 0.0 0.0 0.0 -2 0.0 0.0 0.0 diff --git a/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve b/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve index f00fb1ec12..a29d0158cf 100644 --- a/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve +++ b/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve @@ -3,6 +3,7 @@ clear units metal atom_style spin +# atom_style spin/kk dimension 3 boundary p p p @@ -46,4 +47,8 @@ variable tmag equal c_out_mag[6] thermo_style custom step time v_tmag temp v_emag ke pe etotal thermo 200 -run 100000 +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 10 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +# run 100000 +run 10000 diff --git a/examples/SPIN/test_problems/validation_nve/run-test-nve.sh b/examples/SPIN/test_problems/validation_nve/run-test-nve.sh index 441e7cf46d..a8eb179b7f 100755 --- a/examples/SPIN/test_problems/validation_nve/run-test-nve.sh +++ b/examples/SPIN/test_problems/validation_nve/run-test-nve.sh @@ -4,8 +4,9 @@ rm res_*.dat # compute Lammps -./../../../../src/lmp_serial \ - -in in.spin.iron-nve +# mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \ +# -k on -sf kk -in in.spin.iron-nve +../../../../src/lmp_serial -in in.spin.iron-nve in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" in="$(echo "$in+1" | bc -l)" From 39dc3e69ba716d63298cc8aca7e973268a94f8fe Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 30 Mar 2021 10:35:25 -0600 Subject: [PATCH 05/38] Commit before pull --- doc/src/Howto_spins.rst | 4 ++-- .../validation_damped_exchange/run-test-exchange.sh | 12 +++++++++--- .../test-spin-precession.in | 8 +++++++- src/SPIN/pair_spin_exchange_biquadratic.cpp | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/doc/src/Howto_spins.rst b/doc/src/Howto_spins.rst index 0afcc12c91..87e30a5f6f 100644 --- a/doc/src/Howto_spins.rst +++ b/doc/src/Howto_spins.rst @@ -21,8 +21,8 @@ orientations and their associated inter-atomic distances. The command :doc:`fix precession/spin ` allows to apply a constant magnetic torque on all the spins in the system. This -torque can be an external magnetic field (Zeeman interaction), or an -uniaxial magnetic anisotropy. +torque can be an external magnetic field (Zeeman interaction), and an +uniaxial or cubic magnetic anisotropy. A Langevin thermostat can be applied to those magnetic spins using :doc:`fix langevin/spin `. Typically, this thermostat diff --git a/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh b/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh index bd878a52de..a714e22fcf 100755 --- a/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh +++ b/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh @@ -3,9 +3,15 @@ # clean old res rm res_*.dat -# compute Lammps -./../../../../src/lmp_serial \ - -in test-spin-precession.in +# test standard Lammps +# ./../../../../src/lmp_serial \ +# -in test-spin-precession.in + +# test spin/kk with Kokkos Lammps +mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \ + -k on -sf kk -in test-spin-precession.in + +# extract data from Lammps run in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" in="$(echo "$in+1" | bc -l)" diff --git a/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in b/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in index 9dfb4a98d6..bea5f53bf4 100644 --- a/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in +++ b/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in @@ -1,16 +1,22 @@ #LAMMPS in.run units metal -atom_style spin +# atom_style spin +atom_style spin/kk atom_modify map array boundary f f f +shell echo "test1" atom_modify map array lattice sc 3.0 region box block 0 2 0 1 0 1 +shell echo "test1" create_box 1 box +shell echo "test1" create_atoms 1 box +shell echo "test1" + mass 1 55.845 set atom 1 spin 2.0 1.0 0.0 0.0 set atom 2 spin 2.0 0.0 1.0 0.0 diff --git a/src/SPIN/pair_spin_exchange_biquadratic.cpp b/src/SPIN/pair_spin_exchange_biquadratic.cpp index 352949e5c3..a00d1cc8b0 100644 --- a/src/SPIN/pair_spin_exchange_biquadratic.cpp +++ b/src/SPIN/pair_spin_exchange_biquadratic.cpp @@ -393,7 +393,7 @@ void PairSpinExchangeBiquadratic::compute_exchange(int i, int j, double rsq, jtype = type[j]; r2j = rsq/J3[itype][jtype]/J3[itype][jtype]; - r2k = rsq/J3[itype][jtype]/J3[itype][jtype]; + r2k = rsq/K3[itype][jtype]/K3[itype][jtype]; Jex = 4.0*J1_mag[itype][jtype]*r2j; Jex *= (1.0-J2[itype][jtype]*r2j); From b34585762b2d87cb8a931b5ef344b9d1f501339d Mon Sep 17 00:00:00 2001 From: snikolo Date: Thu, 1 Apr 2021 01:00:25 -0600 Subject: [PATCH 06/38] updated sectoring function to account for triclinic cells. I didn't see a triclinic cell error warnings in SPIN/* or KOKKOS/atom_vec_spin_kokkos.cpp files. --- src/SPIN/fix_nve_spin.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index 364994741e..0df63951e4 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -507,13 +507,25 @@ void FixNVESpin::sectoring() { int sec[3]; double sublo[3],subhi[3]; - double* sublotmp = domain->sublo; - double* subhitmp = domain->subhi; - for (int dim = 0 ; dim < 3 ; dim++) { - sublo[dim]=sublotmp[dim]; - subhi[dim]=subhitmp[dim]; + + if (domain->triclinic == 1){ + double* sublotmp = domain->sublo_lamda; + double* subhitmp = domain->subhi_lamda; + for (int dim = 0 ; dim < 3 ; dim++) { + sublo[dim]=sublotmp[dim]*domain->boxhi[dim]; + subhi[dim]=subhitmp[dim]*domain->boxhi[dim]; + } } + else { + double* sublotmp = domain->sublo; + double* subhitmp = domain->subhi; + for (int dim = 0 ; dim < 3 ; dim++) { + sublo[dim]=sublotmp[dim]; + subhi[dim]=subhitmp[dim]; + } + } + const double rsx = subhi[0] - sublo[0]; const double rsy = subhi[1] - sublo[1]; const double rsz = subhi[2] - sublo[2]; From 4975295e0fa3221a442aa7a459adb91a841f02f1 Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 1 Apr 2021 11:45:16 -0600 Subject: [PATCH 07/38] - adding a force/clear equivalent for spins in verlet/kk - setting all validation problems for spin/kk --- .../llg_exchange.py | 2 +- .../run-test-exchange.sh | 8 +++--- .../test-spin-precession.in | 4 +-- .../run-test-prec.sh | 8 +++++- .../test-spin-precession.in | 1 + .../run-test-prec.sh | 7 +++++ .../test-prec-spin.template | 1 + .../validation_nve/in.spin.iron-nve | 4 +-- .../validation_nve/run-test-nve.sh | 8 ++++-- .../validation_nvt/in.spin.nvt_lattice | 1 + .../validation_nvt/in.spin.nvt_spin | 1 + .../validation_nvt/run-test-nvt.sh | 20 ++++++++++++-- src/KOKKOS/atom_vec_spin_kokkos.cpp | 8 +++--- src/KOKKOS/verlet_kokkos.cpp | 27 +++++++++++++++++++ 14 files changed, 82 insertions(+), 18 deletions(-) diff --git a/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py b/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py index 5b93ac5c2d..a4cba3a940 100755 --- a/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py +++ b/examples/SPIN/test_problems/validation_damped_exchange/llg_exchange.py @@ -6,7 +6,7 @@ import matplotlib.pyplot as plt import mpmath as mp hbar=0.658212 # Planck's constant (eV.fs/rad) -# J0=0.05 # per-neighbor exchange interaction (eV) +J0=0.05 # per-neighbor exchange interaction (eV) # exchange interaction parameters J1 = 11.254 # in eV diff --git a/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh b/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh index a714e22fcf..9d00318473 100755 --- a/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh +++ b/examples/SPIN/test_problems/validation_damped_exchange/run-test-exchange.sh @@ -4,12 +4,12 @@ rm res_*.dat # test standard Lammps -# ./../../../../src/lmp_serial \ -# -in test-spin-precession.in +./../../../../src/lmp_serial \ + -in test-spin-precession.in # test spin/kk with Kokkos Lammps -mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \ - -k on -sf kk -in test-spin-precession.in +# mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \ +# -k on -sf kk -in test-spin-precession.in # extract data from Lammps run in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" diff --git a/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in b/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in index 0615d384ec..c195c046ec 100644 --- a/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in +++ b/examples/SPIN/test_problems/validation_damped_exchange/test-spin-precession.in @@ -1,8 +1,8 @@ #LAMMPS in.run units metal -# atom_style spin -atom_style spin/kk +atom_style spin +# atom_style spin/kk atom_modify map array boundary f f f shell echo "test1" diff --git a/examples/SPIN/test_problems/validation_damped_precession/run-test-prec.sh b/examples/SPIN/test_problems/validation_damped_precession/run-test-prec.sh index 8609179376..e7a943beef 100755 --- a/examples/SPIN/test_problems/validation_damped_precession/run-test-prec.sh +++ b/examples/SPIN/test_problems/validation_damped_precession/run-test-prec.sh @@ -3,9 +3,15 @@ # clean old res rm res_*.dat -# compute Lammps +# test standard Lammps ./../../../../src/lmp_serial \ -in test-spin-precession.in + +# test spin/kk with Kokkos Lammps +# mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \ +# -k on -sf kk -in test-spin-precession.in + +# extract data from Lammps run in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" in="$(echo "$in+1" | bc -l)" diff --git a/examples/SPIN/test_problems/validation_damped_precession/test-spin-precession.in b/examples/SPIN/test_problems/validation_damped_precession/test-spin-precession.in index b8e943e579..56abdded15 100644 --- a/examples/SPIN/test_problems/validation_damped_precession/test-spin-precession.in +++ b/examples/SPIN/test_problems/validation_damped_precession/test-spin-precession.in @@ -2,6 +2,7 @@ units metal atom_style spin +# atom_style spin/kk atom_modify map array boundary f f f diff --git a/examples/SPIN/test_problems/validation_langevin_precession/run-test-prec.sh b/examples/SPIN/test_problems/validation_langevin_precession/run-test-prec.sh index bcdd337903..ecdbb2c156 100755 --- a/examples/SPIN/test_problems/validation_langevin_precession/run-test-prec.sh +++ b/examples/SPIN/test_problems/validation_langevin_precession/run-test-prec.sh @@ -12,7 +12,14 @@ do temp="$(echo "$tempi+$i*($tempf-$tempi)/$N" | bc -l)" sed s/temperature/${temp}/g test-prec-spin.template > \ test-prec-spin.in + + # test standard Lammps ./../../../../src/lmp_serial -in test-prec-spin.in + + # test spin/kk with Kokkos Lammps + # mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \ + # -k on -sf kk -in test-prec-spin.in + Hz="$(tail -n 1 average_spin | awk -F " " '{print $3}')" sz="$(tail -n 1 average_spin | awk -F " " '{print $5}')" en="$(tail -n 1 average_spin | awk -F " " '{print $6}')" diff --git a/examples/SPIN/test_problems/validation_langevin_precession/test-prec-spin.template b/examples/SPIN/test_problems/validation_langevin_precession/test-prec-spin.template index 52f6a105ea..bec7126e69 100644 --- a/examples/SPIN/test_problems/validation_langevin_precession/test-prec-spin.template +++ b/examples/SPIN/test_problems/validation_langevin_precession/test-prec-spin.template @@ -2,6 +2,7 @@ units metal atom_style spin +# atom_style spin/kk atom_modify map array boundary p p p diff --git a/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve b/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve index a29d0158cf..38c669e166 100644 --- a/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve +++ b/examples/SPIN/test_problems/validation_nve/in.spin.iron-nve @@ -50,5 +50,5 @@ thermo 200 compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 10 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] -# run 100000 -run 10000 +run 100000 +# run 1 diff --git a/examples/SPIN/test_problems/validation_nve/run-test-nve.sh b/examples/SPIN/test_problems/validation_nve/run-test-nve.sh index a349fb91f7..04d3d60847 100755 --- a/examples/SPIN/test_problems/validation_nve/run-test-nve.sh +++ b/examples/SPIN/test_problems/validation_nve/run-test-nve.sh @@ -3,10 +3,14 @@ # clean old res rm res_*.dat -# compute Lammps +# test standard Lammps +../../../../src/lmp_serial -in in.spin.iron-nve + +# test spin/kk with Kokkos Lammps # mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \ # -k on -sf kk -in in.spin.iron-nve -../../../../src/lmp_serial -in in.spin.iron-nve + +# extract data from Lammps run in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" in="$(echo "$in+1" | bc -l)" diff --git a/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_lattice b/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_lattice index 2375c0ff8d..cc7bcfa68d 100644 --- a/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_lattice +++ b/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_lattice @@ -3,6 +3,7 @@ clear units metal atom_style spin +# atom_style spin/kk dimension 3 boundary p p p diff --git a/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_spin b/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_spin index 6b65df7109..7e8152f481 100644 --- a/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_spin +++ b/examples/SPIN/test_problems/validation_nvt/in.spin.nvt_spin @@ -3,6 +3,7 @@ clear units metal atom_style spin +# atom_style spin/kk dimension 3 boundary p p p diff --git a/examples/SPIN/test_problems/validation_nvt/run-test-nvt.sh b/examples/SPIN/test_problems/validation_nvt/run-test-nvt.sh index d3abbbe1a5..1372e1bd2c 100755 --- a/examples/SPIN/test_problems/validation_nvt/run-test-nvt.sh +++ b/examples/SPIN/test_problems/validation_nvt/run-test-nvt.sh @@ -3,16 +3,32 @@ # clean old res rm res_*.dat -# compute NVT Spin -> Lattice +### compute NVT Spin -> Lattice + +# test standard Lammps ./../../../../src/lmp_serial -in in.spin.nvt_spin + +# test spin/kk with Kokkos Lammps +# mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \ +# -k on -sf kk -in in.spin.nvt_spin + +# extract data from Lammps run in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" in="$(echo "$in+1" | bc -l)" en="$(echo "$en-$in" | bc -l)" tail -n +$in log.lammps | head -n $en > res_nvt_spin.dat -# compute NVT Lattice -> Spin +### compute NVT Lattice -> Spin + +# test standard Lammps ./../../../../src/lmp_serial -in in.spin.nvt_lattice + +# test spin/kk with Kokkos Lammps +# mpirun -np 1 ../../../../src/lmp_kokkos_mpi_only \ +# -k on -sf kk -in in.spin.nvt_lattice + +# extract data from Lammps run in="$(grep -n Step log.lammps | awk -F ':' '{print $1}')" en="$(grep -n Loop log.lammps | awk -F ':' '{print $1}')" in="$(echo "$in+1" | bc -l)" diff --git a/src/KOKKOS/atom_vec_spin_kokkos.cpp b/src/KOKKOS/atom_vec_spin_kokkos.cpp index 188748d655..e513ff2ffa 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.cpp +++ b/src/KOKKOS/atom_vec_spin_kokkos.cpp @@ -1303,9 +1303,9 @@ void AtomVecSpinKokkos::sync_overlapping_device(ExecutionSpace space, unsigned i clear all forces (mech and mag) ------------------------------------------------------------------------- */ -void AtomVecSpinKokkos::force_clear(int /*n*/, size_t nbytes) +void AtomVecSpinKokkos::force_clear(int n, size_t nbytes) { - memset(&atom->f[0][0],0,3*nbytes); - memset(&atom->fm[0][0],0,3*nbytes); - memset(&atom->fm_long[0][0],0,3*nbytes); + memset(&f[n][0],0,3*nbytes); + memset(&fm[n][0],0,3*nbytes); + memset(&fm_long[n][0],0,3*nbytes); } diff --git a/src/KOKKOS/verlet_kokkos.cpp b/src/KOKKOS/verlet_kokkos.cpp index 3aa7a3575a..27f4646366 100644 --- a/src/KOKKOS/verlet_kokkos.cpp +++ b/src/KOKKOS/verlet_kokkos.cpp @@ -594,6 +594,15 @@ void VerletKokkos::force_clear() Kokkos::parallel_for(nall, Zero::t_f_array>(atomKK->k_torque.view())); atomKK->modified(Device,TORQUE_MASK); } + + // reset SPIN forces + + if (extraflag) { + Kokkos::parallel_for(nall, Zero::t_fm_array>(atomKK->k_fm.view())); + atomKK->modified(Device,FM_MASK); + Kokkos::parallel_for(nall, Zero::t_fm_array>(atomKK->k_fm_long.view())); + atomKK->modified(Device,FML_MASK); + } // neighbor includegroup flag is set // clear force only on initial nfirst particles @@ -607,6 +616,15 @@ void VerletKokkos::force_clear() Kokkos::parallel_for(atomKK->nfirst, Zero::t_f_array>(atomKK->k_torque.view())); atomKK->modified(Device,TORQUE_MASK); } + + // reset SPIN forces + + if (extraflag) { + Kokkos::parallel_for(atomKK->nfirst, Zero::t_fm_array>(atomKK->k_fm.view())); + atomKK->modified(Device,FM_MASK); + Kokkos::parallel_for(atomKK->nfirst, Zero::t_fm_array>(atomKK->k_fm_long.view())); + atomKK->modified(Device,FML_MASK); + } if (force->newton) { auto range = Kokkos::RangePolicy(atomKK->nlocal, atomKK->nlocal + atomKK->nghost); @@ -617,6 +635,15 @@ void VerletKokkos::force_clear() Kokkos::parallel_for(range, Zero::t_f_array>(atomKK->k_torque.view())); atomKK->modified(Device,TORQUE_MASK); } + + // reset SPIN forces + + if (extraflag) { + Kokkos::parallel_for(range, Zero::t_fm_array>(atomKK->k_fm.view())); + atomKK->modified(Device,FM_MASK); + Kokkos::parallel_for(range, Zero::t_fm_array>(atomKK->k_fm_long.view())); + atomKK->modified(Device,FML_MASK); + } } } } From 39a00e2901019e37d8bb3d50ffdbeedc9ed224f6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 11 Apr 2021 06:03:46 -0400 Subject: [PATCH 08/38] reformat --- doc/src/fix_qeq.rst | 125 ++++++++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 58 deletions(-) diff --git a/doc/src/fix_qeq.rst b/doc/src/fix_qeq.rst index 56fde059e8..c655076ce8 100644 --- a/doc/src/fix_qeq.rst +++ b/doc/src/fix_qeq.rst @@ -56,27 +56,28 @@ Examples Description """"""""""" -Perform the charge equilibration (QEq) method as described in :ref:`(Rappe and Goddard) ` and formulated in :ref:`(Nakano) ` (also known -as the matrix inversion method) and in :ref:`(Rick and Stuart) ` (also -known as the extended Lagrangian method) based on the -electronegativity equilization principle. +Perform the charge equilibration (QEq) method as described in +:ref:`(Rappe and Goddard) ` and formulated in :ref:`(Nakano) +` (also known as the matrix inversion method) and in +:ref:`(Rick and Stuart) ` (also known as the extended Lagrangian +method) based on the electronegativity equilization principle. These fixes can be used with any :doc:`pair style ` in LAMMPS, so long as per-atom charges are defined. The most typical use-case is in conjunction with a :doc:`pair style ` that performs charge equilibration periodically (e.g. every timestep), such -as the ReaxFF or Streitz-Mintmire potential. -But these fixes can also be used with -potentials that normally assume per-atom charges are fixed, e.g. a -:doc:`Buckingham ` or :doc:`LJ/Coulombic ` potential. +as the ReaxFF or Streitz-Mintmire potential. But these fixes can also +be used with potentials that normally assume per-atom charges are fixed, +e.g. a :doc:`Buckingham ` or :doc:`LJ/Coulombic ` +potential. -Because the charge equilibration calculation is effectively -independent of the pair style, these fixes can also be used to perform -a one-time assignment of charges to atoms. For example, you could -define the QEq fix, perform a zero-timestep run via the :doc:`run ` -command without any pair style defined which would set per-atom -charges (based on the current atom configuration), then remove the fix -via the :doc:`unfix ` command before performing further dynamics. +Because the charge equilibration calculation is effectively independent +of the pair style, these fixes can also be used to perform a one-time +assignment of charges to atoms. For example, you could define the QEq +fix, perform a zero-timestep run via the :doc:`run ` command +without any pair style defined which would set per-atom charges (based +on the current atom configuration), then remove the fix via the +:doc:`unfix ` command before performing further dynamics. .. note:: @@ -87,11 +88,14 @@ via the :doc:`unfix ` command before performing further dynamics. .. note:: - The :doc:`fix qeq/comb ` command must still be used - to perform charge equilibration with the :doc:`COMB potential `. The :doc:`fix qeq/reax ` - command can be used to perform charge equilibration with the :doc:`ReaxFF force field `, although fix qeq/shielded yields the - same results as fix qeq/reax if *Nevery*\ , *cutoff*\ , and *tolerance* - are the same. Eventually the fix qeq/reax command will be deprecated. + The :doc:`fix qeq/comb ` command must still be used to + perform charge equilibration with the :doc:`COMB potential + `. The :doc:`fix qeq/reax ` command can be + used to perform charge equilibration with the :doc:`ReaxFF force + field `, although fix qeq/shielded yields the same + results as fix qeq/reax if *Nevery*\ , *cutoff*\ , and *tolerance* + are the same. Eventually the fix qeq/reax command will be + deprecated. The QEq method minimizes the electrostatic energy of the system (or equalizes the derivative of energy with respect to charge of all the @@ -134,55 +138,57 @@ usually a good number. The *qeq/shielded* style describes partial charges on atoms also as point charges, but uses a shielded Coulomb potential to describe the interaction between a pair of charged particles. Interaction through -the shielded Coulomb is given by equation (13) of the :ref:`ReaxFF force field ` paper. The shielding accounts for charge overlap +the shielded Coulomb is given by equation (13) of the :ref:`ReaxFF force +field ` paper. The shielding accounts for charge overlap between charged particles at small separation. This style is the same -as :doc:`fix qeq/reax `, and can be used with :doc:`pair_style reax/c `. Only the *chi*\ , *eta*\ , and *gamma* -parameters from the *qfile* file are used. When using the string -*reax/c* as filename, these parameters are extracted directly from -an active *reax/c* pair style. This style solves partial -charges on atoms via the matrix inversion method. A tolerance of -1.0e-6 is usually a good number. +as :doc:`fix qeq/reax `, and can be used with +:doc:`pair_style reax/c `. Only the *chi*\ , *eta*\ , and +*gamma* parameters from the *qfile* file are used. When using the string +*reax/c* as filename, these parameters are extracted directly from an +active *reax/c* pair style. This style solves partial charges on atoms +via the matrix inversion method. A tolerance of 1.0e-6 is usually a +good number. The *qeq/slater* style describes partial charges on atoms as spherical charge densities centered around atoms via the Slater 1\ *s* orbital, so -that the interaction between a pair of charged particles is the -product of two Slater 1\ *s* orbitals. The expression for the Slater -1\ *s* orbital is given under equation (6) of the -:ref:`Streitz-Mintmire ` paper. Only the *chi*\ , *eta*\ , *zeta*\ , and -*qcore* parameters from the *qfile* file are used. When using the string +that the interaction between a pair of charged particles is the product +of two Slater 1\ *s* orbitals. The expression for the Slater 1\ *s* +orbital is given under equation (6) of the :ref:`Streitz-Mintmire +` paper. Only the *chi*\ , *eta*\ , *zeta*\ , and *qcore* +parameters from the *qfile* file are used. When using the string *coul/streitz* as filename, these parameters are extracted directly from -an active *coul/streitz* pair style. This style solves -partial charges on atoms via the matrix inversion method. A tolerance -of 1.0e-6 is usually a good number. Keyword *alpha* can be used to -change the Slater type orbital exponent. +an active *coul/streitz* pair style. This style solves partial charges +on atoms via the matrix inversion method. A tolerance of 1.0e-6 is +usually a good number. Keyword *alpha* can be used to change the Slater +type orbital exponent. The *qeq/dynamic* style describes partial charges on atoms as point -charges that interact through 1/r, but the extended Lagrangian method -is used to solve partial charges on atoms. Only the *chi* and *eta* +charges that interact through 1/r, but the extended Lagrangian method is +used to solve partial charges on atoms. Only the *chi* and *eta* parameters from the *qfile* file are used. Note that Coulomb -catastrophe can occur if repulsion between the pair of charged -particles is too weak. A tolerance of 1.0e-3 is usually a good -number. Keyword *qdamp* can be used to change the damping factor, while -keyword *qstep* can be used to change the time step size. +catastrophe can occur if repulsion between the pair of charged particles +is too weak. A tolerance of 1.0e-3 is usually a good number. Keyword +*qdamp* can be used to change the damping factor, while keyword *qstep* +can be used to change the time step size. -The :ref:`\ *qeq/fire*\ ` style describes the same charge model and charge -solver as the *qeq/dynamic* style, but employs a FIRE minimization -algorithm to solve for equilibrium charges. -Keyword *qdamp* can be used to change the damping factor, while -keyword *qstep* can be used to change the time step size. +The :ref:`\ *qeq/fire*\ ` style describes the same charge model +and charge solver as the *qeq/dynamic* style, but employs a FIRE +minimization algorithm to solve for equilibrium charges. Keyword +*qdamp* can be used to change the damping factor, while keyword *qstep* +can be used to change the time step size. Note that *qeq/point*\ , *qeq/shielded*\ , and *qeq/slater* describe different charge models, whereas the matrix inversion method and the extended Lagrangian method (\ *qeq/dynamic* and *qeq/fire*\ ) are different solvers. -Note that *qeq/point*\ , *qeq/dynamic* and *qeq/fire* styles all describe -charges as point charges that interact through 1/r relationship, but -solve partial charges on atoms using different solvers. These three -styles should yield comparable results if -the QEq parameters and *Nevery*\ , *cutoff*\ , and *tolerance* are the -same. Style *qeq/point* is typically faster, *qeq/dynamic* scales -better on larger sizes, and *qeq/fire* is faster than *qeq/dynamic*\ . +Note that *qeq/point*\ , *qeq/dynamic* and *qeq/fire* styles all +describe charges as point charges that interact through 1/r +relationship, but solve partial charges on atoms using different +solvers. These three styles should yield comparable results if the QEq +parameters and *Nevery*\ , *cutoff*\ , and *tolerance* are the same. +Style *qeq/point* is typically faster, *qeq/dynamic* scales better on +larger sizes, and *qeq/fire* is faster than *qeq/dynamic*\ . .. note:: @@ -200,9 +206,11 @@ better on larger sizes, and *qeq/fire* is faster than *qeq/dynamic*\ . Restart, fix_modify, output, run start/stop, minimize info """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" -No information about these fixes is written to :doc:`binary restart files `. No global scalar or vector or per-atom -quantities are stored by these fixes for access by various :doc:`output commands `. No parameter of these fixes can be used -with the *start/stop* keywords of the :doc:`run ` command. +No information about these fixes is written to :doc:`binary restart +files `. No global scalar or vector or per-atom quantities are +stored by these fixes for access by various :doc:`output commands +`. No parameter of these fixes can be used with the +*start/stop* keywords of the :doc:`run ` command. Thexe fixes are invoked during :doc:`energy minimization `. @@ -210,7 +218,8 @@ Restrictions """""""""""" These fixes are part of the QEQ package. They are only enabled if -LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. +LAMMPS was built with that package. See the :doc:`Build package +` doc page for more info. Related commands """""""""""""""" From e1418a341a6cc0f196ae958807160e250229b5c9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 11 Apr 2021 06:05:41 -0400 Subject: [PATCH 09/38] ensure that only one of comb/comb3 is matched and called --- src/MANYBODY/fix_qeq_comb.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/MANYBODY/fix_qeq_comb.cpp b/src/MANYBODY/fix_qeq_comb.cpp index 910db90822..7c23e6c218 100644 --- a/src/MANYBODY/fix_qeq_comb.cpp +++ b/src/MANYBODY/fix_qeq_comb.cpp @@ -17,21 +17,21 @@ #include "fix_qeq_comb.h" -#include -#include -#include "pair_comb.h" -#include "pair_comb3.h" -#include "neigh_list.h" #include "atom.h" #include "comm.h" +#include "error.h" #include "force.h" #include "group.h" +#include "memory.h" +#include "neigh_list.h" #include "respa.h" #include "update.h" -#include "memory.h" -#include "error.h" +#include +#include +#include "pair_comb.h" +#include "pair_comb3.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -85,9 +85,6 @@ FixQEQComb::FixQEQComb(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) qf[i] = 0.0; - comb = nullptr; - comb3 = nullptr; - comm_forward = 1; } @@ -119,8 +116,9 @@ void FixQEQComb::init() if (!atom->q_flag) error->all(FLERR,"Fix qeq/comb requires atom attribute q"); - comb = (PairComb *) force->pair_match("^comb",0); comb3 = (PairComb3 *) force->pair_match("^comb3",0); + if (!comb3) comb = (PairComb *) force->pair_match("^comb",0); + if (comb == nullptr && comb3 == nullptr) error->all(FLERR,"Must use pair_style comb or comb3 with fix qeq/comb"); @@ -204,14 +202,17 @@ void FixQEQComb::post_force(int /*vflag*/) double *q = atom->q; int *mask = atom->mask; - if (comb) { + if (comb) { inum = comb->list->inum; ilist = comb->list->ilist; - } - if (comb3) { + } else if (comb3) { inum = comb3->list->inum; ilist = comb3->list->ilist; + } else { + inum = 0; + ilist = nullptr; } + for (ii = 0; ii < inum; ii++) { i = ilist[ii]; q1[i] = q2[i] = qf[i] = 0.0; @@ -227,8 +228,9 @@ void FixQEQComb::post_force(int /*vflag*/) } comm->forward_comm_fix(this); + enegtot = 0.0; if (comb) enegtot = comb->yasu_char(qf,igroup); - if (comb3) enegtot = comb3->combqeq(qf,igroup); + else if (comb3) enegtot = comb3->combqeq(qf,igroup); enegtot /= ngroup; enegchk = enegmax = 0.0; From bb0be962a91702abcd57b24651c898f60724555e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 11 Apr 2021 16:44:46 -0400 Subject: [PATCH 10/38] eliminate use of s(n)printf() in QEQ package --- src/QEQ/fix_qeq.cpp | 30 ++++++++++++--------------- src/QEQ/fix_qeq_dynamic.cpp | 27 ++++++++++--------------- src/QEQ/fix_qeq_fire.cpp | 39 ++++++++++++++---------------------- src/QEQ/fix_qeq_point.cpp | 28 ++++++++++++-------------- src/QEQ/fix_qeq_shielded.cpp | 32 ++++++++++++++--------------- src/QEQ/fix_qeq_slater.cpp | 30 ++++++++++++--------------- 6 files changed, 80 insertions(+), 106 deletions(-) diff --git a/src/QEQ/fix_qeq.cpp b/src/QEQ/fix_qeq.cpp index a63e008b36..e592ed2af4 100644 --- a/src/QEQ/fix_qeq.cpp +++ b/src/QEQ/fix_qeq.cpp @@ -18,16 +18,16 @@ #include "fix_qeq.h" -#include -#include #include "atom.h" #include "comm.h" -#include "neigh_list.h" -#include "update.h" +#include "error.h" #include "force.h" #include "memory.h" -#include "error.h" +#include "neigh_list.h" +#include "update.h" +#include +#include using namespace LAMMPS_NS; using namespace FixConst; @@ -386,13 +386,11 @@ int FixQEq::CG( double *b, double *x ) vector_sum( d, 1., p, beta, d, inum ); } - if (loop >= maxiter && comm->me == 0) { - char str[128]; - sprintf(str,"Fix qeq CG convergence failed (%g) after %d iterations " - "at " BIGINT_FORMAT " step",sqrt(sig_new)/b_norm,loop,update->ntimestep); - error->warning(FLERR,str); - } - + if ((comm->me == 0) && (loop >= maxiter)) + error->warning(FLERR,fmt::format("Fix qeq CG convergence failed ({}) " + "after {} iterations at step {}", + sqrt(sig_new)/b_norm,loop, + update->ntimestep)); return loop; } @@ -708,11 +706,9 @@ void FixQEq::read_file(char *file) FILE *fp; if (comm->me == 0) { fp = utils::open_potential(file,lmp,nullptr); - if (fp == nullptr) { - char str[128]; - snprintf(str,128,"Cannot open fix qeq parameter file %s",file); - error->one(FLERR,str); - } + if (fp == nullptr) + error->one(FLERR,fmt::format("Cannot open fix qeq parameter file {}: {}", + file,utils::getsyserror())); } // read each line out of file, skipping blank lines or leading '#' diff --git a/src/QEQ/fix_qeq_dynamic.cpp b/src/QEQ/fix_qeq_dynamic.cpp index b06bde223b..397393b786 100644 --- a/src/QEQ/fix_qeq_dynamic.cpp +++ b/src/QEQ/fix_qeq_dynamic.cpp @@ -17,20 +17,20 @@ #include "fix_qeq_dynamic.h" -#include - -#include #include "atom.h" #include "comm.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "update.h" +#include "error.h" #include "force.h" #include "group.h" #include "kspace.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" #include "respa.h" -#include "error.h" +#include "update.h" + +#include +#include using namespace LAMMPS_NS; @@ -154,14 +154,9 @@ void FixQEqDynamic::pre_force(int /*vflag*/) } } - if (comm->me == 0) { - if (iloop == maxiter) { - char str[128]; - sprintf(str,"Charges did not converge at step " BIGINT_FORMAT - ": %lg",update->ntimestep,enegchk); - error->warning(FLERR,str); - } - } + if ((comm->me == 0) && (iloop >= maxiter)) + error->warning(FLERR,fmt::format("Charges did not converge at step " + "{}: {}",update->ntimestep,enegchk)); if (force->kspace) force->kspace->qsum_qsq(); } diff --git a/src/QEQ/fix_qeq_fire.cpp b/src/QEQ/fix_qeq_fire.cpp index b33a7745e0..0bdf65dc18 100644 --- a/src/QEQ/fix_qeq_fire.cpp +++ b/src/QEQ/fix_qeq_fire.cpp @@ -17,22 +17,22 @@ #include "fix_qeq_fire.h" -#include - -#include #include "atom.h" #include "comm.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "update.h" +#include "error.h" #include "force.h" #include "group.h" +#include "kspace.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" #include "pair_comb.h" #include "pair_comb3.h" -#include "kspace.h" #include "respa.h" -#include "error.h" +#include "update.h" + +#include +#include using namespace LAMMPS_NS; using namespace FixConst; @@ -47,7 +47,7 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ FixQEqFire::FixQEqFire(LAMMPS *lmp, int narg, char **arg) : - FixQEq(lmp, narg, arg) + FixQEq(lmp, narg, arg), comb(nullptr), comb3(nullptr) { qdamp = 0.20; qstep = 0.20; @@ -65,9 +65,6 @@ FixQEqFire::FixQEqFire(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else error->all(FLERR,"Illegal fix qeq/fire command"); } - - comb = nullptr; - comb3 = nullptr; } /* ---------------------------------------------------------------------- */ @@ -94,9 +91,8 @@ void FixQEqFire::init() if (utils::strmatch(update->integrate_style,"^respa")) nlevels_respa = ((Respa *) update->integrate)->nlevels; - comb = (PairComb *) force->pair_match("comb",1); - comb3 = (PairComb3 *) force->pair_match("comb3",1); - + comb3 = (PairComb3 *) force->pair_match("^comb3",0); + if (!comb3) comb = (PairComb *) force->pair_match("^comb",0); } /* ---------------------------------------------------------------------- */ @@ -218,14 +214,9 @@ void FixQEqFire::pre_force(int /*vflag*/) if (enegchk < tolerance) break; } - if (comm->me == 0) { - if (iloop == maxiter) { - char str[128]; - sprintf(str,"Charges did not converge at step " BIGINT_FORMAT - ": %lg",update->ntimestep,enegchk); - error->warning(FLERR,str); - } - } + if ((comm->me == 0) && (iloop >= maxiter)) + error->warning(FLERR,fmt::format("Charges did not converge at step " + "{}: {}",update->ntimestep,enegchk)); if (force->kspace) force->kspace->qsum_qsq(); } diff --git a/src/QEQ/fix_qeq_point.cpp b/src/QEQ/fix_qeq_point.cpp index 3d71135ae1..ac31f906e0 100644 --- a/src/QEQ/fix_qeq_point.cpp +++ b/src/QEQ/fix_qeq_point.cpp @@ -16,20 +16,22 @@ ------------------------------------------------------------------------- */ #include "fix_qeq_point.h" -#include -#include + #include "atom.h" #include "comm.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "update.h" +#include "error.h" #include "force.h" #include "group.h" #include "kspace.h" -#include "respa.h" #include "memory.h" -#include "error.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" +#include "respa.h" +#include "update.h" + +#include +#include using namespace LAMMPS_NS; @@ -158,13 +160,9 @@ void FixQEqPoint::compute_H() } } - if (m_fill >= H.m) { - char str[128]; - sprintf(str,"H matrix size has been exceeded: m_fill=%d H.m=%d\n", - m_fill, H.m ); - error->warning(FLERR,str); - error->all(FLERR,"Fix qeq/point has insufficient QEq matrix size"); - } + if (m_fill >= H.m) + error->all(FLERR,fmt::format("Fix qeq/point has insufficient H matrix " + "size: m_fill={} H.m={}\n",m_fill, H.m)); } /* ---------------------------------------------------------------------- */ diff --git a/src/QEQ/fix_qeq_shielded.cpp b/src/QEQ/fix_qeq_shielded.cpp index 356a747ed3..ad6202abd8 100644 --- a/src/QEQ/fix_qeq_shielded.cpp +++ b/src/QEQ/fix_qeq_shielded.cpp @@ -16,21 +16,23 @@ ------------------------------------------------------------------------- */ #include "fix_qeq_shielded.h" -#include -#include + #include "atom.h" #include "comm.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "update.h" +#include "error.h" #include "force.h" #include "group.h" -#include "pair.h" #include "kspace.h" -#include "respa.h" #include "memory.h" -#include "error.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" +#include "pair.h" +#include "respa.h" +#include "update.h" + +#include +#include using namespace LAMMPS_NS; @@ -223,13 +225,9 @@ void FixQEqShielded::compute_H() } } - if (m_fill >= H.m) { - char str[128]; - sprintf(str,"H matrix size has been exceeded: m_fill=%d H.m=%d\n", - m_fill, H.m ); - error->warning(FLERR,str); - error->all(FLERR,"Fix qeq/shielded has insufficient QEq matrix size"); - } + if (m_fill >= H.m) + error->all(FLERR,fmt::format("Fix qeq/shielded has insufficient H matrix " + "size: m_fill={} H.m={}\n",m_fill,H.m)); } /* ---------------------------------------------------------------------- */ @@ -247,7 +245,7 @@ double FixQEqShielded::calculate_H( double r, double gamma ) Taper = Taper * r + Tap[0]; denom = r * r * r + gamma; - denom = pow(denom,0.3333333333333); + denom = pow(denom,1.0/3.0); return Taper * EV_TO_KCAL_PER_MOL / denom; } diff --git a/src/QEQ/fix_qeq_slater.cpp b/src/QEQ/fix_qeq_slater.cpp index 9b90f78d7a..326d71c93b 100644 --- a/src/QEQ/fix_qeq_slater.cpp +++ b/src/QEQ/fix_qeq_slater.cpp @@ -16,22 +16,23 @@ ------------------------------------------------------------------------- */ #include "fix_qeq_slater.h" -#include -#include #include "atom.h" #include "comm.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "update.h" +#include "error.h" #include "force.h" #include "group.h" -#include "pair.h" #include "kspace.h" -#include "respa.h" #include "math_const.h" -#include "error.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" +#include "pair.h" +#include "respa.h" +#include "update.h" + +#include +#include using namespace LAMMPS_NS; using namespace MathConst; @@ -207,14 +208,9 @@ void FixQEqSlater::compute_H() chizj[i] = zjtmp; } - if (m_fill >= H.m) { - char str[128]; - sprintf(str,"H matrix size has been exceeded: m_fill=%d H.m=%d\n", - m_fill, H.m ); - error->warning(FLERR,str); - error->all(FLERR,"Fix qeq/slater has insufficient QEq matrix size"); - } - + if (m_fill >= H.m) + error->all(FLERR,fmt::format(FLERR,"Fix qeq/slater has insufficient H " + "matrix size:m_fill={} H.m={}\n",m_fill,H.m)); } /* ---------------------------------------------------------------------- */ From 38d5798223a6946e688749b2d3dabe13810f659b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 11 Apr 2021 21:36:18 -0400 Subject: [PATCH 11/38] must not look for package metadata when using python module from source tree --- python/lammps/__init__.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/python/lammps/__init__.py b/python/lammps/__init__.py index e6ffd779a9..93c46819c0 100644 --- a/python/lammps/__init__.py +++ b/python/lammps/__init__.py @@ -13,10 +13,16 @@ from .core import * from .data import * from .pylammps import * -# convert module string version to numeric version +# convert installed module string version to numeric version def get_version_number(): import time + from os.path import join from sys import version_info + + # must report 0 when inside LAMMPS source tree + if __file__.find(join('python', 'lammps', '__init__.py')) > 0: + return 0 + vstring = None if version_info.major == 3 and version_info.minor >= 8: from importlib.metadata import version From c324d754a0644f2a50c5b376ca3318b8fc1a3396 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Apr 2021 10:51:44 -0400 Subject: [PATCH 12/38] when installing the LAMMPS python package create a valid version id --- python/install.py | 8 +++++--- python/lammps/__init__.py | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/python/install.py b/python/install.py index 6e4c509f07..fbff02a1b5 100644 --- a/python/install.py +++ b/python/install.py @@ -10,7 +10,7 @@ build target in the conventional and CMake based build systems # copy LAMMPS shared library and lammps package to system dirs from __future__ import print_function -import sys,os,shutil +import sys,os,shutil,time from argparse import ArgumentParser parser = ArgumentParser(prog='install.py', @@ -80,13 +80,15 @@ if args.dir: sys.exit() -# extract version string from header +# extract LAMMPS version string from header +# and convert to python packaging compatible version def get_lammps_version(header): with open(header, 'r') as f: line = f.readline() start_pos = line.find('"')+1 end_pos = line.find('"', start_pos) - return "".join(line[start_pos:end_pos].split()) + t = time.strptime("".join(line[start_pos:end_pos].split()), "%d%b%Y") + return "{}.{}.{}".format(t.tm_year,t.tm_mon,t.tm_mday) verstr = get_lammps_version(args.version) diff --git a/python/lammps/__init__.py b/python/lammps/__init__.py index 93c46819c0..2c0e7a6fe3 100644 --- a/python/lammps/__init__.py +++ b/python/lammps/__init__.py @@ -38,7 +38,7 @@ def get_version_number(): if not vstring: return 0 - t = time.strptime(vstring, "%d%b%Y") + t = time.strptime(vstring, "%Y.%m.%d") return t.tm_year*10000 + t.tm_mon*100 + t.tm_mday __version__ = get_version_number() From 5605a237cf74184581cb1cffca17cba9b6b617c8 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 12 Apr 2021 10:27:20 -0600 Subject: [PATCH 13/38] working on the typedef correction --- src/KOKKOS/atom_kokkos.h | 9 ++- src/KOKKOS/atom_vec_spin_kokkos.cpp | 27 +++++-- src/KOKKOS/kokkos_type.h | 108 ++++++++++++++++++---------- 3 files changed, 95 insertions(+), 49 deletions(-) diff --git a/src/KOKKOS/atom_kokkos.h b/src/KOKKOS/atom_kokkos.h index 908958ab14..f5649f927e 100644 --- a/src/KOKKOS/atom_kokkos.h +++ b/src/KOKKOS/atom_kokkos.h @@ -56,9 +56,12 @@ class AtomKokkos : public Atom { // SPIN package - DAT::tdual_sp_array k_sp; - DAT::tdual_fm_array k_fm; - DAT::tdual_fm_long_array k_fm_long; + // DAT::tdual_sp_array k_sp; + // DAT::tdual_fm_array k_fm; + // DAT::tdual_fm_long_array k_fm_long; + DAT::tdual_float_1d_4 k_sp; + DAT::tdual_f_array k_fm; + DAT::tdual_f_array k_fm_long; // USER-DPD package DAT::tdual_efloat_1d k_uCond, k_uMech, k_uChem, k_uCG, k_uCGnew, diff --git a/src/KOKKOS/atom_vec_spin_kokkos.cpp b/src/KOKKOS/atom_vec_spin_kokkos.cpp index e513ff2ffa..5e3ff19831 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.cpp +++ b/src/KOKKOS/atom_vec_spin_kokkos.cpp @@ -189,7 +189,8 @@ struct AtomVecSpinKokkos_PackComm { AtomVecSpinKokkos_PackComm( const typename DAT::tdual_x_array &x, - const typename DAT::tdual_sp_array &sp, + // const typename DAT::tdual_sp_array &sp, + const typename DAT::tdual_float_1d_4 &sp, const typename DAT::tdual_xfloat_2d &buf, const typename DAT::tdual_int_2d &list, const int & iswap, @@ -1269,12 +1270,18 @@ void AtomVecSpinKokkos::sync_overlapping_device(ExecutionSpace space, unsigned i perform_async_copy(atomKK->k_mask,space); if ((mask & IMAGE_MASK) && atomKK->k_image.need_sync()) perform_async_copy(atomKK->k_image,space); + // if ((mask & SP_MASK) && atomKK->k_sp.need_sync()) + // perform_async_copy(atomKK->k_sp,space); if ((mask & SP_MASK) && atomKK->k_sp.need_sync()) - perform_async_copy(atomKK->k_sp,space); + perform_async_copy(atomKK->k_sp,space); + // if ((mask & FM_MASK) && atomKK->k_sp.need_sync()) + // perform_async_copy(atomKK->k_fm,space); if ((mask & FM_MASK) && atomKK->k_sp.need_sync()) - perform_async_copy(atomKK->k_fm,space); + perform_async_copy(atomKK->k_fm,space); + // if ((mask & FML_MASK) && atomKK->k_fm_long.need_sync()) + // perform_async_copy(atomKK->k_fm_long,space); if ((mask & FML_MASK) && atomKK->k_fm_long.need_sync()) - perform_async_copy(atomKK->k_fm_long,space); + perform_async_copy(atomKK->k_fm_long,space); } else { if ((mask & X_MASK) && atomKK->k_x.need_sync()) perform_async_copy(atomKK->k_x,space); @@ -1290,12 +1297,18 @@ void AtomVecSpinKokkos::sync_overlapping_device(ExecutionSpace space, unsigned i perform_async_copy(atomKK->k_mask,space); if ((mask & IMAGE_MASK) && atomKK->k_image.need_sync()) perform_async_copy(atomKK->k_image,space); + // if ((mask & SP_MASK) && atomKK->k_sp.need_sync()) + // perform_async_copy(atomKK->k_sp,space); if ((mask & SP_MASK) && atomKK->k_sp.need_sync()) - perform_async_copy(atomKK->k_sp,space); + perform_async_copy(atomKK->k_sp,space); + // if ((mask & FM_MASK) && atomKK->k_fm.need_sync()) + // perform_async_copy(atomKK->k_fm,space); if ((mask & FM_MASK) && atomKK->k_fm.need_sync()) - perform_async_copy(atomKK->k_fm,space); + perform_async_copy(atomKK->k_fm,space); + // if ((mask & FML_MASK) && atomKK->k_fm_long.need_sync()) + // perform_async_copy(atomKK->k_fm_long,space); if ((mask & FML_MASK) && atomKK->k_fm_long.need_sync()) - perform_async_copy(atomKK->k_fm_long,space); + perform_async_copy(atomKK->k_fm_long,space); } } diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index e0e1dc8269..b0fbdf1f9f 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -773,33 +773,50 @@ typedef tdual_virial_array::t_dev_const_randomread t_virial_array_randomread; //3d SP_FLOAT array n*4 #ifdef LMP_KOKKOS_NO_LEGACY -typedef Kokkos::DualView tdual_sp_array; +// typedef Kokkos::DualView tdual_sp_array; +typedef Kokkos::DualView tdual_float_1d_4; #else -typedef Kokkos::DualView tdual_sp_array; +// typedef Kokkos::DualView tdual_sp_array; +typedef Kokkos::DualView tdual_float_1d_4; #endif -typedef tdual_sp_array::t_dev t_sp_array; -typedef tdual_sp_array::t_dev_const t_sp_array_const; -typedef tdual_sp_array::t_dev_um t_sp_array_um; -typedef tdual_sp_array::t_dev_const_um t_sp_array_const_um; -typedef tdual_sp_array::t_dev_const_randomread t_sp_array_randomread; +// typedef tdual_sp_array::t_dev t_sp_array; +// typedef tdual_sp_array::t_dev_const t_sp_array_const; +// typedef tdual_sp_array::t_dev_um t_sp_array_um; +// typedef tdual_sp_array::t_dev_const_um t_sp_array_const_um; +// typedef tdual_sp_array::t_dev_const_randomread t_sp_array_randomread; +typedef tdual_float_1d_4::t_dev t_sp_array; +typedef tdual_float_1d_4::t_dev_const t_sp_array_const; +typedef tdual_float_1d_4::t_dev_um t_sp_array_um; +typedef tdual_float_1d_4::t_dev_const_um t_sp_array_const_um; +typedef tdual_float_1d_4::t_dev_const_randomread t_sp_array_randomread; //3d FM_FLOAT array n*3 -typedef Kokkos::DualView tdual_fm_array; -typedef tdual_fm_array::t_dev t_fm_array; -typedef tdual_fm_array::t_dev_const t_fm_array_const; -typedef tdual_fm_array::t_dev_um t_fm_array_um; -typedef tdual_fm_array::t_dev_const_um t_fm_array_const_um; -typedef tdual_fm_array::t_dev_const_randomread t_fm_array_randomread; +// typedef Kokkos::DualView tdual_fm_array; +// typedef tdual_fm_array::t_dev t_fm_array; +// typedef tdual_fm_array::t_dev_const t_fm_array_const; +// typedef tdual_fm_array::t_dev_um t_fm_array_um; +// typedef tdual_fm_array::t_dev_const_um t_fm_array_const_um; +// typedef tdual_fm_array::t_dev_const_randomread t_fm_array_randomread; +typedef tdual_f_array::t_dev t_fm_array; +typedef tdual_f_array::t_dev_const t_fm_array_const; +typedef tdual_f_array::t_dev_um t_fm_array_um; +typedef tdual_f_array::t_dev_const_um t_fm_array_const_um; +typedef tdual_f_array::t_dev_const_randomread t_fm_array_randomread; //3d FML_FLOAT array n*3 -typedef Kokkos::DualView tdual_fm_long_array; -typedef tdual_fm_long_array::t_dev t_fm_long_array; -typedef tdual_fm_long_array::t_dev_const t_fm_long_array_const; -typedef tdual_fm_long_array::t_dev_um t_fm_long_array_um; -typedef tdual_fm_long_array::t_dev_const_um t_fm_long_array_const_um; -typedef tdual_fm_long_array::t_dev_const_randomread t_fm_long_array_randomread; +// typedef Kokkos::DualView tdual_fm_long_array; +// typedef tdual_fm_long_array::t_dev t_fm_long_array; +// typedef tdual_fm_long_array::t_dev_const t_fm_long_array_const; +// typedef tdual_fm_long_array::t_dev_um t_fm_long_array_um; +// typedef tdual_fm_long_array::t_dev_const_um t_fm_long_array_const_um; +// typedef tdual_fm_long_array::t_dev_const_randomread t_fm_long_array_randomread; +typedef tdual_f_array::t_dev t_fm_long_array; +typedef tdual_f_array::t_dev_const t_fm_long_array_const; +typedef tdual_f_array::t_dev_um t_fm_long_array_um; +typedef tdual_f_array::t_dev_const_um t_fm_long_array_const_um; +typedef tdual_f_array::t_dev_const_randomread t_fm_long_array_randomread; //Energy Types //1d E_FLOAT array n @@ -1040,30 +1057,43 @@ typedef tdual_virial_array::t_host_const_randomread t_virial_array_randomread; // Spin types //2d X_FLOAT array n*4 -typedef Kokkos::DualView tdual_sp_array; -typedef tdual_sp_array::t_host t_sp_array; -typedef tdual_sp_array::t_host_const t_sp_array_const; -typedef tdual_sp_array::t_host_um t_sp_array_um; -typedef tdual_sp_array::t_host_const_um t_sp_array_const_um; -typedef tdual_sp_array::t_host_const_randomread t_sp_array_randomread; +// typedef Kokkos::DualView tdual_sp_array; +// typedef tdual_sp_array::t_host t_sp_array; +// typedef tdual_sp_array::t_host_const t_sp_array_const; +// typedef tdual_sp_array::t_host_um t_sp_array_um; +// typedef tdual_sp_array::t_host_const_um t_sp_array_const_um; +// typedef tdual_sp_array::t_host_const_randomread t_sp_array_randomread; +typedef tdual_float_1d_4::t_host t_sp_array; +typedef tdual_float_1d_4::t_host_const t_sp_array_const; +typedef tdual_float_1d_4::t_host_um t_sp_array_um; +typedef tdual_float_1d_4::t_host_const_um t_sp_array_const_um; +typedef tdual_float_1d_4::t_host_const_randomread t_sp_array_randomread; //2d F_FLOAT array n*3 -typedef Kokkos::DualView tdual_fm_array; -//typedef Kokkos::DualView tdual_f_array; -typedef tdual_fm_array::t_host t_fm_array; -typedef tdual_fm_array::t_host_const t_fm_array_const; -typedef tdual_fm_array::t_host_um t_fm_array_um; -typedef tdual_fm_array::t_host_const_um t_fm_array_const_um; -typedef tdual_fm_array::t_host_const_randomread t_fm_array_randomread; +// typedef Kokkos::DualView tdual_fm_array; +// typedef tdual_fm_array::t_host t_fm_array; +// typedef tdual_fm_array::t_host_const t_fm_array_const; +// typedef tdual_fm_array::t_host_um t_fm_array_um; +// typedef tdual_fm_array::t_host_const_um t_fm_array_const_um; +// typedef tdual_fm_array::t_host_const_randomread t_fm_array_randomread; +typedef tdual_f_array::t_host t_fm_array; +typedef tdual_f_array::t_host_const t_fm_array_const; +typedef tdual_f_array::t_host_um t_fm_array_um; +typedef tdual_f_array::t_host_const_um t_fm_array_const_um; +typedef tdual_f_array::t_host_const_randomread t_fm_array_randomread; //2d F_FLOAT array n*3 -typedef Kokkos::DualView tdual_fm_long_array; -//typedef Kokkos::DualView tdual_f_array; -typedef tdual_fm_long_array::t_host t_fm_long_array; -typedef tdual_fm_long_array::t_host_const t_fm_long_array_const; -typedef tdual_fm_long_array::t_host_um t_fm_long_array_um; -typedef tdual_fm_long_array::t_host_const_um t_fm_long_array_const_um; -typedef tdual_fm_long_array::t_host_const_randomread t_fm_long_array_randomread; +// typedef Kokkos::DualView tdual_fm_long_array; +// typedef tdual_fm_long_array::t_host t_fm_long_array; +// typedef tdual_fm_long_array::t_host_const t_fm_long_array_const; +// typedef tdual_fm_long_array::t_host_um t_fm_long_array_um; +// typedef tdual_fm_long_array::t_host_const_um t_fm_long_array_const_um; +// typedef tdual_fm_long_array::t_host_const_randomread t_fm_long_array_randomread; +typedef tdual_f_array::t_host t_fm_long_array; +typedef tdual_f_array::t_host_const t_fm_long_array_const; +typedef tdual_f_array::t_host_um t_fm_long_array_um; +typedef tdual_f_array::t_host_const_um t_fm_long_array_const_um; +typedef tdual_f_array::t_host_const_randomread t_fm_long_array_randomread; //Energy Types From d08d59acb3cd4e271cc8d106ead2865636d3128c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Apr 2021 15:00:21 -0400 Subject: [PATCH 14/38] whitespace fix --- src/pair_coul_cut.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pair_coul_cut.cpp b/src/pair_coul_cut.cpp index 428c12c2e0..629d39a9c5 100644 --- a/src/pair_coul_cut.cpp +++ b/src/pair_coul_cut.cpp @@ -260,7 +260,7 @@ void PairCoulCut::read_restart(FILE *fp) MPI_Bcast(&scale[i][j],1,MPI_DOUBLE,0,world); MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); if (setflag[i][j]) { - if (me == 0) + if (me == 0) utils::sfread(FLERR,&cut[i][j],sizeof(double),1,fp,nullptr,error); MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world); } From e49e505b9f096bb1e954e99e51544353eff4ceb8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Apr 2021 23:16:02 -0400 Subject: [PATCH 15/38] make utility function private --- src/USER-COLVARS/ndx_group.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/USER-COLVARS/ndx_group.h b/src/USER-COLVARS/ndx_group.h index ceca1f9570..944638017d 100644 --- a/src/USER-COLVARS/ndx_group.h +++ b/src/USER-COLVARS/ndx_group.h @@ -31,6 +31,7 @@ class Ndx2Group : protected Pointers { public: Ndx2Group(class LAMMPS *lmp) : Pointers(lmp) {}; void command(int, char **); + private: void create(const std::string &, const std::vector &); }; From d8c68dec6f9f38e162cf428a231c70c44bc866ae Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Apr 2021 23:32:26 -0400 Subject: [PATCH 16/38] whitespace fixes --- doc/src/Build_extras.rst | 8 ++++---- src/COMPRESS/gz_file_writer.cpp | 2 +- src/MC/fix_charge_regulation.cpp | 2 +- src/USER-PACE/README | 20 ++++++++++---------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index 12bb33f264..d375d33e56 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -1253,8 +1253,8 @@ be built for the most part with all major versions of the C++ language. USER-PACE package ----------------------------- -This package requires a library that can be downloaded and built -in lib/pace or somewhere else, which must be done before building +This package requires a library that can be downloaded and built +in lib/pace or somewhere else, which must be done before building LAMMPS with this package. The code for the library can be found at: `https://github.com/ICAMS/lammps-user-pace/ `_ @@ -1276,8 +1276,8 @@ at: `https://github.com/ICAMS/lammps-user-pace/ triclinic; + triclinic = domain->triclinic; int ipe = modify->find_compute("thermo_pe"); c_pe = modify->compute[ipe]; diff --git a/src/USER-PACE/README b/src/USER-PACE/README index 3d85c806e9..c701a615f7 100644 --- a/src/USER-PACE/README +++ b/src/USER-PACE/README @@ -1,23 +1,23 @@ -The USER-PACE package provides the pace pair style, -an efficient implementation of the Atomic Cluster Expansion +The USER-PACE package provides the pace pair style, +an efficient implementation of the Atomic Cluster Expansion potential (ACE). -ACE is a methodology for deriving a highly accurate classical -potential fit to a large archive of quantum mechanical (DFT) data. +ACE is a methodology for deriving a highly accurate classical +potential fit to a large archive of quantum mechanical (DFT) data. This package was written by Yury Lysogorskiy and others -at ICAMS, the Interdisciplinary Centre for Advanced Materials Simulation, +at ICAMS, the Interdisciplinary Centre for Advanced Materials Simulation, Ruhr University Bochum, Germany (http://www.icams.de). -This package requires a library that can be downloaded and built -in lib/pace or somewhere else, which must be done before building -LAMMPS with this package. Details of the download, build, and -install process for this package using traditional make (not CMake) +This package requires a library that can be downloaded and built +in lib/pace or somewhere else, which must be done before building +LAMMPS with this package. Details of the download, build, and +install process for this package using traditional make (not CMake) are given in the lib/pace/README file, and scripts are provided to help automate the process. Also see the LAMMPS manual for general information on building LAMMPS with external libraries using either traditional make or CMake. -More information about the USER-PACE implementation of ACE +More information about the USER-PACE implementation of ACE is available here: https://github.com/ICAMS/lammps-user-pace From 02612047c34aac6dd90082b7c90c85df001cdf9e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 12 Apr 2021 23:57:30 -0400 Subject: [PATCH 17/38] must set CMAKE_EXPORT_COMPILE_COMMANDS ON for using iwyu --- cmake/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index f567a15d25..a11c7575d2 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -269,6 +269,7 @@ endif() set(ENABLE_IWYU OFF CACHE BOOL "Add 'iwyu' build target to call the include-what-you-use tool") mark_as_advanced(ENABLE_IWYU) if(ENABLE_IWYU) + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) find_program(IWYU_EXE NAMES include-what-you-use iwyu) find_program(IWYU_TOOL NAMES iwyu_tool iwyu-tool iwyu_tool.py) if (IWYU_EXE AND IWYU_TOOL) From fab571cf6bc1a1ba3aaa5b261f0244fda49a46b7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 00:32:11 -0400 Subject: [PATCH 18/38] IWYU reported header updates --- src/body.cpp | 1 - src/compute.cpp | 1 - src/compute_chunk_spread_atom.cpp | 2 ++ src/compute_reduce.cpp | 2 ++ src/compute_temp_region.cpp | 9 ++++----- src/fix.cpp | 1 - src/fix_controller.cpp | 2 -- src/fix_enforce2d.cpp | 7 +++---- src/fix_lineforce.cpp | 1 - src/fix_nph_sphere.cpp | 2 -- src/fix_npt_sphere.cpp | 2 -- src/fix_nve_limit.cpp | 11 +++++------ src/fix_nve_noforce.cpp | 6 +++--- src/fix_planeforce.cpp | 1 - src/fix_store_force.cpp | 8 ++++---- src/fix_vector.cpp | 2 -- src/group.cpp | 1 - src/imbalance_store.cpp | 2 -- src/imbalance_var.cpp | 2 -- src/info.cpp | 1 - src/library.cpp | 1 - src/math_eigen.cpp | 4 +++- src/math_special.cpp | 2 -- src/my_pool_chunk.cpp | 1 - src/npair_full_bin_atomonly.cpp | 6 +++--- src/npair_half_bin_atomonly_newton.cpp | 6 +++--- src/npair_half_size_bin_newtoff.cpp | 6 +++--- src/npair_half_size_bin_newton.cpp | 6 +++--- src/npair_half_size_bin_newton_tri.cpp | 6 +++--- src/npair_half_size_multi_newtoff.cpp | 6 +++--- src/npair_half_size_multi_newton.cpp | 6 +++--- src/npair_half_size_multi_newton_tri.cpp | 6 +++--- src/npair_half_size_nsq_newtoff.cpp | 6 +++--- src/npair_half_size_nsq_newton.cpp | 6 +++--- src/npair_halffull_newtoff.cpp | 6 +++--- src/npair_halffull_newton.cpp | 6 +++--- src/npair_skip.cpp | 6 +++--- src/npair_skip_respa.cpp | 6 +++--- src/npair_skip_size.cpp | 6 +++--- src/npair_skip_size_off2on.cpp | 6 +++--- src/npair_skip_size_off2on_oneside.cpp | 6 +++--- src/output.cpp | 3 --- src/pair_lj96_cut.cpp | 15 +++++++-------- src/pair_lj_relres.cpp | 1 - src/reader.cpp | 2 -- src/region_sphere.cpp | 1 - src/tokenizer.cpp | 1 - src/universe.cpp | 2 -- src/variable.cpp | 1 - src/write_coeff.cpp | 1 - src/write_data.cpp | 1 - src/write_restart.cpp | 1 - 52 files changed, 84 insertions(+), 119 deletions(-) diff --git a/src/body.cpp b/src/body.cpp index 89bb2fc1d9..2c4121b0cc 100644 --- a/src/body.cpp +++ b/src/body.cpp @@ -12,7 +12,6 @@ ------------------------------------------------------------------------- */ #include "body.h" -#include using namespace LAMMPS_NS; diff --git a/src/compute.cpp b/src/compute.cpp index 81e317076c..46bd0d0fc8 100644 --- a/src/compute.cpp +++ b/src/compute.cpp @@ -22,7 +22,6 @@ #include "modify.h" #include -#include using namespace LAMMPS_NS; diff --git a/src/compute_chunk_spread_atom.cpp b/src/compute_chunk_spread_atom.cpp index d817141064..f552454e72 100644 --- a/src/compute_chunk_spread_atom.cpp +++ b/src/compute_chunk_spread_atom.cpp @@ -23,6 +23,8 @@ #include "modify.h" #include "update.h" +#include + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp index 30b4fcb98a..6e961df47a 100644 --- a/src/compute_reduce.cpp +++ b/src/compute_reduce.cpp @@ -25,6 +25,8 @@ #include "update.h" #include "variable.h" +#include + using namespace LAMMPS_NS; #define BIG 1.0e20 diff --git a/src/compute_temp_region.cpp b/src/compute_temp_region.cpp index 036f118a30..535a0166c5 100644 --- a/src/compute_temp_region.cpp +++ b/src/compute_temp_region.cpp @@ -13,15 +13,14 @@ #include "compute_temp_region.h" -#include #include "atom.h" -#include "update.h" -#include "force.h" #include "domain.h" -#include "region.h" +#include "error.h" +#include "force.h" #include "group.h" #include "memory.h" -#include "error.h" +#include "region.h" +#include "update.h" using namespace LAMMPS_NS; diff --git a/src/fix.cpp b/src/fix.cpp index 32a76cc125..14c04bf4b5 100644 --- a/src/fix.cpp +++ b/src/fix.cpp @@ -21,7 +21,6 @@ #include "memory.h" #include -#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_controller.cpp b/src/fix_controller.cpp index 21d1ccf751..c611dee271 100644 --- a/src/fix_controller.cpp +++ b/src/fix_controller.cpp @@ -21,8 +21,6 @@ #include "update.h" #include "variable.h" -#include - using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_enforce2d.cpp b/src/fix_enforce2d.cpp index 1284a9b78c..11e041fcf4 100644 --- a/src/fix_enforce2d.cpp +++ b/src/fix_enforce2d.cpp @@ -12,14 +12,13 @@ ------------------------------------------------------------------------- */ #include "fix_enforce2d.h" -#include + #include "atom.h" -#include "update.h" #include "domain.h" +#include "error.h" #include "modify.h" #include "respa.h" -#include "error.h" - +#include "update.h" using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_lineforce.cpp b/src/fix_lineforce.cpp index 6a77442ea4..d95aacfd93 100644 --- a/src/fix_lineforce.cpp +++ b/src/fix_lineforce.cpp @@ -19,7 +19,6 @@ #include "update.h" #include -#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_nph_sphere.cpp b/src/fix_nph_sphere.cpp index 20e072d5b5..1266cb2b9d 100644 --- a/src/fix_nph_sphere.cpp +++ b/src/fix_nph_sphere.cpp @@ -16,8 +16,6 @@ #include "error.h" #include "modify.h" -#include - using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_npt_sphere.cpp b/src/fix_npt_sphere.cpp index a6dfeba425..8bbd43d4cf 100644 --- a/src/fix_npt_sphere.cpp +++ b/src/fix_npt_sphere.cpp @@ -16,8 +16,6 @@ #include "error.h" #include "modify.h" -#include - using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_nve_limit.cpp b/src/fix_nve_limit.cpp index 58db5e25d9..58dc023991 100644 --- a/src/fix_nve_limit.cpp +++ b/src/fix_nve_limit.cpp @@ -13,16 +13,15 @@ #include "fix_nve_limit.h" -#include -#include #include "atom.h" -#include "force.h" -#include "update.h" -#include "respa.h" -#include "modify.h" #include "comm.h" #include "error.h" +#include "force.h" +#include "modify.h" +#include "respa.h" +#include "update.h" +#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_nve_noforce.cpp b/src/fix_nve_noforce.cpp index 61528a0024..e6bca3b608 100644 --- a/src/fix_nve_noforce.cpp +++ b/src/fix_nve_noforce.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "fix_nve_noforce.h" -#include + #include "atom.h" -#include "update.h" -#include "respa.h" #include "error.h" +#include "respa.h" +#include "update.h" using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_planeforce.cpp b/src/fix_planeforce.cpp index 783d26ac9e..fe6f3d6500 100644 --- a/src/fix_planeforce.cpp +++ b/src/fix_planeforce.cpp @@ -19,7 +19,6 @@ #include "update.h" #include -#include using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_store_force.cpp b/src/fix_store_force.cpp index 1541294f6c..7ebd4db75a 100644 --- a/src/fix_store_force.cpp +++ b/src/fix_store_force.cpp @@ -12,12 +12,12 @@ ------------------------------------------------------------------------- */ #include "fix_store_force.h" -#include + #include "atom.h" -#include "update.h" -#include "respa.h" -#include "memory.h" #include "error.h" +#include "memory.h" +#include "respa.h" +#include "update.h" using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/fix_vector.cpp b/src/fix_vector.cpp index afd3778841..71a8bb3d3c 100644 --- a/src/fix_vector.cpp +++ b/src/fix_vector.cpp @@ -22,8 +22,6 @@ #include "update.h" #include "variable.h" -#include - using namespace LAMMPS_NS; using namespace FixConst; diff --git a/src/group.cpp b/src/group.cpp index ebab78dd0f..0143008a72 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -35,7 +35,6 @@ #include #include #include -#include using namespace LAMMPS_NS; diff --git a/src/imbalance_store.cpp b/src/imbalance_store.cpp index 879b434bfd..e72ef4d50b 100644 --- a/src/imbalance_store.cpp +++ b/src/imbalance_store.cpp @@ -16,8 +16,6 @@ #include "atom.h" #include "error.h" -#include - using namespace LAMMPS_NS; /* -------------------------------------------------------------------- */ diff --git a/src/imbalance_var.cpp b/src/imbalance_var.cpp index d2a4f0d691..64f98a6a26 100644 --- a/src/imbalance_var.cpp +++ b/src/imbalance_var.cpp @@ -20,8 +20,6 @@ #include "memory.h" #include "variable.h" -#include - using namespace LAMMPS_NS; /* -------------------------------------------------------------------- */ diff --git a/src/info.cpp b/src/info.cpp index 948073bb10..f1ee327191 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -39,7 +39,6 @@ #include "pair.h" #include "pair_hybrid.h" #include "region.h" -#include "universe.h" #include "update.h" #include "variable.h" diff --git a/src/library.cpp b/src/library.cpp index 300aafc293..c51006f8d8 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -31,7 +31,6 @@ #include "group.h" #include "info.h" #include "input.h" -#include "integrate.h" #include "memory.h" #include "modify.h" #include "molecule.h" diff --git a/src/math_eigen.cpp b/src/math_eigen.cpp index ab00e42ae0..10caccd0e5 100644 --- a/src/math_eigen.cpp +++ b/src/math_eigen.cpp @@ -18,7 +18,9 @@ #include "math_eigen.h" #include "math_eigen_impl.h" -#include +#include +#include +#include using std::vector; using std::array; diff --git a/src/math_special.cpp b/src/math_special.cpp index 243d5a05f3..8d48158e72 100644 --- a/src/math_special.cpp +++ b/src/math_special.cpp @@ -4,8 +4,6 @@ #include // IWYU pragma: keep #include -#include "error.h" - using namespace LAMMPS_NS; static constexpr int nmaxfactorial = 167; diff --git a/src/my_pool_chunk.cpp b/src/my_pool_chunk.cpp index d866804adc..d824b0557b 100644 --- a/src/my_pool_chunk.cpp +++ b/src/my_pool_chunk.cpp @@ -14,7 +14,6 @@ #include "my_pool_chunk.h" #include -#include #if defined(LMP_USER_INTEL) && !defined(LAMMPS_MEMALIGN) && !defined(_WIN32) #define LAMMPS_MEMALIGN 64 diff --git a/src/npair_full_bin_atomonly.cpp b/src/npair_full_bin_atomonly.cpp index 4e05c2c17a..8ace197e30 100644 --- a/src/npair_full_bin_atomonly.cpp +++ b/src/npair_full_bin_atomonly.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_full_bin_atomonly.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_half_bin_atomonly_newton.cpp b/src/npair_half_bin_atomonly_newton.cpp index 2dd0bd0b96..2007bda728 100644 --- a/src/npair_half_bin_atomonly_newton.cpp +++ b/src/npair_half_bin_atomonly_newton.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_half_bin_atomonly_newton.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_half_size_bin_newtoff.cpp b/src/npair_half_size_bin_newtoff.cpp index 2d406d533c..5b9eee3672 100644 --- a/src/npair_half_size_bin_newtoff.cpp +++ b/src/npair_half_size_bin_newtoff.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_half_size_bin_newtoff.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_half_size_bin_newton.cpp b/src/npair_half_size_bin_newton.cpp index 820b293414..9cf4e744ab 100644 --- a/src/npair_half_size_bin_newton.cpp +++ b/src/npair_half_size_bin_newton.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_half_size_bin_newton.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_half_size_bin_newton_tri.cpp b/src/npair_half_size_bin_newton_tri.cpp index ea878ef440..83f903c864 100644 --- a/src/npair_half_size_bin_newton_tri.cpp +++ b/src/npair_half_size_bin_newton_tri.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_half_size_bin_newton_tri.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_half_size_multi_newtoff.cpp b/src/npair_half_size_multi_newtoff.cpp index d57542f562..f1bc93de38 100644 --- a/src/npair_half_size_multi_newtoff.cpp +++ b/src/npair_half_size_multi_newtoff.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_half_size_multi_newtoff.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_half_size_multi_newton.cpp b/src/npair_half_size_multi_newton.cpp index 01065876af..22a02899ca 100644 --- a/src/npair_half_size_multi_newton.cpp +++ b/src/npair_half_size_multi_newton.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_half_size_multi_newton.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_half_size_multi_newton_tri.cpp b/src/npair_half_size_multi_newton_tri.cpp index 361c0ba260..268ca81f3d 100644 --- a/src/npair_half_size_multi_newton_tri.cpp +++ b/src/npair_half_size_multi_newton_tri.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_half_size_multi_newton_tri.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_half_size_nsq_newtoff.cpp b/src/npair_half_size_nsq_newtoff.cpp index 38594ebcb1..79302042a6 100644 --- a/src/npair_half_size_nsq_newtoff.cpp +++ b/src/npair_half_size_nsq_newtoff.cpp @@ -12,12 +12,12 @@ ------------------------------------------------------------------------- */ #include "npair_half_size_nsq_newtoff.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" +#include "error.h" #include "group.h" #include "my_page.h" -#include "error.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_half_size_nsq_newton.cpp b/src/npair_half_size_nsq_newton.cpp index 9010ca9a86..1ac6223afa 100644 --- a/src/npair_half_size_nsq_newton.cpp +++ b/src/npair_half_size_nsq_newton.cpp @@ -12,12 +12,12 @@ ------------------------------------------------------------------------- */ #include "npair_half_size_nsq_newton.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" +#include "error.h" #include "group.h" #include "my_page.h" -#include "error.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_halffull_newtoff.cpp b/src/npair_halffull_newtoff.cpp index e2965b4a46..52f981e843 100644 --- a/src/npair_halffull_newtoff.cpp +++ b/src/npair_halffull_newtoff.cpp @@ -12,10 +12,10 @@ ------------------------------------------------------------------------- */ #include "npair_halffull_newtoff.h" -#include "neigh_list.h" -#include "atom_vec.h" -#include "my_page.h" + #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_halffull_newton.cpp b/src/npair_halffull_newton.cpp index 99b5493f3e..cf15af8f18 100644 --- a/src/npair_halffull_newton.cpp +++ b/src/npair_halffull_newton.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_halffull_newton.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_skip.cpp b/src/npair_skip.cpp index 45540ab2fa..6046464ecf 100644 --- a/src/npair_skip.cpp +++ b/src/npair_skip.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_skip.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_skip_respa.cpp b/src/npair_skip_respa.cpp index 3479a5d8ce..d24a30794e 100644 --- a/src/npair_skip_respa.cpp +++ b/src/npair_skip_respa.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_skip_respa.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_skip_size.cpp b/src/npair_skip_size.cpp index d3810e6acc..40b70aed21 100644 --- a/src/npair_skip_size.cpp +++ b/src/npair_skip_size.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_skip_size.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_skip_size_off2on.cpp b/src/npair_skip_size_off2on.cpp index 0d7630aaa9..994910852b 100644 --- a/src/npair_skip_size_off2on.cpp +++ b/src/npair_skip_size_off2on.cpp @@ -12,11 +12,11 @@ ------------------------------------------------------------------------- */ #include "npair_skip_size_off2on.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/npair_skip_size_off2on_oneside.cpp b/src/npair_skip_size_off2on_oneside.cpp index eab98de035..30ee2ff6ba 100644 --- a/src/npair_skip_size_off2on_oneside.cpp +++ b/src/npair_skip_size_off2on_oneside.cpp @@ -12,12 +12,12 @@ ------------------------------------------------------------------------- */ #include "npair_skip_size_off2on_oneside.h" -#include "neigh_list.h" + #include "atom.h" -#include "atom_vec.h" #include "domain.h" -#include "my_page.h" #include "error.h" +#include "my_page.h" +#include "neigh_list.h" using namespace LAMMPS_NS; diff --git a/src/output.cpp b/src/output.cpp index 988ef04409..d7be9b8cd6 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -14,18 +14,15 @@ #include "output.h" #include "style_dump.h" // IWYU pragma: keep -#include "atom.h" #include "comm.h" #include "domain.h" #include "dump.h" #include "error.h" -#include "force.h" #include "group.h" #include "info.h" #include "input.h" #include "memory.h" #include "modify.h" -#include "neighbor.h" #include "thermo.h" #include "update.h" #include "variable.h" diff --git a/src/pair_lj96_cut.cpp b/src/pair_lj96_cut.cpp index 65f2d40e00..92cbb47440 100644 --- a/src/pair_lj96_cut.cpp +++ b/src/pair_lj96_cut.cpp @@ -17,20 +17,19 @@ #include "pair_lj96_cut.h" -#include -#include #include "atom.h" #include "comm.h" +#include "error.h" #include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "update.h" -#include "respa.h" #include "math_const.h" #include "memory.h" -#include "error.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" +#include "respa.h" +#include "update.h" +#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/pair_lj_relres.cpp b/src/pair_lj_relres.cpp index 1f40d03aa9..306b68684e 100644 --- a/src/pair_lj_relres.cpp +++ b/src/pair_lj_relres.cpp @@ -26,7 +26,6 @@ #include "memory.h" #include -#include using namespace LAMMPS_NS; diff --git a/src/reader.cpp b/src/reader.cpp index c22a9f7e5d..ba172f58ee 100644 --- a/src/reader.cpp +++ b/src/reader.cpp @@ -15,8 +15,6 @@ #include "error.h" -#include - using namespace LAMMPS_NS; // only proc 0 calls methods of this class, except for constructor/destructor diff --git a/src/region_sphere.cpp b/src/region_sphere.cpp index 8921cbd456..3a5a51834b 100644 --- a/src/region_sphere.cpp +++ b/src/region_sphere.cpp @@ -19,7 +19,6 @@ #include "variable.h" #include -#include using namespace LAMMPS_NS; diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index d26a5199f9..ea8ff2ce43 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -19,7 +19,6 @@ #include "utils.h" #include "fmt/format.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/universe.cpp b/src/universe.cpp index a7fa8fc2e2..79de6948df 100644 --- a/src/universe.cpp +++ b/src/universe.cpp @@ -15,9 +15,7 @@ #include "error.h" #include "memory.h" -#include "version.h" -#include #include using namespace LAMMPS_NS; diff --git a/src/variable.cpp b/src/variable.cpp index d903490219..f66b99d6e5 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -40,7 +40,6 @@ #include #include #include -#include using namespace LAMMPS_NS; using namespace MathConst; diff --git a/src/write_coeff.cpp b/src/write_coeff.cpp index 485bc3b29b..79a99502a6 100644 --- a/src/write_coeff.cpp +++ b/src/write_coeff.cpp @@ -22,7 +22,6 @@ #include "force.h" #include "improper.h" #include "pair.h" -#include "universe.h" #include #include diff --git a/src/write_data.cpp b/src/write_data.cpp index 6d10359e8b..8ec24bb4cf 100644 --- a/src/write_data.cpp +++ b/src/write_data.cpp @@ -29,7 +29,6 @@ #include "output.h" #include "pair.h" #include "thermo.h" -#include "universe.h" #include "update.h" #include diff --git a/src/write_restart.cpp b/src/write_restart.cpp index afe1d2d528..795e93b05e 100644 --- a/src/write_restart.cpp +++ b/src/write_restart.cpp @@ -32,7 +32,6 @@ #include "output.h" #include "pair.h" #include "thermo.h" -#include "universe.h" #include "update.h" #include From b9cb63ae56832ae2c10e102280032bee7f71cbea Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 00:47:58 -0400 Subject: [PATCH 19/38] remove redundant check --- src/pair_hybrid_scaled.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/pair_hybrid_scaled.cpp b/src/pair_hybrid_scaled.cpp index 7a30c9a3ee..cdbccbf7c7 100644 --- a/src/pair_hybrid_scaled.cpp +++ b/src/pair_hybrid_scaled.cpp @@ -457,8 +457,6 @@ void PairHybridScaled::coeff(int narg, char **arg) if (multiple[m]) { multflag = 1; if (narg < 4) error->all(FLERR,"Incorrect args for pair coefficients"); - if (!isdigit(arg[3][0])) - error->all(FLERR,"Incorrect args for pair coefficients"); int index = utils::inumeric(FLERR,arg[3],false,lmp); if (index == multiple[m]) break; else continue; From bddc6d58201b3ef4618de87732118341a8a34a05 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 09:58:19 -0400 Subject: [PATCH 20/38] make installation procedure consistent with install.py --- python/setup.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/python/setup.py b/python/setup.py index aff0b14671..2f2b67b6f1 100644 --- a/python/setup.py +++ b/python/setup.py @@ -1,7 +1,8 @@ # this only installs the LAMMPS python package # it assumes the LAMMPS shared library is already installed from distutils.core import setup -import os +from sys import version_info +import os,time LAMMPS_PYTHON_DIR = os.path.dirname(os.path.realpath(__file__)) LAMMPS_DIR = os.path.dirname(LAMMPS_PYTHON_DIR) @@ -12,7 +13,13 @@ def get_lammps_version(): line = f.readline() start_pos = line.find('"')+1 end_pos = line.find('"', start_pos) - return "".join(line[start_pos:end_pos].split()) + t = time.strptime("".join(line[start_pos:end_pos].split()), "%d%b%Y") + return "{}.{}.{}".format(t.tm_year,t.tm_mon,t.tm_mday) + +if version_info.major >= 3: + pkgs = ['lammps', 'lammps.mliap'] +else: + pkgs = ['lammps'] setup( name = "lammps", @@ -22,5 +29,5 @@ setup( url = "https://lammps.sandia.gov", description = "LAMMPS Molecular Dynamics Python package", license = "GPL", - packages=["lammps","lammps.mliap"], + packages=pkgs, ) From 82337c8cc574bc454a5ceb4618151fdaf04e24b9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 09:58:41 -0400 Subject: [PATCH 21/38] silence compiler warnings when compiling with python 2 --- src/PYTHON/fix_python_invoke.cpp | 6 ++++-- src/PYTHON/fix_python_move.cpp | 14 +++++++------- src/PYTHON/pair_python.cpp | 4 ++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/PYTHON/fix_python_invoke.cpp b/src/PYTHON/fix_python_invoke.cpp index 6483e21f91..7d981a749e 100644 --- a/src/PYTHON/fix_python_invoke.cpp +++ b/src/PYTHON/fix_python_invoke.cpp @@ -92,8 +92,9 @@ int FixPythonInvoke::setmask() void FixPythonInvoke::end_of_step() { PyUtils::GIL lock; + char fmt[] = "O"; - PyObject * result = PyObject_CallFunction((PyObject*)pFunc, "O", (PyObject*)lmpPtr); + PyObject * result = PyObject_CallFunction((PyObject*)pFunc, fmt, (PyObject*)lmpPtr); if (!result) { PyUtils::Print_Errors(); @@ -110,8 +111,9 @@ void FixPythonInvoke::post_force(int vflag) if (update->ntimestep % nevery != 0) return; PyUtils::GIL lock; + char fmt[] = "Oi"; - PyObject * result = PyObject_CallFunction((PyObject*)pFunc, "Oi", (PyObject*)lmpPtr, vflag); + PyObject * result = PyObject_CallFunction((PyObject*)pFunc, fmt, (PyObject*)lmpPtr, vflag); if (!result) { PyUtils::Print_Errors(); diff --git a/src/PYTHON/fix_python_move.cpp b/src/PYTHON/fix_python_move.cpp index e04a32afe4..8ec2e1b74d 100644 --- a/src/PYTHON/fix_python_move.cpp +++ b/src/PYTHON/fix_python_move.cpp @@ -75,7 +75,7 @@ FixPythonMove::FixPythonMove(LAMMPS *lmp, int narg, char **arg) : } PyObject *ptr = PY_VOID_POINTER(lmp); - PyObject *py_move_obj = PyObject_CallFunction(py_move_type, "O", ptr); + PyObject *py_move_obj = PyObject_CallFunction(py_move_type, (char *)"O", ptr); Py_CLEAR(ptr); if (!py_move_obj) { @@ -112,7 +112,7 @@ int FixPythonMove::setmask() void FixPythonMove::init() { PyUtils::GIL lock; - PyObject * result = PyObject_CallMethod((PyObject *)py_move, "init", nullptr); + PyObject * result = PyObject_CallMethod((PyObject *)py_move, (char *)"init", nullptr); if (!result) { PyUtils::Print_Errors(); @@ -126,7 +126,7 @@ void FixPythonMove::init() void FixPythonMove::initial_integrate(int vflag) { PyUtils::GIL lock; - PyObject * result = PyObject_CallMethod((PyObject*)py_move, "initial_integrate", "i", vflag); + PyObject * result = PyObject_CallMethod((PyObject*)py_move, (char *)"initial_integrate", (char *)"i", vflag); if (!result) { PyUtils::Print_Errors(); @@ -140,7 +140,7 @@ void FixPythonMove::initial_integrate(int vflag) void FixPythonMove::final_integrate() { PyUtils::GIL lock; - PyObject * result = PyObject_CallMethod((PyObject*)py_move, "final_integrate", nullptr); + PyObject * result = PyObject_CallMethod((PyObject*)py_move, (char *)"final_integrate", nullptr); if (!result) { PyUtils::Print_Errors(); @@ -154,7 +154,7 @@ void FixPythonMove::final_integrate() void FixPythonMove::initial_integrate_respa(int vflag, int ilevel, int iloop) { PyUtils::GIL lock; - PyObject * result = PyObject_CallMethod((PyObject*)py_move, "initial_integrate_respa", "iii", vflag, ilevel, iloop); + PyObject * result = PyObject_CallMethod((PyObject*)py_move, (char *)"initial_integrate_respa", (char *)"iii", vflag, ilevel, iloop); if (!result) { PyUtils::Print_Errors(); @@ -168,7 +168,7 @@ void FixPythonMove::initial_integrate_respa(int vflag, int ilevel, int iloop) void FixPythonMove::final_integrate_respa(int ilevel, int iloop) { PyUtils::GIL lock; - PyObject * result = PyObject_CallMethod((PyObject*)py_move, "final_integrate_respa", "ii", ilevel, iloop); + PyObject * result = PyObject_CallMethod((PyObject*)py_move, (char *)"final_integrate_respa", (char *)"ii", ilevel, iloop); if (!result) { PyUtils::Print_Errors(); @@ -182,7 +182,7 @@ void FixPythonMove::final_integrate_respa(int ilevel, int iloop) void FixPythonMove::reset_dt() { PyUtils::GIL lock; - PyObject * result = PyObject_CallMethod((PyObject*)py_move, "reset_dt", nullptr); + PyObject * result = PyObject_CallMethod((PyObject*)py_move, (char *)"reset_dt", nullptr); if (!result) { PyUtils::Print_Errors(); diff --git a/src/PYTHON/pair_python.cpp b/src/PYTHON/pair_python.cpp index b147c9cb79..5020119e0d 100644 --- a/src/PYTHON/pair_python.cpp +++ b/src/PYTHON/pair_python.cpp @@ -288,7 +288,7 @@ void PairPython::coeff(int narg, char **arg) py_potential = (void *) py_pair_instance; - PyObject *py_value = PyObject_CallMethod(py_pair_instance, "check_units", "s", update->unit_style); + PyObject *py_value = PyObject_CallMethod(py_pair_instance, (char *)"check_units", (char *)"s", update->unit_style); if (!py_value) { PyUtils::Print_Errors(); error->all(FLERR,"Calling 'check_units' function failed"); @@ -306,7 +306,7 @@ void PairPython::coeff(int narg, char **arg) } else skip_types[i] = 0; const int type = i; const char * name = arg[2+i]; - py_value = PyObject_CallMethod(py_pair_instance, "map_coeff", "si", name, type); + py_value = PyObject_CallMethod(py_pair_instance, (char *)"map_coeff", (char *)"si", name, type); if (!py_value) { PyUtils::Print_Errors(); error->all(FLERR,"Calling 'map_coeff' function failed"); From 208d9f1fce3b8cb7c2f3bca4dc93d746c38982ef Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 09:59:15 -0400 Subject: [PATCH 22/38] use safe fread function to silence compiler warnings --- src/pair_lj_relres.cpp | 30 +++++++++++++++--------------- src/pair_morse.cpp | 11 ++++++----- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/pair_lj_relres.cpp b/src/pair_lj_relres.cpp index 306b68684e..2131907f3a 100644 --- a/src/pair_lj_relres.cpp +++ b/src/pair_lj_relres.cpp @@ -607,18 +607,18 @@ void PairLJRelRes::read_restart(FILE *fp) int me = comm->me; for (i = 1; i <= atom->ntypes; i++) for (j = i; j <= atom->ntypes; j++) { - if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); + if (me == 0) utils::sfread(FLERR,&setflag[i][j],sizeof(int),1,fp,nullptr,error); MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); if (setflag[i][j]) { if (me == 0) { - fread(&epsilonf[i][j],sizeof(double),1,fp); - fread(&sigmaf[i][j],sizeof(double),1,fp); - fread(&epsilon[i][j],sizeof(double),1,fp); - fread(&sigma[i][j],sizeof(double),1,fp); - fread(&cutf_inner[i][j],sizeof(double),1,fp); - fread(&cutf[i][j],sizeof(double),1,fp); - fread(&cut_inner[i][j],sizeof(double),1,fp); - fread(&cut[i][j],sizeof(double),1,fp); + utils::sfread(FLERR,&epsilonf[i][j],sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&sigmaf[i][j],sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&epsilon[i][j],sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&sigma[i][j],sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&cutf_inner[i][j],sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&cutf[i][j],sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&cut_inner[i][j],sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&cut[i][j],sizeof(double),1,fp,nullptr,error); } MPI_Bcast(&epsilonf[i][j],1,MPI_DOUBLE,0,world); MPI_Bcast(&sigmaf[i][j],1,MPI_DOUBLE,0,world); @@ -654,12 +654,12 @@ void PairLJRelRes::read_restart_settings(FILE *fp) { int me = comm->me; if (me == 0) { - fread(&cutf_inner_global,sizeof(double),1,fp); - fread(&cutf_global,sizeof(double),1,fp); - fread(&cut_inner_global,sizeof(double),1,fp); - fread(&cut_global,sizeof(double),1,fp); - fread(&offset_flag,sizeof(int),1,fp); - fread(&mix_flag,sizeof(int),1,fp); + utils::sfread(FLERR,&cutf_inner_global,sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&cutf_global,sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&cut_inner_global,sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&cut_global,sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&offset_flag,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&mix_flag,sizeof(int),1,fp,nullptr,error); } MPI_Bcast(&cutf_inner_global,1,MPI_DOUBLE,0,world); MPI_Bcast(&cutf_global,1,MPI_DOUBLE,0,world); diff --git a/src/pair_morse.cpp b/src/pair_morse.cpp index 6c67a8ef55..e6d924dab6 100644 --- a/src/pair_morse.cpp +++ b/src/pair_morse.cpp @@ -13,14 +13,15 @@ #include "pair_morse.h" -#include -#include #include "atom.h" #include "comm.h" -#include "force.h" -#include "neigh_list.h" -#include "memory.h" #include "error.h" +#include "force.h" +#include "memory.h" +#include "neigh_list.h" + +#include +#include using namespace LAMMPS_NS; From 3b2c0871ccc766a4e66174880f4524c86079d435 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 14:53:03 -0400 Subject: [PATCH 23/38] add and use Neighbor::modify_params() convenience function --- src/MC/fix_charge_regulation.cpp | 9 +-------- src/MC/fix_gcmc.cpp | 9 +-------- src/MC/fix_widom.cpp | 9 +-------- src/USER-MISC/fix_srp.cpp | 12 +----------- src/neighbor.cpp | 16 ++++++++++++++++ src/neighbor.h | 1 + 6 files changed, 21 insertions(+), 35 deletions(-) diff --git a/src/MC/fix_charge_regulation.cpp b/src/MC/fix_charge_regulation.cpp index 6775b4e4ca..17d3af3e34 100644 --- a/src/MC/fix_charge_regulation.cpp +++ b/src/MC/fix_charge_regulation.cpp @@ -187,14 +187,7 @@ void FixChargeRegulation::init() { // neighbor list exclusion setup // turn off interactions between group all and the exclusion group - int narg = 4; - char **arg = new char*[narg];; - arg[0] = (char *) "exclude"; - arg[1] = (char *) "group"; - arg[2] = (char *) group_id.c_str(); - arg[3] = (char *) "all"; - neighbor->modify_params(narg,arg); - delete [] arg; + neighbor->modify_params(fmt::format("exclude group {} all",group_id)); } // check that no deletable atoms are in atom->firstgroup diff --git a/src/MC/fix_gcmc.cpp b/src/MC/fix_gcmc.cpp index b946615b04..ff894d976b 100644 --- a/src/MC/fix_gcmc.cpp +++ b/src/MC/fix_gcmc.cpp @@ -580,14 +580,7 @@ void FixGCMC::init() // neighbor list exclusion setup // turn off interactions between group all and the exclusion group - int narg = 4; - char **arg = new char*[narg];; - arg[0] = (char *) "exclude"; - arg[1] = (char *) "group"; - arg[2] = (char *) group_id.c_str(); - arg[3] = (char *) "all"; - neighbor->modify_params(narg,arg); - delete [] arg; + neighbor->modify_params(fmt::format("exclude group {} all",group_id); } // create a new group for temporary use with selected molecules diff --git a/src/MC/fix_widom.cpp b/src/MC/fix_widom.cpp index e898196e14..65f00811c1 100644 --- a/src/MC/fix_widom.cpp +++ b/src/MC/fix_widom.cpp @@ -342,14 +342,7 @@ void FixWidom::init() // neighbor list exclusion setup // turn off interactions between group all and the exclusion group - int narg = 4; - char **arg = new char*[narg];; - arg[0] = (char *) "exclude"; - arg[1] = (char *) "group"; - arg[2] = (char *) group_id.c_str(); - arg[3] = (char *) "all"; - neighbor->modify_params(narg,arg); - delete [] arg; + neighbor->modify_params(fmt::format("exclude group {} all",group_id)); } // create a new group for temporary use with selected molecules diff --git a/src/USER-MISC/fix_srp.cpp b/src/USER-MISC/fix_srp.cpp index eb57da30e9..51047dfaa6 100644 --- a/src/USER-MISC/fix_srp.cpp +++ b/src/USER-MISC/fix_srp.cpp @@ -128,20 +128,10 @@ void FixSRP::init() // bond particles do not interact with other types // type bptype only interacts with itself - char* arg1[4]; - arg1[0] = (char *) "exclude"; - arg1[1] = (char *) "type"; - char c0[20]; - char c1[20]; - for (int z = 1; z < atom->ntypes; z++) { if (z == bptype) continue; - sprintf(c0, "%d", z); - arg1[2] = c0; - sprintf(c1, "%d", bptype); - arg1[3] = c1; - neighbor->modify_params(4, arg1); + neighbor->modify_params(fmt::format("exclude type {} {}",z,bptype)); } } diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 704d94c77c..ee4226f43e 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -2356,6 +2356,22 @@ void Neighbor::modify_params(int narg, char **arg) } } +/* ---------------------------------------------------------------------- + convenience function to allow modifying parameters from a single string +------------------------------------------------------------------------- */ + +void Neighbor::modify_params(const std::string &modcmd) +{ + auto args = utils::split_words(modcmd); + char **newarg = new char*[args.size()]; + int i=0; + for (const auto &arg : args) { + newarg[i++] = (char *)arg.c_str(); + } + modify_params(args.size(),newarg); + delete[] newarg; +} + /* ---------------------------------------------------------------------- remove the first group-group exclusion matching group1, group2 ------------------------------------------------------------------------- */ diff --git a/src/neighbor.h b/src/neighbor.h index b9b40bcf1a..0babfae9ef 100644 --- a/src/neighbor.h +++ b/src/neighbor.h @@ -118,6 +118,7 @@ class Neighbor : protected Pointers { void set(int, char **); // set neighbor style and skin distance void reset_timestep(bigint); // reset of timestep counter void modify_params(int, char**); // modify params that control builds + void modify_params(const std::string &); // convenience overload void exclusion_group_group_delete(int, int); // rm a group-group exclusion int exclude_setting(); // return exclude value to accelerator pkg From 533739b1287e04e431ddca4966a6d547763b80e8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 14:53:51 -0400 Subject: [PATCH 24/38] avoid NULL pointer dereference / slience warnings issued by static code analysis --- src/MC/fix_charge_regulation.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/MC/fix_charge_regulation.cpp b/src/MC/fix_charge_regulation.cpp index 17d3af3e34..4e7e5ab5a0 100644 --- a/src/MC/fix_charge_regulation.cpp +++ b/src/MC/fix_charge_regulation.cpp @@ -349,7 +349,7 @@ void FixChargeRegulation::forward_acid() { double energy_before = energy_stored; double factor; - double *dummyp = nullptr; + double dummyp[3]; double pos[3]; pos[0] = 0; pos[1] = 0; @@ -408,7 +408,7 @@ void FixChargeRegulation::backward_acid() { double energy_before = energy_stored; double factor; int mask_tmp; - double *dummyp = nullptr; + double dummyp[3]; double pos[3]; pos[0] = 0; pos[1] = 0; @@ -481,7 +481,7 @@ void FixChargeRegulation::forward_base() { double energy_before = energy_stored; double factor; - double *dummyp = nullptr; + double dummyp[3]; double pos[3]; pos[0] = 0; pos[1] = 0; @@ -539,7 +539,7 @@ void FixChargeRegulation::backward_base() { double energy_before = energy_stored; double factor; - double *dummyp = nullptr; + double dummyp[3]; int mask_tmp; double pos[3]; pos[0] = 0; @@ -612,7 +612,7 @@ void FixChargeRegulation::forward_ions() { double energy_before = energy_stored; double factor; - double *dummyp = nullptr; + double dummyp[3]; int m1 = -1, m2 = -1; factor = volume_rx * volume_rx * c10pI_plus * c10pI_minus / ((1 + ncation) * (1 + nanion)); @@ -647,7 +647,7 @@ void FixChargeRegulation::backward_ions() { double energy_before = energy_stored; double factor; int mask1_tmp = 0, mask2_tmp = 0; - double *dummyp = nullptr; + double dummyp[3]; int m1 = -1, m2 = -1; m1 = get_random_particle(cation_type, +1, 0, dummyp); @@ -726,7 +726,7 @@ void FixChargeRegulation::forward_ions_multival() { double energy_before = energy_stored; double factor = 1; - double *dummyp = nullptr; + double dummyp[3]; int mm[salt_charge_ratio + 1];// particle ID array for all ions to be inserted if (salt_charge[0] <= -salt_charge[1]) { @@ -780,7 +780,7 @@ void FixChargeRegulation::backward_ions_multival() { double energy_before = energy_stored; double factor = 1; - double *dummyp = nullptr; // dummy pointer + double dummyp[3]; // dummy particle int mm[salt_charge_ratio + 1]; // particle ID array for all deleted ions double qq[salt_charge_ratio + 1]; // charge array for all deleted ions int mask_tmp[salt_charge_ratio + 1]; // temporary mask array From 680e6a389dac748000bf9a8e53a20b4e14cae26a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 14:54:04 -0400 Subject: [PATCH 25/38] use type cast consistently --- src/PYTHON/fix_python_invoke.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/PYTHON/fix_python_invoke.cpp b/src/PYTHON/fix_python_invoke.cpp index 7d981a749e..82baef909b 100644 --- a/src/PYTHON/fix_python_invoke.cpp +++ b/src/PYTHON/fix_python_invoke.cpp @@ -92,9 +92,8 @@ int FixPythonInvoke::setmask() void FixPythonInvoke::end_of_step() { PyUtils::GIL lock; - char fmt[] = "O"; - PyObject * result = PyObject_CallFunction((PyObject*)pFunc, fmt, (PyObject*)lmpPtr); + PyObject * result = PyObject_CallFunction((PyObject*)pFunc, (char *)"O", (PyObject*)lmpPtr); if (!result) { PyUtils::Print_Errors(); From 9dbdb4386b6e74f020c594218fa4a175e056dd54 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 14:54:47 -0400 Subject: [PATCH 26/38] fix typo --- src/MC/fix_gcmc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MC/fix_gcmc.cpp b/src/MC/fix_gcmc.cpp index ff894d976b..3ab6327404 100644 --- a/src/MC/fix_gcmc.cpp +++ b/src/MC/fix_gcmc.cpp @@ -580,7 +580,7 @@ void FixGCMC::init() // neighbor list exclusion setup // turn off interactions between group all and the exclusion group - neighbor->modify_params(fmt::format("exclude group {} all",group_id); + neighbor->modify_params(fmt::format("exclude group {} all",group_id)); } // create a new group for temporary use with selected molecules From 8aed7e55b37752e574116e40d7210d63a99b4d32 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 14:59:37 -0400 Subject: [PATCH 27/38] add error check when updating variables in ::single() function --- src/pair_hybrid_scaled.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pair_hybrid_scaled.cpp b/src/pair_hybrid_scaled.cpp index cdbccbf7c7..de8801fe24 100644 --- a/src/pair_hybrid_scaled.cpp +++ b/src/pair_hybrid_scaled.cpp @@ -396,6 +396,9 @@ double PairHybridScaled::single(int i, int j, int itype, int jtype, double rsq, double *vals = new double[nvars]; for (i = 0; i < nvars; ++i) { j = input->variable->find(scalevars[i].c_str()); + if (j < 0) + error->all(FLERR,fmt::format("Variable '{}' not found when updating " + "scale factors",scalevars[i])); vals[i] = input->variable->compute_equal(j); } for (i = 0; i < nstyles; ++i) { From b53822da467caed956bb205562abe74bd407374b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 17:47:00 -0400 Subject: [PATCH 28/38] provide Command base class in command.h for deriving command styles from --- examples/plugins/helloplugin.cpp | 6 +- src/KIM/kim_command.h | 6 +- src/MESSAGE/message.h | 6 +- src/MESSAGE/server.h | 6 +- src/PLUGIN/plugin.cpp | 2 +- src/PLUGIN/plugin.h | 4 +- src/REPLICA/hyper.cpp | 2 +- src/REPLICA/hyper.h | 4 +- src/REPLICA/neb.cpp | 4 +- src/REPLICA/neb.h | 4 +- src/REPLICA/prd.cpp | 2 +- src/REPLICA/prd.h | 4 +- src/REPLICA/tad.cpp | 2 +- src/REPLICA/tad.h | 4 +- src/REPLICA/temper.cpp | 2 +- src/REPLICA/temper.h | 4 +- src/SPIN/neb_spin.cpp | 2 +- src/SPIN/neb_spin.h | 4 +- src/USER-COLVARS/group_ndx.h | 6 +- src/USER-COLVARS/ndx_group.h | 6 +- src/USER-MISC/temper_grem.cpp | 2 +- src/USER-MISC/temper_grem.h | 4 +- src/USER-MISC/temper_npt.cpp | 2 +- src/USER-MISC/temper_npt.h | 4 +- src/USER-PHONON/dynamical_matrix.cpp | 2 +- src/USER-PHONON/dynamical_matrix.h | 86 ++++++++++++++-------------- src/USER-PHONON/third_order.cpp | 2 +- src/USER-PHONON/third_order.h | 4 +- src/balance.cpp | 2 +- src/balance.h | 4 +- src/change_box.cpp | 2 +- src/change_box.h | 4 +- src/command.h | 29 ++++++++++ src/create_atoms.cpp | 2 +- src/create_atoms.h | 4 +- src/create_bonds.cpp | 2 +- src/create_bonds.h | 4 +- src/create_box.cpp | 12 ++-- src/create_box.h | 4 +- src/delete_atoms.cpp | 2 +- src/delete_atoms.h | 4 +- src/delete_bonds.cpp | 2 +- src/delete_bonds.h | 4 +- src/deprecated.h | 6 +- src/displace_atoms.cpp | 2 +- src/displace_atoms.h | 4 +- src/info.h | 6 +- src/minimize.cpp | 2 +- src/minimize.h | 4 +- src/read_data.cpp | 6 +- src/read_data.h | 4 +- src/read_dump.cpp | 6 +- src/read_dump.h | 4 +- src/read_restart.cpp | 2 +- src/read_restart.h | 4 +- src/replicate.cpp | 2 +- src/replicate.h | 4 +- src/rerun.cpp | 2 +- src/rerun.h | 4 +- src/reset_atom_ids.cpp | 2 +- src/reset_atom_ids.h | 4 +- src/reset_mol_ids.cpp | 2 +- src/reset_mol_ids.h | 4 +- src/run.cpp | 2 +- src/run.h | 4 +- src/set.h | 6 +- src/velocity.cpp | 2 +- src/velocity.h | 4 +- src/write_coeff.h | 6 +- src/write_data.cpp | 2 +- src/write_data.h | 4 +- src/write_dump.h | 6 +- src/write_restart.cpp | 2 +- src/write_restart.h | 4 +- 74 files changed, 203 insertions(+), 180 deletions(-) create mode 100644 src/command.h diff --git a/examples/plugins/helloplugin.cpp b/examples/plugins/helloplugin.cpp index 11f2cfb891..f453add374 100644 --- a/examples/plugins/helloplugin.cpp +++ b/examples/plugins/helloplugin.cpp @@ -2,16 +2,16 @@ #include "lammpsplugin.h" #include "comm.h" +#include "command.h" #include "error.h" -#include "pointers.h" #include "version.h" #include namespace LAMMPS_NS { - class Hello : protected Pointers { + class Hello : protected Command { public: - Hello(class LAMMPS *lmp) : Pointers(lmp) {}; + Hello(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); }; } diff --git a/src/KIM/kim_command.h b/src/KIM/kim_command.h index f327e4f2f3..64abeed9e0 100644 --- a/src/KIM/kim_command.h +++ b/src/KIM/kim_command.h @@ -62,13 +62,13 @@ CommandStyle(kim,KimCommand) #ifndef LMP_KIM_COMMAND_H #define LMP_KIM_COMMAND_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class KimCommand : protected Pointers { +class KimCommand : protected Command { public: - KimCommand(class LAMMPS *lmp) : Pointers(lmp) {}; + KimCommand(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); }; diff --git a/src/MESSAGE/message.h b/src/MESSAGE/message.h index f8b2d47a21..c499ff6537 100644 --- a/src/MESSAGE/message.h +++ b/src/MESSAGE/message.h @@ -20,13 +20,13 @@ CommandStyle(message,Message) #ifndef LMP_MESSAGE_H #define LMP_MESSAGE_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Message : protected Pointers { +class Message : protected Command { public: - Message(class LAMMPS *lmp) : Pointers(lmp) {}; + Message(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); private: diff --git a/src/MESSAGE/server.h b/src/MESSAGE/server.h index 579f6ab6f1..63191ccf33 100644 --- a/src/MESSAGE/server.h +++ b/src/MESSAGE/server.h @@ -20,13 +20,13 @@ CommandStyle(server,Server) #ifndef LMP_SERVER_H #define LMP_SERVER_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Server : protected Pointers { +class Server : protected Command { public: - Server(class LAMMPS *lmp) : Pointers(lmp) {}; + Server(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); }; diff --git a/src/PLUGIN/plugin.cpp b/src/PLUGIN/plugin.cpp index b52e1a1959..a2f74060f1 100644 --- a/src/PLUGIN/plugin.cpp +++ b/src/PLUGIN/plugin.cpp @@ -41,7 +41,7 @@ namespace LAMMPS_NS /* ---------------------------------------------------------------------- */ - Plugin::Plugin(LAMMPS *lmp) : Pointers(lmp) {} + Plugin::Plugin(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/PLUGIN/plugin.h b/src/PLUGIN/plugin.h index 946b08db1a..61355f4113 100644 --- a/src/PLUGIN/plugin.h +++ b/src/PLUGIN/plugin.h @@ -21,12 +21,12 @@ CommandStyle(plugin,Plugin) #define LMP_PLUGIN_H #include "lammpsplugin.h" -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { - class Plugin : protected Pointers { + class Plugin : protected Command { public: Plugin(class LAMMPS *); void command(int, char **); diff --git a/src/REPLICA/hyper.cpp b/src/REPLICA/hyper.cpp index 5a9cf8520e..8eb1c143e9 100644 --- a/src/REPLICA/hyper.cpp +++ b/src/REPLICA/hyper.cpp @@ -38,7 +38,7 @@ enum{NOHYPER,GLOBAL,LOCAL}; /* ---------------------------------------------------------------------- */ -Hyper::Hyper(LAMMPS *lmp) : Pointers(lmp), dumplist(nullptr) {} +Hyper::Hyper(LAMMPS *lmp) : Command(lmp), dumplist(nullptr) {} /* ---------------------------------------------------------------------- perform hyperdynamics simulation diff --git a/src/REPLICA/hyper.h b/src/REPLICA/hyper.h index 1b05172bcf..faad58994b 100644 --- a/src/REPLICA/hyper.h +++ b/src/REPLICA/hyper.h @@ -20,11 +20,11 @@ CommandStyle(hyper,Hyper) #ifndef LMP_HYPER_H #define LMP_HYPER_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Hyper : protected Pointers { +class Hyper : protected Command { public: Hyper(class LAMMPS *); ~Hyper() {} diff --git a/src/REPLICA/neb.cpp b/src/REPLICA/neb.cpp index a6a70fde38..7183bdd168 100644 --- a/src/REPLICA/neb.cpp +++ b/src/REPLICA/neb.cpp @@ -42,7 +42,7 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -NEB::NEB(LAMMPS *lmp) : Pointers(lmp), all(nullptr), rdist(nullptr) {} +NEB::NEB(LAMMPS *lmp) : Command(lmp), all(nullptr), rdist(nullptr) {} /* ---------------------------------------------------------------------- internal NEB constructor, called from TAD @@ -50,7 +50,7 @@ NEB::NEB(LAMMPS *lmp) : Pointers(lmp), all(nullptr), rdist(nullptr) {} NEB::NEB(LAMMPS *lmp, double etol_in, double ftol_in, int n1steps_in, int n2steps_in, int nevery_in, double *buf_init, double *buf_final) - : Pointers(lmp), all(nullptr), rdist(nullptr) + : Command(lmp), all(nullptr), rdist(nullptr) { double delx,dely,delz; diff --git a/src/REPLICA/neb.h b/src/REPLICA/neb.h index b53992711c..d8a9d5d3e4 100644 --- a/src/REPLICA/neb.h +++ b/src/REPLICA/neb.h @@ -20,11 +20,11 @@ CommandStyle(neb,NEB) #ifndef LMP_NEB_H #define LMP_NEB_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class NEB : protected Pointers { +class NEB : protected Command { public: NEB(class LAMMPS *); NEB(class LAMMPS *, double, double, int, int, int, double *, double *); diff --git a/src/REPLICA/prd.cpp b/src/REPLICA/prd.cpp index 40e5fc8833..2ba0340109 100644 --- a/src/REPLICA/prd.cpp +++ b/src/REPLICA/prd.cpp @@ -46,7 +46,7 @@ enum{SINGLE_PROC_DIRECT,SINGLE_PROC_MAP,MULTI_PROC}; /* ---------------------------------------------------------------------- */ -PRD::PRD(LAMMPS *lmp) : Pointers(lmp) {} +PRD::PRD(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- perform PRD simulation on one or more replicas diff --git a/src/REPLICA/prd.h b/src/REPLICA/prd.h index 3539987093..b331f7dc02 100644 --- a/src/REPLICA/prd.h +++ b/src/REPLICA/prd.h @@ -20,11 +20,11 @@ CommandStyle(prd,PRD) #ifndef LMP_PRD_H #define LMP_PRD_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class PRD : protected Pointers { +class PRD : protected Command { public: PRD(class LAMMPS *); ~PRD() {} diff --git a/src/REPLICA/tad.cpp b/src/REPLICA/tad.cpp index 0bab7a31c8..a849e7a242 100644 --- a/src/REPLICA/tad.cpp +++ b/src/REPLICA/tad.cpp @@ -43,7 +43,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -TAD::TAD(LAMMPS *lmp) : Pointers(lmp) {} +TAD::TAD(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/REPLICA/tad.h b/src/REPLICA/tad.h index d44b226643..3a525146a6 100644 --- a/src/REPLICA/tad.h +++ b/src/REPLICA/tad.h @@ -20,11 +20,11 @@ CommandStyle(tad,TAD) #ifndef LMP_TAD_H #define LMP_TAD_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class TAD : protected Pointers { +class TAD : protected Command { public: TAD(class LAMMPS *); ~TAD(); diff --git a/src/REPLICA/temper.cpp b/src/REPLICA/temper.cpp index 63b34b9b1d..d3894060a3 100644 --- a/src/REPLICA/temper.cpp +++ b/src/REPLICA/temper.cpp @@ -40,7 +40,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -Temper::Temper(LAMMPS *lmp) : Pointers(lmp) {} +Temper::Temper(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/REPLICA/temper.h b/src/REPLICA/temper.h index 883ec30b94..ce7944da95 100644 --- a/src/REPLICA/temper.h +++ b/src/REPLICA/temper.h @@ -20,11 +20,11 @@ CommandStyle(temper,Temper) #ifndef LMP_TEMPER_H #define LMP_TEMPER_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Temper : protected Pointers { +class Temper : protected Command { public: Temper(class LAMMPS *); ~Temper(); diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index cbb495db8e..88a0ffc402 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -67,7 +67,7 @@ static const char cite_neb_spin[] = /* ---------------------------------------------------------------------- */ -NEBSpin::NEBSpin(LAMMPS *lmp) : Pointers(lmp) { +NEBSpin::NEBSpin(LAMMPS *lmp) : Command(lmp) { if (lmp->citeme) lmp->citeme->add(cite_neb_spin); } diff --git a/src/SPIN/neb_spin.h b/src/SPIN/neb_spin.h index 568eca0957..3dbae09297 100644 --- a/src/SPIN/neb_spin.h +++ b/src/SPIN/neb_spin.h @@ -20,11 +20,11 @@ CommandStyle(neb/spin,NEBSpin) #ifndef LMP_NEB_SPIN_H #define LMP_NEB_SPIN_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class NEBSpin : protected Pointers { +class NEBSpin : protected Command { public: NEBSpin(class LAMMPS *); ~NEBSpin(); diff --git a/src/USER-COLVARS/group_ndx.h b/src/USER-COLVARS/group_ndx.h index fa15f0e82e..46ba86c860 100644 --- a/src/USER-COLVARS/group_ndx.h +++ b/src/USER-COLVARS/group_ndx.h @@ -22,13 +22,13 @@ CommandStyle(group2ndx,Group2Ndx) #ifndef LMP_GROUP_NDX_H #define LMP_GROUP_NDX_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Group2Ndx : protected Pointers { +class Group2Ndx : protected Command { public: - Group2Ndx(class LAMMPS *lmp) : Pointers(lmp) {}; + Group2Ndx(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); private: void write_group(FILE *, int); diff --git a/src/USER-COLVARS/ndx_group.h b/src/USER-COLVARS/ndx_group.h index ceca1f9570..1c881a65bf 100644 --- a/src/USER-COLVARS/ndx_group.h +++ b/src/USER-COLVARS/ndx_group.h @@ -22,14 +22,14 @@ CommandStyle(ndx2group,Ndx2Group) #ifndef LMP_NDX_GROUP_H #define LMP_NDX_GROUP_H -#include "pointers.h" +#include "command.h" #include namespace LAMMPS_NS { -class Ndx2Group : protected Pointers { +class Ndx2Group : protected Command { public: - Ndx2Group(class LAMMPS *lmp) : Pointers(lmp) {}; + Ndx2Group(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); void create(const std::string &, const std::vector &); }; diff --git a/src/USER-MISC/temper_grem.cpp b/src/USER-MISC/temper_grem.cpp index 3b987aaad2..ee60ab375d 100644 --- a/src/USER-MISC/temper_grem.cpp +++ b/src/USER-MISC/temper_grem.cpp @@ -40,7 +40,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -TemperGrem::TemperGrem(LAMMPS *lmp) : Pointers(lmp) {} +TemperGrem::TemperGrem(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/USER-MISC/temper_grem.h b/src/USER-MISC/temper_grem.h index f379814c61..b720aeb45c 100644 --- a/src/USER-MISC/temper_grem.h +++ b/src/USER-MISC/temper_grem.h @@ -20,11 +20,11 @@ CommandStyle(temper/grem,TemperGrem) #ifndef LMP_TEMPER_GREM_H #define LMP_TEMPER_GREM_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class TemperGrem : protected Pointers { +class TemperGrem : protected Command { public: TemperGrem(class LAMMPS *); ~TemperGrem(); diff --git a/src/USER-MISC/temper_npt.cpp b/src/USER-MISC/temper_npt.cpp index 08fa2246c3..1ed55a9cf3 100644 --- a/src/USER-MISC/temper_npt.cpp +++ b/src/USER-MISC/temper_npt.cpp @@ -42,7 +42,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -TemperNPT::TemperNPT(LAMMPS *lmp) : Pointers(lmp) {} +TemperNPT::TemperNPT(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/USER-MISC/temper_npt.h b/src/USER-MISC/temper_npt.h index 6beae68c6a..5c285f083c 100644 --- a/src/USER-MISC/temper_npt.h +++ b/src/USER-MISC/temper_npt.h @@ -21,11 +21,11 @@ CommandStyle(temper/npt,TemperNPT) #ifndef LMP_TEMPERNPT_H #define LMP_TEMPERNPT_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class TemperNPT : protected Pointers { +class TemperNPT : protected Command { public: TemperNPT(class LAMMPS *); ~TemperNPT(); diff --git a/src/USER-PHONON/dynamical_matrix.cpp b/src/USER-PHONON/dynamical_matrix.cpp index 798b50fdf7..0476c734a5 100644 --- a/src/USER-PHONON/dynamical_matrix.cpp +++ b/src/USER-PHONON/dynamical_matrix.cpp @@ -32,7 +32,7 @@ enum{REGULAR,ESKM}; /* ---------------------------------------------------------------------- */ -DynamicalMatrix::DynamicalMatrix(LAMMPS *lmp) : Pointers(lmp), fp(nullptr) +DynamicalMatrix::DynamicalMatrix(LAMMPS *lmp) : Command(lmp), fp(nullptr) { external_force_clear = 1; } diff --git a/src/USER-PHONON/dynamical_matrix.h b/src/USER-PHONON/dynamical_matrix.h index 8ff11044ea..30baeda27f 100644 --- a/src/USER-PHONON/dynamical_matrix.h +++ b/src/USER-PHONON/dynamical_matrix.h @@ -11,62 +11,62 @@ CommandStyle(dynamical_matrix,DynamicalMatrix) #ifndef LMP_DYNAMICAL_MATRIX_H #define LMP_DYNAMICAL_MATRIX_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { - class DynamicalMatrix : protected Pointers { - public: - DynamicalMatrix(class LAMMPS *); - virtual ~DynamicalMatrix(); - void command(int, char **); - void setup(); +class DynamicalMatrix : protected Command { + public: + DynamicalMatrix(class LAMMPS *); + virtual ~DynamicalMatrix(); + void command(int, char **); + void setup(); - protected: - int eflag,vflag; // flags for energy/virial computation - int external_force_clear; // clear forces locally or externally + protected: + int eflag,vflag; // flags for energy/virial computation + int external_force_clear; // clear forces locally or externally - int triclinic; // 0 if domain is orthog, 1 if triclinic - int pairflag; + int triclinic; // 0 if domain is orthog, 1 if triclinic + int pairflag; - int pair_compute_flag; // 0 if pair->compute is skipped - int kspace_compute_flag; // 0 if kspace->compute is skipped + int pair_compute_flag; // 0 if pair->compute is skipped + int kspace_compute_flag; // 0 if kspace->compute is skipped - int nvec; // local atomic dof = length of xvec + int nvec; // local atomic dof = length of xvec - void update_force(); - void force_clear(); - virtual void openfile(const char* filename); + void update_force(); + void force_clear(); + virtual void openfile(const char* filename); - private: - void options(int, char **); - void calculateMatrix(); - void dynmat_clear(double **dynmat); - void create_groupmap(); - void writeMatrix(double **dynmat); - void convert_units(const char *style); - void displace_atom(int local_idx, int direction, int magnitude); + private: + void options(int, char **); + void calculateMatrix(); + void dynmat_clear(double **dynmat); + void create_groupmap(); + void writeMatrix(double **dynmat); + void convert_units(const char *style); + void displace_atom(int local_idx, int direction, int magnitude); - double conversion; - double conv_energy; - double conv_distance; - double conv_mass; - double del; - int igroup,groupbit; - bigint gcount; // number of atoms in group - bigint dynlen; // rank of dynamical matrix - int scaleflag; - int me; - bigint *groupmap; + double conversion; + double conv_energy; + double conv_distance; + double conv_mass; + double del; + int igroup,groupbit; + bigint gcount; // number of atoms in group + bigint dynlen; // rank of dynamical matrix + int scaleflag; + int me; + bigint *groupmap; - int compressed; // 1 if dump file is written compressed, 0 no - int binaryflag; // 1 if dump file is written binary, 0 no - int file_opened; // 1 if openfile method has been called, 0 no - int file_flag; // 1 custom file name, 0 dynmat.dat + int compressed; // 1 if dump file is written compressed, 0 no + int binaryflag; // 1 if dump file is written binary, 0 no + int file_opened; // 1 if openfile method has been called, 0 no + int file_flag; // 1 custom file name, 0 dynmat.dat - FILE *fp; - }; + FILE *fp; +}; } diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp index 875490d643..ebcc682d7a 100644 --- a/src/USER-PHONON/third_order.cpp +++ b/src/USER-PHONON/third_order.cpp @@ -32,7 +32,7 @@ enum{REGULAR,BALLISTICO}; /* ---------------------------------------------------------------------- */ -ThirdOrder::ThirdOrder(LAMMPS *lmp) : Pointers(lmp), fp(nullptr) +ThirdOrder::ThirdOrder(LAMMPS *lmp) : Command(lmp), fp(nullptr) { external_force_clear = 1; } diff --git a/src/USER-PHONON/third_order.h b/src/USER-PHONON/third_order.h index 83062b6b1f..87b0c695f6 100644 --- a/src/USER-PHONON/third_order.h +++ b/src/USER-PHONON/third_order.h @@ -12,11 +12,11 @@ CommandStyle(third_order,ThirdOrder) #ifndef LMP_THIRD_ORDER_H #define LMP_THIRD_ORDER_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { - class ThirdOrder : protected Pointers { + class ThirdOrder : protected Command { public: ThirdOrder(class LAMMPS *); virtual ~ThirdOrder(); diff --git a/src/balance.cpp b/src/balance.cpp index 6294e023b3..bf037e8f8f 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -51,7 +51,7 @@ enum{X,Y,Z}; /* ---------------------------------------------------------------------- */ -Balance::Balance(LAMMPS *lmp) : Pointers(lmp) +Balance::Balance(LAMMPS *lmp) : Command(lmp) { MPI_Comm_rank(world,&me); MPI_Comm_size(world,&nprocs); diff --git a/src/balance.h b/src/balance.h index 424da33757..25ccac85ae 100644 --- a/src/balance.h +++ b/src/balance.h @@ -20,11 +20,11 @@ CommandStyle(balance,Balance) #ifndef LMP_BALANCE_H #define LMP_BALANCE_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Balance : protected Pointers { +class Balance : protected Command { public: class RCB *rcb; class FixStore *fixstore; // per-atom weights stored in FixStore diff --git a/src/change_box.cpp b/src/change_box.cpp index ba99e1b6e1..4471d85132 100644 --- a/src/change_box.cpp +++ b/src/change_box.cpp @@ -35,7 +35,7 @@ enum{X=0,Y,Z,YZ,XZ,XY}; /* ---------------------------------------------------------------------- */ -ChangeBox::ChangeBox(LAMMPS *lmp) : Pointers(lmp) {} +ChangeBox::ChangeBox(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/change_box.h b/src/change_box.h index d8a057f9a6..2f6802194b 100644 --- a/src/change_box.h +++ b/src/change_box.h @@ -20,11 +20,11 @@ CommandStyle(change_box,ChangeBox) #ifndef LMP_CHANGE_BOX_H #define LMP_CHANGE_BOX_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class ChangeBox : protected Pointers { +class ChangeBox : protected Command { public: ChangeBox(class LAMMPS *); void command(int, char **); diff --git a/src/command.h b/src/command.h new file mode 100644 index 0000000000..6abbc167ac --- /dev/null +++ b/src/command.h @@ -0,0 +1,29 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef LMP_COMMAND_H +#define LMP_COMMAND_H + +#include "pointers.h" + +namespace LAMMPS_NS { + +class Command : protected Pointers { + public: + Command(class LAMMPS *lmp) : Pointers(lmp) {}; + virtual void command(int, char **) = 0; +}; + +} + +#endif diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp index 46aff081d9..7591ae7587 100644 --- a/src/create_atoms.cpp +++ b/src/create_atoms.cpp @@ -52,7 +52,7 @@ enum{NONE,RATIO,SUBSET}; /* ---------------------------------------------------------------------- */ -CreateAtoms::CreateAtoms(LAMMPS *lmp) : Pointers(lmp), basistype(nullptr) {} +CreateAtoms::CreateAtoms(LAMMPS *lmp) : Command(lmp), basistype(nullptr) {} /* ---------------------------------------------------------------------- */ diff --git a/src/create_atoms.h b/src/create_atoms.h index 5508752f00..8f0e016192 100644 --- a/src/create_atoms.h +++ b/src/create_atoms.h @@ -20,11 +20,11 @@ CommandStyle(create_atoms,CreateAtoms) #ifndef LMP_CREATE_ATOMS_H #define LMP_CREATE_ATOMS_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class CreateAtoms : protected Pointers { +class CreateAtoms : protected Command { public: CreateAtoms(class LAMMPS *); void command(int, char **); diff --git a/src/create_bonds.cpp b/src/create_bonds.cpp index 494e743c05..bedbe4b436 100644 --- a/src/create_bonds.cpp +++ b/src/create_bonds.cpp @@ -38,7 +38,7 @@ enum{MANY,SBOND,SANGLE,SDIHEDRAL,SIMPROPER}; /* ---------------------------------------------------------------------- */ -CreateBonds::CreateBonds(LAMMPS *lmp) : Pointers(lmp) {} +CreateBonds::CreateBonds(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/create_bonds.h b/src/create_bonds.h index eea99b0113..f25cb6d1bc 100644 --- a/src/create_bonds.h +++ b/src/create_bonds.h @@ -20,11 +20,11 @@ CommandStyle(create_bonds,CreateBonds) #ifndef LMP_CREATE_BONDS_H #define LMP_CREATE_BONDS_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class CreateBonds : protected Pointers { +class CreateBonds : protected Command { public: CreateBonds(class LAMMPS *); void command(int, char **); diff --git a/src/create_box.cpp b/src/create_box.cpp index 000fb42495..1350b6f392 100644 --- a/src/create_box.cpp +++ b/src/create_box.cpp @@ -12,22 +12,24 @@ ------------------------------------------------------------------------- */ #include "create_box.h" -#include + #include "atom.h" #include "atom_vec.h" +#include "comm.h" #include "domain.h" +#include "error.h" +#include "force.h" #include "region.h" #include "region_prism.h" -#include "force.h" -#include "comm.h" #include "update.h" -#include "error.h" + +#include using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -CreateBox::CreateBox(LAMMPS *lmp) : Pointers(lmp) {} +CreateBox::CreateBox(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/create_box.h b/src/create_box.h index 740769b4de..846af6bcee 100644 --- a/src/create_box.h +++ b/src/create_box.h @@ -20,11 +20,11 @@ CommandStyle(create_box,CreateBox) #ifndef LMP_CREATE_BOX_H #define LMP_CREATE_BOX_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class CreateBox : protected Pointers { +class CreateBox : protected Command { public: CreateBox(class LAMMPS *); void command(int, char **); diff --git a/src/delete_atoms.cpp b/src/delete_atoms.cpp index 3dbf21ae59..326201c9a2 100644 --- a/src/delete_atoms.cpp +++ b/src/delete_atoms.cpp @@ -41,7 +41,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -DeleteAtoms::DeleteAtoms(LAMMPS *lmp) : Pointers(lmp) {} +DeleteAtoms::DeleteAtoms(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/delete_atoms.h b/src/delete_atoms.h index 5eab7f6ba7..e43bebfa54 100644 --- a/src/delete_atoms.h +++ b/src/delete_atoms.h @@ -20,12 +20,12 @@ CommandStyle(delete_atoms,DeleteAtoms) #ifndef LMP_DELETE_ATOMS_H #define LMP_DELETE_ATOMS_H -#include "pointers.h" +#include "command.h" #include namespace LAMMPS_NS { -class DeleteAtoms : protected Pointers { +class DeleteAtoms : protected Command { public: DeleteAtoms(class LAMMPS *); void command(int, char **); diff --git a/src/delete_bonds.cpp b/src/delete_bonds.cpp index 5a487743e1..2bb46e7564 100644 --- a/src/delete_bonds.cpp +++ b/src/delete_bonds.cpp @@ -30,7 +30,7 @@ enum{MULTI,ATOM,BOND,ANGLE,DIHEDRAL,IMPROPER,STATS}; /* ---------------------------------------------------------------------- */ -DeleteBonds::DeleteBonds(LAMMPS *lmp) : Pointers(lmp) {} +DeleteBonds::DeleteBonds(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/delete_bonds.h b/src/delete_bonds.h index 60d76b9086..2f255e12d6 100644 --- a/src/delete_bonds.h +++ b/src/delete_bonds.h @@ -20,11 +20,11 @@ CommandStyle(delete_bonds,DeleteBonds) #ifndef LMP_DELETE_BONDS_H #define LMP_DELETE_BONDS_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class DeleteBonds : protected Pointers { +class DeleteBonds : protected Command { public: DeleteBonds(class LAMMPS *); void command(int, char **); diff --git a/src/deprecated.h b/src/deprecated.h index aceb1181c1..4b6cba7f30 100644 --- a/src/deprecated.h +++ b/src/deprecated.h @@ -26,13 +26,13 @@ CommandStyle(kim_query,Deprecated) #ifndef LMP_DEPRECATED_H #define LMP_DEPRECATED_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Deprecated : protected Pointers { +class Deprecated : protected Command { public: - Deprecated(class LAMMPS *lmp) : Pointers(lmp) {}; + Deprecated(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); }; diff --git a/src/displace_atoms.cpp b/src/displace_atoms.cpp index dd71e944ef..6bc3b0ab35 100644 --- a/src/displace_atoms.cpp +++ b/src/displace_atoms.cpp @@ -42,7 +42,7 @@ enum{MOVE,RAMP,RANDOM,ROTATE}; /* ---------------------------------------------------------------------- */ -DisplaceAtoms::DisplaceAtoms(LAMMPS *lmp) : Pointers(lmp) +DisplaceAtoms::DisplaceAtoms(LAMMPS *lmp) : Command(lmp) { mvec = nullptr; } diff --git a/src/displace_atoms.h b/src/displace_atoms.h index 737d55dbdd..98247b7244 100644 --- a/src/displace_atoms.h +++ b/src/displace_atoms.h @@ -20,11 +20,11 @@ CommandStyle(displace_atoms,DisplaceAtoms) #ifndef LMP_DISPLACE_ATOMS_H #define LMP_DISPLACE_ATOMS_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class DisplaceAtoms : protected Pointers { +class DisplaceAtoms : protected Command { public: DisplaceAtoms(class LAMMPS *); ~DisplaceAtoms(); diff --git a/src/info.h b/src/info.h index d8fa23489e..536a93c559 100644 --- a/src/info.h +++ b/src/info.h @@ -20,15 +20,15 @@ CommandStyle(info,Info) #ifndef LMP_INFO_H #define LMP_INFO_H -#include "pointers.h" +#include "command.h" #include namespace LAMMPS_NS { -class Info : protected Pointers { +class Info : protected Command { public: - Info(class LAMMPS *lmp) : Pointers(lmp) {}; + Info(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); bool is_active(const char *, const char *); diff --git a/src/minimize.cpp b/src/minimize.cpp index 8e55d6e0ea..1fb0d219cd 100644 --- a/src/minimize.cpp +++ b/src/minimize.cpp @@ -25,7 +25,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -Minimize::Minimize(LAMMPS *lmp) : Pointers(lmp) {} +Minimize::Minimize(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/minimize.h b/src/minimize.h index 42a2fcaf02..10b244130a 100644 --- a/src/minimize.h +++ b/src/minimize.h @@ -20,11 +20,11 @@ CommandStyle(minimize,Minimize) #ifndef LMP_MINIMIZE_H #define LMP_MINIMIZE_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Minimize : protected Pointers { +class Minimize : protected Command { public: Minimize(class LAMMPS *); void command(int, char **); diff --git a/src/read_data.cpp b/src/read_data.cpp index cc3b2e5965..c0085f19d1 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -11,10 +11,6 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -// lmptype.h must be first b/c this file uses MAXBIGINT and includes mpi.h -// due to OpenMPI bug which sets INT64_MAX via its mpi.h -// before lmptype.h can set flags to insure it is done correctly - #include "read_data.h" #include "angle.h" @@ -66,7 +62,7 @@ const char *suffixes[] = {"/cuda","/gpu","/opt","/omp","/kk", /* ---------------------------------------------------------------------- */ -ReadData::ReadData(LAMMPS *lmp) : Pointers(lmp) +ReadData::ReadData(LAMMPS *lmp) : Command(lmp) { MPI_Comm_rank(world,&me); line = new char[MAXLINE]; diff --git a/src/read_data.h b/src/read_data.h index 68b40fc529..d251259a08 100644 --- a/src/read_data.h +++ b/src/read_data.h @@ -20,11 +20,11 @@ CommandStyle(read_data,ReadData) #ifndef LMP_READ_DATA_H #define LMP_READ_DATA_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class ReadData : protected Pointers { +class ReadData : protected Command { public: ReadData(class LAMMPS *); ~ReadData(); diff --git a/src/read_dump.cpp b/src/read_dump.cpp index 0282e2d039..ddb793c629 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -15,10 +15,6 @@ Contributing author: Timothy Sirk (ARL) ------------------------------------------------------------------------- */ -// lmptype.h must be first b/c this file uses MAXBIGINT and includes mpi.h -// due to OpenMPI bug which sets INT64_MAX via its mpi.h -// before lmptype.h can set flags to insure it is done correctly - #include "read_dump.h" #include "atom.h" @@ -46,7 +42,7 @@ enum{NOADD,YESADD,KEEPADD}; /* ---------------------------------------------------------------------- */ -ReadDump::ReadDump(LAMMPS *lmp) : Pointers(lmp) +ReadDump::ReadDump(LAMMPS *lmp) : Command(lmp) { MPI_Comm_rank(world,&me); MPI_Comm_size(world,&nprocs); diff --git a/src/read_dump.h b/src/read_dump.h index 93fb4bc713..ba59cc9224 100644 --- a/src/read_dump.h +++ b/src/read_dump.h @@ -22,11 +22,11 @@ CommandStyle(read_dump,ReadDump) #ifndef LMP_READ_DUMP_H #define LMP_READ_DUMP_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class ReadDump : protected Pointers { +class ReadDump : protected Command { public: ReadDump(class LAMMPS *); ~ReadDump(); diff --git a/src/read_restart.cpp b/src/read_restart.cpp index 9e8fbce91c..7983a25ae9 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -43,7 +43,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -ReadRestart::ReadRestart(LAMMPS *lmp) : Pointers(lmp) {} +ReadRestart::ReadRestart(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/read_restart.h b/src/read_restart.h index 99b37cfa45..3a2c7965b3 100644 --- a/src/read_restart.h +++ b/src/read_restart.h @@ -20,11 +20,11 @@ CommandStyle(read_restart,ReadRestart) #ifndef LMP_READ_RESTART_H #define LMP_READ_RESTART_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class ReadRestart : protected Pointers { +class ReadRestart : protected Command { public: ReadRestart(class LAMMPS *); void command(int, char **); diff --git a/src/replicate.cpp b/src/replicate.cpp index 6877ec091c..95bf615d04 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -31,7 +31,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -Replicate::Replicate(LAMMPS *lmp) : Pointers(lmp) {} +Replicate::Replicate(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/replicate.h b/src/replicate.h index 58c0010aa3..fd865a9c71 100644 --- a/src/replicate.h +++ b/src/replicate.h @@ -20,11 +20,11 @@ CommandStyle(replicate,Replicate) #ifndef LMP_REPLICATE_H #define LMP_REPLICATE_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Replicate : protected Pointers { +class Replicate : protected Command { public: Replicate(class LAMMPS *); void command(int, char **); diff --git a/src/rerun.cpp b/src/rerun.cpp index 8615b02d95..9571724e2d 100644 --- a/src/rerun.cpp +++ b/src/rerun.cpp @@ -29,7 +29,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -Rerun::Rerun(LAMMPS *lmp) : Pointers(lmp) {} +Rerun::Rerun(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/rerun.h b/src/rerun.h index ea1d0221c3..57aa32227f 100644 --- a/src/rerun.h +++ b/src/rerun.h @@ -20,11 +20,11 @@ CommandStyle(rerun,Rerun) #ifndef LMP_RERUN_H #define LMP_RERUN_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Rerun : protected Pointers { +class Rerun : protected Command { public: Rerun(class LAMMPS *); void command(int, char **); diff --git a/src/reset_atom_ids.cpp b/src/reset_atom_ids.cpp index 7298103b80..47dae3cb56 100644 --- a/src/reset_atom_ids.cpp +++ b/src/reset_atom_ids.cpp @@ -43,7 +43,7 @@ static int compare_coords(const int, const int, void *); /* ---------------------------------------------------------------------- */ -ResetIDs::ResetIDs(LAMMPS *lmp) : Pointers(lmp) {} +ResetIDs::ResetIDs(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/reset_atom_ids.h b/src/reset_atom_ids.h index 02a7f77e8d..a017abbbc8 100644 --- a/src/reset_atom_ids.h +++ b/src/reset_atom_ids.h @@ -20,11 +20,11 @@ CommandStyle(reset_atom_ids,ResetIDs) #ifndef LMP_RESET_IDS_H #define LMP_RESET_IDS_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class ResetIDs : protected Pointers { +class ResetIDs : protected Command { public: struct AtomRvous { bigint ibin; diff --git a/src/reset_mol_ids.cpp b/src/reset_mol_ids.cpp index aed26b4568..39f7307ca1 100644 --- a/src/reset_mol_ids.cpp +++ b/src/reset_mol_ids.cpp @@ -32,7 +32,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -ResetMolIDs::ResetMolIDs(LAMMPS *lmp) : Pointers(lmp) { +ResetMolIDs::ResetMolIDs(LAMMPS *lmp) : Command(lmp) { cfa = nullptr; cca = nullptr; diff --git a/src/reset_mol_ids.h b/src/reset_mol_ids.h index fbb6fceb03..c25f64fe43 100644 --- a/src/reset_mol_ids.h +++ b/src/reset_mol_ids.h @@ -20,11 +20,11 @@ CommandStyle(reset_mol_ids,ResetMolIDs) #ifndef LMP_RESET_MOL_IDS_H #define LMP_RESET_MOL_IDS_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class ResetMolIDs : protected Pointers { +class ResetMolIDs : protected Command { public: ResetMolIDs(class LAMMPS *); ~ResetMolIDs(); diff --git a/src/run.cpp b/src/run.cpp index c503e174ff..379cf8015a 100644 --- a/src/run.cpp +++ b/src/run.cpp @@ -31,7 +31,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -Run::Run(LAMMPS *lmp) : Pointers(lmp) {} +Run::Run(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/run.h b/src/run.h index 5578ea9598..a9a4a556f0 100644 --- a/src/run.h +++ b/src/run.h @@ -20,11 +20,11 @@ CommandStyle(run,Run) #ifndef LMP_RUN_H #define LMP_RUN_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Run : protected Pointers { +class Run : protected Command { public: Run(class LAMMPS *); void command(int, char **); diff --git a/src/set.h b/src/set.h index 29f1ea526e..02e81b057a 100644 --- a/src/set.h +++ b/src/set.h @@ -20,13 +20,13 @@ CommandStyle(set,Set) #ifndef LMP_SET_H #define LMP_SET_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Set : protected Pointers { +class Set : protected Command { public: - Set(class LAMMPS *lmp) : Pointers(lmp) {}; + Set(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); private: diff --git a/src/velocity.cpp b/src/velocity.cpp index f4483074aa..e0c80baa91 100644 --- a/src/velocity.cpp +++ b/src/velocity.cpp @@ -42,7 +42,7 @@ enum{NONE,CONSTANT,EQUAL,ATOM}; /* ---------------------------------------------------------------------- */ -Velocity::Velocity(LAMMPS *lmp) : Pointers(lmp) {} +Velocity::Velocity(LAMMPS *lmp) : Command(lmp) {} /* ---------------------------------------------------------------------- */ diff --git a/src/velocity.h b/src/velocity.h index e14c0d0d1c..5c54302a1e 100644 --- a/src/velocity.h +++ b/src/velocity.h @@ -20,11 +20,11 @@ CommandStyle(velocity,Velocity) #ifndef LMP_VELOCITY_H #define LMP_VELOCITY_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class Velocity : protected Pointers { +class Velocity : protected Command { public: Velocity(class LAMMPS *); void command(int, char **); diff --git a/src/write_coeff.h b/src/write_coeff.h index b995e60d63..2555454db0 100644 --- a/src/write_coeff.h +++ b/src/write_coeff.h @@ -20,13 +20,13 @@ CommandStyle(write_coeff,WriteCoeff) #ifndef LMP_WRITE_COEFF_H #define LMP_WRITE_COEFF_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class WriteCoeff : protected Pointers { +class WriteCoeff : protected Command { public: - WriteCoeff(class LAMMPS *lmp) : Pointers(lmp) {}; + WriteCoeff(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); }; diff --git a/src/write_data.cpp b/src/write_data.cpp index 6d10359e8b..d8b37ca265 100644 --- a/src/write_data.cpp +++ b/src/write_data.cpp @@ -41,7 +41,7 @@ enum{ELLIPSOID,LINE,TRIANGLE,BODY}; // also in AtomVecHybrid /* ---------------------------------------------------------------------- */ -WriteData::WriteData(LAMMPS *lmp) : Pointers(lmp) +WriteData::WriteData(LAMMPS *lmp) : Command(lmp) { MPI_Comm_rank(world,&me); MPI_Comm_size(world,&nprocs); diff --git a/src/write_data.h b/src/write_data.h index a4e71c9cda..c9ba5a4a52 100644 --- a/src/write_data.h +++ b/src/write_data.h @@ -20,11 +20,11 @@ CommandStyle(write_data,WriteData) #ifndef LMP_WRITE_DATA_H #define LMP_WRITE_DATA_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class WriteData : protected Pointers { +class WriteData : protected Command { public: WriteData(class LAMMPS *); void command(int, char **); diff --git a/src/write_dump.h b/src/write_dump.h index db39a75d4b..5d1499934a 100644 --- a/src/write_dump.h +++ b/src/write_dump.h @@ -20,13 +20,13 @@ CommandStyle(write_dump,WriteDump) #ifndef LMP_WRITE_DUMP_H #define LMP_WRITE_DUMP_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class WriteDump : protected Pointers { +class WriteDump : protected Command { public: - WriteDump(class LAMMPS *lmp) : Pointers(lmp) {}; + WriteDump(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); }; diff --git a/src/write_restart.cpp b/src/write_restart.cpp index afe1d2d528..ce0eddcd73 100644 --- a/src/write_restart.cpp +++ b/src/write_restart.cpp @@ -43,7 +43,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -WriteRestart::WriteRestart(LAMMPS *lmp) : Pointers(lmp) +WriteRestart::WriteRestart(LAMMPS *lmp) : Command(lmp) { MPI_Comm_rank(world,&me); MPI_Comm_size(world,&nprocs); diff --git a/src/write_restart.h b/src/write_restart.h index a4a606482e..0b8826f10b 100644 --- a/src/write_restart.h +++ b/src/write_restart.h @@ -20,11 +20,11 @@ CommandStyle(write_restart,WriteRestart) #ifndef LMP_WRITE_RESTART_H #define LMP_WRITE_RESTART_H -#include "pointers.h" +#include "command.h" namespace LAMMPS_NS { -class WriteRestart : protected Pointers { +class WriteRestart : protected Command { public: WriteRestart(class LAMMPS *); void command(int, char **); From 81578d99343f1b53bec4ec5e6c65651de1fbac19 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 13 Apr 2021 17:47:21 -0400 Subject: [PATCH 29/38] update docs for change in class topology --- doc/graphviz/lammps-classes.dot | 10 +++++++--- doc/src/Developer_org.rst | 16 ++++++++-------- doc/src/JPG/lammps-classes.png | Bin 260274 -> 293226 bytes doc/src/Modify_command.rst | 17 +++++++++-------- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/doc/graphviz/lammps-classes.dot b/doc/graphviz/lammps-classes.dot index 3c2d2f418d..390dd2cc4b 100644 --- a/doc/graphviz/lammps-classes.dot +++ b/doc/graphviz/lammps-classes.dot @@ -18,8 +18,8 @@ digraph lammps { Up [shape=box label="Update" color=blue] Un [shape=box label="Universe" color=blue] Ti [shape=box label="Timer" color=blue] - Lt [label="Lattice"] Rg [label="Region" color=red] + Lt [label="Lattice"] Rb [shape=box label="RegionBlock"] Rs [shape=box label="RegionSphere"] Av [label="AtomVec" color=red] @@ -34,6 +34,7 @@ digraph lammps { Du [label="Dump" color=red] Fi [label="Fix" color=red] Cp [label="Compute" color=red] + Cm [label="Command" color=red] Th [label="Thermo"] Va [label="Variable"] Ew [shape=box label="Ewald"] @@ -71,16 +72,19 @@ digraph lammps { Dg [shape=box label="DumpCFG"] Ve [shape=box label="Verlet"] Rr [shape=box label="Respa"] + Ru [shape=box label="Run"] + Se [shape=box label="Set"] Pt [shape=box label="PPPMTIP4P"] Vs [shape=box label="VerletSplit"] Ro [shape=box label="RespaOMP"] Mc [shape=box label="MinCG"] Mf [shape=box label="MinFire"] La -> {At Ci Co Do Er Fo Gr In Me Mo Ne Ou Ti Up Un} [penwidth=2] - Do -> {Lt Rg} [penwidth=2] + Do -> {Rg Lt} [penwidth=2] Rg -> {Rb Rs} [style=dashed penwidth=2] Co -> {Cb Ct} [style=dashed penwidth=2] - In -> Va [penwidth=2] + In -> {Va Cm} [penwidth=2] + Cm -> {Ru Se} [style=dashed penwidth=2] Mo -> {Fi Cp} [penwidth=2] Fo -> {Pa Bo An Di Im Ks} [penwidth=2] Ks -> {Ew Pp} [style=dashed penwidth=2] diff --git a/doc/src/Developer_org.rst b/doc/src/Developer_org.rst index 6ecccf084d..133d567cb3 100644 --- a/doc/src/Developer_org.rst +++ b/doc/src/Developer_org.rst @@ -49,8 +49,8 @@ underscore character '_' to separate words. Outside of bundled libraries which may have different conventions, all C and C++ header files have a ``.h`` extension, all C++ files have a ``.cpp`` extension, and C files a ``.c`` extension. A small number of C++ classes and utility functions -are implemented with only a ``.h`` file. Examples are the Pointer class -or the MathVec functions. +are implemented with only a ``.h`` file. Examples are the Pointers and +Commands classes or the MathVec functions. Class topology -------------- @@ -144,7 +144,7 @@ implement specific commands that can be invoked before, after, or in between runs. For these an instance of the class is created, its command() method called and then, after completion, the class instance deleted. Examples for this are the create_box, create_atoms, minimize, -run, or velocity command styles. +run, set, or velocity command styles. For all those ``styles`` certain naming conventions are employed: for the fix nve command the class is called FixNVE and the source files are @@ -175,11 +175,11 @@ follows: - The Input class reads and processes input input strings and files, stores variables, and invokes :doc:`commands `. -- As discussed above, command style classes are directly derived from - the Pointers class. They provide input script commands that perform - one-time operations before/after/between simulations or which invoke a - simulation. They are instantiated from within the Input class, - invoked, then immediately destructed. +- Command style classes are derived from the Command class. They provide + input script commands that perform one-time operations + before/after/between simulations or which invoke a simulation. They + are usually instantiated from within the Input class, its ``command`` + method invoked, and then immediately destructed. - The Finish class is instantiated to print statistics to the screen after a simulation is performed, by commands like run and minimize. diff --git a/doc/src/JPG/lammps-classes.png b/doc/src/JPG/lammps-classes.png index e401328783410d81668de49903144ea4bdc76199..71b5af9cccc92fa5594d34a032f5812efca037aa 100644 GIT binary patch literal 293226 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

g` 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 Q;t#eHCXYWR_xS0*0HRiBzW@LL diff --git a/doc/src/Modify_command.rst b/doc/src/Modify_command.rst index 2d0a1d99d9..e0e3ecbb8d 100644 --- a/doc/src/Modify_command.rst +++ b/doc/src/Modify_command.rst @@ -1,14 +1,15 @@ Input script command style ========================== -New commands can be added to LAMMPS input scripts by adding new -classes that have a "command" method. For example, the create_atoms, -read_data, velocity, and run commands are all implemented in this -fashion. When such a command is encountered in the LAMMPS input -script, LAMMPS simply creates a class with the corresponding name, -invokes the "command" method of the class, and passes it the arguments -from the input script. The command method can perform whatever -operations it wishes on LAMMPS data structures. +New commands can be added to LAMMPS input scripts by adding new classes +that are derived from the Command class and thus must have a "command" +method. For example, the create_atoms, read_data, velocity, and run +commands are all implemented in this fashion. When such a command is +encountered in the LAMMPS input script, LAMMPS simply creates a class +instance with the corresponding name, invokes the "command" method of +the class, and passes it the arguments from the input script. The +command method can perform whatever operations it wishes on LAMMPS data +structures. The single method your new class must define is as follows: From 75579fc1003b815bdecd8e62f2e0d0de0daa13c8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Apr 2021 07:05:00 -0400 Subject: [PATCH 30/38] take advantage of having the common Command base class to unify code paths --- doc/src/Developer_plugins.rst | 61 +++++++++++++----------------- examples/plugins/helloplugin.cpp | 11 +++--- src/KIM/kim_command.h | 2 +- src/MESSAGE/message.h | 2 +- src/MESSAGE/server.h | 2 +- src/PLUGIN/plugin.cpp | 2 +- src/PLUGIN/plugin.h | 2 +- src/REPLICA/hyper.h | 2 +- src/REPLICA/neb.h | 2 +- src/REPLICA/prd.h | 2 +- src/REPLICA/tad.h | 2 +- src/REPLICA/temper.h | 2 +- src/SPIN/neb_spin.h | 2 +- src/USER-COLVARS/group_ndx.h | 2 +- src/USER-COLVARS/ndx_group.h | 2 +- src/USER-MISC/temper_grem.h | 2 +- src/USER-MISC/temper_npt.h | 2 +- src/USER-PHONON/dynamical_matrix.h | 2 +- src/USER-PHONON/third_order.h | 2 +- src/balance.h | 2 +- src/change_box.h | 2 +- src/create_atoms.h | 2 +- src/create_bonds.h | 2 +- src/create_box.h | 2 +- src/delete_atoms.h | 2 +- src/delete_bonds.h | 2 +- src/deprecated.h | 2 +- src/displace_atoms.h | 2 +- src/info.h | 2 +- src/input.cpp | 11 +++--- src/input.h | 5 ++- src/lammpsplugin.h | 2 - src/minimize.h | 2 +- src/read_data.h | 2 +- src/read_dump.h | 2 +- src/read_restart.h | 2 +- src/replicate.h | 2 +- src/rerun.h | 2 +- src/reset_atom_ids.h | 2 +- src/reset_mol_ids.h | 2 +- src/run.h | 2 +- src/set.h | 2 +- src/velocity.h | 2 +- src/write_coeff.h | 2 +- src/write_data.h | 2 +- src/write_dump.h | 2 +- src/write_restart.h | 2 +- 47 files changed, 83 insertions(+), 91 deletions(-) diff --git a/doc/src/Developer_plugins.rst b/doc/src/Developer_plugins.rst index 68f1f1387c..1beedcf213 100644 --- a/doc/src/Developer_plugins.rst +++ b/doc/src/Developer_plugins.rst @@ -59,31 +59,25 @@ Members of ``lammpsplugin_t`` * - author - String with the name and email of the author * - creator.v1 - - Pointer to factory function for pair, bond, angle, dihedral, or improper styles + - Pointer to factory function for pair, bond, angle, dihedral, improper or command styles * - creator.v2 - Pointer to factory function for compute, fix, or region styles - * - creator.v3 - - Pointer to factory function for command styles * - handle - Pointer to the open DSO file handle Only one of the three alternate creator entries can be used at a time -and which of those is determined by the style of plugin. The "creator.v1" -element is for factory functions of supported styles computing forces (i.e. -pair, bond, angle, dihedral, or improper styles) and the function takes -as single argument the pointer to the LAMMPS instance. The factory function -is cast to the ``lammpsplugin_factory1`` type before assignment. The -"creator.v2" element is for factory functions creating an instance of -a fix, compute, or region style and takes three arguments: a pointer to -the LAMMPS instance, an integer with the length of the argument list and -a ``char **`` pointer to the list of arguments. The factory function pointer -needs to be cast to the ``lammpsplugin_factory2`` type before assignment. -The "creator.v3" element takes the same arguments as "creator.v3" but is -specific to creating command styles: the factory function has to instantiate -the command style locally passing the LAMMPS pointer as argument and then -call its "command" member function with the number and list of arguments. -The factory function pointer needs to be cast to the -``lammpsplugin_factory3`` type before assignment. +and which of those is determined by the style of plugin. The +"creator.v1" element is for factory functions of supported styles +computing forces (i.e. command, pair, bond, angle, dihedral, or +improper styles) and the function takes as single argument the pointer +to the LAMMPS instance. The factory function is cast to the +``lammpsplugin_factory1`` type before assignment. The "creator.v2" +element is for factory functions creating an instance of a fix, compute, +or region style and takes three arguments: a pointer to the LAMMPS +instance, an integer with the length of the argument list and a ``char +**`` pointer to the list of arguments. The factory function pointer +needs to be cast to the ``lammpsplugin_factory2`` type before +assignment. Pair style example ^^^^^^^^^^^^^^^^^^ @@ -123,12 +117,12 @@ function would look like this: The factory function in this example is called ``morse2creator()``. It receives a pointer to the LAMMPS class as only argument and thus has to -be assigned to the *creator.v1* member of the plugin struct and cast to the -``lammpsplugin_factory1`` pointer type. It returns a +be assigned to the *creator.v1* member of the plugin struct and cast to +the ``lammpsplugin_factory1`` function pointer type. It returns a pointer to the allocated class instance derived from the ``Pair`` class. -This function may be declared static to avoid clashes with other plugins. -The name of the derived class, ``PairMorse2``, must be unique inside -the entire LAMMPS executable. +This function may be declared static to avoid clashes with other +plugins. The name of the derived class, ``PairMorse2``, however must be +unique inside the entire LAMMPS executable. Fix style example ^^^^^^^^^^^^^^^^^ @@ -169,9 +163,9 @@ Below is an example for that: Command style example ^^^^^^^^^^^^^^^^^^^^^ -For command styles there is a third variant of factory function as +Command styles also use the first variant of factory function as demonstrated in the following example, which also shows that the -implementation of the plugin class may also be within the same +implementation of the plugin class may be within the same source file as the plugin interface code: .. code-block:: C++ @@ -180,15 +174,15 @@ file as the plugin interface code: #include "comm.h" #include "error.h" - #include "pointers.h" + #include "command.h" #include "version.h" #include namespace LAMMPS_NS { - class Hello : protected Pointers { + class Hello : public Command { public: - Hello(class LAMMPS *lmp) : Pointers(lmp) {}; + Hello(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); }; } @@ -202,10 +196,9 @@ file as the plugin interface code: utils::logmesg(lmp,fmt::format("Hello, {}!\n",argv[0])); } - static void hellocreator(LAMMPS *lmp, int argc, char **argv) + static void hellocreator(LAMMPS *lmp) { - Hello hello(lmp); - hello.command(argc,argv); + return new Hello(lmp); } extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc) @@ -216,9 +209,9 @@ file as the plugin interface code: plugin.version = LAMMPS_VERSION; plugin.style = "command"; plugin.name = "hello"; - plugin.info = "Hello world command v1.0"; + plugin.info = "Hello world command v1.1"; plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)"; - plugin.creator.v3 = (lammpsplugin_factory3 *) &hellocreator; + plugin.creator.v1 = (lammpsplugin_factory1 *) &hellocreator; plugin.handle = handle; (*register_plugin)(&plugin,lmp); } diff --git a/examples/plugins/helloplugin.cpp b/examples/plugins/helloplugin.cpp index f453add374..f4a49c1a5a 100644 --- a/examples/plugins/helloplugin.cpp +++ b/examples/plugins/helloplugin.cpp @@ -9,7 +9,7 @@ #include namespace LAMMPS_NS { - class Hello : protected Command { + class Hello : public Command { public: Hello(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); @@ -25,10 +25,9 @@ void Hello::command(int argc, char **argv) utils::logmesg(lmp,fmt::format("Hello, {}!\n",argv[0])); } -static void hellocreator(LAMMPS *lmp, int argc, char **argv) +static Command *hellocreator(LAMMPS *lmp) { - Hello hello(lmp); - hello.command(argc,argv); + return new Hello(lmp); } extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc) @@ -39,9 +38,9 @@ extern "C" void lammpsplugin_init(void *lmp, void *handle, void *regfunc) plugin.version = LAMMPS_VERSION; plugin.style = "command"; plugin.name = "hello"; - plugin.info = "Hello world command v1.0"; + plugin.info = "Hello world command v1.1"; plugin.author = "Axel Kohlmeyer (akohlmey@gmail.com)"; - plugin.creator.v3 = (lammpsplugin_factory3 *) &hellocreator; + plugin.creator.v1 = (lammpsplugin_factory1 *) &hellocreator; plugin.handle = handle; (*register_plugin)(&plugin,lmp); } diff --git a/src/KIM/kim_command.h b/src/KIM/kim_command.h index 64abeed9e0..b27b0e0873 100644 --- a/src/KIM/kim_command.h +++ b/src/KIM/kim_command.h @@ -66,7 +66,7 @@ CommandStyle(kim,KimCommand) namespace LAMMPS_NS { -class KimCommand : protected Command { +class KimCommand : public Command { public: KimCommand(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); diff --git a/src/MESSAGE/message.h b/src/MESSAGE/message.h index c499ff6537..88c658e44b 100644 --- a/src/MESSAGE/message.h +++ b/src/MESSAGE/message.h @@ -24,7 +24,7 @@ CommandStyle(message,Message) namespace LAMMPS_NS { -class Message : protected Command { +class Message : public Command { public: Message(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); diff --git a/src/MESSAGE/server.h b/src/MESSAGE/server.h index 63191ccf33..7c93db8c64 100644 --- a/src/MESSAGE/server.h +++ b/src/MESSAGE/server.h @@ -24,7 +24,7 @@ CommandStyle(server,Server) namespace LAMMPS_NS { -class Server : protected Command { +class Server : public Command { public: Server(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); diff --git a/src/PLUGIN/plugin.cpp b/src/PLUGIN/plugin.cpp index a2f74060f1..d311b64520 100644 --- a/src/PLUGIN/plugin.cpp +++ b/src/PLUGIN/plugin.cpp @@ -257,7 +257,7 @@ namespace LAMMPS_NS "style {} from plugin", plugin->name)); } - (*command_map)[plugin->name] = (Input::CommandCreator)plugin->creator.v3; + (*command_map)[plugin->name] = (Input::CommandCreator)plugin->creator.v1; } else { utils::logmesg(lmp,fmt::format("Loading plugin for {} styles not " diff --git a/src/PLUGIN/plugin.h b/src/PLUGIN/plugin.h index 61355f4113..4b4bca9878 100644 --- a/src/PLUGIN/plugin.h +++ b/src/PLUGIN/plugin.h @@ -26,7 +26,7 @@ CommandStyle(plugin,Plugin) namespace LAMMPS_NS { - class Plugin : protected Command { + class Plugin : public Command { public: Plugin(class LAMMPS *); void command(int, char **); diff --git a/src/REPLICA/hyper.h b/src/REPLICA/hyper.h index faad58994b..a96ccf3727 100644 --- a/src/REPLICA/hyper.h +++ b/src/REPLICA/hyper.h @@ -24,7 +24,7 @@ CommandStyle(hyper,Hyper) namespace LAMMPS_NS { -class Hyper : protected Command { +class Hyper : public Command { public: Hyper(class LAMMPS *); ~Hyper() {} diff --git a/src/REPLICA/neb.h b/src/REPLICA/neb.h index d8a9d5d3e4..8298766ccf 100644 --- a/src/REPLICA/neb.h +++ b/src/REPLICA/neb.h @@ -24,7 +24,7 @@ CommandStyle(neb,NEB) namespace LAMMPS_NS { -class NEB : protected Command { +class NEB : public Command { public: NEB(class LAMMPS *); NEB(class LAMMPS *, double, double, int, int, int, double *, double *); diff --git a/src/REPLICA/prd.h b/src/REPLICA/prd.h index b331f7dc02..0d8fde1bfe 100644 --- a/src/REPLICA/prd.h +++ b/src/REPLICA/prd.h @@ -24,7 +24,7 @@ CommandStyle(prd,PRD) namespace LAMMPS_NS { -class PRD : protected Command { +class PRD : public Command { public: PRD(class LAMMPS *); ~PRD() {} diff --git a/src/REPLICA/tad.h b/src/REPLICA/tad.h index 3a525146a6..91e570c707 100644 --- a/src/REPLICA/tad.h +++ b/src/REPLICA/tad.h @@ -24,7 +24,7 @@ CommandStyle(tad,TAD) namespace LAMMPS_NS { -class TAD : protected Command { +class TAD : public Command { public: TAD(class LAMMPS *); ~TAD(); diff --git a/src/REPLICA/temper.h b/src/REPLICA/temper.h index ce7944da95..3f7d813f2a 100644 --- a/src/REPLICA/temper.h +++ b/src/REPLICA/temper.h @@ -24,7 +24,7 @@ CommandStyle(temper,Temper) namespace LAMMPS_NS { -class Temper : protected Command { +class Temper : public Command { public: Temper(class LAMMPS *); ~Temper(); diff --git a/src/SPIN/neb_spin.h b/src/SPIN/neb_spin.h index 3dbae09297..54d85093a5 100644 --- a/src/SPIN/neb_spin.h +++ b/src/SPIN/neb_spin.h @@ -24,7 +24,7 @@ CommandStyle(neb/spin,NEBSpin) namespace LAMMPS_NS { -class NEBSpin : protected Command { +class NEBSpin : public Command { public: NEBSpin(class LAMMPS *); ~NEBSpin(); diff --git a/src/USER-COLVARS/group_ndx.h b/src/USER-COLVARS/group_ndx.h index 46ba86c860..58b210937a 100644 --- a/src/USER-COLVARS/group_ndx.h +++ b/src/USER-COLVARS/group_ndx.h @@ -26,7 +26,7 @@ CommandStyle(group2ndx,Group2Ndx) namespace LAMMPS_NS { -class Group2Ndx : protected Command { +class Group2Ndx : public Command { public: Group2Ndx(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); diff --git a/src/USER-COLVARS/ndx_group.h b/src/USER-COLVARS/ndx_group.h index 1c881a65bf..e0fc6cf527 100644 --- a/src/USER-COLVARS/ndx_group.h +++ b/src/USER-COLVARS/ndx_group.h @@ -27,7 +27,7 @@ CommandStyle(ndx2group,Ndx2Group) namespace LAMMPS_NS { -class Ndx2Group : protected Command { +class Ndx2Group : public Command { public: Ndx2Group(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); diff --git a/src/USER-MISC/temper_grem.h b/src/USER-MISC/temper_grem.h index b720aeb45c..3c1891f22d 100644 --- a/src/USER-MISC/temper_grem.h +++ b/src/USER-MISC/temper_grem.h @@ -24,7 +24,7 @@ CommandStyle(temper/grem,TemperGrem) namespace LAMMPS_NS { -class TemperGrem : protected Command { +class TemperGrem : public Command { public: TemperGrem(class LAMMPS *); ~TemperGrem(); diff --git a/src/USER-MISC/temper_npt.h b/src/USER-MISC/temper_npt.h index 5c285f083c..a0eb1c1e9b 100644 --- a/src/USER-MISC/temper_npt.h +++ b/src/USER-MISC/temper_npt.h @@ -25,7 +25,7 @@ CommandStyle(temper/npt,TemperNPT) namespace LAMMPS_NS { -class TemperNPT : protected Command { +class TemperNPT : public Command { public: TemperNPT(class LAMMPS *); ~TemperNPT(); diff --git a/src/USER-PHONON/dynamical_matrix.h b/src/USER-PHONON/dynamical_matrix.h index 30baeda27f..d8c3ad411b 100644 --- a/src/USER-PHONON/dynamical_matrix.h +++ b/src/USER-PHONON/dynamical_matrix.h @@ -15,7 +15,7 @@ CommandStyle(dynamical_matrix,DynamicalMatrix) namespace LAMMPS_NS { -class DynamicalMatrix : protected Command { +class DynamicalMatrix : public Command { public: DynamicalMatrix(class LAMMPS *); virtual ~DynamicalMatrix(); diff --git a/src/USER-PHONON/third_order.h b/src/USER-PHONON/third_order.h index 87b0c695f6..56a0266937 100644 --- a/src/USER-PHONON/third_order.h +++ b/src/USER-PHONON/third_order.h @@ -16,7 +16,7 @@ CommandStyle(third_order,ThirdOrder) namespace LAMMPS_NS { - class ThirdOrder : protected Command { + class ThirdOrder : public Command { public: ThirdOrder(class LAMMPS *); virtual ~ThirdOrder(); diff --git a/src/balance.h b/src/balance.h index 25ccac85ae..0642fe04f6 100644 --- a/src/balance.h +++ b/src/balance.h @@ -24,7 +24,7 @@ CommandStyle(balance,Balance) namespace LAMMPS_NS { -class Balance : protected Command { +class Balance : public Command { public: class RCB *rcb; class FixStore *fixstore; // per-atom weights stored in FixStore diff --git a/src/change_box.h b/src/change_box.h index 2f6802194b..f48edb2d9f 100644 --- a/src/change_box.h +++ b/src/change_box.h @@ -24,7 +24,7 @@ CommandStyle(change_box,ChangeBox) namespace LAMMPS_NS { -class ChangeBox : protected Command { +class ChangeBox : public Command { public: ChangeBox(class LAMMPS *); void command(int, char **); diff --git a/src/create_atoms.h b/src/create_atoms.h index 8f0e016192..deb155b96a 100644 --- a/src/create_atoms.h +++ b/src/create_atoms.h @@ -24,7 +24,7 @@ CommandStyle(create_atoms,CreateAtoms) namespace LAMMPS_NS { -class CreateAtoms : protected Command { +class CreateAtoms : public Command { public: CreateAtoms(class LAMMPS *); void command(int, char **); diff --git a/src/create_bonds.h b/src/create_bonds.h index f25cb6d1bc..d2d50c86c6 100644 --- a/src/create_bonds.h +++ b/src/create_bonds.h @@ -24,7 +24,7 @@ CommandStyle(create_bonds,CreateBonds) namespace LAMMPS_NS { -class CreateBonds : protected Command { +class CreateBonds : public Command { public: CreateBonds(class LAMMPS *); void command(int, char **); diff --git a/src/create_box.h b/src/create_box.h index 846af6bcee..26a2be6fe1 100644 --- a/src/create_box.h +++ b/src/create_box.h @@ -24,7 +24,7 @@ CommandStyle(create_box,CreateBox) namespace LAMMPS_NS { -class CreateBox : protected Command { +class CreateBox : public Command { public: CreateBox(class LAMMPS *); void command(int, char **); diff --git a/src/delete_atoms.h b/src/delete_atoms.h index e43bebfa54..5ff1d12f65 100644 --- a/src/delete_atoms.h +++ b/src/delete_atoms.h @@ -25,7 +25,7 @@ CommandStyle(delete_atoms,DeleteAtoms) namespace LAMMPS_NS { -class DeleteAtoms : protected Command { +class DeleteAtoms : public Command { public: DeleteAtoms(class LAMMPS *); void command(int, char **); diff --git a/src/delete_bonds.h b/src/delete_bonds.h index 2f255e12d6..5c56a67f68 100644 --- a/src/delete_bonds.h +++ b/src/delete_bonds.h @@ -24,7 +24,7 @@ CommandStyle(delete_bonds,DeleteBonds) namespace LAMMPS_NS { -class DeleteBonds : protected Command { +class DeleteBonds : public Command { public: DeleteBonds(class LAMMPS *); void command(int, char **); diff --git a/src/deprecated.h b/src/deprecated.h index 4b6cba7f30..d5997d7199 100644 --- a/src/deprecated.h +++ b/src/deprecated.h @@ -30,7 +30,7 @@ CommandStyle(kim_query,Deprecated) namespace LAMMPS_NS { -class Deprecated : protected Command { +class Deprecated : public Command { public: Deprecated(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); diff --git a/src/displace_atoms.h b/src/displace_atoms.h index 98247b7244..c2c2e8306f 100644 --- a/src/displace_atoms.h +++ b/src/displace_atoms.h @@ -24,7 +24,7 @@ CommandStyle(displace_atoms,DisplaceAtoms) namespace LAMMPS_NS { -class DisplaceAtoms : protected Command { +class DisplaceAtoms : public Command { public: DisplaceAtoms(class LAMMPS *); ~DisplaceAtoms(); diff --git a/src/info.h b/src/info.h index 536a93c559..386d38c39f 100644 --- a/src/info.h +++ b/src/info.h @@ -26,7 +26,7 @@ CommandStyle(info,Info) namespace LAMMPS_NS { -class Info : protected Command { +class Info : public Command { public: Info(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); diff --git a/src/input.cpp b/src/input.cpp index 9079cdd76c..16cef08c36 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -21,6 +21,7 @@ #include "comm.h" #include "comm_brick.h" #include "comm_tiled.h" +#include "command.h" #include "compute.h" #include "dihedral.h" #include "domain.h" @@ -82,7 +83,7 @@ command line flags, holds the factory of commands and creates and initializes an instance of the Variable class. To execute a command, a specific class instance, derived from -:cpp:class:`Pointers`, is created, then its ``command()`` member +:cpp:class:`Command`, is created, then its ``command()`` member function executed, and finally the class instance is deleted. \endverbatim @@ -789,7 +790,8 @@ int Input::execute_command() if (command_map->find(command) != command_map->end()) { CommandCreator &command_creator = (*command_map)[command]; - command_creator(lmp,narg,arg); + Command *cmd = command_creator(lmp); + cmd->command(narg,arg); return 0; } @@ -803,10 +805,9 @@ int Input::execute_command() ------------------------------------------------------------------------- */ template -void Input::command_creator(LAMMPS *lmp, int narg, char **arg) +Command *Input::command_creator(LAMMPS *lmp) { - T cmd(lmp); - cmd.command(narg,arg); + return new T(lmp); } /* ---------------------------------------------------------------------- */ diff --git a/src/input.h b/src/input.h index 809a7a5f94..59be026640 100644 --- a/src/input.h +++ b/src/input.h @@ -19,6 +19,7 @@ #include namespace LAMMPS_NS { + class Command; class Input : protected Pointers { friend class Info; @@ -59,12 +60,12 @@ class Input : protected Pointers { FILE **infiles; // list of open input files public: - typedef void (*CommandCreator)(LAMMPS *, int, char **); + typedef Command * (*CommandCreator)(LAMMPS *); typedef std::map CommandCreatorMap; CommandCreatorMap *command_map; protected: - template static void command_creator(LAMMPS *, int, char **); + template static Command *command_creator(LAMMPS *); private: void parse(); // parse an input text line diff --git a/src/lammpsplugin.h b/src/lammpsplugin.h index 1baed9799d..e544e8bffe 100644 --- a/src/lammpsplugin.h +++ b/src/lammpsplugin.h @@ -20,7 +20,6 @@ extern "C" { typedef void *(lammpsplugin_factory1)(void *); typedef void *(lammpsplugin_factory2)(void *, int, char **); - typedef void (lammpsplugin_factory3)(void *, int, char **); typedef struct { const char *version; @@ -31,7 +30,6 @@ extern "C" { union { lammpsplugin_factory1 *v1; lammpsplugin_factory2 *v2; - lammpsplugin_factory3 *v3; } creator; void *handle; } lammpsplugin_t; diff --git a/src/minimize.h b/src/minimize.h index 10b244130a..32d08c5f52 100644 --- a/src/minimize.h +++ b/src/minimize.h @@ -24,7 +24,7 @@ CommandStyle(minimize,Minimize) namespace LAMMPS_NS { -class Minimize : protected Command { +class Minimize : public Command { public: Minimize(class LAMMPS *); void command(int, char **); diff --git a/src/read_data.h b/src/read_data.h index d251259a08..7ccbeebd58 100644 --- a/src/read_data.h +++ b/src/read_data.h @@ -24,7 +24,7 @@ CommandStyle(read_data,ReadData) namespace LAMMPS_NS { -class ReadData : protected Command { +class ReadData : public Command { public: ReadData(class LAMMPS *); ~ReadData(); diff --git a/src/read_dump.h b/src/read_dump.h index ba59cc9224..842b629fa4 100644 --- a/src/read_dump.h +++ b/src/read_dump.h @@ -26,7 +26,7 @@ CommandStyle(read_dump,ReadDump) namespace LAMMPS_NS { -class ReadDump : protected Command { +class ReadDump : public Command { public: ReadDump(class LAMMPS *); ~ReadDump(); diff --git a/src/read_restart.h b/src/read_restart.h index 3a2c7965b3..fc2a27fa67 100644 --- a/src/read_restart.h +++ b/src/read_restart.h @@ -24,7 +24,7 @@ CommandStyle(read_restart,ReadRestart) namespace LAMMPS_NS { -class ReadRestart : protected Command { +class ReadRestart : public Command { public: ReadRestart(class LAMMPS *); void command(int, char **); diff --git a/src/replicate.h b/src/replicate.h index fd865a9c71..b4be578b23 100644 --- a/src/replicate.h +++ b/src/replicate.h @@ -24,7 +24,7 @@ CommandStyle(replicate,Replicate) namespace LAMMPS_NS { -class Replicate : protected Command { +class Replicate : public Command { public: Replicate(class LAMMPS *); void command(int, char **); diff --git a/src/rerun.h b/src/rerun.h index 57aa32227f..c10ca8780e 100644 --- a/src/rerun.h +++ b/src/rerun.h @@ -24,7 +24,7 @@ CommandStyle(rerun,Rerun) namespace LAMMPS_NS { -class Rerun : protected Command { +class Rerun : public Command { public: Rerun(class LAMMPS *); void command(int, char **); diff --git a/src/reset_atom_ids.h b/src/reset_atom_ids.h index a017abbbc8..6c262f2bd8 100644 --- a/src/reset_atom_ids.h +++ b/src/reset_atom_ids.h @@ -24,7 +24,7 @@ CommandStyle(reset_atom_ids,ResetIDs) namespace LAMMPS_NS { -class ResetIDs : protected Command { +class ResetIDs : public Command { public: struct AtomRvous { bigint ibin; diff --git a/src/reset_mol_ids.h b/src/reset_mol_ids.h index c25f64fe43..5759cf8b4e 100644 --- a/src/reset_mol_ids.h +++ b/src/reset_mol_ids.h @@ -24,7 +24,7 @@ CommandStyle(reset_mol_ids,ResetMolIDs) namespace LAMMPS_NS { -class ResetMolIDs : protected Command { +class ResetMolIDs : public Command { public: ResetMolIDs(class LAMMPS *); ~ResetMolIDs(); diff --git a/src/run.h b/src/run.h index a9a4a556f0..747af6a61c 100644 --- a/src/run.h +++ b/src/run.h @@ -24,7 +24,7 @@ CommandStyle(run,Run) namespace LAMMPS_NS { -class Run : protected Command { +class Run : public Command { public: Run(class LAMMPS *); void command(int, char **); diff --git a/src/set.h b/src/set.h index 02e81b057a..330bd484a3 100644 --- a/src/set.h +++ b/src/set.h @@ -24,7 +24,7 @@ CommandStyle(set,Set) namespace LAMMPS_NS { -class Set : protected Command { +class Set : public Command { public: Set(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); diff --git a/src/velocity.h b/src/velocity.h index 5c54302a1e..d7405f87fd 100644 --- a/src/velocity.h +++ b/src/velocity.h @@ -24,7 +24,7 @@ CommandStyle(velocity,Velocity) namespace LAMMPS_NS { -class Velocity : protected Command { +class Velocity : public Command { public: Velocity(class LAMMPS *); void command(int, char **); diff --git a/src/write_coeff.h b/src/write_coeff.h index 2555454db0..8815162c48 100644 --- a/src/write_coeff.h +++ b/src/write_coeff.h @@ -24,7 +24,7 @@ CommandStyle(write_coeff,WriteCoeff) namespace LAMMPS_NS { -class WriteCoeff : protected Command { +class WriteCoeff : public Command { public: WriteCoeff(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); diff --git a/src/write_data.h b/src/write_data.h index c9ba5a4a52..cecfaa4800 100644 --- a/src/write_data.h +++ b/src/write_data.h @@ -24,7 +24,7 @@ CommandStyle(write_data,WriteData) namespace LAMMPS_NS { -class WriteData : protected Command { +class WriteData : public Command { public: WriteData(class LAMMPS *); void command(int, char **); diff --git a/src/write_dump.h b/src/write_dump.h index 5d1499934a..763fd12f60 100644 --- a/src/write_dump.h +++ b/src/write_dump.h @@ -24,7 +24,7 @@ CommandStyle(write_dump,WriteDump) namespace LAMMPS_NS { -class WriteDump : protected Command { +class WriteDump : public Command { public: WriteDump(class LAMMPS *lmp) : Command(lmp) {}; void command(int, char **); diff --git a/src/write_restart.h b/src/write_restart.h index 0b8826f10b..05f5c45ec6 100644 --- a/src/write_restart.h +++ b/src/write_restart.h @@ -24,7 +24,7 @@ CommandStyle(write_restart,WriteRestart) namespace LAMMPS_NS { -class WriteRestart : protected Command { +class WriteRestart : public Command { public: WriteRestart(class LAMMPS *); void command(int, char **); From 2e5079371ad9f5e2edb3eaf093167451605a9b38 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Apr 2021 07:26:34 -0400 Subject: [PATCH 31/38] must delete command explicitly now --- src/input.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/input.cpp b/src/input.cpp index 16cef08c36..d3352b380a 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -792,6 +792,7 @@ int Input::execute_command() CommandCreator &command_creator = (*command_map)[command]; Command *cmd = command_creator(lmp); cmd->command(narg,arg); + delete cmd; return 0; } From d5661e06ae266dee138e432f732922ab91b1b37e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Apr 2021 20:00:38 -0400 Subject: [PATCH 32/38] Detect linux distribution and version --- cmake/Modules/LAMMPSUtils.cmake | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cmake/Modules/LAMMPSUtils.cmake b/cmake/Modules/LAMMPSUtils.cmake index acaef19498..41dcfc5b2f 100644 --- a/cmake/Modules/LAMMPSUtils.cmake +++ b/cmake/Modules/LAMMPSUtils.cmake @@ -104,3 +104,13 @@ function(FetchPotentials pkgfolder potfolder) endforeach() endif() endfunction(FetchPotentials) + +# set CMAKE_LINUX_DISTRO and CMAKE_DISTRO_VERSION on Linux +if((CMAKE_SYSTEM_NAME STREQUAL Linux) AND (EXISTS /etc/os-release)) + file(STRINGS /etc/os-release distro REGEX "^NAME=") + string(REGEX REPLACE "NAME=\"?([^\"]*)\"?" "\\1" distro "${distro}") + file(STRINGS /etc/os-release disversion REGEX "^VERSION_ID=") + string(REGEX REPLACE "VERSION_ID=\"?([^\"]*)\"?" "\\1" disversion "${disversion}") + set(CMAKE_LINUX_DISTRO ${distro}) + set(CMAKE_DISTRO_VERSION ${disversion}) +endif() From 2a81411029c6410d4e979c9f3ac5b27d6f795d70 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Apr 2021 20:01:46 -0400 Subject: [PATCH 33/38] use linux distro and version info to decide when to look for faster linkers --- cmake/CMakeLists.txt | 2 +- cmake/Modules/Testing.cmake | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index a11c7575d2..263b5a566d 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -731,7 +731,7 @@ get_target_property(DEFINES lammps COMPILE_DEFINITIONS) include(FeatureSummary) feature_summary(DESCRIPTION "The following tools and libraries have been found and configured:" WHAT PACKAGES_FOUND) message(STATUS "<<< Build configuration >>> - Operating System: ${CMAKE_SYSTEM_NAME} + Operating System: ${CMAKE_SYSTEM_NAME} ${CMAKE_LINUX_DISTRO} ${CMAKE_DISTRO_VERSION} Build type: ${CMAKE_BUILD_TYPE} Install path: ${CMAKE_INSTALL_PREFIX} Generator: ${CMAKE_GENERATOR} using ${CMAKE_MAKE_PROGRAM}") diff --git a/cmake/Modules/Testing.cmake b/cmake/Modules/Testing.cmake index 6d2f39b0f3..7fbd8212de 100644 --- a/cmake/Modules/Testing.cmake +++ b/cmake/Modules/Testing.cmake @@ -16,11 +16,14 @@ if(ENABLE_TESTING) set(MEMORYCHECK_COMMAND "${VALGRIND_BINARY}" CACHE FILEPATH "Memory Check Command") set(MEMORYCHECK_COMMAND_OPTIONS "${VALGRIND_DEFAULT_OPTIONS}" CACHE STRING "Memory Check Command Options") - # check if a faster linker is available. - # only verified with GNU and Clang compilers and new CMake - if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) - if((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") - OR (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")) + # we need to build and link a LOT of tester executables, so it is worth checking if + # a faster linker is available. requires GNU or Clang compiler, newer CMake. + # also only verified with Fedora Linux > 30 and Ubuntu <= 18.04 (Ubuntu 20.04 fails) + if((CMAKE_SYSTEM_NAME STREQUAL Linux) AND (CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) + AND ((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") + OR (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang"))) + if (((CMAKE_LINUX_DISTRO STREQUAL Ubuntu) AND (CMAKE_DISTRO_VERSION VERSION_LESS_EQUAL 18.04)) + OR ((CMAKE_LINUX_DISTRO STREQUAL Fedora) AND (CMAKE_DISTRO_VERSION VERSION_GREATER 30))) include(CheckCXXCompilerFlag) set(CMAKE_CUSTOM_LINKER_DEFAULT default) check_cxx_compiler_flag(-fuse-ld=lld HAVE_LLD_LINKER_FLAG) From 6e739c04e43951596a6a13a4b8db374e03026e96 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 14 Apr 2021 20:02:05 -0400 Subject: [PATCH 34/38] use safe fread() call --- src/read_restart.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/read_restart.cpp b/src/read_restart.cpp index 9e8fbce91c..d3fecd9d80 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -1195,7 +1195,7 @@ void ReadRestart::check_eof_magic() if (me == 0) { long curpos = ftell(fp); fseek(fp,(long)-n,SEEK_END); - fread(str,sizeof(char),n,fp); + utils::sfread(FLERR,str,sizeof(char),n,fp,nullptr,error); fseek(fp,curpos,SEEK_SET); } From 0870a560939079644892c9ff2e650e2a45339243 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 15 Apr 2021 11:57:48 -0400 Subject: [PATCH 35/38] expand exception message to include cause of file open failure --- src/potential_file_reader.cpp | 3 ++- src/text_file_reader.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/potential_file_reader.cpp b/src/potential_file_reader.cpp index 2730a3d109..bddfca9bce 100644 --- a/src/potential_file_reader.cpp +++ b/src/potential_file_reader.cpp @@ -62,7 +62,8 @@ PotentialFileReader::PotentialFileReader(LAMMPS *lmp, try { reader = open_potential(filename); if (!reader) { - error->one(FLERR, fmt::format("cannot open {} potential file {}", potential_name, filename)); + error->one(FLERR, fmt::format("cannot open {} potential file {}: {}", + potential_name, filename, utils::getsyserror())); } } catch (FileReaderException &e) { error->one(FLERR, e.what()); diff --git a/src/text_file_reader.cpp b/src/text_file_reader.cpp index af27bfb16d..7a6e914639 100644 --- a/src/text_file_reader.cpp +++ b/src/text_file_reader.cpp @@ -46,7 +46,8 @@ TextFileReader::TextFileReader(const std::string &filename, const std::string &f fp = fopen(filename.c_str(), "r"); if (fp == nullptr) { - throw FileReaderException(fmt::format("cannot open {} file {}", filetype, filename)); + throw FileReaderException(fmt::format("cannot open {} file {}: {}", + filetype, filename, utils::getsyserror())); } } From 7a97331e510aa53635a5b469deceb445e785c99a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 16 Apr 2021 12:38:00 -0400 Subject: [PATCH 36/38] add support for Plumed2 version 2.5.7, 2.6.3, 2.7.1 --- cmake/Modules/Packages/USER-PLUMED.cmake | 5 +++-- lib/plumed/Install.py | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cmake/Modules/Packages/USER-PLUMED.cmake b/cmake/Modules/Packages/USER-PLUMED.cmake index 8719e8179d..e71542cfc5 100644 --- a/cmake/Modules/Packages/USER-PLUMED.cmake +++ b/cmake/Modules/Packages/USER-PLUMED.cmake @@ -54,8 +54,9 @@ if(DOWNLOAD_PLUMED) set(PLUMED_BUILD_BYPRODUCTS "/lib/libplumedWrapper.a") endif() - set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.7.0/plumed-src-2.7.0.tgz" CACHE STRING "URL for PLUMED tarball") - set(PLUMED_MD5 "95f29dd0c067577f11972ff90dfc7d12" CACHE STRING "MD5 checksum of PLUMED tarball") + set(PLUMED_URL "https://github.com/plumed/plumed2/releases/download/v2.7.1/plumed-src-2.7.1.tgz" CACHE STRING "URL for PLUMED tarball") + set(PLUMED_MD5 "4eac6a462ec84dfe0cec96c82421b8e8" CACHE STRING "MD5 checksum of PLUMED tarball") + mark_as_advanced(PLUMED_URL) mark_as_advanced(PLUMED_MD5) diff --git a/lib/plumed/Install.py b/lib/plumed/Install.py index c11d5bfee9..e3858b39d3 100644 --- a/lib/plumed/Install.py +++ b/lib/plumed/Install.py @@ -17,7 +17,7 @@ parser = ArgumentParser(prog='Install.py', # settings -version = "2.7.0" +version = "2.7.1" mode = "static" # help message @@ -47,9 +47,12 @@ checksums = { \ '2.5.2' : 'bd2f18346c788eb54e1e52f4f6acf41a', \ '2.5.3' : 'de30d6e7c2dcc0973298e24a6da24286', \ '2.5.4' : 'f31b7d16a4be2e30aa7d5c19c3d37853', \ + '2.5.7' : '1ca36226fdb8110b1009aa61d615d4e5', \ '2.6.0' : '204d2edae58d9b10ba3ad460cad64191', \ '2.6.1' : '89a9a450fc6025299fe16af235957163', \ + '2.6.3' : 'a9f8028fd74528c2024781ea1fdefeee', \ '2.7.0' : '95f29dd0c067577f11972ff90dfc7d12', \ + '2.7.1' : '4eac6a462ec84dfe0cec96c82421b8e8', \ } # parse and process arguments From 99035dc68096170e570f0213d6a388b6f06925a8 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 16 Apr 2021 11:59:37 -0600 Subject: [PATCH 37/38] removing all commented lines --- src/KOKKOS/atom_kokkos.h | 3 --- src/KOKKOS/atom_vec_spin_kokkos.cpp | 14 ----------- src/KOKKOS/kokkos_type.h | 37 ----------------------------- 3 files changed, 54 deletions(-) diff --git a/src/KOKKOS/atom_kokkos.h b/src/KOKKOS/atom_kokkos.h index f5649f927e..f5cf4916cf 100644 --- a/src/KOKKOS/atom_kokkos.h +++ b/src/KOKKOS/atom_kokkos.h @@ -56,9 +56,6 @@ class AtomKokkos : public Atom { // SPIN package - // DAT::tdual_sp_array k_sp; - // DAT::tdual_fm_array k_fm; - // DAT::tdual_fm_long_array k_fm_long; DAT::tdual_float_1d_4 k_sp; DAT::tdual_f_array k_fm; DAT::tdual_f_array k_fm_long; diff --git a/src/KOKKOS/atom_vec_spin_kokkos.cpp b/src/KOKKOS/atom_vec_spin_kokkos.cpp index 5e3ff19831..e9bbeebe28 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.cpp +++ b/src/KOKKOS/atom_vec_spin_kokkos.cpp @@ -189,7 +189,6 @@ struct AtomVecSpinKokkos_PackComm { AtomVecSpinKokkos_PackComm( const typename DAT::tdual_x_array &x, - // const typename DAT::tdual_sp_array &sp, const typename DAT::tdual_float_1d_4 &sp, const typename DAT::tdual_xfloat_2d &buf, const typename DAT::tdual_int_2d &list, @@ -201,7 +200,6 @@ struct AtomVecSpinKokkos_PackComm { _xprd(xprd),_yprd(yprd),_zprd(zprd), _xy(xy),_xz(xz),_yz(yz) { const size_t maxsend = (buf.view().extent(0)*buf.view().extent(1))/3; - // const size_t elements = 3; const size_t elements = 7; buffer_view(_buf,buf,maxsend,elements); _pbc[0] = pbc[0]; _pbc[1] = pbc[1]; _pbc[2] = pbc[2]; @@ -1270,16 +1268,10 @@ void AtomVecSpinKokkos::sync_overlapping_device(ExecutionSpace space, unsigned i perform_async_copy(atomKK->k_mask,space); if ((mask & IMAGE_MASK) && atomKK->k_image.need_sync()) perform_async_copy(atomKK->k_image,space); - // if ((mask & SP_MASK) && atomKK->k_sp.need_sync()) - // perform_async_copy(atomKK->k_sp,space); if ((mask & SP_MASK) && atomKK->k_sp.need_sync()) perform_async_copy(atomKK->k_sp,space); - // if ((mask & FM_MASK) && atomKK->k_sp.need_sync()) - // perform_async_copy(atomKK->k_fm,space); if ((mask & FM_MASK) && atomKK->k_sp.need_sync()) perform_async_copy(atomKK->k_fm,space); - // if ((mask & FML_MASK) && atomKK->k_fm_long.need_sync()) - // perform_async_copy(atomKK->k_fm_long,space); if ((mask & FML_MASK) && atomKK->k_fm_long.need_sync()) perform_async_copy(atomKK->k_fm_long,space); } else { @@ -1297,16 +1289,10 @@ void AtomVecSpinKokkos::sync_overlapping_device(ExecutionSpace space, unsigned i perform_async_copy(atomKK->k_mask,space); if ((mask & IMAGE_MASK) && atomKK->k_image.need_sync()) perform_async_copy(atomKK->k_image,space); - // if ((mask & SP_MASK) && atomKK->k_sp.need_sync()) - // perform_async_copy(atomKK->k_sp,space); if ((mask & SP_MASK) && atomKK->k_sp.need_sync()) perform_async_copy(atomKK->k_sp,space); - // if ((mask & FM_MASK) && atomKK->k_fm.need_sync()) - // perform_async_copy(atomKK->k_fm,space); if ((mask & FM_MASK) && atomKK->k_fm.need_sync()) perform_async_copy(atomKK->k_fm,space); - // if ((mask & FML_MASK) && atomKK->k_fm_long.need_sync()) - // perform_async_copy(atomKK->k_fm_long,space); if ((mask & FML_MASK) && atomKK->k_fm_long.need_sync()) perform_async_copy(atomKK->k_fm_long,space); } diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index b0fbdf1f9f..af5adeee73 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -773,17 +773,10 @@ typedef tdual_virial_array::t_dev_const_randomread t_virial_array_randomread; //3d SP_FLOAT array n*4 #ifdef LMP_KOKKOS_NO_LEGACY -// typedef Kokkos::DualView tdual_sp_array; typedef Kokkos::DualView tdual_float_1d_4; #else -// typedef Kokkos::DualView tdual_sp_array; typedef Kokkos::DualView tdual_float_1d_4; #endif -// typedef tdual_sp_array::t_dev t_sp_array; -// typedef tdual_sp_array::t_dev_const t_sp_array_const; -// typedef tdual_sp_array::t_dev_um t_sp_array_um; -// typedef tdual_sp_array::t_dev_const_um t_sp_array_const_um; -// typedef tdual_sp_array::t_dev_const_randomread t_sp_array_randomread; typedef tdual_float_1d_4::t_dev t_sp_array; typedef tdual_float_1d_4::t_dev_const t_sp_array_const; typedef tdual_float_1d_4::t_dev_um t_sp_array_um; @@ -792,12 +785,6 @@ typedef tdual_float_1d_4::t_dev_const_randomread t_sp_array_randomread; //3d FM_FLOAT array n*3 -// typedef Kokkos::DualView tdual_fm_array; -// typedef tdual_fm_array::t_dev t_fm_array; -// typedef tdual_fm_array::t_dev_const t_fm_array_const; -// typedef tdual_fm_array::t_dev_um t_fm_array_um; -// typedef tdual_fm_array::t_dev_const_um t_fm_array_const_um; -// typedef tdual_fm_array::t_dev_const_randomread t_fm_array_randomread; typedef tdual_f_array::t_dev t_fm_array; typedef tdual_f_array::t_dev_const t_fm_array_const; typedef tdual_f_array::t_dev_um t_fm_array_um; @@ -806,12 +793,6 @@ typedef tdual_f_array::t_dev_const_randomread t_fm_array_randomread; //3d FML_FLOAT array n*3 -// typedef Kokkos::DualView tdual_fm_long_array; -// typedef tdual_fm_long_array::t_dev t_fm_long_array; -// typedef tdual_fm_long_array::t_dev_const t_fm_long_array_const; -// typedef tdual_fm_long_array::t_dev_um t_fm_long_array_um; -// typedef tdual_fm_long_array::t_dev_const_um t_fm_long_array_const_um; -// typedef tdual_fm_long_array::t_dev_const_randomread t_fm_long_array_randomread; typedef tdual_f_array::t_dev t_fm_long_array; typedef tdual_f_array::t_dev_const t_fm_long_array_const; typedef tdual_f_array::t_dev_um t_fm_long_array_um; @@ -1057,12 +1038,6 @@ typedef tdual_virial_array::t_host_const_randomread t_virial_array_randomread; // Spin types //2d X_FLOAT array n*4 -// typedef Kokkos::DualView tdual_sp_array; -// typedef tdual_sp_array::t_host t_sp_array; -// typedef tdual_sp_array::t_host_const t_sp_array_const; -// typedef tdual_sp_array::t_host_um t_sp_array_um; -// typedef tdual_sp_array::t_host_const_um t_sp_array_const_um; -// typedef tdual_sp_array::t_host_const_randomread t_sp_array_randomread; typedef tdual_float_1d_4::t_host t_sp_array; typedef tdual_float_1d_4::t_host_const t_sp_array_const; typedef tdual_float_1d_4::t_host_um t_sp_array_um; @@ -1070,12 +1045,6 @@ typedef tdual_float_1d_4::t_host_const_um t_sp_array_const_um; typedef tdual_float_1d_4::t_host_const_randomread t_sp_array_randomread; //2d F_FLOAT array n*3 -// typedef Kokkos::DualView tdual_fm_array; -// typedef tdual_fm_array::t_host t_fm_array; -// typedef tdual_fm_array::t_host_const t_fm_array_const; -// typedef tdual_fm_array::t_host_um t_fm_array_um; -// typedef tdual_fm_array::t_host_const_um t_fm_array_const_um; -// typedef tdual_fm_array::t_host_const_randomread t_fm_array_randomread; typedef tdual_f_array::t_host t_fm_array; typedef tdual_f_array::t_host_const t_fm_array_const; typedef tdual_f_array::t_host_um t_fm_array_um; @@ -1083,12 +1052,6 @@ typedef tdual_f_array::t_host_const_um t_fm_array_const_um; typedef tdual_f_array::t_host_const_randomread t_fm_array_randomread; //2d F_FLOAT array n*3 -// typedef Kokkos::DualView tdual_fm_long_array; -// typedef tdual_fm_long_array::t_host t_fm_long_array; -// typedef tdual_fm_long_array::t_host_const t_fm_long_array_const; -// typedef tdual_fm_long_array::t_host_um t_fm_long_array_um; -// typedef tdual_fm_long_array::t_host_const_um t_fm_long_array_const_um; -// typedef tdual_fm_long_array::t_host_const_randomread t_fm_long_array_randomread; typedef tdual_f_array::t_host t_fm_long_array; typedef tdual_f_array::t_host_const t_fm_long_array_const; typedef tdual_f_array::t_host_um t_fm_long_array_um; From e906fae88ce7c7421858ec05a3dfa40678ea62e0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 16 Apr 2021 17:10:07 -0400 Subject: [PATCH 38/38] whitespace fixes --- src/KOKKOS/atom_vec_spin_kokkos.cpp | 24 ++++++++++++------------ src/KOKKOS/atom_vec_spin_kokkos.h | 2 +- src/KOKKOS/verlet_kokkos.cpp | 6 +++--- src/SPIN/fix_nve_spin.cpp | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/KOKKOS/atom_vec_spin_kokkos.cpp b/src/KOKKOS/atom_vec_spin_kokkos.cpp index e9bbeebe28..399ab23a5f 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.cpp +++ b/src/KOKKOS/atom_vec_spin_kokkos.cpp @@ -56,7 +56,7 @@ AtomVecSpinKokkos::AtomVecSpinKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) xcol_data = 4; atom->sp_flag = 1; - + k_count = DAT::tdual_int_1d("atom::k_count",1); atomKK = (AtomKokkos *) atom; commKK = (CommKokkos *) comm; @@ -84,13 +84,13 @@ void AtomVecSpinKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_type,atomKK->type,nmax,"atom:type"); memoryKK->grow_kokkos(atomKK->k_mask,atomKK->mask,nmax,"atom:mask"); memoryKK->grow_kokkos(atomKK->k_image,atomKK->image,nmax,"atom:image"); - + // allocating mech. quantities memoryKK->grow_kokkos(atomKK->k_x,atomKK->x,nmax,"atom:x"); memoryKK->grow_kokkos(atomKK->k_v,atomKK->v,nmax,"atom:v"); memoryKK->grow_kokkos(atomKK->k_f,atomKK->f,nmax,"atom:f"); - + // allocating mag. quantities memoryKK->grow_kokkos(atomKK->k_sp,atomKK->sp,nmax,"atom:sp"); @@ -134,11 +134,11 @@ void AtomVecSpinKokkos::grow_pointers() f = atomKK->f; d_f = atomKK->k_f.d_view; h_f = atomKK->k_f.h_view; - - sp = atomKK->sp; + + sp = atomKK->sp; d_sp = atomKK->k_sp.d_view; h_sp = atomKK->k_sp.h_view; - fm = atomKK->fm; + fm = atomKK->fm; d_fm = atomKK->k_fm.d_view; h_fm = atomKK->k_fm.h_view; fm_long = atomKK->fm_long; @@ -163,7 +163,7 @@ void AtomVecSpinKokkos::copy(int i, int j, int delflag) h_v(j,1) = h_v(i,1); h_v(j,2) = h_v(i,2); - h_sp(j,0) = h_sp(i,0); + h_sp(j,0) = h_sp(i,0); h_sp(j,1) = h_sp(i,1); h_sp(j,2) = h_sp(i,2); h_sp(j,3) = h_sp(i,3); @@ -186,7 +186,7 @@ struct AtomVecSpinKokkos_PackComm { const int _iswap; X_FLOAT _xprd,_yprd,_zprd,_xy,_xz,_yz; X_FLOAT _pbc[6]; - + AtomVecSpinKokkos_PackComm( const typename DAT::tdual_x_array &x, const typename DAT::tdual_float_1d_4 &sp, @@ -268,7 +268,7 @@ struct AtomVecSpinKokkos_PackBorder { _buf(buf),_list(list),_iswap(iswap), _x(x),_tag(tag),_type(type),_mask(mask),_sp(sp), _dx(dx),_dy(dy),_dz(dz) {} - + KOKKOS_INLINE_FUNCTION void operator() (const int& i) const { const int j = _list(_iswap,i); @@ -741,9 +741,9 @@ struct AtomVecSpinKokkos_PackExchangeFunctor { } } }; - + /* ---------------------------------------------------------------------- */ - + int AtomVecSpinKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2d &k_buf, DAT::tdual_int_1d k_sendlist, DAT::tdual_int_1d k_copylist, @@ -768,7 +768,7 @@ int AtomVecSpinKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2 } /* ---------------------------------------------------------------------- */ - + int AtomVecSpinKokkos::pack_exchange(int i, double *buf) { int m = 1; diff --git a/src/KOKKOS/atom_vec_spin_kokkos.h b/src/KOKKOS/atom_vec_spin_kokkos.h index 5dca7b4e13..bcb5ea3b45 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.h +++ b/src/KOKKOS/atom_vec_spin_kokkos.h @@ -51,7 +51,7 @@ class AtomVecSpinKokkos : public AtomVecKokkos { void write_data(FILE *, int, double **); int write_data_hybrid(FILE *, double *); double memory_usage(); - + // clear magnetic and mechanic forces void force_clear(int, size_t); diff --git a/src/KOKKOS/verlet_kokkos.cpp b/src/KOKKOS/verlet_kokkos.cpp index 27f4646366..254e269671 100644 --- a/src/KOKKOS/verlet_kokkos.cpp +++ b/src/KOKKOS/verlet_kokkos.cpp @@ -594,7 +594,7 @@ void VerletKokkos::force_clear() Kokkos::parallel_for(nall, Zero::t_f_array>(atomKK->k_torque.view())); atomKK->modified(Device,TORQUE_MASK); } - + // reset SPIN forces if (extraflag) { @@ -616,7 +616,7 @@ void VerletKokkos::force_clear() Kokkos::parallel_for(atomKK->nfirst, Zero::t_f_array>(atomKK->k_torque.view())); atomKK->modified(Device,TORQUE_MASK); } - + // reset SPIN forces if (extraflag) { @@ -635,7 +635,7 @@ void VerletKokkos::force_clear() Kokkos::parallel_for(range, Zero::t_f_array>(atomKK->k_torque.view())); atomKK->modified(Device,TORQUE_MASK); } - + // reset SPIN forces if (extraflag) { diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index faf9e5c1db..eb6d918ab0 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -524,7 +524,7 @@ void FixNVESpin::sectoring() sublo[dim]=sublotmp[dim]; subhi[dim]=subhitmp[dim]; } - } + } const double rsx = subhi[0] - sublo[0]; const double rsy = subhi[1] - sublo[1];

7dv&CM*whQ=^g=|{f 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 H&!7GqHwD-U literal 260274 zcmdSB2{e~)+cx@BDM_f5kSPr)QHab*DD#-1s3dddkg zFQZN(ZT75q&4C{v1Q32BoZ6xoXlxW=cr#_T`#s8udc0G z_*PX?ZRFg4m`8169UYyZ()Qi7N)$#KM;-0Oo2nIqPka>U$~$VLaWY@*@e4x*Cwq;J zZ`G%Q&Qtz8-WQw7wPiOgc|YgWQs2r#y)|Qh?1|FbF5PRNnJ!LPyl^q#?=#OTdNG&S zIP5@N6dqn?oCDN<|0LyIqx<%+KX*MRZTb6WL{MTk8UC!-JAL{!jpQ<$6J@35Gxu3t zQBlz%4cq`f`CUG|UNaPK=rK7p6(UN0nVW%uAzIWaOq85NI$=b<4?nZasUABJS4c(j zVwv;W`1h+7{Wjnw;&EB}fA`C@>REGa1|C~&%b`CDV$ z8BxcP15P5la&mKz96NT>Tr*YEz`!6lIJhNANrRJ)=H#C+9(@D1$+Kp8&CShsx9eFa zJ>5YfnVRDUq^71;mnL|1vZco9q`v_36~dLDo>ZbxQ&YQQ)_HZ!@q(tN!=L^SEaJDkeSEBX%P&!=85nqscNYz} zB&)eyLj>9KmYvWOU1C0 zkufqNg44QmF*i4NYG%fL-aI@%KR+vL0yiY;FqCcCnNwsx`0B>j;?p~8-zD%j4?AeB zKeh|9kw__$*tEu@ot>RNckk9kZ%FyrySD07#F59DnwrY$F&`Hb6H~sJWOC)o%ge9- zxvuGDp)=N1;AC%KS6?sYIMVv<^__u$7LuX>N2a#x_cuPijN3`1Zu)gg_*fY!Xpxqd zChO1W*pR-mIMXuh;J+_*IOyjMBO?x{pv^6Ru5TiFJ?Sg2f!%zpe0^t&5AD|yr!1Ah z($dnQp&{jH5nX-#0`oTW`QP7{X2(K~5i30DdCahU-;Nz|ZRXKYQSSp;J*R$t#3K9n z`kLqK2?-T&X(Z9@*>gVd{=Iv_EX^-2mGt-bdwG#EwbQlJx6rV-&HuiV+VJDugG7mq zo2i2IZjOC9n4f3X^4=!u$B!RXcWD&DsjT&!`ri9v#~g+lUw`@XrL*&tnAmdvhY&~Q z*+9wFnoplz6%sO4Lr(9Q%^Ljf$!} z`^uSf=k7h^S5I$qU!1-d7)V1!_4tI!GqKL!?m}Xw&!4e|;_}bR$Owywh@3j*j#&N45qG$PSmgjBRWn^V#$G&!VcYD*y1+rw? zSN{5CsiLAnPaj@bSg2ocBQY@%n|g%qe!fM=$P(;xEBl+ODh+k@`}gmkywT0+y;s7` zSx4vdyn!4HLENmxrm_+1bsFe}&`CP4s3>#5b8P z&P`a)b4p4|9zJ}yDs05vLFAIQc6)rF#K?~ykAi|!b#$C(f9ZO9dNMIR<&X;)T8a|3 zm8RISXV0M(J-Ek@xA#_8mh|=Yt-A|fuAVWzb`5ua%h`GPcNL9~j}IJ&Ma04ME;X|z zx7OGx|DXHIT3@_)VQXt!VBP!a!w20w(_q@GojJyTJ`Mfq%)Nd4_NPyuWceTU%sqOv zvub%}AqDq(&Uz7H#LCJFiMlA|9XLJ{PRmAM{40K zZ#J>Ng}==3V9mzI$6vjAb?Ve9^#__-=j7!Z=Ysd>GYi{D_5K(h9v&OB63z(>45Y