Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/PDE/CompFlow/Problem/NLEnergyGrowth.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 Problem configuration for the compressible flow equations
9 : : \details This file defines a Problem policy class for the compressible flow
10 : : equations, defined in PDE/CompFlow/CompFlow.h. See PDE/CompFlow/Problem.h
11 : : for general requirements on Problem policy classes for CompFlow.
12 : : */
13 : : // *****************************************************************************
14 : :
15 : : #include "NLEnergyGrowth.hpp"
16 : : #include "Inciter/InputDeck/InputDeck.hpp"
17 : : #include "FieldOutput.hpp"
18 : :
19 : : namespace inciter {
20 : :
21 : : extern ctr::InputDeck g_inputdeck;
22 : :
23 : : } // ::inciter
24 : :
25 : : using inciter::CompFlowProblemNLEnergyGrowth;
26 : :
27 : : tk::real
28 : 4348103 : CompFlowProblemNLEnergyGrowth::hx( tk::real bx, tk::real by, tk::real bz,
29 : : tk::real x, tk::real y, tk::real z )
30 : : // *****************************************************************************
31 : : // Compute internal energy parameter
32 : : //! \param[in] bx Parameter betax
33 : : //! \param[in] by Parameter betay
34 : : //! \param[in] bz Parameter betaz
35 : : //! \param[in] x X coordinate to evaluate at
36 : : //! \param[in] y Y coordinate to evaluate at
37 : : //! \param[in] z Z coordinate to evaluate at
38 : : //! \return Internal energy parameter
39 : : // *****************************************************************************
40 : : {
41 : 4348103 : return std::cos(bx*M_PI*x) * std::cos(by*M_PI*y) * std::cos(bz*M_PI*z);
42 : : }
43 : :
44 : : tk::real
45 : 4348103 : CompFlowProblemNLEnergyGrowth::ec( tk::real ce, tk::real kappa, tk::real t,
46 : : tk::real h, tk::real p )
47 : : // *****************************************************************************
48 : : // Compute a power of the internal energy
49 : : //! \param[in] ce Internal energy parameter
50 : : //! \param[in] kappa Internal energy parameter
51 : : //! \param[in] t Physical time
52 : : //! \param[in] h Internal energy parameter
53 : : //! \param[in] p Power
54 : : //! \return Internal energy raised to power p
55 : : // *****************************************************************************
56 : : {
57 : 4348103 : return std::pow( -3.0*(ce + kappa*h*h*t), p );
58 : : }
59 : :
60 : : tk::InitializeFn::result_type
61 : 1081784 : CompFlowProblemNLEnergyGrowth::initialize( ncomp_t system,
62 : : ncomp_t,
63 : : tk::real x,
64 : : tk::real y,
65 : : tk::real z,
66 : : tk::real t )
67 : : // *****************************************************************************
68 : : //! Evaluate analytical solution at (x,y,z,t) for all components
69 : : //! \param[in] system Equation system index, i.e., which compressible
70 : : //! flow equation system we operate on among the systems of PDEs
71 : : //! \param[in] x X coordinate where to evaluate the solution
72 : : //! \param[in] y Y coordinate where to evaluate the solution
73 : : //! \param[in] z Z coordinate where to evaluate the solution
74 : : //! \param[in] t Time where to evaluate the solution
75 : : //! \return Values of all components evaluated at (x,y,z,t)
76 : : //! \note The function signature must follow tk::InitializeFn
77 : : // *****************************************************************************
78 : : {
79 : : using tag::param;
80 : :
81 : : // manufactured solution parameters
82 : 1081784 : auto ce = g_inputdeck.get< param, eq, tag::ce >()[system];
83 : 1081784 : auto r0 = g_inputdeck.get< param, eq, tag::r0 >()[system];
84 : 1081784 : auto a = g_inputdeck.get< param, eq, tag::alpha >()[system];
85 : 1081784 : auto k = g_inputdeck.get< param, eq, tag::kappa >()[system];
86 : 1081784 : auto bx = g_inputdeck.get< param, eq, tag::betax >()[system];
87 : 1081784 : auto by = g_inputdeck.get< param, eq, tag::betay >()[system];
88 : 1081784 : auto bz = g_inputdeck.get< param, eq, tag::betaz >()[system];
89 : : // spatial component of density field
90 : 1081784 : auto gx = 1.0 - x*x - y*y - z*z;
91 : : // internal energy parameter
92 : 1081784 : auto h = hx( bx, by, bz, x, y, z );
93 : : // temporal component of the density field
94 : 1081784 : tk::real ft = std::exp( -a*t );
95 : : // density
96 : 1081784 : auto r = r0 + ft*gx;
97 : : // energy
98 : 1081784 : auto re = r*ec(ce,k,t,h,-1.0/3.0);
99 : :
100 [ + - ]: 1081784 : return {{ r, 0.0, 0.0, 0.0, re }};
101 : : }
102 : :
103 : : tk::InitializeFn::result_type
104 : 103959 : CompFlowProblemNLEnergyGrowth::analyticSolution( ncomp_t system,
105 : : ncomp_t,
106 : : tk::real x,
107 : : tk::real y,
108 : : tk::real z,
109 : : tk::real t )
110 : : // *****************************************************************************
111 : : //! Evaluate analytical solution at (x,y,z,t) for all components
112 : : //! \param[in] system Equation system index, i.e., which compressible
113 : : //! flow equation system we operate on among the systems of PDEs
114 : : //! \param[in] x X coordinate where to evaluate the solution
115 : : //! \param[in] y Y coordinate where to evaluate the solution
116 : : //! \param[in] z Z coordinate where to evaluate the solution
117 : : //! \param[in] t Time where to evaluate the solution
118 : : //! \return Values of all components evaluated at (x,y,z,t)
119 : : //! \note The function signature must follow tk::InitializeFn
120 : : // *****************************************************************************
121 : : {
122 : : using tag::param;
123 : :
124 : : // manufactured solution parameters
125 : 103959 : auto ce = g_inputdeck.get< param, eq, tag::ce >()[system];
126 : 103959 : auto r0 = g_inputdeck.get< param, eq, tag::r0 >()[system];
127 : 103959 : auto a = g_inputdeck.get< param, eq, tag::alpha >()[system];
128 : 103959 : auto k = g_inputdeck.get< param, eq, tag::kappa >()[system];
129 : 103959 : auto bx = g_inputdeck.get< param, eq, tag::betax >()[system];
130 : 103959 : auto by = g_inputdeck.get< param, eq, tag::betay >()[system];
131 : 103959 : auto bz = g_inputdeck.get< param, eq, tag::betaz >()[system];
132 : : // spatial component of density field
133 : 103959 : auto gx = 1.0 - x*x - y*y - z*z;
134 : : // internal energy parameter
135 : 103959 : auto h = hx( bx, by, bz, x, y, z );
136 : : // temporal component of the density field
137 : 103959 : tk::real ft = std::exp( -a*t );
138 : : // density
139 : 103959 : auto r = r0 + ft*gx;
140 : : // energy
141 : 103959 : auto re = r*ec(ce,k,t,h,-1.0/3.0);
142 : : // pressure
143 : 103959 : auto p = eos_pressure< eq >( system, r, 0.0, 0.0, 0.0, re );
144 : :
145 [ + - ]: 103959 : return {{ r, 0.0, 0.0, 0.0, re/r, p }};
146 : : }
147 : :
148 : : std::vector< std::string >
149 : 351 : CompFlowProblemNLEnergyGrowth::analyticFieldNames( ncomp_t ) const
150 : : // *****************************************************************************
151 : : // Return analytic field names to be output to file
152 : : //! \return Vector of strings labelling fields output in file
153 : : // *****************************************************************************
154 : : {
155 : 351 : std::vector< std::string > n;
156 [ + - ][ + - ]: 351 : n.push_back( "density_analytical" );
157 [ + - ][ + - ]: 351 : n.push_back( "x-velocity_analytical" );
158 [ + - ][ + - ]: 351 : n.push_back( "y-velocity_analytical" );
159 [ + - ][ + - ]: 351 : n.push_back( "z-velocity_analytical" );
160 [ + - ][ + - ]: 351 : n.push_back( "specific_total_energy_analytical" );
161 [ + - ][ + - ]: 351 : n.push_back( "pressure_analytical" );
162 : :
163 : 351 : return n;
164 : : }
165 : :
166 : : std::vector< std::string >
167 : 12 : CompFlowProblemNLEnergyGrowth::names( ncomp_t ) const
168 : : // *****************************************************************************
169 : : // Return names of integral variables to be output to diagnostics file
170 : : //! \return Vector of strings labelling integral variables output
171 : : // *****************************************************************************
172 : : {
173 [ + - ][ + - ]: 72 : return { "r", "ru", "rv", "rw", "re" };
[ + - ][ + - ]
[ + - ][ + - ]
[ + + ][ - - ]
174 : : }
|