49
50
51
55 use element_mod , only :nixs,nixc,nixtg
56
57
58
59#include "implicit_f.inc"
60
61
62
63#include "com04_c.inc"
64#include "param_c.inc"
65#include "scr08_c.inc"
66
67
68
69 INTEGER NRT, NINT, NSN, NTY, NOINT, IR
71 . slsfac, gap
72 INTEGER IRECT(4,*), IXS(NIXS,*), IXC(NIXC,*),
73 . NSV(*), IXTG(NIXTG,*), NSEG(*), LNSV(*),
74 . KNOD2ELS(*), KNOD2ELC(*), KNOD2ELTG(*), NOD2ELS(*), NOD2ELC(*),
75 . NOD2ELTG(*),IXS10(*), IXS16(*), IXS20(*),
76 . IGEO(NPROPGI,*),IWORKSH(3,*)
78 . x(3,*), stf(*), pm(npropm,*), geo(npropg,*), stfn(*),thk
79 . gapn(*),stf8(*) ,fmax, depth, fillsol(*),pm_stack(20,*)
80 INTEGER ID
81 CHARACTER(LEN=NCHARTITLE) :: TITR
82 TYPE (SURF_) :: IGRSURF
83
84
85
86 INTEGER NDX, I, J, INRT, NELS, MT, JJ, JJJ, NELC,
87 . MG, NUM, NPT, LL, NELTG,IGTYP,IPGMAT,IGMAT,
88 . ISUBSTACK, IG, IL
89
91 . dxm,
area, vol, dx,slope,stfmin
92
93
94
95
96
97
98
99
100
101
102 dxm=zero
103 ndx=0
104 ipgmat = 700
105
106 IF (nty==8) THEN
107 gapn(1:nrt) = zero
108 stf8(1:nrt) = zero
109 ENDIF
110 stfmin = ep20
111
112 DO i=1,nrt
113 stf(i)=zero
114 inrt=i
115
116 CALL inelts(x ,irect,ixs ,nint,nels ,
117 . inrt ,
area ,noint,ir ,igrsurf%ELTYP,
118 . igrsurf%ELEM)
119 IF(nels/=0)THEN
120 mt=ixs(1,nels)
121 IF(mt>0)THEN
122 DO jj=1,8
123 jjj=ixs(jj+1,nels)
124 xc(jj)=x(1,jjj)
125 yc(jj)=x(2,jjj)
126 zc(jj)=x(3,jjj)
127 END DO
129 stf(i)=slsfac*fillsol(nels)*
area*
area*pm(32,mt)/vol
130 stfmin =
min(stfmin,stf(i))
131 ELSE
132 IF(nint>=0) THEN
134 . msgtype=msgwarning,
135 . anmode=aninfo_blind_2,
137 . c1=titr,
138 . i2=ixs(nixs,nels),
139 . c2='SOLID',
140 . i3=i)
141 ENDIF
142 IF(nint<0) THEN
144 . msgtype=msgwarning,
145 . anmode=aninfo_blind_2,
147 . c1=titr,
148 . i2=ixs(nixs,nels),
149 . c2='SOLID',
150 . i3=i)
151 ENDIF
152 ENDIF
153 GO TO 500
154 ELSE
155 CALL ineltc(nelc ,neltg ,inrt ,igrsurf%ELTYP, igrsurf%ELEM)
156
157 IF(neltg/=0) THEN
158 mt=ixtg(1,neltg)
159 mg=ixtg(5,neltg)
160 igtyp = igeo(11,mg)
161 igmat = igeo(98,mg)
162 dx=geo(1,mg)
163 IF(igtyp == 17 .OR. igtyp == 51 .OR. igtyp ==52) dx = thk(numelc + neltg)
164 IF (nty==8) gapn(i) = dx/two
165 dxm=dxm+dx
166 ndx=ndx+1
167 IF(mt>0)THEN
168 IF( igtyp == 11 .AND. igmat > 0) THEN
169 stf(i)=slsfac*dx*geo(ipgmat + 2 ,mg)
170 stfmin =
min(stfmin,stf(i))
171 ELSEIF(igtyp == 52 .OR.
172 . ((igtyp == 17 .OR. igtyp == 51) .AND. igmat > 0))THEN
173 isubstack = iworksh(3,numelc+neltg)
174 stf(i)=slsfac*dx*pm_stack(2,isubstack)
175 stfmin =
min(stfmin,stf(i))
176 ELSE
177 stf(i)=slsfac*dx*pm(20,mt)
178 stfmin =
min(stfmin,stf(i))
179 ENDIF
180 ELSE
181 IF(nint>=0) THEN
183 . msgtype=msgwarning,
184 . anmode=aninfo_blind_2,
186 . c1=titr,
187 . i2=ixtg(nixtg
188 . c2='SHELL',
189 . i3=i)
190 END IF
191 IF(nint<0) THEN
193 . msgtype=msgwarning,
194 . anmode=aninfo_blind_2,
196 . c1=titr,
197 . i2=ixtg(nixtg,neltg),
198 . c2='SHELL',
199 . i3=i)
200 END IF
201 END IF
202 GO TO 500
203 ELSEIF(nelc/=0) THEN
204 mt=ixc(1,nelc)
205 mg=ixc(6,nelc)
206 igtyp = igeo(11,mg)
207 igmat = igeo(98,mg)
208 dx=geo(1,mg)
209 IF(igtyp == 17 .OR. igtyp == 51) dx = thk(nelc)
210 IF (nty==8) gapn(i) = dx/two
211 dxm=dxm+dx
212 ndx=ndx+1
213 IF(mt>0)THEN
214 IF(igtyp == 11 .AND. igmat > 0) THEN
215 stf(i)=slsfac*dx*geo(ipgmat + 2 ,mg)
216 stfmin =
min(stfmin,stf(i))
217 ELSEIF(igtyp == 52 .OR.
218 . ((igtyp == 17 .OR. igtyp == 51) .AND. igmat > 0))THEN
219 isubstack = iworksh(3,nelc)
220 stf(i)=slsfac*dx*pm_stack(2 ,isubstack)
221 stfmin =
min(stfmin,stf(i))
222 ELSE
223 stf(i)=slsfac*dx*pm(20,mt)
224 stfmin =
min(stfmin,stf(i))
225 ENDIF
226 ELSE
227 IF(nint>=0) THEN
229 . msgtype=msgwarning,
230 . anmode=aninfo_blind_2,
232 . c1=titr,
233 . i2=ixc(nixc,nelc),
234 . c2='SHELL',
235 . i3=i)
236 END IF
237 IF(nint<0) THEN
239 . msgtype=msgwarning,
240 . anmode=aninfo_blind_2,
242 . c1=titr,
243 . i2=ixc(nixc,nelc),
244 . c2='SHELL',
245 . i3=i)
246 END IF
247 END IF
248 GO TO 500
249 END IF
250 END IF
251
252
253
254 CALL insol3(x,irect,ixs,nint,nels,inrt,
255 .
area,noint,knod2els ,nod2els ,ir ,ixs10,
256 . ixs16,ixs20)
257 IF(nels/=0) THEN
258 mt=ixs(1,nels)
259 IF(mt>0)THEN
260 DO jj=1,8
261 jjj=ixs(jj+1,nels)
262 xc(jj)=x(1,jjj)
263 yc(jj)=x(2,jjj)
264 zc(jj)=x(3,jjj)
265 ENDDO
267 stf(i)=slsfac*fillsol(nels)*
area*
area*pm(32,mt)/vol
268 stfmin =
min(stfmin,stf(i))
269 ELSE
270 IF(nint>=0) THEN
272 . msgtype=msgwarning,
273 . anmode=aninfo_blind_2,
275 . c1=titr,
276 . i2=ixs(nixs,nels),
277 . c2='SOLID',
278 . i3=i)
279 ENDIF
280 IF(nint<0) THEN
282 . msgtype=msgwarning,
283 . anmode=aninfo_blind_2,
285 . c1=titr,
286 . i2=ixs(nixs,nels),
287 . c2='SOLID',
288 . i3=i)
289 ENDIF
290 ENDIF
291 ENDIF
292
293
294
295 CALL incoq3(irect,ixc ,ixtg ,nint ,nelc ,
296 . neltg,inrt,geo ,pm ,knod2elc ,
297 . knod2eltg ,nod2elc ,nod2eltg,thk,nty,igeo,
298 . pm_stack , iworksh)
299 IF(neltg/=0) THEN
300 mt=ixtg(1,neltg)
301 mg=ixtg(5,neltg)
302 igtyp = igeo(11,mg)
303 igmat = igeo(98,mg)
304 dx=geo(1,mg)
305 IF(igtyp == 17 .OR. igtyp == 51) dx = thk(nelc)
306 IF (nty==8) gapn(i) = dx/two
307 dxm=dxm+dx
308 ndx=ndx+1
309 IF(mt>0)THEN
310 IF(igtyp == 11 .AND. igmat > 0) THEN
311 stf(i)=slsfac*dx*geo(ipgmat + 2 ,mg)
312 stfmin =
min(stfmin,stf(i))
313 ELSEIF(igtyp == 52 .OR.
314 . ((igtyp == 17 .OR. igtyp == 51) .AND. igmat > 0))THEN
315 isubstack = iworksh(3,nelc)
316 stf(i)=slsfac*dx*pm_stack(2 ,isubstack)
317 stfmin =
min(stfmin,stf(i))
318 ELSE
319 stf(i)=slsfac*dx*pm(20,mt)
320 stfmin =
min(stfmin,stf(i))
321 ENDIF
322 ELSE
323 IF(nint>=0) THEN
325 . msgtype=msgwarning,
326 . anmode=aninfo_blind_2,
328 . c1=titr,
329 . i2=ixtg(nixtg,neltg),
330 . c2='SHELL',
331 . i3=i)
332 ENDIF
333 IF(nint<0) THEN
335 . msgtype=msgwarning,
336 . anmode=aninfo_blind_2,
338 . c1=titr,
339 . i2=ixtg(nixtg,neltg),
340 . c2='SHELL',
341 . i3=i)
342 ENDIF
343 ENDIF
344 ELSEIF(nelc/=0) THEN
345 mt=ixc(1,nelc)
346 mg=ixc(6,nelc)
347 igtyp = igeo(11,mg)
348 igmat = igeo(98,mg)
349 dx=geo(1,mg)
350 IF(igtyp == 17 .OR. igtyp == 51) dx = thk(nelc)
351 IF (nty==8) gapn(i) = dx/two
352 dxm=dxm+dx
353 ndx=ndx+1
354 IF(mt>0)THEN
355 IF(igtyp == 11 .AND. igmat > 0) THEN
356 stf(i)=slsfac*dx*geo(ipgmat + 2 ,mg)
357 stfmin =
min(stfmin,stf(i))
358 ELSEIF(igtyp == 52 .OR.
359 . ((igtyp == 17 .OR. igtyp == 51) .AND. igmat > 0))THEN
360 isubstack = iworksh(3,nelc)
361 stf(i)=slsfac*dx*pm_stack(2 ,isubstack)
362 stfmin =
min(stfmin,stf(i))
363 ELSE
364 stf(i)=slsfac*dx*pm(20,mt)
365 stfmin =
min(stfmin,stf(i))
366 ENDIF
367 ELSE
368 IF(nint>=0) THEN
370 . msgtype=msgwarning,
371 . anmode=aninfo_blind_2,
373 . c1=titr,
374 . i2=ixc(nixc,nelc),
375 . c2='SHELL',
376 . i3=i)
377 ENDIF
378 IF(nint<0) THEN
380 . msgtype=msgwarning,
381 . anmode=aninfo_blind_2,
383 . c1=titr,
384 . i2=ixc(nixc,nelc),
385 . c2='SHELL',
386 . i3=i)
387 ENDIF
388 ENDIF
389 ENDIF
390
391 IF(nels+nelc+neltg==0)THEN
392 IF(nint>0) THEN
394 . msgtype=msgwarning,
395 . anmode=aninfo_blind_2,
397 . c1=titr,
398 . i2=i)
399 ENDIF
400 IF(nint<0) THEN
402 . msgtype=msgwarning,
403 . anmode=aninfo_blind_2,
405 . c1=titr,
406 . i2=i)
407 ENDIF
408 ENDIF
409 500 CONTINUE
410 ENDDO
411
412
413
414 IF(nty==8)THEN
415 IF(fmax/=zero) THEN
416 IF(depth<=em20) THEN
417 DO i=1,nrt
418 stf8(i) = stf(i)
419 ENDDO
421 . msgtype=msgwarning,
422 . anmode=aninfo_blind_2,
424 . c1=titr,
425 . r1=depth)
426 ELSE
427 slope = fmax/depth
428 IF(slope>stfmin.AND.stfmin/=zero)THEN
429 DO i=1,nrt
430 stf8(i) = stf(i)
431 ENDDO
433 . msgtype=msgwarning,
434 . anmode=aninfo_blind_2,
436 . c1=titr,
437 . r1=depth,
438 . r2=fmax,
439 . r3=slope)
440 ELSE
441 DO i=1,nrt
442 stf8(i) = slope
443 ENDDO
444 ENDIF
445 ENDIF
446 ENDIF
447 ENDIF
448
449
450
451 DO j=1,nsn
452 num=nseg(j+1)-nseg(j)
453 npt=nseg(j)-1
454 DO jj=1,num
455 ll=lnsv(npt+jj)
456 stfn(j)=stfn(j)+fourth*stf(ll)
457 ENDDO
458 ENDDO
459
460 DO i=1,nrt
461 DO j=1,4
462 ig=irect(j,i)
464 irect(j,i)=il
465 ENDDO
466 ENDDO
467
468 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine incoq3(irect, ixc, ixtg, nint, nel, neltg, is, geo, pm, knod2elc, knod2eltg, nod2elc, nod2eltg, thk, nty, igeo, pm_stack, iworksh)
subroutine inelts(x, irect, ixs, nint, nel, i, area, noint, ir, surf_eltyp, surf_elem)
subroutine ineltc(nelc, neltg, is, surf_eltyp, surf_elem)
subroutine insol3(x, irect, ixs, nint, nel, i, area, noint, knod2els, nod2els, ir, ixs10, ixs16, ixs20)
subroutine local_index(il, ig, nodes, n)
integer, parameter nchartitle
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)