v0.14.0
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | List of all members
SimpleContactProblem Struct Reference

Set of functions declaring elements and setting operators to apply contact conditions between surfaces with matching meshes. More...

#include <users_modules/mortar_contact/src/SimpleContact.hpp>

Inheritance diagram for SimpleContactProblem:
[legend]
Collaboration diagram for SimpleContactProblem:
[legend]

Classes

struct  CommonDataSimpleContact
 
struct  ConvectMasterContactElement
 Element used to integrate on slave surfaces. It convects integration points on slaves, so that quantities like gap from master are evaluated at correct points. More...
 
struct  ConvectSlaveContactElement
 Element used to integrate on master surfaces. It convects integration points on slaves, so that quantities like Lagrange multiplier from master are evaluated at correct points. More...
 
struct  ConvectSlaveIntegrationPts
 Class used to convect integration points on slave and master, and to calculate directional direvatives of change integration position point as variation os spatial positions on contact surfaces. More...
 
struct  LoadScale
 
struct  OpCalAugmentedTractionRhsMaster
 RHS-operator for the simple contact element. More...
 
struct  OpCalAugmentedTractionRhsSlave
 RHS-operator for the simple contact element. More...
 
struct  OpCalContactAugmentedTractionOverLambdaMasterSlave
 LHS-operator for the simple contact element with Augmented Lagrangian Method. More...
 
struct  OpCalContactAugmentedTractionOverLambdaSlaveSlave
 LHS-operator for the simple contact element with Augmented Lagrangian Method. More...
 
struct  OpCalContactAugmentedTractionOverSpatialMasterMaster
 LHS-operator for the simple contact element with Augmented Lagrangian Method. More...
 
struct  OpCalContactAugmentedTractionOverSpatialMasterSlave
 LHS-operator for the simple contact element with Augmented Lagrangian Method. More...
 
struct  OpCalContactAugmentedTractionOverSpatialSlaveMaster
 LHS-operator for the simple contact element with Augmented Lagrangian Method. More...
 
struct  OpCalContactAugmentedTractionOverSpatialSlaveSlave
 LHS-operator for the simple contact element with Augmented Lagrangian Method. More...
 
struct  OpCalContactTractionOnMaster
 RHS-operator for the simple contact element. More...
 
struct  OpCalContactTractionOnSlave
 RHS-operator for the simple contact element. More...
 
struct  OpCalContactTractionOverLambdaMasterSlave
 LHS-operator for the simple contact element. More...
 
struct  OpCalContactTractionOverLambdaSlaveSlave
 LHS-operator for the simple contact element. More...
 
struct  OpCalculateDeformation
 Operator for computing deformation gradients in side volumes. More...
 
struct  OpCalculateGradLambdaXi
 Evaluate gradient of Lagrange multipliers on reference slave surface. More...
 
struct  OpCalculateGradPositionXi
 Evaluate gradient position on reference master surface. More...
 
struct  OpCalDerIntCompFunOverLambdaSlaveSlave
 LHS-operator for the simple contact element. More...
 
struct  OpCalDerIntCompFunOverSpatPosSlaveMaster
 LHS-operator for the simple contact element. More...
 
struct  OpCalDerIntCompFunOverSpatPosSlaveSlave
 LHS-operator for the simple contact element. More...
 
struct  OpCalDerIntCompFunSlaveSlave_dX
 LHS-operator for the simple contact element. More...
 
struct  OpCalIntCompFunSlave
 RHS-operator for the simple contact element. More...
 
struct  OpCalMatForcesALEMaster
 RHS - operator for the contact element (material configuration) Integrates virtual work of contact traction in the material configuration on master surface. More...
 
struct  OpCalMatForcesALESlave
 RHS - operator for the contact element (material configuration) Integrates virtual work of contact traction in the material configuration on slave surface. More...
 
struct  OpContactALELhs
 Operator used as base struct for OpContactTractionSlaveSlave_dX, OpContactTractionMasterSlave_dX, OpContactTractionMasterMaster_dX and OpCalDerIntCompFunSlaveSlave_dX. More...
 
struct  OpContactMaterialLhs
 
struct  OpContactMaterialMasterOnFaceLhs_dX_dX
 LHS-operator for the contact element (material configuration) More...
 
struct  OpContactMaterialMasterSlaveLhs_dX_dLagmult
 LHS-operator for the contact element (material configuration) More...
 
struct  OpContactMaterialSlaveOnFaceLhs_dX_dX
 LHS-operator for the contact element (material configuration) More...
 
struct  OpContactMaterialSlaveSlaveLhs_dX_dLagmult
 LHS-operator for the contact element (material configuration) More...
 
struct  OpContactMaterialVolOnSideLhs
 Operator used as base struct for OpContactMaterialVolOnSideLhs_dX_dx OpContactMaterialVolOnSideLhs_dX_dX operators that use side volume element adjacent to current contact prism needed to evaluate of deformation gradient tensor derivative. More...
 
struct  OpContactMaterialVolOnSideLhs_dX_dx
 LHS-operator (material configuration) on the side volume of either master or slave side. More...
 
struct  OpContactMaterialVolOnSideLhs_dX_dX
 LHS-operator for the contact element (material configuration) More...
 
struct  OpContactTractionMasterMaster_dX
 LHS-operator for the simple contact element. More...
 
struct  OpContactTractionMasterSlave_dX
 LHS-operator for the simple contact element. More...
 
struct  OpContactTractionSlaveSlave_dX
 LHS-operator for the simple contact element. More...
 
struct  OpGapConstraintAugmentedOverLambda
 LHS-operator for the simple contact element. More...
 
struct  OpGapConstraintAugmentedOverSpatialMaster
 LHS-operator for the simple contact element. More...
 
struct  OpGapConstraintAugmentedOverSpatialSlave
 LHS-operator for the simple contact element. More...
 
struct  OpGapConstraintAugmentedRhs
 RHS-operator for the simple contact element for Augmented Lagrangian Method. More...
 
struct  OpGetAugmentedLambdaSlave
 Operator for the simple contact element for Augmented Lagrangian Method. More...
 
struct  OpGetContactArea
 
struct  OpGetDeformationFieldForDisplAtGaussPtsMaster
 Operator for the simple contact element. More...
 
struct  OpGetDeformationFieldForDisplAtGaussPtsSlave
 Operator for the simple contact element. More...
 
struct  OpGetGapSlave
 Operator for the simple contact element. More...
 
struct  OpGetGaussPtsState
 
struct  OpGetLagMulAtGaussPtsSlave
 Operator for the simple contact element. More...
 
struct  OpGetMatPosForDisplAtGaussPtsMaster
 Operator for the simple contact element. More...
 
struct  OpGetMatPosForDisplAtGaussPtsSlave
 Operator for the simple contact element. More...
 
struct  OpGetNormalMaster
 Computes, for reference configuration, normal to master face that is common to all gauss points. More...
 
struct  OpGetNormalMasterALE
 
struct  OpGetNormalSlave
 Computes, for reference configuration, normal to slave face that is common to all gauss points. More...
 
struct  OpGetNormalSlaveALE
 
struct  OpGetPositionAtGaussPtsMaster
 Operator for the simple contact element. More...
 
struct  OpGetPositionAtGaussPtsSlave
 Operator for the simple contact element. More...
 
struct  OpLagGapProdGaussPtsSlave
 Operator for the simple contact element. More...
 
struct  OpLhsConvectIntegrationPtsConstrainMasterGap
 Tangent opeerator for contrains equation for change of spatial positions on master and slave. More...
 
struct  OpLhsConvectIntegrationPtsContactTraction
 Calculate tangent operator for contact force for change of integration point positions, as result of change os spatial positions. More...
 
struct  OpLoopForSideOfContactPrism
 Trigers operators for side volume element on slave side for evaluation of the RHS contact traction in the material configuration on either slave or master surface. More...
 
