changes to use new MDI library functions
This commit is contained in:
@ -23,7 +23,7 @@ fix 1 all nve
|
|||||||
# NPT
|
# NPT
|
||||||
#fix 1 all npt temp 1.0 1.0 0.1 iso 1.0 1.0 1.0
|
#fix 1 all npt temp 1.0 1.0 0.1 iso 1.0 1.0 1.0
|
||||||
|
|
||||||
fix 2 all mdi/aimd plugin
|
fix 2 all mdi/aimd
|
||||||
fix_modify 2 energy yes virial yes
|
fix_modify 2 energy yes virial yes
|
||||||
|
|
||||||
thermo_style custom step temp pe etotal press vol
|
thermo_style custom step temp pe etotal press vol
|
||||||
|
|||||||
@ -34,7 +34,7 @@ make lib-meam args="-m ifort" # build MEAM lib with custom Makefile.ifort (usi
|
|||||||
|
|
||||||
# settings
|
# settings
|
||||||
|
|
||||||
version = "1.3.0"
|
version = "1.3.1"
|
||||||
url = "https://github.com/MolSSI-MDI/MDI_Library/archive/v%s.tar.gz" % version
|
url = "https://github.com/MolSSI-MDI/MDI_Library/archive/v%s.tar.gz" % version
|
||||||
|
|
||||||
# known checksums for different MDI versions. used to validate the download.
|
# known checksums for different MDI versions. used to validate the download.
|
||||||
|
|||||||
@ -29,7 +29,7 @@ enum { NATIVE, REAL, METAL }; // LAMMPS units which MDI supports
|
|||||||
|
|
||||||
FixMDIAimd::FixMDIAimd(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
FixMDIAimd::FixMDIAimd(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
if (narg > 4) error->all(FLERR, "Illegal fix mdi/aimd command");
|
if (narg != 3) error->all(FLERR, "Illegal fix mdi/aimd command");
|
||||||
|
|
||||||
scalar_flag = 1;
|
scalar_flag = 1;
|
||||||
global_freq = 1;
|
global_freq = 1;
|
||||||
@ -38,16 +38,6 @@ FixMDIAimd::FixMDIAimd(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
|||||||
virial_global_flag = 1;
|
virial_global_flag = 1;
|
||||||
thermo_energy = thermo_virial = 1;
|
thermo_energy = thermo_virial = 1;
|
||||||
|
|
||||||
// check for plugin arg
|
|
||||||
|
|
||||||
plugin = 0;
|
|
||||||
if (narg == 4) {
|
|
||||||
if (strcmp(arg[3], "plugin") == 0)
|
|
||||||
plugin = 1;
|
|
||||||
else
|
|
||||||
error->all(FLERR, "Illegal fix mdi/aimd command");
|
|
||||||
}
|
|
||||||
|
|
||||||
// check requirements for LAMMPS to work with MDI as an engine
|
// check requirements for LAMMPS to work with MDI as an engine
|
||||||
|
|
||||||
if (atom->tag_enable == 0) error->all(FLERR, "Cannot use MDI engine without atom IDs");
|
if (atom->tag_enable == 0) error->all(FLERR, "Cannot use MDI engine without atom IDs");
|
||||||
@ -62,6 +52,11 @@ FixMDIAimd::FixMDIAimd(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
|||||||
if (role != MDI_DRIVER)
|
if (role != MDI_DRIVER)
|
||||||
error->all(FLERR, "Must invoke LAMMPS as an MDI driver to use fix mdi/aimd");
|
error->all(FLERR, "Must invoke LAMMPS as an MDI driver to use fix mdi/aimd");
|
||||||
|
|
||||||
|
// mdicomm will be one-time initialized in init()
|
||||||
|
// cannot be done here for a plugin library, b/c mdi plugin command is later
|
||||||
|
|
||||||
|
mdicomm = MDI_COMM_NULL;
|
||||||
|
|
||||||
// storage for all atoms
|
// storage for all atoms
|
||||||
|
|
||||||
buf3 = buf3all = nullptr;
|
buf3 = buf3all = nullptr;
|
||||||
@ -78,13 +73,6 @@ FixMDIAimd::FixMDIAimd(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
|||||||
|
|
||||||
unit_conversions();
|
unit_conversions();
|
||||||
|
|
||||||
// connect to MDI engine, only if engine is stand-alone code
|
|
||||||
|
|
||||||
if (!plugin) {
|
|
||||||
MDI_Accept_communicator(&mdicomm);
|
|
||||||
if (mdicomm <= 0) error->all(FLERR, "Unable to connect to MDI engine");
|
|
||||||
}
|
|
||||||
|
|
||||||
nprocs = comm->nprocs;
|
nprocs = comm->nprocs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +80,8 @@ FixMDIAimd::FixMDIAimd(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg)
|
|||||||
|
|
||||||
FixMDIAimd::~FixMDIAimd()
|
FixMDIAimd::~FixMDIAimd()
|
||||||
{
|
{
|
||||||
// send exit command to engine, only if engine is stand-alone code
|
// send exit command to engine if it is a stand-alone code
|
||||||
|
// for plugin, this happens in MDIPlugin::plugin_wrapper()
|
||||||
|
|
||||||
if (!plugin) {
|
if (!plugin) {
|
||||||
int ierr = MDI_Send_command("EXIT", mdicomm);
|
int ierr = MDI_Send_command("EXIT", mdicomm);
|
||||||
@ -118,6 +107,29 @@ int FixMDIAimd::setmask()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixMDIAimd::init()
|
||||||
|
{
|
||||||
|
if (mdicomm != MDI_COMM_NULL) return;
|
||||||
|
|
||||||
|
// one-time initialization of mdicomm
|
||||||
|
// plugin = 0/1 if MDI engine is a stand-alone code vs plugin library
|
||||||
|
|
||||||
|
MDI_Get_communicator(&mdicomm,0);
|
||||||
|
|
||||||
|
if (mdicomm == MDI_COMM_NULL) {
|
||||||
|
plugin = 0;
|
||||||
|
MDI_Accept_communicator(&mdicomm);
|
||||||
|
if (mdicomm <= 0) error->all(FLERR,"Unable to connect to MDI engine");
|
||||||
|
} else {
|
||||||
|
plugin = 1;
|
||||||
|
int method;
|
||||||
|
MDI_Get_method(&method,mdicomm);
|
||||||
|
if (method != MDI_PLUGIN) error->all(FLERR,"MDI internal error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixMDIAimd::setup(int vflag)
|
void FixMDIAimd::setup(int vflag)
|
||||||
{
|
{
|
||||||
post_force(vflag);
|
post_force(vflag);
|
||||||
|
|||||||
@ -27,14 +27,11 @@ namespace LAMMPS_NS {
|
|||||||
|
|
||||||
class FixMDIAimd : public Fix {
|
class FixMDIAimd : public Fix {
|
||||||
public:
|
public:
|
||||||
// MDI communicator, public so that LAMMPS can work with a plugin
|
|
||||||
|
|
||||||
MDI_Comm mdicomm;
|
|
||||||
|
|
||||||
FixMDIAimd(class LAMMPS *, int, char **);
|
FixMDIAimd(class LAMMPS *, int, char **);
|
||||||
~FixMDIAimd();
|
~FixMDIAimd();
|
||||||
int setmask();
|
int setmask();
|
||||||
|
|
||||||
|
void init();
|
||||||
void setup(int);
|
void setup(int);
|
||||||
void setup_pre_reverse(int, int);
|
void setup_pre_reverse(int, int);
|
||||||
void pre_reverse(int, int);
|
void pre_reverse(int, int);
|
||||||
@ -46,6 +43,8 @@ class FixMDIAimd : public Fix {
|
|||||||
int nprocs;
|
int nprocs;
|
||||||
int plugin;
|
int plugin;
|
||||||
|
|
||||||
|
MDI_Comm mdicomm;
|
||||||
|
|
||||||
int eflag_caller;
|
int eflag_caller;
|
||||||
double engine_energy;
|
double engine_energy;
|
||||||
int lmpunits;
|
int lmpunits;
|
||||||
|
|||||||
@ -92,11 +92,6 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
|
|||||||
strcat(plugin_args, extra_arg);
|
strcat(plugin_args, extra_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// find FixMDIAimd instance so can reset its mdicomm
|
|
||||||
// NOTE: this is a kludge - need better way to handle this
|
|
||||||
|
|
||||||
fixptr = modify->get_fix_by_style("mdi/aimd")[0];
|
|
||||||
|
|
||||||
// launch the MDI plugin library
|
// launch the MDI plugin library
|
||||||
// path for lib was specified in -mdi command-line arg when LAMMPS started
|
// path for lib was specified in -mdi command-line arg when LAMMPS started
|
||||||
// this calls back to plugin_wrapper, which must issue MDI EXIT at end
|
// this calls back to plugin_wrapper, which must issue MDI EXIT at end
|
||||||
@ -108,8 +103,7 @@ MDIPlugin::MDIPlugin(LAMMPS *_lmp, int narg, char **arg) : Pointers(_lmp)
|
|||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
callback function from MDI_Launch_plugin()
|
callback function from MDI_Launch_plugin()
|
||||||
this function must wrap entire interaction of LAMMPS as a driver
|
this function wraps entire interaction of LAMMPS driver with the plugin
|
||||||
with the plugin
|
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
|
|
||||||
int MDIPlugin::plugin_wrapper(void * /*pmpicomm*/, MDI_Comm mdicomm, void *vptr)
|
int MDIPlugin::plugin_wrapper(void * /*pmpicomm*/, MDI_Comm mdicomm, void *vptr)
|
||||||
@ -118,11 +112,6 @@ int MDIPlugin::plugin_wrapper(void * /*pmpicomm*/, MDI_Comm mdicomm, void *vptr)
|
|||||||
LAMMPS *lammps = ptr->lmp;
|
LAMMPS *lammps = ptr->lmp;
|
||||||
char *lammps_command = ptr->lammps_command;
|
char *lammps_command = ptr->lammps_command;
|
||||||
|
|
||||||
// set FixMDIAimd mdicomm to driver's mdicomm passed to this callback
|
|
||||||
|
|
||||||
auto aimdptr = dynamic_cast<FixMDIAimd *> (ptr->fixptr);
|
|
||||||
aimdptr->mdicomm = mdicomm;
|
|
||||||
|
|
||||||
// invoke the specified LAMMPS command
|
// invoke the specified LAMMPS command
|
||||||
// that operation will issue MDI commands to the plugin engine
|
// that operation will issue MDI commands to the plugin engine
|
||||||
|
|
||||||
|
|||||||
@ -25,7 +25,6 @@ class MDIPlugin : protected Pointers {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
char *lammps_command;
|
char *lammps_command;
|
||||||
class Fix *fixptr;
|
|
||||||
|
|
||||||
static int plugin_wrapper(void *, MDI_Comm, void *);
|
static int plugin_wrapper(void *, MDI_Comm, void *);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user