v0.14.0
Classes | Public Types | Public Member Functions | Public Attributes | List of all members
MortarContactProblem Struct Reference

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

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

Classes

struct  CommonDataMortarContact
 
struct  LoadScale
 
struct  MortarContactElement
 
struct  MortarContactPrismsData
 
struct  MortarConvectMasterContactElement
 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  MortarConvectSlaveContactElement
 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...
 

Public Types

using ContactOp = ContactPrismElementForcesAndSourcesCore::UserDataOperator
 
- Public Types inherited from SimpleContactProblem
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 addMortarContactElement (const string element_name, const string field_name, const string lagrange_field_name, Range &range_slave_master_prisms, string material_position_field_name="MESH_NODE_POSITIONS", bool eigen_pos_flag=false, const string eigen_node_field_name="EIGEN_SPATIAL_POSITIONS")
 
MoFEMErrorCode addMortarContactElementALE (const string element_name, const string field_name, const string mesh_node_field_name, const string lagrange_field_name, Range &range_slave_master_prisms)
 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 addMortarContactFrictionElement (const string element_name, const string field_name, const string lagrange_field_name, const string prev_conv_field_name, const string tangent_lagrange_field_name, Range &range_slave_master_prisms, string material_position_field_name="MESH_NODE_POSITIONS")
 
 MortarContactProblem (MoFEM::Interface &m_field, boost::shared_ptr< ContactSearchKdTree::ContactCommonData_multiIndex > contact_commondata_multi_index, boost::shared_ptr< double > cn_value_ptr, bool newton_cotes=false)
 
MoFEMErrorCode setContactOperatorsRhs (boost::shared_ptr< MortarContactElement > fe_rhs_mortar_contact, boost::shared_ptr< CommonDataMortarContact > common_data_mortar_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 setMasterForceOperatorsRhs (boost::shared_ptr< MortarContactElement > fe_rhs_mortar_contact, boost::shared_ptr< CommonDataMortarContact > common_data_mortar_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 setContactOperatorsLhs (boost::shared_ptr< MortarContactElement > fe_lhs_mortar_contact, boost::shared_ptr< CommonDataMortarContact > common_data_mortar_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 setContactOperatorsLhs (boost::shared_ptr< MortarConvectMasterContactElement > fe_lhs_simple_contact, boost::shared_ptr< CommonDataMortarContact > 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< MortarContactElement > fe_lhs_mortar_contact, boost::shared_ptr< CommonDataMortarContact > common_data_mortar_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< MortarConvectSlaveContactElement > fe_lhs_mortar_contact, boost::shared_ptr< CommonDataMortarContact > common_data_mortar_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< MortarContactElement > fe_post_proc_mortar_contact, boost::shared_ptr< CommonDataMortarContact > common_data_mortar_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 is_displacements=false, Range post_proc_surface=Range(), double post_proc_gap_tol=0.0)
 
MoFEMErrorCode setContactOperatorsRhsALEMaterial (boost::shared_ptr< MortarContactElement > fe_rhs_simple_contact_ale, boost::shared_ptr< CommonDataMortarContact > 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 mortar contact element that sets the user data post processing operators. More...
 
MoFEMErrorCode setContactOperatorsLhsALEMaterial (boost::shared_ptr< MortarContactElement > fe_lhs_simple_contact_ale, boost::shared_ptr< CommonDataMortarContact > 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 mortar contact element that sets the user data LHS-operators. More...
 
MoFEMErrorCode setContactOperatorsLhsALE (boost::shared_ptr< MortarContactElement > fe_lhs_simple_contact_ale, boost::shared_ptr< CommonDataMortarContact > common_data_simple_contact, const string field_name, const string mesh_node_field_name, const string lagrange_field_name)
 Function for the mortar contact element that sets the user data LHS-operators. More...
 
- Public Member Functions inherited from SimpleContactProblem
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...
 

Public Attributes

map< int, MortarContactPrismsDatasetOfMortarContactPrism
 maps side set id with appropriate FluxData More...
 
double cnValue
 
boost::shared_ptr< doublecnValuePtr
 
MoFEM::InterfacemField
 
boost::shared_ptr< ContactSearchKdTree::ContactCommonData_multiIndexcontactCommondataMultiIndex
 
bool newtonCotes
 
- Public Attributes inherited from SimpleContactProblem
map< int, SimpleContactPrismsDatasetOfSimpleContactPrism
 maps side set id with appropriate FluxData More...
 
double cnValue
 
bool newtonCotes
 
boost::shared_ptr< doublecnValuePtr
 
MoFEM::InterfacemField
 

Additional Inherited Members

- Static Public Member Functions inherited from SimpleContactProblem
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)
 
- Static Public Attributes inherited from SimpleContactProblem
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

Definition at line 18 of file MortarContactProblem.hpp.

Member Typedef Documentation

◆ ContactOp

Definition at line 20 of file MortarContactProblem.hpp.

Constructor & Destructor Documentation

◆ MortarContactProblem()

MortarContactProblem::MortarContactProblem ( MoFEM::Interface m_field,
boost::shared_ptr< ContactSearchKdTree::ContactCommonData_multiIndex contact_commondata_multi_index,
boost::shared_ptr< double cn_value_ptr,
bool  newton_cotes = false 
)
inline

Definition at line 264 of file MortarContactProblem.hpp.

269  : SimpleContactProblem(m_field, cn_value_ptr, newton_cotes),
270  mField(m_field),
271  contactCommondataMultiIndex(contact_commondata_multi_index),
272  cnValuePtr(cn_value_ptr), newtonCotes(newton_cotes) {
273  cnValue = *cnValuePtr.get();
274  }

Member Function Documentation

◆ addMortarContactElement()

MoFEMErrorCode MortarContactProblem::addMortarContactElement ( const string  element_name,
const string  field_name,
const string  lagrange_field_name,
Range range_slave_master_prisms,
string  material_position_field_name = "MESH_NODE_POSITIONS",
bool  eigen_pos_flag = false,
const string  eigen_node_field_name = "EIGEN_SPATIAL_POSITIONS" 
)
inline

Definition at line 93 of file MortarContactProblem.hpp.

98  {
100 
101  CHKERR mField.add_finite_element(element_name, MF_ZERO);
102 
103  if (range_slave_master_prisms.size() > 0) {
104 
106  lagrange_field_name);
107 
109  field_name);
110 
112  lagrange_field_name);
114  field_name);
115 
117  lagrange_field_name);
118 
120  field_name);
121 
122  if (eigen_pos_flag)
124  element_name, eigen_node_field_name);
125 
126  CHKERR
128  "MESH_NODE_POSITIONS");
129 
130  setOfMortarContactPrism[1].pRisms = range_slave_master_prisms;
131 
132  // Adding range_slave_master_prisms to Element element_name
133  mField.add_ents_to_finite_element_by_type(range_slave_master_prisms,
134  MBPRISM, element_name);
135  }
136 
138  }

