Changeset 06865e for src/Actions


Ignore:
Timestamp:
Nov 21, 2012, 12:46:32 PM (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:
c5feef
Parents:
358ddb
git-author:
Frederik Heber <heber@…> (08/10/12 16:37:46)
git-committer:
Frederik Heber <heber@…> (11/21/12 12:46:32)
Message:

FragmentationAutomationAction now also treats the case correctly with sets including superset.

  • we don't need any extra... stuff, we just need to treate the last result extra.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/FragmentationAction/FragmentationAutomationAction.cpp

    r358ddb r06865e  
    4949#include "Atom/atom.hpp"
    5050#include "Box.hpp"
     51#include "Element/element.hpp"
    5152#include "Fragmentation/EnergyMatrix.hpp"
    5253#include "Fragmentation/ForceMatrix.hpp"
     
    725726  size_t FragmentCounter = 0;
    726727  createMatrixNrLookup(fragmentresults, MatrixNrLookup, FragmentCounter);
    727   std::map< JobId_t, size_t > extraMatrixNrLookup;
    728   size_t extraFragmentCounter = 0;
    729   createMatrixNrLookup(longrangeresults, extraMatrixNrLookup, extraFragmentCounter);
    730728
    731729  // initialise keysets
     
    756754  std::vector<JobId_t> jobids(fragmentresults.size(), JobId::IllegalJob);
    757755  std::transform(fragmentresults.begin(), fragmentresults.end(), jobids.begin(),
    758       boost::bind(&FragmentResult::getId,
    759           boost::bind(&FragmentResult::ptr::operator->, _1)));
    760   // create a vector of all job ids from long-range
    761   std::vector<JobId_t> extrajobids(longrangeresults.size(), JobId::IllegalJob);
    762   std::transform(longrangeresults.begin(), longrangeresults.end(), extrajobids.begin(),
    763756      boost::bind(&FragmentResult::getId,
    764757          boost::bind(&FragmentResult::ptr::operator->, _1)));
     
    776769      SumUpPerLevel<MPQCDataTimeMap_t, MPQCDataTimeVector_t>(
    777770          fragmentData, jobids, MatrixNrLookup, container, subsetmap));
     771    std::vector<MPQCDataFragmentMap_t> Result_Fragment_fused(
     772      OrthogonalSumUpPerLevel<MPQCDataFragmentMap_t, MPQCDataFragmentVector_t>(
     773          fragmentData, jobids, MatrixNrLookup, container, subsetmap));
    778774
    779775    // force has extra converter
     
    790786    boost::mpl::for_each<MPQCDataForceVector_t>(boost::ref(forceSummer));
    791787
     788    // full solution has to treated extra and not used in summation
     789    std::vector<VMGData> temp_longrangeData(longrangeData.begin(), --longrangeData.end());
     790
    792791    // obtain full grid
    793792    std::vector<VMGDataMap_t> VMGData_Potential_fused;
    794     convertDataTo<VMGData, VMGDataMap_t>(longrangeData, VMGData_Potential_fused);
     793    convertDataTo<VMGData, VMGDataMap_t>(temp_longrangeData, VMGData_Potential_fused);
    795794    OrthogonalFullSummator<VMGDataMap_t, VMGDataFused::sampled_potential> potentialSummer(
    796795                subsetmap,
    797796                VMGData_Potential_fused,
    798                 extrajobids,
     797                jobids,
    799798                container->getContainer(),
    800                 extraMatrixNrLookup);
     799                MatrixNrLookup);
    801800    potentialSummer(subsetmap->getMaximumSubsetLevel());
    802     full_sample = potentialSummer.getFullContribution();
     801    SamplingGrid full_sample = longrangeData.back().sampled_potential;
     802    full_sample -= potentialSummer.getFullContribution();
    803803    LOG(0, "Remaining long-range energy from potential integral is " << full_sample.integral() << ".");
    804804
     
    806806                subsetmap,
    807807                VMGData_Potential_fused,
    808                 extrajobids,
     808                jobids,
    809809                container->getContainer(),
    810                 extraMatrixNrLookup);
     810                MatrixNrLookup);
    811811    elongSummer(subsetmap->getMaximumSubsetLevel());
    812     const double e_long = elongSummer.getFullContribution();
     812    double e_long = longrangeData.back().e_long;
     813    e_long -= elongSummer.getFullContribution();
    813814    LOG(0, "Remaining long-range energy is " << e_long << ".");
    814815
     
    903904
    904905  {
    905 //    const int level = LEVEL;
    906 //    const int GRID = pow(2, level);
    907 //    double begin[NDIM] = { 0., 0., 0. };
    908 //    const RealSpaceMatrix& M = World::getInstance().getDomain().getM();
    909 //    const double size = M.at(0,0);
    910 //    ASSERT( M.determinant() == size*size*size,
    911 //        "createLongRangeJobs() - current domain matrix "+toString(M)+" is not cubic.");
    912     const std::vector< std::vector<double> > positions(full_fragment.getPositions());
    913     const std::vector<double> charges(full_fragment.getCharges());
     906    const World::AtomComposite &atoms = World::getInstance().getAllAtoms();
     907    std::vector< std::vector<double> > positions;
     908    positions.reserve(atoms.size());
     909    std::vector<double> charges;
     910    charges.reserve(atoms.size());
     911    std::vector<double> position(3, 0.);
     912    for (World::AtomComposite::const_iterator iter = atoms.begin();
     913        iter != atoms.end(); ++iter) {
     914      const Vector &pos = (*iter)->getPosition();
     915      for (size_t i=0;i<3;++i) position[i] = pos[i];
     916      positions.push_back(position);
     917      charges.push_back((double)((*iter)->getElement().getAtomicNumber()));
     918    }
    914919    const JobId_t next_id = controller.getAvailableId();
    915920    LOG(1, "INFO: Creating full VMGJob with " << full_sampled_grid.sampled_grid.size()
     
    977982#ifdef HAVE_VMG
    978983  if (params.DoLongrange.get()) {
     984  ASSERT( World::getInstance().getAllAtoms().size() != 0,
     985      "FragmentationFragmentationAutomationAction::performCall() - please load the full molecule into the World before.");
     986
    979987  // obtain combined charge density
    980988  LOG(1, "INFO: Parsing fragment files from " << params.path.get() << ".");
Note: See TracChangeset for help on using the changeset viewer.