|
| v0.14.0
|
#include <users_modules/mortar_contact/src/MortarContactInterface.hpp>
|
typedef ContactSearchKdTree::ContactCommonData_multiIndex | contactMIndex |
|
enum | TSType {
EX,
IM,
IM2,
IMEX,
DEFAULT,
EX,
IM,
IM2,
IMEX,
DEFAULT
} |
|
enum | TSType {
EX,
IM,
IM2,
IMEX,
DEFAULT,
EX,
IM,
IM2,
IMEX,
DEFAULT
} |
|
using | BcMarkerPtr = boost::shared_ptr< std::vector< char unsigned > > |
|
using | BcMarkerPtr = boost::shared_ptr< std::vector< char unsigned > > |
|
|
| MortarContactInterface (MoFEM::Interface &m_field, string postion_field, string mesh_posi_field_name="MESH_NODE_POSITIONS", bool is_displacement_field=false, bool is_quasi_static=true) |
|
| MortarContactInterface ()=delete |
|
MoFEMErrorCode | getCommandLineParameters () override |
|
MoFEMErrorCode | addElementFields () override |
|
MoFEMErrorCode | createElements () override |
|
MoFEMErrorCode | setOperators () override |
|
BitRefLevel | getBitRefLevel () override |
|
MoFEMErrorCode | addElementsToDM (SmartPetscObj< DM > dm) override |
|
MoFEMErrorCode | setupSolverJacobianSNES () override |
|
MoFEMErrorCode | setupSolverFunctionSNES () override |
|
MoFEMErrorCode | setupSolverJacobianTS (const TSType type) override |
|
MoFEMErrorCode | setupSolverFunctionTS (const TSType type) override |
|
MoFEMErrorCode | updateElementVariables () override |
|
MoFEMErrorCode | postProcessElement (int step) override |
|
std::vector< BitRefLevel > & | getBitRefLevelVector () |
|
MoFEMErrorCode | setupElementEntities () |
|
MoFEMErrorCode | setPositionFieldOrder (int order) |
|
boost::ptr_deque< MoFEM::ForcesAndSourcesCore::UserDataOperator > & | getPostProcSimpleContactPipeline () |
|
MoFEMErrorCode | findContactSurfacePairs () |
|
MoFEMErrorCode | findPostProcSurface () |
|
template<typename T , bool RHS> |
MoFEMErrorCode | setupSolverImpl (const TSType type=IM) |
|
template<typename T > |
MoFEMErrorCode | setupSolverFunction (const TSType type=IM) |
|
template<typename T > |
MoFEMErrorCode | setupSolverJacobian (const TSType type=IM) |
|
MoFEMErrorCode | postProcessContactState (int step) |
|
template<> |
MoFEMErrorCode | setupSolverFunction (const TSType type) |
|
template<> |
MoFEMErrorCode | setupSolverFunction (const TSType type) |
|
template<> |
MoFEMErrorCode | setupSolverJacobian (const TSType type) |
|
template<> |
MoFEMErrorCode | setupSolverJacobian (const TSType type) |
|
template<> |
MoFEMErrorCode | setupSolverJacobian (const TSType type) |
|
template<> |
MoFEMErrorCode | setupSolverJacobian (const TSType type) |
|
template<> |
MoFEMErrorCode | setupSolverFunction (const TSType type) |
|
template<> |
MoFEMErrorCode | setupSolverFunction (const TSType type) |
|
| GenericElementInterface () |
|
virtual | ~GenericElementInterface () |
|
virtual MoFEMErrorCode | setGlobalBoundaryMarker (BcMarkerPtr mark) |
|
virtual BcMarkerPtr | getGlobalBoundaryMarker () |
|
virtual MoFEMErrorCode | setMonitorPtr (boost::shared_ptr< MoFEM::FEMethod > monitor_ptr) |
|
virtual BitRefLevel | getBitRefLevelMask () |
|
virtual MoFEMErrorCode | opFactoryDomainRhs (boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip) |
|
virtual MoFEMErrorCode | opFactoryDomainLhs (boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip) |
|
virtual MoFEMErrorCode | setUpdateElementVariablesOperators () |
|
virtual MoFEMErrorCode | updateElementVariables (SmartPetscObj< DM > dm, string fe_name) |
|
virtual MoFEMErrorCode | postProcessElement (int step, SmartPetscObj< DM > dm, string fe_name) |
|
| GenericElementInterface () |
|
virtual | ~GenericElementInterface () |
|
virtual MoFEMErrorCode | setGlobalBoundaryMarker (BcMarkerPtr mark) |
|
virtual BcMarkerPtr | getGlobalBoundaryMarker () |
|
virtual MoFEMErrorCode | setMonitorPtr (boost::shared_ptr< FEMethod > monitor_ptr) |
|
virtual BitRefLevel | getBitRefLevelMask () |
|
virtual MoFEMErrorCode | opFactoryDomainRhs (boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip) |
|
virtual MoFEMErrorCode | opFactoryDomainLhs (boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > &pip) |
|
virtual MoFEMErrorCode | setUpdateElementVariablesOperators () |
|
virtual MoFEMErrorCode | updateElementVariables (SmartPetscObj< DM > dm, string fe_name) |
|
virtual MoFEMErrorCode | postProcessElement (int step, SmartPetscObj< DM > dm, string fe_name) |
|
◆ contactMIndex
◆ MortarContactInterface() [1/2]
MortarContactInterface::MortarContactInterface |
( |
MoFEM::Interface & |
m_field, |
|
|
string |
postion_field, |
|
|
string |
mesh_posi_field_name = "MESH_NODE_POSITIONS" , |
|
|
bool |
is_displacement_field = false , |
|
|
bool |
is_quasi_static = true |
|
) |
| |
|
inline |
◆ MortarContactInterface() [2/2]
MortarContactInterface::MortarContactInterface |
( |
| ) |
|
|
delete |
◆ addElementFields()
Implements GenericElementInterface.
- Examples
- mortar_contact.cpp.
Definition at line 139 of file MortarContactInterface.cpp.
161 "set appropriate position field order, "
162 "setPositionFieldOrder(int order)");
181 auto set_contact_order = [&]() {
183 Range contact_tris, contact_edges;
185 moab::Interface::UNION);
186 contact_tris = contact_tris.subset_by_type(MBTRI);
187 CHKERR moab.get_adjacencies(contact_tris, 1,
false, contact_edges,
188 moab::Interface::UNION);
190 ho_ents.merge(contact_tris);
191 ho_ents.merge(contact_edges);
193 Range ents, verts, tets;
194 CHKERR moab.get_connectivity(ho_ents, verts,
true);
195 CHKERR moab.get_adjacencies(verts, 3,
false, tets,
196 moab::Interface::UNION);
197 tets = tets.subset_by_type(MBTET);
198 for (
auto d : {1, 2}) {
199 CHKERR moab.get_adjacencies(tets,
d,
false, ents,
200 moab::Interface::UNION);
202 ho_ents = unite(ho_ents, ents);
203 ho_ents = unite(ho_ents, tets);
212 CHKERR set_contact_order();
◆ addElementsToDM()
◆ createElements()
◆ findContactSurfacePairs()
Definition at line 629 of file MortarContactInterface.cpp.
632 std::map<std::string, Range> slave_surface_map, master_surface_map;
634 auto fill_surface_map = [&](
auto &surface_map, std::string surface_name) {
638 if (it->getName().compare(0, surface_name.size(), surface_name) == 0) {
642 std::string key = it->getName().substr(surface_name.size());
643 auto res = surface_map.insert(std::pair<std::string, Range>(key, tris));
646 "Contact surface name %s used more than once",
647 it->getName().c_str());
655 CHKERR fill_surface_map(slave_surface_map,
"MORTAR_SLAVE");
656 CHKERR fill_surface_map(master_surface_map,
"MORTAR_MASTER");
658 for (
const auto &[key, slave_range] : slave_surface_map) {
659 auto master_search = master_surface_map.find(key);
660 if (master_search != master_surface_map.end()) {
662 std::pair<Range, Range>(slave_range, master_search->second));
663 master_surface_map.erase(master_search);
667 "Cannot find pairing contact surface MORTAR_MASTER%s for existing "
668 "surface MORTAR_SLAVE%s",
669 key.c_str(), key.c_str());
673 if (!master_surface_map.empty()) {
674 std::string key = master_surface_map.begin()->first;
676 "Cannot find pairing contact surface MORTAR_SLAVE%s for existing "
677 "surface MORTAR_MASTER%s",
678 key.c_str(), key.c_str());
◆ findPostProcSurface()
Definition at line 684 of file MortarContactInterface.cpp.
687 std::string surface_name =
"MORTAR_POST_PROC";
690 if (it->getName().compare(0, surface_name.size(), surface_name) == 0) {
◆ getBitRefLevel()
◆ getBitRefLevelVector()
std::vector< BitRefLevel > & MortarContactInterface::getBitRefLevelVector |
( |
| ) |
|
◆ getCommandLineParameters()
Reimplemented from GenericElementInterface.
- Examples
- mortar_contact.cpp.
Definition at line 22 of file MortarContactInterface.cpp.
25 CHKERR PetscOptionsBegin(PETSC_COMM_WORLD,
"",
"Mortar Config",
"none");
29 "approximation order of spatial positions in contact interface",
"", 1,
31 CHKERR PetscOptionsInt(
"-ho_levels_num",
"number of higher order levels",
"",
33 CHKERR PetscOptionsInt(
"-order_lambda",
34 "approximation order of Lagrange multipliers",
"", 1,
37 CHKERR PetscOptionsBool(
"-is_partitioned",
38 "set if mesh is partitioned (this result that each "
39 "process keeps only part of the mes",
42 CHKERR PetscOptionsReal(
"-cn_value",
"default regularisation cn value",
"",
45 CHKERR PetscOptionsReal(
"-post_proc_gap_tol",
46 "gap tolerance for post processing",
"", 0.,
49 CHKERR PetscOptionsBool(
"-is_newton_cotes",
50 "set if Newton-Cotes quadrature rules are used",
"",
52 CHKERR PetscOptionsBool(
"-convect",
"set to convect integration pts",
"",
54 CHKERR PetscOptionsBool(
"-print_contact_state",
55 "output number of active gp at every iteration",
"",
57 CHKERR PetscOptionsBool(
"-alm_flag",
"if set use ALM, if not use C-function",
58 "", PETSC_FALSE, &
almFlag, PETSC_NULL);
59 CHKERR PetscOptionsBool(
"-debug",
"output debug files",
"", PETSC_FALSE,
63 CHKERR PetscOptionsInt(
"-order",
"approximation order of spatial positions",
64 "", 1, &
order, PETSC_NULL);
67 ierr = PetscOptionsEnd();
◆ getPostProcSimpleContactPipeline()
◆ postProcessContactState()
MoFEMErrorCode MortarContactInterface::postProcessContactState |
( |
int |
step | ) |
|
Definition at line 540 of file MortarContactInterface.cpp.
547 "you need to setup the solver first to use postProcessContactState");
552 auto get_contact_data = [&](
auto vec, std::array<double, 2> &data) {
554 CHKERR VecAssemblyBegin(vec);
555 CHKERR VecAssemblyEnd(vec);
557 CHKERR VecGetArrayRead(vec, &array);
562 CHKERR VecRestoreArrayRead(vec, &array);
570 MOFEM_LOG_C(
"WORLD", Sev::verbose,
"Active gauss pts: %d out of %d",
575 <<
"Computing contact area only on the post process surface";
577 MOFEM_LOG_C(
"WORLD", Sev::inform,
"Using gap tolerance %3.3f",
580 MOFEM_LOG_C(
"WORLD", Sev::inform,
"Active contact area: %3.3f out of %3.3f",
584 auto out_file_name =
"out_contact_integ_pts_" + to_string(step) +
".h5m";
587 "PARALLEL=WRITE_PART");
◆ postProcessElement()
◆ setOperators()
◆ setPositionFieldOrder()
MoFEMErrorCode MortarContactInterface::setPositionFieldOrder |
( |
int |
order | ) |
|
◆ setupElementEntities()
Definition at line 73 of file MortarContactInterface.cpp.
85 <<
"Meshset_level0 " << meshset_level0.size();
92 slaveTris.merge(contact_surface_pair.first);
97 CHKERR contact_search_kd_tree.buildTree(contact_surface_pair.second);
99 CHKERR contact_search_kd_tree.contactSearchAlgorithm(
100 contact_surface_pair.second, contact_surface_pair.first,
106 "Partitioned mesh is not supported with mortar contact");
109 CHKERR moab.create_meshset(MESHSET_SET, meshset_slave_master_prisms);
111 moab.add_entities(meshset_slave_master_prisms,
contactPrisms);
113 meshset_slave_master_prisms, 3,
bitLevels.back());
116 CHKERR moab.write_mesh(
"slave_master_prisms.vtk",
117 &meshset_slave_master_prisms, 1);
119 Range tris_from_prism;
122 contactPrisms, 2,
true, tris_from_prism, moab::Interface::UNION);
124 tris_from_prism = tris_from_prism.subset_by_type(MBTRI);
◆ setupSolverFunction() [1/5]
template<>
MoFEMErrorCode MortarContactInterface::setupSolverFunction |
( |
const TSType |
type | ) |
|
◆ setupSolverFunction() [2/5]
template<>
MoFEMErrorCode MortarContactInterface::setupSolverFunction |
( |
const TSType |
type | ) |
|
◆ setupSolverFunction() [3/5]
◆ setupSolverFunction() [4/5]
◆ setupSolverFunction() [5/5]
template<typename T >
MoFEMErrorCode MortarContactInterface::setupSolverFunction |
( |
const TSType |
type = IM | ) |
|
◆ setupSolverFunctionSNES()
◆ setupSolverFunctionTS()
◆ setupSolverImpl()
template<typename T , bool RHS>
Definition at line 255 of file MortarContactInterface.cpp.
260 "DM not defined, addElementsToDM(dm) first");
264 auto make_contact_element = [&]() {
265 return boost::make_shared<MortarContactProblem::MortarContactElement>(
269 auto make_convective_master_element = [&]() {
270 return boost::make_shared<
275 auto make_convective_slave_element = [&]() {
276 return boost::make_shared<
281 auto make_contact_common_data = [&]() {
282 return boost::make_shared<MortarContactProblem::CommonDataMortarContact>(
286 auto get_contact_rhs = [&](
auto make_element,
bool is_alm =
false,
287 bool is_displacements =
false) {
288 auto fe_rhs_simple_contact = make_element();
289 auto common_data_mortar_contact = make_contact_common_data();
291 fe_rhs_simple_contact->contactStateVec =
292 common_data_mortar_contact->gaussPtsStateVec;
294 fe_rhs_simple_contact->getOpPtrVector().push_back(
297 fe_rhs_simple_contact, common_data_mortar_contact,
positionField,
298 "LAGMULT", is_alm,
false,
"", is_displacements);
299 fe_rhs_simple_contact->getOpPtrVector().push_back(
301 return fe_rhs_simple_contact;
304 auto get_master_traction_rhs = [&](
auto make_element,
bool is_alm =
false,
305 bool is_displacements =
false) {
306 auto fe_rhs_simple_contact = make_element();
307 fe_rhs_simple_contact->getOpPtrVector().push_back(
309 auto common_data_mortar_contact = make_contact_common_data();
311 fe_rhs_simple_contact, common_data_mortar_contact,
positionField,
312 "LAGMULT", is_alm,
false,
"", is_displacements);
313 fe_rhs_simple_contact->getOpPtrVector().push_back(
315 return fe_rhs_simple_contact;
318 auto get_master_traction_lhs = [&](
auto make_element,
bool is_alm =
false,
319 bool is_displacements =
false) {
320 auto fe_lhs_simple_contact = make_element();
321 auto common_data_mortar_contact = make_contact_common_data();
322 fe_lhs_simple_contact->getOpPtrVector().push_back(
325 fe_lhs_simple_contact, common_data_mortar_contact,
positionField,
326 "LAGMULT", is_alm,
false,
"", is_displacements);
327 fe_lhs_simple_contact->getOpPtrVector().push_back(
329 return fe_lhs_simple_contact;
332 auto get_master_help_traction_lhs = [&](
auto make_element,
334 bool is_displacements =
false) {
335 auto fe_lhs_simple_contact = make_element();
336 auto common_data_mortar_contact = make_contact_common_data();
337 fe_lhs_simple_contact->getOpPtrVector().push_back(
340 fe_lhs_simple_contact, common_data_mortar_contact,
positionField,
341 "LAGMULT", is_alm,
false,
"", is_displacements);
342 fe_lhs_simple_contact->getOpPtrVector().push_back(
344 return fe_lhs_simple_contact;
347 auto get_contact_lhs = [&](
auto make_element,
bool is_alm =
false,
348 bool is_displacements =
false) {
349 auto fe_lhs_simple_contact = make_element();
350 auto common_data_mortar_contact = make_contact_common_data();
351 fe_lhs_simple_contact->getOpPtrVector().push_back(
354 fe_lhs_simple_contact, common_data_mortar_contact,
positionField,
355 "LAGMULT", is_alm,
false,
"", is_displacements);
356 fe_lhs_simple_contact->getOpPtrVector().push_back(
358 return fe_lhs_simple_contact;
361 auto get_contact_help_lhs = [&](
auto make_element,
bool is_alm =
false,
362 bool is_displacements =
false) {
363 auto fe_lhs_simple_contact = make_element();
364 auto common_data_mortar_contact = make_contact_common_data();
365 fe_lhs_simple_contact->getOpPtrVector().push_back(
368 fe_lhs_simple_contact, common_data_mortar_contact,
positionField,
369 "LAGMULT", is_alm,
false,
"", is_displacements);
370 fe_lhs_simple_contact->getOpPtrVector().push_back(
372 return fe_lhs_simple_contact;
375 auto set_solver_pipelines = [&](PetscErrorCode (*
function)(
376 DM,
const std::string,
377 boost::shared_ptr<MoFEM::FEMethod>,
378 boost::shared_ptr<MoFEM::BasicMethod>,
379 boost::shared_ptr<MoFEM::BasicMethod>),
380 PetscErrorCode (*jacobian)(
381 DM,
const std::string,
382 boost::shared_ptr<MoFEM::FEMethod>,
383 boost::shared_ptr<MoFEM::BasicMethod>,
384 boost::shared_ptr<MoFEM::BasicMethod>)) {
390 CHKERR function(this->
dM,
"CONTACT_ELEM",
391 get_contact_rhs(make_convective_master_element,
almFlag,
393 PETSC_NULL, PETSC_NULL);
394 CHKERR function(this->
dM,
"CONTACT_ELEM",
395 get_master_traction_rhs(make_convective_slave_element,
397 PETSC_NULL, PETSC_NULL);
401 CHKERR jacobian(this->
dM,
"CONTACT_ELEM",
402 get_contact_help_lhs(make_convective_master_element,
404 PETSC_NULL, PETSC_NULL);
407 this->
dM,
"CONTACT_ELEM",
408 get_master_help_traction_lhs(make_convective_slave_element),
409 PETSC_NULL, PETSC_NULL);
416 this->
dM,
"CONTACT_ELEM",
418 PETSC_NULL, PETSC_NULL);
419 CHKERR function(this->
dM,
"CONTACT_ELEM",
420 get_master_traction_rhs(make_contact_element,
almFlag,
422 PETSC_NULL, PETSC_NULL);
426 CHKERR jacobian(this->
dM,
"CONTACT_ELEM",
427 get_contact_lhs(make_contact_element,
almFlag,
429 PETSC_NULL, PETSC_NULL);
430 CHKERR jacobian(this->
dM,
"CONTACT_ELEM",
431 get_master_traction_lhs(make_contact_element,
almFlag,
433 PETSC_NULL, PETSC_NULL);
441 if constexpr (std::is_same_v<T, SNES>) {
445 }
else if (std::is_same_v<T, TS>) {
462 "This TS is not yet implemented for contact");
467 static_assert(!std::is_same_v<T, KSP>,
468 "this solver has not been implemented for contact yet");
◆ setupSolverJacobian() [1/5]
template<>
MoFEMErrorCode MortarContactInterface::setupSolverJacobian |
( |
const TSType |
type | ) |
|
◆ setupSolverJacobian() [2/5]
template<>
MoFEMErrorCode MortarContactInterface::setupSolverJacobian |
( |
const TSType |
type | ) |
|
◆ setupSolverJacobian() [3/5]
◆ setupSolverJacobian() [4/5]
◆ setupSolverJacobian() [5/5]
template<typename T >
MoFEMErrorCode MortarContactInterface::setupSolverJacobian |
( |
const TSType |
type = IM | ) |
|
◆ setupSolverJacobianSNES()
◆ setupSolverJacobianTS()
◆ updateElementVariables()
◆ almFlag
PetscBool MortarContactInterface::almFlag |
◆ bitLevels
std::vector<BitRefLevel> MortarContactInterface::bitLevels |
◆ cnValue
double MortarContactInterface::cnValue |
◆ commonDataPostProc
◆ contactArea
std::array<double, 2> MortarContactInterface::contactArea |
◆ contactCommondataMultiIndex
boost::shared_ptr<contactMIndex> MortarContactInterface::contactCommondataMultiIndex |
◆ contactPrisms
Range MortarContactInterface::contactPrisms |
◆ contactProblemPtr
◆ contactSurfacePairs
std::vector<std::pair<Range, Range> > MortarContactInterface::contactSurfacePairs |
◆ convectPts
PetscBool MortarContactInterface::convectPts |
◆ dEbug
PetscBool MortarContactInterface::dEbug |
◆ dM
SmartPetscObj<DM> MortarContactInterface::dM |
◆ fePostProcSimpleContact
◆ isDisplacementField
bool MortarContactInterface::isDisplacementField |
◆ isNewtonCotes
PetscBool MortarContactInterface::isNewtonCotes |
◆ isPartitioned
PetscBool MortarContactInterface::isPartitioned |
◆ isQuasiStatic
bool MortarContactInterface::isQuasiStatic |
◆ masterTris
Range MortarContactInterface::masterTris |
◆ mb_post
moab::Core MortarContactInterface::mb_post |
◆ meshNodeField
string MortarContactInterface::meshNodeField |
◆ mField
◆ moabPostProcMesh
moab::Interface& MortarContactInterface::moabPostProcMesh |
◆ nbGaussPts
std::array<double, 2> MortarContactInterface::nbGaussPts |
◆ nbHoLevels
PetscInt MortarContactInterface::nbHoLevels |
◆ oRder
PetscInt MortarContactInterface::oRder |
◆ orderContact
PetscInt MortarContactInterface::orderContact |
◆ orderLambda
PetscInt MortarContactInterface::orderLambda |
◆ positionField
string MortarContactInterface::positionField |
◆ postProcContactPtr
◆ postProcGapTol
double MortarContactInterface::postProcGapTol |
◆ postProcSurface
Range MortarContactInterface::postProcSurface |
◆ printContactState
PetscBool MortarContactInterface::printContactState |
◆ slaveTris
Range MortarContactInterface::slaveTris |
The documentation for this struct was generated from the following files:
#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.
MoFEMErrorCode addHOOpsFace3D(const std::string field, E &e, bool hcurl, bool hdiv)
virtual int get_comm_rank() const =0
Simple interface for fast problem set-up.
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
#define CHKERR
Inline error check.
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
PetscErrorCode DMMoFEMTSSetI2Jacobian(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
#define MOFEM_LOG_C(channel, severity, format,...)
PetscErrorCode DMMoFEMTSSetI2Function(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 implicit function evaluation function
PetscBool is_quasi_static
void simple(double P1[], double P2[], double P3[], double c[], const int N)
PetscErrorCode DMMoFEMSNESSetJacobian(DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::BasicMethod *pre_only, MoFEM::BasicMethod *post_only)
set SNES Jacobian evaluation function
virtual bool check_field(const std::string &name) const =0
check if field is in database
BcMarkerPtr mBoundaryMarker
FTensor::Index< 'i', SPACE_DIM > i
PetscErrorCode DMMoFEMTSSetRHSFunction(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 the right hand side function
#define MOFEM_LOG(channel, severity)
Log.
#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.
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
@ AINSWORTH_LEGENDRE_BASE
Ainsworth Cole (Legendre) approx. base .
Set indices on entities on finite element.
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
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
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.
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
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.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
PetscErrorCode DMMoFEMSNESSetFunction(DM dm, const char fe_name[], MoFEM::FEMethod *method, MoFEM::BasicMethod *pre_only, MoFEM::BasicMethod *post_only)
set SNES residual evaluation function