struct  OpMakeTestTextFile
 
struct  OpMakeVtkSlave
 Operator for the simple contact element. More...
 
struct  SimpleContactElement
 
struct  SimpleContactPrismsData
 

Public Types

enum  StateTagSide { NO_TAG = 0 , MASTER_SIDE = 1 , SLAVE_SIDE = 2 }
 Choice of the contact prism side to put the state tag on. More...
 
using ContactEle = ContactPrismElementForcesAndSourcesCore
 
using ContactOp = ContactPrismElementForcesAndSourcesCore::UserDataOperator
 
using EntData = EntitiesFieldData::EntData
 
using FaceUserDataOperator = FaceElementForcesAndSourcesCore::UserDataOperator
 

Public Member Functions

MoFEMErrorCode addContactElement (const string element_name, const string field_name, const string lagrange_field_name, Range &range_slave_master_prisms, bool eigen_pos_flag=false, const string eigen_node_field_name="EIGEN_SPATIAL_POSITIONS")
 Function that adds field data for spatial positions and Lagrange multipliers to rows and columns, provides access to field data and adds prism entities to element. More...
 
MoFEMErrorCode addContactElementALE (const string element_name, const string field_name, const string mesh_node_field_name, const string lagrange_field_name, Range &range_slave_master_prisms, bool eigen_pos_flag=false, const string eigen_node_field_name="EIGEN_SPATIAL_POSITIONS")
 Function that adds field data for spatial positions and Lagrange multipliers to rows and columns, provides access to field data and adds prism entities to element. More...
 
MoFEMErrorCode addPostProcContactElement (const string element_name, const string spatial_field_name, const string lagrange_field_name, const string mesh_pos_field_name, Range &slave_tris)
 Function that adds a new finite element for contact post-processing. More...
 
 SimpleContactProblem (MoFEM::Interface &m_field, boost::shared_ptr< double > cn_value, bool newton_cotes=false)
 
MoFEMErrorCode setContactOperatorsRhs (boost::shared_ptr< SimpleContactElement > fe_rhs_simple_contact, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, string field_name, string lagrange_field_name, bool is_alm=false, bool is_eigen_pos_field=false, string eigen_pos_field_name="EIGEN_SPATIAL_POSITIONS", bool use_reference_coordinates=false)
 Function for the simple contact element for C function or ALM approach that sets the user data RHS-operators. More...
 
MoFEMErrorCode setContactOperatorsLhs (boost::shared_ptr< SimpleContactElement > fe_lhs_simple_contact, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, string field_name, string lagrange_field_name, bool is_alm=false, bool is_eigen_pos_field=false, string eigen_pos_field_name="EIGEN_SPATIAL_POSITIONS", bool use_reference_coordinates=false)
 Function for the simple contact element for C function or ALM approach that sets the user data LHS-operators. More...
 
MoFEMErrorCode setContactOperatorsLhs (boost::shared_ptr< ConvectMasterContactElement > fe_lhs_simple_contact, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, string field_name, string lagrange_field_name, bool is_alm=false, bool is_eigen_pos_field=false, string eigen_pos_field_name="EIGEN_SPATIAL_POSITIONS", bool use_reference_coordinates=false)
 Function for the simple contact element for C function or ALM approach that sets the user data LHS-operators. More...
 
MoFEMErrorCode setMasterForceOperatorsRhs (boost::shared_ptr< SimpleContactElement > fe_lhs_simple_contact, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, string field_name, string lagrange_field_name, bool is_alm=false, bool is_eigen_pos_field=false, string eigen_pos_field_name="EIGEN_SPATIAL_POSITIONS", bool use_reference_coordinates=false)
 
MoFEMErrorCode setMasterForceOperatorsLhs (boost::shared_ptr< SimpleContactElement > fe_lhs_simple_contact, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, string field_name, string lagrange_field_name, bool is_alm=false, bool is_eigen_pos_field=false, string eigen_pos_field_name="EIGEN_SPATIAL_POSITIONS", bool use_reference_coordinates=false)
 
MoFEMErrorCode setMasterForceOperatorsLhs (boost::shared_ptr< ConvectSlaveContactElement > fe_lhs_simple_contact, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, string field_name, string lagrange_field_name, bool is_alm=false, bool is_eigen_pos_field=false, string eigen_pos_field_name="EIGEN_SPATIAL_POSITIONS", bool use_reference_coordinates=false)
 
MoFEMErrorCode setContactOperatorsForPostProc (boost::shared_ptr< SimpleContactElement > fe_post_proc_simple_contact, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, MoFEM::Interface &m_field, string field_name, string lagrange_field_name, moab::Interface &moab_out, bool alm_flag=false, bool is_eigen_pos_field=false, string eigen_pos_field_name="EIGEN_SPATIAL_POSITIONS", bool use_reference_coordinates=false, StateTagSide state_tag_side=NO_TAG)
 Function for the simple contact element that sets the user data post processing operators. More...
 
MoFEMErrorCode setContactOperatorsRhsALEMaterial (boost::shared_ptr< SimpleContactElement > fe_rhs_simple_contact_ale, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, const string field_name, const string mesh_node_field_name, const string lagrange_field_name, const string side_fe_name)
 Function for the simple contact element that sets the user data post processing operators. More...
 
MoFEMErrorCode setContactOperatorsLhsALEMaterial (boost::shared_ptr< SimpleContactElement > fe_lhs_simple_contact_ale, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, const string field_name, const string mesh_node_field_name, const string lagrange_field_name, const string side_fe_name)
 Function for the simple contact element that sets the user data LHS-operators. More...
 
MoFEMErrorCode setContactOperatorsLhsALE (boost::shared_ptr< SimpleContactElement > fe_lhs_simple_contact_ale, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, const string field_name, const string mesh_node_field_name, const string lagrange_field_name, bool is_eigen_pos_field=false, string eigen_pos_field_name="EIGEN_SPATIAL_POSITIONS")
 Function for the simple contact element that sets the user data LHS-operators. More...
 

Static Public Member Functions

static double Sign (double x)
 
static bool State (const double cn, const double g, const double l)
 
static bool StateALM (const double cn, const double g, const double l)
 
static double ConstrainFunction (const double cn, const double g, const double l)
 
static double ConstrainFunction_dg (const double cn, const double g, const double l)
 
static double ConstrainFunction_dl (const double cn, const double g, const double l)
 

Public Attributes

map< int, SimpleContactPrismsDatasetOfSimpleContactPrism
 maps side set id with appropriate FluxData More...
 
double cnValue
 
bool newtonCotes
 
boost::shared_ptr< doublecnValuePtr
 
MoFEM::InterfacemField
 
brief Computes
 
brief for material configuration
 

Static Public Attributes

static constexpr double TOL = 1e-8
 
static constexpr int LAGRANGE_RANK = 1
 
static constexpr int POSITION_RANK = 3
 
static constexpr double ALM_TOL = 1e-14
 

Detailed Description

Set of functions declaring elements and setting operators to apply contact conditions between surfaces with matching meshes.

Definition at line 27 of file SimpleContact.hpp.

Member Typedef Documentation

◆ ContactEle

using SimpleContactProblem::ContactEle = ContactPrismElementForcesAndSourcesCore

Definition at line 29 of file SimpleContact.hpp.

◆ ContactOp

using SimpleContactProblem::ContactOp = ContactPrismElementForcesAndSourcesCore::UserDataOperator

Definition at line 30 of file SimpleContact.hpp.

◆ EntData

using SimpleContactProblem::EntData = EntitiesFieldData::EntData

Definition at line 31 of file SimpleContact.hpp.

◆ FaceUserDataOperator

using SimpleContactProblem::FaceUserDataOperator = FaceElementForcesAndSourcesCore::UserDataOperator

Definition at line 32 of file SimpleContact.hpp.

Member Enumeration Documentation

◆ StateTagSide

Choice of the contact prism side to put the state tag on.

