v0.14.0
Static Public Member Functions | Static Private Attributes | List of all members
TSElasticPostStep Struct Reference
Collaboration diagram for TSElasticPostStep:
[legend]

Static Public Member Functions

static MoFEMErrorCode postStepInitialise (EshelbianCore *ep_ptr)
 
static MoFEMErrorCode postStepDestroy ()
 
static MoFEMErrorCode preStepFun (TS ts)
 
static MoFEMErrorCode postStepFun (TS ts)
 

Static Private Attributes

static SmartPetscObj< KSP > prjKsp
 
static SmartPetscObj< Vec > prjD
 
static SmartPetscObj< Vec > prjF
 
static SmartPetscObj< DM > prjDM
 
static EshelbianCore * epPtr
 
static boost::shared_ptr< FEMethodpreProcRhs
 

Detailed Description

Definition at line 9 of file TSElasticPostStep.cpp.

Member Function Documentation

◆ postStepDestroy()

static MoFEMErrorCode TSElasticPostStep::postStepDestroy ( )
inlinestatic
Examples
EshelbianPlasticity.cpp.

Definition at line 77 of file TSElasticPostStep.cpp.

77  {
79  prjKsp.reset();
80  prjD.reset();
81  prjF.reset();
82  prjDM.reset();
83  preProcRhs.reset();
85  };

◆ postStepFun()

static MoFEMErrorCode TSElasticPostStep::postStepFun ( TS  ts)
inlinestatic
Examples
EshelbianPlasticity.cpp.

Definition at line 135 of file TSElasticPostStep.cpp.

135  {
137  MOFEM_LOG("EP", Sev::inform) << "Solve H1 post-step";
138  CHKERR VecZeroEntries(prjF);
139  CHKERR KSPSolve(prjKsp, prjF, prjD);
140  CHKERR VecGhostUpdateBegin(prjD, INSERT_VALUES, SCATTER_FORWARD);
141  CHKERR VecGhostUpdateEnd(prjD, INSERT_VALUES, SCATTER_FORWARD);
142  CHKERR DMoFEMMeshToLocalVector(prjDM, prjD, INSERT_VALUES, SCATTER_REVERSE);
143  // double time;
144  // CHKERR TSGetTime(ts, &time);
145  // preProcRhs->ts_t = time;
146  // CHKERR DMoFEMPreProcessFiniteElements(prjDM, preProcRhs.get());
148  };

◆ postStepInitialise()

static MoFEMErrorCode TSElasticPostStep::postStepInitialise ( EshelbianCore *  ep_ptr)
inlinestatic
Examples
EshelbianPlasticity.cpp.

Definition at line 11 of file TSElasticPostStep.cpp.

11  {
13 
14  epPtr = ep_ptr;
15 
16  auto create_post_step_ksp = [&]() {
17  auto ksp = createKSP(epPtr->mField.get_comm());
18 
19  auto set_up = [&]() {
21  using DomainEle = VolumeElementForcesAndSourcesCore;
23  using OpDomainMass = FormsIntegrators<DomainEleOp>::Assembly<
25  using OpRhs = FormsIntegrators<DomainEleOp>::Assembly<
26  PETSC>::LinearForm<GAUSS>::OpBaseTimesVector<1, 3, 1>;
27  auto fe_lhs = boost::make_shared<DomainEle>(ep_ptr->mField);
28  auto fe_rhs = boost::make_shared<DomainEle>(ep_ptr->mField);
29 
30  fe_lhs->getUserPolynomialBase() =
31  boost::shared_ptr<BaseFunction>(new CGGUserPolynomialBase());
32  fe_rhs->getUserPolynomialBase() =
33  boost::shared_ptr<BaseFunction>(new CGGUserPolynomialBase());
34 
35  fe_lhs->getOpPtrVector().push_back(
36  new OpDomainMass(ep_ptr->spatialH1Disp, ep_ptr->spatialH1Disp));
37  auto w_ptr = boost::make_shared<MatrixDouble>();
38  fe_rhs->getOpPtrVector().push_back(
39  new OpCalculateVectorFieldValues<3>(ep_ptr->spatialL2Disp, w_ptr));
40  fe_rhs->getOpPtrVector().push_back(
41  new OpRhs(ep_ptr->spatialH1Disp, w_ptr));
42 
43  CHKERR DMMoFEMKSPSetComputeOperators(ep_ptr->dmPrjSpatial,
44  ep_ptr->elementVolumeName, fe_lhs,
45  nullptr, nullptr);
46  CHKERR DMMoFEMKSPSetComputeRHS(ep_ptr->dmPrjSpatial,
47  ep_ptr->elementVolumeName, fe_rhs,
48  nullptr, nullptr);
49 
50  // preProcRhs = boost::make_shared<FEMethod>();
51  // struct MinusOne : public ScalingMethod {
52  // double getScale(const double time) { return -time; }
53  // };
54  // preProcRhs->preProcessHook = EssentialPreProc<DisplacementCubitBcData>(
55  // ep_ptr->mField, preProcRhs, {boost::make_shared<MinusOne>()});
56 
57  CHKERR KSPAppendOptionsPrefix(ksp, "prjspatial_");
58  CHKERR KSPSetFromOptions(ksp);
59  CHKERR KSPSetDM(ksp, ep_ptr->dmPrjSpatial);
60  CHKERR KSPSetUp(ksp);
62  };
63 
64  CHK_THROW_MESSAGE(set_up(), "set up");
65 
66  return ksp;
67  };
68 
69  prjKsp = create_post_step_ksp();
70  prjD = createDMVector(ep_ptr->dmPrjSpatial);
72  prjDM = ep_ptr->dmPrjSpatial;
73 
75  };

