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

This module provides functions of reconstructing. More...

Functions/Subroutines

integer(kind=kint) function, public fstr_get_num_lagrange_pernode (algtype)
 
subroutine, public fstr_save_originalmatrixstructure (hecMAT)
 This subroutine saves original matrix structure constructed originally by hecMW_matrix. More...
 
subroutine, public fstr_mat_con_contact (cstep, contact_algo, hecMAT, fstrSOLID, hecLagMAT, infoCTChange, conMAT, is_contact_active_flag)
 this subroutine reconstructs node-based (stiffness) matrix structure \corresponding to contact state More...
 
logical function, public fstr_is_matrixstruct_symmetric (fstrSOLID, hecMESH)
 this function judges whether sitiffness matrix is symmetric or not More...
 
logical function, public fstr_is_contactalag_symmetric (fstrSOLID, hecMESH)
 this function judges whether the ALagrange contact tangent is symmetric or not More...
 
logical function, public fstr_is_material_symmetric (fstrSOLID, hecMESH)
 this function judges whether all materials yield a symmetric tangent stiffness More...
 
subroutine, public fstr_set_lagrange_diagonal (hecLagMAT, ilag, value)
 Set diagonal component value for specified Lagrange multiplier. More...
 
real(kind=kreal) function, public fstr_get_lagrange_diagonal (hecLagMAT, ilag)
 Get diagonal component value for specified Lagrange multiplier. More...
 
logical function, public fstr_s2s_profile_needs_refresh (cstep, contact_algo, fstrSOLID, conMAT)
 S2S mortar profile-invariant check (read-only companion to the reservation in getNewListOFrelatednodesANDLagrangeMultipliers_ss / register_pair_to_sparsity). More...
 

Detailed Description

This module provides functions of reconstructing.

Function/Subroutine Documentation

◆ fstr_get_lagrange_diagonal()

real(kind=kreal) function, public fstr_matrix_con_contact::fstr_get_lagrange_diagonal ( type(hecmwst_matrix_lagrange), intent(in)  hecLagMAT,
integer(kind=kint), intent(in)  ilag 
)

Get diagonal component value for specified Lagrange multiplier.

Parameters
[in]heclagmathecmwST_matrix_lagrange
[in]ilagLagrange multiplier index (1-based)

Definition at line 377 of file fstr_mat_con_contact.f90.

Here is the call graph for this function:

◆ fstr_get_num_lagrange_pernode()

integer(kind=kint) function, public fstr_matrix_con_contact::fstr_get_num_lagrange_pernode ( integer(kind=kint)  algtype)
Parameters
algtypecurrent loading step

Definition at line 39 of file fstr_mat_con_contact.f90.

Here is the caller graph for this function:

◆ fstr_is_contactalag_symmetric()

logical function, public fstr_matrix_con_contact::fstr_is_contactalag_symmetric ( type(fstr_solid )  fstrSOLID,
type(hecmwst_local_mesh)  hecMESH 
)

this function judges whether the ALagrange contact tangent is symmetric or not

Definition at line 310 of file fstr_mat_con_contact.f90.

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

◆ fstr_is_material_symmetric()

logical function, public fstr_matrix_con_contact::fstr_is_material_symmetric ( type(fstr_solid )  fstrSOLID,
type(hecmwst_local_mesh)  hecMESH 
)

this function judges whether all materials yield a symmetric tangent stiffness

Definition at line 329 of file fstr_mat_con_contact.f90.

Here is the caller graph for this function:

◆ fstr_is_matrixstruct_symmetric()

logical function, public fstr_matrix_con_contact::fstr_is_matrixstruct_symmetric ( type(fstr_solid )  fstrSOLID,
type(hecmwst_local_mesh)  hecMESH 
)

this function judges whether sitiffness matrix is symmetric or not

Definition at line 290 of file fstr_mat_con_contact.f90.

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

◆ fstr_mat_con_contact()

