35
36
37
41 use element_mod , only : nixc,nixtg
42
43
44
45#include "implicit_f.inc"
46
47
48
49
50
51
52#include "com04_c.inc"
53#include "param_c.inc"
54
55
56
57 INTEGER :: IXC(NIXC,*),
58 . IXTG(NIXTG,*),IGEO(NPROPGI,*),IWORKSH(3,*)
60 . thk(*)
61
62 TYPE (DRAPE_) , DIMENSION(*), TARGET :: DRAPE
63 TYPE (STACK_PLY) :: STACK
64 INTEGER, DIMENSION(NUMELC+NUMELTG) :: INDX
65
66
67
68 INTEGER :: II,NPT,PID, IGTYP,IPOS,IPPID,IPMAT,IPANG, IPTHK,
69 . IPPOS, NTHK,ISUBS,J,I3,ISH3N,IE,NSLICE,K,IINT,IPID,IP
70 my_real :: thinning, thkly ,tmin,tmax,thickt,thickc, thk_it
71 TYPE (DRAPE_PLY_), POINTER :: DRAPE_PLY
72
73
75 . a_gauss(9,9),w_gauss(9,9)
76
77 DATA a_gauss /
78 1 0. ,0. ,0. ,
79 1 0. ,0. ,0. ,
80 1 0. ,0. ,0. ,
81 2 -.577350269189626,0.577350269189626,0. ,
82 2 0. ,0. ,0. ,
83 2 0. ,0.
84 3 -.774596669241483,0. ,0.774596669241483,
85 3 0. ,0. ,0. ,
86 3 0. ,0. ,0. ,
87 4 -.861136311594053,-.339981043584856,0.339981043584856,
88 4 0.861136311594053,0. ,0. ,
89 4 0. ,0. ,0. ,
90 5 -.906179845938664,-.538469310105683,0. ,
91 5 0.538469310105683,0.906179845938664,0. ,
92 5 0. ,0. ,0. ,
93 6 -.932469514203152,-.661209386466265,-.238619186083197,
94 6 0.238619186083197,0.661209386466265,0.932469514203152,
95 6 0. ,0. ,0. ,
96 7 -.949107912342759,-.741531185599394,-.405845151377397,
97 7 0. ,0.405845151377397,0.741531185599394,
98 7 0.949107912342759,0. ,0. ,
99 8 -.960289856497536,-.796666477413627,-.525532409916329,
100 8 -.183434642495650,0.183434642495650,0.525532409916329,
101 8 0.796666477413627,0.960289856497536,0. ,
102 9 -.968160239507626,-.836031107326636,-.613371432700590,
103 9 -.324253423403809,0. ,0.324253423403809,
104 9 0.613371432700590,0.836031107326636,0.968160239507626/
105 DATA w_gauss /
106 1 2. ,0. ,0. ,
107 1 0. ,0. ,0. ,
108 1 0. ,0. ,0. ,
109 2 1. ,1. ,0. ,
110 2 0. ,0. ,0. ,
111 2 0. ,0. ,0. ,
112 3 0.555555555555556,0.888888888888889,0.555555555555556,
113 3 0. ,0. ,0. ,
114 3 0. ,0. ,0. ,
115 4 0.347854845137454,0.652145154862546,0.652145154862546,
116 4 0.347854845137454,0. ,0. ,
117 4 0. ,0. ,0. ,
118 5 0.236926885056189,0.478628670499366,0.568888888888889,
119 5 0.478628670499366,0.236926885056189,0. ,
120 5 0. ,0. ,0. ,
121 6 0.171324492379170,0.360761573048139,0.467913934572691,
122 6 0.467913934572691,0.360761573048139,0.171324492379170,
123 6 0. ,0. ,0. ,
124 7 0.129484966168870,0.279705391489277,0.381830050505119,
125 7 0.417959183673469,0.381830050505119,0.279705391489277,
126 7 0.129484966168870,0. ,0. ,
127 8 0.101228536290376,0.222381034453374,0.313706645877887,
128 8 0.362683783378362,0.362683783378362,0.313706645877887,
129 8 0.222381034453374,0.101228536290376,0. ,
130 9 0.081274388361574,0.180648160694857,0.260610696402935,
131 9 0.312347077040003,0.330239355001260,0.312347077040003,
132 9 0.260610696402935,0.180648160694857,0.081274388361574/
133
134
135
136 DO ii=1,numelc
137 npt = iworksh(1,ii)
138 pid = ixc(6,ii)
139 igtyp = igeo(11,pid)
140 IF(igtyp /=17 .AND. igtyp /= 51 .AND. igtyp /= 52) cycle
141 ipos = igeo(99,pid)
142
143
144
145
146 tmin = ep20
147 tmax = -ep20
148 thickt = zero
149 ippid = 2
150 ipmat = ippid + npt
151 ipang = 1
152 ipthk = ipang + npt
153 ippos = ipthk + npt
154 nthk = ippos + npt
155 isubs = iworksh(3,ii)
156 thickt = stack%GEO(1 ,isubs)
157 ie = indx(ii)
158!
159 thickc = zero
160 IF(ie == 0 ) THEN
161 DO j=1,npt
162 i3 = ipthk + j
163 thkly = stack%GEO(i3 ,isubs)*thickt
164 thickc = thickt + thkly
165 ENDDO
166 ELSE
167 IF(igtyp == 51 .OR. igtyp == 52) THEN
168 DO j=1,npt
169 i3 = ipthk + j
170 thkly = stack%GEO(i3 ,isubs)*thickt
171 ipid = stack%IGEO(ippid + j,isubs)
172 iint = igeo(47,pid)
173 ip = drape(ie)%INDX_PLY(j)
174 IF(ip > 0) THEN
175 drape_ply => drape(ie)%DRAPE_PLY(ip)
176 nslice = drape_ply%NSLICE
177 IF(iint == 1) THEN
178 DO k=1,nslice
179 thk_it = thkly/nslice
180 thinning = drape_ply%RDRAPE(k,1)
181 thk_it = thk_it*thinning
182 thickc = thickc + thk_it
183 ENDDO
184 ELSEIF(iint == 2) THEN
185 DO k=1,nslice
186 thk_it = half*thkly*w_gauss(k,nslice)
187 thinning = drape_ply%RDRAPE(k,1)
188 thk_it = thk_it*thinning
189 thickc = thickc + thk_it
190 ENDDO
191 ENDIF
192 ELSE
193 thickc = thickc + thkly
194 ENDIF
195 ENDDO
196 ELSE
197 DO j=1,npt
198 ip= drape(ie)%INDX_PLY(j)
199 i3 = ipthk + j
200 thkly = stack%GEO(i3 ,isubs)*thickt
201 IF(ip > 0) THEN
202 drape_ply => drape(ie)%DRAPE_PLY(ip)
203 thinning = drape_ply%RDRAPE(1,1)
204 thkly = thkly*thinning
205 ENDIF
206 thickc = thickc + thkly
207 ENDDO
208 ENDIF
209 drape(ie)%THICK = thickc
210 ENDIF
211 IF (thk(ii) == zero) thk(ii) = thickc
212 ENDDO
213
214 DO ii=1,numeltg
215 ish3n = numelc + ii
216 npt = iworksh(1,ish3n)
217 pid = ixtg(5,ii)
218 igtyp = igeo(11,pid)
219 IF(igtyp /=17 .AND. igtyp /= 51 .AND. igtyp /= 52) cycle
220 ipos = igeo(99,pid)
221
222
223
224
225 tmin = ep20
226 tmax = -ep20
227 thickt = zero
228 ippid = 2
229 ipmat = ippid + npt
230 ipang = 1
231 ipthk = ipang + npt
232 ippos = ipthk + npt
233 nthk = ippos + npt
234 isubs =iworksh(3,ish3n)
235 thickt = stack%GEO(1 ,isubs)
236
237 ie = indx(ish3n)
238 thickc = zero
239 IF(ie == 0 ) THEN
240 DO j=1,npt
241 i3 = ipthk + j
242 thkly = stack%GEO(i3 ,isubs)*thickt
243 thickc = thickc
244 ENDDO
245 ELSE
246 IF(igtyp == 51 .OR. igtyp == 52) THEN
247 DO j=1,npt
248 i3 = ipthk + j
249 ip= drape(ie)%INDX_PLY(j)
250 thkly = stack%GEO(i3 ,isubs)*thickt
251 ipid = stack%IGEO(ippid + j,isubs)
252 iint = igeo(47,pid)
253 IF(ip > 0) THEN
254 drape_ply => drape(ie)%DRAPE_PLY(ip)
255 nslice = drape_ply%NSLICE
256 IF(iint == 1) THEN
257 DO k=1,nslice
258 thk_it = thkly/nslice
259 thinning = drape_ply%RDRAPE(k,1)
260 thk_it = thk_it*thinning
261 thickc = thickc + thk_it
262 ENDDO
263 ELSEIF(iint == 2) THEN
264 DO k=1,nslice
265 thk_it = half*thkly*w_gauss(k,nslice)
266 thinning = drape_ply%RDRAPE(k,1)
267 thk_it = thk_it*thinning
268 thickc = thickc + thk_it
269 ENDDO
270 ENDIF
271 ELSE
272 thickc = thickc + thkly
273 ENDIF
274 ENDDO
275 ELSE
276 DO j=1,npt
277 i3 = ipthk + j
278 ip= drape(ie)%INDX_PLY(j)
279 thkly = stack%GEO(i3 ,isubs)*thickt
280 IF(ip > 0) THEN
281 drape_ply => drape(ie)%DRAPE_PLY(ip)
282 thinning = drape_ply%RDRAPE(1,1)
283 thkly = thkly*thinning
284 ENDIF
285 thickc = thickc + thkly
286 ENDDO
287 ENDIF
288 drape(ie)%THICK = thickc
289 ENDIF
290 IF (thk(ish3n) == zero) thk(ish3n) = thickc
291 ENDDO
292
293
294 RETURN