12 :
public boost::enable_shared_from_this<BlockedThermalParameters> {
23 return boost::shared_ptr<double>(shared_from_this(),
28 return boost::shared_ptr<double>(shared_from_this(), &
heatCapacity);
38 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
39 std::string block_name,
40 boost::shared_ptr<BlockedThermalParameters> blockedParamsPtr,
43 double default_thermal_capacity_scale, Sev sev,
51 double local_heat_capacity_scale = default_thermal_capacity_scale;
54 OpMatThermalBlocks(boost::shared_ptr<double> conductivity_ptr,
55 boost::shared_ptr<double> capacity_ptr,
56 boost::shared_ptr<double> heat_conductivity_scaling_ptr,
57 boost::shared_ptr<double> heat_capacity_scaling_ptr,
58 double local_heat_conductivity,
59 double local_heat_capacity,
60 double local_heat_conductivity_scale,
61 double local_heat_capacity_scale,
65 std::vector<const CubitMeshSets *> meshset_vec_ptr)
67 conductivityPtr(conductivity_ptr), capacityPtr(capacity_ptr),
68 conductivityScalingPtr(heat_conductivity_scaling_ptr),
69 capacityScalingPtr(heat_capacity_scaling_ptr),
70 defaultHeatConductivity(local_heat_conductivity),
71 defaultHeatCapacity(local_heat_capacity),
72 defaultHeatConductivityScale(local_heat_conductivity_scale),
73 defaultHeatCapacityScale(local_heat_capacity_scale),
78 "Cannot get data from thermal block");
81 MoFEMErrorCode doWork(
int side, EntityType type,
82 EntitiesFieldData::EntData &data) {
85 auto scale_param = [
this](
auto parameter,
double scaling) {
86 return parameter * scaling;
89 for (
auto &b : blockData) {
91 if (b.blockEnts.find(getFEEntityHandle()) != b.blockEnts.end()) {
92 *conductivityScalingPtr =
93 thermalConductivityScaling(b.conductivity, b.capacity);
95 scale_param(b.conductivity, *conductivityScalingPtr);
96 *capacityScalingPtr = heatCapacityScaling(b.conductivity, b.capacity);
97 *capacityPtr = scale_param(b.capacity, *capacityScalingPtr);
102 *conductivityScalingPtr = thermalConductivityScaling(
103 defaultHeatConductivity / defaultHeatConductivityScale,
104 defaultHeatCapacity /
105 defaultHeatCapacityScale);
108 scale_param(defaultHeatConductivity, *conductivityScalingPtr);
109 *capacityScalingPtr = heatCapacityScaling(
110 defaultHeatConductivity / defaultHeatConductivityScale,
111 defaultHeatCapacity /
112 defaultHeatCapacityScale);
114 *capacityPtr = scale_param(defaultHeatCapacity, *capacityScalingPtr);
120 double defaultHeatConductivity;
121 double defaultHeatCapacity;
122 double defaultHeatConductivityScale;
123 double defaultHeatCapacityScale;
132 std::vector<BlockData> blockData;
136 std::vector<const CubitMeshSets *> meshset_vec_ptr,
140 for (
auto m : meshset_vec_ptr) {
142 std::vector<double> block_data;
143 CHKERR m->getAttributes(block_data);
144 if (block_data.size() < 2) {
146 "Expected that block has at least two attributes");
148 auto get_block_ents = [&]() {
151 m_field.
get_moab().get_entities_by_handle(
m->meshset, ents,
true);
156 <<
m->getName() <<
": conductivity = " << block_data[0]
157 <<
" capacity = " << block_data[1];
159 blockData.push_back({block_data[0], block_data[1], get_block_ents()});
165 boost::shared_ptr<double> conductivityPtr;
166 boost::shared_ptr<double> conductivityScalingPtr;
167 boost::shared_ptr<double> capacityPtr;
168 boost::shared_ptr<double> capacityScalingPtr;
171 pipeline.push_back(
new OpMatThermalBlocks(
172 blockedParamsPtr->getHeatConductivityPtr(),
173 blockedParamsPtr->getHeatCapacityPtr(),
174 blockedParamsPtr->getHeatConductivityScalingPtr(),
175 blockedParamsPtr->getHeatCapacityScalingPtr(), local_heat_conductivity,
176 local_heat_capacity, local_heat_conductivity_scale,
177 local_heat_capacity_scale, thermal_conductivity_scaling_func,
178 heat_capacity_scaling_func, m_field, sev,
181 m_field.
getInterface<MeshsetsManager>()->getCubitMeshsetPtr(std::regex(
183 (boost::format(
"%s(.*)") % block_name).str()
193 :
public boost::enable_shared_from_this<BlockedThermoElasticParameters> {
198 return boost::shared_ptr<VectorDouble>(shared_from_this(), &
coeffExpansion);
202 return boost::shared_ptr<double>(shared_from_this(), &
refTemp);
208 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
209 std::string block_name,
210 boost::shared_ptr<BlockedThermoElasticParameters> blockedParamsPtr,
217 struct OpMatThermoElasticBlocks :
public DomainEleOp {
218 OpMatThermoElasticBlocks(boost::shared_ptr<VectorDouble> expansion_ptr,
219 boost::shared_ptr<double> ref_temp_ptr,
220 double local_coeff_expansion,
223 std::vector<const CubitMeshSets *> meshset_vec_ptr)
225 expansionPtr(expansion_ptr), refTempPtr(ref_temp_ptr),
226 defaultCoeffExpansion(local_coeff_expansion),
227 defaultRefTemp(local_ref_temp) {
229 extractThermoElasticBlockData(m_field, meshset_vec_ptr, sev),
230 "Cannot get data from thermoelastic block");
233 MoFEMErrorCode doWork(
int side, EntityType type,
234 EntitiesFieldData::EntData &data) {
237 for (
auto &b : blockData) {
239 if (b.blockEnts.find(getFEEntityHandle()) != b.blockEnts.end()) {
240 *expansionPtr = b.expansion;
241 *refTempPtr = b.ref_temp;
246 *expansionPtr = VectorDouble(
SPACE_DIM, defaultCoeffExpansion);
247 *refTempPtr = defaultRefTemp;
253 double defaultCoeffExpansion;
254 double defaultRefTemp;
257 VectorDouble expansion;
261 std::vector<BlockData> blockData;
263 MoFEMErrorCode extractThermoElasticBlockData(
265 std::vector<const CubitMeshSets *> meshset_vec_ptr, Sev sev) {
268 for (
auto m : meshset_vec_ptr) {
270 std::vector<double> block_data;
271 CHKERR m->getAttributes(block_data);
272 if (block_data.size() < 2) {
274 "Expected that block has at least two attributes");
276 auto get_block_ents = [&]() {
279 m_field.
get_moab().get_entities_by_handle(
m->meshset, ents,
true);
283 auto get_expansion = [&]() {
284 VectorDouble expansion(
SPACE_DIM, block_data[1]);
285 if (block_data.size() > 2) {
286 expansion[1] = block_data[2];
288 if (
SPACE_DIM == 3 && block_data.size() > 3) {
289 expansion[2] = block_data[3];
294 auto coeff_exp_vec = get_expansion();
297 <<
" ref_temp = " << block_data[0]
298 <<
" expansion = " << coeff_exp_vec;
300 blockData.push_back({block_data[0], coeff_exp_vec, get_block_ents()});
306 boost::shared_ptr<VectorDouble> expansionPtr;
307 boost::shared_ptr<double> refTempPtr;
310 pipeline.push_back(
new OpMatThermoElasticBlocks(
311 blockedParamsPtr->getCoeffExpansionPtr(),
312 blockedParamsPtr->getRefTempPtr(), local_coeff_expansion, local_ref_temp,
316 m_field.
getInterface<MeshsetsManager>()->getCubitMeshsetPtr(std::regex(
318 (boost::format(
"%s(.*)") % block_name).str()
329 const std::string row_field_name,
const std::string col_field_name,
330 boost::shared_ptr<MatrixDouble> mDptr,
331 boost::shared_ptr<VectorDouble> coeff_expansion_ptr);
333 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
334 EntitiesFieldData::EntData &col_data);
337 boost::shared_ptr<MatrixDouble>
mDPtr;
347 boost::shared_ptr<MatrixDouble> strain_ptr,
348 boost::shared_ptr<VectorDouble> temp_ptr,
349 boost::shared_ptr<MatrixDouble> m_D_ptr,
350 boost::shared_ptr<VectorDouble> coeff_expansion_ptr,
351 boost::shared_ptr<MatrixDouble> stress_ptr);
354 boost::shared_ptr<VectorDouble> temp_ptr,
355 boost::shared_ptr<MatrixDouble> m_D_ptr,
356 boost::shared_ptr<VectorDouble> coeff_expansion_ptr,
357 boost::shared_ptr<double> ref_temp_ptr,
358 boost::shared_ptr<MatrixDouble> stress_ptr);
363 boost::shared_ptr<MatrixDouble>
strainPtr;
364 boost::shared_ptr<VectorDouble>
tempPtr;
365 boost::shared_ptr<MatrixDouble>
mDPtr;
368 boost::shared_ptr<MatrixDouble>
stressPtr;
372 const std::string row_field_name,
const std::string col_field_name,
373 boost::shared_ptr<MatrixDouble> mDptr,
374 boost::shared_ptr<VectorDouble> coeff_expansion_ptr)
377 mDPtr(mDptr), coeffExpansionPtr(coeff_expansion_ptr) {
383 EntitiesFieldData::EntData &col_data) {
386 auto &locMat = AssemblyDomainEleOp::locMat;
388 const auto nb_integration_pts = row_data.getN().size1();
389 const auto nb_row_base_functions = row_data.getN().size2();
390 auto t_w = getFTensor0IntegrationWeight();
392 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
393 auto t_D = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM, 0>(*
mDPtr);
402 t_coeff_exp(
i,
j) = 0;
404 t_coeff_exp(d, d) = (*coeffExpansionPtr)[d];
407 t_eigen_strain(
i,
j) = (t_D(
i,
j,
k,
l) * t_coeff_exp(
k,
l));
409 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
411 double alpha = getMeasure() * t_w;
413 for (; rr != AssemblyDomainEleOp::nbRows /
SPACE_DIM; ++rr) {
414 auto t_mat = getFTensor1FromMat<SPACE_DIM, 1>(locMat, rr *
SPACE_DIM);
415 auto t_col_base = col_data.getFTensor0N(gg, 0);
416 for (
auto cc = 0; cc != AssemblyDomainEleOp::nbCols; cc++) {
419 (t_row_diff_base(
j) * t_eigen_strain(
i,
j)) * (t_col_base * alpha);
427 for (; rr != nb_row_base_functions; ++rr)
437 const std::string
field_name, boost::shared_ptr<MatrixDouble> strain_ptr,
438 boost::shared_ptr<VectorDouble> temp_ptr,
439 boost::shared_ptr<MatrixDouble> m_D_ptr,
440 boost::shared_ptr<VectorDouble> coeff_expansion_ptr,
441 boost::shared_ptr<MatrixDouble> stress_ptr)
443 tempPtr(temp_ptr), mDPtr(m_D_ptr), coeffExpansionPtr(coeff_expansion_ptr),
444 stressPtr(stress_ptr) {
446 std::fill(&doEntities[MBEDGE], &doEntities[MBMAXTYPE],
false);
450 boost::shared_ptr<MatrixDouble> strain_ptr,
451 boost::shared_ptr<VectorDouble> temp_ptr,
452 boost::shared_ptr<MatrixDouble> m_D_ptr,
453 boost::shared_ptr<VectorDouble> coeff_expansion_ptr,
454 boost::shared_ptr<double> ref_temp_ptr,
455 boost::shared_ptr<MatrixDouble> stress_ptr)
457 tempPtr(temp_ptr), mDPtr(m_D_ptr), coeffExpansionPtr(coeff_expansion_ptr),
458 refTempPtr(ref_temp_ptr), stressPtr(stress_ptr) {}
464 const auto nb_gauss_pts = getGaussPts().size2();
467 auto t_D = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM, 0>(*
mDPtr);
468 auto t_strain = getFTensor2SymmetricFromMat<SPACE_DIM>(*
strainPtr);
469 auto t_stress = getFTensor2SymmetricFromMat<SPACE_DIM>(*
stressPtr);
470 auto t_temp = getFTensor0FromVec(*
tempPtr);
477 t_coeff_exp(
i,
j) = 0;
479 t_coeff_exp(d, d) = (*coeffExpansionPtr)[
d];
482 for (
size_t gg = 0; gg != nb_gauss_pts; ++gg) {
485 (t_strain(
k,
l) - t_coeff_exp(
k,
l) * (t_temp - (*refTempPtr)));
494struct SetTargetTemperature;
500template <AssemblyType A, IntegrationType I,
typename OpBase>
504template <AssemblyType A, IntegrationType I, typename OpBase>
508template <AssemblyType A, IntegrationType I, typename OpBase>
511 MoFEM::OpFluxRhsImpl<ThermoElasticOps::SetTargetTemperature, 1, 1, A, I,
521 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
523 boost::shared_ptr<VectorDouble> temp_ptr, std::string block_name,
Sev sev
533 auto add_op = [&](
auto &&meshset_vec_ptr) {
535 for (
auto m : meshset_vec_ptr) {
536 std::vector<double> block_data;
537 m->getAttributes(block_data);
538 if (block_data.size() < 2) {
540 "Expected two parameters");
542 double target_temperature = block_data[0];
545 auto ents_ptr = boost::make_shared<Range>();
550 <<
"Add " << *
m <<
" target temperature " << target_temperature
551 <<
" penalty " << beta;
553 pipeline.push_back(
new OP_SOURCE(
555 [target_temperature, beta](
double,
double,
double) {
556 return target_temperature * beta;
559 pipeline.push_back(
new OP_TEMP(
561 [beta](
double,
double,
double) {
return -beta; }, ents_ptr));
570 (boost::format(
"%s(.*)") % block_name).str()
582template <AssemblyType A, IntegrationType I,
typename OpBase>
583struct AddFluxToLhsPipelineImpl<
592 static MoFEMErrorCode
add(
594 boost::ptr_deque<ForcesAndSourcesCore::UserDataOperator> &pipeline,
596 boost::shared_ptr<VectorDouble> temp_ptr, std::string block_name, Sev sev
601 using OP_MASS =
typename FormsIntegrators<OpBase>::template Assembly<
604 auto add_op = [&](
auto &&meshset_vec_ptr) {
606 for (
auto m : meshset_vec_ptr) {
607 std::vector<double> block_data;
608 m->getAttributes(block_data);
609 if (block_data.size() != 2) {
611 "Expected two parameters");
615 auto ents_ptr = boost::make_shared<Range>();
620 <<
"Add " << *
m <<
" penalty " << beta;
622 pipeline.push_back(
new OP_MASS(
624 [beta](
double,
double,
double) {
return -beta; }, ents_ptr));
631 m_field.
getInterface<MeshsetsManager>()->getCubitMeshsetPtr(std::regex(
633 (boost::format(
"%s(.*)") % block_name).str()
653template <AssemblyType A, IntegrationType I>
657 boost::shared_ptr<VectorDouble> dot_T_ptr,
658 boost::shared_ptr<VectorDouble> T_ptr,
659 boost::shared_ptr<MatrixDouble> grad_T_ptr,
660 boost::shared_ptr<double> initial_T_ptr,
661 boost::shared_ptr<double> peak_T_ptr)
666 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &data) {
669 const double vol = getMeasure();
670 auto t_w = getFTensor0IntegrationWeight();
671 auto t_coords = getFTensor1CoordsAtGaussPts();
672 auto t_base = data.getFTensor0N();
673 auto t_diff_base = data.getFTensor1DiffN<
SPACE_DIM>();
676 if (data.getDiffN().size1() != data.getN().size1())
678 if (data.getDiffN().size2() != data.getN().size2() *
SPACE_DIM) {
680 <<
"Side " << rowSide <<
" " << CN::EntityTypeName(rowType);
681 MOFEM_LOG(
"SELF", Sev::error) << data.getN();
682 MOFEM_LOG(
"SELF", Sev::error) << data.getDiffN();
687 auto t_T = getFTensor0FromVec(*
TPtr);
690 for (
int gg = 0; gg != nbIntegrationPts; ++gg) {
692 const double alpha = t_w * vol;
695 t_coords(1), t_coords(2));
699 for (; bb != nbRows; ++bb) {
700 locF[bb] += (t_base * alpha) * (t_T - set_T);
706 for (; bb < nbRowBaseFunctions; ++bb) {
723 boost::shared_ptr<VectorDouble>
TPtr;
734template <AssemblyType A, IntegrationType I>
738 boost::shared_ptr<VectorDouble> T_ptr)
745 MoFEMErrorCode
iNtegrate(EntitiesFieldData::EntData &row_data,
746 EntitiesFieldData::EntData &col_data) {
749 const double vol = getMeasure();
750 auto t_w = getFTensor0IntegrationWeight();
751 auto t_coords = getFTensor1CoordsAtGaussPts();
752 auto t_row_base = row_data.getFTensor0N();
753 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
756 if (row_data.getDiffN().size1() != row_data.getN().size1())
758 if (row_data.getDiffN().size2() != row_data.getN().size2() *
SPACE_DIM) {
760 <<
"Side " << rowSide <<
" " << CN::EntityTypeName(rowType);
761 MOFEM_LOG(
"SELF", Sev::error) << row_data.getN();
762 MOFEM_LOG(
"SELF", Sev::error) << row_data.getDiffN();
766 if (col_data.getDiffN().size1() != col_data.getN().size1())
768 if (col_data.getDiffN().size2() != col_data.getN().size2() *
SPACE_DIM) {
770 <<
"Side " << rowSide <<
" " << CN::EntityTypeName(rowType);
771 MOFEM_LOG(
"SELF", Sev::error) << col_data.getN();
772 MOFEM_LOG(
"SELF", Sev::error) << col_data.getDiffN();
777 auto t_T = getFTensor0FromVec(*
TPtr);
780 for (
int gg = 0; gg != nbIntegrationPts; gg++) {
782 const double alpha = t_w * vol;
785 for (; rr != nbRows; ++rr) {
787 auto t_col_base = col_data.getFTensor0N(gg, 0);
788 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
790 for (
int cc = 0; cc != nbCols; ++cc) {
792 locMat(rr, cc) += (t_row_base * t_col_base * alpha);
802 for (; rr < nbRowBaseFunctions; ++rr) {
817 boost::shared_ptr<VectorDouble>
TPtr;
#define MOFEM_TAG_AND_LOG(channel, severity, tag)
Tag and log in channel.
EntitiesFieldData::EntData EntData
DomainEle::UserDataOperator DomainEleOp
Finire element operator type.
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
#define MOFEM_LOG(channel, severity)
Log.
SeverityLevel
Severity levels.
#define MOFEM_LOG_CHANNEL(channel)
Set and reset channel.
MoFEMErrorCode getCubitMeshsetPtr(const int ms_id, const CubitBCType cubit_bc_type, const CubitMeshSets **cubit_meshset_ptr) const
get cubit meshset
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
boost::function< double(double, double)> ScalerFunTwoArgs
MoFEMErrorCode addMatThermalBlockOps(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, std::string block_name, boost::shared_ptr< BlockedThermalParameters > blockedParamsPtr, double default_heat_conductivity, double default_heat_capacity, double default_thermal_conductivity_scale, double default_thermal_capacity_scale, Sev sev, ScalerFunTwoArgs thermal_conductivity_scaling_func, ScalerFunTwoArgs heat_capacity_scaling_func)
MoFEMErrorCode addMatThermoElasticBlockOps(MoFEM::Interface &m_field, boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, std::string block_name, boost::shared_ptr< BlockedThermoElasticParameters > blockedParamsPtr, double default_coeff_expansion, double default_ref_temp, Sev sev)
constexpr IntegrationType I
constexpr auto field_name
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpMass< 1, SPACE_DIM > OpMass
[Only used with Hooke equation (linear material model)]
FTensor::Index< 'm', 3 > m
static MoFEMErrorCode add(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, MoFEM::Interface &m_field, const std::string field_name, boost::shared_ptr< VectorDouble > temp_ptr, std::string block_name, Sev sev)
AddFluxToLhsPipelineImpl()=delete
static MoFEMErrorCode add(boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pipeline, MoFEM::Interface &m_field, const std::string field_name, boost::shared_ptr< VectorDouble > temp_ptr, std::string block_name, Sev sev)
AddFluxToRhsPipelineImpl()=delete
virtual moab::Interface & get_moab()=0
Deprecated interface functions.
Data on single entity (This is passed as argument to DataOperator::doWork)
Interface for managing meshsets containing materials and boundary conditions.
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
Lhs for setting initial conditions wrt T.
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< VectorDouble > TPtr
OpLhsSetInitT_dT(const std::string field_name, boost::shared_ptr< VectorDouble > T_ptr)
OpRhsSetInitT(const std::string field_name, boost::shared_ptr< VectorDouble > dot_T_ptr, boost::shared_ptr< VectorDouble > T_ptr, boost::shared_ptr< MatrixDouble > grad_T_ptr, boost::shared_ptr< double > initial_T_ptr, boost::shared_ptr< double > peak_T_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &data)
boost::shared_ptr< double > peakTPtr
boost::shared_ptr< VectorDouble > dotTPtr
boost::shared_ptr< VectorDouble > TPtr
boost::shared_ptr< MatrixDouble > gradTPtr
boost::shared_ptr< MatrixDouble > gradQPtr
boost::shared_ptr< double > initialTPtr
auto getHeatCapacityPtr()
auto getHeatConductivityScalingPtr()
double heatCapacityScaling
double heatConductivityScaling
auto getHeatCapacityScalingPtr()
auto getHeatConductivityPtr()
auto getCoeffExpansionPtr()
VectorDouble coeffExpansion
boost::shared_ptr< MatrixDouble > mDPtr
boost::shared_ptr< VectorDouble > coeffExpansionPtr
OpKCauchyThermoElasticity(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< MatrixDouble > mDptr, boost::shared_ptr< VectorDouble > coeff_expansion_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< double > refTempPtr
DEPRECATED OpStressThermal(const std::string field_name, boost::shared_ptr< MatrixDouble > strain_ptr, boost::shared_ptr< VectorDouble > temp_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr, boost::shared_ptr< VectorDouble > coeff_expansion_ptr, boost::shared_ptr< MatrixDouble > stress_ptr)
boost::shared_ptr< MatrixDouble > strainPtr
DEPRECATED OpStressThermal(const std::string field_name, boost::shared_ptr< MatrixDouble > strain_ptr, boost::shared_ptr< VectorDouble > temp_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr, boost::shared_ptr< VectorDouble > coeff_expansion_ptr, boost::shared_ptr< MatrixDouble > stress_ptr)
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
boost::shared_ptr< MatrixDouble > stressPtr
boost::shared_ptr< MatrixDouble > mDPtr
boost::shared_ptr< VectorDouble > coeffExpansionPtr
OpStressThermal(boost::shared_ptr< MatrixDouble > strain_ptr, boost::shared_ptr< VectorDouble > temp_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr, boost::shared_ptr< VectorDouble > coeff_expansion_ptr, boost::shared_ptr< double > ref_temp_ptr, boost::shared_ptr< MatrixDouble > stress_ptr)
boost::shared_ptr< VectorDouble > tempPtr
auto init_T
Initialisation function for temperature field.
double default_thermal_conductivity_scale
ScalerFunTwoArgs heat_capacity_scaling
ScalerFunTwoArgs thermal_conductivity_scaling
double default_heat_capacity
double default_coeff_expansion
double default_heat_conductivity