Simpatico  v1.10
ddMd/potentials/external/ExternalFactory.cpp
1 /*
2 * Simpatico - Simulation Package for Polymeric and Molecular Liquids
3 *
4 * Copyright 2010 - 2017, The Regents of the University of Minnesota
5 * Distributed under the terms of the GNU General Public License.
6 */
7 
8 #include <ddMd/potentials/external/ExternalFactory.h>
9 #include <ddMd/simulation/Simulation.h>
10 
11 // ExternalPotential interface and implementation classes
12 #include <ddMd/potentials/external/ExternalPotential.h>
13 #include <ddMd/potentials/external/ExternalPotentialImpl.h>
14 
15 // External interaction classes
16 #include <simp/interaction/external/BoxExternal.h>
17 #include <simp/interaction/external/OrthoBoxExternal.h>
18 #include <simp/interaction/external/OrthoBoxExternal.h>
19 #include <simp/interaction/external/SlitExternal.h>
20 #include <simp/interaction/external/LamellarOrderingExternal.h>
21 #include <simp/interaction/external/SimplePeriodicExternal.h>
22 #include <simp/interaction/external/PeriodicExternal.h>
23 #include <simp/interaction/external/GeneralPeriodicExternal.h>
24 #include <simp/interaction/external/NucleationExternal.h>
25 
26 namespace DdMd
27 {
28 
29  using namespace Simp;
30 
36  simulationPtr_(&simulation)
37  {}
38 
39  /*
40  * Return a pointer to a new ExternalPotential, if possible.
41  */
43  ExternalFactory::factory(const std::string& name) const
44  {
45  ExternalPotential* ptr = 0;
46 
47  // Try subfactories first.
48  ptr = trySubfactories(name);
49  if (ptr) return ptr;
50 
51  if (name == "BoxExternal") {
52  ptr = new ExternalPotentialImpl<BoxExternal>(*simulationPtr_);
53  } else
54  if (name == "OrthoBoxExternal") {
55  ptr = new ExternalPotentialImpl<OrthoBoxExternal>(*simulationPtr_);
56  } else
57  if (name == "SlitExternal") {
58  ptr = new ExternalPotentialImpl<SlitExternal>(*simulationPtr_);
59  } else
60  if (name == "LamellarOrderingExternal") {
61  ptr = new ExternalPotentialImpl<LamellarOrderingExternal>(*simulationPtr_);
62  } else
63  if (name == "SimplePeriodicExternal") {
64  ptr = new ExternalPotentialImpl<SimplePeriodicExternal>(*simulationPtr_);
65  } else
66  if (name == "PeriodicExternal") {
67  ptr = new ExternalPotentialImpl<PeriodicExternal>(*simulationPtr_);
68  } else
69  if (name == "GeneralPeriodicExternal") {
70  ptr = new ExternalPotentialImpl<GeneralPeriodicExternal>(*simulationPtr_);
71  } else
72  if (name == "NucleationExternal") {
73  ptr = new ExternalPotentialImpl<NucleationExternal>(*simulationPtr_);
74  }
75  return ptr;
76  }
77 
78 }
Implementation template for a ExternalPotential.
ExternalPotential * factory(const std::string &subclass) const
Return a pointer to a new ExternalInteration, if possible.
Calculates external forces and energies for a parent Simulation.
Parallel domain decomposition (DD) MD simulation.
Classes used by all simpatico molecular simulations.
Main object for a domain-decomposition MD simulation.
ExternalPotential * trySubfactories(const std::string &className) const
Search through subfactories for match.
Factory template.
Definition: Factory.h:32
ExternalFactory(Simulation &simulation)
Default constructor.