FrontISTR  5.9.0
Large-scale structural analysis program with finit element method
mcontact Module Reference

Top-level contact analysis module (System level) More...

Functions/Subroutines

subroutine fstr_addcontactstiffness (cstep, ctAlgo, iter, hecMESH, conMAT, hecLagMAT, fstrSOLID)
 
subroutine fstr_update_ndforce_contact (cstep, ctAlgo, hecMESH, hecLagMAT, fstrSOLID, conMAT)
 Compute contact forces for residual vector (conMATB). More...
 
subroutine fstr_calc_contact_output_force (cstep, ctAlgo, hecMESH, hecLagMAT, fstrSOLID, conMAT)
 Compute contact forces for output (CONT_NFORCE/CONT_FRIC). More...
 
subroutine, public fstr_calc_contact_output_force_exp (hecMESH, fstrSOLID)
 Explicit-dynamic counterpart of fstr_calc_contact_output_force. More...
 
subroutine fstr_contact_ndforce_core (purpose, cstep, ctAlgo, hecMESH, hecLagMAT, fstrSOLID, conMAT)
 Core routine: compute contact nodal forces for all contact/embed pairs. purpose == kctForResidual: assemble into conMATB purpose == kctForOutput: store into CONT_NFORCE/CONT_FRIC (zero-cleared first) More...
 
subroutine fstr_calc_contact_refstiff (cstep, hecMESH, hecMAT, fstrSOLID)
 Calculate reference stiffness for all contact pairs (System Level) More...
 
subroutine fstr_scan_contact_state (cstep, sub_step, cont_step, dt, ctAlgo, hecMESH, fstrSOLID, infoCTChange)
 Scanning contact state. More...
 
subroutine fstr_scan_contact_state_exp (cstep, is_init, hecMESH, fstrSOLID, infoCTChange)
 Scanning contact state. More...
 
logical function fstr_is_contact_active ()
 Whether contact stiffness and residual have to be assembled. Broader than is_contact_active(state): a NEAR node with damping requires assembly as well. More...
 
subroutine fstr_set_contact_active (a)
 
logical function fstr_is_contact_conv (ctAlgo, infoCTChange, hecMESH)
 
logical function fstr_is_matrixstructure_changed (infoCTChange)
 Any state category change moves a Lagrange multiplier row or a slave-master coupling. More...
 
subroutine fstr_update_contact_multiplier (cstep, ctAlgo, hecMESH, hecLagMAT, fstrSOLID, ctchanged)
 
subroutine fstr_begin_lambda_txn (fstrSOLID, cstep)
 BEGIN lambda transaction (MORTAR=YES only): clear the working buffer and restore the segment state from the committed begin values. Called at the start of every substep attempt; a cutback retry does not restore slave_surf, so the failed attempt's lambda is discarded here. More...
 
subroutine fstr_commit_lambda_txn (fstrSOLID, cstep)
 COMMIT lambda transaction (MORTAR=YES only): keep the masters with a positive per-node lambda and swap them into the begin buffer with the segment state. Called only on a converged substep exit, so begin is the warm-start source of the next substep. The discharge predicate is the complementarity condition (the assembly clamps at 0). More...
 
subroutine fstr_update_contact_tangentforce (cstep, fstrSOLID)
 Update tangent force. More...
 
subroutine, public fstr_update_contact_state_vectors (fstrSOLID, dt)
 Update contact state output vectors for all contacts. More...
 

Detailed Description

Top-level contact analysis module (System level)

Contact Analysis Module Hierarchy:

Level 1: Element Level (1 slave-master pair) m_fstr_contact_element:

  • Computes stiffness matrix and force vector for a single contact pair
  • Mathematical calculations: Tm/Tt matrices, friction state, etc.

Level 2: Contact Object Level (all pairs in one tContact) m_fstr_contact_assembly:

  • Processes all slave-master pairs in one tContact object
  • Updates contact state (multipliers, tangent forces)
  • Assembles element matrices into global system

m_fstr_contact_search:

  • Detects contact state for all pairs in one tContact object
  • Functions: scan_contact_state, track_contact_position

Level 3: System Level (all contact objects) mContact (this module):

  • Manages all contact objects in fstrSOLIDcontacts(:)
  • Core processing and state management

Supporting modules: m_fstr_contact_mpc: MPC (Multi-Point Constraint) processing m_fstr_contact_output: Output vector initialization and processing

