diff --git a/src/KOKKOS/angle_charmm_kokkos.cpp b/src/KOKKOS/angle_charmm_kokkos.cpp index dcd5d91e05..e2a605b802 100644 --- a/src/KOKKOS/angle_charmm_kokkos.cpp +++ b/src/KOKKOS/angle_charmm_kokkos.cpp @@ -70,18 +70,18 @@ void AngleCharmmKokkos::compute(int eflag_in, int vflag_in) // reallocate per-atom arrays if necessary if (eflag_atom) { - if(k_eatom.dimension_0()destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"improper:eatom"); - d_eatom = k_eatom.d_view; - } + d_eatom = k_eatom.template view(); + //} } if (vflag_atom) { - if(k_vatom.dimension_0()destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"improper:vatom"); - d_vatom = k_vatom.d_view; - } + d_vatom = k_vatom.template view(); + //} } x = atomKK->k_x.view(); diff --git a/src/KOKKOS/bond_fene_kokkos.cpp b/src/KOKKOS/bond_fene_kokkos.cpp index b8b0295182..b10469b45e 100644 --- a/src/KOKKOS/bond_fene_kokkos.cpp +++ b/src/KOKKOS/bond_fene_kokkos.cpp @@ -77,12 +77,12 @@ void BondFENEKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"bond:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"bond:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } k_k.template sync(); diff --git a/src/KOKKOS/bond_fene_kokkos.h b/src/KOKKOS/bond_fene_kokkos.h index ef37992925..c630abcafc 100644 --- a/src/KOKKOS/bond_fene_kokkos.h +++ b/src/KOKKOS/bond_fene_kokkos.h @@ -66,8 +66,8 @@ class BondFENEKokkos : public BondFENE { DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; DAT::tdual_int_scalar k_warning_flag; typename AT::t_int_scalar d_warning_flag; diff --git a/src/KOKKOS/bond_harmonic_kokkos.cpp b/src/KOKKOS/bond_harmonic_kokkos.cpp index 9b34786ec0..aead602747 100644 --- a/src/KOKKOS/bond_harmonic_kokkos.cpp +++ b/src/KOKKOS/bond_harmonic_kokkos.cpp @@ -67,18 +67,18 @@ void BondHarmonicKokkos::compute(int eflag_in, int vflag_in) // reallocate per-atom arrays if necessary if (eflag_atom) { - if(k_eatom.dimension_0()destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"improper:eatom"); - d_eatom = k_eatom.d_view; - } + d_eatom = k_eatom.template view(); + //} } if (vflag_atom) { - if(k_vatom.dimension_0()destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"improper:vatom"); - d_vatom = k_vatom.d_view; - } + d_vatom = k_vatom.template view(); + //} } // if (eflag || vflag) atomKK->modified(execution_space,datamask_modify); diff --git a/src/KOKKOS/dihedral_charmm_kokkos.cpp b/src/KOKKOS/dihedral_charmm_kokkos.cpp index b0dd1a2172..0af9fc4e83 100644 --- a/src/KOKKOS/dihedral_charmm_kokkos.cpp +++ b/src/KOKKOS/dihedral_charmm_kokkos.cpp @@ -80,22 +80,22 @@ void DihedralCharmmKokkos::compute(int eflag_in, int vflag_in) // reallocate per-atom arrays if necessary if (eflag_atom) { - if(k_eatom.dimension_0()destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"dihedral:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.template view(); k_eatom_pair = Kokkos::DualView("dihedral:eatom_pair",maxeatom); - d_eatom_pair = k_eatom.d_view; - } + d_eatom_pair = k_eatom.template view(); + //} } if (vflag_atom) { - if(k_vatom.dimension_0()destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"dihedral:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.template view(); k_vatom_pair = Kokkos::DualView("dihedral:vatom_pair",maxvatom); - d_vatom_pair = k_vatom.d_view; - } + d_vatom_pair = k_vatom.template view(); + //} } x = atomKK->k_x.view(); diff --git a/src/KOKKOS/dihedral_opls_kokkos.cpp b/src/KOKKOS/dihedral_opls_kokkos.cpp index ed4a5b259c..5406a6daaf 100644 --- a/src/KOKKOS/dihedral_opls_kokkos.cpp +++ b/src/KOKKOS/dihedral_opls_kokkos.cpp @@ -77,12 +77,12 @@ void DihedralOPLSKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"dihedral:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"dihedral:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } k_k1.template sync(); diff --git a/src/KOKKOS/dihedral_opls_kokkos.h b/src/KOKKOS/dihedral_opls_kokkos.h index 5bf2552d9b..0a8860c87c 100644 --- a/src/KOKKOS/dihedral_opls_kokkos.h +++ b/src/KOKKOS/dihedral_opls_kokkos.h @@ -68,8 +68,8 @@ class DihedralOPLSKokkos : public DihedralOPLS { DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; int nlocal,newton_bond; int eflag,vflag; diff --git a/src/KOKKOS/improper_harmonic_kokkos.cpp b/src/KOKKOS/improper_harmonic_kokkos.cpp index 34d3d437d6..cde7d60e8e 100644 --- a/src/KOKKOS/improper_harmonic_kokkos.cpp +++ b/src/KOKKOS/improper_harmonic_kokkos.cpp @@ -77,18 +77,18 @@ void ImproperHarmonicKokkos::compute(int eflag_in, int vflag_in) // reallocate per-atom arrays if necessary if (eflag_atom) { - if(k_eatom.dimension_0()destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"improper:eatom"); - d_eatom = k_eatom.d_view; - } + d_eatom = k_eatom.template view(); + //} } if (vflag_atom) { - if(k_vatom.dimension_0()destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"improper:vatom"); - d_vatom = k_vatom.d_view; - } + d_vatom = k_vatom.template view(); + //} } //atomKK->sync(execution_space,datamask_read); diff --git a/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp b/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp index a176ca2be4..afe2d14fcc 100644 --- a/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp @@ -154,7 +154,7 @@ void PairBuckCoulCutKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) virial_fdotr_compute(); + if (vflag_fdotr) pair_virial_fdotr_compute(this); if (eflag_atom) { k_eatom.template modify(); diff --git a/src/KOKKOS/pair_buck_coul_cut_kokkos.h b/src/KOKKOS/pair_buck_coul_cut_kokkos.h index 0b6aba5e92..d026da458f 100644 --- a/src/KOKKOS/pair_buck_coul_cut_kokkos.h +++ b/src/KOKKOS/pair_buck_coul_cut_kokkos.h @@ -34,6 +34,7 @@ class PairBuckCoulCutKokkos : public PairBuckCoulCut { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairBuckCoulCutKokkos(class LAMMPS *); ~PairBuckCoulCutKokkos(); @@ -83,25 +84,25 @@ class PairBuckCoulCutKokkos : public PairBuckCoulCut { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; int neighflag; @@ -123,6 +124,7 @@ class PairBuckCoulCutKokkos : public PairBuckCoulCut { friend EV_FLOAT pair_compute_neighlist(PairBuckCoulCutKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairBuckCoulCutKokkos*, NeighListKokkos*); + friend void pair_virial_fdotr_compute(PairBuckCoulCutKokkos*); }; diff --git a/src/KOKKOS/pair_buck_coul_long_kokkos.cpp b/src/KOKKOS/pair_buck_coul_long_kokkos.cpp index 413f38370d..fa05c99995 100644 --- a/src/KOKKOS/pair_buck_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_buck_coul_long_kokkos.cpp @@ -114,6 +114,19 @@ void PairBuckCoulLongKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); diff --git a/src/KOKKOS/pair_buck_coul_long_kokkos.h b/src/KOKKOS/pair_buck_coul_long_kokkos.h index fe63a2c124..f48258c2e5 100644 --- a/src/KOKKOS/pair_buck_coul_long_kokkos.h +++ b/src/KOKKOS/pair_buck_coul_long_kokkos.h @@ -34,6 +34,7 @@ class PairBuckCoulLongKokkos : public PairBuckCoulLong { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairBuckCoulLongKokkos(class LAMMPS *); ~PairBuckCoulLongKokkos(); @@ -84,27 +85,27 @@ class PairBuckCoulLongKokkos : public PairBuckCoulLong { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; - typename ArrayTypes::t_ffloat_1d_randomread + typename AT::t_ffloat_1d_randomread d_rtable, d_drtable, d_ftable, d_dftable, d_ctable, d_dctable, d_etable, d_detable; diff --git a/src/KOKKOS/pair_buck_kokkos.h b/src/KOKKOS/pair_buck_kokkos.h index 0b0bbf94cf..d57e320e99 100644 --- a/src/KOKKOS/pair_buck_kokkos.h +++ b/src/KOKKOS/pair_buck_kokkos.h @@ -34,6 +34,7 @@ class PairBuckKokkos : public PairBuck { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; enum {COUL_FLAG=0}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairBuckKokkos(class LAMMPS *); ~PairBuckKokkos(); @@ -72,22 +73,22 @@ class PairBuckKokkos : public PairBuck { typename Kokkos::DualView::t_dev_const_um params; params_buck m_params[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; // hardwired to space for 12 atom types F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_tagint_1d tag; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_tagint_1d tag; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; double special_lj[4]; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; int neighflag; diff --git a/src/KOKKOS/pair_coul_cut_kokkos.cpp b/src/KOKKOS/pair_coul_cut_kokkos.cpp index 19d4306317..a770d55be9 100644 --- a/src/KOKKOS/pair_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_coul_cut_kokkos.cpp @@ -83,6 +83,19 @@ void PairCoulCutKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); @@ -124,6 +137,16 @@ void PairCoulCutKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); } diff --git a/src/KOKKOS/pair_coul_cut_kokkos.h b/src/KOKKOS/pair_coul_cut_kokkos.h index 2049385c3f..78d0b192f8 100644 --- a/src/KOKKOS/pair_coul_cut_kokkos.h +++ b/src/KOKKOS/pair_coul_cut_kokkos.h @@ -34,6 +34,7 @@ class PairCoulCutKokkos : public PairCoulCut { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairCoulCutKokkos(class LAMMPS *); ~PairCoulCutKokkos(); @@ -87,22 +88,25 @@ class PairCoulCutKokkos : public PairCoulCut { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_float_1d_randomread q; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_float_1d_randomread q; + typename AT::t_int_1d_randomread type; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; int neighflag; diff --git a/src/KOKKOS/pair_coul_debye_kokkos.cpp b/src/KOKKOS/pair_coul_debye_kokkos.cpp index 9a6e1b8020..e9314c2a0a 100644 --- a/src/KOKKOS/pair_coul_debye_kokkos.cpp +++ b/src/KOKKOS/pair_coul_debye_kokkos.cpp @@ -90,6 +90,19 @@ void PairCoulDebyeKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); @@ -136,7 +149,17 @@ void PairCoulDebyeKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) virial_fdotr_compute(); + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; } diff --git a/src/KOKKOS/pair_coul_debye_kokkos.h b/src/KOKKOS/pair_coul_debye_kokkos.h index 4aadcbe4e1..b6e87b55f7 100644 --- a/src/KOKKOS/pair_coul_debye_kokkos.h +++ b/src/KOKKOS/pair_coul_debye_kokkos.h @@ -34,6 +34,7 @@ class PairCoulDebyeKokkos : public PairCoulDebye { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairCoulDebyeKokkos(class LAMMPS *); ~PairCoulDebyeKokkos(); @@ -87,22 +88,25 @@ class PairCoulDebyeKokkos : public PairCoulDebye { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; int neighflag; @@ -124,6 +128,7 @@ class PairCoulDebyeKokkos : public PairCoulDebye { friend EV_FLOAT pair_compute_neighlist(PairCoulDebyeKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairCoulDebyeKokkos*, NeighListKokkos*); + friend void pair_virial_fdotr_compute(PairCoulDebyeKokkos*); }; diff --git a/src/KOKKOS/pair_coul_dsf_kokkos.cpp b/src/KOKKOS/pair_coul_dsf_kokkos.cpp index e689754d0a..948a234a4a 100644 --- a/src/KOKKOS/pair_coul_dsf_kokkos.cpp +++ b/src/KOKKOS/pair_coul_dsf_kokkos.cpp @@ -88,12 +88,12 @@ void PairCoulDSFKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } atomKK->sync(execution_space,datamask_read); @@ -183,8 +183,6 @@ void PairCoulDSFKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -195,6 +193,8 @@ void PairCoulDSFKokkos::compute(int eflag_in, int vflag_in) k_vatom.template sync(); } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + copymode = 0; } diff --git a/src/KOKKOS/pair_coul_dsf_kokkos.h b/src/KOKKOS/pair_coul_dsf_kokkos.h index e50f92c370..49b1806e3c 100644 --- a/src/KOKKOS/pair_coul_dsf_kokkos.h +++ b/src/KOKKOS/pair_coul_dsf_kokkos.h @@ -37,6 +37,7 @@ class PairCoulDSFKokkos : public PairCoulDSF { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; typedef EV_FLOAT value_type; PairCoulDSFKokkos(class LAMMPS *); ~PairCoulDSFKokkos(); @@ -61,16 +62,16 @@ class PairCoulDSFKokkos : public PairCoulDSF { KOKKOS_INLINE_FUNCTION int sbmask(const int& j) const; - protected: + typename AT::t_x_array_randomread x; + typename AT::t_f_array f; + typename AT::t_float_1d_randomread q; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_float_1d_randomread q; + protected: DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int neighflag,newton_pair; @@ -79,9 +80,9 @@ class PairCoulDSFKokkos : public PairCoulDSF { double special_coul[4]; double qqrd2e; - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename ArrayTypes::t_int_1d_randomread d_ilist; - typename ArrayTypes::t_int_1d_randomread d_numneigh; + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; //NeighListKokkos k_list; friend void pair_virial_fdotr_compute(PairCoulDSFKokkos*); diff --git a/src/KOKKOS/pair_coul_long_kokkos.cpp b/src/KOKKOS/pair_coul_long_kokkos.cpp index 7536549bf4..dcf4943104 100644 --- a/src/KOKKOS/pair_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_coul_long_kokkos.cpp @@ -107,6 +107,19 @@ void PairCoulLongKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_coulsq.template sync(); @@ -158,6 +171,16 @@ void PairCoulLongKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; diff --git a/src/KOKKOS/pair_coul_long_kokkos.h b/src/KOKKOS/pair_coul_long_kokkos.h index 92d08ddaba..2ce7535233 100644 --- a/src/KOKKOS/pair_coul_long_kokkos.h +++ b/src/KOKKOS/pair_coul_long_kokkos.h @@ -34,6 +34,7 @@ class PairCoulLongKokkos : public PairCoulLong { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairCoulLongKokkos(class LAMMPS *); ~PairCoulLongKokkos(); @@ -88,27 +89,27 @@ class PairCoulLongKokkos : public PairCoulLong { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; - typename ArrayTypes::t_ffloat_1d_randomread + typename AT::t_ffloat_1d_randomread d_rtable, d_drtable, d_ftable, d_dftable, d_ctable, d_dctable, d_etable, d_detable; diff --git a/src/KOKKOS/pair_coul_wolf_kokkos.cpp b/src/KOKKOS/pair_coul_wolf_kokkos.cpp index 1785ba2731..55b19958a3 100644 --- a/src/KOKKOS/pair_coul_wolf_kokkos.cpp +++ b/src/KOKKOS/pair_coul_wolf_kokkos.cpp @@ -83,12 +83,12 @@ void PairCoulWolfKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } atomKK->sync(execution_space,datamask_read); @@ -184,8 +184,6 @@ void PairCoulWolfKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -196,6 +194,8 @@ void PairCoulWolfKokkos::compute(int eflag_in, int vflag_in) k_vatom.template sync(); } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + copymode = 0; } diff --git a/src/KOKKOS/pair_coul_wolf_kokkos.h b/src/KOKKOS/pair_coul_wolf_kokkos.h index bde26c0c3e..f6da745de3 100644 --- a/src/KOKKOS/pair_coul_wolf_kokkos.h +++ b/src/KOKKOS/pair_coul_wolf_kokkos.h @@ -37,6 +37,7 @@ class PairCoulWolfKokkos : public PairCoulWolf { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; typedef EV_FLOAT value_type; PairCoulWolfKokkos(class LAMMPS *); ~PairCoulWolfKokkos(); @@ -63,14 +64,14 @@ class PairCoulWolfKokkos : public PairCoulWolf { protected: - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_float_1d_randomread q; + typename AT::t_x_array_randomread x; + typename AT::t_f_array f; + typename AT::t_float_1d_randomread q; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; int neighflag,newton_pair; @@ -81,9 +82,9 @@ class PairCoulWolfKokkos : public PairCoulWolf { double special_coul[4]; double qqrd2e; - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename ArrayTypes::t_int_1d_randomread d_ilist; - typename ArrayTypes::t_int_1d_randomread d_numneigh; + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; //NeighListKokkos k_list; friend void pair_virial_fdotr_compute(PairCoulWolfKokkos*); diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.cpp b/src/KOKKOS/pair_eam_alloy_kokkos.cpp index f3b7c36106..491ec10f66 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.cpp +++ b/src/KOKKOS/pair_eam_alloy_kokkos.cpp @@ -82,12 +82,12 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } atomKK->sync(execution_space,datamask_read); @@ -246,8 +246,6 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -258,6 +256,8 @@ void PairEAMAlloyKokkos::compute(int eflag_in, int vflag_in) k_vatom.template sync(); } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + copymode = 0; } diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.h b/src/KOKKOS/pair_eam_alloy_kokkos.h index 391349d9cb..d8c745b230 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.h +++ b/src/KOKKOS/pair_eam_alloy_kokkos.h @@ -125,8 +125,8 @@ class PairEAMAlloyKokkos : public PairEAM { DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; DAT::tdual_ffloat_1d k_rho; DAT::tdual_ffloat_1d k_fp; @@ -154,9 +154,9 @@ class PairEAMAlloyKokkos : public PairEAM { void interpolate(int, double, double *, t_host_ffloat_2d_n7, int); void read_file(char *); - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename ArrayTypes::t_int_1d_randomread d_ilist; - typename ArrayTypes::t_int_1d_randomread d_numneigh; + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; //NeighListKokkos k_list; int iswap; diff --git a/src/KOKKOS/pair_eam_fs_kokkos.cpp b/src/KOKKOS/pair_eam_fs_kokkos.cpp index ba450b0872..006db6abc2 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.cpp +++ b/src/KOKKOS/pair_eam_fs_kokkos.cpp @@ -82,12 +82,12 @@ void PairEAMFSKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } atomKK->sync(execution_space,datamask_read); diff --git a/src/KOKKOS/pair_eam_fs_kokkos.h b/src/KOKKOS/pair_eam_fs_kokkos.h index c3b0f32457..40375af066 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.h +++ b/src/KOKKOS/pair_eam_fs_kokkos.h @@ -125,8 +125,8 @@ class PairEAMFSKokkos : public PairEAM { DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; DAT::tdual_ffloat_1d k_rho; DAT::tdual_ffloat_1d k_fp; @@ -154,9 +154,9 @@ class PairEAMFSKokkos : public PairEAM { void interpolate(int, double, double *, t_host_ffloat_2d_n7, int); void read_file(char *); - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename ArrayTypes::t_int_1d_randomread d_ilist; - typename ArrayTypes::t_int_1d_randomread d_numneigh; + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; //NeighListKokkos k_list; int iswap; diff --git a/src/KOKKOS/pair_eam_kokkos.cpp b/src/KOKKOS/pair_eam_kokkos.cpp index 3d8223ed66..656dd11c62 100644 --- a/src/KOKKOS/pair_eam_kokkos.cpp +++ b/src/KOKKOS/pair_eam_kokkos.cpp @@ -77,12 +77,12 @@ void PairEAMKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } atomKK->sync(execution_space,datamask_read); diff --git a/src/KOKKOS/pair_eam_kokkos.h b/src/KOKKOS/pair_eam_kokkos.h index f933a4a0d7..229b16471d 100644 --- a/src/KOKKOS/pair_eam_kokkos.h +++ b/src/KOKKOS/pair_eam_kokkos.h @@ -122,8 +122,8 @@ class PairEAMKokkos : public PairEAM { DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; DAT::tdual_ffloat_1d k_rho; DAT::tdual_ffloat_1d k_fp; @@ -149,9 +149,9 @@ class PairEAMKokkos : public PairEAM { virtual void file2array(); void array2spline(); - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename ArrayTypes::t_int_1d_randomread d_ilist; - typename ArrayTypes::t_int_1d_randomread d_numneigh; + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; //NeighListKokkos k_list; int iswap; diff --git a/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp index 1cf2dfe054..a4e0fa963d 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp @@ -115,6 +115,19 @@ void PairLJCharmmCoulCharmmImplicitKokkos::compute(int eflag_in, int if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); @@ -167,6 +180,16 @@ void PairLJCharmmCoulCharmmImplicitKokkos::compute(int eflag_in, int virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; diff --git a/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.h b/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.h index 048a7dab60..9405092716 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.h +++ b/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.h @@ -34,6 +34,7 @@ class PairLJCharmmCoulCharmmImplicitKokkos : public PairLJCharmmCoulCharmmImplic enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJCharmmCoulCharmmImplicitKokkos(class LAMMPS *); ~PairLJCharmmCoulCharmmImplicitKokkos(); @@ -77,27 +78,27 @@ class PairLJCharmmCoulCharmmImplicitKokkos : public PairLJCharmmCoulCharmmImplic F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; - typename ArrayTypes::t_ffloat_1d_randomread + typename AT::t_ffloat_1d_randomread d_rtable, d_drtable, d_ftable, d_dftable, d_ctable, d_dctable, d_etable, d_detable; diff --git a/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp index a4d0316ca7..1e5509c39c 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp @@ -115,6 +115,19 @@ void PairLJCharmmCoulCharmmKokkos::compute(int eflag_in, int vflag_i if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); @@ -167,6 +180,16 @@ void PairLJCharmmCoulCharmmKokkos::compute(int eflag_in, int vflag_i virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; diff --git a/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.h b/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.h index db0b14a84e..4e00040fd9 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.h +++ b/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.h @@ -34,6 +34,7 @@ class PairLJCharmmCoulCharmmKokkos : public PairLJCharmmCoulCharmm { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJCharmmCoulCharmmKokkos(class LAMMPS *); ~PairLJCharmmCoulCharmmKokkos(); @@ -77,27 +78,27 @@ class PairLJCharmmCoulCharmmKokkos : public PairLJCharmmCoulCharmm { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; - typename ArrayTypes::t_ffloat_1d_randomread + typename AT::t_ffloat_1d_randomread d_rtable, d_drtable, d_ftable, d_dftable, d_ctable, d_dctable, d_etable, d_detable; diff --git a/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp index 5b1176278a..2f94c47bae 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp @@ -180,8 +180,6 @@ void PairLJCharmmCoulLongKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -192,6 +190,8 @@ void PairLJCharmmCoulLongKokkos::compute(int eflag_in, int vflag_in) k_vatom.template sync(); } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + copymode = 0; } diff --git a/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.h b/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.h index 0969d11b0e..b030783401 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.h +++ b/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.h @@ -34,6 +34,7 @@ class PairLJCharmmCoulLongKokkos : public PairLJCharmmCoulLong { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJCharmmCoulLongKokkos(class LAMMPS *); ~PairLJCharmmCoulLongKokkos(); @@ -75,27 +76,27 @@ class PairLJCharmmCoulLongKokkos : public PairLJCharmmCoulLong { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; - typename ArrayTypes::t_ffloat_1d_randomread + typename AT::t_ffloat_1d_randomread d_rtable, d_drtable, d_ftable, d_dftable, d_ctable, d_dctable, d_etable, d_detable; diff --git a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp index 0e33958a22..4283cfa981 100644 --- a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp @@ -92,6 +92,19 @@ void PairLJClass2CoulCutKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); @@ -138,7 +151,17 @@ void PairLJClass2CoulCutKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) virial_fdotr_compute(); + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; } diff --git a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.h b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.h index c3492666de..991d7c9626 100644 --- a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.h +++ b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.h @@ -34,6 +34,7 @@ class PairLJClass2CoulCutKokkos : public PairLJClass2CoulCut { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJClass2CoulCutKokkos(class LAMMPS *); ~PairLJClass2CoulCutKokkos(); @@ -76,22 +77,25 @@ class PairLJClass2CoulCutKokkos : public PairLJClass2CoulCut { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; int neighflag; int nlocal,nall,eflag,vflag; @@ -112,6 +116,7 @@ class PairLJClass2CoulCutKokkos : public PairLJClass2CoulCut { friend EV_FLOAT pair_compute_neighlist(PairLJClass2CoulCutKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairLJClass2CoulCutKokkos*, NeighListKokkos*); + friend void pair_virial_fdotr_compute(PairLJClass2CoulCutKokkos*); }; diff --git a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp index 00becd0ec6..adbffff50f 100644 --- a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp @@ -100,6 +100,19 @@ void PairLJClass2CoulLongKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); @@ -152,6 +165,16 @@ void PairLJClass2CoulLongKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; diff --git a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.h b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.h index c5c46ed2d5..8a2e993353 100644 --- a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.h +++ b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.h @@ -34,6 +34,7 @@ class PairLJClass2CoulLongKokkos : public PairLJClass2CoulLong { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJClass2CoulLongKokkos(class LAMMPS *); ~PairLJClass2CoulLongKokkos(); @@ -76,24 +77,27 @@ class PairLJClass2CoulLongKokkos : public PairLJClass2CoulLong { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; - typename ArrayTypes::t_ffloat_1d_randomread + typename AT::t_ffloat_1d_randomread d_rtable, d_drtable, d_ftable, d_dftable, d_ctable, d_dctable, d_etable, d_detable; diff --git a/src/KOKKOS/pair_lj_class2_kokkos.cpp b/src/KOKKOS/pair_lj_class2_kokkos.cpp index 9f9e3c72a5..c26aa4f467 100644 --- a/src/KOKKOS/pair_lj_class2_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_kokkos.cpp @@ -92,6 +92,19 @@ void PairLJClass2Kokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_params.template sync(); @@ -125,7 +138,18 @@ void PairLJClass2Kokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + } template diff --git a/src/KOKKOS/pair_lj_class2_kokkos.h b/src/KOKKOS/pair_lj_class2_kokkos.h index ccff6821f3..ae0676c8a5 100644 --- a/src/KOKKOS/pair_lj_class2_kokkos.h +++ b/src/KOKKOS/pair_lj_class2_kokkos.h @@ -34,6 +34,7 @@ class PairLJClass2Kokkos : public PairLJClass2 { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; enum {COUL_FLAG=0}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJClass2Kokkos(class LAMMPS *); ~PairLJClass2Kokkos(); @@ -79,19 +80,22 @@ class PairLJClass2Kokkos : public PairLJClass2 { typename Kokkos::DualView::t_dev_const_um params; params_lj m_params[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; // hardwired to space for 12 atom types F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; - typename ArrayTypes::t_tagint_1d tag; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_tagint_1d tag; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; double special_lj[4]; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; int neighflag; int nlocal,nall,eflag,vflag; diff --git a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp index f1a7950521..e9f587d0cc 100644 --- a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp @@ -92,6 +92,19 @@ void PairLJCutCoulCutKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); @@ -136,7 +149,18 @@ void PairLJCutCoulCutKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) virial_fdotr_compute(); + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + + if (vflag_fdotr) pair_virial_fdotr_compute(this); + } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.h b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.h index 5891371d14..4dd9379821 100644 --- a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.h +++ b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.h @@ -34,6 +34,7 @@ class PairLJCutCoulCutKokkos : public PairLJCutCoulCut { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJCutCoulCutKokkos(class LAMMPS *); ~PairLJCutCoulCutKokkos(); @@ -75,22 +76,25 @@ class PairLJCutCoulCutKokkos : public PairLJCutCoulCut { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; int neighflag; @@ -112,6 +116,7 @@ class PairLJCutCoulCutKokkos : public PairLJCutCoulCut { friend EV_FLOAT pair_compute_neighlist(PairLJCutCoulCutKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairLJCutCoulCutKokkos*, NeighListKokkos*); + friend void pair_virial_fdotr_compute(PairLJCutCoulCutKokkos*); }; diff --git a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp index 3eb793c52a..0af781affd 100644 --- a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp @@ -96,6 +96,19 @@ void PairLJCutCoulDebyeKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); @@ -142,7 +155,17 @@ void PairLJCutCoulDebyeKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) virial_fdotr_compute(); + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; } diff --git a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.h b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.h index d507f76a3a..315969bc62 100644 --- a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.h +++ b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.h @@ -34,6 +34,7 @@ class PairLJCutCoulDebyeKokkos : public PairLJCutCoulDebye { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJCutCoulDebyeKokkos(class LAMMPS *); ~PairLJCutCoulDebyeKokkos(); @@ -75,22 +76,25 @@ class PairLJCutCoulDebyeKokkos : public PairLJCutCoulDebye { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; int neighflag; @@ -112,6 +116,7 @@ class PairLJCutCoulDebyeKokkos : public PairLJCutCoulDebye { friend EV_FLOAT pair_compute_neighlist(PairLJCutCoulDebyeKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairLJCutCoulDebyeKokkos*, NeighListKokkos*); + friend void pair_virial_fdotr_compute(PairLJCutCoulDebyeKokkos*); }; diff --git a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp index 6507bb0272..5ddf035b62 100644 --- a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp @@ -104,6 +104,19 @@ void PairLJCutCoulDSFKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); @@ -160,7 +173,17 @@ void PairLJCutCoulDSFKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) virial_fdotr_compute(); + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; } diff --git a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.h b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.h index 3e378757c0..558d40e174 100644 --- a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.h +++ b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.h @@ -34,6 +34,7 @@ class PairLJCutCoulDSFKokkos : public PairLJCutCoulDSF { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJCutCoulDSFKokkos(class LAMMPS *); ~PairLJCutCoulDSFKokkos(); @@ -74,22 +75,25 @@ class PairLJCutCoulDSFKokkos : public PairLJCutCoulDSF { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; int neighflag; @@ -111,6 +115,7 @@ class PairLJCutCoulDSFKokkos : public PairLJCutCoulDSF { friend EV_FLOAT pair_compute_neighlist(PairLJCutCoulDSFKokkos*,NeighListKokkos*); friend EV_FLOAT pair_compute(PairLJCutCoulDSFKokkos*, NeighListKokkos*); + friend void pair_virial_fdotr_compute(PairLJCutCoulDSFKokkos*); }; diff --git a/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp index 11095bf4de..e3754cdb5d 100644 --- a/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp @@ -168,8 +168,6 @@ void PairLJCutCoulLongKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -179,6 +177,9 @@ void PairLJCutCoulLongKokkos::compute(int eflag_in, int vflag_in) k_vatom.template modify(); k_vatom.template sync(); } + + if (vflag_fdotr) pair_virial_fdotr_compute(this); + } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/pair_lj_cut_coul_long_kokkos.h b/src/KOKKOS/pair_lj_cut_coul_long_kokkos.h index 7328329232..79e77a7508 100644 --- a/src/KOKKOS/pair_lj_cut_coul_long_kokkos.h +++ b/src/KOKKOS/pair_lj_cut_coul_long_kokkos.h @@ -34,6 +34,7 @@ class PairLJCutCoulLongKokkos : public PairLJCutCoulLong { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJCutCoulLongKokkos(class LAMMPS *); ~PairLJCutCoulLongKokkos(); @@ -76,27 +77,27 @@ class PairLJCutCoulLongKokkos : public PairLJCutCoulLong { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; - typename ArrayTypes::t_ffloat_1d_randomread + typename AT::t_ffloat_1d_randomread d_rtable, d_drtable, d_ftable, d_dftable, d_ctable, d_dctable, d_etable, d_detable; diff --git a/src/KOKKOS/pair_lj_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_kokkos.cpp index 066961cc89..9a2a7e23a9 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_kokkos.cpp @@ -138,8 +138,6 @@ void PairLJCutKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -149,6 +147,9 @@ void PairLJCutKokkos::compute(int eflag_in, int vflag_in) k_vatom.template modify(); k_vatom.template sync(); } + + if (vflag_fdotr) pair_virial_fdotr_compute(this); + } template diff --git a/src/KOKKOS/pair_lj_cut_kokkos.h b/src/KOKKOS/pair_lj_cut_kokkos.h index 81c25c20d8..7e2b8fd91a 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.h +++ b/src/KOKKOS/pair_lj_cut_kokkos.h @@ -34,6 +34,7 @@ class PairLJCutKokkos : public PairLJCut { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; enum {COUL_FLAG=0}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJCutKokkos(class LAMMPS *); ~PairLJCutKokkos(); @@ -73,22 +74,22 @@ class PairLJCutKokkos : public PairLJCut { typename Kokkos::DualView::t_dev_const_um params; params_lj m_params[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; // hardwired to space for 12 atom types F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; - typename ArrayTypes::t_tagint_1d tag; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; + typename AT::t_tagint_1d tag; int newton_pair; double special_lj[4]; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; int neighflag; diff --git a/src/KOKKOS/pair_lj_expand_kokkos.cpp b/src/KOKKOS/pair_lj_expand_kokkos.cpp index d7daef2a66..cdede8bd52 100644 --- a/src/KOKKOS/pair_lj_expand_kokkos.cpp +++ b/src/KOKKOS/pair_lj_expand_kokkos.cpp @@ -91,6 +91,19 @@ void PairLJExpandKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_params.template sync(); @@ -126,6 +139,16 @@ void PairLJExpandKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; diff --git a/src/KOKKOS/pair_lj_expand_kokkos.h b/src/KOKKOS/pair_lj_expand_kokkos.h index ee110bab80..093031f7d7 100644 --- a/src/KOKKOS/pair_lj_expand_kokkos.h +++ b/src/KOKKOS/pair_lj_expand_kokkos.h @@ -34,6 +34,7 @@ class PairLJExpandKokkos : public PairLJExpand { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; enum {COUL_FLAG=0}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJExpandKokkos(class LAMMPS *); ~PairLJExpandKokkos(); @@ -79,19 +80,22 @@ class PairLJExpandKokkos : public PairLJExpand { typename Kokkos::DualView::t_dev_const_um params; params_lj m_params[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; // hardwired to space for 12 atom types F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; - typename ArrayTypes::t_tagint_1d tag; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_tagint_1d tag; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; double special_lj[4]; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; int neighflag; diff --git a/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp b/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp index b636f36499..0ca8375657 100644 --- a/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp +++ b/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp @@ -106,6 +106,19 @@ void PairLJGromacsCoulGromacsKokkos::compute(int eflag_in, int vflag if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_ljsq.template sync(); @@ -158,6 +171,16 @@ void PairLJGromacsCoulGromacsKokkos::compute(int eflag_in, int vflag virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; diff --git a/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.h b/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.h index bbf5c50a62..51fc0b71b7 100644 --- a/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.h +++ b/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.h @@ -34,6 +34,7 @@ class PairLJGromacsCoulGromacsKokkos : public PairLJGromacsCoulGromacs { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=1}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJGromacsCoulGromacsKokkos(class LAMMPS *); ~PairLJGromacsCoulGromacsKokkos(); @@ -84,27 +85,27 @@ class PairLJGromacsCoulGromacsKokkos : public PairLJGromacsCoulGromacs { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_ljsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_coulsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_ljsq; - typename ArrayTypes::t_ffloat_2d d_cut_ljsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_coulsq; - typename ArrayTypes::t_ffloat_2d d_cut_coulsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_ljsq; + typename AT::t_ffloat_2d d_cut_ljsq; + typename AT::tdual_ffloat_2d k_cut_coulsq; + typename AT::t_ffloat_2d d_cut_coulsq; - typename ArrayTypes::t_ffloat_1d_randomread + typename AT::t_ffloat_1d_randomread d_rtable, d_drtable, d_ftable, d_dftable, d_ctable, d_dctable, d_etable, d_detable; diff --git a/src/KOKKOS/pair_lj_gromacs_kokkos.cpp b/src/KOKKOS/pair_lj_gromacs_kokkos.cpp index a72fb7dbf9..e6606d30cf 100644 --- a/src/KOKKOS/pair_lj_gromacs_kokkos.cpp +++ b/src/KOKKOS/pair_lj_gromacs_kokkos.cpp @@ -103,6 +103,19 @@ void PairLJGromacsKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_cut_inner.template sync(); @@ -145,6 +158,16 @@ void PairLJGromacsKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); copymode = 0; diff --git a/src/KOKKOS/pair_lj_gromacs_kokkos.h b/src/KOKKOS/pair_lj_gromacs_kokkos.h index 1f16409dc5..c8c792038d 100644 --- a/src/KOKKOS/pair_lj_gromacs_kokkos.h +++ b/src/KOKKOS/pair_lj_gromacs_kokkos.h @@ -34,6 +34,7 @@ class PairLJGromacsKokkos : public PairLJGromacs { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF}; enum {COUL_FLAG=0}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJGromacsKokkos(class LAMMPS *); ~PairLJGromacsKokkos(); @@ -87,27 +88,27 @@ class PairLJGromacsKokkos : public PairLJGromacs { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_inner[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; F_FLOAT m_cut_inner_sq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_float_1d_randomread q; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_float_1d_randomread q; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; - typename ArrayTypes::tdual_ffloat_2d k_cut_inner; - typename ArrayTypes::t_ffloat_2d d_cut_inner; - typename ArrayTypes::tdual_ffloat_2d k_cut_inner_sq; - typename ArrayTypes::t_ffloat_2d d_cut_inner_sq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cut_inner; + typename AT::t_ffloat_2d d_cut_inner; + typename AT::tdual_ffloat_2d k_cut_inner_sq; + typename AT::t_ffloat_2d d_cut_inner_sq; - typename ArrayTypes::t_ffloat_1d_randomread + typename AT::t_ffloat_1d_randomread d_rtable, d_drtable, d_ftable, d_dftable, d_ctable, d_dctable, d_etable, d_detable; diff --git a/src/KOKKOS/pair_lj_sdk_kokkos.cpp b/src/KOKKOS/pair_lj_sdk_kokkos.cpp index 1acf35f18d..2d74e37192 100644 --- a/src/KOKKOS/pair_lj_sdk_kokkos.cpp +++ b/src/KOKKOS/pair_lj_sdk_kokkos.cpp @@ -91,6 +91,19 @@ void PairLJSDKKokkos::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync(); k_params.template sync(); @@ -124,7 +137,18 @@ void PairLJSDKKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + } template diff --git a/src/KOKKOS/pair_lj_sdk_kokkos.h b/src/KOKKOS/pair_lj_sdk_kokkos.h index 0b9056a23e..f313c4342f 100644 --- a/src/KOKKOS/pair_lj_sdk_kokkos.h +++ b/src/KOKKOS/pair_lj_sdk_kokkos.h @@ -34,6 +34,7 @@ class PairLJSDKKokkos : public PairLJSDK { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; enum {COUL_FLAG=0}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairLJSDKKokkos(class LAMMPS *); ~PairLJSDKKokkos(); @@ -74,19 +75,22 @@ class PairLJSDKKokkos : public PairLJSDK { typename Kokkos::DualView::t_dev_const_um params; params_lj m_params[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; // hardwired to space for 12 atom types F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; - typename ArrayTypes::t_tagint_1d tag; + typename AT::t_x_array_randomread x; + typename AT::t_x_array c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + typename AT::t_tagint_1d tag; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; int newton_pair; double special_lj[4]; - typename ArrayTypes::tdual_ffloat_2d k_cutsq; - typename ArrayTypes::t_ffloat_2d d_cutsq; + typename AT::tdual_ffloat_2d k_cutsq; + typename AT::t_ffloat_2d d_cutsq; int neighflag; diff --git a/src/KOKKOS/pair_reax_c_kokkos.h b/src/KOKKOS/pair_reax_c_kokkos.h index 2d746dee0d..8a0c08b660 100644 --- a/src/KOKKOS/pair_reax_c_kokkos.h +++ b/src/KOKKOS/pair_reax_c_kokkos.h @@ -392,7 +392,7 @@ class PairReaxCKokkos : public PairReaxC { typename AT::t_efloat_1d v_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_virial_array d_vatom; typename AT::t_virial_array v_vatom; HAT::t_virial_array h_vatom; @@ -414,9 +414,9 @@ class PairReaxCKokkos : public PairReaxC { typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; typedef typename tdual_ffloat_2d_n7::t_host t_host_ffloat_2d_n7; - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename ArrayTypes::t_int_1d_randomread d_ilist; - typename ArrayTypes::t_int_1d_randomread d_numneigh; + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; typename AT::t_int_1d d_bo_first, d_bo_num, d_bo_list, d_hb_first, d_hb_num, d_hb_list; diff --git a/src/KOKKOS/pair_sw_kokkos.cpp b/src/KOKKOS/pair_sw_kokkos.cpp index 8d0f2fcfc3..6b2c1ca04b 100644 --- a/src/KOKKOS/pair_sw_kokkos.cpp +++ b/src/KOKKOS/pair_sw_kokkos.cpp @@ -88,12 +88,12 @@ void PairSWKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } atomKK->sync(execution_space,datamask_read); @@ -171,8 +171,6 @@ void PairSWKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev_all.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -183,6 +181,8 @@ void PairSWKokkos::compute(int eflag_in, int vflag_in) k_vatom.template sync(); } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + copymode = 0; } diff --git a/src/KOKKOS/pair_sw_kokkos.h b/src/KOKKOS/pair_sw_kokkos.h index c722d9d52c..d899edfc1b 100644 --- a/src/KOKKOS/pair_sw_kokkos.h +++ b/src/KOKKOS/pair_sw_kokkos.h @@ -118,23 +118,23 @@ class PairSWKokkos : public PairSW { void threebodyj(const Param&, const Param&, const Param&, const F_FLOAT&, const F_FLOAT&, F_FLOAT *, F_FLOAT *, F_FLOAT *) const; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_tagint_1d tag; - typename ArrayTypes::t_int_1d_randomread type; + typename AT::t_x_array_randomread x; + typename AT::t_f_array f; + typename AT::t_tagint_1d tag; + typename AT::t_int_1d_randomread type; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; DAT::t_int_1d_randomread d_type2frho; DAT::t_int_2d_randomread d_type2rhor; DAT::t_int_2d_randomread d_type2z2r; - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename ArrayTypes::t_int_1d_randomread d_ilist; - typename ArrayTypes::t_int_1d_randomread d_numneigh; + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; //NeighListKokkos k_list; int neighflag,newton_pair; diff --git a/src/KOKKOS/pair_table_kokkos.cpp b/src/KOKKOS/pair_table_kokkos.cpp index 88773af7b3..93556635c2 100644 --- a/src/KOKKOS/pair_table_kokkos.cpp +++ b/src/KOKKOS/pair_table_kokkos.cpp @@ -12,7 +12,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Paul Crozier (SNL) + Contributing author: Christian Trott (SNL) ------------------------------------------------------------------------- */ #include @@ -89,6 +89,19 @@ void PairTableKokkos::compute_style(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view(); + } + atomKK->sync(execution_space,datamask_read); //k_cutsq.template sync(); //k_params.template sync(); @@ -165,7 +178,18 @@ void PairTableKokkos::compute_style(int eflag_in, int vflag_in) virial[5] += ev.v[5]; } + if (eflag_atom) { + k_eatom.template modify(); + k_eatom.template sync(); + } + + if (vflag_atom) { + k_vatom.template modify(); + k_vatom.template sync(); + } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + } template diff --git a/src/KOKKOS/pair_table_kokkos.h b/src/KOKKOS/pair_table_kokkos.h index ce8b2e3ee5..9e785b68fd 100644 --- a/src/KOKKOS/pair_table_kokkos.h +++ b/src/KOKKOS/pair_table_kokkos.h @@ -44,6 +44,7 @@ class PairTableKokkos : public PairTable { enum {EnabledNeighFlags=FULL|HALFTHREAD|HALF|N2}; enum {COUL_FLAG=0}; typedef DeviceType device_type; + typedef ArrayTypes AT; PairTableKokkos(class LAMMPS *); virtual ~PairTableKokkos(); @@ -62,27 +63,27 @@ class PairTableKokkos : public PairTable { protected: /*struct TableDeviceConst { - typename ArrayTypes::t_ffloat_2d_randomread cutsq; - typename ArrayTypes::t_int_2d_randomread tabindex; - typename ArrayTypes::t_int_1d_randomread nshiftbits,nmask; - typename ArrayTypes::t_ffloat_1d_randomread innersq,invdelta,deltasq6; - typename ArrayTypes::t_ffloat_2d_randomread rsq,drsq,e,de,f,df,e2,f2; + typename AT::t_ffloat_2d_randomread cutsq; + typename AT::t_int_2d_randomread tabindex; + typename AT::t_int_1d_randomread nshiftbits,nmask; + typename AT::t_ffloat_1d_randomread innersq,invdelta,deltasq6; + typename AT::t_ffloat_2d_randomread rsq,drsq,e,de,f,df,e2,f2; };*/ //Its faster not to use texture fetch if the number of tables is less than 32! struct TableDeviceConst { - typename ArrayTypes::t_ffloat_2d cutsq; - typename ArrayTypes::t_int_2d tabindex; - typename ArrayTypes::t_int_1d nshiftbits,nmask; - typename ArrayTypes::t_ffloat_1d innersq,invdelta,deltasq6; - typename ArrayTypes::t_ffloat_2d_randomread rsq,drsq,e,de,f,df,e2,f2; + typename AT::t_ffloat_2d cutsq; + typename AT::t_int_2d tabindex; + typename AT::t_int_1d nshiftbits,nmask; + typename AT::t_ffloat_1d innersq,invdelta,deltasq6; + typename AT::t_ffloat_2d_randomread rsq,drsq,e,de,f,df,e2,f2; }; struct TableDevice { - typename ArrayTypes::t_ffloat_2d cutsq; - typename ArrayTypes::t_int_2d tabindex; - typename ArrayTypes::t_int_1d nshiftbits,nmask; - typename ArrayTypes::t_ffloat_1d innersq,invdelta,deltasq6; - typename ArrayTypes::t_ffloat_2d rsq,drsq,e,de,f,df,e2,f2; + typename AT::t_ffloat_2d cutsq; + typename AT::t_int_2d tabindex; + typename AT::t_int_1d nshiftbits,nmask; + typename AT::t_ffloat_1d innersq,invdelta,deltasq6; + typename AT::t_ffloat_2d rsq,drsq,e,de,f,df,e2,f2; }; struct TableHost { @@ -99,17 +100,20 @@ class PairTableKokkos : public PairTable { F_FLOAT m_cutsq[MAX_TYPES_STACKPARAMS+1][MAX_TYPES_STACKPARAMS+1]; - typename ArrayTypes::t_ffloat_2d d_cutsq; + typename AT::t_ffloat_2d d_cutsq; virtual void allocate(); void compute_table(Table *); - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_x_array_const c_x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d_randomread type; - typename ArrayTypes::t_efloat_1d d_eatom; - typename ArrayTypes::t_virial_array d_vatom; + typename AT::t_x_array_randomread x; + typename AT::t_x_array_const c_x; + typename AT::t_f_array f; + typename AT::t_int_1d_randomread type; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; + typename AT::t_efloat_1d d_eatom; + typename AT::t_virial_array d_vatom; protected: int nlocal,nall,eflag,vflag,neighflag,newton_pair; diff --git a/src/KOKKOS/pair_tersoff_kokkos.cpp b/src/KOKKOS/pair_tersoff_kokkos.cpp index c94ae5c6f7..0f5e939794 100644 --- a/src/KOKKOS/pair_tersoff_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_kokkos.cpp @@ -172,12 +172,12 @@ void PairTersoffKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } atomKK->sync(execution_space,datamask_read); @@ -254,8 +254,6 @@ void PairTersoffKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev_all.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -266,6 +264,8 @@ void PairTersoffKokkos::compute(int eflag_in, int vflag_in) k_vatom.template sync(); } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + copymode = 0; } diff --git a/src/KOKKOS/pair_tersoff_kokkos.h b/src/KOKKOS/pair_tersoff_kokkos.h index 9a3c152604..d34cbe0783 100644 --- a/src/KOKKOS/pair_tersoff_kokkos.h +++ b/src/KOKKOS/pair_tersoff_kokkos.h @@ -197,16 +197,16 @@ class PairTersoffKokkos : public PairTersoff { DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; typedef typename tdual_ffloat_2d_n7::t_host t_host_ffloat_2d_n7; - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename ArrayTypes::t_int_1d_randomread d_ilist; - typename ArrayTypes::t_int_1d_randomread d_numneigh; + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; //NeighListKokkos k_list; int neighflag,newton_pair; diff --git a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp index 25d949d58a..cb6702835d 100644 --- a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp @@ -172,12 +172,12 @@ void PairTersoffMODKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } atomKK->sync(execution_space,datamask_read); @@ -254,8 +254,6 @@ void PairTersoffMODKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev_all.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -266,6 +264,8 @@ void PairTersoffMODKokkos::compute(int eflag_in, int vflag_in) k_vatom.template sync(); } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + copymode = 0; } diff --git a/src/KOKKOS/pair_tersoff_mod_kokkos.h b/src/KOKKOS/pair_tersoff_mod_kokkos.h index 38320ca1be..540aad659e 100644 --- a/src/KOKKOS/pair_tersoff_mod_kokkos.h +++ b/src/KOKKOS/pair_tersoff_mod_kokkos.h @@ -197,16 +197,16 @@ class PairTersoffMODKokkos : public PairTersoffMOD { DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; typedef typename tdual_ffloat_2d_n7::t_host t_host_ffloat_2d_n7; - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename ArrayTypes::t_int_1d_randomread d_ilist; - typename ArrayTypes::t_int_1d_randomread d_numneigh; + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; //NeighListKokkos k_list; int neighflag,newton_pair; diff --git a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp index fc67b8e953..264b769df3 100644 --- a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp @@ -186,12 +186,12 @@ void PairTersoffZBLKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } atomKK->sync(execution_space,datamask_read); @@ -268,8 +268,6 @@ void PairTersoffZBLKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev_all.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -280,6 +278,8 @@ void PairTersoffZBLKokkos::compute(int eflag_in, int vflag_in) k_vatom.template sync(); } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + copymode = 0; } diff --git a/src/KOKKOS/pair_tersoff_zbl_kokkos.h b/src/KOKKOS/pair_tersoff_zbl_kokkos.h index 31c5912ff6..58d21ecae3 100644 --- a/src/KOKKOS/pair_tersoff_zbl_kokkos.h +++ b/src/KOKKOS/pair_tersoff_zbl_kokkos.h @@ -202,8 +202,8 @@ class PairTersoffZBLKokkos : public PairTersoffZBL { DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; typedef Kokkos::DualView tdual_ffloat_2d_n7; typedef typename tdual_ffloat_2d_n7::t_dev_const_randomread t_ffloat_2d_n7_randomread; diff --git a/src/KOKKOS/pair_vashishta_kokkos.cpp b/src/KOKKOS/pair_vashishta_kokkos.cpp index 73e4e04f98..2e73bd6eb4 100644 --- a/src/KOKKOS/pair_vashishta_kokkos.cpp +++ b/src/KOKKOS/pair_vashishta_kokkos.cpp @@ -12,8 +12,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Stan Moore (SNL) - Anders Hafreager (UiO), andershaf@gmail.com + Contributing author: Anders Hafreager (UiO), andershaf@gmail.com ------------------------------------------------------------------------- */ #include @@ -88,12 +87,12 @@ void PairVashishtaKokkos::compute(int eflag_in, int vflag_in) if (eflag_atom) { memory->destroy_kokkos(k_eatom,eatom); memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); - d_eatom = k_eatom.d_view; + d_eatom = k_eatom.view(); } if (vflag_atom) { memory->destroy_kokkos(k_vatom,vatom); memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); - d_vatom = k_vatom.d_view; + d_vatom = k_vatom.view(); } atomKK->sync(execution_space,datamask_read); @@ -182,8 +181,6 @@ void PairVashishtaKokkos::compute(int eflag_in, int vflag_in) virial[5] += ev_all.v[5]; } - if (vflag_fdotr) pair_virial_fdotr_compute(this); - if (eflag_atom) { k_eatom.template modify(); k_eatom.template sync(); @@ -194,6 +191,8 @@ void PairVashishtaKokkos::compute(int eflag_in, int vflag_in) k_vatom.template sync(); } + if (vflag_fdotr) pair_virial_fdotr_compute(this); + copymode = 0; } diff --git a/src/KOKKOS/pair_vashishta_kokkos.h b/src/KOKKOS/pair_vashishta_kokkos.h index 8bc4d621c2..49c936185d 100644 --- a/src/KOKKOS/pair_vashishta_kokkos.h +++ b/src/KOKKOS/pair_vashishta_kokkos.h @@ -118,23 +118,23 @@ class PairVashishtaKokkos : public PairVashishta { void threebodyj(const Param&, const Param&, const Param&, const F_FLOAT&, const F_FLOAT&, F_FLOAT *, F_FLOAT *, F_FLOAT *) const; - typename ArrayTypes::t_x_array_randomread x; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_tagint_1d tag; - typename ArrayTypes::t_int_1d_randomread type; + typename AT::t_x_array_randomread x; + typename AT::t_f_array f; + typename AT::t_tagint_1d tag; + typename AT::t_int_1d_randomread type; DAT::tdual_efloat_1d k_eatom; DAT::tdual_virial_array k_vatom; - DAT::t_efloat_1d d_eatom; - DAT::t_virial_array d_vatom; + typename ArrayTypes::t_efloat_1d d_eatom; + typename ArrayTypes::t_virial_array d_vatom; DAT::t_int_1d_randomread d_type2frho; DAT::t_int_2d_randomread d_type2rhor; DAT::t_int_2d_randomread d_type2z2r; - typename ArrayTypes::t_neighbors_2d d_neighbors; - typename ArrayTypes::t_int_1d_randomread d_ilist; - typename ArrayTypes::t_int_1d_randomread d_numneigh; + typename AT::t_neighbors_2d d_neighbors; + typename AT::t_int_1d_randomread d_ilist; + typename AT::t_int_1d_randomread d_numneigh; //NeighListKokkos k_list; int neighflag,newton_pair;