◆ addMortarContactElementALE()

MoFEMErrorCode MortarContactProblem::addMortarContactElementALE ( const string  element_name,
const string  field_name,
const string  mesh_node_field_name,
const string  lagrange_field_name,
Range range_slave_master_prisms 
)
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 157 of file MortarContactProblem.hpp.

161  {
163 
164  CHKERR mField.add_finite_element(element_name, MF_ZERO);
165 
166  if (range_slave_master_prisms.size() > 0) {
167 
169  lagrange_field_name);
170 
172  field_name);
174  mesh_node_field_name);
175 
177  lagrange_field_name);
179  field_name);
181  mesh_node_field_name);
182 
184  lagrange_field_name);
185 
187  field_name);
188 
190  mesh_node_field_name);
191 
192  setOfSimpleContactPrism[1].pRisms = range_slave_master_prisms;
193 
194  Range ents_to_add = range_slave_master_prisms;
195  Range current_ents_with_fe;
197  current_ents_with_fe);
198  Range ents_to_remove;
199  ents_to_remove = subtract(current_ents_with_fe, ents_to_add);
201  ents_to_remove);
202  CHKERR mField.add_ents_to_finite_element_by_type(ents_to_add, MBPRISM,
203  element_name);
204  }
205 
207  }

◆ addMortarContactFrictionElement()

MoFEMErrorCode MortarContactProblem::addMortarContactFrictionElement ( const string  element_name,
const string  field_name,
const string  lagrange_field_name,
const string  prev_conv_field_name,
const string  tangent_lagrange_field_name,
Range range_slave_master_prisms,
string  material_position_field_name = "MESH_NODE_POSITIONS" 
)
inline

Definition at line 209 of file MortarContactProblem.hpp.

214  {
216 
217  CHKERR mField.add_finite_element(element_name, MF_ZERO);
218 
219  //============================================================================================================
220  // C row as Lagrange_mul and col as DISPLACEMENT
221 
223  lagrange_field_name);
224 
226 
227  // CT col as Lagrange_mul and row as DISPLACEMENT
228 
230  lagrange_field_name);
231 
233 
234  // data
236  lagrange_field_name);
237 
239  field_name);
240 
241  CHKERR
243  "MESH_NODE_POSITIONS");
244 
245  CHKERR
247  prev_conv_field_name);
248 
249  setOfMortarContactPrism[1].pRisms = range_slave_master_prisms;
250  mField.add_ents_to_finite_element_by_type(range_slave_master_prisms,
251  MBPRISM, element_name);
252 
254  }

◆ setContactOperatorsForPostProc()

MoFEMErrorCode MortarContactProblem::setContactOperatorsForPostProc ( boost::shared_ptr< MortarContactElement fe_post_proc_mortar_contact,
boost::shared_ptr< CommonDataMortarContact common_data_mortar_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  is_displacements = false,
Range  post_proc_surface = Range(),
double  post_proc_gap_tol = 0.0 
)

Definition at line 761 of file MortarContactProblem.cpp.

767  {
769 
770  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
771  new OpGetNormalMasterALE("MESH_NODE_POSITIONS",
772  common_data_mortar_contact));
773 
774  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
775  new OpGetNormalSlaveALE("MESH_NODE_POSITIONS",
776  common_data_mortar_contact));
777 
778  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
779  new OpGetPositionAtGaussPtsMaster(field_name,
780  common_data_mortar_contact));
781 
782  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
783  new OpGetPositionAtGaussPtsSlave(field_name, common_data_mortar_contact));
784 
785  if (is_eigen_pos_field) {
786  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
787  new OpGetDeformationFieldForDisplAtGaussPtsMaster(
788  eigen_pos_field_name, common_data_mortar_contact));
789 
790  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
791  new OpGetMatPosForDisplAtGaussPtsMaster("MESH_NODE_POSITIONS",
792  common_data_mortar_contact));
793 
794  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
795  new OpGetMatPosForDisplAtGaussPtsSlave("MESH_NODE_POSITIONS",
796  common_data_mortar_contact));
797 
798  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
799  new OpGetDeformationFieldForDisplAtGaussPtsSlave(
800  eigen_pos_field_name, common_data_mortar_contact));
801  }
802 
803  if (is_displacements && !is_eigen_pos_field) {
804  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
805  new OpGetDeformationFieldForDisplAtGaussPtsMaster(
806  "MESH_NODE_POSITIONS", common_data_mortar_contact));
807 
808  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
809  new OpGetDeformationFieldForDisplAtGaussPtsSlave(
810  "MESH_NODE_POSITIONS", common_data_mortar_contact));
811  }
812  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
813  new OpGetGapSlave(field_name, common_data_mortar_contact));
814 
815  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
816  new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
817  common_data_mortar_contact));
818 
819  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
820  new OpLagGapProdGaussPtsSlave(lagrange_field_name,
821  common_data_mortar_contact));
822 
823  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
824  new OpGetGaussPtsState(lagrange_field_name, common_data_mortar_contact,
825  cnValue, alm_flag));
826 
827  fe_post_proc_mortar_contact->getOpPtrVector().push_back(
828  new OpMakeVtkSlave(m_field, field_name, common_data_mortar_contact,
829  moab_out, NO_TAG, post_proc_surface));
830 
831  fe_post_proc_mortar_contact->getOpPtrVector().push_back(new OpGetContactArea(
832  lagrange_field_name, common_data_mortar_contact, cnValue, alm_flag,
833  post_proc_surface, post_proc_gap_tol));
834 
836 }

