38
39
40
41 USE elbufdef_mod
42 USE my_alloc_mod
43
44
45
46#include "implicit_f.inc"
47
48
49
50#include "mvsiz_p.inc"
51#include "com01_c.inc"
52#include "com04_c.inc"
53#include "scr14_c.inc"
54#include "param_c.inc"
55#include "task_c.inc"
56#include "spmd_c.inc"
57
58
59
60
62 . func(*), mass(*) ,pm(npropm,*), geo(npropg,*),
63 . ehour(*),anim(*), xfunc1(10,*)
64 INTEGER IPARG(NPARG,*),EL2FA(*),
65 . IXT(NIXT,*),IXP(NIXP,*),IXR(NIXR,*),IFUNC,NBF,
66 . IADP(*),NBPART,IADG(NSPMD,*),NANIM1D_L,NBF2,
67 . IGEO(NPROPGI,*)
68 INTEGER BUF
69
70 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
71
72
73
74
76 . evar(mvsiz),
77 . off, p, vonm2, vonm, s1, s2, s12, s3, VALUE,
78 . a1,b1,b2,b3,yeq,f1,m1,m2,m3, xm,
80 INTEGER I, II, NG, NEL, NFT, IAD, ITY, LFT, NPT, ISS, ISC,
81 . IADD, N, J, LLT, MLW, NB1, NB2, NB3, NB4, NB5,
82 . NB6, NB7, NB8, NB9, NB10, NB11, NB12, NB13, NB14, NB15,
83 . NB16, LLL,NUVAR,IGTYP,IFAIL,
84 . ISTRAIN,NN, K1, K2,JTURB,MT,JALE, IMID, IALEL,IPID,
85 . NN1,NN2,NN3,NN4,NN5,NN6,NN7,NN8,NN9,NN10,NF,
86 . OFFSET,K,INC,KK,IHBE,ISROT,ILAYER,IR,IS,JJ(6),IPT
87 INTEGER LPLA
88 REAL R4
89 REAL,DIMENSION(:),ALLOCATABLE:: WAL
90
91 TYPE(G_BUFEL_) ,POINTER :: GBUF
92 TYPE(L_BUFEL_),POINTER :: LBUF
93
94 CALL my_alloc(wal,nbf+nanim1d_l)
95
96 nn1 = 1
97 nn3 = 1
98 nn4 = nn3
99 nn5 = nn4
100 nn6 = nn5
101 nn7 = nn6 + numelt
102 nn8 = nn7 + numelp
103 nn9 = nn8 + numelr
104 nn10= nn9
105
106 DO ng=1,ngroup
107 mlw =iparg(1,ng)
108 nel =iparg(2,ng)
109 ity =iparg(5,ng)
110 igtyp =iparg(38,ng)
111 ifail =iparg(43,ng)
112
113 gbuf => elbuf_tab(ng)%GBUF
114
115 DO offset = 0,nel-1,nvsiz
116 nft =iparg(3,ng) + offset
117 lft=1
118 llt=
min(nvsiz,nel-offset)
119
120 DO i=1,6
121 jj(i) = nel*(i-1)
122 ENDDO
123
124
125
126
127 IF(ity==4)THEN
128 IF(ifunc==1)THEN
129 IF(mlw/=1)THEN
130 DO i=lft,llt
131 n = i + nft
132 off = gbuf%OFF(i)
133 IF(gbuf%G_PLA > 0) THEN
134 func(el2fa(nn6+n)) = gbuf%PLA(i)
135 ELSE
136 func(el2fa(nn6+n)) = 0
137 ENDIF
138 ENDDO
139 ELSE
140 DO i=lft,llt
141 n = i + nft
142 func(el2fa(nn6+n)) = zero
143 ENDDO
144 ENDIF
145 ELSEIF(ifunc==3)THEN
146 DO i=lft,llt
147 n = i + nft
148 func(el2fa(nn6+n))=gbuf%EINT(i)/
149 .
max(em30,mass(el2fa(nn6+n)))
150 ENDDO
151 ELSEIF(ifunc==7)THEN
152 DO i=lft,llt
153 n = i + nft
157 func(el2fa(nn6+n)) = sqrt(feq)/
area
158 ENDDO
159 ELSEIF(ifunc==14)THEN
160 DO i=lft,llt
161 n = i + nft
162 func(el2fa(nn6+n)) = gbuf%FOR(i) / gbuf%AREA(i)
163 ENDDO
164 ELSEIF(ifunc==20)THEN
165 IF(gbuf%G_DT>0)THEN
166 DO i=lft,llt
167 n = i + nft
168 func(el2fa(nn6+n)) = gbuf%DT(i)
169 ENDDO
170 ENDIF
171 ELSEIF ((ifunc==21).AND.(gbuf%G_ISMS>0)) THEN
172 DO i=lft,llt
173 n = i + nft
174 func(el2fa(nn6+n)) = gbuf%ISMS(i)
175 ENDDO
176 ELSEIF (ifunc == 22) THEN
177 DO i=lft,llt
178 n = i + nft
179 IF (gbuf%G_OFF > 0) THEN
180 IF(gbuf%OFF(i) > one) THEN
181 func(el2fa(nn6+n)) = gbuf%OFF(i) - one
182 ELSEIF((gbuf%OFF(i) >= zero .AND. gbuf%OFF(i) <= one)) THEN
183 func(el2fa(nn6+n)) = gbuf%OFF(i)
184 ELSE
185 func(el2fa(nn6+n)) = -one
186 ENDIF
187 ENDIF
188 ENDDO
189 ELSEIF (ifunc == 123) THEN
190 DO i=lft,llt
191 n = i + nft
192 func(el2fa(nn6+n)) = gbuf%STRA(i)
193 ENDDO
194 ELSE
195 DO i=lft,llt
196 n = i + nft
197 func(el2fa(nn6+n)) = zero
198 ENDDO
199 ENDIF
200
201
202
203 ELSEIF(ity==5)THEN
204 IF (ifunc == 1) THEN
205 IF (mlw /= 1) THEN
206 IF (igtyp == 18) THEN
207 npt = iparg(6,ng)
208 DO i=lft,llt
209 n = i + nft
210 eplas = zero
211 IF (mlw /= 0)THEN
212 DO k = 1,npt
213 ilayer=1
214 ir = 1
215 is = 1
216 lpla = elbuf_tab(ng)%BUFLY(ilayer)%L_PLA
217 IF ( lpla /= 0)THEN
218 lbuf => elbuf_tab(ng)%BUFLY(ilayer)%LBUF(ir,is,k)
219 eplas = eplas + lbuf%PLA(i)
220 ENDIF
221 ENDDO
222 ENDIF
223 func(el2fa(nn7+n)) = eplas/npt
224 ENDDO
225 ELSE
226 DO i=lft,llt
227 n = i + nft
228 off = gbuf%OFF(i)
229 IF(gbuf%G_PLA > 0) THEN
230 func(el2fa(nn7+n)) = gbuf%PLA(i)
231 ELSE
232 func(el2fa(nn7+n)) = 0
233 ENDIF
234 ENDDO
235 ENDIF
236 ELSE
237 DO i=lft,llt
238 n = i + nft
239 func(el2fa(nn7+n)) = zero
240 ENDDO
241 ENDIF
242 ELSEIF(ifunc==3)THEN
243 DO i=lft,llt
244 n = i + nft
245 func(el2fa(nn7+n)) = (gbuf%EINT(i) + gbuf%EINT(i+llt)) /
max(em30,mass(el2fa(nn7+n)))
246 ENDDO
247 ELSEIF(ifunc==7)THEN
248 DO i=lft,llt
249 n = i + nft
250 a1 = geo(1,ixp(5,n))
251 b1 = geo(2,ixp(5,n))
252 b2 = geo(18,ixp(5,n))
253 b3 = geo(4,ixp(5,n))
254 f1 = gbuf%FOR(jj(1)+i)
255 m1 = gbuf%MOM(jj(1) + i)
256 m2 = gbuf%MOM(jj(2) + i)
257 m3 = gbuf%MOM(jj(3) + i)
258 yeq= f1*f1 + three* a1 *
259 + ( m1*m1 /
max(b3,em30)
260 + + m2*m2 /
max(b1,em30)
261 + + m3*m3 /
max(b2,em30) )
262 func(el2fa(nn7+n)) = sqrt(yeq)/a1
263 ENDDO
264 ELSEIF(ifunc==14)THEN
265 DO i=lft,llt
266 n = i + nft
267 func(el2fa(nn7+n)) = gbuf%FOR(jj(1)+i) / geo(1,ixp(5,n))
268 ENDDO
269 ELSEIF(ifunc==17)THEN
270 DO i=lft,llt
271 n = i + nft
272 func(el2fa(nn7+n)) = gbuf%FOR(jj(2)+i) / geo(
273 ENDDO
274 ELSEIF(ifunc==19)THEN
275 DO i=lft,llt
276 n = i + nft
277 func(el2fa(nn7+n)) = gbuf%FOR(jj(3)+i) / geo(1,ixp(5,n))
278 ENDDO
279 ELSEIF(ifunc==20)THEN
280 DO i=lft,llt
281 n = i + nft
282 func(el2fa(nn7+n)) = gbuf%DT(i)
283 ENDDO
284 ELSEIF ((ifunc==21).AND.(gbuf%G_ISMS>0)) THEN
285 DO i=lft,llt
286 n = i + nft
287 func(el2fa(nn7+n)) = gbuf%ISMS(i)
288 ENDDO
289 ELSEIF (ifunc == 22) THEN
290 DO i=lft,llt
291 n = i + nft
292 IF (gbuf%G_OFF > 0) THEN
293 IF(gbuf%OFF(i) > one) THEN
294 func(el2fa(nn7+n)) = gbuf%OFF(i) - one
295 ELSEIF((gbuf%OFF(i) >= zero .AND. gbuf%OFF(i) <= one)) THEN
296 func(el2fa(nn7+n)) = gbuf%OFF(i)
297 ELSE
298 func(el2fa(nn7+n)) = -one
299 ENDIF
300 ENDIF
301 ENDDO
302 ELSEIF (ifunc >= 23 .AND. ifunc <= 122) THEN
303 ipt = mod((ifunc - 22), 100)
304 IF (ipt == 0) ipt = 100
305 IF (mlw /= 1) THEN
306 IF (igtyp == 18) THEN
307 npt = iparg(6,ng)
308 ilayer=1
309 ir = 1
310 is = 1
311 IF (ipt <= npt) THEN
312 lbuf => elbuf_tab(ng)%BUFLY(ilayer)%LBUF(ir,is,ipt)
313 DO i=lft,llt
314 n = i + nft
315 func(el2fa(nn7+n)) = lbuf%PLA(i)
316 ENDDO
317 ELSE
318 DO i=lft,llt
319 n = i + nft
320 func(el2fa(nn7+n)) = zero
321 ENDDO
322 ENDIF
323 ENDIF
324 ENDIF
325 ELSEIF(ifunc == 124 .AND. (gbuf%G_EPSD>0))THEN
326 DO i=lft,llt
327 n = i + nft
328 func(el2fa(nn7+n)) = gbuf%EPSD(i)
329 ENDDO
330 ELSEIF(ifunc == 125 .and. ifail > 0) THEN
331 IF (igtyp == 18) THEN
332 DO i=lft,llt
333 n = i + nft
334 dammx = zero
335 DO j = 1,elbuf_tab(ng)%BUFLY(1)%NPTT
336 dammx =
max(dammx,elbuf_tab(ng)%BUFLY(1)%FAIL(1,1,j)%FLOC(1)%DAMMX(i))
337 ENDDO
338 func(el2fa(nn7+n)) = dammx
339 ENDDO
340 ELSE IF (igtyp == 3) THEN
341 DO i=lft,llt
342 n = i + nft
343 func(el2fa(nn7+n)) = gbuf%FAIL(1)%DAMMX(i)
344 ENDDO
345 END IF
346 ELSE
347 DO i=lft,llt
348 n = i + nft
349 func(el2fa(nn7+n)) = zero
350 ENDDO
351 ENDIF
352
353
354
355 ELSEIF(ity==6)THEN
356 IF(ifunc==3)THEN
357 IF (mlw==1) THEN
358 xm = one/geo(1,ixr(1,1+nft))
359 DO i=lft,llt
360 n = i + nft
361
362 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
363 ENDDO
364 ELSEIF (mlw==2) THEN
365 xm = one/geo(1,ixr(1,1+nft))
366 DO i=lft,llt
367 n = i + nft
368
369 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
370 ENDDO
371 ELSEIF (mlw==3) THEN
372 xm = one/geo(1,ixr(1,1+nft))
373 DO i=lft,llt
374 n = i + nft
375
376 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
377 ENDDO
378 ELSEIF (mlw==4) THEN
379 xm = one/geo(1,ixr(1,1+nft))
380 DO i=lft,llt
381 n = i + nft
382
383 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
384 ENDDO
385 ELSEIF (mlw==5) THEN
386
387 DO i=lft,llt
388 n = i + nft
389 func(el2fa(nn8+n)) = gbuf%EINT(i)/
max(em30,gbuf%MASS(i))
390 ENDDO
391 ELSEIF (mlw==6) THEN
392 xm = one/geo(1,ixr(1,1+nft))
393 DO i=lft,llt
394 n = i + nft
395
396 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
397 ENDDO
398 ELSEIF (mlw==7) THEN
399 xm = one/geo(1,ixr(1,1+nft))
400 DO i=lft,llt
401 n = i + nft
402 func(el2fa(nn8+n)) = gbuf%EINT(i)*xm
403 ENDDO
404 ENDIF
405 ELSEIF(ifunc==11)THEN
406 DO i=lft,llt
407 n = i + nft
408 func(el2fa(nn8+n)) = anim(n)
409 ENDDO
410 ELSEIF(ifunc==12)THEN
411 kk = numelr * anim_fe(11)
412 DO i=lft,llt
413 n = i + nft
414 func(el2fa(nn8+n)) = anim(n+kk)
415 ENDDO
416 ELSEIF(ifunc==13)THEN
417 kk = numelr * (anim_fe(11)+anim_fe(12))
418 DO i=lft,llt
419 n = i + nft
420 func(el2fa(nn8+n)) = anim(n+kk)
421 ENDDO
422 ELSEIF(ifunc==20 .AND. gbuf%G_DT/=0)THEN
423 DO i=lft,llt
424 n = i + nft
425 func(el2fa(nn8+n)) = gbuf%DT(i)
426 ENDDO
427 ELSEIF ((ifunc==21).AND.(gbuf%G_ISMS>0)) THEN
428 DO i=lft,llt
429 n = i + nft
430 func(el2fa(nn8+n)) = gbuf%ISMS(i)
431 ENDDO
432 ELSEIF (ifunc == 22) THEN
433 DO i=lft,llt
434 n = i + nft
435 IF (gbuf%G_OFF > 0) THEN
436 IF(gbuf%OFF(i) > one) THEN
437 func(el2fa(nn8+n)) = gbuf%OFF(i) - one
438 ELSEIF((gbuf%OFF(i) >= zero .AND. gbuf%OFF(i) <= one)) THEN
439 func(el2fa(nn8+n)) = gbuf%OFF(i)
440 ELSE
441 func(el2fa(nn8+n)) = -one
442 ENDIF
443 ENDIF
444 ENDDO
445 ELSE
446 DO i=lft,llt
447 n = i + nft
448 func(el2fa(nn8+n)) = 0.
449 ENDDO
450 ENDIF
451 IF(mlw==3)THEN
452 DO i=lft,llt
453 n = i + nft
454 func(el2fa(nn8+n)+1) = func(el2fa(nn8+n))
455 ENDDO
456 ENDIF
457
458 ENDIF
459
460
461
462 END DO
463 ENDDO
464
465 IF (nspmd == 1) THEN
466 DO n=1,nbf
467 r4 = func(n)
469 ENDDO
470
471 IF (ifunc==3) THEN
472 DO n=1,nanim1d
473 VALUE = xfunc1(1,n)
474 r4 = VALUE
476 ENDDO
477 ELSE
478 DO n=1,nanim1d
479 r4 = zero
481 ENDDO
482 ENDIF
483 ELSE
484 DO n = 1, nbf
485 wal(n) = func(n)
486 ENDDO
487 IF (ifunc==3) THEN
488 DO n=1,nanim1d_l
489 VALUE = xfunc1(1,n)
490 wal(nbf+n)=VALUE
491 ENDDO
492 ELSE
493 DO n=1,nanim1d_l
494 wal(nbf+n)=0.
495 ENDDO
496 ENDIF
497 nbf2=nbf+nanim1d_l
498 IF (ispmd==0) THEN
499 buf = nb1dg+nanim1d
500 ELSE
501 buf=1
502 ENDIF
504 ENDIF
505
506 DEALLOCATE(wal)
507 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
for(i8=*sizetab-1;i8 >=0;i8--)
subroutine spmd_r4get_partn(size, nbf_l, nbpart, iadg, wal, buf)
void write_r_c(float *w, int *len)