Enumerator
NO_TAG 
MASTER_SIDE 
SLAVE_SIDE 

Definition at line 2177 of file SimpleContact.hpp.

Constructor & Destructor Documentation

◆ SimpleContactProblem()

SimpleContactProblem::SimpleContactProblem ( MoFEM::Interface m_field,
boost::shared_ptr< double cn_value,
bool  newton_cotes = false 
)
inline

Definition at line 487 of file SimpleContact.hpp.

490 : mField(m_field), cnValuePtr(cn_value), newtonCotes(newton_cotes) {
491 cnValue = *cnValuePtr.get();
492 }
MoFEM::Interface & mField
boost::shared_ptr< double > cnValuePtr

Member Function Documentation

◆ addContactElement()

MoFEMErrorCode SimpleContactProblem::addContactElement ( const string  element_name,
const string  field_name,
const string  lagrange_field_name,
Range range_slave_master_prisms,
bool  eigen_pos_flag = false,
const string  eigen_node_field_name = "EIGEN_SPATIAL_POSITIONS" 
)
inline

Function that adds field data for spatial positions and Lagrange multipliers to rows and columns, provides access to field data and adds prism entities to element.

Parameters
element_nameString for the element name
field_nameString of field name for spatial position
lagrange_field_nameString of field name for Lagrange multipliers
mesh_node_field_nameString of field name for material positions
range_slave_master_prismsRange for prism entities used to create contact elements
Returns
Error code

Definition at line 231 of file SimpleContact.hpp.

235 {
237
239
240 if (range_slave_master_prisms.size() > 0) {
241
243 lagrange_field_name);
244
246 field_name);
247
249 lagrange_field_name);
250
252 field_name);
253
255 lagrange_field_name);
256
257 if (eigen_pos_flag)
259 element_name, eigen_node_field_name);
260
262 field_name);
263
265 "MESH_NODE_POSITIONS");
266
267 setOfSimpleContactPrism[1].pRisms = range_slave_master_prisms;
268
269 // Adding range_slave_master_prisms to Element element_name
271 range_slave_master_prisms, MBPRISM, element_name);
272 }
273
275 }
@ MF_ZERO
Definition: definitions.h:98
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
#define CHKERR
Inline error check.
Definition: definitions.h:535
virtual MoFEMErrorCode add_finite_element(const std::string &fe_name, enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)=0
add finite element
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
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
virtual MoFEMErrorCode modify_finite_element_add_field_data(const std::string &fe_name, const std::string name_filed)=0
set finite element field data
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
constexpr auto field_name
map< int, SimpleContactPrismsData > setOfSimpleContactPrism
maps side set id with appropriate FluxData

◆ addContactElementALE()

MoFEMErrorCode SimpleContactProblem::addContactElementALE ( const string  element_name,
const string  field_name,
const string  mesh_node_field_name,
const string  lagrange_field_name,
Range range_slave_master_prisms,
bool  eigen_pos_flag = false,
const string  eigen_node_field_name = "EIGEN_SPATIAL_POSITIONS" 
)
inline

Function that adds field data for spatial positions and Lagrange multipliers to rows and columns, provides access to field data and adds prism entities to element.

Parameters
element_nameString for the element name
field_nameString of field name for spatial position
lagrange_field_nameString of field name for Lagrange multipliers
mesh_node_field_nameString of field name for material positions
range_slave_master_prismsRange for prism entities used to create contact elements
Returns
Error code

Definition at line 294 of file SimpleContact.hpp.

298 {
300
302
303 if (range_slave_master_prisms.size() > 0) {
304
306 lagrange_field_name);
307
309 field_name);
311 mesh_node_field_name);
312
314 lagrange_field_name);
316 field_name);
318 mesh_node_field_name);
319
321 lagrange_field_name);
322
323 if (eigen_pos_flag)
325 element_name, eigen_node_field_name);
326
328 field_name);
329
331 mesh_node_field_name);
332
333 setOfSimpleContactPrism[1].pRisms = range_slave_master_prisms;
334
335 Range ents_to_add = range_slave_master_prisms;
336 Range current_ents_with_fe;
338 current_ents_with_fe);
339 Range ents_to_remove;
340 ents_to_remove = subtract(current_ents_with_fe, ents_to_add);
342 ents_to_remove);
344 element_name);
345 }
346
348 }
virtual MoFEMErrorCode get_finite_element_entities_by_handle(const std::string name, Range &ents) const =0
get entities in the finite element by handle
virtual MoFEMErrorCode remove_ents_from_finite_element(const std::string name, const EntityHandle meshset, const EntityType type, int verb=DEFAULT_VERBOSITY)=0
remove entities from given refinement level to finite element database

◆ addPostProcContactElement()

MoFEMErrorCode SimpleContactProblem::addPostProcContactElement ( const string  element_name,
const string  spatial_field_name,
const string  lagrange_field_name,
const string  mesh_pos_field_name,
Range slave_tris 
)
inline

Function that adds a new finite element for contact post-processing.

Parameters
element_nameString for the element name
spatial_field_nameString of field name for spatial position
lagrange_field_nameString of field name for Lagrange multipliers
mesh_pos_field_nameString of field name for mesh node positions
range_slave_trisRange for slave triangles of contact elements
Returns
Error code

Definition at line 361 of file SimpleContact.hpp.

365 {
367
369
370 if (slave_tris.size() > 0) {
371
372 // C row as Lagrange_mul and col as SPATIAL_POSITION
374 lagrange_field_name);
375
377 spatial_field_name);
378
379 // CT col as Lagrange_mul and row as SPATIAL_POSITION
381 lagrange_field_name);
382
384 spatial_field_name);
385
386 // data
388 lagrange_field_name);
389
391 spatial_field_name);
392
394 mesh_pos_field_name);
395
396 // Adding slave_tris to Element element_name
398 element_name);
399 }
400
402 }

◆ ConstrainFunction()

double SimpleContactProblem::ConstrainFunction ( const double  cn,
const double  g,
const double  l 
)
inlinestatic

Definition at line 3587 of file SimpleContact.hpp.

3588 {
3589 if ((cn * g) <= l)
3590 return cn * g;
3591 else
3592 return l;
3593}
FTensor::Index< 'l', 3 > l
constexpr double g

◆ ConstrainFunction_dg()

double SimpleContactProblem::ConstrainFunction_dg ( const double  cn,
const double  g,
const double  l 
)
inlinestatic

Definition at line 3595 of file SimpleContact.hpp.

3597 {
3598 return cn * (1 + Sign(l - cn * g)) / static_cast<double>(2);
3599}
static double Sign(double x)

◆ ConstrainFunction_dl()

double SimpleContactProblem::ConstrainFunction_dl ( const double  cn,
const double  g,
const double  l 
)
inlinestatic

Definition at line 3601 of file SimpleContact.hpp.

3603 {
3604 return (1 + Sign(cn * g - l)) / static_cast<double>(2);
3605}

◆ setContactOperatorsForPostProc()

MoFEMErrorCode SimpleContactProblem::setContactOperatorsForPostProc ( boost::shared_ptr< SimpleContactElement fe_post_proc_simple_contact,
boost::shared_ptr< CommonDataSimpleContact common_data_simple_contact,
MoFEM::Interface m_field,
string  field_name,
string  lagrange_field_name,
moab::Interface &  moab_out,
bool  alm_flag = false,
bool  is_eigen_pos_field = false,
string  eigen_pos_field_name = "EIGEN_SPATIAL_POSITIONS",
bool  use_reference_coordinates = false,
StateTagSide  state_tag_side = NO_TAG 
)

Function for the simple contact element that sets the user data post processing operators.

