add convenience functions to modify to simplify creation of fixes and computes

This commit is contained in:
Axel Kohlmeyer
2020-06-26 14:49:53 -04:00
parent 7318dd06d3
commit 1ea0eca2a5
5 changed files with 46 additions and 47 deletions

View File

@ -36,6 +36,7 @@
#include "math_const.h"
#include "memory.h"
#include "error.h"
#include "fmt/format.h"
using namespace LAMMPS_NS;
using namespace MathConst;
@ -581,21 +582,9 @@ void ComputeChunkAtom::init()
// fixstore initializes all values to 0.0
if ((idsflag == ONCE || lockcount) && !fixstore) {
int n = strlen(id) + strlen("_COMPUTE_STORE") + 1;
id_fix = new char[n];
strcpy(id_fix,id);
strcat(id_fix,"_COMPUTE_STORE");
char **newarg = new char*[6];
newarg[0] = id_fix;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "STORE";
newarg[3] = (char *) "peratom";
newarg[4] = (char *) "1";
newarg[5] = (char *) "1";
modify->add_fix(6,newarg);
modify->add_fix(fmt::format("{}_COMPUTE_STORE {} STORE peratom 1 1",
id,group->names[igroup]));
fixstore = (FixStore *) modify->fix[modify->nfix-1];
delete [] newarg;
}
if ((idsflag != ONCE && !lockcount) && fixstore) {

View File

@ -24,6 +24,7 @@
#include "variable.h"
#include "memory.h"
#include "error.h"
#include "fmt/format.h"
using namespace LAMMPS_NS;
@ -72,21 +73,9 @@ ComputeDisplaceAtom::ComputeDisplaceAtom(LAMMPS *lmp, int narg, char **arg) :
// create a new fix STORE style
// id = compute-ID + COMPUTE_STORE, fix group = compute group
int n = strlen(id) + strlen("_COMPUTE_STORE") + 1;
id_fix = new char[n];
strcpy(id_fix,id);
strcat(id_fix,"_COMPUTE_STORE");
char **newarg = new char*[6];
newarg[0] = id_fix;
newarg[1] = group->names[igroup];
newarg[2] = (char *) "STORE";
newarg[3] = (char *) "peratom";
newarg[4] = (char *) "1";
newarg[5] = (char *) "3";
modify->add_fix(6,newarg);
modify->add_fix(fmt::format("{}_COMPUTE_STORE {} STORE peratom 1 3",
id,group->names[igroup]));
fix = (FixStore *) modify->fix[modify->nfix-1];
delete [] newarg;
// calculate xu,yu,zu for fix store array
// skip if reset from restart file

View File

@ -941,6 +941,23 @@ void Modify::add_fix(int narg, char **arg, int trysuffix)
fix[ifix]->post_constructor();
}
/* ----------------------------------------------------------------------
convenience function to allow adding a fix from a single string
------------------------------------------------------------------------- */
void Modify::add_fix(const std::string &fixcmd, int trysuffix)
{
std::vector<std::string> args = utils::split_words(fixcmd);
char **newarg = new char*[args.size()];
int i=0;
for (const auto &arg : args) {
newarg[i++] = (char *)arg.c_str();
}
add_fix(args.size(),newarg,trysuffix);
delete[] newarg;
}
/* ----------------------------------------------------------------------
replace replaceID fix with a new fix
this is used by callers to preserve ordering of fixes
@ -1228,6 +1245,23 @@ void Modify::add_compute(int narg, char **arg, int trysuffix)
ncompute++;
}
/* ----------------------------------------------------------------------
convenience function to allow adding a compute from a single string
------------------------------------------------------------------------- */
void Modify::add_compute(const std::string &computecmd, int trysuffix)
{
std::vector<std::string> args = utils::split_words(computecmd);
char **newarg = new char*[args.size()];
int i=0;
for (const auto &arg : args) {
newarg[i++] = (char *)arg.c_str();
}
add_compute(args.size(),newarg,trysuffix);
delete[] newarg;
}
/* ----------------------------------------------------------------------
one instance per compute in style_compute.h
------------------------------------------------------------------------- */

View File

@ -96,6 +96,7 @@ class Modify : protected Pointers {
virtual int min_reset_ref();
void add_fix(int, char **, int trysuffix=1);
void add_fix(const std::string &, int trysuffix=1);
void replace_fix(const char *, int, char **, int trysuffix=1);
void modify_fix(int, char **);
void delete_fix(const char *);
@ -108,6 +109,7 @@ class Modify : protected Pointers {
int check_rigid_list_overlap(int *);
void add_compute(int, char **, int trysuffix=1);
void add_compute(const std::string &, int trysuffix=1);
void modify_compute(int, char **);
void delete_compute(const char *);
int find_compute(const char *);

View File

@ -46,28 +46,13 @@ Output::Output(LAMMPS *lmp) : Pointers(lmp)
{
// create default computes for temp,pressure,pe
char **newarg = new char*[4];
newarg[0] = (char *) "thermo_temp";
newarg[1] = (char *) "all";
newarg[2] = (char *) "temp";
modify->add_compute(3,newarg);
newarg[0] = (char *) "thermo_press";
newarg[1] = (char *) "all";
newarg[2] = (char *) "pressure";
newarg[3] = (char *) "thermo_temp";
modify->add_compute(4,newarg);
newarg[0] = (char *) "thermo_pe";
newarg[1] = (char *) "all";
newarg[2] = (char *) "pe";
modify->add_compute(3,newarg);
delete [] newarg;
modify->add_compute("thermo_temp all temp");
modify->add_compute("thermo_press all pressure thermo_temp");
modify->add_compute("thermo_pe all pe");
// create default Thermo class
newarg = new char*[1];
char **newarg = new char*[1];
newarg[0] = (char *) "one";
thermo = new Thermo(lmp,1,newarg);
delete [] newarg;