Changes in src/Parser/MpqcParser.cpp [ee50c1:3bdb6d]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/MpqcParser.cpp
ree50c1 r3bdb6d 29 29 #include "atom.hpp" 30 30 #include "config.hpp" 31 #include " element.hpp"31 #include "Element/element.hpp" 32 32 #include "molecule.hpp" 33 33 #include "CodePatterns/Log.hpp" … … 35 35 #include "CodePatterns/Verbose.hpp" 36 36 #include "LinearAlgebra/Vector.hpp" 37 #include " periodentafel.hpp"37 #include "Element/periodentafel.hpp" 38 38 #include "World.hpp" 39 39 40 // declare specialized static variables41 const std::string FormatParserTrait<mpqc>::name = "mpqc";42 const std::string FormatParserTrait<mpqc>::suffix = "in";43 const ParserTypes FormatParserTrait<mpqc>::type = mpqc;44 45 // a converter we often need46 ConvertTo<bool> FormatParser<mpqc>::Converter;47 40 48 41 /** Constructor of MpqcParser. 49 42 * 50 43 */ 51 FormatParser< mpqc >::FormatParser() : 52 FormatParser_common(new MpqcParser_Parameters()) 53 {} 44 MpqcParser::MpqcParser() 45 { 46 parameters = new MpqcParser_Parameters(); 47 } 54 48 55 49 /** Destructor of MpqcParser. 56 50 * 57 51 */ 58 FormatParser< mpqc >::~FormatParser() 59 {} 52 MpqcParser::~MpqcParser() 53 { 54 delete parameters; 55 } 60 56 61 57 /** Load an MPQC config file into the World. 62 58 * \param *file input stream 63 59 */ 64 void FormatParser< mpqc >::load(istream *file)60 void MpqcParser::load(istream *file) 65 61 { 66 62 bool MpqcSection = false; … … 100 96 tokenizer::iterator tok_iter = tokens.begin(); 101 97 ASSERT(tok_iter != tokens.end(), 102 " FormatParser< mpqc >::load() - missing token for MoleculeSection in line "+linestring+"!");98 "MpqcParser::load() - missing token for MoleculeSection in line "+linestring+"!"); 103 99 std::stringstream whitespacefilter(*tok_iter++); 104 100 std::string element; 105 101 whitespacefilter >> ws >> element; 106 102 ASSERT(tok_iter != tokens.end(), 107 " FormatParser< mpqc >::load() - missing token for MoleculeSection in line "+linestring+"!");103 "MpqcParser::load() - missing token for MoleculeSection in line "+linestring+"!"); 108 104 std::string vector = *tok_iter; 109 105 tokenizer vectorcomponents(vector, whitesep); … … 129 125 ++tok_iter; 130 126 ASSERT(tok_iter != tokens.end(), 131 " FormatParser< mpqc >::load() - missing token in brackets<> for mole< in line "+linestring+"!");127 "MpqcParser::load() - missing token in brackets<> for mole< in line "+linestring+"!"); 132 128 std::string value(*tok_iter); 133 129 std::stringstream linestream("theory = "+value); … … 138 134 ++tok_iter; 139 135 ASSERT(tok_iter != tokens.end(), 140 " FormatParser< mpqc >::load() - missing token in brackets<> for integrals< in line "+linestring+"!");136 "MpqcParser::load() - missing token in brackets<> for integrals< in line "+linestring+"!"); 141 137 std::string value(*tok_iter); 142 138 std::stringstream linestream("integration = "+value); … … 147 143 tokenizer::iterator tok_iter = tokens.begin(); 148 144 ASSERT(tok_iter != tokens.end(), 149 " FormatParser< mpqc >::load() - missing token before '=' for MpqcSection in line "+linestring+"!");145 "MpqcParser::load() - missing token before '=' for MpqcSection in line "+linestring+"!"); 150 146 std::stringstream whitespacefilter(*tok_iter); 151 147 std::string key; 152 148 whitespacefilter >> ws >> key; 153 if (getParams().haveParam eter(key)) {149 if (getParams().haveParam(key)) { 154 150 std::stringstream linestream(linestring); 155 151 linestream >> getParams(); … … 163 159 tokenizer::iterator tok_iter = tokens.begin(); 164 160 ASSERT(tok_iter != tokens.end(), 165 " FormatParser< mpqc >::load() - missing token for BasisSection in line "+linestring+"!");161 "MpqcParser::load() - missing token for BasisSection in line "+linestring+"!"); 166 162 std::string key(*tok_iter++); 167 163 ASSERT(tok_iter != tokens.end(), 168 " FormatParser< mpqc >::load() - missing value for BasisSection after key "+key+" in line "+linestring+"!");164 "MpqcParser::load() - missing value for BasisSection after key "+key+" in line "+linestring+"!"); 169 165 std::string value(*tok_iter); 170 166 tok_iter++; 171 167 // TODO: use exception instead of ASSERT 172 168 ASSERT(tok_iter == tokens.end(), 173 " FormatParser< mpqc >::load() - more than (key = value) on line "+linestring+".");169 "MpqcParser::load() - more than (key = value) on line "+linestring+"."); 174 170 if (key == "name") { 175 171 std::stringstream linestream("basis = "+value); … … 181 177 tokenizer::iterator tok_iter = tokens.begin(); 182 178 ASSERT(tok_iter != tokens.end(), 183 " FormatParser< mpqc >::load() - missing token for AuxBasisSection in line "+linestring+"!");179 "MpqcParser::load() - missing token for AuxBasisSection in line "+linestring+"!"); 184 180 std::string key(*tok_iter++); 185 181 ASSERT(tok_iter != tokens.end(), 186 " FormatParser< mpqc >::load() - missing value for BasisSection after key "+key+" in line "+linestring+"!");182 "MpqcParser::load() - missing value for BasisSection after key "+key+" in line "+linestring+"!"); 187 183 std::string value(*tok_iter); 188 184 tok_iter++; 189 185 // TODO: use exception instead of ASSERT 190 186 ASSERT(tok_iter == tokens.end(), 191 " FormatParser< mpqc >::load() - more than (key = value) on line "+linestring+".");187 "MpqcParser::load() - more than (key = value) on line "+linestring+"."); 192 188 if (key == "name") { 193 189 std::stringstream linestream("aux_basis = "+value); … … 220 216 * \param atoms atoms to store 221 217 */ 222 void FormatParser< mpqc >::save(ostream *file, const std::vector<atom *> &atoms)218 void MpqcParser::save(ostream *file, const std::vector<atom *> &atoms) 223 219 { 224 220 Vector center; … … 236 232 *file << "% Created by MoleCuilder" << endl; 237 233 *file << "mpqc: (" << endl; 238 *file << "\tsavestate = " << getParams().get Parameter(MpqcParser_Parameters::savestateParam) << endl;239 *file << "\tdo_gradient = " << getParams().get Parameter(MpqcParser_Parameters::do_gradientParam) << endl;240 if ( Converter(getParams().getParameter(MpqcParser_Parameters::hessianParam))) {234 *file << "\tsavestate = " << getParams().getString(MpqcParser_Parameters::savestateParam) << endl; 235 *file << "\tdo_gradient = " << getParams().getString(MpqcParser_Parameters::do_gradientParam) << endl; 236 if (getParams().getBool(MpqcParser_Parameters::hessianParam)) { 241 237 *file << "\tfreq<MolecularFrequencies>: (" << endl; 242 238 *file << "\t\tmolecule=$:molecule" << endl; 243 239 *file << "\t)" << endl; 244 240 } 245 const std::string theory = getParams().getParameter(MpqcParser_Parameters::theoryParam); 246 if (theory == getParams().getTheoryName(MpqcParser_Parameters::CLHF)) { 247 *file << "\tmole<" << getParams().getParameter(MpqcParser_Parameters::theoryParam) << ">: (" << endl; 248 *file << "\t\tmolecule = $:molecule" << endl; 249 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::basisParam) << " = $:basis" << endl; 250 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::maxiterParam) 251 << " = " << getParams().getParameter(MpqcParser_Parameters::maxiterParam)<< endl; 252 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::memoryParam) 253 << " = " << getParams().getParameter(MpqcParser_Parameters::memoryParam) << endl; 254 *file << "\t)" << endl; 255 } else if (theory == getParams().getTheoryName(MpqcParser_Parameters::CLKS)) { 256 *file << "\tmole<" << getParams().getParameter(MpqcParser_Parameters::theoryParam) << ">: (" << endl; 257 *file << "\t\tfunctional<StdDenFunctional>:(name=B3LYP)" << endl; 258 *file << "\t\tmolecule = $:molecule" << endl; 259 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::basisParam) << " = $:basis" << endl; 260 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::maxiterParam) 261 << " = " << getParams().getParameter(MpqcParser_Parameters::maxiterParam)<< endl; 262 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::memoryParam) 263 << " = " << getParams().getParameter(MpqcParser_Parameters::memoryParam) << endl; 264 *file << "\t)" << endl; 265 } else if (theory == getParams().getTheoryName(MpqcParser_Parameters::MBPT2)) { 266 *file << "\tmole<" << getParams().getParameter(MpqcParser_Parameters::theoryParam) << ">: (" << endl; 267 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::basisParam) << " = $:basis" << endl; 268 *file << "\t\tmolecule = $:molecule" << endl; 269 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::memoryParam) 270 << " = " << getParams().getParameter(MpqcParser_Parameters::memoryParam) << endl; 271 *file << "\t\treference<CLHF>: (" << endl; 272 *file << "\t\t\t" << getParams().getParameterName(MpqcParser_Parameters::maxiterParam) 273 << " = " << getParams().getParameter(MpqcParser_Parameters::maxiterParam)<< endl; 274 *file << "\t\t\t" << getParams().getParameterName(MpqcParser_Parameters::basisParam) << " = $:basis" << endl; 275 *file << "\t\t\tmolecule = $:molecule" << endl; 276 *file << "\t\t\t" << getParams().getParameterName(MpqcParser_Parameters::memoryParam) 277 << " = " << getParams().getParameter(MpqcParser_Parameters::memoryParam) << endl; 278 *file << "\t\t)" << endl; 279 *file << "\t)" << endl; 280 } else if (theory == getParams().getTheoryName(MpqcParser_Parameters::MBPT2_R12)) { 281 *file << "\tmole<" << getParams().getParameter(MpqcParser_Parameters::theoryParam) << ">: (" << endl; 282 *file << "\t\tmolecule = $:molecule" << endl; 283 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::basisParam) << " = $:basis" << endl; 284 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::aux_basisParam) << " = $:abasis" << endl; 285 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::stdapproxParam) 286 << " = \"" << getParams().getParameter(MpqcParser_Parameters::stdapproxParam) << "\"" << endl; 287 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::nfzcParam) 288 << " = " << getParams().getParameter(MpqcParser_Parameters::nfzcParam) << endl; 289 *file << "\t\t" << getParams().getParameterName(MpqcParser_Parameters::memoryParam) 290 << " = " << getParams().getParameter(MpqcParser_Parameters::memoryParam) << endl; 291 *file << "\t\tintegrals<IntegralCints>:()" << endl; 292 *file << "\t\treference<CLHF>: (" << endl; 293 *file << "\t\t\tmolecule = $:molecule" << endl; 294 *file << "\t\t\t" << getParams().getParameterName(MpqcParser_Parameters::basisParam) << " = $:basis" << endl; 295 *file << "\t\t\tmaxiter = " << getParams().getParameter(MpqcParser_Parameters::maxiterParam) << endl; 296 *file << "\t\t\tmemory = " << getParams().getParameter(MpqcParser_Parameters::memoryParam) << endl; 297 *file << "\t\t\tintegrals<" << getParams().getParameter(MpqcParser_Parameters::integrationParam) << ">:()" << endl; 298 *file << "\t\t)" << endl; 299 *file << "\t)" << endl; 300 } else { 301 DoeLog(0) && (eLog() << Verbose(0) 302 << "Unknown level of theory requested for MPQC output file." << std::endl); 241 switch (getParams().getTheory()) { 242 case MpqcParser_Parameters::CLHF: 243 *file << "\tmole<" << getParams().getString(MpqcParser_Parameters::theoryParam) << ">: (" << endl; 244 *file << "\t\tmolecule = $:molecule" << endl; 245 *file << "\t\tbasis = $:basis" << endl; 246 *file << "\t\tmaxiter = " << toString(getParams().getInt(MpqcParser_Parameters::maxiterParam))<< endl; 247 *file << "\t\tmemory = " << toString(getParams().getInt(MpqcParser_Parameters::memoryParam)) << endl; 248 *file << "\t)" << endl; 249 break; 250 case MpqcParser_Parameters::CLKS: 251 *file << "\tmole<" << getParams().getString(MpqcParser_Parameters::theoryParam) << ">: (" << endl; 252 *file << "\t\tfunctional<StdDenFunctional>:(name=B3LYP)" << endl; 253 *file << "\t\tmolecule = $:molecule" << endl; 254 *file << "\t\tbasis = $:basis" << endl; 255 *file << "\t\tmaxiter = " << toString(getParams().getInt(MpqcParser_Parameters::maxiterParam))<< endl; 256 *file << "\t\tmemory = " << toString(getParams().getInt(MpqcParser_Parameters::memoryParam)) << endl; 257 *file << "\t)" << endl; 258 break; 259 case MpqcParser_Parameters::MBPT2: 260 *file << "\tmole<" << getParams().getString(MpqcParser_Parameters::theoryParam) << ">: (" << endl; 261 *file << "\t\tbasis = $:basis" << endl; 262 *file << "\t\tmolecule = $:molecule" << endl; 263 *file << "\t\tmemory = " << toString(getParams().getInt(MpqcParser_Parameters::memoryParam)) << endl; 264 *file << "\t\treference<CLHF>: (" << endl; 265 *file << "\t\t\tmaxiter = " << toString(getParams().getInt(MpqcParser_Parameters::maxiterParam))<< endl; 266 *file << "\t\t\tbasis = $:basis" << endl; 267 *file << "\t\t\tmolecule = $:molecule" << endl; 268 *file << "\t\t\tmemory = " << toString(getParams().getInt(MpqcParser_Parameters::memoryParam)) << endl; 269 *file << "\t\t)" << endl; 270 *file << "\t)" << endl; 271 break; 272 case MpqcParser_Parameters::MBPT2_R12: 273 *file << "\tmole<" << getParams().getString(MpqcParser_Parameters::theoryParam) << ">: (" << endl; 274 *file << "\t\tmolecule = $:molecule" << endl; 275 *file << "\t\tbasis = $:basis" << endl; 276 *file << "\t\taux_basis = $:abasis" << endl; 277 *file << "\t\tstdapprox = \"" << getParams().getString(MpqcParser_Parameters::stdapproxParam) << "\"" << endl; 278 *file << "\t\tnfzc = " << toString(getParams().getInt(MpqcParser_Parameters::nfzcParam)) << endl; 279 *file << "\t\tmemory = " << toString(getParams().getInt(MpqcParser_Parameters::memoryParam)) << endl; 280 *file << "\t\tintegrals<IntegralCints>:()" << endl; 281 *file << "\t\treference<CLHF>: (" << endl; 282 *file << "\t\t\tmolecule = $:molecule" << endl; 283 *file << "\t\t\tbasis = $:basis" << endl; 284 *file << "\t\t\tmaxiter = " << toString(getParams().getInt(MpqcParser_Parameters::maxiterParam)) << endl; 285 *file << "\t\t\tmemory = " << toString(getParams().getInt(MpqcParser_Parameters::memoryParam)) << endl; 286 *file << "\t\t\tintegrals<" << getParams().getString(MpqcParser_Parameters::integrationParam) << ">:()" << endl; 287 *file << "\t\t)" << endl; 288 *file << "\t)" << endl; 289 break; 290 default: 291 DoeLog(0) && (eLog() << Verbose(0) 292 << "Unknown level of theory requested for MPQC output file." << std::endl); 293 break; 303 294 } 304 295 *file << ")" << endl; … … 313 304 *file << ")" << endl; 314 305 *file << "basis<GaussianBasisSet>: (" << endl; 315 *file << "\tname = \"" << getParams().get Parameter(MpqcParser_Parameters::basisParam) << "\"" << endl;306 *file << "\tname = \"" << getParams().getString(MpqcParser_Parameters::basisParam) << "\"" << endl; 316 307 *file << "\tmolecule = $:molecule" << endl; 317 308 *file << ")" << endl; 318 if ( theory == getParams().getTheoryName(MpqcParser_Parameters::MBPT2_R12)) {309 if (getParams().getTheory() == MpqcParser_Parameters::MBPT2_R12) { 319 310 *file << "% auxiliary basis set specification" << endl; 320 311 *file << "\tabasis<GaussianBasisSet>: (" << endl; 321 *file << "\tname = \"" << getParams().get Parameter(MpqcParser_Parameters::aux_basisParam) << "\"" << endl;312 *file << "\tname = \"" << getParams().getString(MpqcParser_Parameters::aux_basisParam) << "\"" << endl; 322 313 *file << "\tmolecule = $:molecule" << endl; 323 314 *file << ")" << endl;
Note:
See TracChangeset
for help on using the changeset viewer.