 |
| v0.14.0
|
Go to the documentation of this file.
16 auto create_post_step_ksp = [&]() {
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);
30 fe_lhs->getUserPolynomialBase() =
31 boost::shared_ptr<BaseFunction>(
new CGGUserPolynomialBase());
32 fe_rhs->getUserPolynomialBase() =
33 boost::shared_ptr<BaseFunction>(
new CGGUserPolynomialBase());
35 EshelbianPlasticity::AddHOOps<SPACE_DIM, SPACE_DIM, SPACE_DIM>::add(
39 EshelbianPlasticity::AddHOOps<SPACE_DIM, SPACE_DIM, SPACE_DIM>::add(
43 fe_lhs->getOpPtrVector().push_back(
45 auto w_ptr = boost::make_shared<MatrixDouble>();
46 fe_rhs->getOpPtrVector().push_back(
47 new OpCalculateVectorFieldValues<3>(ep_ptr->
spatialL2Disp, w_ptr));
48 fe_rhs->getOpPtrVector().push_back(
65 CHKERR KSPAppendOptionsPrefix(ksp,
"prjspatial_");
66 CHKERR KSPSetFromOptions(ksp);
77 prjKsp = create_post_step_ksp();
97 MOFEM_LOG(
"EP", Sev::inform) <<
"Pre step";
106 CHKERR TSGetSolution(ts, &T);
108 auto zero_filled = [&](
auto name) {
111 SmartPetscObj<IS> is;
112 CHKERR is_mng->isCreateProblemFieldAndRankLocal(
114 const int *index_ptr;
115 CHKERR ISGetIndices(is, &index_ptr);
117 CHKERR ISGetLocalSize(is, &size);
120 for (
auto i = 0;
i != size;
i++) {
124 CHKERR ISRestoreIndices(is, &index_ptr);
132 MOFEM_LOG(
"EP", Sev::verbose) <<
"Zeroing (large) fields";
137 MOFEM_LOG(
"EP", Sev::verbose) <<
"Zeroing (moderate) fields";
142 MOFEM_LOG(
"EP", Sev::verbose) <<
"Zeroing (small) fields";
159 MOFEM_LOG(
"EP", Sev::inform) <<
"Calculate faces energy";
161 MOFEM_LOG(
"EP", Sev::inform) <<
"Calculate faces orientation";
165 MOFEM_LOG(
"EP", Sev::inform) <<
"Solve H1 post-step";
168 CHKERR VecGhostUpdateBegin(
prjD, INSERT_VALUES, SCATTER_FORWARD);
169 CHKERR VecGhostUpdateEnd(
prjD, INSERT_VALUES, SCATTER_FORWARD);
181 static SmartPetscObj<KSP>
prjKsp;
182 static SmartPetscObj<Vec>
prjD;
183 static SmartPetscObj<Vec>
prjF;
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
MoFEMErrorCode setNewFrontCoordinates()
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
const std::string spatialL2Disp
virtual MPI_Comm & get_comm() const =0
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
static MoFEMErrorCode postStepFun(TS ts)
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
MoFEMErrorCode calculateOrientation(const int tag, bool set_orientation)
MoFEMErrorCode addCrackSurfaces()
PetscErrorCode DMoFEMMeshToLocalVector(DM dm, Vec l, InsertMode mode, ScatterMode scatter_mode)
set local (or ghosted) vector values on mesh for partition only
auto createKSP(MPI_Comm comm)
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.
FormsIntegrators< DomainEleOp >::Assembly< PETSC >::BiLinearForm< GAUSS >::OpMass< 1, FIELD_DIM > OpDomainMass
static enum RotSelector gradApproximator
MoFEMErrorCode calculateEnergyRelease(const int tag, TS ts)
#define CHKERR
Inline error check.
auto createDMVector(DM dm)
Get smart vector from DM.
static SmartPetscObj< KSP > prjKsp
static MoFEMErrorCode preStepFun(TS ts)
const std::string rotAxis
const std::string materialH1Positions
const std::string elementVolumeName
const std::string spatialH1Disp
MoFEM::Interface & mField
static EshelbianCore * epPtr
FTensor::Index< 'i', SPACE_DIM > i
const std::string stretchTensor
static MoFEMErrorCode postStepDestroy()
static boost::shared_ptr< FEMethod > preProcRhs
static SmartPetscObj< Vec > prjF
#define MAX_DOFS_ON_ENTITY
Maximal number of DOFs on entity.
#define MOFEM_LOG(channel, severity)
Log.
SmartPetscObj< Vec > vectorDuplicate(Vec vec)
Create duplicate vector of smart vector.
boost::shared_ptr< Range > frontAdjEdges
ForcesAndSourcesCore::UserDataOperator UserDataOperator
static SmartPetscObj< Vec > prjD
const FTensor::Tensor2< T, Dim, Dim > Vec
static MoFEMErrorCode postStepInitialise(EshelbianCore *ep_ptr)
MoFEMErrorCode projectGeometry(const EntityHandle meshset=0)
ElementsAndOps< SPACE_DIM >::DomainEle DomainEle
static PetscBool crackingOn
SmartPetscObj< Vec > solTSStep
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
SmartPetscObj< DM > dmPrjSpatial
Projection spatial displacement.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
static SmartPetscObj< DM > prjDM