CalculiX  2.13
A Free Software Three-Dimensional Structural Finite Element Program
beamintscheme.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine beamintscheme (lakonl, mint3d, npropstart, prop, kk, xi, et, ze, weight)
 

Function/Subroutine Documentation

◆ beamintscheme()

subroutine beamintscheme ( character*8, intent(in)  lakonl,
integer, intent(inout)  mint3d,
integer, intent(in)  npropstart,
real*8, dimension(*), intent(in)  prop,
integer, intent(in)  kk,
real*8, intent(inout)  xi,
real*8, intent(inout)  et,
real*8, intent(inout)  ze,
real*8, intent(inout)  weight 
)
21 !
22 ! provides the integration scheme for beams with a cross section
23 ! which is not rectangular nor elliptical
24 !
25 ! mint3d: number of integration points (returned if kk=0)
26 ! xi,et,ze: local coordinates of integration point kk
27 ! weight: weight for integration point kk
28 !
29  implicit none
30 !
31  character*8 lakonl
32 !
33  integer mint3d,npropstart,jj,kk
34 !
35  real*8 prop(*),xi,et,ze,weight,ratio,ratio2,dtheta,theta,r,
36  & t1,t2,t3,t4,a,b
37 !
38  intent(in) lakonl,npropstart,prop,
39  & kk
40 !
41  intent(inout) weight,xi,et,ze,mint3d
42 !
43  if(lakonl(8:8).eq.'P') then
44 !
45 ! pipe cross section
46 !
47  if(kk.eq.0) then
48  mint3d=16
49  return
50  endif
51 !
52 ! ratio of inner radius to outer radius
53 !
54  ratio=(prop(npropstart+1)-prop(npropstart+2))/
55  & prop(npropstart+1)
56  ratio2=ratio*ratio
57 !
58  if(kk.gt.8) then
59  jj=kk-8
60  xi=1.d0/dsqrt(3.d0)
61  else
62  jj=kk
63  xi=-1.d0/dsqrt(3.d0)
64  endif
65 !
66 ! pi/4
67 !
68  dtheta=datan(1.d0)
69 !
70  theta=(jj-1)*dtheta
71  r=dsqrt((ratio2+1.d0)/2.d0)
72 !
73  et=r*dcos(theta)
74  ze=r*dsin(theta)
75  weight=dtheta*(1.d0-ratio2)/2.d0
76 c
77 c Box cross section
78  elseif(lakonl(8:8).eq.'B') then
79  if(kk.eq.0) then
80  mint3d=32
81  return
82  endif
83 !
84 ! 2 pts in long direction xi
85 !
86  if(kk.gt.16) then
87  jj=kk-16
88  xi=1.d0/dsqrt(3.d0)
89  else
90  jj=kk
91  xi=-1.d0/dsqrt(3.d0)
92  endif
93 !
94 ! pts in cross sections
95 !
96  a=prop(npropstart+1)
97  b=prop(npropstart+2)
98  t1=prop(npropstart+3)
99  t2=prop(npropstart+4)
100  t3=prop(npropstart+5)
101  t4=prop(npropstart+6)
102 !
103  if(jj.eq.1)then
104  et = -(t4-b)/b
105  ze = -(t1-a)/a
106  weight = -((((-2*a)+2*t1+t3)*t4+t1*t2-2*b*t1)/(a*b))/6.0e+0
107  elseif(jj.eq.2)then
108  et = -((3*t4-t2-2*b)/b)/4.0e+0
109  ze = -(t1-a)/a
110  weight = -((2*t1*t4+2*t1*t2-4*b*t1)/(a*b))/3.0e+0
111  elseif(jj.eq.3)then
112  et = -((t4-t2)/b)/2.0e+0
113  ze = -(t1-a)/a
114  weight = -((t1*t4+t1*t2-2*b*t1)/(a*b))/3.0e+0
115  elseif(jj.eq.4)then
116  et = -((t4-3*t2+2*b)/b)/4.0e+0
117  ze = -(t1-a)/a
118  weight = -((2*t1*t4+2*t1*t2-4*b*t1)/(a*b))/3.0e+0
119  elseif(jj.eq.5)then
120  et = (t2-b)/b
121  ze = -(t1-a)/a
122  weight = -((t1*t4+t2*t3+(2*t1-2*a)*t2-2*b*t1)/(a*b))/6.0e+0
123  elseif(jj.eq.6)then
124  et = (t2-b)/b
125  ze = ((t3-3*t1+2*a)/a)/4.0e+0
126  weight = -((2*t2*t3+(2*t1-4*a)*t2)/(a*b))/3.0e+0
127  elseif(jj.eq.7)then
128  et = (t2-b)/b
129  ze = ((t3-t1)/a)/2.0e+0
130  weight = -((t2*t3+(t1-2*a)*t2)/(a*b))/3.0e+0
131  elseif(jj.eq.8)then
132  et = (t2-b)/b
133  ze = ((3*t3-t1-2*a)/a)/4.0e+0
134  weight = -((2*t2*t3+(2*t1-4*a)*t2)/(a*b))/3.0e+0
135  elseif(jj.eq.9)then
136  et = (t2-b)/b
137  ze = (t3-a)/a
138  weight = -((t3*t4+(2*t2-2*b)*t3+(t1-2*a)*t2)/(a*b))/6.0e+0
139  elseif(jj.eq.10)then
140  et = -((t4-3*t2+2*b)/b)/4.0e+0
141  ze = (t3-a)/a
142  weight = -((2*t3*t4+(2*t2-4*b)*t3)/(a*b))/3.0e+0
143  elseif(jj.eq.11)then
144  et = -((t4-t2)/b)/2.0e+0
145  ze = (t3-a)/a
146  weight = -((t3*t4+(t2-2*b)*t3)/(a*b))/3.0e+0
147  elseif(jj.eq.12)then
148  et = -((3*t4-t2-2*b)/b)/4.0e+0
149  ze = (t3-a)/a
150  weight = -((2*t3*t4+(2*t2-4*b)*t3)/(a*b))/3.0e+0
151  elseif(jj.eq.13)then
152  et = -(t4-b)/b
153  ze = (t3-a)/a
154  weight = -((((-2*a)+t1+2*t3)*t4+(t2-2*b)*t3)/(a*b))/6.0e+0
155  elseif(jj.eq.14)then
156  et = -(t4-b)/b
157  ze = ((3*t3-t1-2*a)/a)/4.0e+0
158  weight = -(((2*t3+2*t1-4*a)*t4)/(a*b))/3.0e+0
159  elseif(jj.eq.15)then
160  et = -(t4-b)/b
161  ze = ((t3-t1)/a)/2.0e+0
162  weight = -(((t3+t1-2*a)*t4)/(a*b))/3.0e+0
163  elseif(jj.eq.16)then
164  et = -(t4-b)/b
165  ze = ((t3-3*t1+2*a)/a)/4.0e+0
166  weight = -(((2*t3+2*t1-4*a)*t4)/(a*b))/3.0e+0
167  endif
168  endif
169 !
170  return
Hosted by OpenAircraft.com, (Michigan UAV, LLC)