Parameters
fe_post_proc_simple_contactPointer to the FE instance for post processing
common_data_simple_contactPointer to the common data for simple contact element
field_nameString of field name for spatial positions
lagrange_field_nameString of field name for Lagrange multipliers
moab_outMOAB interface used to output values at integration points
alm_flagbool flag to determine choice of approach between ALM or C function to solve frictionless problem
is_eigen_pos_fieldbool flag to determine choice of whether eigen displacements have to be taken into account
eigen_pos_field_nameString of field name for eigen spatial position
Returns
Error code

Definition at line 2772 of file SimpleContact.cpp.

2778 {
2780
2781 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2782 new OpGetNormalMasterALE("MESH_NODE_POSITIONS",
2783 common_data_simple_contact));
2784
2785 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2786 new OpGetNormalSlaveALE("MESH_NODE_POSITIONS",
2787 common_data_simple_contact));
2788
2789 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2790 new OpGetPositionAtGaussPtsMaster(field_name,
2791 common_data_simple_contact));
2792
2793 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2794 new OpGetPositionAtGaussPtsSlave(field_name, common_data_simple_contact));
2795
2796 if (is_eigen_pos_field) {
2797 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2798 new OpGetDeformationFieldForDisplAtGaussPtsMaster(
2799 eigen_pos_field_name, common_data_simple_contact));
2800
2801 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2802 new OpGetDeformationFieldForDisplAtGaussPtsSlave(
2803 eigen_pos_field_name, common_data_simple_contact));
2804 if (use_reference_coordinates) {
2805 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2806 new OpGetMatPosForDisplAtGaussPtsMaster("MESH_NODE_POSITIONS",
2807 common_data_simple_contact));
2808
2809 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2810 new OpGetMatPosForDisplAtGaussPtsSlave("MESH_NODE_POSITIONS",
2811 common_data_simple_contact));
2812 }
2813 }
2814
2815 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2816 new OpGetGapSlave(field_name, common_data_simple_contact));
2817
2818 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2819 new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
2820 common_data_simple_contact));
2821
2822 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2823 new OpLagGapProdGaussPtsSlave(lagrange_field_name,
2824 common_data_simple_contact));
2825
2826 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2827 new OpGetGaussPtsState(lagrange_field_name, common_data_simple_contact,
2828 cnValue, alm_flag));
2829
2830 fe_post_proc_simple_contact->getOpPtrVector().push_back(
2831 new OpMakeVtkSlave(m_field, field_name, common_data_simple_contact,
2832 moab_out, state_tag_side));
2833
2834 fe_post_proc_simple_contact->getOpPtrVector().push_back(new OpGetContactArea(
2835 lagrange_field_name, common_data_simple_contact, cnValue, alm_flag));
2836
2838}

◆ setContactOperatorsLhs() [1/2]

MoFEMErrorCode SimpleContactProblem::setContactOperatorsLhs ( boost::shared_ptr< ConvectMasterContactElement fe_lhs_simple_contact,
boost::shared_ptr< CommonDataSimpleContact common_data_simple_contact,
string  field_name,
string  lagrange_field_name,
bool  is_alm = false,
bool  is_eigen_pos_field = false,
string  eigen_pos_field_name = "EIGEN_SPATIAL_POSITIONS",
bool  use_reference_coordinates = false 
)

Function for the simple contact element for C function or ALM approach that sets the user data LHS-operators.

Parameters
fe_lhs_simple_contactPointer to the FE instance for LHS
common_data_simple_contactPointer to the common data for simple contact element
field_nameString of field name for spatial positions
lagrange_field_nameString of field name for Lagrange multipliers
is_almbool flag to determine choice of approach between ALM or C function to solve frictionless problem default is false
is_eigen_pos_fieldbool flag to determine choice of whether eigen displacements have to be taken into account
eigen_pos_field_nameString of field name for eigen spatial position
Returns
Error code
Note
This overloaded variant add additional operators for convected integration points.

Definition at line 2713 of file SimpleContact.cpp.

2718 {
2721 boost::dynamic_pointer_cast<SimpleContactElement>(fe_lhs_simple_contact),
2722 common_data_simple_contact, field_name, lagrange_field_name, is_alm,
2723 is_eigen_pos_field, eigen_pos_field_name);
2724
2725 fe_lhs_simple_contact->getOpPtrVector().push_back(
2726 new OpCalculateGradPositionXi(field_name, common_data_simple_contact));
2727
2728 fe_lhs_simple_contact->getOpPtrVector().push_back(
2729 new OpLhsConvectIntegrationPtsConstrainMasterGap(
2730 lagrange_field_name, field_name, common_data_simple_contact,
2731 cnValuePtr, ContactOp::FACESLAVESLAVE,
2732 fe_lhs_simple_contact->getConvectPtr()->getDiffKsiSpatialSlave()));
2733
2734 fe_lhs_simple_contact->getOpPtrVector().push_back(
2735 new OpLhsConvectIntegrationPtsConstrainMasterGap(
2736 lagrange_field_name, field_name, common_data_simple_contact,
2737 cnValuePtr, ContactOp::FACESLAVEMASTER,
2738 fe_lhs_simple_contact->getConvectPtr()->getDiffKsiSpatialMaster()));
2739
2741}
MoFEMErrorCode setContactOperatorsLhs(boost::shared_ptr< SimpleContactElement > fe_lhs_simple_contact, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, string field_name, string lagrange_field_name, bool is_alm=false, bool is_eigen_pos_field=false, string eigen_pos_field_name="EIGEN_SPATIAL_POSITIONS", bool use_reference_coordinates=false)
Function for the simple contact element for C function or ALM approach that sets the user data LHS-op...

◆ setContactOperatorsLhs() [2/2]

MoFEMErrorCode SimpleContactProblem::setContactOperatorsLhs ( boost::shared_ptr< SimpleContactElement fe_lhs_simple_contact,
boost::shared_ptr< CommonDataSimpleContact common_data_simple_contact,
string  field_name,
string  lagrange_field_name,
bool  is_alm = false,
bool  is_eigen_pos_field = false,
string  eigen_pos_field_name = "EIGEN_SPATIAL_POSITIONS",
bool  use_reference_coordinates = false 
)

Function for the simple contact element for C function or ALM approach that sets the user data LHS-operators.

Parameters
fe_lhs_simple_contactPointer to the FE instance for LHS
common_data_simple_contactPointer to the common data for simple contact element
field_nameString of field name for spatial positions
lagrange_field_nameString of field name for Lagrange multipliers
is_almbool flag to determine choice of approach between ALM or C function to solve frictionless problem default is false
is_eigen_pos_fieldbool flag to determine choice of whether eigen displacements have to be taken into account
eigen_pos_field_nameString of field name for eigen spatial position
Returns
Error code

Definition at line 2540 of file SimpleContact.cpp.

