Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/DiffEq/Position/PositionCoeffPolicy.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 Particle position equation coefficients policies 9 : : \details This file defines coefficients policy classes for the Lagrangian 10 : : particle position equation defined in DiffEq/Position.h. 11 : : 12 : : General requirements on position equation coefficients policy classes: 13 : : 14 : : - Must define a _constructor_, which is used to initialize the SDE 15 : : coefficients. Required signature: 16 : : \code{.cpp} 17 : : CoeffPolicyName( std::array< tk::real, 9 >& dU ); 18 : : \endcode 19 : : where _dU_ is an optionally prescribed mean velocity gradient. 20 : : 21 : : - Must define the static function _type()_, returning the enum value of the 22 : : policy option. Example: 23 : : \code{.cpp} 24 : : static ctr::CoeffPolicyType type() noexcept { 25 : : return ctr::CoeffPolicyType::INSTANTANEOUS_VELOCITY; 26 : : } 27 : : \endcode 28 : : which returns the enum value of the option from the underlying option 29 : : class, collecting all possible options for coefficients policies. 30 : : */ 31 : : // ***************************************************************************** 32 : : #ifndef PositionCoeffPolicy_h 33 : : #define PositionCoeffPolicy_h 34 : : 35 : : #include <array> 36 : : 37 : : #include <brigand/sequences/list.hpp> 38 : : 39 : : #include "Types.hpp" 40 : : #include "SystemComponents.hpp" 41 : : #include "Walker/Options/CoeffPolicy.hpp" 42 : : 43 : : namespace walker { 44 : : 45 : : //! Position equation coefficients policy given by the instantaneous velocity 46 : : class PositionInstVel { 47 : : 48 : : public: 49 : : //! Constructor 50 : : explicit PositionInstVel( std::array< tk::real, 9 >& ); 51 : : 52 : : //! Coefficients policy type accessor 53 : 2584 : static ctr::CoeffPolicyType type() noexcept 54 : 2584 : { return ctr::CoeffPolicyType::INSTANTANEOUS_VELOCITY; } 55 : : }; 56 : : 57 : : //! \brief Position equation coefficients policy using a prescribed constant 58 : : //! mean velocity gradient for homogeneous shear flow 59 : : class PositionConstShear { 60 : : 61 : : public: 62 : : //! Constructor: prescribe mean shear 63 : : explicit PositionConstShear( std::array< tk::real, 9 >& dU ); 64 : : 65 : : //! Coefficients policy type accessor 66 : 2584 : static ctr::CoeffPolicyType type() noexcept 67 : 2584 : { return ctr::CoeffPolicyType::CONST_SHEAR; } 68 : : }; 69 : : 70 : : //! List of all position eq coefficients policies 71 : : using PositionCoeffPolicies = brigand::list< PositionInstVel 72 : : , PositionConstShear 73 : : >; 74 : : 75 : : } // walker:: 76 : : 77 : : #endif // PositionCoeffPolicy_h