v0.15.0
Loading...
Searching...
No Matches
Monitor.hpp
Go to the documentation of this file.
1/**
2 * @brief Monitor class for post-processing results
3 *
4 */
5
6struct Monitor : public FEMethod {
8 std::pair<boost::shared_ptr<PostProcEleDomain>,
9 boost::shared_ptr<PostProcEleBdy>>
10 pair_post_proc,
11 boost::shared_ptr<DomainEle> reaction_fe)
12 : dM(dm), postProcDomain(pair_post_proc.first),
13 postProcSkin(pair_post_proc.second), reactionFe(reaction_fe) {
14 CHK_THROW_MESSAGE(PetscOptionsGetInt(PETSC_NULLPTR, "", "-save_every",
15 &saveEvery, PETSC_NULLPTR),
16 "Cannot get -save_every option");
17 }
18
19 MoFEMErrorCode /** postProcess */ postProcess();
20
21private:
23 boost::shared_ptr<PostProcEleDomain> postProcDomain;
24 boost::shared_ptr<PostProcEleBdy> postProcSkin;
25 boost::shared_ptr<DomainEle> reactionFe;
26 PetscInt saveEvery = 1;
27};
28
29MoFEMErrorCode Monitor::postProcess() {
31
32 auto make_vtk = [&]() {
34 if (postProcDomain) {
37 CHKERR postProcDomain->writeFile(
38 "out_step_" + boost::lexical_cast<std::string>(ts_step) + ".h5m");
39 }
40 if (postProcSkin) {
43 CHKERR postProcSkin->writeFile(
44 "out_skin_" + boost::lexical_cast<std::string>(ts_step) + ".h5m");
45 }
47 };
48
49 auto calculate_reaction = [&]() {
51 auto r = createDMVector(dM);
52 reactionFe->f = r;
53 CHKERR VecZeroEntries(r);
56 };
57
58 if (!(ts_step % saveEvery)) {
59 CHKERR make_vtk();
60 }
61 if (reactionFe)
62 CHKERR calculate_reaction();
63
65}
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
#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.
PetscErrorCode DMoFEMLoopFiniteElements(DM dm, const char fe_name[], MoFEM::FEMethod *method, CacheTupleWeakPtr cache_ptr=CacheTupleSharedPtr())
Executes FEMethod for finite elements in DM.
Definition DMMoFEM.cpp:576
auto createDMVector(DM dm)
Get smart vector from DM.
Definition DMMoFEM.hpp:1102
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
PetscErrorCode PetscOptionsGetInt(PetscOptions *, const char pre[], const char name[], PetscInt *ivalue, PetscBool *set)
int r
Definition sdf.py:8
boost::weak_ptr< CacheTuple > getCacheWeakPtr() const
Get the cache weak ptr object.
intrusive_ptr for managing petsc objects
PetscInt ts_step
time step number
[Push operators to pipeline]
SmartPetscObj< DM > dM
Monitor(SmartPetscObj< DM > dm, std::pair< boost::shared_ptr< PostProcEleDomain >, boost::shared_ptr< PostProcEleBdy > > pair_post_proc, boost::shared_ptr< DomainEle > reaction_fe)
Definition Monitor.hpp:7
PetscInt saveEvery
Definition Monitor.hpp:26
MoFEMErrorCode postProcess()
boost::shared_ptr< DomainEle > reactionFe
Definition Monitor.hpp:25
boost::shared_ptr< PostProcEleDomain > postProcDomain
Definition Monitor.hpp:23
boost::shared_ptr< PostProcEleBdy > postProcSkin
Definition Monitor.hpp:24