Ignore:
Timestamp:
Apr 15, 2013, 10:28:22 AM (12 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:
4f44ae
Parents:
dd0c8f
git-author:
Frederik Heber <heber@…> (03/04/13 13:54:11)
git-committer:
Frederik Heber <heber@…> (04/15/13 10:28:22)
Message:

FragmentAction creates FragmentJobs if no output-types are given.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Exporters/ExportGraph_ToJobs.cpp

    rdd0c8f rac9ca4  
    3333#endif
    3434
     35// boost asio required before MemDebug due to placement new
     36#include <boost/asio.hpp>
     37
    3538#include "CodePatterns/MemDebug.hpp"
    3639
    3740#include "Fragmentation/Exporters/ExportGraph_ToJobs.hpp"
    3841
     42#include <algorithm>
     43
     44#include "Box.hpp"
     45#include "Fragmentation/KeySet.hpp"
     46#include "Fragmentation/Automation/FragmentJobQueue.hpp"
     47#include "Fragmentation/Automation/MPQCFragmentController.hpp"
     48#include "Helpers/defs.hpp"
     49#include "Jobs/MPQCJob.hpp"
     50#include "LinearAlgebra/RealSpaceMatrix.hpp"
     51#include "Parser/FormatParserStorage.hpp"
    3952#include "World.hpp"
    4053
     
    4356    const enum HydrogenTreatment _treatment,
    4457    const enum HydrogenSaturation _saturation) :
    45     ExportGraph(_graph, _treatment, _saturation)
     58    ExportGraph(_graph, _treatment, _saturation),
     59    level(5)
    4660{}
    4761
     
    5165void ExportGraph_ToJobs::operator()()
    5266{
    53   ExportGraph::operator()();
     67  std::vector<FragmentJob::ptr> jobs;
     68  KeySetsContainer KeySets;
     69  KeySetsContainer FullKeySets;
     70  jobs.reserve(TotalGraph.size());
     71  LOG(1, "INFO: Creating " << TotalGraph.size() << " possible bond fragmentation jobs.");
     72
     73  // gather info about the domain
     74  double begin[NDIM] = { 0., 0., 0. };
     75  RealSpaceMatrix M = World::getInstance().getDomain().getM();
     76  M *= 1./AtomicLengthToAngstroem;  // scale to atomic length units
     77  const double size = M.at(0,0);
     78  double end[NDIM] = { size, size, size };
     79  const ParserTypes jobtype =
     80      FormatParserStorage::getInstance().getTypeFromName("mpqc");
     81
     82  // go through all fragments, output to stream and create job therefrom
     83  ExportGraph::SaturatedFragment_ptr CurrentFragment = getNextFragment();
     84  for (; (CurrentFragment != NULL) && (CurrentFragment->getKeySet() != ExportGraph::EmptySet);
     85      CurrentFragment = getNextFragment()) {
     86    const KeySet &set = CurrentFragment->getKeySet();
     87    LOG(2, "INFO: Creating bond fragment job for set " << set << ".");
     88    // store config in stream
     89    {
     90      std::stringstream output;
     91      // save to stream
     92      CurrentFragment->OutputConfig(output, jobtype);
     93      // create job and insert
     94      FragmentJob::ptr testJob( new MPQCJob(JobId::IllegalJob, output.str(), begin, end, level) );
     95      jobs.push_back(testJob);
     96
     97      // order is the same as the number of non-hydrogen atoms
     98      const KeySet &keyset = CurrentFragment->getKeySet();
     99      const size_t order = keyset.size();
     100      const KeySet &fullmolecule = CurrentFragment->getFullMolecule();
     101      const KeySet &saturationhydrogens = CurrentFragment->getSaturationHydrogens();
     102      KeySetsContainer::IntVector indices(keyset.begin(), keyset.end());
     103      KeySetsContainer::IntVector forceindices(fullmolecule.begin(), fullmolecule.end());
     104      {
     105        // replace all saturated hydrogen indices by "-1"
     106        for (KeySetsContainer::IntVector::iterator iter = forceindices.begin();
     107            iter != forceindices.end();
     108            ++iter)
     109          if (saturationhydrogens.find(*iter) != saturationhydrogens.end())
     110            *iter = -1;
     111      }
     112      KeySets.insert(indices, order);
     113      FullKeySets.insert(forceindices, order);
     114    }
     115    // store force index reference file
     116    // explicitly release fragment
     117    CurrentFragment.reset();
     118  }
     119  if (CurrentFragment == NULL) {
     120    ELOG(1, "Some error while obtaining the next fragment occured.");
     121    return;
     122  }
     123
     124  // push final jobs
     125  FragmentJobQueue::getInstance().addJobs(jobs, KeySets, FullKeySets);
    54126}
Note: See TracChangeset for help on using the changeset viewer.