Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/DiffEq/Beta/ConfigureMixMassFractionBeta.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 mass fraction beta
9 : : SDE
10 : : \details Register and compile configuration on the mix mass 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 "ConfigureMixMassFractionBeta.hpp"
30 : : #include "MixMassFractionBeta.hpp"
31 : : #include "MixMassFractionBetaCoeffPolicy.hpp"
32 : :
33 : : #include "CoupledEq.hpp"
34 : :
35 : : namespace walker {
36 : :
37 : : void
38 : 323 : registerMixMassFractionBeta( DiffEqFactory& f, std::set< ctr::DiffEqType >& t )
39 : : // *****************************************************************************
40 : : // Register mix mass fraction beta SDE into DiffEq factory
41 : : //! \param[in,out] f Differential equation factory to register to
42 : : //! \param[in,out] t Counters for equation types registered
43 : : // *****************************************************************************
44 : : {
45 : : // Construct vector of vectors for all possible policies for SDE
46 : : using MixMassFracBetaPolicies =
47 : : tk::cartesian_product< InitPolicies, MixMassFracBetaCoeffPolicies >;
48 : : // Register SDE for all combinations of policies
49 : : brigand::for_each< MixMassFracBetaPolicies >(
50 : : registerDiffEq< MixMassFractionBeta >
51 [ + - ]: 323 : ( f, ctr::DiffEqType::MIXMASSFRACBETA, t ) );
52 : 323 : }
53 : :
54 : : std::vector< std::pair< std::string, std::string > >
55 : 5 : infoMixMassFractionBeta( std::map< ctr::DiffEqType, tk::ctr::ncomp_t >& cnt )
56 : : // *****************************************************************************
57 : : // Return information on the mix mass fraction beta SDE
58 : : //! \param[inout] cnt std::map of counters for all differential equation types
59 : : //! \return vector of string pairs describing the SDE configuration
60 : : // *****************************************************************************
61 : : {
62 : : using eq = tag::mixmassfracbeta;
63 : :
64 [ + - ]: 5 : auto c = ++cnt[ ctr::DiffEqType::MIXMASSFRACBETA ]; // count eqs
65 : 5 : --c; // used to index vectors starting with 0
66 : :
67 : 5 : std::vector< std::pair< std::string, std::string > > nfo;
68 : :
69 : : nfo.emplace_back(
70 [ + - ][ + - ]: 5 : ctr::DiffEq().name( ctr::DiffEqType::MIXMASSFRACBETA ), "" );
[ + - ]
71 : :
72 [ + - ]: 5 : nfo.emplace_back( "kind", "stochastic" );
73 [ + - ]: 15 : nfo.emplace_back( "dependent variable", std::string( 1,
74 [ + - ]: 10 : g_inputdeck.get< tag::param, eq, tag::depvar >()[c] ) );
75 [ + - ]: 10 : nfo.emplace_back( "start offset in particle array", std::to_string(
76 [ + - ]: 10 : g_inputdeck.get< tag::component >().offset< eq >(c) ) );
77 : 5 : auto ncomp = g_inputdeck.get< tag::component, eq >()[c];
78 : :
79 : 5 : auto numderived =
80 : : MixMassFractionBeta<InitZero,MixMassFracBetaCoeffInstVel>::NUMDERIVED;
81 [ + - ][ + - ]: 10 : nfo.emplace_back( "number of components", std::to_string(ncomp) + " (=" +
[ + - ]
82 [ + - ][ + - ]: 20 : std::to_string(ncomp/(numderived+1)) + '*' +
[ + - ]
83 [ + - ][ + - ]: 15 : std::to_string(numderived+1) + ") " );
[ + - ]
84 : :
85 : : coupledInfo< eq, tag::velocity, tag::velocity_id >
86 [ + - ][ + - ]: 5 : ( c, "velocity", nfo );
[ + - ]
87 : : coupledInfo< eq, tag::dissipation, tag::dissipation_id >
88 [ + - ][ + - ]: 5 : ( c, "dissipation", nfo );
[ + - ]
89 : :
90 [ + - ]: 10 : nfo.emplace_back( "initialization policy", ctr::InitPolicy().name(
91 [ + - ]: 5 : g_inputdeck.get< tag::param, eq, tag::initpolicy >()[c] )
92 [ + - ]: 5 : );
93 : 5 : auto cp = g_inputdeck.get< tag::param, eq, tag::coeffpolicy >()[c];
94 [ + - ][ + - ]: 5 : nfo.emplace_back( "coefficients policy", ctr::CoeffPolicy().name( cp ) );
[ + - ]
95 [ + + ]: 5 : if (cp == ctr::CoeffPolicyType::HYDROTIMESCALE) {
96 : : nfo.emplace_back(
97 [ + - ][ + - ]: 2 : "inverse hydro time scales [" + std::to_string( ncomp/4 ) + "]",
[ + - ]
98 [ + - ]: 2 : options( ctr::HydroTimeScales(),
99 : : g_inputdeck.get< tag::param,
100 : : eq,
101 [ + - ][ + - ]: 2 : tag::hydrotimescales >().at(c) ) );
[ + - ]
102 : : nfo.emplace_back(
103 [ + - ][ + - ]: 2 : "production/dissipation [" + std::to_string( ncomp/4 ) + "]",
[ + - ]
104 [ + - ]: 2 : options( ctr::HydroProductions(),
105 : : g_inputdeck.get< tag::param,
106 : : eq,
107 [ + - ][ + - ]: 2 : tag::hydroproductions >().at(c) ) );
[ + - ]
108 : : }
109 : :
110 [ + - ]: 10 : nfo.emplace_back( "random number generator", tk::ctr::RNG().name(
111 [ + - ][ + - ]: 5 : g_inputdeck.get< tag::param, eq, tag::rng >()[c] ) );
112 : :
113 : 5 : const auto& mg = g_inputdeck.get< tag::param, eq, tag::mean_gradient >();
114 [ - + ]: 5 : if (mg.size() > c) {
115 : 0 : const auto& mean_gradient = mg[c];
116 [ - - ][ - - ]: 0 : Assert( mean_gradient.size() == 3, "Mean gradient vector size must be 3" );
[ - - ][ - - ]
117 [ - - ][ - - ]: 0 : nfo.emplace_back( "imposed mean gradient", parameters(mean_gradient) );
118 : : }
119 : :
120 : : nfo.emplace_back(
121 [ + - ][ + - ]: 10 : "coeff b' [" + std::to_string( ncomp/4 ) + "]",
[ + - ]
122 [ + - ][ + - ]: 10 : parameters( g_inputdeck.get< tag::param, eq, tag::bprime >().at(c) )
123 [ + - ]: 5 : );
124 : : nfo.emplace_back(
125 [ + - ][ + - ]: 10 : "coeff S [" + std::to_string( ncomp/4 ) + "]",
[ + - ]
126 [ + - ][ + - ]: 10 : parameters( g_inputdeck.get< tag::param, eq, tag::S >().at(c) )
127 [ + - ]: 5 : );
128 : : nfo.emplace_back(
129 [ + - ][ + - ]: 10 : "coeff kappa' [" + std::to_string( ncomp/4 ) + "]",
[ + - ]
130 : 5 : parameters( g_inputdeck.get< tag::param,
131 : : eq,
132 [ + - ][ + - ]: 10 : tag::kappaprime >().at(c) ) );
[ + - ]
133 : : nfo.emplace_back(
134 [ + - ][ + - ]: 10 : "coeff rho2 [" + std::to_string( ncomp/4 ) + "]",
[ + - ]
135 [ + - ][ + - ]: 15 : parameters( g_inputdeck.get< tag::param, eq, tag::rho2 >().at(c) ) );
[ + - ]
136 : : nfo.emplace_back(
137 [ + - ][ + - ]: 10 : "coeff r [" + std::to_string( ncomp/4 ) + "]",
[ + - ]
138 [ + - ][ + - ]: 10 : parameters( g_inputdeck.get< tag::param, eq, tag::r >().at(c) )
139 [ + - ]: 5 : );
140 : :
141 : 5 : spikes( nfo,
142 [ + - ][ + - ]: 5 : g_inputdeck.get< tag::param, eq, tag::init, tag::spike >().at(c) );
143 : 5 : betapdfs( nfo,
144 [ + - ][ + - ]: 5 : g_inputdeck.get< tag::param, eq, tag::init, tag::betapdf >().at(c) );
145 : :
146 : 5 : return nfo;
147 : : }
148 : :
149 : : } // walker::
|