v0.14.0
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 for the contact element (material configuration) More...
 
struct  OpContactMaterialVolOnSideLhs_dX_dx
 LHS-operator (material configuration) on the side volume of either master or slave side. 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
 Computes, for material configuration, normal to master face that is common to all gauss points. More...
 
struct  OpGetNormalSlave
 Computes, for reference configuration, normal to slave face that is common to all gauss points. More...
 
struct  OpGetNormalSlaveALE
 Computes, for material configuration, normal to slave face that is common to all gauss points. More...
 
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
 

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

Definition at line 30 of file SimpleContact.hpp.

◆ EntData

using SimpleContactProblem::EntData = EntitiesFieldData::EntData

Definition at line 31 of file SimpleContact.hpp.

◆ FaceUserDataOperator

Definition at line 33 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.

2177 { NO_TAG = 0, MASTER_SIDE = 1, SLAVE_SIDE = 2 };

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  }

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 
238  CHKERR mField.add_finite_element(element_name, MF_ZERO);
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  }

◆ 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 
301  CHKERR mField.add_finite_element(element_name, MF_ZERO);
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);
343  CHKERR mField.add_ents_to_finite_element_by_type(ents_to_add, MBPRISM,
344  element_name);
345  }
346 
348  }

◆ 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 
368  CHKERR mField.add_finite_element(element_name, MF_ZERO);
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 }

◆ 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 }

◆ 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 }

◆ 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 }

◆ 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 }

◆ 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 }

◆ 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 }

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.

◆ 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:
SimpleContactProblem::cnValue
double cnValue
Definition: SimpleContact.hpp:482
g
constexpr double g
Definition: shallow_wave.cpp:63
SimpleContactProblem::mField
MoFEM::Interface & mField
Definition: SimpleContact.hpp:485
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
SimpleContactProblem::Sign
static double Sign(double x)
Definition: SimpleContact.hpp:3568
SimpleContactProblem::cnValuePtr
boost::shared_ptr< double > cnValuePtr
Definition: SimpleContact.hpp:484
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:535
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
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
MoFEM::VolumeElementForcesAndSourcesCoreOnContactPrismSide
Base volume element used to integrate on contact surface (could be extended to other volume elements)
Definition: VolumeElementForcesAndSourcesCoreOnContactPrismSide.hpp:23
SimpleContactProblem::NO_TAG
@ NO_TAG
Definition: SimpleContact.hpp:2177
SimpleContactProblem::setContactOperatorsLhs
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...
Definition: SimpleContact.cpp:2540
SimpleContactProblem::newtonCotes
bool newtonCotes
Definition: SimpleContact.hpp:483
SimpleContactProblem::ALM_TOL
static constexpr double ALM_TOL
Definition: SimpleContact.hpp:65
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
MoFEM::OpCalculateVectorFieldGradient
Get field gradients at integration pts for scalar filed rank 0, i.e. vector field.
Definition: UserDataOperators.hpp:1536
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:98
MoFEM::ForcesAndSourcesCore::getOpPtrVector
boost::ptr_deque< UserDataOperator > & getOpPtrVector()
Use to push back operator for row operator.
Definition: ForcesAndSourcesCore.hpp:83
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_filed)=0
set finite element field data
SimpleContactProblem::setMasterForceOperatorsLhs
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)
Definition: SimpleContact.cpp:2640
SimpleContactProblem::setOfSimpleContactPrism
map< int, SimpleContactPrismsData > setOfSimpleContactPrism
maps side set id with appropriate FluxData
Definition: SimpleContact.hpp:72
SimpleContactProblem::SLAVE_SIDE
@ SLAVE_SIDE
Definition: SimpleContact.hpp:2177
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
SimpleContactProblem::MASTER_SIDE
@ MASTER_SIDE
Definition: SimpleContact.hpp:2177
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
l
FTensor::Index< 'l', 3 > l
Definition: matrix_function.cpp:21