23 std::vector<EntityHandle> &map_gauss_pts,
24 boost::shared_ptr<CommonData> common_data_ptr)
26 mapGaussPts(map_gauss_pts), commonDataPtr(common_data_ptr) {
36 std::array<double, 9> def;
37 std::fill(def.begin(), def.end(), 0);
39 auto get_tag = [&](
const std::string name,
size_t size) {
42 MB_TAG_CREAT | MB_TAG_SPARSE,
63 auto set_float_precision = [](
const double x) {
64 if (std::abs(x) < std::numeric_limits<float>::epsilon())
71 for (
auto &
v : mat.data())
72 v = set_float_precision(
v);
74 &*mat.data().begin());
77 auto th_plastic_surface = get_tag(
"PLASTIC_SURFACE", 1);
78 auto th_hardening = get_tag(
"HARDENING", 1);
79 auto th_tau = get_tag(
"PLASTIC_MULTIPLIER", 1);
80 auto th_temperature = get_tag(
"TEMPERATURE", 1);
81 auto th_plastic_flow = get_tag(
"PLASTIC_FLOW", 9);
82 auto th_plastic_strain = get_tag(
"PLASTIC_STRAIN", 9);
85 getFTensor2SymmetricFromMat<SPACE_DIM>(
commonDataPtr->plasticFlow);
86 auto t_plastic_strain =
87 getFTensor2SymmetricFromMat<SPACE_DIM>(
commonDataPtr->plasticStrain);
94 for (
int gg = 0; gg !=
commonDataPtr->plasticSurface.size(); ++gg) {
99 CHKERR set_tag(th_plastic_surface, gg, set_scalar(
f));
100 CHKERR set_tag(th_hardening, gg, set_scalar(
h));
101 CHKERR set_tag(th_tau, gg, set_scalar(tau));
102 CHKERR set_tag(th_temperature, gg, set_scalar(
temp));
103 CHKERR set_tag(th_plastic_flow, gg, set_matrix_3d(t_flow));
104 CHKERR set_tag(th_plastic_strain, gg, set_matrix_3d(t_plastic_strain));
114 Monitor(SmartPetscObj<DM> &dm, boost::shared_ptr<PostProcEle> &post_proc_fe,
115 boost::shared_ptr<DomainEle> &reaction_fe,
116 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>> ux_scatter,
117 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>> uy_scatter,
118 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>> uz_scatter)
128 auto make_vtk = [&]() {
132 "out_plastic_" + boost::lexical_cast<std::string>(ts_step) +
".h5m");
136 auto calculate_reaction = [&]() {
142 CHKERR VecGhostUpdateBegin(
r, ADD_VALUES, SCATTER_REVERSE);
143 CHKERR VecGhostUpdateEnd(
r, ADD_VALUES, SCATTER_REVERSE);
149 MOFEM_LOG_C(
"EXAMPLE", Sev::inform,
"reaction time %3.4e %3.4e", ts_t,
155 auto print_max_min = [&](
auto &tuple,
const std::string msg) {
157 CHKERR VecScatterBegin(std::get<1>(tuple), ts_u, std::get<0>(tuple),
158 INSERT_VALUES, SCATTER_FORWARD);
159 CHKERR VecScatterEnd(std::get<1>(tuple), ts_u, std::get<0>(tuple),
160 INSERT_VALUES, SCATTER_FORWARD);
162 CHKERR VecMax(std::get<0>(tuple), PETSC_NULL, &max);
163 CHKERR VecMin(std::get<0>(tuple), PETSC_NULL, &min);
164 MOFEM_LOG_C(
"EXAMPLE", Sev::inform,
"%s time %3.4e min %3.4e max %3.4e",
165 msg.c_str(), ts_t, min, max);
170 CHKERR calculate_reaction();
180 SmartPetscObj<DM>
dM;
183 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>>
uXScatter;
184 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>>
uYScatter;
185 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>>
uZScatter;
#define MOFEM_LOG_C(channel, severity, format,...)
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
void temp(int x, int y=10)
auto smartCreateDMVector
Get smart vector from DM.
PetscErrorCode DMoFEMLoopFiniteElements(DM dm, const char fe_name[], MoFEM::FEMethod *method, CacheTupleWeakPtr cache_ptr=CacheTupleSharedPtr())
Executes FEMethod for finite elements in DM.
double v
phase velocity of light in medium (cm/ns)
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
MatrixBoundedArray< double, 9 > MatrixDouble3by3
DeprecatedCoreInterface Interface
const double r
rate factor
double h
convective heat coefficient
constexpr double t
plate stiffness
std::array< bool, MBMAXTYPE > doEntities
If true operator is executed for entity.
Data on single entity (This is passed as argument to DataOperator::doWork)
Monitor(SmartPetscObj< DM > &dm, boost::shared_ptr< PostProcEle > &post_proc_fe, boost::shared_ptr< DomainEle > &reaction_fe, std::tuple< SmartPetscObj< Vec >, SmartPetscObj< VecScatter >> ux_scatter, std::tuple< SmartPetscObj< Vec >, SmartPetscObj< VecScatter >> uy_scatter, std::tuple< SmartPetscObj< Vec >, SmartPetscObj< VecScatter >> uz_scatter)
std::tuple< SmartPetscObj< Vec >, SmartPetscObj< VecScatter > > uXScatter
std::tuple< SmartPetscObj< Vec >, SmartPetscObj< VecScatter > > uZScatter
MoFEMErrorCode preProcess()
MoFEMErrorCode postProcess()
boost::shared_ptr< PostProcEle > postProcFe
std::tuple< SmartPetscObj< Vec >, SmartPetscObj< VecScatter > > uYScatter
MoFEMErrorCode operator()()
boost::shared_ptr< DomainEle > reactionFe
boost::shared_ptr< CommonData > commonDataPtr
std::vector< EntityHandle > & mapGaussPts
OpPostProcPlastic(const std::string field_name, moab::Interface &post_proc_mesh, std::vector< EntityHandle > &map_gauss_pts, boost::shared_ptr< CommonData > common_data_ptr)
moab::Interface & postProcMesh
MoFEMErrorCode doWork(int side, EntityType type, EntData &data)
[Postprocessing]