2545 {
2547
2548 fe_lhs_simple_contact->getOpPtrVector().push_back(
2549 new OpGetPositionAtGaussPtsMaster(field_name,
2550 common_data_simple_contact));
2551
2552 fe_lhs_simple_contact->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
2553 "MESH_NODE_POSITIONS", common_data_simple_contact));
2554
2555 fe_lhs_simple_contact->getOpPtrVector().push_back(new OpGetNormalMasterALE(
2556 "MESH_NODE_POSITIONS", common_data_simple_contact));
2557
2558 fe_lhs_simple_contact->getOpPtrVector().push_back(
2559 new OpGetPositionAtGaussPtsSlave(field_name, common_data_simple_contact));
2560
2561 if (is_eigen_pos_field) {
2562 fe_lhs_simple_contact->getOpPtrVector().push_back(
2563 new OpGetDeformationFieldForDisplAtGaussPtsMaster(
2564 eigen_pos_field_name, common_data_simple_contact));
2565
2566 fe_lhs_simple_contact->getOpPtrVector().push_back(
2567 new OpGetDeformationFieldForDisplAtGaussPtsSlave(
2568 eigen_pos_field_name, common_data_simple_contact));
2569
2570 if (use_reference_coordinates) {
2571 fe_lhs_simple_contact->getOpPtrVector().push_back(
2572 new OpGetMatPosForDisplAtGaussPtsMaster("MESH_NODE_POSITIONS",
2573 common_data_simple_contact));
2574
2575 fe_lhs_simple_contact->getOpPtrVector().push_back(
2576 new OpGetMatPosForDisplAtGaussPtsSlave("MESH_NODE_POSITIONS",
2577 common_data_simple_contact));
2578 }
2579 }
2580
2581 fe_lhs_simple_contact->getOpPtrVector().push_back(
2582 new OpGetGapSlave(field_name, common_data_simple_contact));
2583
2584 fe_lhs_simple_contact->getOpPtrVector().push_back(
2585 new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
2586 common_data_simple_contact));
2587 if (!is_alm) {
2588 fe_lhs_simple_contact->getOpPtrVector().push_back(
2589 new OpCalContactTractionOverLambdaSlaveSlave(
2590 field_name, lagrange_field_name, common_data_simple_contact));
2591
2592 fe_lhs_simple_contact->getOpPtrVector().push_back(
2593 new OpCalDerIntCompFunOverLambdaSlaveSlave(
2594 lagrange_field_name, common_data_simple_contact, cnValuePtr));
2595
2596 fe_lhs_simple_contact->getOpPtrVector().push_back(
2597 new OpCalDerIntCompFunOverSpatPosSlaveMaster(
2598 lagrange_field_name, field_name, common_data_simple_contact,
2599 cnValuePtr));
2600
2601 fe_lhs_simple_contact->getOpPtrVector().push_back(
2602 new OpCalDerIntCompFunOverSpatPosSlaveSlave(
2603 lagrange_field_name, field_name, common_data_simple_contact,
2604 cnValuePtr));
2605 } else {
2606 fe_lhs_simple_contact->getOpPtrVector().push_back(
2607 new OpGetAugmentedLambdaSlave(field_name, common_data_simple_contact,
2608 cnValue));
2609
2610 fe_lhs_simple_contact->getOpPtrVector().push_back(
2611 new OpCalContactAugmentedTractionOverLambdaSlaveSlave(
2612 field_name, lagrange_field_name, common_data_simple_contact));
2613
2614 fe_lhs_simple_contact->getOpPtrVector().push_back(
2615 new OpCalContactAugmentedTractionOverSpatialSlaveSlave(
2616 field_name, field_name, cnValue, common_data_simple_contact));
2617
2618 fe_lhs_simple_contact->getOpPtrVector().push_back(
2619 new OpCalContactAugmentedTractionOverSpatialSlaveMaster(
2620 field_name, field_name, cnValue, common_data_simple_contact));
2621
2622 fe_lhs_simple_contact->getOpPtrVector().push_back(
2623 new OpGapConstraintAugmentedOverLambda(
2624 lagrange_field_name, common_data_simple_contact, cnValue));
2625
2626 fe_lhs_simple_contact->getOpPtrVector().push_back(
2627 new OpGapConstraintAugmentedOverSpatialMaster(
2628 field_name, lagrange_field_name, common_data_simple_contact,
2629 cnValue));
2630
2631 fe_lhs_simple_contact->getOpPtrVector().push_back(
2632 new OpGapConstraintAugmentedOverSpatialSlave(
2633 field_name, lagrange_field_name, common_data_simple_contact,
2634 cnValue));
2635 }
2636
2638}

◆ setContactOperatorsLhsALE()

MoFEMErrorCode SimpleContactProblem::setContactOperatorsLhsALE ( boost::shared_ptr< SimpleContactElement fe_lhs_simple_contact_ale,
boost::shared_ptr< CommonDataSimpleContact common_data_simple_contact,
const string  field_name,
const string  mesh_node_field_name,
const string  lagrange_field_name,
bool  is_eigen_pos_field = false,
string  eigen_pos_field_name = "EIGEN_SPATIAL_POSITIONS" 
)

Function for the simple contact element that sets the user data LHS-operators.

Parameters
fe_lhs_simple_contact_alePointer to the FE instance for LHS
common_data_simple_contactPointer to the common data for simple contact element
field_nameString of field name for spatial positions
mesh_node_field_nameString of field name for material positions
lagrange_field_nameString of field name for Lagrange multipliers
Returns
Error code

Definition at line 4611 of file SimpleContact.cpp.

