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