Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/DiffEq/Velocity/ConfigureVelocity.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 velocity SDE
9 : : \details Register and compile configuration on the velocity SDE.
10 : : */
11 : : // *****************************************************************************
12 : :
13 : : #include <set>
14 : : #include <map>
15 : : #include <vector>
16 : : #include <string>
17 : : #include <utility>
18 : :
19 : : #include <brigand/algorithms/for_each.hpp>
20 : :
21 : : #include "Tags.hpp"
22 : : #include "CartesianProduct.hpp"
23 : : #include "DiffEqFactory.hpp"
24 : : #include "Walker/Options/DiffEq.hpp"
25 : : #include "Walker/Options/InitPolicy.hpp"
26 : :
27 : : #include "ConfigureVelocity.hpp"
28 : : #include "Velocity.hpp"
29 : : #include "VelocityCoeffPolicy.hpp"
30 : :
31 : : #include "CoupledEq.hpp"
32 : :
33 : : namespace walker {
34 : :
35 : : void
36 : 323 : registerVelocity( DiffEqFactory& f, std::set< ctr::DiffEqType >& t )
37 : : // *****************************************************************************
38 : : // Register velocity 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 VelocityPolicies =
45 : : tk::cartesian_product< InitPolicies, VelocityCoeffPolicies >;
46 : : // Register SDE for all combinations of policies
47 : : brigand::for_each< VelocityPolicies >(
48 [ + - ]: 323 : registerDiffEq< Velocity >( f, ctr::DiffEqType::VELOCITY, t ) );
49 : 323 : }
50 : :
51 : : std::vector< std::pair< std::string, std::string > >
52 : 7 : infoVelocity( std::map< ctr::DiffEqType, tk::ctr::ncomp_t >& cnt )
53 : : // *****************************************************************************
54 : : // Return information on the velocity SDE
55 : : //! \param[inout] cnt std::map of counters for all differential equation types
56 : : //! \return vector of string pairs describing the SDE configuration
57 : : // *****************************************************************************
58 : : {
59 : : using eq = tag::velocity;
60 : :
61 [ + - ]: 7 : auto c = ++cnt[ ctr::DiffEqType::VELOCITY ]; // count eqs
62 : 7 : --c; // used to index vectors starting with 0
63 : :
64 : 7 : std::vector< std::pair< std::string, std::string > > nfo;
65 : :
66 [ + - ][ + - ]: 7 : nfo.emplace_back( ctr::DiffEq().name( ctr::DiffEqType::VELOCITY ), "" );
[ + - ]
67 : :
68 : 7 : auto solve = g_inputdeck.get< tag::param, eq, tag::solve >()[c];
69 : :
70 [ + - ]: 14 : nfo.emplace_back( "start offset in particle array", std::to_string(
71 [ + - ]: 14 : g_inputdeck.get< tag::component >().offset< eq >(c) ) );
72 : 7 : auto ncomp = g_inputdeck.get< tag::component, eq >()[c];
73 : :
74 [ - + ][ - - ]: 7 : if (solve == ctr::DepvarType::PRODUCT &&
[ - + ]
75 : 0 : coupled< eq, tag::mixmassfracbeta >(c))
76 : : {
77 : : auto numderived =
78 [ - - ]: 0 : Velocity<InitZero,VelocityCoeffStationary>(c).numderived();
79 [ - - ][ - - ]: 0 : nfo.emplace_back( "number of components", std::to_string(ncomp) + " (=" +
[ - - ]
80 [ - - ][ - - ]: 0 : std::to_string(ncomp - numderived) + '+' +
[ - - ]
81 [ - - ][ - - ]: 0 : std::to_string(numderived) + ") " );
[ - - ]
82 : : } else {
83 [ + - ][ + - ]: 7 : nfo.emplace_back( "number of components", std::to_string(ncomp) );
84 : : }
85 : :
86 : : coupledInfo< eq, tag::position, tag::position_id >
87 [ + - ][ + - ]: 7 : ( c, "position", nfo );
[ + - ]
88 : : coupledInfo< eq, tag::dissipation, tag::dissipation_id >
89 [ + - ][ + - ]: 7 : ( c, "dissipation", nfo );
[ + - ]
90 : : coupledInfo< eq, tag::mixmassfracbeta, tag::mixmassfracbeta_id >
91 [ + - ][ + - ]: 7 : ( c, "mixmassfracbeta", nfo );
[ + - ]
92 : :
93 [ + - ]: 7 : nfo.emplace_back( "kind", "stochastic" );
94 [ + - ]: 21 : nfo.emplace_back( "dependent variable", std::string( 1,
95 [ + - ]: 14 : g_inputdeck.get< tag::param, eq, tag::depvar >()[c] ) );
96 [ + - ]: 14 : nfo.emplace_back( "initialization policy", ctr::InitPolicy().name(
97 [ + - ][ + - ]: 7 : g_inputdeck.get< tag::param, eq, tag::initpolicy >()[c] ) );
98 : 7 : auto cp = g_inputdeck.get< tag::param, eq, tag::coeffpolicy >()[c];
99 [ + - ][ + - ]: 7 : nfo.emplace_back( "coefficients policy", ctr::CoeffPolicy().name( cp ) );
[ + - ]
100 : :
101 [ + - ]: 14 : auto dv = ctr::Depvar();
102 [ + - ][ + - ]: 7 : nfo.emplace_back( dv.group(), dv.name(solve) );
103 : :
104 : 7 : auto variant = g_inputdeck.get< tag::param, eq, tag::variant >()[c];
105 [ + - ]: 14 : auto velocity = ctr::VelocityVariant();
106 [ + - ][ + - ]: 7 : nfo.emplace_back( velocity.group(), velocity.name(variant) );
107 : :
108 [ - + ]: 7 : if (cp == ctr::CoeffPolicyType::HYDROTIMESCALE) {
109 : : nfo.emplace_back(
110 : : "inverse hydro time scale",
111 [ - - ]: 0 : options( ctr::HydroTimeScales(),
112 : : g_inputdeck.get< tag::param,
113 : : eq,
114 [ - - ][ - - ]: 0 : tag::hydrotimescales >().at(c) ) );
[ - - ]
115 : : nfo.emplace_back(
116 : : "production/dissipation",
117 [ - - ]: 0 : options( ctr::HydroProductions(),
118 : : g_inputdeck.get< tag::param,
119 : : eq,
120 [ - - ][ - - ]: 0 : tag::hydroproductions >().at(c) ) );
[ - - ]
121 : : }
122 : :
123 [ + - ]: 14 : nfo.emplace_back( "random number generator", tk::ctr::RNG().name(
124 [ + - ][ + - ]: 7 : g_inputdeck.get< tag::param, eq, tag::rng >()[c] ) );
125 : 7 : nfo.emplace_back( "coeff C0", std::to_string(
126 [ + - ][ + - ]: 7 : g_inputdeck.get< tag::param, eq, tag::c0 >().at(c) ) );
[ + - ]
127 : :
128 : : const auto& gravity =
129 [ + - ]: 7 : g_inputdeck.get< tag::param, tag::velocity, tag::gravity >().at(c);
130 [ + - ][ + - ]: 7 : if (!gravity.empty()) nfo.emplace_back( "gravity [3]", parameters(gravity) );
[ + - ]
131 : :
132 : 14 : return nfo;
133 : : }
134 : :
135 : : } // walker::
|