/* * FragmentationResults.hpp * * Created on: Aug 31, 2012 * Author: heber */ #ifndef FRAGMENTATIONRESULTS_HPP_ #define FRAGMENTATIONRESULTS_HPP_ // include config.h #ifdef HAVE_CONFIG_H #include #endif #include #include #include "JobMarket/types.hpp" #include "Fragmentation/KeySetsContainer.hpp" #include "Fragmentation/Summation/IndexSet.hpp" #include "Fragmentation/Summation/IndexSetContainer.hpp" #include "Fragmentation/Summation/SubsetMap.hpp" #include "Jobs/MPQCData.hpp" #include "Jobs/MPQCDataMap.hpp" #include "Jobs/VMGData.hpp" #include "Jobs/VMGDataMap.hpp" #include "Jobs/Grid/SamplingGrid.hpp" /** FragmentationResults contains the summed up results per level resulting * from the fragmentation of the molecular system and clever combination of * fragmentary energies, forces, timings, and so on. * * This structure is mostly a storage wherein the summed up results are * contained for subsequent pretty printing and so on. * */ struct FragmentationResults { /** Constructor for class FragmentationResults, based on KeySets. * * @param fragmentData results from short-range fragment calculations * @param longrangeData results from long-range fragment calculations * @param _KeySet KeySets of all (non-hydrogen) atoms * @param _ForceKeySet KeySets of all atoms except those added by saturation */ FragmentationResults( const std::map &fragmentData, std::map &longrangeData, const KeySetsContainer& _KeySet, const KeySetsContainer& _ForceKeySet); /** Performs the summation and fills all result vectors. * * @param fragmentData results from short-range fragment calculations * @param longrangeData results from long-range fragment calculations * @param fullsolutionData long-range solution * @param full_sample sampled density */ void operator()( const std::map &fragmentData, std::map &longrangeData, const std::vector &fullsolutionData, const std::vector &full_sample); size_t getMaxLevel() const { return MaxLevel; } IndexSetContainer::Container_t getContainer() const { return container->getContainer(); } const KeySetsContainer& getKeySet() const { return KeySet; } const KeySetsContainer& getForceKeySet() const { return ForceKeySet; } private: std::map< JobId_t, size_t > MPQCMatrixNrLookup; std::map< JobId_t, size_t > VMGMatrixNrLookup; KeySetsContainer KeySet; KeySetsContainer ForceKeySet; IndexSetContainer::ptr container; SubsetMap::ptr subsetmap; public: //!> results per level of summed up energy std::vector Result_Energy_fused; //!> results per level of summed up sampled grid charge std::vector Result_Grid_fused; //!> results per level of summed up times std::vector Result_Time_fused; //!> results per level of summed up fragment positions and charges std::vector Result_Fragment_fused; //!> results per level of summed up forces std::vector Result_Force_fused; //!> results per level of summed up long range potential grids and energy std::vector Result_LongRange_fused; //!> results per level of summed up long range true energy std::vector Result_LongRangeIntegrated_fused; //!> results per IndexSet of summed up energy std::map > Result_perIndexSet_Energy; //!> results per IndexSet of summed up sampled grid charge std::map > Result_perIndexSet_Grid; //!> results per IndexSet of summed up times std::map > Result_perIndexSet_Time; //!> results per IndexSet of summed up fragment positions and charges std::map > Result_perIndexSet_Fragment; //!> results per IndexSet of summed up forces std::map > Result_perIndexSet_Force; //!> results per IndexSet of summed up long range potential grids and energy std::map > Result_perIndexSet_LongRange; // we don't need the map pendant for Result_LongRangeIntegrated_fused, as this // quantity makes sense only level-wise private: //!> maximum level of summation size_t MaxLevel; }; #endif /* FRAGMENTATIONRESULTS_HPP_ */