Line data Source code
1 : #ifndef INTEGRATOR_FLAME_H
2 : #define INTEGRATOR_FLAME_H
3 :
4 : #include <limits>
5 :
6 : #include "Integrator/Integrator.H"
7 : #include "BC/BC.H"
8 : #include "IC/IC.H"
9 : #include "Set/Set.H"
10 : #include "Model/Solid/Finite/NeoHookeanPredeformed.H"
11 : #include "IO/ParmParse.H"
12 :
13 : #include "Base/Mechanics.H"
14 :
15 : namespace Integrator
16 : {
17 :
18 : class Flame : virtual public Integrator::Integrator,
19 : virtual public Base::Mechanics<Model::Solid::Finite::NeoHookeanPredeformed>
20 : {
21 :
22 : using model_type = Model::Solid::Finite::NeoHookeanPredeformed;
23 :
24 : public:
25 : static constexpr const char* name = "flame";
26 :
27 : Flame();
28 : Flame(IO::ParmParse& pp);
29 :
30 : static void Parse(Flame& value, IO::ParmParse& pp);
31 :
32 6 : virtual ~Flame()
33 3 : {
34 3 : delete ic_eta;
35 3 : delete ic_phi;
36 3 : delete thermal.ic_temp;
37 3 : delete ic_laser;
38 3 : delete bc_eta;
39 3 : delete bc_temp;
40 6 : }
41 :
42 : protected:
43 : void Initialize(int lev) override;
44 : void TimeStepBegin(Set::Scalar a_time, int a_iter) override;
45 : void TimeStepComplete(Set::Scalar a_time, int a_iter) override;
46 : void Advance(int lev, Set::Scalar time, Set::Scalar dt) override;
47 : void TagCellsForRefinement(int lev, amrex::TagBoxArray& tags, amrex::Real /*time*/, int /*ngrow*/) override;
48 : void Regrid(int lev, Set::Scalar time) override;
49 : void Integrate(int amrlev, Set::Scalar time, int step,
50 : const amrex::MFIter& mfi, const amrex::Box& box) override;
51 : void UpdateModel(int a_step, Set::Scalar a_time) override;
52 : private:
53 :
54 : Set::Field<Set::Scalar> temp_mf;
55 : Set::Field<Set::Scalar> temp_old_mf;
56 : Set::Field<Set::Scalar> temps_mf;
57 : Set::Field<Set::Scalar> temps_old_mf;
58 :
59 : Set::Field<Set::Scalar> eta_mf;
60 : Set::Field<Set::Scalar> eta_old_mf;
61 : Set::Field<Set::Scalar> mob_mf;
62 : Set::Field<Set::Scalar> mdot_mf;
63 :
64 : Set::Field<Set::Scalar> phi_mf;
65 : Set::Field<Set::Scalar> field;
66 : Set::Field<Set::Scalar> alpha_mf;
67 : Set::Field<Set::Scalar> heatflux_mf;
68 :
69 : Set::Field<Set::Scalar> laser_mf;
70 :
71 : BC::BC<Set::Scalar>* bc_temp = nullptr;
72 : BC::BC<Set::Scalar>* bc_eta = nullptr;
73 : IC::IC<Set::Scalar>* ic_phi = nullptr;
74 : IC::IC<Set::Scalar>* ic_laser = nullptr;
75 :
76 : Set::Scalar phi_refinement_criterion = std::numeric_limits<Set::Scalar>::infinity();
77 : Set::Scalar m_refinement_criterion = NAN;
78 : Set::Scalar t_refinement_criterion = NAN;
79 : Set::Scalar t_refinement_restriction = NAN;
80 : Set::Scalar zeta = NAN;
81 : Set::Scalar zeta_0 =NAN;
82 : Set::Scalar small = NAN;
83 : Set::Scalar base_time = NAN;
84 : IC::IC<Set::Scalar>* ic_eta = nullptr;
85 : int ghost_count = -1;
86 : int homogeneousSystem = -1;
87 : bool plot_field = true;
88 : int variable_pressure = -1;
89 :
90 : struct {
91 : Set::Scalar gamma = NAN;
92 : Set::Scalar eps = NAN;
93 : Set::Scalar lambda = NAN;
94 : Set::Scalar kappa = NAN;
95 : Set::Scalar w1 = NAN, w12 = NAN, w0 = NAN;
96 : Set::Scalar min_eta = 0.001;
97 : int evolve = 1;
98 : } pf;
99 :
100 : struct {
101 : Set::Scalar P = NAN;
102 : Set::Scalar gamma = NAN;
103 :
104 : struct {
105 : Set::Scalar a1 = NAN, a2 = NAN, a3 = NAN;
106 : Set::Scalar b1 = NAN, b2 = NAN, b3 = NAN;
107 : Set::Scalar c1 = NAN;
108 : int mob_ap = NAN;
109 : int dependency = 1;
110 : Set::Scalar h1 = NAN, h2 = NAN;
111 :
112 : } arrhenius;
113 : struct {
114 : Set::Scalar r_ap = NAN, r_htpb = NAN, r_comb = NAN;
115 : Set::Scalar n_ap = NAN, n_htpb = NAN, n_comb = NAN;
116 : Set::Scalar a_fit = NAN, b_fit = NAN, c_fit = NAN;
117 : } power;
118 : } pressure;
119 :
120 : struct {
121 : bool on = 0;
122 : Set::Scalar rho_ap = NAN, rho_htpb = NAN;
123 : Set::Scalar k_ap = NAN, k_htpb = NAN;
124 : Set::Scalar cp_ap = NAN, cp_htpb = NAN;
125 : Set::Scalar q0 = NAN;
126 : Set::Scalar bound = NAN;
127 : Set::Scalar m_ap = NAN, m_htpb = NAN, m_comb = NAN;
128 : Set::Scalar E_ap = NAN, E_htpb = NAN;
129 : Set::Scalar hc = NAN, w1 = NAN;
130 : Set::Scalar modeling_ap = NAN, modeling_htpb = NAN;
131 : Set::Scalar mlocal_ap = NAN, mlocal_htpb = NAN, mlocal_comb = NAN;
132 : Set::Scalar T_fluid = NAN;
133 : Set::Scalar massfraction = NAN;
134 : Set::Scalar disperssion1 = NAN;
135 : Set::Scalar disperssion2 = NAN;
136 : Set::Scalar disperssion3 = NAN;
137 : IC::IC<Set::Scalar>* ic_temp = nullptr;
138 : } thermal;
139 :
140 : struct {
141 : int on = 0;
142 : Set::Scalar Tref = NAN;
143 : model_type model_ap, model_htpb;
144 : Set::Scalar traction = NAN;
145 : int phirefinement = -1;
146 : } elastic;
147 :
148 : // Integrated variables
149 : Set::Scalar volume = 0.0;
150 : Set::Scalar area = 0.0;
151 : Set::Scalar chamber_area = 0.0;
152 : Set::Scalar chamber_pressure = 1.0;
153 : Set::Scalar massflux = 0.00000001;
154 :
155 : Set::Scalar x_len = NAN;
156 : Set::Scalar y_len = NAN;
157 :
158 : BC::BC<Set::Scalar>* bc_psi = nullptr;
159 : };
160 : }
161 :
162 : #endif
|