Alamo
PhaseFieldMicrostructure.H
Go to the documentation of this file.
1 ///
2 /// \file PhaseFieldMicrostructure.H
3 ///
4 #ifndef INTEGRATOR_PHASEFIELDMICROSTRUCTURE_H
5 #define INTEGRATOR_PHASEFIELDMICROSTRUCTURE_H
6 
7 #include <iostream>
8 #include <fstream>
9 #include <iomanip>
10 
11 #include "AMReX.H"
12 #include "AMReX_ParmParse.H"
13 #include "AMReX_ParallelDescriptor.H"
14 #include <AMReX_MLMG.H>
15 
16 #include "Integrator/Integrator.H"
17 #include "Integrator/Mechanics.H"
18 
19 #include "BC/BC.H"
20 #include "BC/Constant.H"
22 #include "BC/Step.H"
23 #include "IC/Constant.H"
24 #include "IC/TabulatedInterface.H"
25 #include "IC/PerturbedInterface.H"
26 #include "IC/Voronoi.H"
27 #include "IC/Sphere.H"
28 #include "IC/Expression.H"
29 #include "IC/Ellipse.H"
30 #include "IC/Random.H"
31 
32 #include "Model/Interface/GB/GB.H"
33 #include "Model/Interface/GB/Sin.H"
36 #include "Model/Interface/GB/SH.H"
37 
40 #include "Operator/Elastic.H"
41 
42 namespace Integrator
43 {
44 //using model_type = Model::Solid::Affine::Cubic;
45 
47  Wilmore = 1,
48  K12 = 2};
49 
50 ///
51 /// \class PhaseFieldMicrostructure
52 /// \brief Microstructure evolution with grain boundary anisotropy
53 ///
54 /// Solve the Allen-Cahn evolution equation for microstructure with parameters \f$\eta_1\ldots\eta_n\f$,
55 /// where n corresponds to the number of grains.
56 ///
57 template<class model_type>
58 class PhaseFieldMicrostructure : public Base::Mechanics<model_type>
59 {
60 public:
63  {pp_queryclass(*this);}
65  {
66  delete boundary;
67  delete ic;
68  delete mybc;
69  }
71  {
72  BL_PROFILE("PhaseFieldMicrostructure::Parse");
73 
74  // Number of grain fields (may be more if using different IC)
75  pp_query_default("pf.number_of_grains", value.number_of_grains,2);
76  pp_query_required("pf.M", value.pf.M); // Mobility
77  pp_query_required("pf.mu", value.pf.mu); // Phase field :math:`\mu`
78  pp_query_required("pf.gamma", value.pf.gamma); // Phase field :math:`\gamma`
79  pp_query_required("pf.sigma0", value.pf.sigma0); // Initial GB energy if not using anisotropy
80  pp_query_required("pf.l_gb", value.pf.l_gb); // Mobility
81  pp_query_default("pf.elastic_df",value.pf.elastic_df,false); // Determine whether to use elastic driving force
82  pp_query_default("pf.elastic_mult",value.pf.elastic_mult,1.0); // Multiplier of elastic energy
83 
84  pp_query_default("pf.threshold.value",value.pf.threshold.value,0.0); // Value used for thresholding kinetic relation
85  pp_query_default("pf.threshold.chempot",value.pf.threshold.chempot,false); // Whether to include chemical potential in threshold
86  pp_query_default("pf.threshold.boundary",value.pf.threshold.boundary,false); // Whether to include boundary energy in threshold
87  pp_query_default("pf.threshold.corner",value.pf.threshold.corner,false); // Whether to include corner regularization in threshold
88  pp_query_default("pf.threshold.lagrange",value.pf.threshold.lagrange,false); // Whether to include lagrange multiplier in threshold
89  pp_query_default("pf.threshold.mechanics",value.pf.threshold.mechanics,false);// Whether to include mechanical driving force in threshold
90  {
91  value.pf.threshold.on =
92  value.pf.threshold.chempot || value.pf.threshold.boundary ||
93  value.pf.threshold.corner || value.pf.threshold.lagrange ||
94  value.pf.threshold.mechanics;
95 
96  std::string type = "continuous";
97  pp_query_validate("pf.threshold.type",type,{"continuous","chop"}); // Type of thresholding to use
98  if (type == "continuous") value.pf.threshold.type = ThresholdType::Continuous;
99  else if (type == "chop") value.pf.threshold.type = ThresholdType::Chop;
100  }
101 
102  value.pf.L = (4./3.)*value.pf.M / value.pf.l_gb;
103 
104  pp_query_required("amr.max_level", value.max_level); // Maximum AMR level
105  pp_query_default("amr.ref_threshold", value.ref_threshold, 0.1); // Phase field refinement threshold
106 
107  // Elasticity
108  pp_query_default("mechanics.tstart",value.mechanics.tstart, 0.0);
109  value.mechanics.model.clear();
110  value.mechanics.model.resize(value.number_of_grains,model_type::Zero());
111  for (int i=0; i < value.number_of_grains; i++)
112  {
113  // By default, read in the model specified by "mechanics.model"
114  if (pp.getEntries("mechanics.model").size())
115  pp_queryclass("mechanics.model", value.mechanics.model[i]);
116 
117  // If individual models are specified, read those in and overwrite
118  std::string name = "mechanics.model" + std::to_string(i+1);
119  if (pp.getEntries(name).size())
120  pp_queryclass(std::string(name.data()), value.mechanics.model[i]);
121  }
122 
123  value.m_type = Base::Mechanics<model_type>::Disable; // Turn mechanics off by default
124  pp_queryclass("mechanics",static_cast<Base::Mechanics<model_type>&>(value));
126  value.number_of_ghost_cells = std::max(value.number_of_ghost_cells,3);
127 
128 
129  // Lagrange multiplier method for enforcing volumes
130  pp_query_default("lagrange.on", value.lagrange.on,false);
131  if (value.lagrange.on)
132  {
133  pp_query_required("lagrange.lambda", value.lagrange.lambda); // Lagrange multiplier value
134  pp_query_required("lagrange.vol0", value.lagrange.vol0); // Prescribed volume
135  pp_query_default("lagrange.tstart", value.lagrange.tstart,0.0); // Lagrange multipler start time
136  value.SetThermoInt(1);
137  }
138 
139  pp_query_default("sdf.on",value.sdf.on,false); // synthetic driving force (SDF)
140  if(value.sdf.on)
141  {
142  std::vector<std::string> vals;
143  pp_queryarr("sdf.val",vals); // value of SDF for each grain
144  int nvals = static_cast<int>(vals.size());
145  if (nvals == 1)
146  for (int i = 0; i < value.number_of_grains; i++)
147  value.sdf.val.push_back(Numeric::Interpolator::Linear<Set::Scalar>(vals[0]));
148  else if (nvals == value.number_of_grains)
149  for (int i = 0; i < value.number_of_grains; i++)
150  value.sdf.val.push_back(Numeric::Interpolator::Linear<Set::Scalar>(vals[i]));
151  else
152  Util::Abort(INFO,"sdf.val received ", vals.size(), " but requires 1 or ", value.number_of_grains);
153 
154  pp_query_default("sdf.tstart",value.sdf.tstart,0.0); // time to begin applying SDF
155  }
156 
157  // Anisotropic grain boundary energy parameters
158 
159  pp_query_default("anisotropy.on", value.anisotropy.on,false); // Turn on
160  if (value.anisotropy.on)
161  {
162  pp_query_required("anisotropy.beta", value.anisotropy.beta); // Regularization param
163  pp_query_required("anisotropy.tstart", value.anisotropy.tstart); // Time to turn on anisotropy
164  value.anisotropy.timestep = value.timestep;
165  pp_query_required("anisotropy.timestep", value.anisotropy.timestep); // Modify timestep when turned on
166  value.anisotropy.plot_int = value.plot_int;
167  pp_query_default("anisotropy.plot_int", value.anisotropy.plot_int, -1); // Modify plot_int when turned on
168  value.anisotropy.plot_dt = value.plot_dt;
169  pp_query_default("anisotropy.plot_dt", value.anisotropy.plot_dt, -1.0); // Modify plot_dt when turned on
170  pp_query_default("anisotropy.thermo_int", value.anisotropy.thermo_int, -1); // Modify thermo int when turned on
171  pp_query_default("anisotropy.thermo_plot_int", value.anisotropy.thermo_plot_int, -1); // Modify thermo plot int when turned on
172  pp_query_default("anisotropy.elastic_int",value.anisotropy.elastic_int, -1); // Frequency of elastic calculation
173  if (value.anisotropy.on)
174  value.number_of_ghost_cells = std::max(value.number_of_ghost_cells,2);
175 
176  // Determine the kind of regularization to use
177  std::map<std::string, RegularizationType> regularization_type;
178  regularization_type["wilmore"] = RegularizationType::Wilmore;
179  regularization_type["k12"] = RegularizationType::K12;
180 
181  std::string regularization_type_input;
182  // Type of regularization to use
183  pp_query_validate("anisotropy.regularization", regularization_type_input,{"k12","wilmore"});
184  value.regularization = regularization_type[regularization_type_input];
185 
186  // Type of GB to use
187  pp_query_validate("anisotropy.gb_type", value.gb_type,{"abssin","sin","read","sh"});
188  if (value.gb_type == "abssin") value.boundary = new Model::Interface::GB::AbsSin(pp,"anisotropy.abssin");
189  else if (value.gb_type == "sin") value.boundary = new Model::Interface::GB::Sin(pp,"anisotropy.sin");
190  else if (value.gb_type == "read") value.boundary = new Model::Interface::GB::Read(pp,"anisotropy.read");
191  else if (value.gb_type == "sh") value.boundary = new Model::Interface::GB::SH(pp,"anisotropy.sh");
192  else if (value.anisotropy.on) Util::Abort(INFO,"A GB model must be specified");
193  }
194 
195  std::string bc_type;
196  // Type of boundary condition to use for eta
197  pp_query_validate("bc.eta.type",bc_type,{"constant","step"});
198  if (bc_type == "constant") value.mybc = new BC::Constant(value.number_of_grains,pp,"bc.eta");
199  else if (bc_type == "step") value.mybc = new BC::Step(pp,"bc.eta");
200 
201  std::string ic_type;
202  // Initial condition to use for eta
203  pp_query_validate("ic.type", ic_type,{"constant","perturbed_interface","tabulated_interface","voronoi","expression","sphere","ellipse"});
204  // [switch ic.type] Initial conditions for Etas
205  if (ic_type == "constant") value.ic = new IC::Constant(value.geom,pp,"ic");
206  else if (ic_type == "perturbed_interface") value.ic = new IC::PerturbedInterface(value.geom,pp,"ic");
207  else if (ic_type == "tabulated_interface") value.ic = new IC::TabulatedInterface(value.geom,pp,"ic");
208  else if (ic_type == "voronoi") value.ic = new IC::Voronoi(value.geom, pp, "ic.voronoi");
209  else if (ic_type == "expression") value.ic = new IC::Expression(value.geom,pp,"ic.expression");
210  else if (ic_type == "sphere") value.ic = new IC::Sphere(value.geom,pp,"ic.sphere");
211  else if (ic_type == "ellipse") value.ic = new IC::Ellipse(value.geom,pp,"ic.ellipse");
212  else if (ic_type == "random") value.ic = new IC::Random(value.geom,pp,"ic.random");
213  else Util::Abort(INFO, "No valid initial condition specified");
214  // [end switch]
215 
216  // Anisotropic mobility
217  pp_query_default("anisotropic_kinetics.on",value.anisotropic_kinetics.on, 0);
218  if (value.anisotropic_kinetics.on)
219  {
220  // simulation time when anisotropic kinetics is activated
221  pp_query_default("anisotropic_kinetics.tstart",value.anisotropic_kinetics.tstart, 0.0);
222  std::string mobility_filename, threshold_filename;
223  // file containing anisotropic mobility data
224  pp_query_file("anisotropic_kinetics.mobility",mobility_filename);
225  value.anisotropic_kinetics.mobility = Numeric::Interpolator::Linear<Set::Scalar>::Read(mobility_filename);
226  // file containing anisotropic mobility data
227  pp_query_file("anisotropic_kinetics.threshold",threshold_filename);
228  value.anisotropic_kinetics.threshold = Numeric::Interpolator::Linear<Set::Scalar>::Read(threshold_filename);
229  value.RegisterNewFab(value.anisotropic_kinetics.L_mf, value.mybc, value.number_of_grains, 0, "mobility",true);
230  value.RegisterNewFab(value.anisotropic_kinetics.threshold_mf, value.mybc, value.number_of_grains, 0, "theshold",true);
231  }
232 
233 
234 
235 
236  value.RegisterNewFab(value.eta_mf, value.mybc, value.number_of_grains, value.number_of_ghost_cells, "Eta",true);
237  value.RegisterNewFab(value.driving_force_mf, value.mybc, value.number_of_grains, value.number_of_ghost_cells, "DrivingForce",false);
238  if (value.pf.threshold.on)
239  value.RegisterNewFab(value.driving_force_threshold_mf, value.mybc, value.number_of_grains, value.number_of_ghost_cells, "DrivingForceThreshold",false);
240 
241  value.RegisterIntegratedVariable(&value.volume, "volume");
242  value.RegisterIntegratedVariable(&value.area, "area");
243  value.RegisterIntegratedVariable(&value.gbenergy, "gbenergy");
244  value.RegisterIntegratedVariable(&value.realgbenergy, "realgbenergy");
245  value.RegisterIntegratedVariable(&value.regenergy, "regenergy");
246 
247 
248  }
249 
250 
251 protected:
252 
253  /// \fn Advance
254  /// \brief Evolve phase field in time
255  void Advance (int lev, Real time, Real dt) override;
256  void Initialize (int lev) override;
257 
258  void TagCellsForRefinement (int lev, amrex::TagBoxArray& tags, amrex::Real time, int ngrow) override;
259 
260  virtual void TimeStepBegin(amrex::Real time, int iter) override;
261  virtual void TimeStepComplete(amrex::Real time, int iter) override;
262  void Integrate(int amrlev, Set::Scalar time, int step,
263  const amrex::MFIter &mfi, const amrex::Box &box) override;
264 
265 
266  virtual void UpdateModel(int /*a_step*/, Set::Scalar /*a_time*/) override;
267 
268 private:
269 
273 
274  // Cell fab
275  Set::Field<Set::Scalar> eta_mf; // Multicomponent field variable storing \t$\eta_i\t$ for the __current__ timestep
278 
280 
281  //amrex::Real M, mu, gamma, sigma0, l_gb, beta;
284  Continuous = 0, Chop = 1
285  };
286  struct {
287  Set::Scalar M = NAN;
288  Set::Scalar L = NAN;
293  bool elastic_df = false;
295  struct {
296  bool on = false;
297  bool chempot = false;
298  bool boundary = false;
299  bool corner = false;
300  bool lagrange = false;
301  bool mechanics = false;
302  bool sdf = false;
304  ThresholdType type = ThresholdType::Continuous;
305  } threshold;
306  } pf;
307 
308  struct {
309  int on = 0;
316 
317  struct {
318  int on = 0;
322  int plot_int = -1;
324  int thermo_int = -1, thermo_plot_int = -1;
327  int elastic_int = -1;
328  } anisotropy;
329 
330  struct {
331  bool on = 0;
332  Set::Scalar tstart = NAN;
335  } lagrange;
336 
337  struct {
338  int on = 0;
339  std::vector<Numeric::Interpolator::Linear<Set::Scalar>> val;
340  Set::Scalar tstart = 0.0;
341  } sdf;
342 
343  std::string gb_type, filename;
344 
346 
347  IC::IC *ic = nullptr;
348 
354 
355  struct
356  {
357  Set::Scalar tstart = 0.0;
358  std::vector<model_type> model;
359  } mechanics;
360 
361 
362 };
363 }
364 #endif
Integrator::PhaseFieldMicrostructure::plot_dt
Set::Scalar plot_dt
Definition: PhaseFieldMicrostructure.H:323
Integrator::PhaseFieldMicrostructure::lambda
Set::Scalar lambda
Definition: PhaseFieldMicrostructure.H:334
SH.H
Integrator::PhaseFieldMicrostructure::threshold
Numeric::Interpolator::Linear< Set::Scalar > threshold
Definition: PhaseFieldMicrostructure.H:312
Integrator::PhaseFieldMicrostructure::value
Set::Scalar value
Definition: PhaseFieldMicrostructure.H:303
Integrator::PhaseFieldMicrostructure::mechanics
bool mechanics
Definition: PhaseFieldMicrostructure.H:301
IC::IC
Pure abstract IC object from which all other IC objects inherit.
Definition: IC.H:12
BC::BC< Set::Scalar >
Integrator::PhaseFieldMicrostructure::filename
std::string filename
Definition: PhaseFieldMicrostructure.H:343
Integrator::K12
@ K12
Definition: PhaseFieldMicrostructure.H:48
Integrator::PhaseFieldMicrostructure::driving_force_mf
Set::Field< Set::Scalar > driving_force_mf
Definition: PhaseFieldMicrostructure.H:276
IC::Ellipse
Definition: Ellipse.H:21
Integrator::Base::Mechanics
Definition: Mechanics.H:23
Integrator::Integrator::box
std::vector< amrex::Box > box
Definition: Integrator.H:367
PerturbedInterface.H
Integrator::PhaseFieldMicrostructure::driving_force_threshold_mf
Set::Field< Set::Scalar > driving_force_threshold_mf
Definition: PhaseFieldMicrostructure.H:277
Integrator::PhaseFieldMicrostructure::thermo_int
int thermo_int
Definition: PhaseFieldMicrostructure.H:324
Mechanics.H
Model::Interface::GB::GB
Definition: GB.H:18
Integrator::PhaseFieldMicrostructure::gamma
Set::Scalar gamma
Definition: PhaseFieldMicrostructure.H:290
Integrator::PhaseFieldMicrostructure::elastic_mult
Set::Scalar elastic_mult
Definition: PhaseFieldMicrostructure.H:294
Read.H
Model::Interface::GB::Read
Definition: Read.H:23
Sphere.H
Integrator::PhaseFieldMicrostructure::mybc
BC::BC< Set::Scalar > * mybc
Definition: PhaseFieldMicrostructure.H:279
Integrator.H
Integrator::PhaseFieldMicrostructure::number_of_ghost_cells
int number_of_ghost_cells
Definition: PhaseFieldMicrostructure.H:271
Integrator::PhaseFieldMicrostructure::TagCellsForRefinement
void TagCellsForRefinement(int lev, amrex::TagBoxArray &tags, amrex::Real time, int ngrow) override
Definition: PhaseFieldMicrostructure.cpp:282
Set::Field< Set::Scalar >
Definition: Set.H:236
Integrator::PhaseFieldMicrostructure::phi0
Set::Scalar phi0
Definition: PhaseFieldMicrostructure.H:326
Integrator::PhaseFieldMicrostructure::val
std::vector< Numeric::Interpolator::Linear< Set::Scalar > > val
Definition: PhaseFieldMicrostructure.H:339
Integrator::PhaseFieldMicrostructure::mu
Set::Scalar mu
Definition: PhaseFieldMicrostructure.H:289
Integrator::RegularizationType
RegularizationType
Definition: PhaseFieldMicrostructure.H:46
Integrator::PhaseFieldMicrostructure::ref_threshold
Set::Scalar ref_threshold
Definition: PhaseFieldMicrostructure.H:272
Expression.H
Integrator::PhaseFieldMicrostructure::eta_mf
Set::Field< Set::Scalar > eta_mf
Definition: PhaseFieldMicrostructure.H:275
Integrator::PhaseFieldMicrostructure::Chop
@ Chop
Definition: PhaseFieldMicrostructure.H:284
Integrator::PhaseFieldMicrostructure::elastic_df
bool elastic_df
Definition: PhaseFieldMicrostructure.H:293
Integrator::PhaseFieldMicrostructure::ic
IC::IC * ic
Definition: PhaseFieldMicrostructure.H:347
Integrator::PhaseFieldMicrostructure::anisotropic_kinetics
struct Integrator::PhaseFieldMicrostructure::@16 anisotropic_kinetics
Integrator::PhaseFieldMicrostructure::plot_int
int plot_int
Definition: PhaseFieldMicrostructure.H:322
Constant.H
Constant.H
Integrator::PhaseFieldMicrostructure
Microstructure evolution with grain boundary anisotropy.
Definition: PhaseFieldMicrostructure.H:58
Integrator::PhaseFieldMicrostructure::UpdateModel
virtual void UpdateModel(int, Set::Scalar) override
Definition: PhaseFieldMicrostructure.cpp:313
Cubic.H
Elastic.H
Integrator::PhaseFieldMicrostructure::M
Set::Scalar M
Definition: PhaseFieldMicrostructure.H:287
Integrator::PhaseFieldMicrostructure::L
Set::Scalar L
Definition: PhaseFieldMicrostructure.H:288
Util::Random
Set::Scalar Random()
Definition: Set.cpp:9
Set::Scalar
amrex::Real Scalar
Definition: Base.H:19
Integrator::PhaseFieldMicrostructure::tstart
Set::Scalar tstart
Definition: PhaseFieldMicrostructure.H:310
pp_queryclass
#define pp_queryclass(...)
Definition: ParmParse.H:105
Integrator::PhaseFieldMicrostructure::number_of_grains
int number_of_grains
Definition: PhaseFieldMicrostructure.H:270
Integrator::PhaseFieldMicrostructure::corner
bool corner
Definition: PhaseFieldMicrostructure.H:299
Model::Interface::GB::Sin
Definition: Sin.H:18
AbsSin.H
Integrator::PhaseFieldMicrostructure::chempot
bool chempot
Definition: PhaseFieldMicrostructure.H:297
Integrator::PhaseFieldMicrostructure::elastic_int
int elastic_int
Definition: PhaseFieldMicrostructure.H:327
Integrator::PhaseFieldMicrostructure::on
bool on
Definition: PhaseFieldMicrostructure.H:296
IC::Voronoi
Definition: Voronoi.H:10
Integrator::PhaseFieldMicrostructure::lagrange
bool lagrange
Definition: PhaseFieldMicrostructure.H:300
Integrator::PhaseFieldMicrostructure::sigma1
Set::Scalar sigma1
Definition: PhaseFieldMicrostructure.H:325
Constant.H
TabulatedInterface.H
Integrator::PhaseFieldMicrostructure::Integrate
void Integrate(int amrlev, Set::Scalar time, int step, const amrex::MFIter &mfi, const amrex::Box &box) override
Definition: PhaseFieldMicrostructure.cpp:361
IC::PerturbedInterface
Definition: PerturbedInterface.H:27
Integrator::PhaseFieldMicrostructure::theta0
Set::Scalar theta0
Definition: PhaseFieldMicrostructure.H:325
Integrator::PhaseFieldMicrostructure::sdf
bool sdf
Definition: PhaseFieldMicrostructure.H:302
Integrator::PhaseFieldMicrostructure::Parse
static void Parse(PhaseFieldMicrostructure &value, IO::ParmParse &pp)
Definition: PhaseFieldMicrostructure.H:70
Sin.H
Integrator::PhaseFieldMicrostructure::l_gb
Set::Scalar l_gb
Definition: PhaseFieldMicrostructure.H:292
pp_query_file
#define pp_query_file(...)
Definition: ParmParse.H:102
Integrator::PhaseFieldMicrostructure::L_mf
Set::Field< Set::Scalar > L_mf
Definition: PhaseFieldMicrostructure.H:313
Step.H
Model::Interface::GB::SH
Definition: SH.H:35
Cubic.H
Integrator::PhaseFieldMicrostructure::area
Set::Scalar area
Definition: PhaseFieldMicrostructure.H:350
Integrator::PhaseFieldMicrostructure::pf
struct Integrator::PhaseFieldMicrostructure::@15 pf
pp_query_default
#define pp_query_default(...)
Definition: ParmParse.H:100
Integrator::PhaseFieldMicrostructure::type
ThresholdType type
Definition: PhaseFieldMicrostructure.H:304
Numeric::Interpolator::Linear< Set::Scalar >
Util::Abort
void Abort(const char *msg)
Definition: Util.cpp:165
Integrator
Collection of numerical integrator objects.
Definition: AllenCahn.H:39
IC::Constant
Definition: Constant.H:18
Random.H
Integrator::PhaseFieldMicrostructure::gbenergy
Set::Scalar gbenergy
Definition: PhaseFieldMicrostructure.H:351
Integrator::PhaseFieldMicrostructure::volume
Set::Scalar volume
Definition: PhaseFieldMicrostructure.H:349
Numeric::Interpolator::Linear::Read
static Linear< T > Read(std::string filename, int derivative=0)
BC::Constant
Definition: Constant.H:89
BC::Step
Definition: Step.H:22
IC::Expression
Definition: Expression.H:44
Integrator::Wilmore
@ Wilmore
Definition: PhaseFieldMicrostructure.H:47
Integrator::PhaseFieldMicrostructure::PhaseFieldMicrostructure
PhaseFieldMicrostructure(IO::ParmParse &pp)
Definition: PhaseFieldMicrostructure.H:62
Integrator::PhaseFieldMicrostructure::mobility
Numeric::Interpolator::Linear< Set::Scalar > mobility
Definition: PhaseFieldMicrostructure.H:311
Voronoi.H
pp_query_validate
#define pp_query_validate(...)
Definition: ParmParse.H:101
Integrator::PhaseFieldMicrostructure::thermo_plot_int
int thermo_plot_int
Definition: PhaseFieldMicrostructure.H:324
Integrator::PhaseFieldMicrostructure::threshold
struct Integrator::PhaseFieldMicrostructure::@15::@21 threshold
pp_query_required
#define pp_query_required(...)
Definition: ParmParse.H:99
Integrator::PhaseFieldMicrostructure::gb_type
std::string gb_type
Definition: PhaseFieldMicrostructure.H:343
Integrator::PhaseFieldMicrostructure::Advance
void Advance(int lev, Real time, Real dt) override
Evolve phase field in time.
Definition: PhaseFieldMicrostructure.cpp:30
BC.H
IO::ParmParse
Definition: ParmParse.H:110
Integrator::PhaseFieldMicrostructure::anisotropy
struct Integrator::PhaseFieldMicrostructure::@17 anisotropy
Integrator::PhaseFieldMicrostructure::timestep
Set::Scalar timestep
Definition: PhaseFieldMicrostructure.H:320
Integrator::PhaseFieldMicrostructure::realgbenergy
Set::Scalar realgbenergy
Definition: PhaseFieldMicrostructure.H:352
Integrator::PhaseFieldMicrostructure::regenergy
Set::Scalar regenergy
Definition: PhaseFieldMicrostructure.H:353
Integrator::PhaseFieldMicrostructure::Initialize
void Initialize(int lev) override
Definition: PhaseFieldMicrostructure.cpp:274
Integrator::PhaseFieldMicrostructure::threshold_mf
Set::Field< Set::Scalar > threshold_mf
Definition: PhaseFieldMicrostructure.H:314
Integrator::PhaseFieldMicrostructure::model
std::vector< model_type > model
Definition: PhaseFieldMicrostructure.H:358
Integrator::PhaseFieldMicrostructure::vol0
Set::Scalar vol0
Definition: PhaseFieldMicrostructure.H:333
Integrator::PhaseFieldMicrostructure::sigma0
Set::Scalar sigma0
Definition: PhaseFieldMicrostructure.H:291
Integrator::PhaseFieldMicrostructure::beta
Set::Scalar beta
Definition: PhaseFieldMicrostructure.H:319
Integrator::PhaseFieldMicrostructure::Continuous
@ Continuous
Definition: PhaseFieldMicrostructure.H:284
Integrator::PhaseFieldMicrostructure::TimeStepBegin
virtual void TimeStepBegin(amrex::Real time, int iter) override
Definition: PhaseFieldMicrostructure.cpp:347
INFO
#define INFO
Definition: Util.H:20
Integrator::Integrator::dt
amrex::Vector< amrex::Real > dt
Timesteps for each level of refinement.
Definition: Integrator.H:303
Integrator::PhaseFieldMicrostructure::TimeStepComplete
virtual void TimeStepComplete(amrex::Real time, int iter) override
Definition: PhaseFieldMicrostructure.cpp:307
Integrator::PhaseFieldMicrostructure::regularization
RegularizationType regularization
Definition: PhaseFieldMicrostructure.H:282
Model::Interface::GB::AbsSin
Definition: AbsSin.H:18
IC::Sphere
Definition: Sphere.H:13
Integrator::PhaseFieldMicrostructure::~PhaseFieldMicrostructure
virtual ~PhaseFieldMicrostructure()
Definition: PhaseFieldMicrostructure.H:64
Integrator::PhaseFieldMicrostructure::ThresholdType
ThresholdType
Definition: PhaseFieldMicrostructure.H:283
Integrator::PhaseFieldMicrostructure::boundary
bool boundary
Definition: PhaseFieldMicrostructure.H:298
Ellipse.H
Integrator::PhaseFieldMicrostructure::PhaseFieldMicrostructure
PhaseFieldMicrostructure()
Definition: PhaseFieldMicrostructure.H:61
IC::TabulatedInterface
Definition: TabulatedInterface.H:14
pp_queryarr
#define pp_queryarr(...)
Definition: ParmParse.H:103