![]() |
FrontISTR
5.9.0
Large-scale structural analysis program with finit element method
|
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) |
Contact processing at assembly level (all pairs in one tContact object)
| 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).
| [in] | nnode | number of master nodes |
| [in] | ndlocal | global node numbers |
| [in] | ctnforce | normal contact force vector |
| [in] | cttforce | tangential contact force vector |
| [in,out] | cont_nforce | output normal force |
| [in,out] | cont_fric | output friction force |
Definition at line 161 of file fstr_contact_assembly.f90.
| 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).
| [in] | nnode | number of master nodes |
| [in] | ndlocal | global node numbers |
| [in] | id_lagrange | Lagrange multiplier index (0 if none) |
| [in] | ctnforce | normal contact force vector |
| [in] | cttforce | tangential contact force vector |
| [in,out] | conmat | contact matrix |
Definition at line 135 of file fstr_contact_assembly.f90.
| 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.
| [in,out] | contact | contact pair |
| [in] | diag | diagonal vector (size = ndof * np) |
| [in] | ndof | degrees of freedom |
| [in] | hecmesh | mesh |
Definition at line 23 of file fstr_contact_assembly.f90.
| 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.
| [in,out] | contact | contact info |
| [in] | coord | mesh coordinate |
| [in] | disp | disp till current step |
| [in] | ddisp | disp increment of current substep |
| cont_nforce | contact normal force (output) | |
| cont_fric | contact friction force (output) |
Definition at line 772 of file fstr_contact_assembly.f90.
| 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).
| [in] | purpose | kctForResidual or kctForOutput |
| [in] | ctalgo | contact analysis algorithm |
| [in,out] | contact | contact info |
| [in] | coord | mesh coordinate |
| [in] | disp | disp till current step |
| [in] | ddisp | disp till current substep |
| [in] | lagrange_array | Lagrange multiplier array |
| [in,out] | conmat | contact matrix |
| cont_nforce | contact normal force | |
| cont_fric | contact friction force | |
| [in] | heclagmat | Lagrange matrix |
Definition at line 619 of file fstr_contact_assembly.f90.
| 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 | ||
| ) |
| [in] | purpose | kctForResidual or kctForOutput |
| [in] | ctalgo | contact analysis algorithm |
| [in,out] | contact | contact info |
| [in] | coord | mesh coordinate |
| [in] | disp | disp till current step |
| [in] | ddisp | disp till current substep |
| [in,out] | conmat | contact matrix |
| cont_nforce | contact normal force | |
| cont_fric | contact friction force |
Definition at line 812 of file fstr_contact_assembly.f90.
| 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.
| [in] | ctalgo | contact analysis algorithm |
| [in,out] | contact | contact info |
| [in] | coord | mesh coordinate |
| [in] | disp | displacement |
| [in] | ddisp | displacement increment |
| [in] | iter | iteration number |
| [in] | lagrange_array | Lagrange multiplier array |
| [in,out] | conmat | contact stiffness matrix |
| [in,out] | heclagmat | Lagrange matrix |
Definition at line 433 of file fstr_contact_assembly.f90.
| 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 | ||
| ) |
| [in] | ctalgo | contact analysis algorithm |
| [in,out] | contact | contact info |
| [in] | coord | mesh coordinate |
| [in] | disp | displacement |
| [in] | ddisp | displacement increment (NR) |
| [in,out] | hecmat | global stiffness matrix |
Definition at line 547 of file fstr_contact_assembly.f90.
| 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.
| [in] | ctalgo | contact algorithm |
| [in,out] | contact | contact info |
| [in] | coord | mesh coordinate |
| [in] | disp | disp till current step |
| [in] | ddisp | disp till current substep |
| [in] | fcoeff | frictional coeff |
| [in] | hecmesh | mesh for allreduce |
| [in] | heclagmat | Lagrange matrix |
| [out] | gnt | convergency information |
| [in,out] | ctchanged | if contact state changes |
Definition at line 182 of file fstr_contact_assembly.f90.
| 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.
| [in,out] | contact | contact info |
| [in] | coord | mesh coordinate |
| [in] | disp | disp till current step |
| [in] | ddisp | disp till current substep |
| [in] | fcoeff | frictional coeff |
Definition at line 255 of file fstr_contact_assembly.f90.
| subroutine m_fstr_contact_assembly::update_contact_tangentforce | ( | type( tcontact ), intent(inout) | contact | ) |
| [in,out] | contact | contact info |
Definition at line 414 of file fstr_contact_assembly.f90.
| 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.
| [in,out] | contact | contact info |
| [in] | disp | disp till current step |
| [in] | ddisp | disp till current substep |
| [in,out] | ctchanged | if contact state changes |
Definition at line 363 of file fstr_contact_assembly.f90.