|
| v0.14.0
|
Implementation of operators, problem and finite elements for unsaturated flow.
More...
#include <tutorials/cor-0to1/src/UnsaturatedFlow.hpp>
|
| UnsaturatedFlowElement (MoFEM::Interface &m_field) |
|
| ~UnsaturatedFlowElement () |
|
virtual MoFEMErrorCode | getMaterial (const EntityHandle ent, int &block_id) const |
| For given element handle get material block Id. More...
|
|
MoFEMErrorCode | getBcOnValues (const EntityHandle ent, const int gg, const double x, const double y, const double z, double &value) |
| Get value on boundary. More...
|
|
MoFEMErrorCode | getBcOnFluxes (const EntityHandle ent, const double x, const double y, const double z, double &flux) |
| essential (Neumann) boundary condition (set fluxes) More...
|
|
MoFEMErrorCode | addFields (const std::string &values, const std::string &fluxes, const int order) |
| add fields More...
|
|
MoFEMErrorCode | addFiniteElements (const std::string &fluxes_name, const std::string &values_name) |
| add finite elements More...
|
|
MoFEMErrorCode | buildProblem (Range zero_flux_ents, BitRefLevel ref_level=BitRefLevel().set(0)) |
| Build problem. More...
|
|
MoFEMErrorCode | setFiniteElements (ForcesAndSourcesCore::RuleHookFun vol_rule=VolRule(), ForcesAndSourcesCore::RuleHookFun face_rule=FaceRule()) |
| Create finite element instances. More...
|
|
MoFEMErrorCode | createMatrices () |
| Create vectors and matrices. More...
|
|
MoFEMErrorCode | destroyMatrices () |
| Delete matrices and vector when no longer needed. More...
|
|
MoFEMErrorCode | calculateEssentialBc () |
| Calculate boundary conditions for fluxes. More...
|
|
MoFEMErrorCode | calculateInitialPc () |
| Calculate inital pressure head distribution. More...
|
|
MoFEMErrorCode | solveProblem (bool set_initial_pc=true) |
| solve problem More...
|
|
| MixTransportElement (MoFEM::Interface &m_field) |
| construction of this data structure More...
|
|
virtual | ~MixTransportElement () |
| destructor More...
|
|
MoFEMErrorCode | getDirichletBCIndices (IS *is) |
| get dof indices where essential boundary conditions are applied More...
|
|
virtual MoFEMErrorCode | getSource (const EntityHandle ent, const double x, const double y, const double z, double &flux) |
| set source term More...
|
|
virtual MoFEMErrorCode | getResistivity (const EntityHandle ent, const double x, const double y, const double z, MatrixDouble3by3 &inv_k) |
| natural (Dirichlet) boundary conditions (set values) More...
|
|
MoFEMErrorCode | addFields (const std::string &values, const std::string &fluxes, const int order) |
| Add fields to database. More...
|
|
MoFEMErrorCode | addFiniteElements (const std::string &fluxes_name, const std::string &values_name) |
| add finite elements More...
|
|
MoFEMErrorCode | buildProblem (BitRefLevel &ref_level) |
| Build problem. More...
|
|
MoFEMErrorCode | postProc (const string out_file) |
| Post process results. More...
|
|
MoFEMErrorCode | createMatrices () |
| create matrices More...
|
|
MoFEMErrorCode | solveLinearProblem () |
| solve problem More...
|
|
MoFEMErrorCode | calculateResidual () |
| calculate residual More...
|
|
MoFEMErrorCode | evaluateError () |
| Calculate error on elements. More...
|
|
MoFEMErrorCode | destroyMatrices () |
| destroy matrices More...
|
|
Implementation of operators, problem and finite elements for unsaturated flow.
- Examples
- unsaturated_transport.cpp.
Definition at line 102 of file UnsaturatedFlow.hpp.
◆ BcMap
◆ MaterialsDoubleMap
◆ UnsaturatedFlowElement()
MixTransport::UnsaturatedFlowElement::UnsaturatedFlowElement |
( |
MoFEM::Interface & |
m_field | ) |
|
|
inline |
◆ ~UnsaturatedFlowElement()
MixTransport::UnsaturatedFlowElement::~UnsaturatedFlowElement |
( |
| ) |
|
|
inline |
◆ addFields()
MoFEMErrorCode MixTransport::UnsaturatedFlowElement::addFields |
( |
const std::string & |
values, |
|
|
const std::string & |
fluxes, |
|
|
const int |
order |
|
) |
| |
|
inline |
◆ addFiniteElements()
MoFEMErrorCode MixTransport::UnsaturatedFlowElement::addFiniteElements |
( |
const std::string & |
fluxes_name, |
|
|
const std::string & |
values_name |
|
) |
| |
|
inline |
add finite elements
- Examples
- UnsaturatedFlow.hpp.
Definition at line 1172 of file UnsaturatedFlow.hpp.
1186 values_name +
"_t");
1191 if (it->getName().compare(0, 4,
"SOIL") != 0)
1194 dMatMap[it->getMeshsetId()]->tEts, MBTET,
"MIX");
1209 if (it->getName().compare(0, 4,
"HEAD") != 0)
1212 bcValueMap[it->getMeshsetId()]->eNts, MBTRI,
"MIX_BCVALUE");
1227 if (it->getName().compare(0, 4,
"FLUX") != 0)
1230 bcFluxMap[it->getMeshsetId()]->eNts, MBTRI,
"MIX_BCFLUX");
◆ buildProblem()
MoFEMErrorCode MixTransport::UnsaturatedFlowElement::buildProblem |
( |
Range |
zero_flux_ents, |
|
|
BitRefLevel |
ref_level = BitRefLevel().set(0) |
|
) |
| |
|
inline |
Build problem.
- Parameters
-
ref_level | mesh refinement on which mesh problem you like to built. |
- Returns
- error code
- Examples
- UnsaturatedFlow.hpp.
Definition at line 1241 of file UnsaturatedFlow.hpp.
1255 CHKERR DMCreate(PETSC_COMM_WORLD, &
dM);
1275 "MIX",
"FLUXES", zero_flux_ents);
1277 PetscSection section;
1281 CHKERR PetscSectionDestroy(§ion);
◆ calculateEssentialBc()
MoFEMErrorCode MixTransport::UnsaturatedFlowElement::calculateEssentialBc |
( |
| ) |
|
|
inline |
Calculate boundary conditions for fluxes.
- Returns
- Error code
Definition at line 1650 of file UnsaturatedFlow.hpp.
1654 CHKERR VecGhostUpdateBegin(
D0, INSERT_VALUES, SCATTER_FORWARD);
1655 CHKERR VecGhostUpdateEnd(
D0, INSERT_VALUES, SCATTER_FORWARD);
1662 CHKERR VecGhostUpdateBegin(
D0, INSERT_VALUES, SCATTER_FORWARD);
1663 CHKERR VecGhostUpdateEnd(
D0, INSERT_VALUES, SCATTER_FORWARD);
1665 CHKERR VecNorm(
D0, NORM_2, &norm2D0);
1667 PetscPrintf(PETSC_COMM_WORLD,
"norm2D0 = %6.4e\n", norm2D0);
◆ calculateInitialPc()
MoFEMErrorCode MixTransport::UnsaturatedFlowElement::calculateInitialPc |
( |
| ) |
|
|
inline |
Calculate inital pressure head distribution.
- Returns
- Error code
Definition at line 1675 of file UnsaturatedFlow.hpp.
1679 CHKERR VecGhostUpdateBegin(
D1, INSERT_VALUES, SCATTER_FORWARD);
1680 CHKERR VecGhostUpdateEnd(
D1, INSERT_VALUES, SCATTER_FORWARD);
1686 CHKERR VecGhostUpdateBegin(
D1, INSERT_VALUES, SCATTER_FORWARD);
1687 CHKERR VecGhostUpdateEnd(
D1, INSERT_VALUES, SCATTER_FORWARD);
1690 CHKERR VecNorm(
D1, NORM_2, &norm2D1);
1692 PetscPrintf(PETSC_COMM_WORLD,
"norm2D1 = %6.4e\n", norm2D1);
◆ createMatrices()
MoFEMErrorCode MixTransport::UnsaturatedFlowElement::createMatrices |
( |
| ) |
|
|
inline |
Create vectors and matrices.
- Returns
- Error code
Definition at line 1616 of file UnsaturatedFlow.hpp.
1626 CHKERR VecCreateGhost(PETSC_COMM_WORLD, nb_locals, 1, nb_ghosts, ghosts,
◆ destroyMatrices()
MoFEMErrorCode MixTransport::UnsaturatedFlowElement::destroyMatrices |
( |
| ) |
|
|
inline |
Delete matrices and vector when no longer needed.
- Returns
- error code
Definition at line 1635 of file UnsaturatedFlow.hpp.
◆ getBcOnFluxes()
essential (Neumann) boundary condition (set fluxes)
- Parameters
-
ent | handle to finite element entity |
x | coord |
y | coord |
z | coord |
flux | reference to flux which is set by function |
- Returns
- [description]
Reimplemented from MixTransport::MixTransportElement.
- Examples
- UnsaturatedFlow.hpp.
Definition at line 210 of file UnsaturatedFlow.hpp.
219 if (it->second->eNts.find(ent) != it->second->eNts.end()) {
220 block_id = it->first;
228 flux =
bcFluxMap.at(block_id)->hookFun(x, y, z);
◆ getBcOnValues()
Get value on boundary.
- Parameters
-
ent | entity handle |
gg | number of integration point |
x | x-coordinate |
y | y-coordinate |
z | z-coordinate |
value | returned value |
- Returns
- error code
Reimplemented from MixTransport::MixTransportElement.
- Examples
- UnsaturatedFlow.hpp.
Definition at line 168 of file UnsaturatedFlow.hpp.
178 if (it->second->eNts.find(ent) != it->second->eNts.end()) {
179 block_id = it->first;
187 value =
bcValueMap.at(block_id)->hookFun(x, y, z);
◆ getMaterial()
virtual MoFEMErrorCode MixTransport::UnsaturatedFlowElement::getMaterial |
( |
const EntityHandle |
ent, |
|
|
int & |
block_id |
|
) |
| const |
|
inlinevirtual |
For given element handle get material block Id.
- Parameters
-
ent | finite element entity handle |
block_id | reference to returned block id |
- Returns
- error code
- Examples
- UnsaturatedFlow.hpp.
Definition at line 127 of file UnsaturatedFlow.hpp.
130 for (MaterialsDoubleMap::const_iterator mit =
dMatMap.begin();
132 if (mit->second->tEts.find(ent) != mit->second->tEts.end()) {
133 block_id = mit->first;
138 "Element not found, no material data");
◆ setFiniteElements()
MoFEMErrorCode MixTransport::UnsaturatedFlowElement::setFiniteElements |
( |
ForcesAndSourcesCore::RuleHookFun |
vol_rule = VolRule() , |
|
|
ForcesAndSourcesCore::RuleHookFun |
face_rule = FaceRule() |
|
) |
| |
|
inline |
Create finite element instances.
- Parameters
-
vol_rule | integration rule for volume element |
face_rule | integration rule for boundary element |
- Returns
- error code
- Examples
- UnsaturatedFlow.hpp.
Definition at line 1446 of file UnsaturatedFlow.hpp.
1451 feFaceBc = boost::shared_ptr<ForcesAndSourcesCore>(
1453 feFaceRhs = boost::shared_ptr<ForcesAndSourcesCore>(
1456 new VolumeElementForcesAndSourcesCore(
mField));
1457 feVolLhs = boost::shared_ptr<ForcesAndSourcesCore>(
1458 new VolumeElementForcesAndSourcesCore(
mField));
1459 feVolRhs = boost::shared_ptr<ForcesAndSourcesCore>(
1460 new VolumeElementForcesAndSourcesCore(
mField));
1474 CHKERR AddHOOps<2, 3, 3>::add(
feFaceBc->getOpPtrVector(), {HDIV});
1486 feFaceBc->getOpPtrVector().push_back(
1487 new OpEvaluateBcOnFluxes(*
this,
"FLUXES"));
1492 new OpEvaluateInitiallHead(*
this,
"VALUES"));
1502 CHKERR AddHOOps<3, 3, 3>::add(
feVolRhs->getOpPtrVector(), {HDIV, L2});
1503 feVolRhs->getOpPtrVector().push_back(
new OpCalculateScalarFieldValues(
1505 feVolRhs->getOpPtrVector().push_back(
1506 new OpValuesAtGaussPts(*
this,
"VALUES"));
1507 feVolRhs->getOpPtrVector().push_back(
1508 new OpFluxDivergenceAtGaussPts(*
this,
"FLUXES"));
1509 feVolRhs->getOpPtrVector().push_back(
new OpResidualFlux(*
this,
"FLUXES"));
1510 feVolRhs->getOpPtrVector().push_back(
new OpResidualMass(*
this,
"VALUES"));
1511 feVolRhs->getOpPtrVector().back().opType =
1512 ForcesAndSourcesCore::UserDataOperator::OPROW;
1514 CHKERR AddHOOps<3, 3, 3>::add(
feVolLhs->getOpPtrVector(), {HDIV, L2});
1515 feVolLhs->getOpPtrVector().push_back(
new OpCalculateScalarFieldValues(
1521 feVolLhs->getOpPtrVector().push_back(
1522 new OpValuesAtGaussPts(*
this,
"VALUES"));
1523 feVolLhs->getOpPtrVector().push_back(
1524 new OpFluxDivergenceAtGaussPts(*
this,
"FLUXES"));
1525 feVolLhs->getOpPtrVector().push_back(
1526 new OpTauDotSigma_HdivHdiv(*
this,
"FLUXES"));
1527 feVolLhs->getOpPtrVector().push_back(
new OpVU_L2L2(*
this,
"VALUES"));
1528 feVolLhs->getOpPtrVector().push_back(
1529 new OpVDivSigma_L2Hdiv(*
this,
"VALUES",
"FLUXES"));
1530 feVolLhs->getOpPtrVector().push_back(
1531 new OpDivTauU_HdivL2(*
this,
"FLUXES",
"VALUES"));
1535 boost::shared_ptr<FEMethod>
null;
1543 auto get_post_process_ele = [&]() {
1544 auto post_process = boost::make_shared<PostProcEle>(
mField);
1546 CHKERR AddHOOps<3, 3, 3>::add(post_process->getOpPtrVector(), {HDIV, L2});
1548 auto values_ptr = boost::make_shared<VectorDouble>();
1549 auto grad_ptr = boost::make_shared<MatrixDouble>();
1550 auto flux_ptr = boost::make_shared<MatrixDouble>();
1552 post_process->getOpPtrVector().push_back(
1553 new OpCalculateScalarFieldValues(
"VALUES", values_ptr));
1554 post_process->getOpPtrVector().push_back(
1555 new OpCalculateScalarFieldGradient<3>(
"VALUES", grad_ptr));
1556 post_process->getOpPtrVector().push_back(
1557 new OpCalculateHVecVectorField<3>(
"FLUXES", flux_ptr));
1559 using OpPPMap = OpPostProcMapInMoab<3, 3>;
1561 post_process->getOpPtrVector().push_back(
1563 new OpPPMap(post_process->getPostProcMesh(),
1564 post_process->getMapGaussPts(),
1566 {{
"VALUES", values_ptr}},
1568 {{
"GRAD", grad_ptr}, {
"FLUXES", flux_ptr}},
1574 return post_process;
1577 auto post_process = get_post_process_ele();
1579 post_process->getOpPtrVector().push_back(
1580 new OpValuesAtGaussPts(*
this,
"VALUES"));
1581 post_process->getOpPtrVector().push_back(
1582 new OpPostProcMaterial(*
this, post_process->getPostProcMesh(),
1583 post_process->getMapGaussPts(),
"VALUES"));
1586 boost::shared_ptr<ForcesAndSourcesCore> flux_integrate;
1587 flux_integrate = boost::shared_ptr<ForcesAndSourcesCore>(
1589 CHKERR AddHOOps<2, 3, 3>::add(flux_integrate->getOpPtrVector(), {HDIV});
1590 flux_integrate->getOpPtrVector().push_back(
1591 new OpIntegrateFluxes(*
this,
"FLUXES"));
1593 CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"Monitor post proc",
"none");
1595 "-how_often_output",
1596 "frequency how often results are dumped on hard disk",
"", frequency,
1598 ierr = PetscOptionsEnd();
1601 tsMonitor = boost::shared_ptr<FEMethod>(
◆ solveProblem()
MoFEMErrorCode MixTransport::UnsaturatedFlowElement::solveProblem |
( |
bool |
set_initial_pc = true | ) |
|
|
inline |
solve problem
- Returns
- error code
Definition at line 1700 of file UnsaturatedFlow.hpp.
1702 if (set_initial_pc) {
1712 CHKERR TSCreate(PETSC_COMM_WORLD, &ts);
1714 CHKERR TSSetType(ts, TSBEULER);
1717 CHKERR TSSetDuration(ts, PETSC_DEFAULT, ftime);
1719 CHKERR TSSetFromOptions(ts);
1722 #if PETSC_VERSION_GE(3, 7, 0)
1723 CHKERR TSSetExactFinalTime(ts, TS_EXACTFINALTIME_STEPOVER);
1735 CHKERR TSGetSNES(ts, &snes);
1737 #if PETSC_VERSION_GE(3, 7, 0)
1739 PetscViewerAndFormat *vf;
1740 CHKERR PetscViewerAndFormatCreate(PETSC_VIEWER_STDOUT_WORLD,
1741 PETSC_VIEWER_DEFAULT, &vf);
1745 void *))SNESMonitorFields,
1750 CHKERR SNESMonitorSet(snes,
1752 void *))SNESMonitorFields,
1760 CHKERR TSGetTime(ts, &ftime);
1761 PetscInt steps, snesfails, rejects, nonlinits, linits;
1762 CHKERR TSGetTimeStepNumber(ts, &steps);
1763 CHKERR TSGetSNESFailures(ts, &snesfails);
1764 CHKERR TSGetStepRejections(ts, &rejects);
1765 CHKERR TSGetSNESIterations(ts, &nonlinits);
1766 CHKERR TSGetKSPIterations(ts, &linits);
1767 PetscPrintf(PETSC_COMM_WORLD,
1768 "steps %D (%D rejected, %D SNES fails), ftime %g, nonlinits "
1770 steps, rejects, snesfails, ftime, nonlinits, linits);
◆ bcFluxMap
BcMap MixTransport::UnsaturatedFlowElement::bcFluxMap |
◆ bcValueMap
BcMap MixTransport::UnsaturatedFlowElement::bcValueMap |
◆ bcVecIds
std::vector<int> MixTransport::UnsaturatedFlowElement::bcVecIds |
◆ bcVecVals
VectorDouble MixTransport::UnsaturatedFlowElement::bcVecVals |
◆ D1
Vec MixTransport::UnsaturatedFlowElement::D1 |
◆ dM
DM MixTransport::UnsaturatedFlowElement::dM |
◆ dMatMap
◆ feFaceBc
boost::shared_ptr<ForcesAndSourcesCore> MixTransport::UnsaturatedFlowElement::feFaceBc |
◆ feFaceRhs
boost::shared_ptr<ForcesAndSourcesCore> MixTransport::UnsaturatedFlowElement::feFaceRhs |
◆ feVolInitialPc
boost::shared_ptr<ForcesAndSourcesCore> MixTransport::UnsaturatedFlowElement::feVolInitialPc |
◆ feVolLhs
boost::shared_ptr<ForcesAndSourcesCore> MixTransport::UnsaturatedFlowElement::feVolLhs |
◆ feVolRhs
boost::shared_ptr<ForcesAndSourcesCore> MixTransport::UnsaturatedFlowElement::feVolRhs |
◆ ghostFlux
Vec MixTransport::UnsaturatedFlowElement::ghostFlux |
◆ headRateAtGaussPts
boost::shared_ptr<VectorDouble> MixTransport::UnsaturatedFlowElement::headRateAtGaussPts |
◆ lastEvalBcBlockFluxId
int MixTransport::UnsaturatedFlowElement::lastEvalBcBlockFluxId |
◆ lastEvalBcBlockValId
int MixTransport::UnsaturatedFlowElement::lastEvalBcBlockValId |
◆ lastEvalBcFluxEnt
EntityHandle MixTransport::UnsaturatedFlowElement::lastEvalBcFluxEnt |
◆ lastEvalBcValEnt
EntityHandle MixTransport::UnsaturatedFlowElement::lastEvalBcValEnt |
◆ scaleMethodFlux
◆ scaleMethodValue
◆ tsMonitor
boost::shared_ptr<FEMethod> MixTransport::UnsaturatedFlowElement::tsMonitor |
◆ vecValsOnBc
VectorDouble MixTransport::UnsaturatedFlowElement::vecValsOnBc |
The documentation for this struct was generated from the following file:
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
MixTransportElement(MoFEM::Interface &m_field)
construction of this data structure
DM dM
Discrete manager for unsaturated flow problem.
boost::shared_ptr< FEMethod > tsMonitor
virtual MPI_Comm & get_comm() const =0
virtual MoFEMErrorCode modify_finite_element_add_field_row(const std::string &fe_name, const std::string name_row)=0
set field row which finite element use
@ L2
field with C-1 continuity
BasicMethodsSequence & getPostProcessMonitor()
Get the postProcess to do Monitor object.
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
virtual int get_comm_rank() const =0
PetscErrorCode DMoFEMMeshToLocalVector(DM dm, Vec l, InsertMode mode, ScatterMode scatter_mode)
set local (or ghosted) vector values on mesh for partition only
EntityHandle lastEvalBcFluxEnt
virtual MoFEMErrorCode add_ents_to_field_by_type(const Range &ents, const EntityType type, const std::string &name, int verb=DEFAULT_VERBOSITY)=0
Add entities to field meshset.
PetscErrorCode DMMoFEMAddElement(DM dm, std::string fe_name)
add element to dm
boost::shared_ptr< ForcesAndSourcesCore > feVolLhs
Assemble tangent matrix.
PetscErrorCode TsMonitorSet(TS ts, PetscInt step, PetscReal t, Vec u, void *ctx)
Set monitor for TS solver.
boost::shared_ptr< VectorDouble > headRateAtGaussPts
Vector keeps head rate.
virtual MoFEMErrorCode add_ents_to_finite_element_by_type(const EntityHandle entities, const EntityType type, const std::string &name, const bool recursive=true)=0
add entities to finite element
boost::shared_ptr< ForcesAndSourcesCore > feFaceBc
Elemnet to calculate essential bc.
#define CHKERR
Inline error check.
virtual MoFEMErrorCode add_finite_element(const std::string &fe_name, enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)=0
add finite element
virtual moab::Interface & get_moab()=0
PetscErrorCode DMMoFEMTSSetIJacobian(DM dm, const std::string fe_name, boost::shared_ptr< MoFEM::FEMethod > method, boost::shared_ptr< MoFEM::BasicMethod > pre_only, boost::shared_ptr< MoFEM::BasicMethod > post_only)
set TS Jacobian evaluation function
virtual MoFEMErrorCode modify_finite_element_add_field_col(const std::string &fe_name, const std::string name_row)=0
set field col which finite element use
Force scale operator for reading two columns.
virtual MoFEMErrorCode build_finite_elements(int verb=DEFAULT_VERBOSITY)=0
Build finite elements.
MaterialsDoubleMap dMatMap
materials database
boost::shared_ptr< ForcesAndSourcesCore > feVolRhs
Assemble residual vector.
OpPostProcMapInMoab< SPACE_DIM, SPACE_DIM > OpPPMap
EntityHandle lastEvalBcValEnt
PetscErrorCode DMMoFEMCreateMoFEM(DM dm, MoFEM::Interface *m_field_ptr, const char problem_name[], const MoFEM::BitRefLevel bit_level, const MoFEM::BitRefLevel bit_mask=MoFEM::BitRefLevel().set())
Must be called by user to set MoFEM data structures.
virtual MoFEMErrorCode modify_finite_element_add_field_data(const std::string &fe_name, const std::string name_field)=0
set finite element field data
boost::shared_ptr< MethodForForceScaling > scaleMethodFlux
Method scaling fluxes.
Vec D1
Vector with inital head capillary pressure.
#define _IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_(MESHSET_MANAGER, CUBITBCTYPE, IT)
Iterator that loops over a specific Cubit MeshSet having a particular BC meshset in a moFEM field.
Vec ghostFlux
Ghost Vector of integrated fluxes.
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
@ AINSWORTH_LEGENDRE_BASE
Ainsworth Cole (Legendre) approx. base .
PetscErrorCode DMMoFEMTSSetIFunction(DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::BasicMethod *pre_only, MoFEM::BasicMethod *post_only)
set TS implicit function evaluation function
@ MOFEM_DATA_INCONSISTENCY
virtual MoFEMErrorCode build_fields(int verb=DEFAULT_VERBOSITY)=0
PetscErrorCode DMMoFEMGetTsCtx(DM dm, MoFEM::TsCtx **ts_ctx)
get MoFEM::TsCtx data structure
boost::shared_ptr< ForcesAndSourcesCore > feVolInitialPc
Calculate inital boundary conditions.
virtual MoFEMErrorCode build_adjacencies(const Range &ents, int verb=DEFAULT_VERBOSITY)=0
build adjacencies
virtual MoFEMErrorCode set_field_order(const EntityHandle meshset, const EntityType type, const std::string &name, const ApproximationOrder order, int verb=DEFAULT_VERBOSITY)=0
Set order approximation of the entities in the field.
PetscErrorCode DMoFEMLoopFiniteElements(DM dm, const char fe_name[], MoFEM::FEMethod *method, CacheTupleWeakPtr cache_ptr=CacheTupleSharedPtr())
Executes FEMethod for finite elements in DM.
MoFEM::Interface & mField
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
@ HDIV
field with continuous normal traction
#define CHKERRG(n)
Check error code of MoFEM/MOAB/PETSc function.
boost::shared_ptr< ForcesAndSourcesCore > feFaceRhs
Face element apply natural bc.
virtual MoFEMErrorCode add_field(const std::string name, const FieldSpace space, const FieldApproximationBase base, const FieldCoefficientsNumber nb_of_coefficients, const TagType tag_type=MB_TAG_SPARSE, const enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)=0
Add field.
boost::shared_ptr< MethodForForceScaling > scaleMethodValue
Method scaling values.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
BcMap bcValueMap
Store boundary condition for head capillary pressure.
PetscErrorCode DMMoFEMSetIsPartitioned(DM dm, PetscBool is_partitioned)
int lastEvalBcBlockFluxId
Post post-proc data at points from hash maps.