4616 {
4618
4619 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
4620 mesh_node_field_name, common_data_simple_contact));
4621
4622 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4623 new OpGetNormalMasterALE(mesh_node_field_name,
4624 common_data_simple_contact));
4625
4626 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4627 new OpGetPositionAtGaussPtsMaster(field_name,
4628 common_data_simple_contact));
4629
4630 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4631 new OpGetPositionAtGaussPtsSlave(field_name, common_data_simple_contact));
4632
4633 if (is_eigen_pos_field) {
4634 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4635 new OpGetDeformationFieldForDisplAtGaussPtsMaster(
4636 eigen_pos_field_name, common_data_simple_contact));
4637
4638 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4639 new OpGetDeformationFieldForDisplAtGaussPtsSlave(
4640 eigen_pos_field_name, common_data_simple_contact));
4641 }
4642
4643 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4644 new OpGetGapSlave(field_name, common_data_simple_contact));
4645
4646 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4647 new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
4648 common_data_simple_contact));
4649
4650 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4651 new OpContactTractionSlaveSlave_dX(field_name, mesh_node_field_name,
4652 common_data_simple_contact,
4654
4655 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4656 new OpContactTractionMasterSlave_dX(field_name, mesh_node_field_name,
4657 common_data_simple_contact,
4659
4660 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4661 new OpContactTractionMasterMaster_dX(field_name, mesh_node_field_name,
4662 common_data_simple_contact,
4664
4665 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4666 new OpCalDerIntCompFunSlaveSlave_dX(
4667 lagrange_field_name, mesh_node_field_name, cnValuePtr,
4668 common_data_simple_contact, LAGRANGE_RANK, POSITION_RANK));
4670}
static constexpr int POSITION_RANK
static constexpr int LAGRANGE_RANK

◆ setContactOperatorsLhsALEMaterial()

MoFEMErrorCode SimpleContactProblem::setContactOperatorsLhsALEMaterial ( boost::shared_ptr< SimpleContactElement fe_lhs_simple_contact_ale,
boost::shared_ptr< CommonDataSimpleContact common_data_simple_contact,
const string  field_name,
const string  mesh_node_field_name,
const string  lagrange_field_name,
const string  side_fe_name 
)

Function for the simple contact element that sets the user data LHS-operators.

Parameters
fe_lhs_simple_contact_alePointer to the FE instance for LHS
common_data_simple_contactPointer to the common data for simple contact element
field_nameString of field name for spatial positions
mesh_node_field_nameString of field name for material positions
lagrange_field_nameString of field name for Lagrange multipliers
side_fe_nameString of 3D element adjacent to the present contact element
Returns
Error code

Definition at line 4512 of file SimpleContact.cpp.

4516 {
4518
4519 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
4520 mesh_node_field_name, common_data_simple_contact));
4521
4522 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4523 new OpGetNormalMasterALE(mesh_node_field_name,
4524 common_data_simple_contact));
4525
4526 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4527 new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
4528 common_data_simple_contact));
4529
4530 boost::shared_ptr<VolumeElementForcesAndSourcesCoreOnContactPrismSide>
4531 feMatSideLhs_dx = boost::make_shared<
4533
4534 feMatSideLhs_dx->getOpPtrVector().push_back(
4536 mesh_node_field_name, common_data_simple_contact->HMat));
4537
4538 feMatSideLhs_dx->getOpPtrVector().push_back(
4540 field_name, common_data_simple_contact->hMat));
4541
4542 // // Master derivative over spatial
4543 feMatSideLhs_dx->getOpPtrVector().push_back(new OpCalculateDeformation(
4544 mesh_node_field_name, common_data_simple_contact, false));
4545
4546 feMatSideLhs_dx->getOpPtrVector().push_back(
4547 new OpContactMaterialVolOnSideLhs_dX_dX(
4548 mesh_node_field_name, mesh_node_field_name,
4549 common_data_simple_contact, true));
4550
4551 feMatSideLhs_dx->getOpPtrVector().push_back(
4552 new OpContactMaterialVolOnSideLhs_dX_dx(
4553 mesh_node_field_name, field_name, common_data_simple_contact, true));
4554
4555 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4556 new OpLoopForSideOfContactPrism(mesh_node_field_name, feMatSideLhs_dx,
4557 side_fe_name, ContactOp::FACEMASTER));
4558
4559 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4560 new OpContactMaterialMasterOnFaceLhs_dX_dX(
4561 mesh_node_field_name, mesh_node_field_name,
4562 common_data_simple_contact, POSITION_RANK, POSITION_RANK));
4563
4564 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4565 new OpContactMaterialMasterSlaveLhs_dX_dLagmult(
4566 mesh_node_field_name, lagrange_field_name, common_data_simple_contact,
4568
4569 boost::shared_ptr<VolumeElementForcesAndSourcesCoreOnContactPrismSide>
4570 feMatSideLhsSlave_dx = boost::make_shared<
4572
4573 feMatSideLhsSlave_dx->getOpPtrVector().push_back(
4575 mesh_node_field_name, common_data_simple_contact->HMat));
4576
4577 feMatSideLhsSlave_dx->getOpPtrVector().push_back(
4579 field_name, common_data_simple_contact->hMat));
4580
4581 feMatSideLhsSlave_dx->getOpPtrVector().push_back(new OpCalculateDeformation(
4582 mesh_node_field_name, common_data_simple_contact, false));
4583
4584 feMatSideLhsSlave_dx->getOpPtrVector().push_back(
4585 new OpContactMaterialVolOnSideLhs_dX_dX(
4586 mesh_node_field_name, mesh_node_field_name,
4587 common_data_simple_contact, false));
4588
4589 feMatSideLhsSlave_dx->getOpPtrVector().push_back(
4590 new OpContactMaterialVolOnSideLhs_dX_dx(
4591 mesh_node_field_name, field_name, common_data_simple_contact, false));
4592
4593 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4594 new OpLoopForSideOfContactPrism(mesh_node_field_name,
4595 feMatSideLhsSlave_dx, side_fe_name,
4596 ContactOp::FACESLAVE));
4597
4598 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4599 new OpContactMaterialSlaveOnFaceLhs_dX_dX(
4600 mesh_node_field_name, mesh_node_field_name,
4601 common_data_simple_contact, POSITION_RANK, POSITION_RANK));
4602
4603 fe_lhs_simple_contact_ale->getOpPtrVector().push_back(
4604 new OpContactMaterialSlaveSlaveLhs_dX_dLagmult(
4605 mesh_node_field_name, lagrange_field_name, common_data_simple_contact,
4607
4609}
boost::ptr_deque< UserDataOperator > & getOpPtrVector()
Use to push back operator for row operator.
Get field gradients at integration pts for scalar filed rank 0, i.e. vector field.
Base volume element used to integrate on contact surface (could be extended to other volume elements)...

◆ setContactOperatorsRhs()

MoFEMErrorCode SimpleContactProblem::setContactOperatorsRhs ( boost::shared_ptr< SimpleContactElement fe_rhs_simple_contact,
boost::shared_ptr< CommonDataSimpleContact common_data_simple_contact,
string  field_name,
string  lagrange_field_name,
bool  is_alm = false,
bool  is_eigen_pos_field = false,
string  eigen_pos_field_name = "EIGEN_SPATIAL_POSITIONS",
bool  use_reference_coordinates = false 
)

Function for the simple contact element for C function or ALM approach that sets the user data RHS-operators.

Parameters
fe_rhs_simple_contactPointer to the FE instance for RHS
common_data_simple_contactPointer to the common data for simple contact element
field_nameString of field name for spatial positions
lagrange_field_nameString of field name for Lagrange multipliers
is_almbool flag to determine choice of approach between ALM or C function to solve frictionless problem
is_eigen_pos_fieldbool flag to determine choice of whether eigen displacements have to be taken into account
eigen_pos_field_nameString of field name for eigen spatial position
Returns
Error code

Definition at line 2399 of file SimpleContact.cpp.

2404 {
2406
2407 fe_rhs_simple_contact->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
2408 "MESH_NODE_POSITIONS", common_data_simple_contact));
2409
2410 fe_rhs_simple_contact->getOpPtrVector().push_back(new OpGetNormalMasterALE(
2411 "MESH_NODE_POSITIONS", common_data_simple_contact));
2412
2413 fe_rhs_simple_contact->getOpPtrVector().push_back(
2414 new OpGetPositionAtGaussPtsMaster(field_name,
2415 common_data_simple_contact));
2416
2417 fe_rhs_simple_contact->getOpPtrVector().push_back(
2418 new OpGetPositionAtGaussPtsSlave(field_name, common_data_simple_contact));
2419
2420 if (is_eigen_pos_field) {
2421 fe_rhs_simple_contact->getOpPtrVector().push_back(
2422 new OpGetDeformationFieldForDisplAtGaussPtsMaster(
2423 eigen_pos_field_name, common_data_simple_contact));
2424
2425 fe_rhs_simple_contact->getOpPtrVector().push_back(
2426 new OpGetDeformationFieldForDisplAtGaussPtsSlave(
2427 eigen_pos_field_name, common_data_simple_contact));
2428 if (use_reference_coordinates) {
2429 fe_rhs_simple_contact->getOpPtrVector().push_back(
2430 new OpGetMatPosForDisplAtGaussPtsMaster("MESH_NODE_POSITIONS",
2431 common_data_simple_contact));
2432
2433 fe_rhs_simple_contact->getOpPtrVector().push_back(
2434 new OpGetMatPosForDisplAtGaussPtsSlave("MESH_NODE_POSITIONS",
2435 common_data_simple_contact));
2436 }
2437 }
2438
2439 fe_rhs_simple_contact->getOpPtrVector().push_back(
2440 new OpGetGapSlave(field_name, common_data_simple_contact));
2441
2442 fe_rhs_simple_contact->getOpPtrVector().push_back(
2443 new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
2444 common_data_simple_contact));
2445
2446 fe_rhs_simple_contact->getOpPtrVector().push_back(new OpGetGaussPtsState(
2447 lagrange_field_name, common_data_simple_contact, cnValue, is_alm));
2448
2449 if (!is_alm) {
2450 fe_rhs_simple_contact->getOpPtrVector().push_back(
2451 new OpCalContactTractionOnSlave(field_name,
2452 common_data_simple_contact));
2453
2454 fe_rhs_simple_contact->getOpPtrVector().push_back(new OpCalIntCompFunSlave(
2455 lagrange_field_name, common_data_simple_contact, cnValuePtr));
2456 } else {
2457 fe_rhs_simple_contact->getOpPtrVector().push_back(
2458 new OpGetAugmentedLambdaSlave(field_name, common_data_simple_contact,
2459 cnValue));
2460
2461 fe_rhs_simple_contact->getOpPtrVector().push_back(
2462 new OpCalAugmentedTractionRhsSlave(field_name,
2463 common_data_simple_contact));
2464
2465 fe_rhs_simple_contact->getOpPtrVector().push_back(
2466 new OpGapConstraintAugmentedRhs(lagrange_field_name,
2467 common_data_simple_contact, cnValue));
2468 }
2469
2471}

◆ setContactOperatorsRhsALEMaterial()

MoFEMErrorCode SimpleContactProblem::setContactOperatorsRhsALEMaterial ( boost::shared_ptr< SimpleContactElement fe_rhs_simple_contact_ale,
boost::shared_ptr< CommonDataSimpleContact common_data_simple_contact,
const string  field_name,
const string  mesh_node_field_name,
const string  lagrange_field_name,
const string  side_fe_name 
)

