Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/Walker/Integrator.hpp 4 : : \copyright 2012-2015 J. Bakosi, 5 : : 2016-2018 Los Alamos National Security, LLC., 6 : : 2019-2021 Triad National Security, LLC. 7 : : All rights reserved. See the LICENSE file for details. 8 : : \brief Integrator advances differential equations 9 : : \details Integrator advances differential equations. There are a potentially 10 : : large number of Integrator Charm++ chares created by Distributor. Each 11 : : integrator gets a chunk of the full load and does the same: initializes and 12 : : advances multiple ordinary or stochastic differential equations in time. 13 : : Note that there is no spatial dependence, these equations describe spatially 14 : : homogeneous processes. 15 : : */ 16 : : // ***************************************************************************** 17 : : #ifndef Integrator_h 18 : : #define Integrator_h 19 : : 20 : : #include <vector> 21 : : #include <map> 22 : : #include <cstdint> 23 : : 24 : : #include "Types.hpp" 25 : : #include "Tags.hpp" 26 : : #include "StatCtr.hpp" 27 : : #include "DiffEq.hpp" 28 : : #include "Particles.hpp" 29 : : #include "SystemComponents.hpp" 30 : : #include "Statistics.hpp" 31 : : #include "Walker/InputDeck/InputDeck.hpp" 32 : : 33 : : #include "NoWarning/integrator.decl.h" 34 : : 35 : : namespace walker { 36 : : 37 : : extern ctr::InputDeck g_inputdeck; 38 : : 39 : : #if defined(__clang__) 40 : : #pragma clang diagnostic push 41 : : #pragma clang diagnostic ignored "-Wundefined-func-template" 42 : : #endif 43 : : 44 : : //! Integrator Charm++ chare used to advance differential equations in time 45 : : class Integrator : public CBase_Integrator { 46 : : 47 : : public: 48 : : //! Constructor 49 : : explicit Integrator( CProxy_Distributor hostproxy, 50 : : CProxy_Collector collproxy, 51 : : tk::CProxy_ParticleWriter particlewriterproxy, 52 : : uint64_t npar ); 53 : : 54 : : //! Migrate constructor 55 : : // cppcheck-suppress uninitMemberVar 56 : 0 : explicit Integrator( CkMigrateMessage* ) : 57 : 0 : m_particles( 0, g_inputdeck.get< tag::component >().nprop() ), 58 : 0 : m_stat( m_particles, 59 [ - - ]: 0 : g_inputdeck.get< tag::component >().offsetmap( g_inputdeck ), 60 : 0 : g_inputdeck.get< tag::stat >(), 61 : 0 : g_inputdeck.get< tag::pdf >(), 62 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::discr, tag::binsize >() ) {} 63 : : 64 : : //! Perform setup: set initial conditions and advance a time step 65 : : void setup( tk::real dt, 66 : : tk::real t, 67 : : uint64_t it, 68 : : const std::map< tk::ctr::Product, tk::real >& moments ); 69 : : 70 : : //! Set initial conditions 71 : : void ic(); 72 : : 73 : : //! Advance all particles owned by this integrator 74 : : void advance( tk::real dt, 75 : : tk::real t, 76 : : uint64_t it, 77 : : const std::map< tk::ctr::Product, tk::real >& moments ); 78 : : 79 : : //! Output particle positions to file 80 : : void out(); 81 : : 82 : : //! Start collecting statistics 83 : : void accumulate(); 84 : : 85 : : // Accumulate sums for central moments and central PDFs 86 : : void accumulateCen( uint64_t it, 87 : : tk::real t, 88 : : tk::real dt, 89 : : const std::vector< tk::real >& ord ); 90 : : 91 : : private: 92 : : CProxy_Distributor m_host; //!< Host proxy 93 : : CProxy_Collector m_coll; //!< Collector proxy 94 : : tk::CProxy_ParticleWriter m_particlewriter; //!< Particle writer proxy 95 : : tk::Particles m_particles; //!< Particle properties 96 : : tk::Statistics m_stat; //!< Statistics 97 : : tk::real m_dt; //!< Time step size 98 : : tk::real m_t; //!< Physical time 99 : : uint64_t m_it; //!< Iteration count 100 : : uint64_t m_itp; //!< Particle position output iteration count 101 : : 102 : : // Accumulate sums for ordinary moments and ordinary PDFs 103 : : void accumulateOrd( uint64_t it, tk::real t, tk::real dt ); 104 : : }; 105 : : 106 : : #if defined(__clang__) 107 : : #pragma clang diagnostic pop 108 : : #endif 109 : : 110 : : } // walker:: 111 : : 112 : : #endif // Integrator_h