Function/Subroutine Documentation

◆ fstr_addcontactstiffness()

subroutine mcontact::fstr_addcontactstiffness ( integer(kind=kint)  cstep,
integer(kind=kint)  ctAlgo,
integer(kind=kint)  iter,
type(hecmwst_local_mesh)  hecMESH,
type(hecmwst_matrix)  conMAT,
type(hecmwst_matrix_lagrange)  hecLagMAT,
type(fstr_solid)  fstrSOLID 
)
Parameters
cstepcurrent loading step
ctalgocontact algorithm type
hecmeshtype hecmwST_local_mesh
conmattype hecmwST_matrix
fstrsolidtype fstr_solid
heclagmattype hecmwST_matrix_lagrange

Definition at line 60 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_begin_lambda_txn()

subroutine mcontact::fstr_begin_lambda_txn ( type(fstr_solid), intent(inout)  fstrSOLID,
integer(kind=kint), intent(in)  cstep 
)

BEGIN lambda transaction (MORTAR=YES only): clear the working buffer and restore the segment state from the committed begin values. Called at the start of every substep attempt; a cutback retry does not restore slave_surf, so the failed attempt's lambda is discarded here.

Definition at line 507 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_calc_contact_output_force()

subroutine mcontact::fstr_calc_contact_output_force ( integer(kind=kint), intent(in)  cstep,
integer(kind=kint), intent(in)  ctAlgo,
type(hecmwst_local_mesh)  hecMESH,
type(hecmwst_matrix_lagrange)  hecLagMAT,
type(fstr_solid)  fstrSOLID,
type(hecmwst_matrix)  conMAT 
)

Compute contact forces for output (CONT_NFORCE/CONT_FRIC).

Definition at line 114 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_calc_contact_output_force_exp()

subroutine, public mcontact::fstr_calc_contact_output_force_exp ( type(hecmwst_local_mesh), intent(in)  hecMESH,
type(fstr_solid), intent(inout)  fstrSOLID 
)

Explicit-dynamic counterpart of fstr_calc_contact_output_force.

The explicit (central-difference) solver enforces contact through the forward-increment Lagrange corrector, which stores the contact normal force in states(:)multiplier(1) but builds no Lagrange matrix. Hence fstr_calc_contact_output_force (which reads hecLagMATLagrange) cannot be used, and CONT_NFORCE was left at zero for result/visualization output. This routine fills CONT_NFORCE from the stored multipliers, reusing the same element force routine as the implicit path. It needs neither hecLagMAT nor conMAT.

Definition at line 135 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_calc_contact_refstiff()

subroutine mcontact::fstr_calc_contact_refstiff ( integer(kind=kint), intent(in)  cstep,
type(hecmwst_local_mesh)  hecMESH,
type(hecmwst_matrix)  hecMAT,
type(fstr_solid)  fstrSOLID 
)

Calculate reference stiffness for all contact pairs (System Level)

Definition at line 196 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_commit_lambda_txn()

subroutine mcontact::fstr_commit_lambda_txn ( type(fstr_solid), intent(inout)  fstrSOLID,
integer(kind=kint), intent(in)  cstep 
)

COMMIT lambda transaction (MORTAR=YES only): keep the masters with a positive per-node lambda and swap them into the begin buffer with the segment state. Called only on a converged substep exit, so begin is the warm-start source of the next substep. The discharge predicate is the complementarity condition (the assembly clamps at 0).

Definition at line 535 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_contact_ndforce_core()

subroutine mcontact::fstr_contact_ndforce_core ( integer(kind=kint), intent(in)  purpose,
integer(kind=kint), intent(in)  cstep,
integer(kind=kint), intent(in)  ctAlgo,
type(hecmwst_local_mesh)  hecMESH,
type(hecmwst_matrix_lagrange)  hecLagMAT,
type(fstr_solid)  fstrSOLID,
type(hecmwst_matrix)  conMAT 
)

Core routine: compute contact nodal forces for all contact/embed pairs. purpose == kctForResidual: assemble into conMATB purpose == kctForOutput: store into CONT_NFORCE/CONT_FRIC (zero-cleared first)

Definition at line 155 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_is_contact_active()

logical function mcontact::fstr_is_contact_active

Whether contact stiffness and residual have to be assembled. Broader than is_contact_active(state): a NEAR node with damping requires assembly as well.

