Alamo
PowerLaw.H
Go to the documentation of this file.
1//
2// This SCP model implements the method described in the following paper
3//
4// .. bibliography::
5// :list: none
6// :filter: False
7//
8// kanagarajan2022diffuse
9//
10// This method imitates inheritance :code:`Propellant::Propellant` using static polymorphism
11//
12
13#ifndef MODEL_PROPELLANT_POWERLAW_H
14#define MODEL_PROPELLANT_POWERLAW_H
15
16#include "Propellant.H"
17
18namespace Model
19{
20namespace Propellant
21{
23{
24public:
25 static constexpr const char* name = "powerlaw";
26
27 PowerLaw() = default;
28 PowerLaw(IO::ParmParse &pp, std::string name)
29 {
30 pp_queryclass(name,*this);
31 }
32
33
34 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
36 {
37 // for the pressure power law option
38 fmod_ap = r_ap * pow(P, n_ap);
39 fmod_htpb = r_htpb * pow(P, n_htpb);
40 fmod_comb = r_comb * pow(P, n_comb);
41
42 // a_fit = -1.16582 * sin(P) - 0.681788 * cos(P) + 3.3563;
43 // b_fit = -0.708225 * sin(P) + 0.548067 * cos(P) + 1.55985;
44 // c_fit = -0.0130849 * sin(P) - 0.03597 * cos(P) + 0.00725694;
45 }
46
47 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
48 Set::Scalar get_K (const Set::Scalar /*phi*/) {return NAN;}
49 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
50 Set::Scalar get_rho (const Set::Scalar /*phi*/) {return NAN;}
51 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
52 Set::Scalar get_cp (const Set::Scalar /*phi*/) {return NAN;}
53 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
54 Set::Scalar get_qdot (const Set::Scalar /*mdot*/, const Set::Scalar /*phi*/) {return NAN;}
55
56 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
58 {
59 Set::Scalar L = NAN;
60 // if (homogeneousSystem == 1) {
61 // Set::Vector grad_eta = Numeric::Gradient(eta, i, j, k, 0, DX);
62 // Set::Scalar angle = acos(grad_eta[0] / grad_eta.lpNorm<2>()) * 180 / 3.1415;
63 // if (angle > 90) angle = angle - 90.0;
64 // if (angle > 180) angle = angle - 180.0;
65 // if (angle > 270) angle = angle - 270.0;
66 // L = pressure.power.a_fit + pressure.power.b_fit * exp(-pressure.power.c_fit * angle);
67 // }
68 // else
69 {
70 Set::Scalar fs_actual = fmod_ap * phi
71 + fmod_htpb * (1.0 - phi)
72 + 4.0 * fmod_comb * phi * (1.0 - phi);
73 L = fs_actual / gamma / deltaw /*(pf.w1 - pf.w0)*/;
74 }
75
76 return L;
77 }
78
79 static void Parse(PowerLaw& value, IO::ParmParse& pp)
80 {
82 // Scaling factor for mobility
83 pp_query_required("gamma", value.gamma);
84 // AP power pressure law parameter (r*P^n)
85 pp_query_required("r_ap", value.r_ap);
86 // HTPB power pressure law parameter (r*P^n)
87 pp_query_required("r_htpb", value.r_htpb);
88 // AP/HTPB power pressure law parameter (r*P^n)
89 pp_query_required("r_comb", value.r_comb);
90 // AP power pressure law parameter (r*P^n)
91 pp_query_required("n_ap", value.n_ap);
92 // HTPB power pressure law parameter (r*P^n)
93 pp_query_required("n_htpb", value.n_htpb);
94 // AP/HTPB power pressure law parameter (r*P^n)
95 pp_query_required("n_comb", value.n_comb);
96 // jump in chemical potential
97 pp_query_default("deltaw", value.deltaw, 1.0);
98 }
99
101 Set::Scalar r_ap = NAN, r_htpb = NAN, r_comb = NAN;
102 Set::Scalar n_ap = NAN, n_htpb = NAN, n_comb = NAN;
105};
106}
107}
108
109#endif
#define pp_query_required(...)
Definition ParmParse.H:99
#define pp_query_default(...)
Definition ParmParse.H:100
#define pp_queryclass(...)
Definition ParmParse.H:107
#define INFO
Definition Util.H:20
std::string getPrefix() const
Definition ParmParse.H:134
static void Parse(PowerLaw &value, IO::ParmParse &pp)
Definition PowerLaw.H:79
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar get_L(Set::Scalar phi, Set::Scalar)
Definition PowerLaw.H:57
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar get_cp(const Set::Scalar)
Definition PowerLaw.H:52
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar get_rho(const Set::Scalar)
Definition PowerLaw.H:50
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar get_qdot(const Set::Scalar, const Set::Scalar)
Definition PowerLaw.H:54
static constexpr const char * name
Definition PowerLaw.H:25
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar get_K(const Set::Scalar)
Definition PowerLaw.H:48
PowerLaw(IO::ParmParse &pp, std::string name)
Definition PowerLaw.H:28
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void set_pressure(const Set::Scalar P)
Definition PowerLaw.H:35
amrex::Real Scalar
Definition Base.H:19
void Message(std::string file, std::string func, int line, Args const &... args)
Definition Util.H:141