v0.16.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 {
7 Monitor(DM dm, std::pair<boost::shared_ptr<PostProcEleDomain>,
8 boost::shared_ptr<PostProcEleBdy>>
9 pair_post_proc)
10 : dM(dm), postProcDomain(pair_post_proc.first),
11 postProcSkin(pair_post_proc.second) {
12 CHK_THROW_MESSAGE(PetscOptionsGetInt(PETSC_NULLPTR, "", "-save_every",
13 &saveEvery, PETSC_NULLPTR),
14 "Cannot get -save_every option");
15 }
16
17 MoFEMErrorCode /** postProcess */ postProcess();
18
19private:
20 DM dM;
21 boost::shared_ptr<PostProcEleDomain> postProcDomain;
22 boost::shared_ptr<PostProcEleBdy> postProcSkin;
23 PetscInt saveEvery = 1;
24};
25
26MoFEMErrorCode Monitor::postProcess() {
28
29 auto make_vtk = [&]() {
31 if (postProcDomain) {
34 CHKERR postProcDomain->writeFile(
35 "out_step_" + boost::lexical_cast<std::string>(ts_step) + ".h5m");
36 }
37 if (postProcSkin) {
40 CHKERR postProcSkin->writeFile(
41 "out_skin_" + boost::lexical_cast<std::string>(ts_step) + ".h5m");
42 }
44 };
45
46 auto calculate_reaction = [&]() {
48 MoFEM::Interface *m_field_ptr;
49 CHKERR DMoFEMGetInterfacePtr(dM, &m_field_ptr);
50 auto pip = m_field_ptr->getInterface<PipelineManager>();
51 auto r = createDMVector(dM);
52 pip->getEvaluationFE()->f = r;
53 CHKERR VecZeroEntries(r);
54 CHKERR pip->loopFiniteElementsEvaluation();
56 };
57
58 if (!(ts_step % saveEvery)) {
59 CHKERR make_vtk();
60 }
61 CHKERR calculate_reaction();
62
64}
#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, RowColData rc=RowColData::COL)
Get smart vector from DM.
Definition DMMoFEM.hpp:1237
PetscErrorCode DMoFEMGetInterfacePtr(DM dm, MoFEM::Interface **m_field_ptr)
Get pointer to MoFEM::Interface.
Definition DMMoFEM.cpp:410
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
PetscErrorCode PetscOptionsGetInt(PetscOptions *, const char pre[], const char name[], PetscInt *ivalue, PetscBool *set)
int r
Definition sdf.py:205
boost::weak_ptr< CacheTuple > getCacheWeakPtr() const
Get the cache weak pointer object.
Deprecated interface functions.
PetscInt ts_step
Current time step number.
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
[Push operators to pipeline]
SmartPetscObj< DM > dM
PetscInt saveEvery
Definition Monitor.hpp:23
MoFEMErrorCode postProcess()
boost::shared_ptr< PostProcEleDomain > postProcDomain
Definition Monitor.hpp:21
boost::shared_ptr< PostProcEleBdy > postProcSkin
Definition Monitor.hpp:22
Monitor(DM dm, std::pair< boost::shared_ptr< PostProcEleDomain >, boost::shared_ptr< PostProcEleBdy > > pair_post_proc)
Definition Monitor.hpp:7