◆ setContactOperatorsLhs() [1/2]

MoFEMErrorCode MortarContactProblem::setContactOperatorsLhs ( boost::shared_ptr< MortarContactElement fe_lhs_mortar_contact,
boost::shared_ptr< CommonDataMortarContact common_data_mortar_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 506 of file MortarContactProblem.cpp.

511  {
513 
514  fe_lhs_mortar_contact->getOpPtrVector().push_back(
515  new OpGetPositionAtGaussPtsMaster(field_name,
516  common_data_mortar_contact));
517 
518  fe_lhs_mortar_contact->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
519  "MESH_NODE_POSITIONS", common_data_mortar_contact));
520 
521  fe_lhs_mortar_contact->getOpPtrVector().push_back(new OpGetNormalMasterALE(
522  "MESH_NODE_POSITIONS", common_data_mortar_contact));
523 
524  fe_lhs_mortar_contact->getOpPtrVector().push_back(
525  new OpGetPositionAtGaussPtsSlave(field_name, common_data_mortar_contact));
526 
527  if (is_eigen_pos_field) {
528  fe_lhs_mortar_contact->getOpPtrVector().push_back(
529  new OpGetDeformationFieldForDisplAtGaussPtsMaster(
530  eigen_pos_field_name, common_data_mortar_contact));
531 
532  fe_lhs_mortar_contact->getOpPtrVector().push_back(
533  new OpGetMatPosForDisplAtGaussPtsMaster("MESH_NODE_POSITIONS",
534  common_data_mortar_contact));
535 
536  fe_lhs_mortar_contact->getOpPtrVector().push_back(
537  new OpGetMatPosForDisplAtGaussPtsSlave("MESH_NODE_POSITIONS",
538  common_data_mortar_contact));
539 
540  fe_lhs_mortar_contact->getOpPtrVector().push_back(
541  new OpGetDeformationFieldForDisplAtGaussPtsSlave(
542  eigen_pos_field_name, common_data_mortar_contact));
543  }
544 
545  if (use_reference_coordinates) {
546  fe_lhs_mortar_contact->getOpPtrVector().push_back(
547  new OpGetDeformationFieldForDisplAtGaussPtsMaster(
548  "MESH_NODE_POSITIONS", common_data_mortar_contact));
549 
550  fe_lhs_mortar_contact->getOpPtrVector().push_back(
551  new OpGetDeformationFieldForDisplAtGaussPtsSlave(
552  "MESH_NODE_POSITIONS", common_data_mortar_contact));
553  }
554 
555  fe_lhs_mortar_contact->getOpPtrVector().push_back(
556  new OpGetGapSlave(field_name, common_data_mortar_contact));
557 
558  fe_lhs_mortar_contact->getOpPtrVector().push_back(
559  new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
560  common_data_mortar_contact));
561  if (!is_alm) {
562  fe_lhs_mortar_contact->getOpPtrVector().push_back(
563  new OpCalContactTractionOverLambdaSlaveSlave(
564  field_name, lagrange_field_name, common_data_mortar_contact));
565 
566  fe_lhs_mortar_contact->getOpPtrVector().push_back(
567  new OpCalDerIntCompFunOverLambdaSlaveSlave(
568  lagrange_field_name, common_data_mortar_contact, cnValuePtr));
569 
570  fe_lhs_mortar_contact->getOpPtrVector().push_back(
571  new OpCalDerIntCompFunOverSpatPosSlaveMaster(
572  lagrange_field_name, field_name, common_data_mortar_contact,
573  cnValuePtr));
574 
575  fe_lhs_mortar_contact->getOpPtrVector().push_back(
576  new OpCalDerIntCompFunOverSpatPosSlaveSlave(
577  lagrange_field_name, field_name, common_data_mortar_contact,
578  cnValuePtr));
579  } else {
580  fe_lhs_mortar_contact->getOpPtrVector().push_back(
581  new OpGetAugmentedLambdaSlave(field_name, common_data_mortar_contact,
582  cnValue));
583 
584  fe_lhs_mortar_contact->getOpPtrVector().push_back(
585  new OpCalContactAugmentedTractionOverLambdaSlaveSlave(
586  field_name, lagrange_field_name, common_data_mortar_contact));
587 
588  fe_lhs_mortar_contact->getOpPtrVector().push_back(
589  new OpCalContactAugmentedTractionOverSpatialSlaveSlave(
590  field_name, field_name, cnValue, common_data_mortar_contact));
591 
592  fe_lhs_mortar_contact->getOpPtrVector().push_back(
593  new OpCalContactAugmentedTractionOverSpatialSlaveMaster(
594  field_name, field_name, cnValue, common_data_mortar_contact));
595 
596  fe_lhs_mortar_contact->getOpPtrVector().push_back(
597  new OpGapConstraintAugmentedOverLambda(
598  lagrange_field_name, common_data_mortar_contact, cnValue));
599 
600  fe_lhs_mortar_contact->getOpPtrVector().push_back(
601  new OpGapConstraintAugmentedOverSpatialMaster(
602  field_name, lagrange_field_name, common_data_mortar_contact,
603  cnValue));
604 
605  fe_lhs_mortar_contact->getOpPtrVector().push_back(
606  new OpGapConstraintAugmentedOverSpatialSlave(
607  field_name, lagrange_field_name, common_data_mortar_contact,
608  cnValue));
609  }
611 }

◆ setContactOperatorsLhs() [2/2]

