FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
hex20n.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 !-------------------------------------------------------------------------------
8  integer, parameter, private :: kreal = kind(0.0d0)
9 
10 contains
11  subroutine shapefunc_hex20n(localcoord,func)
12  real(kind=kreal) :: localcoord(3)
13  real(kind=kreal) :: func(20)
14  real(kind=kreal) ri,si,ti,rp,sp,tp,rm,sm,tm
15  ri=localcoord(1); si=localcoord(2); ti=localcoord(3)
16  rp=1.0+ri; sp=1.0+si; tp=1.0+ti
17  rm=1.0-ri; sm=1.0-si; tm=1.0-ti
18  func(1)=-0.125*rm*sm*tm*(2.0+ri+si+ti)
19  func(2)=-0.125*rp*sm*tm*(2.0-ri+si+ti)
20  func(3)=-0.125*rp*sp*tm*(2.0-ri-si+ti)
21  func(4)=-0.125*rm*sp*tm*(2.0+ri-si+ti)
22  func(5)=-0.125*rm*sm*tp*(2.0+ri+si-ti)
23  func(6)=-0.125*rp*sm*tp*(2.0-ri+si-ti)
24  func(7)=-0.125*rp*sp*tp*(2.0-ri-si-ti)
25  func(8)=-0.125*rm*sp*tp*(2.0+ri-si-ti)
26  func(9)=0.25*(1.0-ri**2)*sm*tm
27  func(10)=0.25*rp*(1.0-si**2)*tm
28  func(11)=0.25*(1.0-ri**2)*sp*tm
29  func(12)=0.25*rm*(1.0-si**2)*tm
30  func(13)=0.25*(1.0-ri**2)*sm*tp
31  func(14)=0.25*rp*(1.0-si**2)*tp
32  func(15)=0.25*(1.0-ri**2)*sp*tp
33  func(16)=0.25*rm*(1.0-si**2)*tp
34  func(17)=0.25*rm*sm*(1.0-ti**2)
35  func(18)=0.25*rp*sm*(1.0-ti**2)
36  func(19)=0.25*rp*sp*(1.0-ti**2)
37  func(20)=0.25*rm*sp*(1.0-ti**2)
38  end subroutine
39 
40  subroutine shapederiv_hex20n(localcoord,func)
41  real(kind=kreal) :: localcoord(3)
42  real(kind=kreal) :: func(20,3)
43  real(kind=kreal) ri,si,ti,rp,sp,tp,rm,sm,tm
44  ri=localcoord(1); si=localcoord(2); ti=localcoord(3)
45  rp=1.d0+ri; sp=1.d0+si; tp=1.d0+ti
46  rm=1.d0-ri; sm=1.d0-si; tm=1.d0-ti
47  ! FOR R-COORDINATE
48  func(1,1)=-0.125*rm*sm*tm+0.125*sm*tm*(2.0+ri+si+ti)
49  func(2,1)=+0.125*rp*sm*tm-0.125*sm*tm*(2.0-ri+si+ti)
50  func(3,1)=+0.125*rp*sp*tm-0.125*sp*tm*(2.0-ri-si+ti)
51  func(4,1)=-0.125*rm*sp*tm+0.125*sp*tm*(2.0+ri-si+ti)
52  func(5,1)=-0.125*rm*sm*tp+0.125*sm*tp*(2.0+ri+si-ti)
53  func(6,1)=+0.125*rp*sm*tp-0.125*sm*tp*(2.0-ri+si-ti)
54  func(7,1)=+0.125*rp*sp*tp-0.125*sp*tp*(2.0-ri-si-ti)
55  func(8,1)=-0.125*rm*sp*tp+0.125*sp*tp*(2.0+ri-si-ti)
56  func(9,1 )=-0.50*ri*sm*tm
57  func(10,1)=+0.25*(1.0-si**2)*tm
58  func(11,1)=-0.50*ri*sp*tm
59  func(12,1)=-0.25*(1.0-si**2)*tm
60  func(13,1)=-0.50*ri*sm*tp
61  func(14,1)=+0.25*(1.0-si**2)*tp
62  func(15,1)=-0.50*ri*sp*tp
63  func(16,1)=-0.25*(1.0-si**2)*tp
64  func(17,1)=-0.25*sm*(1.0-ti**2)
65  func(18,1)=+0.25*sm*(1.0-ti**2)
66  func(19,1)=+0.25*sp*(1.0-ti**2)
67  func(20,1)=-0.25*sp*(1.0-ti**2)
68  ! FOR S-COORDINATE
69  func(1,2)=-0.125*rm*sm*tm+0.125*rm*tm*(2.0+ri+si+ti)
70  func(2,2)=-0.125*rp*sm*tm+0.125*rp*tm*(2.0-ri+si+ti)
71  func(3,2)=+0.125*rp*sp*tm-0.125*rp*tm*(2.0-ri-si+ti)
72  func(4,2)=+0.125*rm*sp*tm-0.125*rm*tm*(2.0+ri-si+ti)
73  func(5,2)=-0.125*rm*sm*tp+0.125*rm*tp*(2.0+ri+si-ti)
74  func(6,2)=-0.125*rp*sm*tp+0.125*rp*tp*(2.0-ri+si-ti)
75  func(7,2)=+0.125*rp*sp*tp-0.125*rp*tp*(2.0-ri-si-ti)
76  func(8,2)=+0.125*rm*sp*tp-0.125*rm*tp*(2.0+ri-si-ti)
77  func(9,2)=-0.25*(1.0-ri**2)*tm
78  func(10,2)=-0.50*rp*si*tm
79  func(11,2)=+0.25*(1.0-ri**2)*tm
80  func(12,2)=-0.50*rm*si*tm
81  func(13,2)=-0.25*(1.0-ri**2)*tp
82  func(14,2)=-0.50*rp*si*tp
83  func(15,2)=+0.25*(1.0-ri**2)*tp
84  func(16,2)=-0.50*rm*si*tp
85  func(17,2)=-0.25*rm*(1.0-ti**2)
86  func(18,2)=-0.25*rp*(1.0-ti**2)
87  func(19,2)=+0.25*rp*(1.0-ti**2)
88  func(20,2)=+0.25*rm*(1.0-ti**2)
89  ! FOR T-COORDINATE
90  func(1,3)=-0.125*rm*sm*tm+0.125*rm*sm*(2.0+ri+si+ti)
91  func(2,3)=-0.125*rp*sm*tm+0.125*rp*sm*(2.0-ri+si+ti)
92  func(3,3)=-0.125*rp*sp*tm+0.125*rp*sp*(2.0-ri-si+ti)
93  func(4,3)=-0.125*rm*sp*tm+0.125*rm*sp*(2.0+ri-si+ti)
94  func(5,3)=+0.125*rm*sm*tp-0.125*rm*sm*(2.0+ri+si-ti)
95  func(6,3)=+0.125*rp*sm*tp-0.125*rp*sm*(2.0-ri+si-ti)
96  func(7,3)=+0.125*rp*sp*tp-0.125*rp*sp*(2.0-ri-si-ti)
97  func(8,3)=+0.125*rm*sp*tp-0.125*rm*sp*(2.0+ri-si-ti)
98  func(9,3)=-0.25*(1.0-ri**2)*sm
99  func(10,3)=-0.25*rp*(1.0-si**2)
100  func(11,3)=-0.25*(1.0-ri**2)*sp
101  func(12,3)=-0.25*rm*(1.0-si**2)
102  func(13,3)=0.25*(1.0-ri**2)*sm
103  func(14,3)=0.25*rp*(1.0-si**2)
104  func(15,3)=0.25*(1.0-ri**2)*sp
105  func(16,3)=0.25*rm*(1.0-si**2)
106  func(17,3)=-0.5*rm*sm*ti
107  func(18,3)=-0.5*rp*sm*ti
108  func(19,3)=-0.5*rp*sp*ti
109  func(20,3)=-0.5*rm*sp*ti
110  end subroutine
111 
112 end module
shape_hex20n::shapefunc_hex20n
subroutine shapefunc_hex20n(localcoord, func)
Definition: hex20n.f90:12
shape_hex20n
This module contains functions for interpolation in 20 node hexahedral element (Serendipity interpola...
Definition: hex20n.f90:7
shape_hex20n::shapederiv_hex20n
subroutine shapederiv_hex20n(localcoord, func)
Definition: hex20n.f90:41