Function for the simple contact element that sets the user data post processing operators.

Parameters
fe_post_proc_simple_contactPointer to the FE instance for post processing
common_data_simple_contactPointer to the common data for simple contact element
field_nameString of field name for spatial positions
mesh_node_field_nameString of field name for material positions
lagrange_field_nameString of field name for Lagrange multipliers
side_fe_nameString of 3D element adjacent to the present contact element
Returns
Error code

Definition at line 4435 of file SimpleContact.cpp.

4439 {
4441
4442 boost::shared_ptr<VolumeElementForcesAndSourcesCoreOnContactPrismSide>
4443 fe_mat_side_rhs_master = boost::make_shared<
4445
4446 fe_mat_side_rhs_master->getOpPtrVector().push_back(
4448 mesh_node_field_name, common_data_simple_contact->HMat));
4449 fe_mat_side_rhs_master->getOpPtrVector().push_back(
4451 field_name, common_data_simple_contact->hMat));
4452
4453 boost::shared_ptr<VolumeElementForcesAndSourcesCoreOnContactPrismSide>
4454 fe_mat_side_rhs_slave = boost::make_shared<
4456
4457 fe_mat_side_rhs_slave->getOpPtrVector().push_back(
4459 mesh_node_field_name, common_data_simple_contact->HMat));
4460 fe_mat_side_rhs_slave->getOpPtrVector().push_back(
4462 field_name, common_data_simple_contact->hMat));
4463
4464 fe_rhs_simple_contact_ale->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
4465 "MESH_NODE_POSITIONS", common_data_simple_contact));
4466
4467 fe_rhs_simple_contact_ale->getOpPtrVector().push_back(
4468 new OpGetNormalMasterALE("MESH_NODE_POSITIONS",
4469 common_data_simple_contact));
4470
4471 // fe_rhs_simple_contact_ale->getOpPtrVector().push_back(
4472 // new OpGetPositionAtGaussPtsMaster(field_name,
4473 // common_data_simple_contact));
4474
4475 // fe_rhs_simple_contact_ale->getOpPtrVector().push_back(
4476 // new OpGetPositionAtGaussPtsSlave(field_name,
4477 // common_data_simple_contact));
4478
4479 // fe_rhs_simple_contact_ale->getOpPtrVector().push_back(
4480 // new OpGetGapSlave(field_name, common_data_simple_contact));
4481
4482 fe_rhs_simple_contact_ale->getOpPtrVector().push_back(
4483 new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
4484 common_data_simple_contact));
4485
4486 fe_mat_side_rhs_master->getOpPtrVector().push_back(new OpCalculateDeformation(
4487 mesh_node_field_name, common_data_simple_contact, false));
4488
4489 fe_rhs_simple_contact_ale->getOpPtrVector().push_back(
4490 new OpLoopForSideOfContactPrism(mesh_node_field_name,
4491 fe_mat_side_rhs_master, side_fe_name,
4492 ContactOp::FACEMASTER));
4493
4494 fe_rhs_simple_contact_ale->getOpPtrVector().push_back(
4495 new OpCalMatForcesALEMaster(mesh_node_field_name,
4496 common_data_simple_contact));
4497
4498 fe_mat_side_rhs_slave->getOpPtrVector().push_back(new OpCalculateDeformation(
4499 mesh_node_field_name, common_data_simple_contact, false));
4500
4501 fe_rhs_simple_contact_ale->getOpPtrVector().push_back(
4502 new OpLoopForSideOfContactPrism(mesh_node_field_name,
4503 fe_mat_side_rhs_slave, side_fe_name,
4504 ContactOp::FACESLAVE));
4505
4506 fe_rhs_simple_contact_ale->getOpPtrVector().push_back(
4507 new OpCalMatForcesALESlave(mesh_node_field_name,
4508 common_data_simple_contact));
4510}

◆ setMasterForceOperatorsLhs() [1/2]

MoFEMErrorCode SimpleContactProblem::setMasterForceOperatorsLhs ( boost::shared_ptr< ConvectSlaveContactElement fe_lhs_simple_contact,
boost::shared_ptr< CommonDataSimpleContact common_data_simple_contact,
string  field_name,
string  lagrange_field_name,
bool  is_alm = false,
bool  is_eigen_pos_field = false,
string  eigen_pos_field_name = "EIGEN_SPATIAL_POSITIONS",
bool  use_reference_coordinates = false 
)

Definition at line 2743 of file SimpleContact.cpp.

2748 {
2750
2752 boost::dynamic_pointer_cast<SimpleContactElement>(fe_lhs_simple_contact),
2753 common_data_simple_contact, field_name, lagrange_field_name);
2754
2755 fe_lhs_simple_contact->getOpPtrVector().push_back(new OpCalculateGradLambdaXi(
2756 lagrange_field_name, common_data_simple_contact));
2757
2758 fe_lhs_simple_contact->getOpPtrVector().push_back(
2759 new OpLhsConvectIntegrationPtsContactTraction(
2760 field_name, field_name, common_data_simple_contact,
2761 ContactOp::FACEMASTERSLAVE,
2762 fe_lhs_simple_contact->getConvectPtr()->getDiffKsiSpatialSlave()));
2763
2764 fe_lhs_simple_contact->getOpPtrVector().push_back(
2765 new OpLhsConvectIntegrationPtsContactTraction(
2766 field_name, field_name, common_data_simple_contact,
2767 ContactOp::FACEMASTERMASTER,
2768 fe_lhs_simple_contact->getConvectPtr()->getDiffKsiSpatialMaster()));
2770}
MoFEMErrorCode setMasterForceOperatorsLhs(boost::shared_ptr< SimpleContactElement > fe_lhs_simple_contact, boost::shared_ptr< CommonDataSimpleContact > common_data_simple_contact, string field_name, string lagrange_field_name, bool is_alm=false, bool is_eigen_pos_field=false, string eigen_pos_field_name="EIGEN_SPATIAL_POSITIONS", bool use_reference_coordinates=false)

◆ setMasterForceOperatorsLhs() [2/2]

MoFEMErrorCode SimpleContactProblem::setMasterForceOperatorsLhs ( boost::shared_ptr< SimpleContactElement fe_lhs_simple_contact,
boost::shared_ptr< CommonDataSimpleContact common_data_simple_contact,
string  field_name,
string  lagrange_field_name,
bool  is_alm = false,
bool  is_eigen_pos_field = false,
string  eigen_pos_field_name = "EIGEN_SPATIAL_POSITIONS",
bool  use_reference_coordinates = false 
)

Definition at line 2640 of file SimpleContact.cpp.

