OpenMD
3.2
Molecular Dynamics in the Open
Toggle main menu visibility
Loading...
Searching...
No Matches
ForceField.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 following paper when you publish your work:
33
*
34
* [1] Drisko et al., J. Open Source Softw. 9, 7004 (2024).
35
*
36
* Good starting points for code and simulation methodology are:
37
*
38
* [2] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
39
* [3] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
40
* [4] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008).
41
* [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
42
* [6] Kuang & Gezelter, Mol. Phys., 110, 691-701 (2012).
43
* [7] Lamichhane, Gezelter & Newman, J. Chem. Phys. 141, 134109 (2014).
44
* [8] Bhattarai, Newman & Gezelter, Phys. Rev. B 99, 094106 (2019).
45
* [9] Drisko & Gezelter, J. Chem. Theory Comput. 20, 4986-4997 (2024).
46
*/
47
48
/**
49
* @file ForceField.hpp
50
* @author tlin
51
* @date 11/04/2004
52
* @version 1.0
53
*/
54
55
#ifndef USETHEFORCE_FORCEFIELD_HPP
56
#define USETHEFORCE_FORCEFIELD_HPP
57
58
#include <config.h>
59
60
#include <string>
61
#include <utility>
62
#include <vector>
63
64
#include "io/ForceFieldOptions.hpp"
65
#include "io/SectionParserManager.hpp"
66
#include "
io/ifstrstream.hpp
"
67
#include "types/AtomType.hpp"
68
#include "
types/BendType.hpp
"
69
#include "
types/BondType.hpp
"
70
#include "
types/InversionType.hpp
"
71
#include "
types/NonBondedInteractionType.hpp
"
72
#include "
types/TorsionType.hpp
"
73
#include "
utils/TypeContainer.hpp
"
74
75
namespace
OpenMD
{
76
77
class
ForceField
{
78
public
:
79
using
AtomTypeContainer =
TypeContainer<AtomType, 1>
;
80
using
BondTypeContainer =
TypeContainer<BondType, 2>
;
81
using
BendTypeContainer =
TypeContainer<BendType, 3>
;
82
using
TorsionTypeContainer =
TypeContainer<TorsionType, 4>
;
83
using
InversionTypeContainer =
TypeContainer<InversionType, 4>
;
84
using
NonBondedInteractionTypeContainer =
85
TypeContainer<NonBondedInteractionType, 2>
;
86
87
ForceField
(std::string ffName);
88
89
virtual
~ForceField
() =
default
;
90
91
std::string getForceFieldFileName() {
return
forceFieldFileName_; }
92
93
void
setForceFieldFileName(
const
std::string& filename) {
94
forceFieldFileName_ = filename;
95
}
96
97
virtual
void
parse(
const
std::string& filename);
98
99
AtomType
*
getAtomType
(
const
std::string& at);
100
AtomType
*
getAtomType
(
int
ident);
101
BondType
* getBondType(
const
std::string& at1,
const
std::string& at2);
102
BendType
* getBendType(
const
std::string& at1,
const
std::string& at2,
103
const
std::string& at3);
104
TorsionType
* getTorsionType(
const
std::string& at1,
const
std::string& at2,
105
const
std::string& at3,
const
std::string& at4);
106
InversionType
* getInversionType(
const
std::string& at1,
107
const
std::string& at2,
108
const
std::string& at3,
109
const
std::string& at4);
110
NonBondedInteractionType
* getNonBondedInteractionType(
111
const
std::string& at1,
const
std::string& at2);
112
113
BondType
* getExactBondType(
const
std::string& at1,
const
std::string& at2);
114
BendType
* getExactBendType(
const
std::string& at1,
const
std::string& at2,
115
const
std::string& at3);
116
TorsionType
* getExactTorsionType(
const
std::string& at1,
117
const
std::string& at2,
118
const
std::string& at3,
119
const
std::string& at4);
120
InversionType
* getExactInversionType(
const
std::string& at1,
121
const
std::string& at2,
122
const
std::string& at3,
123
const
std::string& at4);
124
NonBondedInteractionType
* getExactNonBondedInteractionType(
125
const
std::string& at1,
const
std::string& at2);
126
127
// avoid make virtual function public
128
// Herb Sutter and Andrei Alexandrescu, C++ coding Standards,
129
// Addision-Wesley
130
virtual
RealType getRcutFromAtomType(
AtomType
* at);
131
132
std::string getWildCard() {
return
wildCardAtomTypeName_; }
133
134
void
setWildCard(
const
std::string& wildCard) {
135
wildCardAtomTypeName_ = wildCard;
136
}
137
138
size_t
getNAtomType() {
return
atomTypeCont_.size(); }
139
140
AtomTypeContainer* getAtomTypes() {
return
&atomTypeCont_; }
141
142
NonBondedInteractionTypeContainer* getNonBondedInteractionTypes() {
143
return
&nonBondedInteractionTypeCont_;
144
}
145
146
bool
addAtomType(
const
std::string& at,
AtomType
* atomType);
147
148
bool
replaceAtomType(
const
std::string& at,
AtomType
* atomType);
149
150
bool
addBondType(
const
std::string& at1,
const
std::string& at2,
151
BondType
* bondType);
152
153
bool
addBendType(
const
std::string& at1,
const
std::string& at2,
154
const
std::string& at3,
BendType
* bendType);
155
156
bool
addTorsionType(
const
std::string& at1,
const
std::string& at2,
157
const
std::string& at3,
const
std::string& at4,
158
TorsionType
* torsionType);
159
160
bool
addInversionType(
const
std::string& at1,
const
std::string& at2,
161
const
std::string& at3,
const
std::string& at4,
162
InversionType
* inversionType);
163
164
bool
addNonBondedInteractionType(
const
std::string& at1,
165
const
std::string& at2,
166
NonBondedInteractionType
* nbiType);
167
168
ifstrstream
* openForceFieldFile(
const
std::string& filename);
169
170
ForceFieldOptions
& getForceFieldOptions() {
return
forceFieldOptions_; }
171
172
protected
:
173
AtomTypeContainer atomTypeCont_;
174
BondTypeContainer bondTypeCont_;
175
BendTypeContainer bendTypeCont_;
176
TorsionTypeContainer torsionTypeCont_;
177
InversionTypeContainer inversionTypeCont_;
178
NonBondedInteractionTypeContainer nonBondedInteractionTypeCont_;
179
ForceFieldOptions
forceFieldOptions_;
180
std::map<int, std::string> atypeIdentToName;
181
SectionParserManager
spMan_;
182
183
private
:
184
std::string ffPath_;
185
std::string wildCardAtomTypeName_;
186
std::string forceFieldFileName_;
187
};
188
}
// namespace OpenMD
189
190
#endif
BendType.hpp
BondType.hpp
InversionType.hpp
NonBondedInteractionType.hpp
TorsionType.hpp
TypeContainer.hpp
OpenMD::AtomType
AtomType is what OpenMD looks to for unchanging data about an atom.
Definition
AtomType.hpp:69
OpenMD::BendType
Definition
BendType.hpp:65
OpenMD::BondType
BondType class is responsible for calculating the force and energy of the bond.
Definition
BondType.hpp:67
OpenMD::ForceField::ForceField
ForceField(std::string ffName)
Definition
ForceField.cpp:90
OpenMD::ForceField::getAtomType
AtomType * getAtomType(const std::string &at)
getAtomType by string
Definition
ForceField.cpp:186
OpenMD::ForceFieldOptions
Definition
ForceFieldOptions.hpp:59
OpenMD::InversionType
Definition
InversionType.hpp:72
OpenMD::NonBondedInteractionType
NonBondedInteractionType class is responsible for keeping track of static (unchanging) parameters for...
Definition
NonBondedInteractionType.hpp:85
OpenMD::SectionParserManager
"io/SectionParserManager.hpp" SectionParserManager maintains a priority list
Definition
SectionParserManager.hpp:81
OpenMD::TorsionType
Definition
TorsionType.hpp:65
OpenMD::TypeContainer
Definition
TypeContainer.hpp:72
OpenMD::ifstrstream
ifstrstream class provides a stream interface to read data from files.
Definition
ifstrstream.hpp:86
ifstrstream.hpp
OpenMD
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.
Definition
ActionCorrFunc.cpp:63
brains
ForceField.hpp
Generated on
for OpenMD by
1.17.0