11 Monitor(SmartPetscObj<DM> &dm, boost::shared_ptr<PostProcEle> post_proc_fe,
12 boost::shared_ptr<DomainEle> reaction_fe,
13 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>> ux_scatter,
14 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>> uy_scatter,
15 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>> uz_scatter)
25 auto make_vtk = [&]() {
29 "out_plastic_" + boost::lexical_cast<std::string>(ts_step) +
".h5m");
33 auto calculate_reaction = [&]() {
35 auto r = createDMVector(
dM);
39 CHKERR VecGhostUpdateBegin(r, ADD_VALUES, SCATTER_REVERSE);
40 CHKERR VecGhostUpdateEnd(r, ADD_VALUES, SCATTER_REVERSE);
41 CHKERR VecAssemblyBegin(r);
46 MOFEM_LOG_C(
"EXAMPLE", Sev::inform,
"reaction time %3.4e %3.4e", ts_t,
52 auto print_max_min = [&](
auto &tuple,
const std::string msg) {
54 CHKERR VecScatterBegin(std::get<1>(tuple), ts_u, std::get<0>(tuple),
55 INSERT_VALUES, SCATTER_FORWARD);
56 CHKERR VecScatterEnd(std::get<1>(tuple), ts_u, std::get<0>(tuple),
57 INSERT_VALUES, SCATTER_FORWARD);
59 CHKERR VecMax(std::get<0>(tuple), PETSC_NULL, &max);
60 CHKERR VecMin(std::get<0>(tuple), PETSC_NULL, &min);
61 MOFEM_LOG_C(
"EXAMPLE", Sev::inform,
"%s time %3.4e min %3.4e max %3.4e",
62 msg.c_str(), ts_t, min, max);
68 CHKERR calculate_reaction();
81 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>>
uXScatter;
82 std::tuple<SmartPetscObj<Vec>, SmartPetscObj<VecScatter>>
uYScatter;
83 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.
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
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)