2645 {
2647
2648 fe_lhs_simple_contact->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
2649 "MESH_NODE_POSITIONS", common_data_simple_contact));
2650
2651 fe_lhs_simple_contact->getOpPtrVector().push_back(new OpGetNormalMasterALE(
2652 "MESH_NODE_POSITIONS", common_data_simple_contact));
2653
2654 fe_lhs_simple_contact->getOpPtrVector().push_back(
2655 new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
2656 common_data_simple_contact));
2657 if (!is_alm) {
2658 fe_lhs_simple_contact->getOpPtrVector().push_back(
2659 new OpCalContactTractionOverLambdaMasterSlave(
2660 field_name, lagrange_field_name, common_data_simple_contact));
2661 } else {
2662
2663 fe_lhs_simple_contact->getOpPtrVector().push_back(
2664 new OpGetPositionAtGaussPtsMaster(field_name,
2665 common_data_simple_contact));
2666
2667 fe_lhs_simple_contact->getOpPtrVector().push_back(
2668 new OpGetPositionAtGaussPtsSlave(field_name,
2669 common_data_simple_contact));
2670
2671 if (is_eigen_pos_field) {
2672 fe_lhs_simple_contact->getOpPtrVector().push_back(
2673 new OpGetDeformationFieldForDisplAtGaussPtsMaster(
2674 eigen_pos_field_name, common_data_simple_contact));
2675
2676 fe_lhs_simple_contact->getOpPtrVector().push_back(
2677 new OpGetDeformationFieldForDisplAtGaussPtsSlave(
2678 eigen_pos_field_name, common_data_simple_contact));
2679 if (use_reference_coordinates) {
2680 fe_lhs_simple_contact->getOpPtrVector().push_back(
2681 new OpGetMatPosForDisplAtGaussPtsMaster(
2682 "MESH_NODE_POSITIONS", common_data_simple_contact));
2683
2684 fe_lhs_simple_contact->getOpPtrVector().push_back(
2685 new OpGetMatPosForDisplAtGaussPtsSlave("MESH_NODE_POSITIONS",
2686 common_data_simple_contact));
2687 }
2688 }
2689
2690 fe_lhs_simple_contact->getOpPtrVector().push_back(
2691 new OpGetGapSlave(field_name, common_data_simple_contact));
2692
2693 fe_lhs_simple_contact->getOpPtrVector().push_back(
2694 new OpGetAugmentedLambdaSlave(field_name, common_data_simple_contact,
2695 cnValue));
2696
2697 fe_lhs_simple_contact->getOpPtrVector().push_back(
2698 new OpCalContactAugmentedTractionOverLambdaMasterSlave(
2699 field_name, lagrange_field_name, common_data_simple_contact));
2700
2701 fe_lhs_simple_contact->getOpPtrVector().push_back(
2702 new OpCalContactAugmentedTractionOverSpatialMasterMaster(
2703 field_name, field_name, cnValue, common_data_simple_contact));
2704
2705 fe_lhs_simple_contact->getOpPtrVector().push_back(
2706 new OpCalContactAugmentedTractionOverSpatialMasterSlave(
2707 field_name, field_name, cnValue, common_data_simple_contact));
2708 }
2709
2711}

◆ setMasterForceOperatorsRhs()

MoFEMErrorCode SimpleContactProblem::setMasterForceOperatorsRhs ( boost::shared_ptr< SimpleContactElement fe_lhs_simple_contact,
boost::shared_ptr< CommonDataSimpleContact common_data_simple_contact,
string  field_name,
string  lagrange_field_name,
bool  is_alm = false,
bool  is_eigen_pos_field = false,
string  eigen_pos_field_name = "EIGEN_SPATIAL_POSITIONS",
bool  use_reference_coordinates = false 
)

Definition at line 2473 of file SimpleContact.cpp.

2478 {
2480
2481 fe_rhs_simple_contact->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
2482 "MESH_NODE_POSITIONS", common_data_simple_contact));
2483
2484 fe_rhs_simple_contact->getOpPtrVector().push_back(new OpGetNormalMasterALE(
2485 "MESH_NODE_POSITIONS", common_data_simple_contact));
2486
2487 fe_rhs_simple_contact->getOpPtrVector().push_back(
2488 new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
2489 common_data_simple_contact));
2490
2491 if (!is_alm) {
2492 fe_rhs_simple_contact->getOpPtrVector().push_back(
2493 new OpCalContactTractionOnMaster(field_name,
2494 common_data_simple_contact));
2495 } else {
2496
2497 fe_rhs_simple_contact->getOpPtrVector().push_back(
2498 new OpGetPositionAtGaussPtsMaster(field_name,
2499 common_data_simple_contact));
2500
2501 fe_rhs_simple_contact->getOpPtrVector().push_back(
2502 new OpGetPositionAtGaussPtsSlave(field_name,
2503 common_data_simple_contact));
2504
2505 if (is_eigen_pos_field) {
2506 fe_rhs_simple_contact->getOpPtrVector().push_back(
2507 new OpGetDeformationFieldForDisplAtGaussPtsMaster(
2508 eigen_pos_field_name, common_data_simple_contact));
2509
2510 fe_rhs_simple_contact->getOpPtrVector().push_back(
2511 new OpGetDeformationFieldForDisplAtGaussPtsSlave(
2512 eigen_pos_field_name, common_data_simple_contact));
2513
2514 if (use_reference_coordinates) {
2515 fe_rhs_simple_contact->getOpPtrVector().push_back(
2516 new OpGetMatPosForDisplAtGaussPtsMaster(
2517 "MESH_NODE_POSITIONS", common_data_simple_contact));
2518
2519 fe_rhs_simple_contact->getOpPtrVector().push_back(
2520 new OpGetMatPosForDisplAtGaussPtsSlave("MESH_NODE_POSITIONS",
2521 common_data_simple_contact));
2522 }
2523 }
2524
2525 fe_rhs_simple_contact->getOpPtrVector().push_back(
2526 new OpGetGapSlave(field_name, common_data_simple_contact));
2527
2528 fe_rhs_simple_contact->getOpPtrVector().push_back(
2529 new OpGetAugmentedLambdaSlave(field_name, common_data_simple_contact,
2530 cnValue));
2531
2532 fe_rhs_simple_contact->getOpPtrVector().push_back(
2533 new OpCalAugmentedTractionRhsMaster(field_name,
2534 common_data_simple_contact));
2535 }
2536
2538}

◆ Sign()

double SimpleContactProblem::Sign ( double  x)
inlinestatic

Definition at line 3568 of file SimpleContact.hpp.

3568 {
3569 if (x == 0)
3570 return 0;
3571 else if (x > 0)
3572 return 1;
3573 else
3574 return -1;
3575};

◆ State()

bool SimpleContactProblem::State ( const double  cn,
const double  g,
const double  l 
)
inlinestatic

Definition at line 3577 of file SimpleContact.hpp.

3578 {
3579 return ((cn * g) <= l);
3580}

◆ StateALM()

bool SimpleContactProblem::StateALM ( const double  cn,
const double  g,
const double  l 
)
inlinestatic

Definition at line 3582 of file SimpleContact.hpp.

3583 {
3584 return ((l + cn * g) < 0. || abs(l + cn * g) < ALM_TOL);
3585}
static constexpr double ALM_TOL

Member Data Documentation

◆ ALM_TOL

constexpr double SimpleContactProblem::ALM_TOL = 1e-14
staticconstexpr

Definition at line 65 of file SimpleContact.hpp.

◆ cnValue

double SimpleContactProblem::cnValue

Definition at line 482 of file SimpleContact.hpp.

◆ cnValuePtr

boost::shared_ptr<double> SimpleContactProblem::cnValuePtr

Definition at line 484 of file SimpleContact.hpp.

◆ Computes

brief SimpleContactProblem::Computes

Definition at line 2643 of file SimpleContact.hpp.

◆ configuration

brief for material SimpleContactProblem::configuration

Definition at line 2643 of file SimpleContact.hpp.

◆ LAGRANGE_RANK

constexpr int SimpleContactProblem::LAGRANGE_RANK = 1
staticconstexpr

Definition at line 62 of file SimpleContact.hpp.

◆ mField

MoFEM::Interface& SimpleContactProblem::mField

Definition at line 485 of file SimpleContact.hpp.

◆ newtonCotes

bool SimpleContactProblem::newtonCotes

Definition at line 483 of file SimpleContact.hpp.

◆ POSITION_RANK

constexpr int SimpleContactProblem::POSITION_RANK = 3
staticconstexpr

Definition at line 63 of file SimpleContact.hpp.

◆ setOfSimpleContactPrism

map<int, SimpleContactPrismsData> SimpleContactProblem::setOfSimpleContactPrism

maps side set id with appropriate FluxData

Definition at line 72 of file SimpleContact.hpp.

◆ TOL

constexpr double SimpleContactProblem::TOL = 1e-8
staticconstexpr

Definition at line 61 of file SimpleContact.hpp.


The documentation for this struct was generated from the following files: