source: src/Fragmentation/Summation/Summation.hpp@ 9eb71b3

Action_Thermostats Add_AtomRandomPerturbation Add_RotateAroundBondAction Add_SelectAtomByNameAction Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_StructOpt_integration_tests AutomationFragmentation_failures Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph_documentation Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph Fix_ChronosMutex Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion GeometryObjects Gui_displays_atomic_force_velocity IndependentFragmentGrids_IntegrationTest JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks RotateToPrincipalAxisSystem_UndoRedo StoppableMakroAction TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps Ubuntu_1604_changes
Last change on this file since 9eb71b3 was ff7ac6, checked in by Frederik Heber <heber@…>, 9 years ago

BREAKS: Summation and OrthogonalSummation both now allow to set a specific "ZeroInstance".

  • this replaces then the default ZeroInstance<T> used and may be used to enforce specific parameters in the summation, e.g. a smaller grid when summing SamplingGrid.
  • Note that this breaks all long-range results for the moment. The reason is that so far the ZeroInstance was effectively the first result/contribution upon which all others were summed. This worked because each fragment used the same grid size, namely the one of the global grid. With the independent fragment grids this will no longer be possible, which is why we introduce the possibility to set a specific ZeroInstance, i.e. providing the global grid to sum onto externally.
  • to be absolutely precise: The reasons why the tests break is that the little change in ::Sum(): sum =.. -> sum +=..
  • TESTS: Setting regression tests AnalyseFragmentResults to failed.
  • Property mode set to 100644
File size: 2.3 KB
Line 
1/*
2 * Summation.hpp
3 *
4 * Created on: Jun 30, 2012
5 * Author: heber
6 */
7
8#ifndef SUMMATION_HPP_
9#define SUMMATION_HPP_
10
11
12// include config.h
13#ifdef HAVE_CONFIG_H
14#include <config.h>
15#endif
16
17#include <map>
18
19#include "SetValue.hpp"
20#include "SubsetMap.hpp"
21#include "SetValueMap.hpp"
22
23/** Summation is a functor executing a simple summation of SetValue's
24 * that are each associated to a certain IndexSet whose union is a SetOfIndexSets.
25 *
26 * This is kept in signature alike to OrthogonalSummation.
27 *
28 * For the given class we require the following functions:
29 * -# operator=(): assignment operator for placement in vector
30 * -# operator+=(): addition operator for adding one instance from another
31 * -# operator-=(): subtraction operator for subtracting one instance from another
32 * -# operator<<(): output operator
33 */
34template <class T>
35class Summation
36{
37public:
38 typedef std::vector< IndexSet::ptr > InputSets_t;
39 typedef std::vector< T > InputValues_t;
40 Summation(InputSets_t &indices, InputValues_t& values, SubsetMap::ptr _subsetmap = SubsetMap::ptr());
41
42 /** Performs the summation and returns result.
43 *
44 * @param level sum up to this level
45 * @return resulting value
46 */
47 T operator()(const size_t level) const;
48
49 /** Returns const reference to internal setvalues.
50 *
51 * @return const reference to internal setvalues.
52 */
53 const SetValueMap<T> & getSetValues() const {
54 return setvalues;
55 }
56
57 /** Setter for the zero instance to use as the base in summation.
58 *
59 * This may be used to force some parameters in the summation. We
60 * will use this value to set the initial value and all contributions
61 * are added via operator+(). E.g. In summing SamplingGrid (charge
62 * grids) we may use this instance to enforce a smaller grid size
63 * in the summation of the contributions if fragments have been
64 * calculated at a much higher grid level.
65 *
66 * \param _zeroinstance
67 */
68 void setZeroInstance(const T &_zeroinstance)
69 {
70 zeroinstance = _zeroinstance;
71 }
72
73private:
74 T Sum(const size_t level) const;
75
76private:
77 //!> SubsetTree with the tree-like structure of subsets
78 SubsetMap::ptr subsetmap;
79 //!> set of all subset values
80 SetValueMap<T> setvalues;
81 //!> base/"zero" instance to sum upon, defaults to ZeroInstance<T>
82 T zeroinstance;
83};
84
85#include "Summation_impl.hpp"
86
87#endif /* SUMMATION_HPP_ */
Note: See TracBrowser for help on using the repository browser.