Ignore:
Timestamp:
Feb 2, 2016, 5:50:29 PM (9 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:
9ae11c
Parents:
d1831e (diff), 62d092 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'Enhancing_Interdistance' into Candidate_v1.5.1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Summation/Containers/FragmentationLongRangeResults.cpp

    rd1831e r3690e4  
    6565    const KeySetsContainer& _ForceKeySet) :
    6666    KeySet(_KeySet),
    67     ForceKeySet(_ForceKeySet)
     67    ForceKeySet(_ForceKeySet),
     68    hasForces((!longrangeData.empty()) && (longrangeData.begin()->second.hasForces))
    6869{
    6970  initLookups(fragmentData, longrangeData);
     
    126127        Result_LongRange_fused, Result_perIndexSet_LongRange);
    127128
     129    IndexedVectors::indices_t fullindices;
     130    if (hasLongRangeForces()) {
     131      // force has extra data converter (this is similar to MPQCData's forces
     132      std::map<JobId_t, VMGDataForceMap_t> VMGData_Force_fused;
     133      convertDatatoForceMap<VMGData, VMGDataForceMap_t, VMGDataFused>(
     134          longrangeData, ForceKeySet, VMGData_Force_fused);
     135      Result_ForceLongRange_fused.resize(MaxLevel); // we need the results of correct size already
     136      AllLevelOrthogonalSummator<VMGDataForceMap_t> forceSummer(
     137                  subsetmap,
     138                  VMGData_Force_fused,
     139                  container->getContainer(),
     140                  VMGMatrixNrLookup,
     141                  Result_ForceLongRange_fused,
     142                  Result_perIndexSet_LongRange_Force);
     143      boost::mpl::for_each<VMGDataForceVector_t>(boost::ref(forceSummer));
     144      // build full force index set
     145      KeySetsContainer::ArrayOfIntVectors::const_iterator arrayiter = ForceKeySet.KeySets.begin();
     146      std::set<IndexedVectors::index_t> sorted_indices;
     147      for (;arrayiter != ForceKeySet.KeySets.end(); ++arrayiter) {
     148        sorted_indices.insert(arrayiter->begin(), arrayiter->end());
     149      }
     150      sorted_indices.erase(-1);
     151      fullindices.insert(fullindices.begin(), sorted_indices.begin(), sorted_indices.end());
     152    }
     153
     154    // then sum up
     155    OrthogonalSumUpPerLevel<VMGDataGridMap_t, VMGData, VMGDataGridVector_t>(
     156        longrangeData, VMGMatrixNrLookup, container, subsetmap,
     157        Result_GridLongRange_fused, Result_perIndexSet_LongRange_Grid);
     158
    128159    Result_LongRangeIntegrated_fused.reserve(MaxLevel);
    129160    // NOTE: potential for level 1 is wrongly calculated within a molecule
     
    146177      // the full solution.
    147178      const SamplingGrid &short_range_correction =
    148           boost::fusion::at_key<VMGDataFused::sampled_potential>(Result_LongRange_fused[level-1]);
     179          boost::fusion::at_key<VMGDataFused::sampled_potential>(Result_GridLongRange_fused[level-1]);
    149180      double electron_short_range_energy = short_range_correction.integral();
    150181      full_sample_solution -= short_range_correction;
     
    202233          + boost::fusion::at_key<VMGDataFused::nuclei_shortrange>(instance);
    203234      Result_LongRangeIntegrated_fused.push_back(instance);
     235
     236      if (hasLongRangeForces()) {
     237        VMGDataLongRangeForceMap_t forceinstance;
     238        IndexedVectors fullforces( fullindices, fullsolutionData[level-1].forces);
     239        IndexedVectors longrangeforces =
     240            boost::fusion::at_key<VMGDataFused::forces>(Result_ForceLongRange_fused[level-1]);
     241        boost::fusion::at_key<VMGDataFused::forces_shortrange>(forceinstance) =
     242            fullforces;
     243        fullforces -= longrangeforces;
     244        boost::fusion::at_key<VMGDataFused::forces_longrange>(forceinstance) =
     245            fullforces;
     246        Result_ForcesLongRangeIntegrated_fused.push_back(forceinstance);
     247      }
    204248    }
    205249//    {
     
    207251//      SamplingGrid full_sample_solution = fullsolutionData.back().sampled_potential;
    208252//      const SamplingGrid &short_range_correction =
    209 //          boost::fusion::at_key<VMGDataFused::sampled_potential>(Result_LongRange_fused.back()).getFullContribution();
     253//          boost::fusion::at_key<VMGDataFused::sampled_potential>(Result_GridLongRange_fused.back()).getFullContribution();
    210254//      full_sample_solution -= short_range_correction;
    211255//      // multiply element-wise with charge distribution
Note: See TracChangeset for help on using the changeset viewer.