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

Finite-rotation nodal kinematics for NLGEOM. More...

Functions/Subroutines

subroutine, public fstr_ensure_finite_rotation_state (hecMESH, fstrSOLID, ndof)
 Build the per-node reference frames once, by averaging element shell triads at shared nodes. Already-initialized nodes are left untouched, so repeated calls are idempotent. More...
 
subroutine, public fstr_begin_nodal_kinematics_step (hecMESH, fstrSOLID, ndof)
 Snapshot the converged rotation state at the start of a load step and reset the Newton trial state to it. More...
 
subroutine, public fstr_apply_solution_increment (hecMESH, fstrSOLID, ndof, x)
 Apply the linear-solver solution increment x to the step displacement dunode. More...
 
subroutine, public fstr_commit_solution_increment (hecMESH, fstrSOLID, ndof)
 Commit the converged step increment dunode into the total displacement unode. More...
 
subroutine, public fstr_get_shell_trial_directors (fstrSOLID, thick, nn, nodLOCAL, directors)
 Half-thickness director from the current Newton trial frame (dtriad). More...
 
subroutine, public fstr_get_shell_current_directors (fstrSOLID, thick, nn, nodLOCAL, directors)
 Half-thickness director from the converged frame (triad). More...
 
subroutine, public fstr_get_shell_reference_directors (fstrSOLID, thick, nn, nodLOCAL, directors)
 Half-thickness director from the fixed reference frame (ref_triad). More...
 
subroutine fstr_store_shell_triad_node (fstrSOLID, node_id, triad, mode)
 Store the reference frame into all rotation-state arrays for a fresh node. More...
 

Detailed Description

Finite-rotation nodal kinematics for NLGEOM.

This module manages the per-node geometric state (nodal frame / triad plus a drilling scalar) needed when the Newton solution increment cannot be applied as a simple vector addition to the nodal degrees of freedom.

Currently the only element type that activates this path is MITC4 shell (741) under Total Lagrangian kinematics with an elastic material. The predicate is shared with setup so the nodal state is allocated only when this path is used.

Design notes:

  • The element-level rotation algebra (exp/log maps, triad updates) lives in m_static_LIB_shell. This module only orchestrates per-node state and the application of the global solution increment.
  • To extend finite-rotation support to beam elements, Updated Lagrangian or inelastic materials, update the shared predicate and add element-specific frame initialisation; the solver and update paths need no change.

Function/Subroutine Documentation

◆ fstr_apply_solution_increment()

subroutine, public m_fstr_nodalkinematics::fstr_apply_solution_increment ( type (hecmwst_local_mesh), intent(in)  hecMESH,
type (fstr_solid), intent(inout)  fstrSOLID,
integer(kind=kint), intent(in)  ndof,
real(kind=kreal), dimension(:), intent(in)  x 
)

Apply the linear-solver solution increment x to the step displacement dunode.

For ordinary nodes this is the usual dunode += x. For finite-rotation shell nodes the translational part is added directly while the rotational part is composed onto the trial nodal frame (dtriad) and drilling scalar.

Definition at line 168 of file fstr_NodalKinematics.f90.

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

◆ fstr_begin_nodal_kinematics_step()

subroutine, public m_fstr_nodalkinematics::fstr_begin_nodal_kinematics_step ( type (hecmwst_local_mesh), intent(in)  hecMESH,
type (fstr_solid), intent(inout)  fstrSOLID,
integer(kind=kint), intent(in)  ndof 
)

Snapshot the converged rotation state at the start of a load step and reset the Newton trial state to it.

Definition at line 146 of file fstr_NodalKinematics.f90.

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

◆ fstr_commit_solution_increment()

subroutine, public m_fstr_nodalkinematics::fstr_commit_solution_increment ( type (hecmwst_local_mesh), intent(in)  hecMESH,
type (fstr_solid), intent(inout)  fstrSOLID,
integer(kind=kint), intent(in)  ndof 
)

Commit the converged step increment dunode into the total displacement unode.

For finite-rotation shell nodes the converged trial frame (dtriad) and drilling scalar become the new reference state.

Definition at line 229 of file fstr_NodalKinematics.f90.

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

◆ fstr_ensure_finite_rotation_state()

subroutine, public m_fstr_nodalkinematics::fstr_ensure_finite_rotation_state ( type (hecmwst_local_mesh), intent(in)  hecMESH,
type (fstr_solid), intent(inout)  fstrSOLID,
integer(kind=kint), intent(in)  ndof 
)

Build the per-node reference frames once, by averaging element shell triads at shared nodes. Already-initialized nodes are left untouched, so repeated calls are idempotent.

Definition at line 42 of file fstr_NodalKinematics.f90.

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

◆ fstr_get_shell_current_directors()

subroutine, public m_fstr_nodalkinematics::fstr_get_shell_current_directors ( type (fstr_solid), intent(in)  fstrSOLID,
real(kind=kreal), intent(in)  thick,
integer(kind=kint), intent(in)  nn,
integer(kind=kint), dimension(:), intent(in)  nodLOCAL,
real(kind=kreal), dimension(3, nn), intent(out)  directors 
)

Half-thickness director from the converged frame (triad).

Definition at line 301 of file fstr_NodalKinematics.f90.

Here is the caller graph for this function:

◆ fstr_get_shell_reference_directors()

subroutine, public m_fstr_nodalkinematics::fstr_get_shell_reference_directors ( type (fstr_solid), intent(in)  fstrSOLID,
real(kind=kreal), intent(in)  thick,
integer(kind=kint), intent(in)  nn,
integer(kind=kint), dimension(:), intent(in)  nodLOCAL,
real(kind=kreal), dimension(3, nn), intent(out)  directors 
)

Half-thickness director from the fixed reference frame (ref_triad).

Definition at line 325 of file fstr_NodalKinematics.f90.

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

◆ fstr_get_shell_trial_directors()

subroutine, public m_fstr_nodalkinematics::fstr_get_shell_trial_directors ( type (fstr_solid), intent(in)  fstrSOLID,
real(kind=kreal), intent(in)  thick,
integer(kind=kint), intent(in)  nn,
integer(kind=kint), dimension(:), intent(in)  nodLOCAL,
real(kind=kreal), dimension(3, nn), intent(out)  directors 
)

Half-thickness director from the current Newton trial frame (dtriad).

Definition at line 277 of file fstr_NodalKinematics.f90.

Here is the caller graph for this function:

◆ fstr_store_shell_triad_node()

subroutine m_fstr_nodalkinematics::fstr_store_shell_triad_node ( type (fstr_solid), intent(inout)  fstrSOLID,
integer(kind=kint), intent(in)  node_id,
real(kind=kreal), dimension(3, 3), intent(in)  triad,
integer(kind=kint), intent(in)  mode 
)

Store the reference frame into all rotation-state arrays for a fresh node.

Definition at line 435 of file fstr_NodalKinematics.f90.

Here is the caller graph for this function: