FrontISTR  5.9.0
Large-scale structural analysis program with finit element method
fstr_FiniteRotationKinematics.f90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
2 ! Copyright (c) 2019 FrontISTR Commons
3 ! This software is released under the MIT License, see LICENSE.txt
4 !-------------------------------------------------------------------------------
6 
8  use hecmw
9  use elementinfo, only: fe_mitc4_shell
10  use m_fstr, only: fstr_solid
12  implicit none
13 
14  private
15 
19 
20 contains
21 
22  logical function fstr_uses_finite_rotation_kinematics( etype, nn, material )
23  integer(kind=kint), intent(in) :: etype
24  integer(kind=kint), intent(in) :: nn
25  type(tmaterial), intent(in) :: material
26 
27  fstr_uses_finite_rotation_kinematics = ( etype == fe_mitc4_shell .and. nn == 4 &
28  .and. material%nlgeom_flag == totallag .and. iselastic( material%mtype ) )
30 
31  logical function fstr_has_finite_rotation_kinematics( hecMESH, fstrSOLID )
32  type (hecmwst_local_mesh), intent(in) :: hecmesh
33  type (fstr_solid), intent(in) :: fstrsolid
34 
35  integer(kind=kint) :: itype, is, ie, ic_type, icel, iis, nn
36 
38  if( hecmesh%n_dof < 6 ) return
39  if( .not. associated( fstrsolid%elements ) ) return
40 
41  do itype = 1, hecmesh%n_elem_type
42  is = hecmesh%elem_type_index(itype-1) + 1
43  ie = hecmesh%elem_type_index(itype)
44  ic_type = hecmesh%elem_type_item(itype)
45  if( ic_type /= fe_mitc4_shell ) cycle
46 
47  do icel = is, ie
48  iis = hecmesh%elem_node_index(icel-1)
49  nn = hecmesh%elem_node_index(icel) - iis
50  if( .not. associated( fstrsolid%elements(icel)%gausses ) ) cycle
51  if( fstr_uses_finite_rotation_kinematics( ic_type, nn, &
52  fstrsolid%elements(icel)%gausses(1)%pMaterial ) ) then
54  return
55  endif
56  end do
57  end do
59 
60  subroutine fstr_mark_finite_rotation_nodes( hecMESH, fstrSOLID, ndof, shell_node_mode )
61  type (hecmwst_local_mesh), intent(in) :: hecmesh
62  type (fstr_solid), intent(in) :: fstrsolid
63  integer(kind=kint), intent(in) :: ndof
64  integer(kind=kint), intent(out) :: shell_node_mode(:)
65 
66  integer(kind=kint) :: itype, is, ie, ic_type, icel, iis, nn, j, node_id
67 
68  shell_node_mode(:) = 0
69  if( ndof < 6 ) return
70  if( .not. associated( fstrsolid%elements ) ) return
71 
72  do itype = 1, hecmesh%n_elem_type
73  is = hecmesh%elem_type_index(itype-1) + 1
74  ie = hecmesh%elem_type_index(itype)
75  ic_type = hecmesh%elem_type_item(itype)
76  if( ic_type /= fe_mitc4_shell ) cycle
77 
78  do icel = is, ie
79  iis = hecmesh%elem_node_index(icel-1)
80  nn = hecmesh%elem_node_index(icel) - iis
81  if( .not. associated( fstrsolid%elements(icel)%gausses ) ) cycle
82  if( .not. fstr_uses_finite_rotation_kinematics( ic_type, nn, &
83  fstrsolid%elements(icel)%gausses(1)%pMaterial ) ) cycle
84 
85  do j = 1, nn
86  node_id = hecmesh%elem_node_item(iis+j)
87  if( node_id > 0 .and. node_id <= size(shell_node_mode) ) shell_node_mode(node_id) = 1
88  end do
89  end do
90  end do
91  end subroutine fstr_mark_finite_rotation_nodes
92 
This module encapsulate the basic functions of all elements provide by this software.
Definition: element.f90:43
integer, parameter fe_mitc4_shell
Definition: element.f90:94
Definition: hecmw.f90:6
Shared predicates for finite-rotation nodal kinematics.
logical function, public fstr_has_finite_rotation_kinematics(hecMESH, fstrSOLID)
logical function, public fstr_uses_finite_rotation_kinematics(etype, nn, material)
subroutine, public fstr_mark_finite_rotation_nodes(hecMESH, fstrSOLID, ndof, shell_node_mode)
This module defines common data and basic structures for analysis.
Definition: m_fstr.F90:15
This module summarizes all information of material properties.
Definition: material.f90:6
integer(kind=kint), parameter totallag
Definition: material.f90:14
logical function iselastic(mtype)
If it is an elastic material?
Definition: material.f90:354
Structure to manage all material related data.
Definition: material.f90:167