Alamo
ThermoElastic.H
Go to the documentation of this file.
1#ifndef INTEGRATOR_THERMOELASTIC_H
2#define INTEGRATOR_THERMOELASTIC_H
3
7#include "Numeric/Stencil.H"
8
9namespace Integrator
10{
12 virtual public HeatConduction,
13 virtual public Mechanics<Model::Solid::Affine::Isotropic>
14{
15public:
16 static constexpr const char* name = "thermoelastic";
17
20 Mechanics<Model::Solid::Affine::Isotropic>()
21 { }
22
23 ~ThermoElastic() = default;
24
27 static void Parse(ThermoElastic &value, IO::ParmParse &pp)
28 {
29 pp.queryclass<HeatConduction>("hc",value);
31
32 pp_queryarr("alpha",value.alpha); // Diffusion coefficient
33 }
34
35protected:
41
42 void UpdateModel(int a_step, Set::Scalar a_time) override
43 {
45
46 //Set::Scalar alpha[2];
47 //alpha[0] = 0.001; alpha[1] = 0.002;
48
49 for (int lev = 0; lev <= finest_level; ++lev)
50 {
51 for (MFIter mfi(*model_mf[lev], false); mfi.isValid(); ++mfi)
52 {
53 amrex::Box bx = mfi.grownnodaltilebox();
54 amrex::Array4<Model::Solid::Affine::Isotropic> const &model = model_mf[lev]->array(mfi);
55 amrex::Array4<const Set::Scalar> const &eta = eta_mf[lev]->array(mfi);
56 amrex::Array4<const Set::Scalar> const &temp = temp_old_mf[lev]->array(mfi);
57 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) {
58 Set::Matrix F0 = Set::Matrix::Zero();
60 for (int n = 0; n < eta.nComp(); n++)
61 {
62 F0 += (eta(i,j,k,n) * alpha[n]) * tempavg * Set::Matrix::Identity();
63 }
64 model(i, j, k).F0 = F0;
65 });
66 }
67
68 Util::RealFillBoundary(*model_mf[lev], geom[lev]);
69 }
70
71 }
72
73 void TimeStepBegin(Set::Scalar a_time, int a_step) override
74 {
75 HeatConduction::TimeStepBegin(a_time, a_step);
77 }
78
79 void Advance(int a_lev, amrex::Real a_time, amrex::Real a_dt) override
80 {
81 HeatConduction::Advance(a_lev, a_time, a_dt);
83 }
84
85 void TagCellsForRefinement(int a_lev, amrex::TagBoxArray& a_tags, Set::Scalar a_time, int a_ngrow) override
86 {
87 HeatConduction::TagCellsForRefinement(a_lev, a_tags, a_time, a_ngrow);
89 }
90
91 std::vector<Set::Scalar> alpha;
92};
93} // namespace Integrator
94#endif
#define pp_queryarr(...)
Definition ParmParse.H:103
void queryclass(std::string name, T *value, std::string file="", std::string func="", int line=-1)
Definition ParmParse.H:604
virtual void TimeStepBegin(Set::Scalar a_time, int a_step) override
Definition Mechanics.H:163
void Advance(int lev, Set::Scalar time, Set::Scalar dt) override
Definition Mechanics.H:241
Set::Field< MODEL > model_mf
Definition Mechanics.H:463
void Advance(int lev, Set::Scalar time, Set::Scalar dt)
Set::Field< Set::Scalar > temp_old_mf
void TagCellsForRefinement(int lev, amrex::TagBoxArray &a_tags, Set::Scalar, int)
virtual void TimeStepBegin(Set::Scalar, int)
This optional function is called at the beginning of every timestep, and can be used to complete addi...
Definition Integrator.H:166
void TagCellsForRefinement(int lev, amrex::TagBoxArray &a_tags, Set::Scalar a_time, int a_ngrow) override
Definition Mechanics.H:291
void Initialize(int lev) override
Definition Mechanics.H:185
virtual void UpdateModel(int a_step, Set::Scalar time) override
Definition Mechanics.H:196
void Advance(int a_lev, amrex::Real a_time, amrex::Real a_dt) override
void TagCellsForRefinement(int a_lev, amrex::TagBoxArray &a_tags, Set::Scalar a_time, int a_ngrow) override
static void Parse(ThermoElastic &value, IO::ParmParse &pp)
void TimeStepBegin(Set::Scalar a_time, int a_step) override
void UpdateModel(int a_step, Set::Scalar a_time) override
std::vector< Set::Scalar > alpha
ThermoElastic(IO::ParmParse &pp)
static constexpr const char * name
void Initialize(int lev) override
Collection of numerical integrator objects.
Definition AllenCahn.H:41
amrex::Real Scalar
Definition Base.H:19
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
Definition Base.H:23
AMREX_FORCE_INLINE void RealFillBoundary(amrex::FabArray< amrex::BaseFab< T > > &a_mf, const amrex::Geometry &)
Definition Util.H:322
static AMREX_FORCE_INLINE T CellToNodeAverage(const amrex::Array4< const T > &f, const int &i, const int &j, const int &k, const int &m, std::array< StencilType, AMREX_SPACEDIM > stencil=DefaultType)
Definition Stencil.H:1293