Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/DiffEq/Beta/ConfigureMixNumberFractionBeta.cpp
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 Register and compile configuration on the mix number fraction beta
9 : : SDE
10 : : \details Register and compile configuration on the mix number fraction beta
11 : : SDE.
12 : : */
13 : : // *****************************************************************************
14 : :
15 : : #include <set>
16 : : #include <map>
17 : : #include <vector>
18 : : #include <string>
19 : : #include <utility>
20 : :
21 : : #include <brigand/algorithms/for_each.hpp>
22 : :
23 : : #include "Tags.hpp"
24 : : #include "CartesianProduct.hpp"
25 : : #include "DiffEqFactory.hpp"
26 : : #include "Walker/Options/DiffEq.hpp"
27 : : #include "Walker/Options/InitPolicy.hpp"
28 : :
29 : : #include "ConfigureMixNumberFractionBeta.hpp"
30 : : #include "MixNumberFractionBeta.hpp"
31 : : #include "MixNumberFractionBetaCoeffPolicy.hpp"
32 : :
33 : : namespace walker {
34 : :
35 : : void
36 : 323 : registerMixNumberFractionBeta( DiffEqFactory& f, std::set< ctr::DiffEqType >& t )
37 : : // *****************************************************************************
38 : : // Register mix number fraction beta SDE into DiffEq factory
39 : : //! \param[in,out] f Differential equation factory to register to
40 : : //! \param[in,out] t Counters for equation types registered
41 : : // *****************************************************************************
42 : : {
43 : : // Construct vector of vectors for all possible policies for SDE
44 : : using MixNumFracBetaPolicies =
45 : : tk::cartesian_product< InitPolicies, MixNumFracBetaCoeffPolicies >;
46 : : // Register SDE for all combinations of policies
47 : : brigand::for_each< MixNumFracBetaPolicies >(
48 : : registerDiffEq< MixNumberFractionBeta >
49 [ + - ]: 323 : ( f, ctr::DiffEqType::MIXNUMFRACBETA, t ) );
50 : 323 : }
51 : :
52 : : std::vector< std::pair< std::string, std::string > >
53 : 0 : infoMixNumberFractionBeta( std::map< ctr::DiffEqType, tk::ctr::ncomp_t >& cnt )
54 : : // *****************************************************************************
55 : : // Return information on the mix number fraction beta SDE
56 : : //! \param[inout] cnt std::map of counters for all differential equation types
57 : : //! \return vector of string pairs describing the SDE configuration
58 : : // *****************************************************************************
59 : : {
60 [ - - ]: 0 : auto c = ++cnt[ ctr::DiffEqType::MIXNUMFRACBETA ]; // count eqs
61 : 0 : --c; // used to index vectors starting with 0
62 : :
63 : 0 : std::vector< std::pair< std::string, std::string > > nfo;
64 : :
65 : : nfo.emplace_back(
66 [ - - ][ - - ]: 0 : ctr::DiffEq().name( ctr::DiffEqType::MIXNUMFRACBETA ), "" );
[ - - ]
67 : :
68 [ - - ]: 0 : nfo.emplace_back( "start offset in particle array", std::to_string(
69 [ - - ]: 0 : g_inputdeck.get< tag::component >().offset< tag::mixnumfracbeta >(c) ) );
70 : : auto ncomp =
71 : 0 : g_inputdeck.get< tag::component >().get< tag::mixnumfracbeta >()[c] / 3;
72 [ - - ][ - - ]: 0 : nfo.emplace_back( "number of components", std::to_string( ncomp ) );
73 : :
74 [ - - ]: 0 : nfo.emplace_back( "kind", "stochastic" );
75 [ - - ]: 0 : nfo.emplace_back( "dependent variable", std::string( 1,
76 [ - - ]: 0 : g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::depvar >()[c] ) );
77 [ - - ]: 0 : nfo.emplace_back( "initialization policy", ctr::InitPolicy().name(
78 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::initpolicy >()[c] ) );
79 [ - - ]: 0 : nfo.emplace_back( "coefficients policy", ctr::CoeffPolicy().name(
80 [ - - ]: 0 : g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::coeffpolicy >()[c] )
81 [ - - ]: 0 : );
82 : :
83 [ - - ]: 0 : nfo.emplace_back( "random number generator", tk::ctr::RNG().name(
84 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::rng >()[c] ) );
85 : : nfo.emplace_back(
86 [ - - ][ - - ]: 0 : "coeff b' [" + std::to_string( ncomp ) + "]",
[ - - ]
87 : 0 : parameters(
88 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::bprime >().at(c) )
89 [ - - ]: 0 : );
90 : : nfo.emplace_back(
91 [ - - ][ - - ]: 0 : "coeff S [" + std::to_string( ncomp ) + "]",
[ - - ]
92 : 0 : parameters(
93 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::S >().at(c) )
94 [ - - ]: 0 : );
95 : : nfo.emplace_back(
96 [ - - ][ - - ]: 0 : "coeff kappa' [" + std::to_string( ncomp ) + "]",
[ - - ]
97 : 0 : parameters(
98 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::kappaprime >().at(c)
99 : : )
100 [ - - ]: 0 : );
101 : : nfo.emplace_back(
102 [ - - ][ - - ]: 0 : "coeff rho2 [" + std::to_string( ncomp ) + "]",
[ - - ]
103 : 0 : parameters(
104 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::rho2 >().at(c) ) );
[ - - ]
105 : : nfo.emplace_back(
106 [ - - ][ - - ]: 0 : "coeff rcomma [" + std::to_string( ncomp ) + "]",
[ - - ]
107 : 0 : parameters(
108 [ - - ][ - - ]: 0 : g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::rcomma >().at(c) )
109 [ - - ]: 0 : );
110 : 0 : spikes( nfo, g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::init,
111 [ - - ][ - - ]: 0 : tag::spike >().at(c) );
112 : 0 : betapdfs( nfo, g_inputdeck.get< tag::param, tag::mixnumfracbeta, tag::init,
113 [ - - ][ - - ]: 0 : tag::betapdf >().at(c) );
114 : :
115 : 0 : return nfo;
116 : : }
117 : :
118 : : } // walker::
|