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