MoFEMErrorCode MortarContactProblem::setContactOperatorsLhs ( boost::shared_ptr< MortarConvectMasterContactElement fe_lhs_simple_contact,
boost::shared_ptr< CommonDataMortarContact 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 613 of file MortarContactProblem.cpp.

618  {
620 
622  boost::dynamic_pointer_cast<MortarContactElement>(fe_lhs_mortar_contact),
623  common_data_mortar_contact, field_name, lagrange_field_name, is_alm,
624  is_eigen_pos_field, eigen_pos_field_name, use_reference_coordinates);
625 
626  // CHKERR setContactOperatorsLhs(
627  // boost::dynamic_pointer_cast<MortarContactElement>(
628  // fe_lhs_mortar_contact),
629  // common_data_mortar_contact, field_name, lagrange_field_name);
630 
631  fe_lhs_mortar_contact->getOpPtrVector().push_back(
632  new OpCalculateGradPositionXi(field_name, common_data_mortar_contact));
633 
634  fe_lhs_mortar_contact->getOpPtrVector().push_back(
635  new OpLhsConvectIntegrationPtsConstrainMasterGap(
636  lagrange_field_name, field_name, common_data_mortar_contact,
637  cnValuePtr, ContactOp::FACESLAVESLAVE,
638  fe_lhs_mortar_contact->getConvectPtr()->getDiffKsiSpatialSlave()));
639 
640  fe_lhs_mortar_contact->getOpPtrVector().push_back(
641  new OpLhsConvectIntegrationPtsConstrainMasterGap(
642  lagrange_field_name, field_name, common_data_mortar_contact,
643  cnValuePtr, ContactOp::FACESLAVEMASTER,
644  fe_lhs_mortar_contact->getConvectPtr()->getDiffKsiSpatialMaster()));
645 
647 }

◆ setContactOperatorsLhsALE()

MoFEMErrorCode MortarContactProblem::setContactOperatorsLhsALE ( boost::shared_ptr< MortarContactElement fe_lhs_simple_contact_ale,
boost::shared_ptr< CommonDataMortarContact common_data_simple_contact,
const string  field_name,
const string  mesh_node_field_name,
const string  lagrange_field_name 
)

Function for the mortar 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 mortar 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 1014 of file MortarContactProblem.cpp.

