5#ifndef _MDSIMULATIONFACTORY_H_
6#define _MDSIMULATIONFACTORY_H_
13#define MDSIMULATIONFACTORY_DIMENSION 3
15#include "coupling/CouplingMDDefinitions.h"
16#include "coupling/configurations/MaMiCoConfiguration.h"
17#include "coupling/interface/MDSimulation.h"
18#include "coupling/interface/MamicoInterfaceProvider.h"
19#include "simplemd/configurations/MolecularDynamicsConfiguration.h"
20#include "tarch/la/ScalarOperations.h"
21#include "tarch/utils/MultiMDService.h"
24#include "coupling/interface/impl/SimpleMD/SimpleMDSolverInterface.h"
25#include "coupling/interface/impl/SimpleMD/SimpleMDLinkedCellWrapper.h"
26#define MY_LINKEDCELL coupling::interface::SimpleMDLinkedCellWrapper
27#include "coupling/interface/impl/SimpleMD/SimpleMDSimulation.h"
28#elif defined(LAMMPS_MD) || defined(LAMMPS_DPD)
30#include "coupling/interface/impl/LAMMPS/LammpsMDSimulation.h"
32#include "coupling/interface/impl/LAMMPS/LammpsDPDSimulation.h"
34#define MY_LINKEDCELL LAMMPS_NS::MamicoCell
35#elif defined(LS1_MARDYN)
36#include "coupling/interface/impl/ls1/LS1MDSimulation.h"
37#include "coupling/interface/impl/ls1/LS1MDSolverInterface.h"
38#include "coupling/interface/impl/ls1/LS1RegionWrapper.h"
39#include "coupling/interface/impl/ls1/LS1StaticCommData.h"
40#define MY_LINKEDCELL ls1::LS1RegionWrapper
42#error "No MD solver defined!"
76#
if (COUPLING_MD_PARALLEL == COUPLING_MD_YES)
82 return new coupling::interface::SimpleMDSimulation(configuration);
83#elif defined(LAMMPS_MD)
84 return new coupling::interface::LammpsMDSimulation(configuration, mamicoConfiguration
85#
if (COUPLING_MD_PARALLEL == COUPLING_MD_YES)
90#elif defined(LAMMPS_DPD)
91 return new coupling::interface::LammpsDPDSimulation(configuration, mamicoConfiguration
92#
if (COUPLING_MD_PARALLEL == COUPLING_MD_YES)
97#elif defined(LS1_MARDYN)
98 return new coupling::interface::LS1MDSimulation(configuration
99#
if (COUPLING_MD_PARALLEL == COUPLING_MD_YES)
105 std::cout <<
"ERROR MDSimulationFactory::getMDSimulation(): Unknown MD "
126#if defined(SIMPLE_MD)
130 coupling::interface::SimpleMDSimulation* simpleMDSimulation = (coupling::interface::SimpleMDSimulation*)mdSimulation;
131 if (simpleMDSimulation == NULL) {
132 std::cout <<
"ERROR MDSimulationFactory::getMDSolverInterface(): Could "
133 "not cast to SimpleMDSimulation!"
137 mdSolverInterface =
new coupling::interface::SimpleMDSolverInterface(
138 simpleMDSimulation->getBoundaryTreatment(), simpleMDSimulation->getParallelTopologyService(), simpleMDSimulation->getMoleculeService(),
139 simpleMDSimulation->getMolecularPropertiesService(), (simpleMDSimulation->getParallelTopologyService()).getLocalBoundaryInformation(),
140 configuration.getSimulationConfiguration().getDt());
142#elif defined(LAMMPS_MD)
147#elif defined(LAMMPS_DPD)
149#elif defined(LS1_MARDYN)
150 mdSolverInterface =
new coupling::interface::LS1MDSolverInterface(mamicoConfiguration.
getCouplingCellConfiguration().getCouplingCellSize(),
155 if (mdSolverInterface == NULL) {
156 std::cout <<
"ERROR MDSimulationFactory::getMDSolverInterface(): "
157 "mdSolverInterface==NULL!"
161 return mdSolverInterface;
167#if defined(SIMPLE_MD)
170 if (interface != NULL) {
174#elif defined(LAMMPS_MD)
176#elif defined(LAMMPS_DPD)
178#elif defined(LS1_MARDYN)
181 if (interface != NULL) {
parses all sub-tags for MaMiCo configuration.
Definition MaMiCoConfiguration.h:31
const coupling::configurations::CouplingCellConfiguration< dim > & getCouplingCellConfiguration() const
Definition MaMiCoConfiguration.h:68
generic interface class for different microscopic (MD) solvers.
Definition MDSimulation.h:11
interface to the MD simulation
Definition MDSolverInterface.h:25
a singleton which returns and stores the interface implementations.
Definition MamicoInterfaceProvider.h:24
void setMDSolverInterface(coupling::interface::MDSolverInterface< LinkedCell, dim > *mdSolverInterface)
Definition MamicoInterfaceProvider.h:48
coupling::interface::MDSolverInterface< LinkedCell, dim > * getMDSolverInterface()
Definition MamicoInterfaceProvider.h:53
static MamicoInterfaceProvider & getInstance()
Definition MamicoInterfaceProvider.h:28
~SimulationAndInterfaceFactory()
Definition MDSimulationFactory.h:196
static SimulationAndInterfaceFactory & getInstance()
Definition MDSimulationFactory.h:62
SimulationAndInterfaceFactory()
Definition MDSimulationFactory.h:192
void shutdownMDSolverInterface()
Definition MDSimulationFactory.h:166
coupling::interface::MDSolverInterface< MY_LINKEDCELL, MDSIMULATIONFACTORY_DIMENSION > * getMDSolverInterface(const simplemd::configurations::MolecularDynamicsConfiguration &configuration, const coupling::configurations::MaMiCoConfiguration< MDSIMULATIONFACTORY_DIMENSION > &mamicoConfiguration, coupling::interface::MDSimulation *mdSimulation)
Definition MDSimulationFactory.h:122
coupling::interface::MDSimulation * getMDSimulation(const simplemd::configurations::MolecularDynamicsConfiguration &configuration, const coupling::configurations::MaMiCoConfiguration< MDSIMULATIONFACTORY_DIMENSION > &mamicoConfiguration, MPI_Comm localComm)
Definition MDSimulationFactory.h:74
everything necessary for coupling operations, is defined in here
Definition AdditiveMomentumInsertion.h:15