Alamo
FullFeedback.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// meier2024diffuse
9//
10// This method imitates inheritance :code:`Propellant::Propellant` using static polymorphism
11//
12
13#ifndef MODEL_PROPELLANT_FULLFEEDBACK_H
14#define MODEL_PROPELLANT_FULLFEEDBACK_H
15
16#include "Propellant.H"
17
18namespace Model
19{
20namespace Propellant
21{
23{
24public:
25 static constexpr const char* name = "fullfeedback";
26
27 FullFeedback() = default;
28 FullFeedback(IO::ParmParse &pp, std::string name)
29 {
30 pp_queryclass(name,*this);
31 }
32
34 {
35 this->P = P;
36
37 zeta_2 = 0.000045 - P * 6.42e-6;
39 else zeta_1 = zeta_0;
40
41 // Pressure-dependent post calculation variables
42 k1 = a1 * P + b1 - zeta_1 / zeta;
43 k2 = a2 * P + b2 - zeta_1 / zeta;
44 k3 = 4.0 * log((c1 * P * P + a3 * P + b3) - k1 / 2.0 - k2 / 2.0);
45 return;
46 }
47
48 AMREX_FORCE_INLINE
50 {
51
52 Set::Scalar qflux = k1 * phi +
53 k2 * (1.0 - phi) +
54 (zeta_1 / zeta) * exp(k3 * phi * (1.0 - phi));
55 Set::Scalar mlocal = (mlocal_ap) * phi + (mlocal_htpb) * (1.0 - phi) + mlocal_comb * phi * (1.0 - phi);
56 Set::Scalar mdota = fabs(mdot);
57 Set::Scalar mbase = tanh(4.0 * mdota / (mlocal));
58
59 return mbase * qflux;
60 }
61
62
63 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
65 {
66 return k_ap * phi + k_htpb * (1.0 - phi);
67 }
68
69 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
71 {
72 return rho_ap * phi + rho_htpb * (1.0 - phi);
73 }
74
75 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
77 {
78 return cp_ap * phi + cp_htpb * (1.0 - phi);
79 }
80
81 AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
83 {
84 Set::Scalar L = NAN;
85 if (mob_ap == 1) L = m_ap * P * exp(-E_ap / T) * phi;
86 else L = m_ap * exp(-E_ap / T) * phi;
87 L += m_htpb * exp(-E_htpb / T) * (1.0 - phi);
88 if (T <= bound) L = 0.0;
89 return L;
90 }
91
92
93 static void Parse(FullFeedback& value, IO::ParmParse& pp)
94 {
95 // AP/HTPB interface length
96 pp_query_default("phi.zeta", value.zeta, 1.0e-5);
97 // Reference interface length for heat integration
98 pp_query_default("phi.zeta_0", value.zeta_0, 1.0e-5);
99
100 // Surrogate heat flux model paramater - AP
101 pp_query_required("a1", value.a1);
102 // Surrogate heat flux model paramater - HTPB
103 pp_query_required("a2", value.a2);
104 // Surrogate heat flux model paramater - Total
105 pp_query_required("a3", value.a3);
106 // Surrogate heat flux model paramater - AP
107 pp_query_required("b1", value.b1);
108 // Surrogate heat flux model paramater - HTPB
109 pp_query_required("b2", value.b2);
110 // Surrogate heat flux model paramater - Total
111 pp_query_required("b3", value.b3);
112 // Surrogate heat flux model paramater - Total
113 pp_query_required("c1", value.c1);
114
115 // Whether to use pressure to determined the reference Zeta
116 pp_query_default("pressure.dependency", value.arrhenius_dependency, true);
117
118 // AP mass flux reference value
119 pp_query_default("mlocal_ap", value.mlocal_ap, 0.0);
120 // HTPB mass flux reference value
121 pp_query_default("mlocal_comb", value.mlocal_comb, 0.0);
122
123 Set::Scalar massfraction = 0.8;
124 value.mlocal_htpb = 685000.0 - 850e3 * massfraction; // Replicating but needs to be revised!
125
126 // AP Density
127 pp_query_required("rho_ap", value.rho_ap);
128 // HTPB Density
129 pp_query_required("rho_htpb", value.rho_htpb);
130 // AP Thermal Conductivity
131 pp_query_required("k_ap", value.k_ap);
132 // HTPB Thermal Conductivity
133 pp_query_required("k_htpb", value.k_htpb);
134 // AP Specific Heat
135 pp_query_required("cp_ap", value.cp_ap);
136 //HTPB Specific Heat
137 pp_query_required("cp_htpb", value.cp_htpb);
138
139 // AP Pre-exponential factor for Arrhenius Law
140 pp_query_required("m_ap", value.m_ap);
141 // HTPB Pre-exponential factor for Arrhenius Law
142 pp_query_required("m_htpb", value.m_htpb);
143 // AP Activation Energy for Arrhenius Law
144 pp_query_required("E_ap", value.E_ap);
145 // HTPB Activation Energy for Arrhenius Law
146 pp_query_required("E_htpb", value.E_htpb);
147 // Whether to include pressure to the arrhenius law [??]
148 pp_query_default("mob_ap", value.mob_ap,0);
149 // HTPB Activation Energy for Arrhenius Law
150 pp_query_default("bound", value.bound,0.0);
151
152 }
153
154 // IO Variables
155 Set::Scalar zeta = NAN, zeta_0 = NAN;
156 Set::Scalar a1 = NAN, a2 = NAN, a3 = NAN;
157 Set::Scalar b1 = NAN, b2 = NAN, b3 = NAN;
159 //Set::Scalar h1 = NAN, h2 = NAN;
162
163 //Thermal properties
164 Set::Scalar k_ap = NAN, k_htpb = NAN;
167
168 // Regression variables
169 int mob_ap = -1;
170 Set::Scalar m_ap = NAN, m_htpb = NAN, m_comb = NAN;
171 Set::Scalar E_ap = NAN, E_htpb = NAN;
173
174 // Calculated variables
177 Set::Scalar k1=NAN, k2=NAN, k3=NAN, k4=NAN;
178};
179
180}
181}
182
183
184
185#endif
186
187
#define pp_query_required(...)
Definition ParmParse.H:99
#define pp_query_default(...)
Definition ParmParse.H:100
#define pp_queryclass(...)
Definition ParmParse.H:107
AMREX_FORCE_INLINE Set::Scalar get_qdot(const Set::Scalar mdot, const Set::Scalar phi)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar get_cp(const Set::Scalar phi)
static constexpr const char * name
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar get_L(Set::Scalar phi, Set::Scalar T)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar get_rho(const Set::Scalar phi)
void set_pressure(const Set::Scalar P)
FullFeedback(IO::ParmParse &pp, std::string name)
static void Parse(FullFeedback &value, IO::ParmParse &pp)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Set::Scalar get_K(const Set::Scalar phi)
amrex::Real Scalar
Definition Base.H:19