| [ffe057] | 1 | /*
 | 
|---|
 | 2 |  * VMGFragmentController.hpp
 | 
|---|
 | 3 |  *
 | 
|---|
 | 4 |  *  Created on: Aug 27, 2012
 | 
|---|
 | 5 |  *      Author: heber
 | 
|---|
 | 6 |  */
 | 
|---|
 | 7 | 
 | 
|---|
 | 8 | #ifndef VMGFRAGMENTCONTROLLER_HPP_
 | 
|---|
 | 9 | #define VMGFRAGMENTCONTROLLER_HPP_
 | 
|---|
 | 10 | 
 | 
|---|
 | 11 | 
 | 
|---|
 | 12 | // include config.h
 | 
|---|
 | 13 | #ifdef HAVE_CONFIG_H
 | 
|---|
 | 14 | #include <config.h>
 | 
|---|
 | 15 | #endif
 | 
|---|
 | 16 | 
 | 
|---|
 | 17 | #include "Fragmentation/Automation/SpecificFragmentController.hpp"
 | 
|---|
 | 18 | 
 | 
|---|
| [a2295a] | 19 | #include <map>
 | 
|---|
 | 20 | #include <vector>
 | 
|---|
 | 21 | 
 | 
|---|
| [8e84fe] | 22 | #include "JobMarket/types.hpp"
 | 
|---|
| [ffe057] | 23 | 
 | 
|---|
| [fbf143] | 24 | #include "Fragmentation/Summation/Containers/MPQCData.hpp"
 | 
|---|
 | 25 | #include "Fragmentation/Summation/Containers/VMGData.hpp"
 | 
|---|
 | 26 | #include "Fragmentation/Summation/SetValues/Fragment.hpp"
 | 
|---|
 | 27 | #include "Fragmentation/Summation/SetValues/SamplingGrid.hpp"
 | 
|---|
| [ffe057] | 28 | 
 | 
|---|
 | 29 | /** This class uses SpecificFragmentController with functions to add specificly
 | 
|---|
 | 30 |  * VMGJobs.
 | 
|---|
 | 31 |  */
 | 
|---|
 | 32 | class VMGFragmentController : public SpecificFragmentController
 | 
|---|
 | 33 | {
 | 
|---|
 | 34 | public:
 | 
|---|
 | 35 |   VMGFragmentController(boost::asio::io_service &io_service) :
 | 
|---|
 | 36 |     SpecificFragmentController(io_service)
 | 
|---|
 | 37 |   {}
 | 
|---|
 | 38 |   virtual ~VMGFragmentController()
 | 
|---|
 | 39 |   {}
 | 
|---|
 | 40 | 
 | 
|---|
| [e2925fd] | 41 |   //>! Enumerization of possible treatment of nuclei point charges.
 | 
|---|
 | 42 |   enum SampleParticles_t {
 | 
|---|
 | 43 |     DontSampleParticles=0,
 | 
|---|
 | 44 |     DoSampleParticles=1
 | 
|---|
 | 45 |   };
 | 
|---|
 | 46 | 
 | 
|---|
 | 47 |   //>! Enumerization of possible treatment of electronic charge distribution on grid.
 | 
|---|
 | 48 |   enum TreatGrid_t {
 | 
|---|
 | 49 |     DontTreatGrid=0,
 | 
|---|
 | 50 |     DoTreatGrid=1
 | 
|---|
 | 51 |   };
 | 
|---|
 | 52 | 
 | 
|---|
| [6ff62c] | 53 |   /** Creates the long range jobs from finished short-range jobs.
 | 
|---|
 | 54 |    *
 | 
|---|
 | 55 |    * \param fragmentData finished short-range results
 | 
|---|
 | 56 |    * \param full_sampled_grid sampled electron densities from finished short-range jobs
 | 
|---|
 | 57 |    * \param near_field_cells radius of b-splines for interpolation charges onto grid
 | 
|---|
 | 58 |    * \param interpolation_degree interpolation degree for newton interpolation from grid
 | 
|---|
| [e2925fd] | 59 |    * \param _SampleParticles whether to add nuclei charges to vmg calculation.
 | 
|---|
 | 60 |    * \param _TreatGrid whether to add electron charge distribution to vmg calculation.
 | 
|---|
| [6ff62c] | 61 |    * \param _DoValenceOnly whether to neglect core electron and nuclei charges
 | 
|---|
| [b6b21a] | 62 |    * \param _DoPrintDebug whether we do print grid for debug visualization or not
 | 
|---|
| [ee9018] | 63 |    * \param _OpenBoundaryConditions whether we have open (true) or periodic (false)
 | 
|---|
 | 64 |    *        boundary conditions
 | 
|---|
| [6ff62c] | 65 |    */
 | 
|---|
| [ffe057] | 66 |   bool createLongRangeJobs(
 | 
|---|
 | 67 |       const std::map<JobId_t, MPQCData> &fragmentData,
 | 
|---|
| [a2295a] | 68 |       const std::vector<SamplingGrid> &full_sampled_grid,
 | 
|---|
| [cd2591] | 69 |       const size_t near_field_cells,
 | 
|---|
| [6ff62c] | 70 |       const size_t interpolation_degree,
 | 
|---|
| [e2925fd] | 71 |       const SampleParticles_t _SampleParticles,
 | 
|---|
 | 72 |       const TreatGrid_t _TreatGrid,
 | 
|---|
| [b6b21a] | 73 |       const MPQCData::DoValenceOnly_t _DoValenceOnly,
 | 
|---|
| [ee9018] | 74 |       const bool _DoPrintDebug,
 | 
|---|
 | 75 |       const bool _OpenBoundaryConditions = false);
 | 
|---|
| [6ff62c] | 76 | 
 | 
|---|
| [732507] | 77 |   void waitforResults(const size_t NoExpectedResults)
 | 
|---|
 | 78 |   { results.waitforResults(NoExpectedResults, io_service, *this); }
 | 
|---|
 | 79 | 
 | 
|---|
| [6ff62c] | 80 |   /** Get results of finished long-range jobs.
 | 
|---|
 | 81 |    *
 | 
|---|
 | 82 |    * \param fragmentData contains results on return
 | 
|---|
 | 83 |    */
 | 
|---|
| [ffe057] | 84 |   void getResults(std::map<JobId_t, VMGData> &fragmentData) {
 | 
|---|
| [732507] | 85 |     fragmentData = results.IdData;
 | 
|---|
 | 86 |     results.clear();
 | 
|---|
| [ffe057] | 87 |   }
 | 
|---|
| [732507] | 88 | 
 | 
|---|
 | 89 | private:
 | 
|---|
 | 90 |   //!> type-specific result container
 | 
|---|
| [d4eaf1] | 91 |   SpecificFragmentController::ReceiveResultContainer<VMGData> results;
 | 
|---|
| [ffe057] | 92 | };
 | 
|---|
 | 93 | 
 | 
|---|
 | 94 | 
 | 
|---|
 | 95 | #endif /* VMGFRAGMENTCONTROLLER_HPP_ */
 | 
|---|