![]() |
FrontISTR
5.9.0
Large-scale structural analysis program with finit element method
|
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... | |
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:
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.