1018  {
1020 
1021  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
1022  mesh_node_field_name, common_data_mortar_contact));
1023 
1024  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1025  new OpGetNormalMasterALE(mesh_node_field_name,
1026  common_data_mortar_contact));
1027 
1028  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1029  new OpGetPositionAtGaussPtsMaster(field_name,
1030  common_data_mortar_contact));
1031 
1032  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1033  new OpGetPositionAtGaussPtsSlave(field_name, common_data_mortar_contact));
1034 
1035  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1036  new OpGetGapSlave(field_name, common_data_mortar_contact));
1037 
1038  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1039  new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
1040  common_data_mortar_contact));
1041 
1042  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1043  new OpContactTractionSlaveSlave_dX(field_name, mesh_node_field_name,
1044  common_data_mortar_contact,
1046 
1047  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1048  new OpContactTractionMasterSlave_dX(field_name, mesh_node_field_name,
1049  common_data_mortar_contact,
1051 
1052  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1053  new OpContactTractionMasterMaster_dX(field_name, mesh_node_field_name,
1054  common_data_mortar_contact,
1056 
1057  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1058  new OpCalDerIntCompFunSlaveSlave_dX(
1059  lagrange_field_name, mesh_node_field_name, cnValuePtr,
1060  common_data_mortar_contact, LAGRANGE_RANK, POSITION_RANK));
1062 }

◆ setContactOperatorsLhsALEMaterial()

MoFEMErrorCode MortarContactProblem::setContactOperatorsLhsALEMaterial ( boost::shared_ptr< MortarContactElement fe_lhs_simple_contact_ale,
boost::shared_ptr< CommonDataMortarContact 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 mortar 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 mortar 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 915 of file MortarContactProblem.cpp.

919  {
921 
922  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
923  mesh_node_field_name, common_data_mortar_contact));
924 
925  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
926  new OpGetNormalMasterALE(mesh_node_field_name,
927  common_data_mortar_contact));
928 
929  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
930  new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
931  common_data_mortar_contact));
932 
933  boost::shared_ptr<VolumeElementForcesAndSourcesCoreOnContactPrismSide>
934  feMatSideLhs_dx = boost::make_shared<
935  VolumeElementForcesAndSourcesCoreOnContactPrismSide>(mField);
936 
937  feMatSideLhs_dx->getOpPtrVector().push_back(
939  mesh_node_field_name, common_data_mortar_contact->HMat));
940 
941  feMatSideLhs_dx->getOpPtrVector().push_back(
943  field_name, common_data_mortar_contact->hMat));
944 
945  // // Master derivative over spatial
946  feMatSideLhs_dx->getOpPtrVector().push_back(new OpCalculateDeformation(
947  mesh_node_field_name, common_data_mortar_contact, false));
948 
949  feMatSideLhs_dx->getOpPtrVector().push_back(
950  new OpContactMaterialVolOnSideLhs_dX_dX(
951  mesh_node_field_name, mesh_node_field_name,
952  common_data_mortar_contact, true));
953 
954  feMatSideLhs_dx->getOpPtrVector().push_back(
955  new OpContactMaterialVolOnSideLhs_dX_dx(
956  mesh_node_field_name, field_name, common_data_mortar_contact, true));
957 
958  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
959  new OpLoopForSideOfContactPrism(mesh_node_field_name, feMatSideLhs_dx,
960  side_fe_name, ContactOp::FACEMASTER));
961 
962  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
963  new OpContactMaterialMasterOnFaceLhs_dX_dX(
964  mesh_node_field_name, mesh_node_field_name,
965  common_data_mortar_contact, POSITION_RANK, POSITION_RANK));
966 
967  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
968  new OpContactMaterialMasterSlaveLhs_dX_dLagmult(
969  mesh_node_field_name, lagrange_field_name, common_data_mortar_contact,
971 
972  boost::shared_ptr<VolumeElementForcesAndSourcesCoreOnContactPrismSide>
973  feMatSideLhsSlave_dx = boost::make_shared<
974  VolumeElementForcesAndSourcesCoreOnContactPrismSide>(mField);
975 
976  feMatSideLhsSlave_dx->getOpPtrVector().push_back(
978  mesh_node_field_name, common_data_mortar_contact->HMat));
979 
980  feMatSideLhsSlave_dx->getOpPtrVector().push_back(
982  field_name, common_data_mortar_contact->hMat));
983 
984  feMatSideLhsSlave_dx->getOpPtrVector().push_back(new OpCalculateDeformation(
985  mesh_node_field_name, common_data_mortar_contact, false));
986 
987  feMatSideLhsSlave_dx->getOpPtrVector().push_back(
988  new OpContactMaterialVolOnSideLhs_dX_dX(
989  mesh_node_field_name, mesh_node_field_name,
990  common_data_mortar_contact, false));
991 
992  feMatSideLhsSlave_dx->getOpPtrVector().push_back(
993  new OpContactMaterialVolOnSideLhs_dX_dx(
994  mesh_node_field_name, field_name, common_data_mortar_contact, false));
995 
996  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
997  new OpLoopForSideOfContactPrism(mesh_node_field_name,
998  feMatSideLhsSlave_dx, side_fe_name,
999  ContactOp::FACESLAVE));
1000 
1001  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1002  new OpContactMaterialSlaveOnFaceLhs_dX_dX(
1003  mesh_node_field_name, mesh_node_field_name,
1004  common_data_mortar_contact, POSITION_RANK, POSITION_RANK));
1005 
1006  fe_lhs_mortar_contact_ale->getOpPtrVector().push_back(
1007  new OpContactMaterialSlaveSlaveLhs_dX_dLagmult(
1008  mesh_node_field_name, lagrange_field_name, common_data_mortar_contact,
1010 
1012 }

◆ setContactOperatorsRhs()

MoFEMErrorCode MortarContactProblem::setContactOperatorsRhs ( boost::shared_ptr< MortarContactElement fe_rhs_mortar_contact,
boost::shared_ptr< CommonDataMortarContact common_data_mortar_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 340 of file MortarContactProblem.cpp.

345  {
347 
348  fe_rhs_mortar_contact->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
349  "MESH_NODE_POSITIONS", common_data_mortar_contact));
350 
351  fe_rhs_mortar_contact->getOpPtrVector().push_back(new OpGetNormalMasterALE(
352  "MESH_NODE_POSITIONS", common_data_mortar_contact));
353 
354  fe_rhs_mortar_contact->getOpPtrVector().push_back(
355  new OpGetPositionAtGaussPtsMaster(field_name,
356  common_data_mortar_contact));
357 
358  fe_rhs_mortar_contact->getOpPtrVector().push_back(
359  new OpGetPositionAtGaussPtsSlave(field_name, common_data_mortar_contact));
360 
361  if (is_eigen_pos_field) {
362  fe_rhs_mortar_contact->getOpPtrVector().push_back(
363  new OpGetDeformationFieldForDisplAtGaussPtsMaster(
364  eigen_pos_field_name, common_data_mortar_contact));
365 
366  fe_rhs_mortar_contact->getOpPtrVector().push_back(
367  new OpGetMatPosForDisplAtGaussPtsMaster("MESH_NODE_POSITIONS",
368  common_data_mortar_contact));
369 
370  fe_rhs_mortar_contact->getOpPtrVector().push_back(
371  new OpGetMatPosForDisplAtGaussPtsSlave("MESH_NODE_POSITIONS",
372  common_data_mortar_contact));
373 
374  fe_rhs_mortar_contact->getOpPtrVector().push_back(
375  new OpGetDeformationFieldForDisplAtGaussPtsSlave(
376  eigen_pos_field_name, common_data_mortar_contact));
377  }
378 
379  if (use_reference_coordinates) {
380  fe_rhs_mortar_contact->getOpPtrVector().push_back(
381  new OpGetDeformationFieldForDisplAtGaussPtsMaster(
382  "MESH_NODE_POSITIONS", common_data_mortar_contact));
383 
384  fe_rhs_mortar_contact->getOpPtrVector().push_back(
385  new OpGetDeformationFieldForDisplAtGaussPtsSlave(
386  "MESH_NODE_POSITIONS", common_data_mortar_contact));
387  }
388 
389  fe_rhs_mortar_contact->getOpPtrVector().push_back(
390  new OpGetGapSlave(field_name, common_data_mortar_contact));
391 
392  fe_rhs_mortar_contact->getOpPtrVector().push_back(
393  new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
394  common_data_mortar_contact));
395 
396  fe_rhs_mortar_contact->getOpPtrVector().push_back(new OpGetGaussPtsState(
397  lagrange_field_name, common_data_mortar_contact, cnValue, is_alm));
398 
399  if (!is_alm) {
400  fe_rhs_mortar_contact->getOpPtrVector().push_back(
401  new OpCalContactTractionOnSlave(field_name,
402  common_data_mortar_contact));
403 
404  fe_rhs_mortar_contact->getOpPtrVector().push_back(new OpCalIntCompFunSlave(
405  lagrange_field_name, common_data_mortar_contact, cnValuePtr));
406  } else {
407  fe_rhs_mortar_contact->getOpPtrVector().push_back(
408  new OpGetAugmentedLambdaSlave(field_name, common_data_mortar_contact,
409  cnValue));
410 
411  fe_rhs_mortar_contact->getOpPtrVector().push_back(
412  new OpCalAugmentedTractionRhsSlave(field_name,
413  common_data_mortar_contact));
414 
415  fe_rhs_mortar_contact->getOpPtrVector().push_back(
416  new OpGapConstraintAugmentedRhs(lagrange_field_name,
417  common_data_mortar_contact, cnValue));
418  }
419 
421 }