◆ preStepFun()

static MoFEMErrorCode TSElasticPostStep::preStepFun ( TS  ts)
inlinestatic
Examples
EshelbianPlasticity.cpp.

Definition at line 87 of file TSElasticPostStep.cpp.

87  {
89  MOFEM_LOG("EP", Sev::inform) << "Pre step";
90 
91  Vec T;
92  CHKERR TSGetSolution(ts, &T);
93 
94  auto zero_filed = [&](auto name) {
96  auto is_mng = epPtr->getInterface<ISManager>();
97  SmartPetscObj<IS> is;
98  CHKERR is_mng->isCreateProblemFieldAndRankLocal(
99  "ELASTIC_PROBLEM", ROW, name, 0, MAX_DOFS_ON_ENTITY, is);
100  const int *index_ptr;
101  CHKERR ISGetIndices(is, &index_ptr);
102  int size;
103  CHKERR ISGetLocalSize(is, &size);
104  double *a;
105  CHKERR VecGetArray(T, &a);
106  for (auto i = 0; i != size; i++) {
107  a[index_ptr[i]] = 0;
108  }
109  CHKERR VecRestoreArray(T, &a);
110  CHKERR ISRestoreIndices(is, &index_ptr);
112  };
113 
114  switch (EshelbianCore::gradApperoximator) {
115  case LARGE_ROT:
116  MOFEM_LOG("EP", Sev::verbose) << "Zeroing (large) fields";
117  CHKERR zero_filed(epPtr->stretchTensor);
118  CHKERR zero_filed(epPtr->rotAxis);
119  break;
120  case MODERATE_ROT:
121  MOFEM_LOG("EP", Sev::verbose) << "Zeroing (moderate) fields";
122  CHKERR zero_filed(epPtr->stretchTensor);
123  CHKERR zero_filed(epPtr->rotAxis);
124  break;
125  case SMALL_ROT:
126  MOFEM_LOG("EP", Sev::verbose) << "Zeroing (small) fields";
127  CHKERR zero_filed(epPtr->stretchTensor);
128  CHKERR zero_filed(epPtr->rotAxis);
129  break;
130  }
131 
133  }

Member Data Documentation

◆ epPtr

EshelbianCore * TSElasticPostStep::epPtr
staticprivate

Definition at line 155 of file TSElasticPostStep.cpp.

◆ preProcRhs

boost::shared_ptr< FEMethod > TSElasticPostStep::preProcRhs
staticprivate

Definition at line 157 of file TSElasticPostStep.cpp.

◆ prjD

SmartPetscObj< Vec > TSElasticPostStep::prjD
staticprivate

Definition at line 152 of file TSElasticPostStep.cpp.

◆ prjDM

SmartPetscObj< DM > TSElasticPostStep::prjDM
staticprivate

Definition at line 154 of file TSElasticPostStep.cpp.