subroutine, public fstr_matrix_con_contact::fstr_mat_con_contact ( integer(kind=kint)  cstep,
integer(kind=kint)  contact_algo,
type(hecmwst_matrix)  hecMAT,
type(fstr_solid)  fstrSOLID,
type(hecmwst_matrix_lagrange)  hecLagMAT,
type(fstr_info_contactchange)  infoCTChange,
type (hecmwst_matrix)  conMAT,
logical, intent(in)  is_contact_active_flag 
)

this subroutine reconstructs node-based (stiffness) matrix structure \corresponding to contact state

Parameters
cstepcurrent loading step
contact_algocurrent loading step
hecmattype hecmwST_matrix
fstrsolidtype fstr_solid
heclagmattype hecmwST_matrix_lagrange
infoctchangetype fstr_contactChange

Definition at line 60 of file fstr_mat_con_contact.f90.

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

◆ fstr_s2s_profile_needs_refresh()

logical function, public fstr_matrix_con_contact::fstr_s2s_profile_needs_refresh ( integer(kind=kint), intent(in)  cstep,
integer(kind=kint), intent(in)  contact_algo,
type(fstr_solid), intent(in)  fstrSOLID,
type(hecmwst_matrix), intent(in)  conMAT 
)

S2S mortar profile-invariant check (read-only companion to the reservation in getNewListOFrelatednodesANDLagrangeMultipliers_ss / register_pair_to_sparsity).

Returns .true. if any currently-active (slave_surf, master) mortar pair has a slave-node x master-node coupling that is NOT present in the matrix profile of conMAT. Such a missing coupling means the active master has drifted beyond the reserved 1-ring via a silent facet-hop / re-association (one that does not increment the structural change counters, so fstr_is_matrixStructure_changed stays false), and the next contact stiffness assembly (calcu_contact_stiffness_SurfSurf -> hecmw_mat_ass_elem) would hit an out-of-profile connectivity and abort in hecmw_mat_add_node. Reporting it here lets the caller force a matrix rebuild first, restoring the invariant.

Only slave x master CROSS couplings are checked: slave-slave and master-master couplings are base FE element couplings (a contact surface element is a face of one solid element, so its nodes are mutually coupled in list_nodeRelated_org and can never drift), whereas the cross terms are exactly what register_pair_to_sparsity adds and the only ones that can be missing. This is necessary and sufficient and avoids any spurious every-iteration refresh. The active master set is obtained from get_unique_map, the same enumeration getIntGap uses inside the assembly, so the checked footprint matches exactly.

method-gated to CONTACTS2S + ALag (N2S and SLagrange paths untouched). Per-rank (local) decision, mirroring the existing per-rank fstr_is_matrixStructure_changed gate; the collective solver re-init rides the existing contact_changed_global allreduce.

Parameters
[in]cstepcurrent loading step
[in]contact_algocontact algorithm (kcaALagrange/kcaSLagrange)
[in]fstrsolidtype fstr_solid
[in]conmatcontact matrix (S2S stiffness assembly target)

Definition at line 512 of file fstr_mat_con_contact.f90.

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

◆ fstr_save_originalmatrixstructure()

subroutine, public fstr_matrix_con_contact::fstr_save_originalmatrixstructure ( type(hecmwst_matrix)  hecMAT)

This subroutine saves original matrix structure constructed originally by hecMW_matrix.

Parameters
hecmattype hecmwST_matrix

Definition at line 49 of file fstr_mat_con_contact.f90.

Here is the caller graph for this function:

◆ fstr_set_lagrange_diagonal()

subroutine, public fstr_matrix_con_contact::fstr_set_lagrange_diagonal ( type(hecmwst_matrix_lagrange), intent(inout)  hecLagMAT,
integer(kind=kint), intent(in)  ilag,
real(kind=kreal), intent(in)  value 
)

Set diagonal component value for specified Lagrange multiplier.

Parameters
[in,out]heclagmathecmwST_matrix_lagrange
[in]ilagLagrange multiplier index (1-based)
[in]valuediagonal component value to set

Definition at line 357 of file fstr_mat_con_contact.f90.