◆ setContactOperatorsRhsALEMaterial()

MoFEMErrorCode MortarContactProblem::setContactOperatorsRhsALEMaterial ( boost::shared_ptr< MortarContactElement fe_rhs_simple_contact_ale,
boost::shared_ptr< CommonDataMortarContact 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 mortar 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 mortar 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 839 of file MortarContactProblem.cpp.

843  {
845 
846  boost::shared_ptr<VolumeElementForcesAndSourcesCoreOnContactPrismSide>
847  fe_mat_side_rhs_master = boost::make_shared<
848  VolumeElementForcesAndSourcesCoreOnContactPrismSide>(mField);
849 
850  fe_mat_side_rhs_master->getOpPtrVector().push_back(
852  mesh_node_field_name, common_data_mortar_contact->HMat));
853  fe_mat_side_rhs_master->getOpPtrVector().push_back(
855  field_name, common_data_mortar_contact->hMat));
856 
857  boost::shared_ptr<VolumeElementForcesAndSourcesCoreOnContactPrismSide>
858  fe_mat_side_rhs_slave = boost::make_shared<
859  VolumeElementForcesAndSourcesCoreOnContactPrismSide>(mField);
860 
861  fe_mat_side_rhs_slave->getOpPtrVector().push_back(
863  mesh_node_field_name, common_data_mortar_contact->HMat));
864  fe_mat_side_rhs_slave->getOpPtrVector().push_back(
866  field_name, common_data_mortar_contact->hMat));
867 
868  fe_rhs_mortar_contact_ale->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
869  "MESH_NODE_POSITIONS", common_data_mortar_contact));
870 
871  fe_rhs_mortar_contact_ale->getOpPtrVector().push_back(
872  new OpGetNormalMasterALE("MESH_NODE_POSITIONS",
873  common_data_mortar_contact));
874 
875  fe_rhs_mortar_contact_ale->getOpPtrVector().push_back(
876  new OpGetPositionAtGaussPtsMaster(field_name,
877  common_data_mortar_contact));
878 
879  fe_rhs_mortar_contact_ale->getOpPtrVector().push_back(
880  new OpGetPositionAtGaussPtsSlave(field_name, common_data_mortar_contact));
881 
882  fe_rhs_mortar_contact_ale->getOpPtrVector().push_back(
883  new OpGetGapSlave(field_name, common_data_mortar_contact));
884 
885  fe_rhs_mortar_contact_ale->getOpPtrVector().push_back(
886  new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
887  common_data_mortar_contact));
888 
889  fe_mat_side_rhs_master->getOpPtrVector().push_back(new OpCalculateDeformation(
890  mesh_node_field_name, common_data_mortar_contact, false));
891 
892  fe_rhs_mortar_contact_ale->getOpPtrVector().push_back(
893  new OpLoopForSideOfContactPrism(mesh_node_field_name,
894  fe_mat_side_rhs_master, side_fe_name,
895  ContactOp::FACEMASTER));
896 
897  fe_rhs_mortar_contact_ale->getOpPtrVector().push_back(
898  new OpCalMatForcesALEMaster(mesh_node_field_name,
899  common_data_mortar_contact));
900 
901  fe_mat_side_rhs_slave->getOpPtrVector().push_back(new OpCalculateDeformation(
902  mesh_node_field_name, common_data_mortar_contact, false));
903 
904  fe_rhs_mortar_contact_ale->getOpPtrVector().push_back(
905  new OpLoopForSideOfContactPrism(mesh_node_field_name,
906  fe_mat_side_rhs_slave, side_fe_name,
907  ContactOp::FACESLAVE));
908 
909  fe_rhs_mortar_contact_ale->getOpPtrVector().push_back(
910  new OpCalMatForcesALESlave(mesh_node_field_name,
911  common_data_mortar_contact));
913 }

◆ setMasterForceOperatorsLhs() [1/2]

MoFEMErrorCode MortarContactProblem::setMasterForceOperatorsLhs ( boost::shared_ptr< MortarContactElement fe_lhs_mortar_contact,
boost::shared_ptr< CommonDataMortarContact common_data_mortar_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 649 of file MortarContactProblem.cpp.

654  {
656 
657  fe_lhs_mortar_contact->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
658  "MESH_NODE_POSITIONS", common_data_mortar_contact));
659 
660  fe_lhs_mortar_contact->getOpPtrVector().push_back(new OpGetNormalMasterALE(
661  "MESH_NODE_POSITIONS", common_data_mortar_contact));
662 
663  fe_lhs_mortar_contact->getOpPtrVector().push_back(
664  new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
665  common_data_mortar_contact));
666  if (!is_alm) {
667  fe_lhs_mortar_contact->getOpPtrVector().push_back(
668  new OpCalContactTractionOverLambdaMasterSlave(
669  field_name, lagrange_field_name, common_data_mortar_contact));
670  } else {
671 
672  fe_lhs_mortar_contact->getOpPtrVector().push_back(
673  new OpGetPositionAtGaussPtsMaster(field_name,
674  common_data_mortar_contact));
675 
676  fe_lhs_mortar_contact->getOpPtrVector().push_back(
677  new OpGetPositionAtGaussPtsSlave(field_name,
678  common_data_mortar_contact));
679 
680  if (is_eigen_pos_field) {
681  fe_lhs_mortar_contact->getOpPtrVector().push_back(
682  new OpGetDeformationFieldForDisplAtGaussPtsMaster(
683  eigen_pos_field_name, common_data_mortar_contact));
684 
685  fe_lhs_mortar_contact->getOpPtrVector().push_back(
686  new OpGetMatPosForDisplAtGaussPtsMaster("MESH_NODE_POSITIONS",
687  common_data_mortar_contact));
688 
689  fe_lhs_mortar_contact->getOpPtrVector().push_back(
690  new OpGetMatPosForDisplAtGaussPtsSlave("MESH_NODE_POSITIONS",
691  common_data_mortar_contact));
692 
693  fe_lhs_mortar_contact->getOpPtrVector().push_back(
694  new OpGetDeformationFieldForDisplAtGaussPtsSlave(
695  eigen_pos_field_name, common_data_mortar_contact));
696  }
697 
698  if (use_reference_coordinates) {
699  fe_lhs_mortar_contact->getOpPtrVector().push_back(
700  new OpGetDeformationFieldForDisplAtGaussPtsMaster(
701  "MESH_NODE_POSITIONS", common_data_mortar_contact));
702 
703  fe_lhs_mortar_contact->getOpPtrVector().push_back(
704  new OpGetDeformationFieldForDisplAtGaussPtsSlave(
705  "MESH_NODE_POSITIONS", common_data_mortar_contact));
706  }
707 
708  fe_lhs_mortar_contact->getOpPtrVector().push_back(
709  new OpGetGapSlave(field_name, common_data_mortar_contact));
710 
711  fe_lhs_mortar_contact->getOpPtrVector().push_back(
712  new OpGetAugmentedLambdaSlave(field_name, common_data_mortar_contact,
713  cnValue));
714 
715  fe_lhs_mortar_contact->getOpPtrVector().push_back(
716  new OpCalContactAugmentedTractionOverLambdaMasterSlave(
717  field_name, lagrange_field_name, common_data_mortar_contact));
718 
719  fe_lhs_mortar_contact->getOpPtrVector().push_back(
720  new OpCalContactAugmentedTractionOverSpatialMasterMaster(
721  field_name, field_name, cnValue, common_data_mortar_contact));
722 
723  fe_lhs_mortar_contact->getOpPtrVector().push_back(
724  new OpCalContactAugmentedTractionOverSpatialMasterSlave(
725  field_name, field_name, cnValue, common_data_mortar_contact));
726  }
727 
729 }

