updates to use new funcs from Python as well

This commit is contained in:
Steve Plimpton
2022-04-14 10:49:12 -06:00
parent bc2b600f09
commit 5c70f45feb
2 changed files with 35 additions and 12 deletions

View File

@ -290,22 +290,42 @@ if not mdiarg: error()
# world = MPI communicator for just this driver # world = MPI communicator for just this driver
# invoke perform_tasks() directly # invoke perform_tasks() directly
if not plugin: #if not plugin:
mdi.MDI_Init(mdiarg) # mdi.MDI_Init(mdiarg)
world = mdi.MDI_MPI_get_world_comm() # world = mdi.MDI_MPI_get_world_comm()
# connect to engine # connect to engine
mdicomm = mdi.MDI_Accept_Communicator() # mdicomm = mdi.MDI_Accept_Communicator()
perform_tasks(world,mdicomm,None) # perform_tasks(world,mdicomm,None)
# LAMMPS engine is a plugin library # LAMMPS engine is a plugin library
# launch plugin # launch plugin
# MDI will call back to perform_tasks() # MDI will call back to perform_tasks()
if plugin: #if plugin:
mdi.MDI_Init(mdiarg) # mdi.MDI_Init(mdiarg)
# world = MPI.COMM_WORLD
# plugin_args += " -mdi \"-role ENGINE -name lammps -method LINK\""
# mdi.MDI_Launch_plugin(plugin,plugin_args,world,perform_tasks,None)
# new code to auto-detect whether engine is stand-alone code or plugin library
mdi.MDI_Init(mdiarg)
mdicomm = mdi.MDI_Get_communicator(0)
if mdicomm == mdi.MDI_COMM_NULL:
world = mdi.MDI_MPI_get_world_comm()
mdicomm = mdi.MDI_Accept_Communicator()
if mdicomm == mdi.MDI_COMM_NULL:
error("MDI unable to connect to stand-alone engine")
perform_tasks(world,mdicomm,None)
else:
world = MPI.COMM_WORLD world = MPI.COMM_WORLD
method = mdi.MDI_Get_method(mdicomm)
if method != mdi.MDI_PLUGIN:
error("MDI internal error for plugin engine")
plugin_args += " -mdi \"-role ENGINE -name lammps -method LINK\"" plugin_args += " -mdi \"-role ENGINE -name lammps -method LINK\""
mdi.MDI_Launch_plugin(plugin,plugin_args,world,perform_tasks,None) mdi.MDI_Launch_plugin(plugin,plugin_args,world,perform_tasks,None)

View File

@ -110,21 +110,24 @@ int FixMDIAimd::setmask()
void FixMDIAimd::init() void FixMDIAimd::init()
{ {
if (mdicomm != MDI_COMM_NULL) return; if (mdicomm != MDI_COMM_NULL) return;
// one-time initialization of mdicomm // one-time auto-detect whether engine is stand-alone code or plugin library
// plugin = 0/1 if MDI engine is a stand-alone code vs plugin library // also initializes mdicomm
// plugin = 0/1 for engine = stand-alone code vs plugin library
MDI_Get_communicator(&mdicomm,0); MDI_Get_communicator(&mdicomm,0);
if (mdicomm == MDI_COMM_NULL) { if (mdicomm == MDI_COMM_NULL) {
plugin = 0; plugin = 0;
MDI_Accept_communicator(&mdicomm); MDI_Accept_communicator(&mdicomm);
if (mdicomm <= 0) error->all(FLERR,"Unable to connect to MDI engine"); if (mdicomm == MDI_COMM_NULL)
error->all(FLERR,"MDI unable to connect to stand-alone engine");
} else { } else {
plugin = 1; plugin = 1;
int method; int method;
MDI_Get_method(&method,mdicomm); MDI_Get_method(&method,mdicomm);
if (method != MDI_PLUGIN) error->all(FLERR,"MDI internal error"); if (method != MDI_PLUGIN)
error->all(FLERR,"MDI internal error for plugin engine");
} }
} }