Definition at line 425 of file fstr_contact.f90.

Here is the caller graph for this function:

◆ fstr_is_contact_conv()

logical function mcontact::fstr_is_contact_conv ( integer(kind=kint), intent(in)  ctAlgo,
type (fstr_info_contactchange), intent(in)  infoCTChange,
type (hecmwst_local_mesh), intent(in)  hecMESH 
)
Parameters
[in]ctalgocontact analysis algorithm
[in]infoctchangefstr_contactChange

Definition at line 434 of file fstr_contact.f90.

Here is the caller graph for this function:

◆ fstr_is_matrixstructure_changed()

logical function mcontact::fstr_is_matrixstructure_changed ( type (fstr_info_contactchange)  infoCTChange)

Any state category change moves a Lagrange multiplier row or a slave-master coupling.

Parameters
infoctchangefstr_contactChange

Definition at line 450 of file fstr_contact.f90.

Here is the caller graph for this function:

◆ fstr_scan_contact_state()

subroutine mcontact::fstr_scan_contact_state ( integer(kind=kint), intent(in)  cstep,
integer(kind=kint), intent(in)  sub_step,
integer(kind=kint), intent(in)  cont_step,
real(kind=kreal), intent(in)  dt,
integer(kind=kint), intent(in)  ctAlgo,
type( hecmwst_local_mesh ), intent(in)  hecMESH,
type(fstr_solid), intent(inout)  fstrSOLID,
type(fstr_info_contactchange), intent(inout)  infoCTChange 
)

Scanning contact state.

Parameters
[in]cstepcurrent step number
[in]sub_stepcurrent sub-step number
[in]cont_stepcurrent contact step number
[in]ctalgocontact analysis algorithm
[in]hecmeshtype mesh
[in,out]fstrsolidtype fstr_solid

Definition at line 231 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_scan_contact_state_exp()

subroutine mcontact::fstr_scan_contact_state_exp ( integer(kind=kint), intent(in)  cstep,
logical, intent(in)  is_init,
type( hecmwst_local_mesh ), intent(in)  hecMESH,
type(fstr_solid), intent(inout)  fstrSOLID,
type(fstr_info_contactchange), intent(inout)  infoCTChange 
)

Scanning contact state.

Parameters
[in]cstepcurrent step number
[in]is_inittrue only for the initial scan
[in]hecmeshtype mesh
[in,out]fstrsolidtype fstr_solid

Definition at line 354 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_set_contact_active()

subroutine mcontact::fstr_set_contact_active ( logical, intent(in)  a)

Definition at line 429 of file fstr_contact.f90.

Here is the caller graph for this function:

◆ fstr_update_contact_multiplier()

subroutine mcontact::fstr_update_contact_multiplier ( integer(kind=kint), intent(in)  cstep,
integer(kind=kint), intent(in)  ctAlgo,
type( hecmwst_local_mesh ), intent(in)  hecMESH,
type(hecmwst_matrix_lagrange), intent(in)  hecLagMAT,
type(fstr_solid), intent(inout)  fstrSOLID,
logical, intent(out)  ctchanged 
)

Definition at line 461 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_update_contact_state_vectors()

subroutine, public mcontact::fstr_update_contact_state_vectors ( type(fstr_solid), intent(inout)  fstrSOLID,
real(kind=kreal), intent(in)  dt 
)

Update contact state output vectors for all contacts.

Parameters
[in]dttime increment

Definition at line 584 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_update_contact_tangentforce()

subroutine mcontact::fstr_update_contact_tangentforce ( integer(kind=kint), intent(in)  cstep,
type(fstr_solid), intent(inout)  fstrSOLID 
)

Update tangent force.

Definition at line 568 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fstr_update_ndforce_contact()

subroutine mcontact::fstr_update_ndforce_contact ( integer(kind=kint), intent(in)  cstep,
integer(kind=kint), intent(in)  ctAlgo,
type(hecmwst_local_mesh)  hecMESH,
type(hecmwst_matrix_lagrange)  hecLagMAT,
type(fstr_solid)  fstrSOLID,
type(hecmwst_matrix)  conMAT 
)

Compute contact forces for residual vector (conMATB).

Definition at line 101 of file fstr_contact.f90.

Here is the call graph for this function:
Here is the caller graph for this function: