1#ifndef INTEGRATOR_THERMOELASTIC_H
2#define INTEGRATOR_THERMOELASTIC_H
7#include "Numeric/Stencil.H"
13 virtual public Mechanics<Model::Solid::Affine::Isotropic>
16 static constexpr const char*
name =
"thermoelastic";
49 for (
int lev = 0; lev <= finest_level; ++lev)
51 for (MFIter mfi(*
model_mf[lev],
false); mfi.isValid(); ++mfi)
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) {
60 for (
int n = 0; n < eta.nComp(); n++)
62 F0 += (eta(i,j,k,n) *
alpha[n]) * tempavg * Set::Matrix::Identity();
64 model(i, j, k).F0 = F0;
79 void Advance(
int a_lev, amrex::Real a_time, amrex::Real a_dt)
override
void queryclass(std::string name, T *value, std::string file="", std::string func="", int line=-1)
virtual void TimeStepBegin(Set::Scalar a_time, int a_step) override
void Advance(int lev, Set::Scalar time, Set::Scalar dt) override
Set::Field< MODEL > model_mf
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...
void TagCellsForRefinement(int lev, amrex::TagBoxArray &a_tags, Set::Scalar a_time, int a_ngrow) override
Set::Field< Set::Scalar > eta_mf
void Initialize(int lev) override
virtual void UpdateModel(int a_step, Set::Scalar time) override
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.
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
AMREX_FORCE_INLINE void RealFillBoundary(amrex::FabArray< amrex::BaseFab< T > > &a_mf, const amrex::Geometry &)
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)