◆ prjF

SmartPetscObj< Vec > TSElasticPostStep::prjF
staticprivate

Definition at line 153 of file TSElasticPostStep.cpp.

◆ prjKsp

SmartPetscObj< KSP > TSElasticPostStep::prjKsp
staticprivate

Definition at line 148 of file TSElasticPostStep.cpp.


The documentation for this struct was generated from the following file:
MoFEM::DMMoFEMKSPSetComputeRHS
PetscErrorCode DMMoFEMKSPSetComputeRHS(DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::BasicMethod *pre_only, MoFEM::BasicMethod *post_only)
set KSP right hand side evaluation function
Definition: DMMoFEM.cpp:641
CHK_THROW_MESSAGE
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
Definition: definitions.h:596
MoFEM::PETSC
@ PETSC
Definition: FormsIntegrators.hpp:104
MoFEM::DMoFEMMeshToLocalVector
PetscErrorCode DMoFEMMeshToLocalVector(DM dm, Vec l, InsertMode mode, ScatterMode scatter_mode)
set local (or ghosted) vector values on mesh for partition only
Definition: DMMoFEM.cpp:527
MoFEM::createKSP
auto createKSP(MPI_Comm comm)
Definition: PetscSmartObj.hpp:257
MoFEM::DMMoFEMKSPSetComputeOperators
PetscErrorCode DMMoFEMKSPSetComputeOperators(DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::BasicMethod *pre_only, MoFEM::BasicMethod *post_only)
Set KSP operators and push mofem finite element methods.
Definition: DMMoFEM.cpp:682
OpDomainMass
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpMass< 1, FIELD_DIM > OpDomainMass
Definition: child_and_parent.cpp:53
ROW
@ ROW
Definition: definitions.h:123
CHKERR
#define CHKERR
Inline error check.
Definition: definitions.h:535
MoFEM::createDMVector
auto createDMVector(DM dm)
Get smart vector from DM.
Definition: DMMoFEM.hpp:1018
TSElasticPostStep::prjKsp
static SmartPetscObj< KSP > prjKsp
Definition: TSElasticPostStep.cpp:148
a
constexpr double a
Definition: approx_sphere.cpp:30
TSElasticPostStep::epPtr
static EshelbianCore * epPtr
Definition: TSElasticPostStep.cpp:155
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
BiLinearForm
OpRhs
Definition: approx_sphere.cpp:68
TSElasticPostStep::preProcRhs
static boost::shared_ptr< FEMethod > preProcRhs
Definition: TSElasticPostStep.cpp:157
TSElasticPostStep::prjF
static SmartPetscObj< Vec > prjF
Definition: TSElasticPostStep.cpp:153
MAX_DOFS_ON_ENTITY
#define MAX_DOFS_ON_ENTITY
Maximal number of DOFs on entity.
Definition: definitions.h:236
DomainEleOp
EshelbianPlasticity::SMALL_ROT
@ SMALL_ROT
Definition: EshelbianPlasticity.hpp:20
MOFEM_LOG
#define MOFEM_LOG(channel, severity)
Log.
Definition: LogManager.hpp:308
MoFEM::vectorDuplicate
SmartPetscObj< Vec > vectorDuplicate(Vec vec)
Create duplicate vector of smart vector.
Definition: PetscSmartObj.hpp:217
EshelbianPlasticity::LARGE_ROT
@ LARGE_ROT
Definition: EshelbianPlasticity.hpp:20
UserDataOperator
ForcesAndSourcesCore::UserDataOperator UserDataOperator
Definition: HookeElement.hpp:75
TSElasticPostStep::prjD
static SmartPetscObj< Vec > prjD
Definition: TSElasticPostStep.cpp:152
EigenMatrix::Vec
const FTensor::Tensor2< T, Dim, Dim > Vec
Definition: MatrixFunction.hpp:66
DomainEle
ElementsAndOps< SPACE_DIM >::DomainEle DomainEle
Definition: child_and_parent.cpp:34
EshelbianPlasticity::MODERATE_ROT
@ MODERATE_ROT
Definition: EshelbianPlasticity.hpp:20
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
TSElasticPostStep::prjDM
static SmartPetscObj< DM > prjDM
Definition: TSElasticPostStep.cpp:154