update fix adapt/fep from fix adapt. only supports 2-d parameters for pair styles

This commit is contained in:
Axel Kohlmeyer
2023-12-06 13:54:44 -05:00
parent 884af7e88c
commit 52f576fd1c

View File

@ -48,9 +48,9 @@ enum{DIAMETER, CHARGE};
FixAdaptFEP::FixAdaptFEP(LAMMPS *lmp, int narg, char **arg) : FixAdaptFEP::FixAdaptFEP(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg) Fix(lmp, narg, arg)
{ {
if (narg < 5) error->all(FLERR,"Illegal fix adapt/fep command"); if (narg < 5) utils::missing_cmd_args(FLERR,"fix adapt/fep", error);
nevery = utils::inumeric(FLERR,arg[3],false,lmp); nevery = utils::inumeric(FLERR,arg[3],false,lmp);
if (nevery < 0) error->all(FLERR,"Illegal fix adapt/fep command"); if (nevery < 0) error->all(FLERR,"Illegal fix adapt/fep every value {}", nevery);
dynamic_group_allow = 1; dynamic_group_allow = 1;
create_attribute = 1; create_attribute = 1;
@ -62,21 +62,21 @@ FixAdaptFEP::FixAdaptFEP(LAMMPS *lmp, int narg, char **arg) :
int iarg = 4; int iarg = 4;
while (iarg < narg) { while (iarg < narg) {
if (strcmp(arg[iarg],"pair") == 0) { if (strcmp(arg[iarg],"pair") == 0) {
if (iarg+6 > narg) error->all(FLERR,"Illegal fix adapt/fep command"); if (iarg+6 > narg) utils::missing_cmd_args(FLERR,"fix adapt/fep pair", error);
nadapt++; nadapt++;
iarg += 6; iarg += 6;
} else if (strcmp(arg[iarg],"kspace") == 0) { } else if (strcmp(arg[iarg],"kspace") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix adapt/fep command"); if (iarg+2 > narg) utils::missing_cmd_args(FLERR,"fix adapt/fep kspace", error);
nadapt++; nadapt++;
iarg += 2; iarg += 2;
} else if (strcmp(arg[iarg],"atom") == 0) { } else if (strcmp(arg[iarg],"atom") == 0) {
if (iarg+4 > narg) error->all(FLERR,"Illegal fix adapt/fep command"); if (iarg+4 > narg) utils::missing_cmd_args(FLERR,"fix adapt/fep atom", error);
nadapt++; nadapt++;
iarg += 4; iarg += 4;
} else break; } else break;
} }
if (nadapt == 0) error->all(FLERR,"Illegal fix adapt/fep command"); if (nadapt == 0) error->all(FLERR,"Nothing to adapt in fix adapt/fep command");
adapt = new Adapt[nadapt]; adapt = new Adapt[nadapt];
// parse keywords // parse keywords
@ -136,11 +136,11 @@ FixAdaptFEP::FixAdaptFEP(LAMMPS *lmp, int narg, char **arg) :
while (iarg < narg) { while (iarg < narg) {
if (strcmp(arg[iarg],"reset") == 0) { if (strcmp(arg[iarg],"reset") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix adapt/fep command"); if (iarg+2 > narg) utils::missing_cmd_args(FLERR,"fix adapt/fep reset", error);
resetflag = utils::logical(FLERR,arg[iarg+1],false,lmp); resetflag = utils::logical(FLERR,arg[iarg+1],false,lmp);
iarg += 2; iarg += 2;
} else if (strcmp(arg[iarg],"scale") == 0) { } else if (strcmp(arg[iarg],"scale") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal fix adapt/fep command"); if (iarg+2 > narg) utils::missing_cmd_args(FLERR,"fix adapt/fep scale", error);
scaleflag = utils::logical(FLERR,arg[iarg+1],false,lmp); scaleflag = utils::logical(FLERR,arg[iarg+1],false,lmp);
iarg += 2; iarg += 2;
} else if (strcmp(arg[iarg],"after") == 0) { } else if (strcmp(arg[iarg],"after") == 0) {
@ -208,7 +208,7 @@ void FixAdaptFEP::post_constructor()
id_fix_diam = nullptr; id_fix_diam = nullptr;
id_fix_chg = nullptr; id_fix_chg = nullptr;
if (diam_flag) { if (diam_flag && atom->radius_flag) {
id_fix_diam = utils::strdup(id + std::string("_FIX_STORE_DIAM")); id_fix_diam = utils::strdup(id + std::string("_FIX_STORE_DIAM"));
fix_diam = dynamic_cast<FixStoreAtom *>( fix_diam = dynamic_cast<FixStoreAtom *>(
modify->add_fix(fmt::format("{} {} STORE/ATOM 1 0 0 1", id_fix_diam,group->names[igroup]))); modify->add_fix(fmt::format("{} {} STORE/ATOM 1 0 0 1", id_fix_diam,group->names[igroup])));
@ -226,7 +226,7 @@ void FixAdaptFEP::post_constructor()
} }
} }
if (chgflag) { if (chgflag && atom->q_flag) {
id_fix_chg = utils::strdup(id + std::string("_FIX_STORE_CHG")); id_fix_chg = utils::strdup(id + std::string("_FIX_STORE_CHG"));
fix_chg = dynamic_cast<FixStoreAtom *>( fix_chg = dynamic_cast<FixStoreAtom *>(
modify->add_fix(fmt::format("{} {} STORE/ATOM 1 0 0 1",id_fix_chg,group->names[igroup]))); modify->add_fix(fmt::format("{} {} STORE/ATOM 1 0 0 1",id_fix_chg,group->names[igroup])));
@ -267,9 +267,9 @@ void FixAdaptFEP::init()
ad->ivar = input->variable->find(ad->var); ad->ivar = input->variable->find(ad->var);
if (ad->ivar < 0) if (ad->ivar < 0)
error->all(FLERR,"Variable name for fix adapt/fep does not exist"); error->all(FLERR,"Variable name {} for fix adapt/fep does not exist", ad->var);
if (!input->variable->equalstyle(ad->ivar)) if (!input->variable->equalstyle(ad->ivar))
error->all(FLERR,"Variable for fix adapt/fep is invalid style"); error->all(FLERR,"Variable {} for fix adapt/fep is invalid style", ad->var);
if (ad->which == PAIR) { if (ad->which == PAIR) {
anypair = 1; anypair = 1;
@ -285,8 +285,9 @@ void FixAdaptFEP::init()
if (ptr == nullptr) if (ptr == nullptr)
error->all(FLERR,"Fix adapt/fep pair style param not supported"); error->all(FLERR,"Fix adapt/fep pair style param not supported");
ad->pdim = 2; if (ad->pdim != 2)
if (ad->pdim == 0) ad->scalar = (double *) ptr; error->all(FLERR,"Pair style parameter {} is not compatible with fix adapt/fep", ad->pparam);
if (ad->pdim == 2) ad->array = (double **) ptr; if (ad->pdim == 2) ad->array = (double **) ptr;
// if pair hybrid, test that ilo,ihi,jlo,jhi are valid for sub-style // if pair hybrid, test that ilo,ihi,jlo,jhi are valid for sub-style