OpenMD 3.0
Molecular Dynamics in the Open
Loading...
Searching...
No Matches
NonBondedInteractionType.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2004-present, The University of Notre Dame. All rights
3 * reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 *
31 * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your
32 * research, please cite the appropriate papers when you publish your
33 * work. Good starting points are:
34 *
35 * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
36 * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
37 * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008).
38 * [4] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
39 * [5] Kuang & Gezelter, Mol. Phys., 110, 691-701 (2012).
40 * [6] Lamichhane, Gezelter & Newman, J. Chem. Phys. 141, 134109 (2014).
41 * [7] Lamichhane, Newman & Gezelter, J. Chem. Phys. 141, 134110 (2014).
42 * [8] Bhattarai, Newman & Gezelter, Phys. Rev. B 99, 094106 (2019).
43 */
44
45/**
46 * @file NonBondedInteractionType.hpp
47 * @author gezelter
48 * @date 07/04/2007
49 * @version 1.0
50 */
51
52#ifndef TYPES_NONBONDEDINTERACTIONTYPE_HPP
53#define TYPES_NONBONDEDINTERACTIONTYPE_HPP
54
55#include <memory>
56
57#include "types/AtomType.hpp"
58
59namespace OpenMD {
60
61 typedef struct {
62 bool is_LennardJones;
63 bool is_Morse;
64 bool is_MAW;
65 bool is_EAMTable;
66 bool is_EAMZhou;
67 bool is_EAMOxides;
68 bool is_SC;
69 bool is_RepulsivePower;
70 bool is_Mie;
71 bool is_Buckingham;
72 bool is_InversePowerSeries;
74
75 /**
76 * @class NonBondedInteractionType
77 *
78 * NonBondedInteractionType class is responsible for keeping track
79 * of static (unchanging) parameters for explicit non-bonded
80 * interactions.
81 */
83 public:
85 virtual ~NonBondedInteractionType() {};
86
87 void setLennardJones();
88 bool isLennardJones();
89 void setMorse();
90 bool isMorse();
91 void setMAW();
92 bool isMAW();
93 void setEAMTable();
94 bool isEAMTable();
95 void setEAMZhou();
96 bool isEAMZhou();
97 void setEAMOxides();
98 bool isEAMOxides();
99 bool isSC();
100 void setSC();
101 bool isMetal();
102 void setRepulsivePower();
103 bool isRepulsivePower();
104 void setMie();
105 bool isMie();
106 void setBuckingham();
107 bool isBuckingham();
108 void setInversePowerSeries();
109 bool isInversePowerSeries();
110
111 void setAtomTypes(std::pair<AtomType*, AtomType*> ats);
112 std::pair<AtomType*, AtomType*> getAtomTypes();
113
114 // below functions are just forward functions
115 /**
116 * Adds property into property map
117 * @param genData GenericData to be added into PropertyMap
118 */
119 void addProperty(std::shared_ptr<GenericData> genData);
120
121 /**
122 * Removes property from PropertyMap by name
123 * @param propName the name of property to be removed
124 */
125 void removeProperty(const std::string& propName);
126
127 /**
128 * Returns all names of properties
129 * @return all names of properties
130 */
131 std::vector<std::string> getPropertyNames();
132
133 /**
134 * Returns all of the properties in PropertyMap
135 * @return all of the properties in PropertyMap
136 */
137 std::vector<std::shared_ptr<GenericData>> getProperties();
138
139 /**
140 * Returns property
141 * @param propName name of property
142 * @return a pointer point to property with propName. If no
143 * property named propName exists, return NULL
144 */
145 std::shared_ptr<GenericData> getPropertyByName(const std::string& propName);
146
147 protected:
149 std::pair<AtomType*, AtomType*> atomTypes_;
150
151 private:
152 // prevent copy construction and copy assignment, since property
153 // map contains pointers which can not be copied and managed
154 // safely, except make the generic data at PropertyMap as copy on
155 // write shared pointer
158 PropertyMap properties_;
159 };
160} // namespace OpenMD
161
162#endif // TYPES_NONBONDEDINTERACTIONTYPE_HPP
NonBondedInteractionType class is responsible for keeping track of static (unchanging) parameters for...
void addProperty(std::shared_ptr< GenericData > genData)
Adds property into property map.
void removeProperty(const std::string &propName)
Removes property from PropertyMap by name.
std::vector< std::string > getPropertyNames()
Returns all names of properties.
std::shared_ptr< GenericData > getPropertyByName(const std::string &propName)
Returns property.
std::vector< std::shared_ptr< GenericData > > getProperties()
Returns all of the properties in PropertyMap.
PropertyMap class maintains a list of GenericData.
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.