Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/PDE/CompFlow/Problem/GaussHumpCompflow.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 "GaussHumpCompflow.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::CompFlowProblemGaussHump;
26 : :
27 : : tk::InitializeFn::result_type
28 : 515510 : CompFlowProblemGaussHump::initialize( ncomp_t system,
29 : : ncomp_t ncomp,
30 : : tk::real x,
31 : : tk::real y,
32 : : tk::real,
33 : : tk::real t )
34 : : // *****************************************************************************
35 : : //! Evaluate analytical solution at (x,y,z,t) for all components
36 : : //! \param[in] system Equation system index, i.e., which compressible
37 : : //! flow equation system we operate on among the systems of PDEs
38 : : //! \param[in] ncomp Number of scalar components in this PDE system
39 : : //! \param[in] x X coordinate where to evaluate the solution
40 : : //! \param[in] y Y coordinate where to evaluate the solution
41 : : //! \param[in] t Time where to evaluate the solution
42 : : //! \return Values of all components evaluated at (x)
43 : : //! \note The function signature must follow tk::InitializeFn
44 : : // *****************************************************************************
45 : : {
46 [ - + ][ - - ]: 515510 : Assert( ncomp == 5, "Number of scalar components must be 5" );
[ - - ][ - - ]
47 : :
48 : : using tag::param;
49 : :
50 [ + - ]: 515510 : const auto vel = prescribedVelocity( system, ncomp, x, y, 0.0 );
51 : :
52 : : tk::real r, p, u, v, w, rE;
53 : :
54 : : // center of the hump
55 : 515510 : auto x0 = 0.25 + vel[0][0]*t;
56 : 515510 : auto y0 = 0.25 + vel[0][1]*t;
57 : :
58 : : // density
59 : 515510 : r = 1.0 + exp( -((x-x0)*(x-x0)
60 : 515510 : + (y-y0)*(y-y0))/(2.0 * 0.005) );
61 : : // pressure
62 : 515510 : p = 1.0;
63 : : // velocity
64 : 515510 : u = 1;
65 : 515510 : v = 1;
66 : 515510 : w = 0;
67 : : // total specific energy
68 [ + - ]: 515510 : rE = eos_totalenergy< eq >( system, r, u, v, w, p );
69 : :
70 [ + - ]: 1031020 : return {{ r, r*u, r*v, r*w, rE }};
71 : : }
72 : :
73 : : tk::InitializeFn::result_type
74 : 131286 : CompFlowProblemGaussHump::analyticSolution( ncomp_t system,
75 : : ncomp_t ncomp,
76 : : tk::real x,
77 : : tk::real y,
78 : : tk::real,
79 : : tk::real t )
80 : : // *****************************************************************************
81 : : //! Evaluate analytical solution at (x,y,z,t) for all components
82 : : //! \param[in] system Equation system index, i.e., which compressible
83 : : //! flow equation system we operate on among the systems of PDEs
84 : : //! \param[in] ncomp Number of scalar components in this PDE system
85 : : //! \param[in] x X coordinate where to evaluate the solution
86 : : //! \param[in] y Y coordinate where to evaluate the solution
87 : : //! \param[in] t Time where to evaluate the solution
88 : : //! \return Values of all components evaluated at (x)
89 : : //! \note The function signature must follow tk::InitializeFn
90 : : // *****************************************************************************
91 : : {
92 [ - + ][ - - ]: 131286 : Assert( ncomp == 5, "Number of scalar components must be 5" );
[ - - ][ - - ]
93 : :
94 : : using tag::param;
95 : :
96 [ + - ]: 131286 : const auto vel = prescribedVelocity( system, ncomp, x, y, 0.0 );
97 : :
98 : : // center of the hump
99 : 131286 : auto x0 = 0.25 + vel[0][0]*t;
100 : 131286 : auto y0 = 0.25 + vel[0][1]*t;
101 : :
102 : : // density
103 : 131286 : auto r = 1.0 + exp( -((x-x0)*(x-x0) + (y-y0)*(y-y0))/(2.0 * 0.005) );
104 : : // pressure
105 : 131286 : auto p = 1.0;
106 : : // velocity
107 : 131286 : auto u = 1.0;
108 : 131286 : auto v = 1.0;
109 : 131286 : auto w = 0.0;
110 : : // total specific energy
111 [ + - ]: 131286 : auto E = eos_totalenergy< eq >( system, r, u, v, w, p ) / r;
112 : :
113 [ + - ]: 262572 : return {{ r, u, v, w, E, p }};
114 : : }
115 : :
116 : : std::vector< std::string >
117 : 138 : CompFlowProblemGaussHump::analyticFieldNames( ncomp_t ) const
118 : : // *****************************************************************************
119 : : // Return analytic field names to be output to file
120 : : //! \return Vector of strings labelling fields output in file
121 : : // *****************************************************************************
122 : : {
123 : 138 : std::vector< std::string > n;
124 [ + - ][ + - ]: 138 : n.push_back( "density_analytical" );
125 [ + - ][ + - ]: 138 : n.push_back( "x-velocity_analytical" );
126 [ + - ][ + - ]: 138 : n.push_back( "y-velocity_analytical" );
127 [ + - ][ + - ]: 138 : n.push_back( "z-velocity_analytical" );
128 [ + - ][ + - ]: 138 : n.push_back( "specific_total_energy_analytical" );
129 [ + - ][ + - ]: 138 : n.push_back( "pressure_analytical" );
130 : :
131 : 138 : return n;
132 : : }
133 : :
134 : : std::vector< std::string >
135 : 5 : CompFlowProblemGaussHump::names( ncomp_t ) const
136 : : // *****************************************************************************
137 : : // Return names of integral variables to be output to diagnostics file
138 : : //! \return Vector of strings labelling integral variables output
139 : : // *****************************************************************************
140 : : {
141 [ + - ][ + - ]: 30 : return { "r", "ru", "rv", "rw", "re" };
[ + - ][ + - ]
[ + - ][ + - ]
[ + + ][ - - ]
142 : : }
143 : :
144 : : std::vector< std::array< tk::real, 3 > >
145 : 646796 : CompFlowProblemGaussHump::prescribedVelocity( ncomp_t, ncomp_t ncomp, tk::real,
146 : : tk::real, tk::real )
147 : : // *****************************************************************************
148 : : //! Assign prescribed velocity at a point
149 : : //! \param[in] ncomp Number of components in this transport equation
150 : : //! \return Velocity assigned to all vertices of a tetrehedron, size:
151 : : //! ncomp * ndim = [ncomp][3]
152 : : // *****************************************************************************
153 : : {
154 [ + - ]: 646796 : std::vector< std::array< tk::real, 3 > > vel( ncomp );
155 : :
156 [ + + ]: 3880776 : for (ncomp_t c=0; c<ncomp; ++c)
157 : 3233980 : vel[c] = {{ 1, 1, 0.0 }};
158 : :
159 : 646796 : return vel;
160 : : }
|