FrontISTR  5.9.0
Large-scale structural analysis program with finit element method
tying.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 module mitc_tying
8  implicit none
9 
10  private
11 
12  integer, parameter :: kreal = kind(0.0d0)
13  real(kind=kreal), parameter :: s13 = sqrt(1.0d0/3.0d0)
14  real(kind=kreal), parameter :: s35 = sqrt(3.0d0/5.0d0)
15 
16  real(kind=kreal), parameter :: mitc4_points(2, 4) = reshape((/ &
17  0.0d0, -1.0d0, &
18  1.0d0, 0.0d0, &
19  0.0d0, 1.0d0, &
20  -1.0d0, 0.0d0 &
21  /), (/ 2, 4 /))
22 
23  real(kind=kreal), parameter :: mitc9_rr_points(2, 6) = reshape((/ &
24  -s13, -s35, &
25  s13, -s35, &
26  s13, s35, &
27  -s13, s35, &
28  s13, 0.0d0, &
29  -s13, 0.0d0 &
30  /), (/ 2, 6 /))
31 
32  real(kind=kreal), parameter :: mitc9_ss_points(2, 6) = reshape((/ &
33  -s35, -s13, &
34  0.0d0, -s13, &
35  s35, -s13, &
36  s35, s13, &
37  0.0d0, s13, &
38  -s35, s13 &
39  /), (/ 2, 6 /))
40 
41  real(kind=kreal), parameter :: mitc9_rs_points(2, 4) = reshape((/ &
42  -s13, -s13, &
43  s13, -s13, &
44  s13, s13, &
45  -s13, s13 &
46  /), (/ 2, 4 /))
47 
48  real(kind=kreal), parameter :: mitc3_points(2, 3) = reshape((/ &
49  0.5d0, 0.0d0, &
50  0.0d0, 0.5d0, &
51  0.5d0, 0.5d0 &
52  /), (/ 2, 3 /))
53 
55  real(kind=kreal), parameter, public :: mitc9_xi_sign(6, 2) = reshape((/ &
56  -1.0d0, 1.0d0, 1.0d0, -1.0d0, 1.0d0, -1.0d0, &
57  -1.0d0, 0.0d0, 1.0d0, 1.0d0, 0.0d0, -1.0d0 &
58  /), (/ 6, 2 /))
59 
60  real(kind=kreal), parameter, public :: mitc9_eta_sign(6, 2) = reshape((/ &
61  -1.0d0, -1.0d0, 1.0d0, 1.0d0, 0.0d0, 0.0d0, &
62  -1.0d0, -1.0d0, -1.0d0, 1.0d0, 1.0d0, 1.0d0 &
63  /), (/ 6, 2 /))
64 
65  public :: numoftyingsets
66  public :: numoftyingpoints
67  public :: gettyingpoint
68 
69 contains
70 
72  integer function numoftyingsets(etype)
73  integer, intent(in) :: etype
74 
75  select case (etype)
77  numoftyingsets = 1
78  case (fe_mitc9_shell)
79  numoftyingsets = 3
80  case default
81  stop "Unsupported MITC shell element type"
82  end select
83  end function numoftyingsets
84 
86  integer function numoftyingpoints(etype, iset)
87  integer, intent(in) :: etype, iset
88 
89  if (iset < 1 .or. iset > numoftyingsets(etype)) stop "Invalid MITC tying set"
90 
91  select case (etype)
92  case (fe_mitc3_shell)
94  case (fe_mitc4_shell)
96  case (fe_mitc9_shell)
97  select case (iset)
98  case (1, 2)
100  case (3)
101  numoftyingpoints = 4
102  end select
103  end select
104  end function numoftyingpoints
105 
107  subroutine gettyingpoint(etype, iset, ip, pos)
108  integer, intent(in) :: etype, iset, ip
109  real(kind=kreal), intent(out) :: pos(2)
110 
111  if (iset < 1 .or. iset > numoftyingsets(etype)) stop "Invalid MITC tying set"
112  if (ip < 1 .or. ip > numoftyingpoints(etype, iset)) stop "Invalid MITC tying point"
113 
114  select case (etype)
115  case (fe_mitc3_shell)
116  pos = mitc3_points(:, ip)
117  case (fe_mitc4_shell)
118  pos = mitc4_points(:, ip)
119  case (fe_mitc9_shell)
120  select case (iset)
121  case (1)
122  pos = mitc9_rr_points(:, ip)
123  case (2)
124  pos = mitc9_ss_points(:, ip)
125  case (3)
126  pos = mitc9_rs_points(:, ip)
127  end select
128  end select
129  end subroutine gettyingpoint
130 
131 end module mitc_tying
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
integer, parameter fe_mitc9_shell
Definition: element.f90:96
integer, parameter fe_mitc3_shell
Definition: element.f90:93
MITC assumed-strain tying-point rules.
Definition: tying.f90:6
integer function, public numoftyingpoints(etype, iset)
Number of tying points in one tying set.
Definition: tying.f90:87
real(kind=kreal), dimension(6, 2), parameter, public mitc9_eta_sign
Definition: tying.f90:60
subroutine, public gettyingpoint(etype, iset, ip, pos)
Natural coordinate of one MITC tying point.
Definition: tying.f90:108
real(kind=kreal), dimension(6, 2), parameter, public mitc9_xi_sign
Sign patterns used by the MITC9 interpolation polynomials.
Definition: tying.f90:55
integer function, public numoftyingsets(etype)
Number of tying-point sets used by an MITC shell element.
Definition: tying.f90:73