From 7d46165c2a935b18a96bee124ccbe6a762ac7907 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 20 Jul 2023 13:31:34 -0600 Subject: [PATCH 1/7] Fix compile bug in Kokkos MEAM styles --- src/KOKKOS/pair_meam_kokkos.cpp | 2 +- src/KOKKOS/pair_meam_ms_kokkos.cpp | 2 +- src/KOKKOS/pppm_kokkos.h | 15 ++++++++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/pair_meam_kokkos.cpp b/src/KOKKOS/pair_meam_kokkos.cpp index c2b03c2054..daf9c1e18b 100644 --- a/src/KOKKOS/pair_meam_kokkos.cpp +++ b/src/KOKKOS/pair_meam_kokkos.cpp @@ -980,7 +980,7 @@ void PairMEAMKokkos::update_meam_views() namespace LAMMPS_NS { template class PairMEAMKokkos; -#ifdef KOKKOS_ENABLE_CUDA +#ifdef LMP_KOKKOS_GPU template class PairMEAMKokkos; #endif } diff --git a/src/KOKKOS/pair_meam_ms_kokkos.cpp b/src/KOKKOS/pair_meam_ms_kokkos.cpp index 491fc0273c..eaa7d500b9 100644 --- a/src/KOKKOS/pair_meam_ms_kokkos.cpp +++ b/src/KOKKOS/pair_meam_ms_kokkos.cpp @@ -26,7 +26,7 @@ PairMEAMMSKokkos::PairMEAMMSKokkos(LAMMPS *lmp) : PairMEAMKokkos; -#ifdef KOKKOS_ENABLE_CUDA +#ifdef LMP_KOKKOS_GPU template class PairMEAMMSKokkos; #endif } diff --git a/src/KOKKOS/pppm_kokkos.h b/src/KOKKOS/pppm_kokkos.h index 2c6dcc4e15..d621313873 100644 --- a/src/KOKKOS/pppm_kokkos.h +++ b/src/KOKKOS/pppm_kokkos.h @@ -33,7 +33,7 @@ KSpaceStyle(pppm/kk/host,PPPMKokkos); // clang-format off -// fix up FFT defines for KOKKOS with CUDA +// fix up FFT defines for KOKKOS with CUDA and HIP #ifdef KOKKOS_ENABLE_CUDA # if defined(FFT_FFTW) @@ -48,6 +48,19 @@ KSpaceStyle(pppm/kk/host,PPPMKokkos); # if !defined(FFT_CUFFT) && !defined(FFT_KISSFFT) # define FFT_KISSFFT # endif +#elif defined(KOKKOS_ENABLE_HIP) +# if defined(FFT_FFTW) +# undef FFT_FFTW +# endif +# if defined(FFT_FFTW3) +# undef FFT_FFTW3 +# endif +# if defined(FFT_MKL) +# undef FFT_MKL +# endif +# if !defined(FFT_HIPFFT) && !defined(FFT_KISSFFT) +# define FFT_KISSFFT +# endif #endif #include "pppm.h" From 6c6258371b774b2f44b75adb5a574dcde9d3f75e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Jul 2023 20:31:16 -0400 Subject: [PATCH 2/7] add init_flags() and is_initialized() methods --- src/compute.cpp | 10 ++++++++++ src/compute.h | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/compute.cpp b/src/compute.cpp index dcad4954fc..2bd1544fd7 100644 --- a/src/compute.cpp +++ b/src/compute.cpp @@ -74,6 +74,7 @@ Compute::Compute(LAMMPS *lmp, int narg, char **arg) : dynamic = 0; dynamic_group_allow = 1; + initialized_flag = 0; invoked_scalar = invoked_vector = invoked_array = -1; invoked_peratom = invoked_local = -1; invoked_flag = INVOKED_NONE; @@ -111,6 +112,15 @@ Compute::~Compute() /* ---------------------------------------------------------------------- */ +void Compute::init_flags() +{ + initialized_flag = 1; + invoked_scalar = invoked_vector = invoked_array = -1; + invoked_peratom = invoked_local = -1; +} + +/* ---------------------------------------------------------------------- */ + void Compute::modify_params(int narg, char **arg) { if (narg == 0) error->all(FLERR,"Illegal compute_modify command"); diff --git a/src/compute.h b/src/compute.h index 72b0075fd6..8ae01a4469 100644 --- a/src/compute.h +++ b/src/compute.h @@ -62,7 +62,7 @@ class Compute : protected Pointers { int size_local_rows; // rows in local vector or array int size_local_cols; // 0 = vector, N = columns in local array - int pergrid_flag; // 0/1 if compute_pergrid() function exists + int pergrid_flag; // 0/1 if compute_pergrid() function exists int extscalar; // 0/1 if global scalar is intensive/extensive int extvector; // 0/1/-1 if global vector is all int/ext/extlist @@ -88,6 +88,7 @@ class Compute : protected Pointers { int maxtime; // max # of entries time list can hold bigint *tlist; // list of timesteps the Compute is called on + int initialized_flag; // 1 if compute is initialized, 0 if not int invoked_flag; // non-zero if invoked or accessed this step, 0 if not bigint invoked_scalar; // last timestep on which compute_scalar() was invoked bigint invoked_vector; // ditto for compute_vector() @@ -114,6 +115,7 @@ class Compute : protected Pointers { void modify_params(int, char **); virtual void reset_extra_dof(); + void init_flags(); virtual void init() = 0; virtual void init_list(int, class NeighList *) {} virtual void setup() {} @@ -161,6 +163,8 @@ class Compute : protected Pointers { int matchstep(bigint); void clearstep(); + bool is_initialized() const { return initialized_flag == 1; } + virtual double memory_usage() { return 0.0; } virtual void pair_setup_callback(int, int) {} From c7996b506a4f0f1663cf039dffac7051aeff51f0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Jul 2023 20:31:48 -0400 Subject: [PATCH 3/7] make use of Compute::is_initialized() and Compute::init_flags() --- src/modify.cpp | 6 +----- src/thermo.cpp | 16 ++++++++-------- src/variable.cpp | 44 ++++++++++++++++++++++---------------------- 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/src/modify.cpp b/src/modify.cpp index d0656d3895..427c4e259b 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -191,11 +191,7 @@ void Modify::init() for (i = 0; i < ncompute; i++) { compute[i]->init(); - compute[i]->invoked_scalar = -1; - compute[i]->invoked_vector = -1; - compute[i]->invoked_array = -1; - compute[i]->invoked_peratom = -1; - compute[i]->invoked_local = -1; + compute[i]->init_flags(); } addstep_compute_all(update->ntimestep); diff --git a/src/thermo.cpp b/src/thermo.cpp index 6122edec83..bdf2b8cf7b 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -1134,8 +1134,8 @@ void Thermo::check_temp(const std::string &keyword) if (!temperature) error->all(FLERR, "Thermo keyword {} in variable requires thermo to use/init temperature", keyword); - if (update->first_update == 0) - error->all(FLERR,"Thermo keyword {} cannot be invoked before first run",keyword); + if (!temperature->is_initialized()) + error->all(FLERR,"Thermo keyword {} cannot be invoked before initialized by run",keyword); if (!(temperature->invoked_flag & Compute::INVOKED_SCALAR)) { temperature->compute_scalar(); temperature->invoked_flag |= Compute::INVOKED_SCALAR; @@ -1153,8 +1153,8 @@ void Thermo::check_pe(const std::string &keyword) if (!pe) error->all(FLERR, "Thermo keyword {} in variable requires thermo to use/init potential energy", keyword); - if (update->first_update == 0) - error->all(FLERR,"Thermo keyword {} cannot be invoked before first run",keyword); + if (!pe->is_initialized()) + error->all(FLERR,"Thermo keyword {} cannot be invoked before initialized by run",keyword); if (!(pe->invoked_flag & Compute::INVOKED_SCALAR)) { pe->compute_scalar(); pe->invoked_flag |= Compute::INVOKED_SCALAR; @@ -1169,8 +1169,8 @@ void Thermo::check_press_scalar(const std::string &keyword) { if (!pressure) error->all(FLERR, "Thermo keyword {} in variable requires thermo to use/init press", keyword); - if (update->first_update == 0) - error->all(FLERR,"Thermo keyword {} cannot be invoked before first run",keyword); + if (!pressure->is_initialized()) + error->all(FLERR,"Thermo keyword {} cannot be invoked before initialized by run",keyword); if (!(pressure->invoked_flag & Compute::INVOKED_SCALAR)) { pressure->compute_scalar(); pressure->invoked_flag |= Compute::INVOKED_SCALAR; @@ -1185,8 +1185,8 @@ void Thermo::check_press_vector(const std::string &keyword) { if (!pressure) error->all(FLERR, "Thermo keyword {} in variable requires thermo to use/init press", keyword); - if (update->first_update == 0) - error->all(FLERR,"Thermo keyword {} cannot be invoked before first run",keyword); + if (!pressure->is_initialized()) + error->all(FLERR,"Thermo keyword {} cannot be invoked before initialized by run",keyword); if (!(pressure->invoked_flag & Compute::INVOKED_VECTOR)) { pressure->compute_vector(); pressure->invoked_flag |= Compute::INVOKED_VECTOR; diff --git a/src/variable.cpp b/src/variable.cpp index 3264cfa1ee..7cbd43b7c6 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -1505,8 +1505,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (nbracket == 0 && compute->scalar_flag && lowercase) { - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_SCALAR)) { compute->compute_scalar(); compute->invoked_flag |= Compute::INVOKED_SCALAR; @@ -1527,8 +1527,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (index1 > compute->size_vector && compute->size_vector_variable == 0) print_var_error(FLERR,"Variable formula compute vector is accessed out-of-range",ivar,0); - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_VECTOR)) { compute->compute_vector(); compute->invoked_flag |= Compute::INVOKED_VECTOR; @@ -1553,8 +1553,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); if (index2 > compute->size_array_cols) print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_ARRAY)) { compute->compute_array(); compute->invoked_flag |= Compute::INVOKED_ARRAY; @@ -1580,8 +1580,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Compute global vector in atom-style variable formula",ivar); if (compute->size_vector == 0) print_var_error(FLERR,"Variable formula compute vector is zero length",ivar); - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_VECTOR)) { compute->compute_vector(); compute->invoked_flag |= Compute::INVOKED_VECTOR; @@ -1604,8 +1604,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Compute global vector in atom-style variable formula",ivar); if (compute->size_array_rows == 0) print_var_error(FLERR,"Variable formula compute array is zero length",ivar); - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_ARRAY)) { compute->compute_array(); compute->invoked_flag |= Compute::INVOKED_ARRAY; @@ -1623,8 +1623,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) } else if (nbracket == 1 && compute->peratom_flag && compute->size_peratom_cols == 0) { - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -1640,8 +1640,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (index2 > compute->size_peratom_cols) print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -1663,8 +1663,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Per-atom compute in equal-style variable formula",ivar); if (treetype == VECTOR) print_var_error(FLERR,"Per-atom compute in vector-style variable formula",ivar); - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -1687,8 +1687,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) print_var_error(FLERR,"Per-atom compute in vector-style variable formula",ivar); if (index1 > compute->size_peratom_cols) print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -4163,8 +4163,8 @@ int Variable::special_function(char *word, char *contents, Tree **tree, Tree **t print_var_error(FLERR,mesg,ivar); } if (index == 0 && compute->vector_flag) { - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_VECTOR)) { compute->compute_vector(); compute->invoked_flag |= Compute::INVOKED_VECTOR; @@ -4174,8 +4174,8 @@ int Variable::special_function(char *word, char *contents, Tree **tree, Tree **t } else if (index && compute->array_flag) { if (index > compute->size_array_cols) print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); - if (update->first_update == 0) - print_var_error(FLERR,"Variable formula compute cannot be invoked before first run",ivar); + if (!compute->is_initialized()) + print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_ARRAY)) { compute->compute_array(); compute->invoked_flag |= Compute::INVOKED_ARRAY; From 78880c909915f00b44c4efb52e9da7ae8695a56f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Jul 2023 21:28:45 -0400 Subject: [PATCH 4/7] update reset_atoms image to call Compute::init_flag() as a workaround --- src/reset_atoms_image.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/reset_atoms_image.cpp b/src/reset_atoms_image.cpp index d39ea0fec1..7e9dd45a17 100644 --- a/src/reset_atoms_image.cpp +++ b/src/reset_atoms_image.cpp @@ -93,15 +93,16 @@ void ResetAtomsImage::command(int narg, char **arg) "c_ifmax_r_i_f[*] c_ifmin_r_i_f[*]"); // trigger computes - // need to ensure update->first_update = 1 - // to allow this input script command prior to first run/minimize - // this is b/c internal variables are evaulated which invoke computes - // that will trigger an error unless first_update = 1 - // reset update->first_update when done - - int first_update_saved = update->first_update; - update->first_update = 1; + // need to first initialize compute flags to allow this input script command prior + // to a first run/minimize. this is b/c internal variables are evaulated which + // invoke computes that will trigger an error unless they are initialized + frags->init_flags(); + chunk->init_flags(); + flags->init_flags(); + ifmin->init_flags(); + ifmax->init_flags(); + cdist->init_flags(); frags->compute_peratom(); chunk->compute_peratom(); flags->compute_peratom(); @@ -109,8 +110,6 @@ void ResetAtomsImage::command(int narg, char **arg) ifmax->compute_array(); cdist->compute_peratom(); - update->first_update = first_update_saved; - // reset image flags for atoms in group const int *const mask = atom->mask; From 0b57ea246c536e0d3594e5f2e526fefe876734ae Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 20 Jul 2023 21:48:51 -0400 Subject: [PATCH 5/7] update dump styles to use Compute::is_initialized() --- src/VTK/dump_vtk.cpp | 5 +++-- src/dump_custom.cpp | 5 +++-- src/dump_grid.cpp | 5 +++-- src/dump_image.cpp | 5 +++-- src/dump_local.cpp | 5 +++-- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/VTK/dump_vtk.cpp b/src/VTK/dump_vtk.cpp index a77f5b2e11..00bd451fb0 100644 --- a/src/VTK/dump_vtk.cpp +++ b/src/VTK/dump_vtk.cpp @@ -297,9 +297,10 @@ int DumpVTK::count() // cannot invoke before first run, otherwise invoke if necessary if (ncompute) { - if (update->first_update == 0) - error->all(FLERR,"Dump compute cannot be invoked before first run"); for (i = 0; i < ncompute; i++) { + if (!compute[i]->is_initialized()) + error->all(FLERR,"Dump compute ID {} cannot be invoked before initialized by a run", + compute[i]->id); if (!(compute[i]->invoked_flag & Compute::INVOKED_PERATOM)) { compute[i]->compute_peratom(); compute[i]->invoked_flag |= Compute::INVOKED_PERATOM; diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index dba72c7478..570ddd104f 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -562,9 +562,10 @@ int DumpCustom::count() // cannot invoke before first run, otherwise invoke if necessary if (ncompute) { - if (update->first_update == 0) - error->all(FLERR,"Dump compute cannot be invoked before first run"); for (i = 0; i < ncompute; i++) { + if (!compute[i]->is_initialized()) + error->all(FLERR,"Dump compute ID {} cannot be invoked before initialized by a run", + compute[i]->id); if (!(compute[i]->invoked_flag & Compute::INVOKED_PERATOM)) { compute[i]->compute_peratom(); compute[i]->invoked_flag |= Compute::INVOKED_PERATOM; diff --git a/src/dump_grid.cpp b/src/dump_grid.cpp index 39d80ade11..24f2586568 100644 --- a/src/dump_grid.cpp +++ b/src/dump_grid.cpp @@ -527,9 +527,10 @@ int DumpGrid::count() // cannot invoke before first run, otherwise invoke if necessary if (ncompute) { - if (update->first_update == 0) - error->all(FLERR,"Dump compute cannot be invoked before first run"); for (i = 0; i < ncompute; i++) { + if (!compute[i]->is_initialized()) + error->all(FLERR,"Dump compute ID {} cannot be invoked before initialized by a run", + compute[i]->id); if (!(compute[i]->invoked_flag & Compute::INVOKED_PERGRID)) { compute[i]->compute_pergrid(); compute[i]->invoked_flag |= Compute::INVOKED_PERGRID; diff --git a/src/dump_image.cpp b/src/dump_image.cpp index 0d54c60595..530e19a04c 100644 --- a/src/dump_image.cpp +++ b/src/dump_image.cpp @@ -667,8 +667,9 @@ void DumpImage::write() // cannot invoke before first run, otherwise invoke if necessary if (grid_compute) { - if (update->first_update == 0) - error->all(FLERR,"Grid compute used in dump image cannot be invoked before first run"); + if (!grid_compute->is_initialized()) + error->all(FLERR,"Grid compute ID {} used in dump image cannot be invoked " + "before initialized by a run", grid_compute->id); if (!(grid_compute->invoked_flag & Compute::INVOKED_PERGRID)) { grid_compute->compute_pergrid(); grid_compute->invoked_flag |= Compute::INVOKED_PERGRID; diff --git a/src/dump_local.cpp b/src/dump_local.cpp index 097589ea41..e81ab0590f 100644 --- a/src/dump_local.cpp +++ b/src/dump_local.cpp @@ -328,9 +328,10 @@ int DumpLocal::count() // cannot invoke before first run, otherwise invoke if necessary if (ncompute) { - if (update->first_update == 0) - error->all(FLERR,"Dump compute cannot be invoked before first run"); for (i = 0; i < ncompute; i++) { + if (!compute[i]->is_initialized()) + error->all(FLERR,"Dump compute ID {} cannot be invoked before initialized by a run", + compute[i]->id); if (!(compute[i]->invoked_flag & Compute::INVOKED_LOCAL)) { compute[i]->compute_local(); compute[i]->invoked_flag |= Compute::INVOKED_LOCAL; From 2da908190bd34dca2791e58e96bb2354c85f7484 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 Jul 2023 11:24:57 -0400 Subject: [PATCH 6/7] make error messages consistent and improve their grammar --- src/VTK/dump_vtk.cpp | 2 +- src/dump_custom.cpp | 2 +- src/dump_grid.cpp | 2 +- src/dump_image.cpp | 2 +- src/dump_local.cpp | 2 +- src/thermo.cpp | 8 ++++---- src/variable.cpp | 33 ++++++++++++++++++++++----------- 7 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/VTK/dump_vtk.cpp b/src/VTK/dump_vtk.cpp index 00bd451fb0..172a092629 100644 --- a/src/VTK/dump_vtk.cpp +++ b/src/VTK/dump_vtk.cpp @@ -299,7 +299,7 @@ int DumpVTK::count() if (ncompute) { for (i = 0; i < ncompute; i++) { if (!compute[i]->is_initialized()) - error->all(FLERR,"Dump compute ID {} cannot be invoked before initialized by a run", + error->all(FLERR,"Dump compute ID {} cannot be invoked before initialization by a run", compute[i]->id); if (!(compute[i]->invoked_flag & Compute::INVOKED_PERATOM)) { compute[i]->compute_peratom(); diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index 570ddd104f..1e60295bbe 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -564,7 +564,7 @@ int DumpCustom::count() if (ncompute) { for (i = 0; i < ncompute; i++) { if (!compute[i]->is_initialized()) - error->all(FLERR,"Dump compute ID {} cannot be invoked before initialized by a run", + error->all(FLERR,"Dump compute ID {} cannot be invoked before initialization by a run", compute[i]->id); if (!(compute[i]->invoked_flag & Compute::INVOKED_PERATOM)) { compute[i]->compute_peratom(); diff --git a/src/dump_grid.cpp b/src/dump_grid.cpp index 24f2586568..3c10aa9083 100644 --- a/src/dump_grid.cpp +++ b/src/dump_grid.cpp @@ -529,7 +529,7 @@ int DumpGrid::count() if (ncompute) { for (i = 0; i < ncompute; i++) { if (!compute[i]->is_initialized()) - error->all(FLERR,"Dump compute ID {} cannot be invoked before initialized by a run", + error->all(FLERR,"Dump compute ID {} cannot be invoked before initialization by a run", compute[i]->id); if (!(compute[i]->invoked_flag & Compute::INVOKED_PERGRID)) { compute[i]->compute_pergrid(); diff --git a/src/dump_image.cpp b/src/dump_image.cpp index 530e19a04c..1ba433f93f 100644 --- a/src/dump_image.cpp +++ b/src/dump_image.cpp @@ -669,7 +669,7 @@ void DumpImage::write() if (grid_compute) { if (!grid_compute->is_initialized()) error->all(FLERR,"Grid compute ID {} used in dump image cannot be invoked " - "before initialized by a run", grid_compute->id); + "before initialization by a run", grid_compute->id); if (!(grid_compute->invoked_flag & Compute::INVOKED_PERGRID)) { grid_compute->compute_pergrid(); grid_compute->invoked_flag |= Compute::INVOKED_PERGRID; diff --git a/src/dump_local.cpp b/src/dump_local.cpp index e81ab0590f..9695e152b2 100644 --- a/src/dump_local.cpp +++ b/src/dump_local.cpp @@ -330,7 +330,7 @@ int DumpLocal::count() if (ncompute) { for (i = 0; i < ncompute; i++) { if (!compute[i]->is_initialized()) - error->all(FLERR,"Dump compute ID {} cannot be invoked before initialized by a run", + error->all(FLERR,"Dump compute ID {} cannot be invoked before initialization by a run", compute[i]->id); if (!(compute[i]->invoked_flag & Compute::INVOKED_LOCAL)) { compute[i]->compute_local(); diff --git a/src/thermo.cpp b/src/thermo.cpp index bdf2b8cf7b..a8442d42db 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -1135,7 +1135,7 @@ void Thermo::check_temp(const std::string &keyword) error->all(FLERR, "Thermo keyword {} in variable requires thermo to use/init temperature", keyword); if (!temperature->is_initialized()) - error->all(FLERR,"Thermo keyword {} cannot be invoked before initialized by run",keyword); + error->all(FLERR,"Thermo keyword {} cannot be invoked before initialization by a run",keyword); if (!(temperature->invoked_flag & Compute::INVOKED_SCALAR)) { temperature->compute_scalar(); temperature->invoked_flag |= Compute::INVOKED_SCALAR; @@ -1154,7 +1154,7 @@ void Thermo::check_pe(const std::string &keyword) error->all(FLERR, "Thermo keyword {} in variable requires thermo to use/init potential energy", keyword); if (!pe->is_initialized()) - error->all(FLERR,"Thermo keyword {} cannot be invoked before initialized by run",keyword); + error->all(FLERR,"Thermo keyword {} cannot be invoked before initialization by a run",keyword); if (!(pe->invoked_flag & Compute::INVOKED_SCALAR)) { pe->compute_scalar(); pe->invoked_flag |= Compute::INVOKED_SCALAR; @@ -1170,7 +1170,7 @@ void Thermo::check_press_scalar(const std::string &keyword) if (!pressure) error->all(FLERR, "Thermo keyword {} in variable requires thermo to use/init press", keyword); if (!pressure->is_initialized()) - error->all(FLERR,"Thermo keyword {} cannot be invoked before initialized by run",keyword); + error->all(FLERR,"Thermo keyword {} cannot be invoked before initialization by a run",keyword); if (!(pressure->invoked_flag & Compute::INVOKED_SCALAR)) { pressure->compute_scalar(); pressure->invoked_flag |= Compute::INVOKED_SCALAR; @@ -1186,7 +1186,7 @@ void Thermo::check_press_vector(const std::string &keyword) if (!pressure) error->all(FLERR, "Thermo keyword {} in variable requires thermo to use/init press", keyword); if (!pressure->is_initialized()) - error->all(FLERR,"Thermo keyword {} cannot be invoked before initialized by run",keyword); + error->all(FLERR,"Thermo keyword {} cannot be invoked before initialization by a run",keyword); if (!(pressure->invoked_flag & Compute::INVOKED_VECTOR)) { pressure->compute_vector(); pressure->invoked_flag |= Compute::INVOKED_VECTOR; diff --git a/src/variable.cpp b/src/variable.cpp index 7cbd43b7c6..cf2e5c3b6f 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -1506,7 +1506,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (nbracket == 0 && compute->scalar_flag && lowercase) { if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_SCALAR)) { compute->compute_scalar(); compute->invoked_flag |= Compute::INVOKED_SCALAR; @@ -1528,7 +1529,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) compute->size_vector_variable == 0) print_var_error(FLERR,"Variable formula compute vector is accessed out-of-range",ivar,0); if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_VECTOR)) { compute->compute_vector(); compute->invoked_flag |= Compute::INVOKED_VECTOR; @@ -1554,7 +1556,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (index2 > compute->size_array_cols) print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_ARRAY)) { compute->compute_array(); compute->invoked_flag |= Compute::INVOKED_ARRAY; @@ -1581,7 +1584,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (compute->size_vector == 0) print_var_error(FLERR,"Variable formula compute vector is zero length",ivar); if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_VECTOR)) { compute->compute_vector(); compute->invoked_flag |= Compute::INVOKED_VECTOR; @@ -1605,7 +1609,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (compute->size_array_rows == 0) print_var_error(FLERR,"Variable formula compute array is zero length",ivar); if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_ARRAY)) { compute->compute_array(); compute->invoked_flag |= Compute::INVOKED_ARRAY; @@ -1624,7 +1629,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) compute->size_peratom_cols == 0) { if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -1641,7 +1647,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (index2 > compute->size_peratom_cols) print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -1664,7 +1671,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (treetype == VECTOR) print_var_error(FLERR,"Per-atom compute in vector-style variable formula",ivar); if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -1688,7 +1696,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) if (index1 > compute->size_peratom_cols) print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_PERATOM)) { compute->compute_peratom(); compute->invoked_flag |= Compute::INVOKED_PERATOM; @@ -4164,7 +4173,8 @@ int Variable::special_function(char *word, char *contents, Tree **tree, Tree **t } if (index == 0 && compute->vector_flag) { if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_VECTOR)) { compute->compute_vector(); compute->invoked_flag |= Compute::INVOKED_VECTOR; @@ -4175,7 +4185,8 @@ int Variable::special_function(char *word, char *contents, Tree **tree, Tree **t if (index > compute->size_array_cols) print_var_error(FLERR,"Variable formula compute array is accessed out-of-range",ivar,0); if (!compute->is_initialized()) - print_var_error(FLERR,"Variable formula compute cannot be invoked before initialized by run",ivar); + print_var_error(FLERR,"Variable formula compute cannot be invoked before " + "initialization by a run",ivar); if (!(compute->invoked_flag & Compute::INVOKED_ARRAY)) { compute->compute_array(); compute->invoked_flag |= Compute::INVOKED_ARRAY; From 9669bf3d3b3d57286469ba9dc6f48e9b29e35787 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 21 Jul 2023 11:25:44 -0400 Subject: [PATCH 7/7] move creation of internal computes and variables before lmp->init() so they are initialized --- src/reset_atoms_image.cpp | 40 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/src/reset_atoms_image.cpp b/src/reset_atoms_image.cpp index 7e9dd45a17..84df5bf746 100644 --- a/src/reset_atoms_image.cpp +++ b/src/reset_atoms_image.cpp @@ -61,6 +61,22 @@ void ResetAtomsImage::command(int narg, char **arg) MPI_Barrier(world); double time1 = platform::walltime(); + // create computes and variables + // must come before lmp->init so the computes are properly initialized + + auto frags = modify->add_compute("frags_r_i_f all fragment/atom single yes"); + auto chunk = modify->add_compute("chunk_r_i_f all chunk/atom c_frags_r_i_f compress yes"); + auto flags = modify->add_compute("flags_r_i_f all property/atom ix iy iz"); + input->variable->set("ix_r_i_f atom c_flags_r_i_f[1]"); + input->variable->set("iy_r_i_f atom c_flags_r_i_f[2]"); + input->variable->set("iz_r_i_f atom c_flags_r_i_f[3]"); + auto ifmin = modify->add_compute("ifmin_r_i_f all reduce/chunk chunk_r_i_f min " + "v_ix_r_i_f v_iy_r_i_f v_iz_r_i_f"); + auto ifmax = modify->add_compute("ifmax_r_i_f all reduce/chunk chunk_r_i_f max " + "v_ix_r_i_f v_iy_r_i_f v_iz_r_i_f"); + auto cdist = modify->add_compute("cdist_r_i_f all chunk/spread/atom chunk_r_i_f " + "c_ifmax_r_i_f[*] c_ifmin_r_i_f[*]"); + // initialize system since comm->borders() will be invoked lmp->init(); @@ -77,32 +93,8 @@ void ResetAtomsImage::command(int narg, char **arg) comm->borders(); if (domain->triclinic) domain->lamda2x(atom->nlocal + atom->nghost); - // create computes and variables - - auto frags = modify->add_compute("frags_r_i_f all fragment/atom single yes"); - auto chunk = modify->add_compute("chunk_r_i_f all chunk/atom c_frags_r_i_f compress yes"); - auto flags = modify->add_compute("flags_r_i_f all property/atom ix iy iz"); - input->variable->set("ix_r_i_f atom c_flags_r_i_f[1]"); - input->variable->set("iy_r_i_f atom c_flags_r_i_f[2]"); - input->variable->set("iz_r_i_f atom c_flags_r_i_f[3]"); - auto ifmin = modify->add_compute("ifmin_r_i_f all reduce/chunk chunk_r_i_f min " - "v_ix_r_i_f v_iy_r_i_f v_iz_r_i_f"); - auto ifmax = modify->add_compute("ifmax_r_i_f all reduce/chunk chunk_r_i_f max " - "v_ix_r_i_f v_iy_r_i_f v_iz_r_i_f"); - auto cdist = modify->add_compute("cdist_r_i_f all chunk/spread/atom chunk_r_i_f " - "c_ifmax_r_i_f[*] c_ifmin_r_i_f[*]"); - // trigger computes - // need to first initialize compute flags to allow this input script command prior - // to a first run/minimize. this is b/c internal variables are evaulated which - // invoke computes that will trigger an error unless they are initialized - frags->init_flags(); - chunk->init_flags(); - flags->init_flags(); - ifmin->init_flags(); - ifmax->init_flags(); - cdist->init_flags(); frags->compute_peratom(); chunk->compute_peratom(); flags->compute_peratom();