# | Line 43 | Line 43 | |
---|---|---|
43 | #include "UseTheForce/DUFF.hpp" | |
44 | #include "UseTheForce/DarkSide/lj_interface.h" | |
45 | #include "UseTheForce/DarkSide/sticky_interface.h" | |
46 | + | #include "UseTheForce/DarkSide/gb_interface.h" |
47 | #include "UseTheForce/ForceFieldFactory.hpp" | |
48 | + | #include "io/BaseAtomTypesSectionParser.hpp" |
49 | #include "io/DirectionalAtomTypesSectionParser.hpp" | |
50 | + | #include "io/BaseAtomTypesSectionParser.hpp" |
51 | #include "io/AtomTypesSectionParser.hpp" | |
52 | + | #include "io/BaseAtomTypesSectionParser.hpp" |
53 | #include "io/LennardJonesAtomTypesSectionParser.hpp" | |
54 | < | #include "io/ElectrostaticAtomTypesSectionParser.hpp" |
54 | > | #include "io/ChargeAtomTypesSectionParser.hpp" |
55 | > | #include "io/MultipoleAtomTypesSectionParser.hpp" |
56 | #include "io/StickyAtomTypesSectionParser.hpp" | |
57 | + | #include "io/StickyPowerAtomTypesSectionParser.hpp" |
58 | + | #include "io/GayBerneAtomTypesSectionParser.hpp" |
59 | #include "io/BondTypesSectionParser.hpp" | |
60 | #include "io/BendTypesSectionParser.hpp" | |
61 | #include "io/TorsionTypesSectionParser.hpp" | |
62 | + | #include "io/OptionSectionParser.hpp" |
63 | #include "UseTheForce/ForceFieldCreator.hpp" | |
64 | ||
65 | namespace oopse { | |
66 | ||
67 | < | DUFF::DUFF(){ |
67 | > | DUFF::DUFF(){ |
68 | ||
69 | //set default force field filename | |
70 | setForceFieldFileName("DUFF2.frc"); | |
71 | ||
72 | < | //the order of adding section parsers are important |
73 | < | //DirectionalAtomTypesSectionParser should be added before AtomTypesSectionParser Since |
74 | < | //These two section parsers will actually create "real" AtomTypes (AtomTypesSectionParser will create |
75 | < | //AtomType and DirectionalAtomTypesSectionParser will creat DirectionalAtomType which is a subclass |
76 | < | //of AtomType, therefore it should come first). Other AtomTypes Section Parser will not create the |
77 | < | //"real" AtomType, they only add and set some attribute of the AtomType. Thus their order are not |
78 | < | //important. AtomTypesSectionParser should be added before other atom type section parsers. |
79 | < | //Make sure they are added after DirectionalAtomTypesSectionParser and AtomTypesSectionParser. |
80 | < | //The order of BondTypesSectionParser, BendTypesSectionParser and TorsionTypesSectionParser are |
81 | < | //not important. |
82 | < | spMan_.push_back(new DirectionalAtomTypesSectionParser()); |
72 | > | //The order of adding section parsers is important. |
73 | > | //OptionSectionParser must come first to set options for other parsers |
74 | > | //DirectionalAtomTypesSectionParser should be added before |
75 | > | //AtomTypesSectionParser, and these two section parsers will actually |
76 | > | //create "real" AtomTypes (AtomTypesSectionParser will create AtomType and |
77 | > | //DirectionalAtomTypesSectionParser will create DirectionalAtomType, which |
78 | > | //is a subclass of AtomType and should come first). Other AtomTypes Section |
79 | > | //Parser will not create the "real" AtomType, they only add and set some |
80 | > | //attribute of the AtomType. Thus their order are not important. |
81 | > | //AtomTypesSectionParser should be added before other atom type section |
82 | > | //parsers. Make sure they are added after DirectionalAtomTypesSectionParser |
83 | > | //and AtomTypesSectionParser. The order of BondTypesSectionParser, |
84 | > | //BendTypesSectionParser and TorsionTypesSectionParser are not important. |
85 | > | spMan_.push_back(new OptionSectionParser(forceFieldOptions_)); |
86 | > | spMan_.push_back(new DirectionalAtomTypesSectionParser(forceFieldOptions_)); |
87 | > | spMan_.push_back(new BaseAtomTypesSectionParser()); |
88 | spMan_.push_back(new AtomTypesSectionParser()); | |
89 | < | spMan_.push_back(new LennardJonesAtomTypesSectionParser()); |
90 | < | spMan_.push_back(new ElectrostaticAtomTypesSectionParser()); |
91 | < | spMan_.push_back(new StickyAtomTypesSectionParser()); |
92 | < | spMan_.push_back(new BondTypesSectionParser()); |
93 | < | spMan_.push_back(new BendTypesSectionParser()); |
94 | < | spMan_.push_back(new TorsionTypesSectionParser()); |
89 | > | spMan_.push_back(new LennardJonesAtomTypesSectionParser(forceFieldOptions_)); |
90 | > | spMan_.push_back(new ChargeAtomTypesSectionParser(forceFieldOptions_)); |
91 | > | spMan_.push_back(new MultipoleAtomTypesSectionParser(forceFieldOptions_)); |
92 | > | spMan_.push_back(new StickyAtomTypesSectionParser(forceFieldOptions_)); |
93 | > | spMan_.push_back(new StickyPowerAtomTypesSectionParser(forceFieldOptions_)); |
94 | > | spMan_.push_back(new GayBerneAtomTypesSectionParser(forceFieldOptions_)); |
95 | > | spMan_.push_back(new BondTypesSectionParser(forceFieldOptions_)); |
96 | > | spMan_.push_back(new BendTypesSectionParser(forceFieldOptions_)); |
97 | > | spMan_.push_back(new TorsionTypesSectionParser(forceFieldOptions_)); |
98 | ||
99 | < | } |
99 | > | } |
100 | ||
101 | < | void DUFF::parse(const std::string& filename) { |
101 | > | void DUFF::parse(const std::string& filename) { |
102 | ifstrstream* ffStream; | |
103 | + | bool hasGBtypes; |
104 | + | |
105 | ffStream = openForceFieldFile(filename); | |
106 | ||
107 | spMan_.parse(*ffStream, *this); | |
# | Line 91 | Line 109 | void DUFF::parse(const std::string& filename) { | |
109 | ForceField::AtomTypeContainer::MapTypeIterator i; | |
110 | AtomType* at; | |
111 | ||
112 | < | for (at = atomTypeCont_.beginType(i); at != NULL; at = atomTypeCont_.nextType(i)) { |
113 | < | at->makeFortranAtomType(); |
112 | > | for (at = atomTypeCont_.beginType(i); at != NULL; |
113 | > | at = atomTypeCont_.nextType(i)) { |
114 | > | at->makeFortranAtomType(); |
115 | } | |
116 | ||
117 | < | for (at = atomTypeCont_.beginType(i); at != NULL; at = atomTypeCont_.nextType(i)) { |
118 | < | at->complete(); |
117 | > | for (at = atomTypeCont_.beginType(i); at != NULL; |
118 | > | at = atomTypeCont_.nextType(i)) { |
119 | > | at->complete(); |
120 | } | |
121 | + | |
122 | + | hasGBtypes = false; |
123 | + | for (at = atomTypeCont_.beginType(i); at != NULL; |
124 | + | at = atomTypeCont_.nextType(i)) { |
125 | + | if (at->isGayBerne()) |
126 | + | hasGBtypes = true; |
127 | + | } |
128 | ||
129 | < | } |
129 | > | int isError = 0; |
130 | ||
131 | + | if (hasGBtypes) { |
132 | + | completeGBFF(&isError); |
133 | + | } |
134 | + | |
135 | + | delete ffStream; |
136 | + | |
137 | + | } |
138 | + | |
139 | + | DUFF::~DUFF(){ |
140 | + | destroyLJTypes(); |
141 | + | destroyStickyTypes(); |
142 | + | destroyGayBerneTypes(); |
143 | + | } |
144 | } //end namespace oopse |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |