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

Contact processing at assembly level (all pairs in one tContact object) More...

Functions/Subroutines

subroutine, public calc_contact_pair_refstiff (contact, diag, ndof, hecMESH)
 Calculate reference stiffness for one contact pair. More...
 
subroutine assemble_contact_force_residual (nnode, ndLocal, id_lagrange, ctNForce, ctTForce, conMAT)
 Assemble contact nodal force into residual vector (conMATB). More...
 
subroutine assemble_contact_force_output (nnode, ndLocal, ctNForce, ctTForce, cont_nforce, cont_fric)
 Accumulate contact nodal force into output arrays (CONT_NFORCE/CONT_FRIC). More...
 
subroutine update_contact_multiplier (ctAlgo, contact, coord, disp, ddisp, fcoeff, hecMESH, hecLagMAT, gnt, ctchanged)
 This subroutine update lagrangian multiplier and the distance between contacting nodes. More...
 
subroutine update_contact_multiplier_surfsurf (contact, coord, disp, ddisp, fcoeff)
 This subroutine updates the lagrangian multiplier of a mortar (MORTAR=YES) contact pair. The augmented per-node multiplier is clamped at zero, so the normal constraint of a slave node against a master group is dropped by the same complementarity condition the assembly applies, and the tangent multiplier of every node is return-mapped onto the cone of its own normal multiplier. Both are written into the working buffer of the segment, which fstr_commit_lambda_txn promotes to the warm start of the next substep. More...
 
subroutine update_tied_multiplier (contact, disp, ddisp, ctchanged)
 This subroutine update lagrangian multiplier and the distance between contacting nodes. More...
 
subroutine update_contact_tangentforce (contact)
 
subroutine calcu_contact_stiffness_nodesurf (ctAlgo, contact, coord, disp, ddisp, iter, lagrange_array, conMAT, hecLagMAT)
 This subroutine calculates contact stiffness for each contact pair and assembles it into global stiffness matrix. More...
 
subroutine calcu_contact_stiffness_surfsurf (ctAlgo, contact, coord, disp, ddisp, hecMAT)
 
subroutine calcu_contact_ndforce_nodesurf (purpose, ctAlgo, contact, coord, disp, ddisp, lagrange_array, conMAT, CONT_NFORCE, CONT_FRIC, hecLagMAT)
 This subroutine calculates contact nodal force for each contact pair and assembles it into contact matrix and/or force arrays. When purpose == kctForResidual, forces are assembled into conMATB. When purpose == kctForOutput, forces are stored in CONT_NFORCE/CONT_FRIC using multiplier only (no penalty). More...
 
subroutine calcu_contact_ndforce_exp (contact, coord, disp, ddisp, CONT_NFORCE, CONT_FRIC)
 Compute contact nodal normal force for output from the stored contact multiplier, for the explicit dynamic method. More...
 
subroutine calcu_contact_ndforce_surfsurf (purpose, ctAlgo, contact, coord, disp, ddisp, conMAT, CONT_NFORCE, CONT_FRIC)
 

Detailed Description

Contact processing at assembly level (all pairs in one tContact object)

Function/Subroutine Documentation

◆ assemble_contact_force_output()

subroutine m_fstr_contact_assembly::assemble_contact_force_output ( integer(kind=kint), intent(in)  nnode,
integer(kind=kint), dimension(nnode + 1), intent(in)  ndLocal,
real(kind=kreal), dimension((nnode+1)*3+1), intent(in)  ctNForce,
real(kind=kreal), dimension((nnode+1)*3+1), intent(in)  ctTForce,
real(kind=kreal), dimension(:), intent(inout), pointer  cont_nforce,
real(kind=kreal), dimension(:), intent(inout), optional, pointer  cont_fric 
)

Accumulate contact nodal force into output arrays (CONT_NFORCE/CONT_FRIC).

Parameters
[in]nnodenumber of master nodes
[in]ndlocalglobal node numbers
[in]ctnforcenormal contact force vector
[in]cttforcetangential contact force vector
[in,out]cont_nforceoutput normal force
[in,out]cont_fricoutput friction force

Definition at line 161 of file fstr_contact_assembly.f90.

Here is the caller graph for this function:

◆ assemble_contact_force_residual()

subroutine m_fstr_contact_assembly::assemble_contact_force_residual ( integer(kind=kint), intent(in)  nnode,
integer(kind=kint), dimension(nnode + 1), intent(in)  ndLocal,
integer(kind=kint), intent(in)  id_lagrange,
real(kind=kreal), dimension((nnode+1)*3+1), intent(in)  ctNForce,
real(kind=kreal), dimension((nnode+1)*3+1), intent(in)  ctTForce,
type(hecmwst_matrix), intent(inout)  conMAT 
)

Assemble contact nodal force into residual vector (conMATB).

Parameters
[in]nnodenumber of master nodes
[in]ndlocalglobal node numbers
[in]id_lagrangeLagrange multiplier index (0 if none)
[in]ctnforcenormal contact force vector
[in]cttforcetangential contact force vector
[in,out]conmatcontact matrix

Definition at line 135 of file fstr_contact_assembly.f90.

Here is the caller graph for this function:

◆ calc_contact_pair_refstiff()

subroutine, public m_fstr_contact_assembly::calc_contact_pair_refstiff ( type(tcontact), intent(inout)  contact,
real(kind=kreal), dimension(:), intent(in)  diag,
integer(kind=kint), intent(in)  ndof,
type(hecmwst_local_mesh), intent(in)  hecMESH 
)

Calculate reference stiffness for one contact pair.

Parameters
[in,out]contactcontact pair
[in]diagdiagonal vector (size = ndof * np)
[in]ndofdegrees of freedom
[in]hecmeshmesh

Definition at line 23 of file fstr_contact_assembly.f90.

Here is the caller graph for this function:

◆ calcu_contact_ndforce_exp()

subroutine m_fstr_contact_assembly::calcu_contact_ndforce_exp ( type( tcontact ), intent(inout)  contact,
real(kind=kreal), dimension(:), intent(in)  coord,
real(kind=kreal), dimension(:), intent(in)  disp,
real(kind=kreal), dimension(:), intent(in)  ddisp,
real(kind=kreal), dimension(:), pointer  CONT_NFORCE,
real(kind=kreal), dimension(:), pointer  CONT_FRIC 
)

Compute contact nodal normal force for output from the stored contact multiplier, for the explicit dynamic method.

Explicit counterpart of the kctForOutput path of calcu_contact_ndforce_NodeSurf. The forward-increment Lagrange corrector stores the converged contact normal force in states(:)multiplier(1) but has no Lagrange matrix, so the multiplier is taken directly from the contact state instead of hecLagMATLagrange. The same element routine (getContactNodalForce_Slag) and assembly (assemble_contact_force_output) as the implicit/static output path are reused, so CONT_NFORCE is produced identically. The explicit corrector stores the converged tangential force in states(:)tangentForce_final; distribute it with the same relative-displacement mapping used by the implicit formulation.

Parameters
[in,out]contactcontact info
[in]coordmesh coordinate
[in]dispdisp till current step
[in]ddispdisp increment of current substep
cont_nforcecontact normal force (output)
cont_friccontact friction force (output)

Definition at line 772 of file fstr_contact_assembly.f90.

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

◆ calcu_contact_ndforce_nodesurf()

subroutine m_fstr_contact_assembly::calcu_contact_ndforce_nodesurf ( integer(kind=kint), intent(in)  purpose,
integer(kind=kint), intent(in)  ctAlgo,
type( tcontact ), intent(inout)  contact,
real(kind=kreal), dimension(:), intent(in)  coord,
real(kind=kreal), dimension(:), intent(in)  disp,
real(kind=kreal), dimension(:), intent(in)  ddisp,
real(kind=kreal), dimension(:), intent(in)  lagrange_array,
type(hecmwst_matrix), intent(inout)  conMAT,
real(kind=kreal), dimension(:), pointer  CONT_NFORCE,
real(kind=kreal), dimension(:), pointer  CONT_FRIC,
type(hecmwst_matrix_lagrange), intent(in)  hecLagMAT 
)

This subroutine calculates contact nodal force for each contact pair and assembles it into contact matrix and/or force arrays. When purpose == kctForResidual, forces are assembled into conMATB. When purpose == kctForOutput, forces are stored in CONT_NFORCE/CONT_FRIC using multiplier only (no penalty).

Parameters
[in]purposekctForResidual or kctForOutput
[in]ctalgocontact analysis algorithm
[in,out]contactcontact info
[in]coordmesh coordinate
[in]dispdisp till current step
[in]ddispdisp till current substep
[in]lagrange_arrayLagrange multiplier array
[in,out]conmatcontact matrix
cont_nforcecontact normal force
cont_friccontact friction force
[in]heclagmatLagrange matrix

Definition at line 619 of file fstr_contact_assembly.f90.

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

◆ calcu_contact_ndforce_surfsurf()

subroutine m_fstr_contact_assembly::calcu_contact_ndforce_surfsurf ( integer(kind=kint), intent(in)  purpose,
integer(kind=kint), intent(in)  ctAlgo,
type( tcontact ), intent(inout)  contact,
real(kind=kreal), dimension(:), intent(in)  coord,
real(kind=kreal), dimension(:), intent(in)  disp,
real(kind=kreal), dimension(:), intent(in)  ddisp,
type(hecmwst_matrix), intent(inout)  conMAT,
real(kind=kreal), dimension(:), pointer  CONT_NFORCE,
real(kind=kreal), dimension(:), pointer  CONT_FRIC 
)
Parameters
[in]purposekctForResidual or kctForOutput
[in]ctalgocontact analysis algorithm
[in,out]contactcontact info
[in]coordmesh coordinate
[in]dispdisp till current step
[in]ddispdisp till current substep
[in,out]conmatcontact matrix
cont_nforcecontact normal force
cont_friccontact friction force

Definition at line 812 of file fstr_contact_assembly.f90.

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

◆ calcu_contact_stiffness_nodesurf()

subroutine m_fstr_contact_assembly::calcu_contact_stiffness_nodesurf ( integer(kind=kint), intent(in)  ctAlgo,
type(tcontact), intent(inout)  contact,
real(kind=kreal), dimension(:), intent(in)  coord,
real(kind=kreal), dimension(:), intent(in)  disp,
real(kind=kreal), dimension(:), intent(in)  ddisp,
integer(kind=kint), intent(in)  iter,
real(kind=kreal), dimension(:), intent(in)  lagrange_array,
type(hecmwst_matrix), intent(inout)  conMAT,
type(hecmwst_matrix_lagrange), intent(inout)  hecLagMAT 
)

This subroutine calculates contact stiffness for each contact pair and assembles it into global stiffness matrix.

Parameters
[in]ctalgocontact analysis algorithm
[in,out]contactcontact info
[in]coordmesh coordinate
[in]dispdisplacement
[in]ddispdisplacement increment
[in]iteriteration number
[in]lagrange_arrayLagrange multiplier array
[in,out]conmatcontact stiffness matrix
[in,out]heclagmatLagrange matrix

Definition at line 433 of file fstr_contact_assembly.f90.

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

◆ calcu_contact_stiffness_surfsurf()

subroutine m_fstr_contact_assembly::calcu_contact_stiffness_surfsurf ( integer(kind=kint), intent(in)  ctAlgo,
type(tcontact), intent(inout)  contact,
real(kind=kreal), dimension(:), intent(in)  coord,
real(kind=kreal), dimension(:), intent(in)  disp,
real(kind=kreal), dimension(:), intent(in)  ddisp,
type(hecmwst_matrix), intent(inout)  hecMAT 
)
Parameters
[in]ctalgocontact analysis algorithm
[in,out]contactcontact info
[in]coordmesh coordinate
[in]dispdisplacement
[in]ddispdisplacement increment (NR)
[in,out]hecmatglobal stiffness matrix

Definition at line 547 of file fstr_contact_assembly.f90.

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

◆ update_contact_multiplier()

subroutine m_fstr_contact_assembly::update_contact_multiplier ( integer(kind=kint), intent(in)  ctAlgo,
type( tcontact ), intent(inout)  contact,
real(kind=kreal), dimension(:), intent(in)  coord,
real(kind=kreal), dimension(:), intent(in)  disp,
real(kind=kreal), dimension(:), intent(in)  ddisp,
real(kind=kreal), intent(in)  fcoeff,
type(hecmwst_local_mesh), intent(in)  hecMESH,
type(hecmwst_matrix_lagrange), intent(in)  hecLagMAT,
real(kind=kreal), dimension(2), intent(out)  gnt,
logical, intent(inout)  ctchanged 
)

This subroutine update lagrangian multiplier and the distance between contacting nodes.

Parameters
[in]ctalgocontact algorithm
[in,out]contactcontact info
[in]coordmesh coordinate
[in]dispdisp till current step
[in]ddispdisp till current substep
[in]fcoefffrictional coeff
[in]hecmeshmesh for allreduce
[in]heclagmatLagrange matrix
[out]gntconvergency information
[in,out]ctchangedif contact state changes

Definition at line 182 of file fstr_contact_assembly.f90.

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

◆ update_contact_multiplier_surfsurf()

subroutine m_fstr_contact_assembly::update_contact_multiplier_surfsurf ( type( tcontact ), intent(inout)  contact,
real(kind=kreal), dimension(:), intent(in)  coord,
real(kind=kreal), dimension(:), intent(in)  disp,
real(kind=kreal), dimension(:), intent(in)  ddisp,
real(kind=kreal), intent(in)  fcoeff 
)

This subroutine updates the lagrangian multiplier of a mortar (MORTAR=YES) contact pair. The augmented per-node multiplier is clamped at zero, so the normal constraint of a slave node against a master group is dropped by the same complementarity condition the assembly applies, and the tangent multiplier of every node is return-mapped onto the cone of its own normal multiplier. Both are written into the working buffer of the segment, which fstr_commit_lambda_txn promotes to the warm start of the next substep.

Parameters
[in,out]contactcontact info
[in]coordmesh coordinate
[in]dispdisp till current step
[in]ddispdisp till current substep
[in]fcoefffrictional coeff

Definition at line 255 of file fstr_contact_assembly.f90.

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

◆ update_contact_tangentforce()

subroutine m_fstr_contact_assembly::update_contact_tangentforce ( type( tcontact ), intent(inout)  contact)
Parameters
[in,out]contactcontact info

Definition at line 414 of file fstr_contact_assembly.f90.

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

◆ update_tied_multiplier()

subroutine m_fstr_contact_assembly::update_tied_multiplier ( type( tcontact ), intent(inout)  contact,
real(kind=kreal), dimension(:), intent(in)  disp,
real(kind=kreal), dimension(:), intent(in)  ddisp,
logical, intent(inout)  ctchanged 
)

This subroutine update lagrangian multiplier and the distance between contacting nodes.

Parameters
[in,out]contactcontact info
[in]dispdisp till current step
[in]ddispdisp till current substep
[in,out]ctchangedif contact state changes

Definition at line 363 of file fstr_contact_assembly.f90.

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