◆ setMasterForceOperatorsLhs() [2/2]

MoFEMErrorCode MortarContactProblem::setMasterForceOperatorsLhs ( boost::shared_ptr< MortarConvectSlaveContactElement fe_lhs_mortar_contact,
boost::shared_ptr< CommonDataMortarContact common_data_mortar_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 731 of file MortarContactProblem.cpp.

736  {
738 
740  boost::dynamic_pointer_cast<MortarContactElement>(fe_lhs_mortar_contact),
741  common_data_mortar_contact, field_name, lagrange_field_name, is_alm,
742  is_eigen_pos_field, eigen_pos_field_name, use_reference_coordinates);
743 
744  fe_lhs_mortar_contact->getOpPtrVector().push_back(new OpCalculateGradLambdaXi(
745  lagrange_field_name, common_data_mortar_contact));
746 
747  fe_lhs_mortar_contact->getOpPtrVector().push_back(
748  new OpLhsConvectIntegrationPtsContactTraction(
749  field_name, field_name, common_data_mortar_contact,
750  ContactOp::FACEMASTERSLAVE,
751  fe_lhs_mortar_contact->getConvectPtr()->getDiffKsiSpatialSlave()));
752 
753  fe_lhs_mortar_contact->getOpPtrVector().push_back(
754  new OpLhsConvectIntegrationPtsContactTraction(
755  field_name, field_name, common_data_mortar_contact,
756  ContactOp::FACEMASTERMASTER,
757  fe_lhs_mortar_contact->getConvectPtr()->getDiffKsiSpatialMaster()));
759 }

◆ setMasterForceOperatorsRhs()

