Changeset d640ea for src/Parser


Ignore:
Timestamp:
Oct 18, 2011, 8:23:11 AM (13 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
752bb4
Parents:
9011c1
git-author:
Frederik Heber <heber@…> (10/06/11 13:55:45)
git-committer:
Frederik Heber <heber@…> (10/18/11 08:23:11)
Message:

Implemented Psi3Parser::save().

  • also we now have working unit test on this functionality.
Location:
src/Parser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/Psi3Parser.cpp

    r9011c1 rd640ea  
    160160void FormatParser< psi3 >::save(ostream *file, const std::vector<atom *> &atoms)
    161161{
    162 //  Vector center;
    163 ////  vector<atom *> allatoms = World::getInstance().getAllAtoms();
    164 //
    165 //  // calculate center
    166 //  for (std::vector<atom *>::const_iterator runner = atoms.begin();runner != atoms.end(); ++runner)
    167 //    center += (*runner)->getPosition();
    168 //  center.Scale(1./(double)atoms.size());
    169 //
    170 //  // first without hessian
    171 //  if (file->fail()) {
    172 //    DoeLog(1) && (eLog()<< Verbose(1) << "Cannot open psi3 output file." << endl);
    173 //  } else {
    174 //    *file << "% Created by MoleCuilder" << endl;
    175 //    *file << "psi3: (" << endl;
    176 //    *file << "\tsavestate = " << getParams().getParameter(Psi3Parser_Parameters::savestateParam) << endl;
    177 //    *file << "\tdo_gradient = " << getParams().getParameter(Psi3Parser_Parameters::do_gradientParam) << endl;
    178 //    if (Converter(getParams().getParameter(Psi3Parser_Parameters::hessianParam))) {
    179 //      *file << "\tfreq<MolecularFrequencies>: (" << endl;
    180 //      *file << "\t\tmolecule=$:molecule" << endl;
    181 //      *file << "\t)" << endl;
     162  Vector center;
     163//  vector<atom *> allatoms = World::getInstance().getAllAtoms();
     164
     165  // calculate center
     166  for (std::vector<atom *>::const_iterator runner = atoms.begin();runner != atoms.end(); ++runner)
     167    center += (*runner)->getPosition();
     168  center.Scale(1./(double)atoms.size());
     169
     170  // first without hessian
     171  if (file->fail()) {
     172    DoeLog(1) && (eLog()<< Verbose(1) << "Cannot open psi3 output file." << std::endl);
     173  } else {
     174    *file << "% Created by MoleCuilder" << std::endl;
     175    *file << "psi: (" << std::endl;
     176    *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::labelParam)
     177                  << " = \"" << getParams().getParameter(Psi3Parser_Parameters::labelParam) << "\"" << std::endl;
     178    *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::jobtypeParam)
     179                  << " = " << getParams().getParameter(Psi3Parser_Parameters::jobtypeParam) << std::endl;
     180    *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::wavefunctionParam)
     181                  << " = " << getParams().getParameter(Psi3Parser_Parameters::wavefunctionParam) << std::endl;
     182    *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::maxiterParam)
     183                  << " = " << getParams().getParameter(Psi3Parser_Parameters::maxiterParam) << std::endl;
     184    *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::referenceParam)
     185                  << " = " << getParams().getParameter(Psi3Parser_Parameters::referenceParam) << std::endl;
     186    *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::basisParam)
     187                  << " = \"" << getParams().getParameter(Psi3Parser_Parameters::basisParam) << "\"" << std::endl;
     188    const std::string reference = getParams().getParameter(Psi3Parser_Parameters::referenceParam);
     189//    if (reference == getParams().getReferenceName(Psi3Parser_Parameters::RHF)) {
    182190//    }
    183 //    const std::string theory = getParams().getParameter(Psi3Parser_Parameters::theoryParam);
    184 //    if (theory == getParams().getTheoryName(Psi3Parser_Parameters::CLHF)) {
    185 //      *file << "\tmole<" << getParams().getParameter(Psi3Parser_Parameters::theoryParam) << ">: (" << endl;
    186 //      *file << "\t\tmolecule = $:molecule" << endl;
    187 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::basisParam) << " = $:basis" << endl;
    188 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::maxiterParam)
    189 //          << " = " << getParams().getParameter(Psi3Parser_Parameters::maxiterParam)<< endl;
    190 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::memoryParam)
    191 //          << " = " << getParams().getParameter(Psi3Parser_Parameters::memoryParam) << endl;
    192 //      *file << "\t)" << endl;
    193 //    } else if (theory == getParams().getTheoryName(Psi3Parser_Parameters::CLKS)) {
    194 //      *file << "\tmole<" << getParams().getParameter(Psi3Parser_Parameters::theoryParam) << ">: (" << endl;
    195 //      *file << "\t\tfunctional<StdDenFunctional>:(name=B3LYP)" << endl;
    196 //      *file << "\t\tmolecule = $:molecule" << endl;
    197 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::basisParam) << " = $:basis" << endl;
    198 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::maxiterParam)
    199 //          << " = " << getParams().getParameter(Psi3Parser_Parameters::maxiterParam)<< endl;
    200 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::memoryParam)
    201 //          << " = " << getParams().getParameter(Psi3Parser_Parameters::memoryParam) << endl;
    202 //      *file << "\t)" << endl;
    203 //    } else if (theory == getParams().getTheoryName(Psi3Parser_Parameters::MBPT2)) {
    204 //      *file << "\tmole<" << getParams().getParameter(Psi3Parser_Parameters::theoryParam) << ">: (" << endl;
    205 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::basisParam) << " = $:basis" << endl;
    206 //      *file << "\t\tmolecule = $:molecule" << endl;
    207 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::memoryParam)
    208 //          << " = " << getParams().getParameter(Psi3Parser_Parameters::memoryParam) << endl;
    209 //      *file << "\t\treference<CLHF>: (" << endl;
    210 //      *file << "\t\t\t" << getParams().getParameterName(Psi3Parser_Parameters::maxiterParam)
    211 //          << " = " << getParams().getParameter(Psi3Parser_Parameters::maxiterParam)<< endl;
    212 //      *file << "\t\t\t" << getParams().getParameterName(Psi3Parser_Parameters::basisParam) << " = $:basis" << endl;
    213 //      *file << "\t\t\tmolecule = $:molecule" << endl;
    214 //      *file << "\t\t\t" << getParams().getParameterName(Psi3Parser_Parameters::memoryParam)
    215 //          << " = " << getParams().getParameter(Psi3Parser_Parameters::memoryParam) << endl;
    216 //      *file << "\t\t)" << endl;
    217 //      *file << "\t)" << endl;
    218 //    } else if (theory == getParams().getTheoryName(Psi3Parser_Parameters::MBPT2_R12)) {
    219 //      *file << "\tmole<" << getParams().getParameter(Psi3Parser_Parameters::theoryParam) << ">: (" << endl;
    220 //      *file << "\t\tmolecule = $:molecule" << endl;
    221 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::basisParam) << " = $:basis" << endl;
    222 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::aux_basisParam) << " = $:abasis" << endl;
    223 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::stdapproxParam)
    224 //          << " = \"" << getParams().getParameter(Psi3Parser_Parameters::stdapproxParam) << "\"" << endl;
    225 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::nfzcParam)
    226 //          << " = " << getParams().getParameter(Psi3Parser_Parameters::nfzcParam) << endl;
    227 //      *file << "\t\t" << getParams().getParameterName(Psi3Parser_Parameters::memoryParam)
    228 //          << " = " << getParams().getParameter(Psi3Parser_Parameters::memoryParam) << endl;
    229 //      *file << "\t\tintegrals<IntegralCints>:()" << endl;
    230 //      *file << "\t\treference<CLHF>: (" << endl;
    231 //      *file << "\t\t\tmolecule = $:molecule" << endl;
    232 //      *file << "\t\t\t" << getParams().getParameterName(Psi3Parser_Parameters::basisParam) << " = $:basis" << endl;
    233 //      *file << "\t\t\tmaxiter = " << getParams().getParameter(Psi3Parser_Parameters::maxiterParam) << endl;
    234 //      *file << "\t\t\tmemory = " << getParams().getParameter(Psi3Parser_Parameters::memoryParam) << endl;
    235 //      *file << "\t\t\tintegrals<" << getParams().getParameter(Psi3Parser_Parameters::integrationParam) << ">:()" << endl;
    236 //      *file << "\t\t)" << endl;
    237 //      *file << "\t)" << endl;
    238 //    } else {
    239 //      DoeLog(0) && (eLog() << Verbose(0)
    240 //          << "Unknown level of theory requested for MPQC output file." << std::endl);
     191//    if (reference == getParams().getReferenceName(Psi3Parser_Parameters::ROHF)) {
    241192//    }
    242 //    *file << ")" << endl;
    243 //    *file << "molecule<Molecule>: (" << endl;
    244 //    *file << "\tunit = " << (World::getInstance().getConfig()->GetIsAngstroem() ? "angstrom" : "bohr" ) << endl;
    245 //    *file << "\t{ atoms geometry } = {" << endl;
    246 //    // output of atoms
    247 //    for (std::vector<atom *>::const_iterator AtomRunner = atoms.begin(); AtomRunner != atoms.end(); ++AtomRunner) {
    248 //      (*AtomRunner)->OutputMPQCLine(file, &center);
    249 //    }
    250 //    *file << "\t}" << endl;
    251 //    *file << ")" << endl;
    252 //    *file << "basis<GaussianBasisSet>: (" << endl;
    253 //    *file << "\tname = \"" << getParams().getParameter(Psi3Parser_Parameters::basisParam) << "\"" << endl;
    254 //    *file << "\tmolecule = $:molecule" << endl;
    255 //    *file << ")" << endl;
    256 //    if (theory == getParams().getTheoryName(Psi3Parser_Parameters::MBPT2_R12)) {
    257 //      *file << "% auxiliary basis set specification" << endl;
    258 //      *file << "\tabasis<GaussianBasisSet>: (" << endl;
    259 //      *file << "\tname = \"" << getParams().getParameter(Psi3Parser_Parameters::aux_basisParam) << "\"" << endl;
    260 //      *file << "\tmolecule = $:molecule" << endl;
    261 //      *file << ")" << endl;
    262 //    }
    263 //  }
     193    if ((reference == getParams().getReferenceName(Psi3Parser_Parameters::UHF))
     194        || (reference == getParams().getReferenceName(Psi3Parser_Parameters::TWOCON))) {
     195      *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::multiplicityParam)
     196                    << " = " << getParams().getParameter(Psi3Parser_Parameters::multiplicityParam) << std::endl;
     197      *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::chargeParam)
     198                    << " = " << getParams().getParameter(Psi3Parser_Parameters::chargeParam) << std::endl;
     199    }
     200    if (reference == getParams().getReferenceName(Psi3Parser_Parameters::TWOCON)) {
     201      *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::soccParam)
     202                    << " = " << getParams().getParameter(Psi3Parser_Parameters::soccParam) << std::endl;
     203      *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::doccParam)
     204                    << " = " << getParams().getParameter(Psi3Parser_Parameters::doccParam) << std::endl;
     205      *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::subgroupParam)
     206                    << " = " << getParams().getParameter(Psi3Parser_Parameters::subgroupParam) << std::endl;
     207      *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::unique_axisParam)
     208                    << " = " << getParams().getParameter(Psi3Parser_Parameters::unique_axisParam) << std::endl;
     209    }
     210    if ((reference != getParams().getReferenceName(Psi3Parser_Parameters::RHF))
     211        && (reference != getParams().getReferenceName(Psi3Parser_Parameters::ROHF))
     212        && (reference != getParams().getReferenceName(Psi3Parser_Parameters::UHF))
     213        && (reference != getParams().getReferenceName(Psi3Parser_Parameters::TWOCON)))
     214    {
     215      DoeLog(0) && (eLog() << Verbose(0)
     216          << "Unknown level of reference requested for Psi3 output file." << std::endl);
     217    }
     218    *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::freeze_coreParam)
     219                  << " = " << getParams().getParameter(Psi3Parser_Parameters::freeze_coreParam) << std::endl;
     220    *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::unitsParam)
     221                  << " = " << getParams().getParameter(Psi3Parser_Parameters::unitsParam) << std::endl;
     222    *file << "\tgeometry = (" << std::endl;
     223    // output of atoms
     224    for (std::vector<atom *>::const_iterator AtomRunner = atoms.begin(); AtomRunner != atoms.end(); ++AtomRunner) {
     225      (*AtomRunner)->OutputPsi3Line(file, &center);
     226    }
     227    *file << "\t)" << std::endl;
     228    *file << "\t" << getParams().getParameterName(Psi3Parser_Parameters::originParam)
     229                  << " = " << getParams().getParameter(Psi3Parser_Parameters::originParam) << std::endl;
     230    *file << ")" << std::endl;
     231  }
    264232}
    265233
  • src/Parser/unittests/ParserPsi3UnitTest.cpp

    r9011c1 rd640ea  
    5353\tbasis = \"cc-pVTZ\"\n\
    5454\tfreeze_core = no\n\
    55 \tunits = bohr\n\
     55\tunits = angstrom\n\
    5656\tgeometry = (\n\
    57 \t\t( H     0.0000      0.0000  0.0 )\n\
    58 \t\t( H     0.0000      0.0000  0.74 )\n\
     57\t( H\t0\t0\t-0.37 )\n\
     58\t( H\t0\t0\t0.37 )\n\
    5959\t)\n\
    60 \torigin = (0.0 0.0 0.0)\n\
     60\torigin = (0.0\t0.0\t0.0)\n\
    6161)\n"; // tested with ???
    6262
     
    7070\tbasis = \"cc-pVTZ\"\n\
    7171\tfreeze_core = no\n\
    72 \tunits = bohr\n\
     72\tunits = angstrom\n\
    7373\tgeometry = (\n\
    74 \t\t( H     0.0000      0.0000  0.0 )\n\
    75 \t\t( H     0.0000      0.0000  0.74 )\n\
     74\t( H\t0\t0\t-0.37 )\n\
     75\t( H\t0\t0\t0.37 )\n\
    7676\t)\n\
    77 \torigin = (0.0 0.0 0.0)\n\
     77\torigin = (0.0\t0.0\t0.0)\n\
    7878)\n"; // tested with ???
    7979
     
    8787\tbasis = \"cc-pVTZ\"\n\
    8888\tmultp = 2\n\
    89 \t%charge = 2\n\
     89\tcharge = 2\n\
    9090\tfreeze_core = no\n\
    91 \tunits = bohr\n\
     91\tunits = angstrom\n\
    9292\tgeometry = (\n\
    93 \t\t( H     0.0000      0.0000  0.0 )\n\
    94 \t\t( H     0.0000      0.0000  0.74 )\n\
     93\t( H\t0\t0\t-0.37 )\n\
     94\t( H\t0\t0\t0.37 )\n\
    9595\t)\n\
    96 \torigin = (0.0 0.0 0.0)\n\
     96\torigin = (0.0\t0.0\t0.0)\n\
    9797)\n"; // tested with ???
    9898
     
    103103\twfn = scf\n\
    104104\tmaxiter = 80\n\
    105 \treference = TWOCON\n\
     105\treference = twocon\n\
    106106\tbasis = \"cc-pVTZ\"\n\
    107107\tmultp = 1\n\
    108 \t%charge = 2\n\
    109 \tsocc = ( 1 1 0 0 0 0 0 0)\n\
    110 \tdocc = (0     0     0     0     0     0     0     0)\n\
     108\tcharge = 2\n\
     109\tsocc = ( 1 1 0 0 0 0 0 0 )\n\
     110\tdocc = ( 0 0 0 0 0 0 0 0 )\n\
     111\tsubgroup = c2v\n\
     112\tunique_axis = x\n\
    111113\tfreeze_core = no\n\
    112 \tunits = bohr\n\
     114\tunits = angstrom\n\
    113115\tgeometry = (\n\
    114 \t\t( H     0.0000      0.0000  0.0 )\n\
    115 \t\t( H     0.0000      0.0000  0.74 )\n\
     116\t( H\t0\t0\t-0.37 )\n\
     117\t( H\t0\t0\t0.37 )\n\
    116118\t)\n\
    117 \torigin = (0.0 0.0 0.0)\n\
     119\torigin = (0.0\t0.0\t0.0)\n\
    118120)\n"; // tested with ???
    119121
     
    286288      ++iter)
    287289    PositionSum += (*iter)->getPosition();
    288   CPPUNIT_ASSERT_EQUAL( PositionSum, Vector(0,0,0.74) );
     290  CPPUNIT_ASSERT_EQUAL( PositionSum, Vector(0.,0.,0.) );
    289291}
    290292
    291293void ParserPsi3UnitTest::writePsi3Test() {
    292 //  // build up water molecule
    293 //  string first;
    294 //  string second;
    295 //  atom *Walker = NULL;
    296 //  Walker = World::getInstance().createAtom();
    297 //  Walker->setType(8);
    298 //  Walker->setPosition(Vector(0,0,0));
    299 //  Walker = World::getInstance().createAtom();
    300 //  Walker->setType(1);
    301 //  Walker->setPosition(Vector(0.758602,0,0.504284));
    302 //  Walker = World::getInstance().createAtom();
    303 //  Walker->setType(1);
    304 //  Walker->setPosition(Vector(0.758602,0,-0.504284));
    305 //  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
    306 //
    307 //  // create two stringstreams, one stored, one created
    308 //
    309 //  std::vector<atom *> atoms = World::getInstance().getAllAtoms();
    310 //  {
    311 //    // compare both configs for CLHF
    312 //    stringstream output;
    313 //    params->setParameter(
    314 //        Psi3Parser_Parameters::theoryParam,
    315 //        params->getTheoryName(Psi3Parser_Parameters::CLHF)
    316 //            );
    317 //    parser->save(&output, atoms);
    318 //    stringstream input(waterPsi3_CLHF);
    319 //    for (; std::getline(input, first) && std::getline(output, second); ) {
    320 //      //std::cout << "Comparing '" << first << "' to '" << second << "'" << std::endl;
    321 //      CPPUNIT_ASSERT(first == second);
    322 //    }
    323 //  }
    324 //  {
    325 //    // compare both configs for CLKS
    326 //    stringstream output;
    327 //    params->setParameter(
    328 //        Psi3Parser_Parameters::theoryParam,
    329 //        params->getTheoryName(Psi3Parser_Parameters::CLKS)
    330 //            );
    331 //    stringstream input(waterPsi3_CLKS);
    332 //    for (; std::getline(input, first) && std::getline(output, second); ) {
    333 //      //std::cout << "Comparing '" << first << "' to '" << second << "'" << std::endl;
    334 //      CPPUNIT_ASSERT(first == second);
    335 //    }
    336 //  }
    337 //  {
    338 //    // compare both configs for MBPT2
    339 //    stringstream output;
    340 //    params->setParameter(
    341 //        Psi3Parser_Parameters::theoryParam,
    342 //        params->getTheoryName(Psi3Parser_Parameters::MBPT2)
    343 //            );
    344 //    stringstream input(waterPsi3_MBPT2);
    345 //    for (; std::getline(input, first) && std::getline(output, second); ) {
    346 //      //std::cout << "Comparing '" << first << "' to '" << second << "'" << std::endl;
    347 //      CPPUNIT_ASSERT(first == second);
    348 //    }
    349 //  }
    350 //  {
    351 //    // compare both configs for MBPT2_R12
    352 //    stringstream output;
    353 //    params->setParameter(
    354 //        Psi3Parser_Parameters::theoryParam,
    355 //        params->getTheoryName(Psi3Parser_Parameters::MBPT2_R12)
    356 //            );
    357 //    stringstream input(waterPsi3_MBPT2_R12);
    358 //    for (; std::getline(input, first) && std::getline(output, second); ) {
    359 //      //std::cout << "Comparing '" << first << "' to '" << second << "'" << std::endl;
    360 //      CPPUNIT_ASSERT(first == second);
    361 //    }
    362 //  }
    363 }
     294  // build up hydrogen molecule
     295  string first;
     296  string second;
     297  atom *Walker = NULL;
     298  Walker = World::getInstance().createAtom();
     299  Walker->setType(1);
     300  Walker->setPosition(Vector(0.,0.,0.));
     301  Walker = World::getInstance().createAtom();
     302  Walker->setType(1);
     303  Walker->setPosition(Vector(0.,0,0.74));
     304  CPPUNIT_ASSERT_EQUAL(2, World::getInstance().numAtoms());
     305
     306  // set general parameters: label and freeze_core
     307  params->setParameter(
     308      Psi3Parser_Parameters::labelParam,
     309      "cc-pVTZ SCF H2"
     310          );
     311  params->setParameter(
     312      Psi3Parser_Parameters::freeze_coreParam,
     313      params->ValidFreezeCore[Psi3Parser_Parameters::NO]
     314          );
     315  params->setParameter(
     316      Psi3Parser_Parameters::unitsParam,
     317      params->ValidUnits[Psi3Parser_Parameters::angstrom]
     318          );
     319
     320  // create two stringstreams, one stored, one created
     321  std::vector<atom *> atoms = World::getInstance().getAllAtoms();
     322  {
     323    // compare both configs for RHF
     324    stringstream output;
     325    params->setParameter(
     326        Psi3Parser_Parameters::referenceParam,
     327        params->ValidReference[Psi3Parser_Parameters::RHF]
     328            );
     329    parser->save(&output, atoms);
     330    stringstream input(hydrogenPsi3_RHF);
     331    // check for non-empty streams
     332    input.peek();
     333    output.peek();
     334    CPPUNIT_ASSERT(input.good() && output.good());
     335    // check equality of streams per line (for debugging)
     336    for (; std::getline(input, first) && std::getline(output, second); ) {
     337      //std::cout << "Comparing '" << first << "' to '" << second << "'" << std::endl;
     338      CPPUNIT_ASSERT(first == second);
     339    }
     340  }
     341  {
     342    // compare both configs for ROHF
     343    stringstream output;
     344    params->setParameter(
     345        Psi3Parser_Parameters::referenceParam,
     346        params->ValidReference[Psi3Parser_Parameters::ROHF]
     347            );
     348    parser->save(&output, atoms);
     349    stringstream input(hydrogenPsi3_ROHF);
     350    // check for non-empty streams
     351    input.peek();
     352    output.peek();
     353    CPPUNIT_ASSERT(input.good() && output.good());
     354    // check equality of streams per line (for debugging)
     355    for (; std::getline(input, first) && std::getline(output, second); ) {
     356      //std::cout << "Comparing '" << first << "' to '" << second << "'" << std::endl;
     357      CPPUNIT_ASSERT(first == second);
     358    }
     359  }
     360  {
     361    params->setParameter(Psi3Parser_Parameters::multiplicityParam, "2");
     362    params->setParameter(Psi3Parser_Parameters::chargeParam, "2");
     363    // compare both configs for UHF
     364    stringstream output;
     365    params->setParameter(
     366        Psi3Parser_Parameters::referenceParam,
     367        params->ValidReference[Psi3Parser_Parameters::UHF]
     368            );
     369    parser->save(&output, atoms);
     370    params->setParameter(Psi3Parser_Parameters::chargeParam, "0");
     371    params->setParameter(Psi3Parser_Parameters::multiplicityParam, "1");
     372    stringstream input(hydrogenPsi3_UHF);
     373    // check for non-empty streams
     374    input.peek();
     375    output.peek();
     376    CPPUNIT_ASSERT(input.good() && output.good());
     377    // check equality of streams per line (for debugging)
     378    for (; std::getline(input, first) && std::getline(output, second); ) {
     379      //std::cout << "Comparing '" << first << "' to '" << second << "'" << std::endl;
     380      CPPUNIT_ASSERT(first == second);
     381    }
     382  }
     383  {
     384    params->setParameter(Psi3Parser_Parameters::multiplicityParam, "1");
     385    params->setParameter(Psi3Parser_Parameters::chargeParam, "2");
     386    params->setParameter(Psi3Parser_Parameters::soccParam, "( 1 1 0 0 0 0 0 0 )");
     387    params->setParameter(Psi3Parser_Parameters::doccParam, "( 0 0 0 0 0 0 0 0 )");
     388    params->setParameter(Psi3Parser_Parameters::subgroupParam, "c2v");
     389    params->setParameter(Psi3Parser_Parameters::unique_axisParam, "x");
     390    // compare both configs for TWOCON
     391    stringstream output;
     392    params->setParameter(
     393        Psi3Parser_Parameters::referenceParam,
     394        params->ValidReference[Psi3Parser_Parameters::TWOCON]
     395            );
     396    parser->save(&output, atoms);
     397    params->setParameter(Psi3Parser_Parameters::multiplicityParam, "1");
     398    params->setParameter(Psi3Parser_Parameters::chargeParam, "0");
     399    stringstream input(hydrogenPsi3_TWOCON);
     400    // check for non-empty streams
     401    input.peek();
     402    output.peek();
     403    CPPUNIT_ASSERT(input.good() && output.good());
     404    // check equality of streams per line (for debugging)
     405    for (; std::getline(input, first) && std::getline(output, second); ) {
     406      //std::cout << "Comparing '" << first << "' to '" << second << "'" << std::endl;
     407      CPPUNIT_ASSERT(first == second);
     408    }
     409  }
     410}
Note: See TracChangeset for help on using the changeset viewer.