Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/MpqcParser.cpp

    ree50c1 r3bdb6d  
    2929#include "atom.hpp"
    3030#include "config.hpp"
    31 #include "element.hpp"
     31#include "Element/element.hpp"
    3232#include "molecule.hpp"
    3333#include "CodePatterns/Log.hpp"
     
    3535#include "CodePatterns/Verbose.hpp"
    3636#include "LinearAlgebra/Vector.hpp"
    37 #include "periodentafel.hpp"
     37#include "Element/periodentafel.hpp"
    3838#include "World.hpp"
    3939
    40 // declare specialized static variables
    41 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 need
    46 ConvertTo<bool> FormatParser<mpqc>::Converter;
    4740
    4841/** Constructor of MpqcParser.
    4942 *
    5043 */
    51 FormatParser< mpqc >::FormatParser() :
    52   FormatParser_common(new MpqcParser_Parameters())
    53 {}
     44MpqcParser::MpqcParser()
     45{
     46  parameters = new MpqcParser_Parameters();
     47}
    5448
    5549/** Destructor of MpqcParser.
    5650 *
    5751 */
    58 FormatParser< mpqc >::~FormatParser()
    59 {}
     52MpqcParser::~MpqcParser()
     53{
     54  delete parameters;
     55}
    6056
    6157/** Load an MPQC config file into the World.
    6258 * \param *file input stream
    6359 */
    64 void FormatParser< mpqc >::load(istream *file)
     60void MpqcParser::load(istream *file)
    6561{
    6662  bool MpqcSection = false;
     
    10096        tokenizer::iterator tok_iter = tokens.begin();
    10197        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+"!");
    10399        std::stringstream whitespacefilter(*tok_iter++);
    104100        std::string element;
    105101        whitespacefilter >> ws >> element;
    106102        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+"!");
    108104        std::string vector = *tok_iter;
    109105        tokenizer vectorcomponents(vector, whitesep);
     
    129125        ++tok_iter;
    130126        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+"!");
    132128        std::string value(*tok_iter);
    133129        std::stringstream linestream("theory = "+value);
     
    138134        ++tok_iter;
    139135        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+"!");
    141137        std::string value(*tok_iter);
    142138        std::stringstream linestream("integration = "+value);
     
    147143        tokenizer::iterator tok_iter = tokens.begin();
    148144        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+"!");
    150146        std::stringstream whitespacefilter(*tok_iter);
    151147        std::string key;
    152148        whitespacefilter >> ws >> key;
    153         if (getParams().haveParameter(key)) {
     149        if (getParams().haveParam(key)) {
    154150          std::stringstream linestream(linestring);
    155151          linestream >> getParams();
     
    163159      tokenizer::iterator tok_iter = tokens.begin();
    164160      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+"!");
    166162      std::string key(*tok_iter++);
    167163      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+"!");
    169165      std::string value(*tok_iter);
    170166      tok_iter++;
    171167      // TODO: use exception instead of ASSERT
    172168      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+".");
    174170      if (key == "name") {
    175171        std::stringstream linestream("basis = "+value);
     
    181177      tokenizer::iterator tok_iter = tokens.begin();
    182178      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+"!");
    184180      std::string key(*tok_iter++);
    185181      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+"!");
    187183      std::string value(*tok_iter);
    188184      tok_iter++;
    189185      // TODO: use exception instead of ASSERT
    190186      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+".");
    192188      if (key == "name") {
    193189        std::stringstream linestream("aux_basis = "+value);
     
    220216 * \param atoms atoms to store
    221217 */
    222 void FormatParser< mpqc >::save(ostream *file, const std::vector<atom *> &atoms)
     218void MpqcParser::save(ostream *file, const std::vector<atom *> &atoms)
    223219{
    224220  Vector center;
     
    236232    *file << "% Created by MoleCuilder" << endl;
    237233    *file << "mpqc: (" << endl;
    238     *file << "\tsavestate = " << getParams().getParameter(MpqcParser_Parameters::savestateParam) << endl;
    239     *file << "\tdo_gradient = " << getParams().getParameter(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)) {
    241237      *file << "\tfreq<MolecularFrequencies>: (" << endl;
    242238      *file << "\t\tmolecule=$:molecule" << endl;
    243239      *file << "\t)" << endl;
    244240    }
    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;
    303294    }
    304295    *file << ")" << endl;
     
    313304    *file << ")" << endl;
    314305    *file << "basis<GaussianBasisSet>: (" << endl;
    315     *file << "\tname = \"" << getParams().getParameter(MpqcParser_Parameters::basisParam) << "\"" << endl;
     306    *file << "\tname = \"" << getParams().getString(MpqcParser_Parameters::basisParam) << "\"" << endl;
    316307    *file << "\tmolecule = $:molecule" << endl;
    317308    *file << ")" << endl;
    318     if (theory == getParams().getTheoryName(MpqcParser_Parameters::MBPT2_R12)) {
     309    if (getParams().getTheory() == MpqcParser_Parameters::MBPT2_R12) {
    319310      *file << "% auxiliary basis set specification" << endl;
    320311      *file << "\tabasis<GaussianBasisSet>: (" << endl;
    321       *file << "\tname = \"" << getParams().getParameter(MpqcParser_Parameters::aux_basisParam) << "\"" << endl;
     312      *file << "\tname = \"" << getParams().getString(MpqcParser_Parameters::aux_basisParam) << "\"" << endl;
    322313      *file << "\tmolecule = $:molecule" << endl;
    323314      *file << ")" << endl;
Note: See TracChangeset for help on using the changeset viewer.