MoFEMErrorCode MortarContactProblem::setMasterForceOperatorsRhs ( boost::shared_ptr< MortarContactElement fe_rhs_mortar_contact,
boost::shared_ptr< CommonDataMortarContact common_data_mortar_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 423 of file MortarContactProblem.cpp.

428  {
430 
431  fe_rhs_mortar_contact->getOpPtrVector().push_back(new OpGetNormalSlaveALE(
432  "MESH_NODE_POSITIONS", common_data_mortar_contact));
433 
434  fe_rhs_mortar_contact->getOpPtrVector().push_back(new OpGetNormalMasterALE(
435  "MESH_NODE_POSITIONS", common_data_mortar_contact));
436 
437  fe_rhs_mortar_contact->getOpPtrVector().push_back(
438  new OpGetLagMulAtGaussPtsSlave(lagrange_field_name,
439  common_data_mortar_contact));
440 
441  // fe_rhs_mortar_contact->getOpPtrVector().push_back(
442  // new OpGetPositionAtGaussPtsMaster(field_name,
443  // common_data_mortar_contact));
444 
445  // fe_rhs_mortar_contact->getOpPtrVector().push_back(
446  // new OpGetPositionAtGaussPtsSlave(field_name,
447  // common_data_mortar_contact));
448 
449  if (!is_alm) {
450  fe_rhs_mortar_contact->getOpPtrVector().push_back(
451  new OpCalContactTractionOnMaster(field_name,
452  common_data_mortar_contact));
453  } else {
454 
455  fe_rhs_mortar_contact->getOpPtrVector().push_back(
456  new OpGetPositionAtGaussPtsMaster(field_name,
457  common_data_mortar_contact));
458 
459  fe_rhs_mortar_contact->getOpPtrVector().push_back(
460  new OpGetPositionAtGaussPtsSlave(field_name,
461  common_data_mortar_contact));
462 
463  if (is_eigen_pos_field) {
464  fe_rhs_mortar_contact->getOpPtrVector().push_back(
465  new OpGetDeformationFieldForDisplAtGaussPtsMaster(
466  eigen_pos_field_name, common_data_mortar_contact));
467 
468  fe_rhs_mortar_contact->getOpPtrVector().push_back(
469  new OpGetMatPosForDisplAtGaussPtsMaster("MESH_NODE_POSITIONS",
470  common_data_mortar_contact));
471 
472  fe_rhs_mortar_contact->getOpPtrVector().push_back(
473  new OpGetMatPosForDisplAtGaussPtsSlave("MESH_NODE_POSITIONS",
474  common_data_mortar_contact));
475 
476  fe_rhs_mortar_contact->getOpPtrVector().push_back(
477  new OpGetDeformationFieldForDisplAtGaussPtsSlave(
478  eigen_pos_field_name, common_data_mortar_contact));
479  }
480 
481  if (use_reference_coordinates) {
482  fe_rhs_mortar_contact->getOpPtrVector().push_back(
483  new OpGetDeformationFieldForDisplAtGaussPtsMaster(
484  "MESH_NODE_POSITIONS", common_data_mortar_contact));
485 
486  fe_rhs_mortar_contact->getOpPtrVector().push_back(
487  new OpGetDeformationFieldForDisplAtGaussPtsSlave(
488  "MESH_NODE_POSITIONS", common_data_mortar_contact));
489  }
490 
491  fe_rhs_mortar_contact->getOpPtrVector().push_back(
492  new OpGetGapSlave(field_name, common_data_mortar_contact));
493 
494  fe_rhs_mortar_contact->getOpPtrVector().push_back(
495  new OpGetAugmentedLambdaSlave(field_name, common_data_mortar_contact,
496  cnValue));
497 
498  fe_rhs_mortar_contact->getOpPtrVector().push_back(
499  new OpCalAugmentedTractionRhsMaster(field_name,
500  common_data_mortar_contact));
501  }
502 
504 }

Member Data Documentation

◆ cnValue

double MortarContactProblem::cnValue

Definition at line 256 of file MortarContactProblem.hpp.

◆ cnValuePtr

boost::shared_ptr<double> MortarContactProblem::cnValuePtr

Definition at line 257 of file MortarContactProblem.hpp.

◆ contactCommondataMultiIndex

boost::shared_ptr<ContactSearchKdTree::ContactCommonData_multiIndex> MortarContactProblem::contactCommondataMultiIndex

Definition at line 261 of file MortarContactProblem.hpp.

◆ mField

MoFEM::Interface& MortarContactProblem::mField

Definition at line 259 of file MortarContactProblem.hpp.

◆ newtonCotes

bool MortarContactProblem::newtonCotes

Definition at line 262 of file MortarContactProblem.hpp.

◆ setOfMortarContactPrism

map<int, MortarContactPrismsData> MortarContactProblem::setOfMortarContactPrism

maps side set id with appropriate FluxData

Definition at line 27 of file MortarContactProblem.hpp.


The documentation for this struct was generated from the following files:
MoFEM::CoreInterface::modify_finite_element_add_field_row
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
MoFEM::CoreInterface::add_ents_to_finite_element_by_type
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
CHKERR
#define CHKERR
Inline error check.
Definition: definitions.h:548
MortarContactProblem::setContactOperatorsLhs
MoFEMErrorCode setContactOperatorsLhs(boost::shared_ptr< MortarContactElement > fe_lhs_mortar_contact, boost::shared_ptr< CommonDataMortarContact > common_data_mortar_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: MortarContactProblem.cpp:506
MoFEM::CoreInterface::remove_ents_from_finite_element
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
MoFEM::CoreInterface::add_finite_element
virtual MoFEMErrorCode add_finite_element(const std::string &fe_name, enum MoFEMTypes bh=MF_EXCL, int verb=DEFAULT_VERBOSITY)=0
add finite element
SimpleContactProblem::SimpleContactProblem
SimpleContactProblem(MoFEM::Interface &m_field, boost::shared_ptr< double > cn_value, bool newton_cotes=false)
Definition: SimpleContact.hpp:487
MoFEM::CoreInterface::modify_finite_element_add_field_col
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
MortarContactProblem::setOfMortarContactPrism
map< int, MortarContactPrismsData > setOfMortarContactPrism
maps side set id with appropriate FluxData
Definition: MortarContactProblem.hpp:27
SimpleContactProblem::NO_TAG
@ NO_TAG
Definition: SimpleContact.hpp:2177
MortarContactProblem::cnValue
double cnValue
Definition: MortarContactProblem.hpp:256
MoFEM::CoreInterface::modify_finite_element_add_field_data
virtual MoFEMErrorCode modify_finite_element_add_field_data(const std::string &fe_name, const std::string name_field)=0
set finite element field data
field_name
constexpr auto field_name
Definition: poisson_2d_homogeneous.cpp:13
MoFEM::CoreInterface::get_finite_element_entities_by_handle
virtual MoFEMErrorCode get_finite_element_entities_by_handle(const std::string name, Range &ents) const =0
get entities in the finite element by handle
SimpleContactProblem::POSITION_RANK
static constexpr int POSITION_RANK
Definition: SimpleContact.hpp:63
Range
SimpleContactProblem::LAGRANGE_RANK
static constexpr int LAGRANGE_RANK
Definition: SimpleContact.hpp:62
MF_ZERO
@ MF_ZERO
Definition: definitions.h:111
MortarContactProblem::contactCommondataMultiIndex
boost::shared_ptr< ContactSearchKdTree::ContactCommonData_multiIndex > contactCommondataMultiIndex
Definition: MortarContactProblem.hpp:261
MortarContactProblem::newtonCotes
bool newtonCotes
Definition: MortarContactProblem.hpp:262
MortarContactProblem::cnValuePtr
boost::shared_ptr< double > cnValuePtr
Definition: MortarContactProblem.hpp:257
SimpleContactProblem::setOfSimpleContactPrism
map< int, SimpleContactPrismsData > setOfSimpleContactPrism
maps side set id with appropriate FluxData
Definition: SimpleContact.hpp:72
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:429
MortarContactProblem::setMasterForceOperatorsLhs
MoFEMErrorCode setMasterForceOperatorsLhs(boost::shared_ptr< MortarContactElement > fe_lhs_mortar_contact, boost::shared_ptr< CommonDataMortarContact > common_data_mortar_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: MortarContactProblem.cpp:649
OpCalculateVectorFieldGradient
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:359
MortarContactProblem::mField
MoFEM::Interface & mField
Definition: MortarContactProblem.hpp:259