source: src/Fragmentation/Summation/printOrthogonalSum.hpp@ 8b58ac

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
Last change on this file since 8b58ac was c6ca23, checked in by Frederik Heber <heber@…>, 12 years ago

Renamed Summator and printSum to OrthogonalSummator and printOrthogonalSum.

  • this is preparatory for introducing a non-orthogonal summator.
  • sadly, I don't have a quick answer how to generalize the above to an arbitrary templated (Orthogonal)Summation.
  • Property mode set to 100644
File size: 2.7 KB
Line 
1/*
2 * printOrthogonalSum.hpp
3 *
4 * Created on: 29.07.2012
5 * Author: heber
6 */
7
8#ifndef PRINTORTHOGONALSUM_HPP_
9#define PRINTORTHOGONALSUM_HPP_
10
11// include config.h
12#ifdef HAVE_CONFIG_H
13#include <config.h>
14#endif
15
16#include <vector>
17
18#include "Fragmentation/Summation/IndexSetContainer.hpp"
19#include "Fragmentation/Summation/SubsetMap.hpp"
20#include "Fragmentation/Summation/OrthogonalSummator.hpp"
21
22#include "Fragmentation/Summation/printKeyNames.hpp"
23
24/** Tiny template functor to use OrthogonalSummation, sum up and print the result.
25 *
26 */
27template <typename MapType>
28struct printOrthogonalSum {
29 /** Constructor takes the arguments that \a OrthogonalSummator also needs and stores
30 * them internally.
31 *
32 * \param _subsetmap map with hierarchy of IndexSet's
33 * \param _data MPQCData converted to MPQCDataMap_t type
34 * \param _jobids job ids to sum data in correct order
35 * \param _container container of IndexSet's such that each set has correct order
36 * to job id and hence to _data.
37 * \param _MatrixNrLookup lookup from job id to ordering in above vectors
38 */
39 printOrthogonalSum(
40 SubsetMap::ptr &_subsetmap,
41 const std::vector<MapType> &_data,
42 const std::vector<JobId_t> &_jobids,
43 const IndexSetContainer::Container_t &_container,
44 std::map< JobId_t, size_t > &_MatrixNrLookup) : /* cannot make this const due to operator[] */
45 subsetmap(_subsetmap),
46 data(_data),
47 jobids(_jobids),
48 container(_container),
49 MatrixNrLookup(_MatrixNrLookup)
50 {}
51
52 /** Operator that calls on OrthogonalSummator and prints the value.
53 *
54 * \note the parameter is needed for boost::mpl::for_each but is not
55 * used here.
56 */
57 template <typename MapKey>
58 void operator()(MapKey &) {
59 // We retrieve the type of the MPQCData member variable from the boost::fusion::map.
60 typedef typename boost::fusion::result_of::value_at_key<MapType, MapKey>::type MapValue;
61 // create OrthogonalSummator instance
62 OrthogonalSummator<MapType, MapKey> sum_value(
63 subsetmap, data, jobids, container, MatrixNrLookup
64 );
65 // sum up
66 MapValue value = sum_value();
67 // print value
68 LOG(0, "STATUS: Resulting " << printKeyNames::printName<MapKey>() << " is " << value << ".");
69 }
70
71private:
72 //!> Hierarchy of IndexSet's
73 SubsetMap::ptr &subsetmap;
74 //!> vector of data converted from MPQCData
75 const std::vector<MapType> &data;
76 //!> vector of jobids
77 const std::vector<JobId_t> &jobids;
78 //!> container with all IndexSet's
79 const IndexSetContainer::Container_t &container;
80 //!> lookup map from job ids to ordering in above vectors
81 std::map< JobId_t, size_t > MatrixNrLookup;
82};
83
84#endif /* PRINTORTHOGONALSUM_HPP_ */
Note: See TracBrowser for help on using the repository browser.