42
43
44
45 USE elbufdef_mod
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "mvsiz_p.inc"
55
56
57
58#include "param_c.inc"
59#include "units_c.inc"
60#include "com01_c.inc"
61#include "com04_c.inc"
62
63
64
65 INTEGER ,INTENT(IN) :: ITHERM_FE
66 INTEGER IACTIV(LACTIV,*),IPARG(NPARG,*),
67 . IXS(,*), IXQ(,*),IXC(NIXC,*),
68 . IXT(NIXT,*),IXP(NIXP,*), IXR(NIXR,*), IXTG(,*),
69 . IGROUPS(*)
70 INTEGER IFLAG, NN
71 my_real time, x(3,*), temp(*), mcp(*), pm(npropm,*),mcp_off(*)
72 TYPE(ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
73
74
75
76
77
78 TYPE (GROUP_) , DIMENSION(NGRBRIC) :: IGRBRIC
79 TYPE (GROUP_) , DIMENSION(NGRQUAD) :: IGRQUAD
80 TYPE (GROUP_) , DIMENSION(NGRSHEL) :: IGRSH4N
81 TYPE (GROUP_) , DIMENSION(NGRSH3N) :: IGRSH3N
82 TYPE (GROUP_) , DIMENSION(NGRTRUS) :: IGRTRUSS
83 TYPE (
group_) ,
DIMENSION(NGRBEAM) :: igrbeam
84 TYPE (GROUP_) , DIMENSION(NGRSPRI) :: IGRSPRING
85
86
87
88 INTEGER I,II,J,NG,,MLW,NFT,,IGOF,
89 . IGSH,IGSH3,IGBR,,IGBM,IGTR,IGSP,
90 . JTHE, IFORM, ISOLNOD, ITETRA4
91 INTEGER NELA,NPTR,NPTS,NPTT,IR,IS,IT,IP,K,KK
92 INTEGER INDEX(MVSIZ)
93 INTEGER NC1(MVSIZ), NC2(MVSIZ), NC3(MVSIZ), NC4(MVSIZ),
94 . NC5(MVSIZ), NC6(MVSIZ), NC7(MVSIZ), NC8(MVSIZ)
95 my_real volgn(mvsiz), volpn(mvsiz,8), tempn(mvsiz,8), mcps, rhocp
97 my_real,
DIMENSION(:),
POINTER :: offg
98 my_real,
DIMENSION(:),
POINTER :: volg
99 my_real,
DIMENSION(:),
POINTER :: volp
100 my_real,
DIMENSION(:),
POINTER :: teip
101 INTEGER, DIMENSION(:,:), ALLOCATABLE :: INDEX2
102
103 IF( iflag == 0 .OR. iflag == 1) THEN
104 igbr = iactiv(3,nn)
105 igqu = iactiv(4,nn)
106 igsh = iactiv(5,nn)
107 igtr = iactiv(6,nn)
108 igbm = iactiv(7,nn)
109 igsp = iactiv(8,nn)
110 igsh3 = iactiv(9,nn)
111 iform = iactiv(10,nn)
112
113 ALLOCATE(index2(1+mvsiz,ngroup))
114 index2=0
115 ENDIF
116
117 IF (iflag==0) THEN
118
119
120
121
122 IF (igbr /= 0) THEN
123 DO j=1,igrbric(igbr)%NENTITY
124 ii = igrbric(igbr)%ENTITY(j)
125 ng = igroups(ii)
126 nft= iparg(3,ng)
127 mlw=iparg(1,ng)
128 IF (mlw == 0 .OR. mlw == 13) cycle
129 i = ii - nft
130 index2(1,ng) = index2(1,ng) + 1
131 nela = index2(1,ng)
132 index2(nela+1,ng) = i
133 WRITE(iout,'(A,I10,A,G13.5)')' BRICK ACTIVATION:',ixs(11,ii),' AT TIME:',time
134 offg => elbuf_tab(ng)%GBUF%OFF
135 offg(i) = one
136 ENDDO
137 ENDIF
138
139 DO ng=1,ngroup
140 mlw=iparg(1,ng)
141 nel=iparg(2,ng)
142 nft=iparg(3,ng)
143 ity=iparg(5,ng)
144 jthe=iparg(13,ng)
145 IF (mlw == 0 .OR. mlw == 13) cycle
146
147 IF(ity==1)THEN
148
149 isolnod=iparg(28,ng)
150 itetra4=iparg(41,ng)
151 offg => elbuf_tab(ng)%GBUF%OFF
152 nela = index2(1,ng)
153 index(1:nela) = index2(2:nela+1,ng)
154
155 IF(nela == 0) cycle
156
157 IF(itherm_fe > 0) THEN
158 volg => elbuf_tab(ng)%GBUF%VOL
159 nptr = elbuf_tab(ng)%NPTR
160 npts = elbuf_tab(ng)%NPTS
161 nptt = elbuf_tab(ng)%NPTT
162 facvol=one
163 IF(isolnod == 4 .AND. itetra4 == 1) facvol=four
164
165 DO i=1,nela
166 j=index(i)+nft
167 nc1(i)=ixs(2,j)
168 nc2(i)=ixs(3,j)
169 nc3(i)=ixs(4,j)
170 nc4(i)=ixs(5,j)
171 nc5(i)=ixs(6,j)
172 nc6(i)=ixs(7,j)
173 nc7(i)=ixs(8,j)
174 nc8(i)=ixs(9,j)
175
176 mcp_off(nc1(i)) = one
177 mcp_off(nc2(i)) = one
178 mcp_off(nc3(i)) = one
179 mcp_off(nc4(i)) = one
180 mcp_off(nc5(i)) = one
181 mcp_off(nc6(i)) = one
182 mcp_off(nc7(i)) = one
183 mcp_off(nc8(i)) = one
184 ENDDO
185
186 IF(iform == 2) THEN
187 rhocp=pm(69,ixs(1,1+nft))
188 DO i=1,nela
189 j=index(i)
190 mcps=one_over_8*rhocp*volg(j)*facvol
191 mcp(nc1(i)) = mcp(nc1(i)) + mcps
192 mcp(nc2(i)) = mcp(nc2(i)) + mcps
193 mcp(nc3(i)) = mcp(nc3(i)) + mcps
194 mcp(nc4(i)) = mcp(nc4(i)) + mcps
195 mcp(nc5(i)) = mcp(nc5(i)) + mcps
196 mcp(nc6(i)) = mcp(nc6(i)) + mcps
197 mcp(nc7(i)) = mcp(nc7(i)) + mcps
198 mcp(nc8(i)) = mcp(nc8(i)) + mcps
199 ENDDO
200 ENDIF
201
202
203
204 IF(isolnod == 4) THEN
205 DO i=1,nela
206 j=index(i)+nft
207 nc1(i)=ixs(2,j)
208 nc2(i)=ixs(4,j)
209 nc3(i)=ixs(7,j)
210 nc4(i)=ixs(6,j)
211 ENDDO
212 CALL s4volume(x, volgn, nela, nc1, nc2, nc3, nc4)
213
214 IF(itetra4 == 1) THEN
215 IF(jthe < 0)
CALL s10nxt4(nxt4,nela)
216 DO ip=1,nptr
217 DO i=1,nela
218 volpn(i,ip) = fourth*volgn(i)
219 IF(jthe >= 0 ) cycle
220 tempn(i,ip) = nxt4(i,1,ip)*temp(nc1(i))+nxt4(i,2,ip)*temp(nc2(i))+
221 . nxt4(i,3,ip)*temp(nc3(i))+nxt4(i,4,ip)*temp(nc4(i))
222 ENDDO
223 ENDDO
224 ELSE
225 DO i=1,nela
226 volpn(i,1) = volgn(i)
227 IF(jthe >= 0 ) cycle
228 tempn(i,1) = fourth*(temp(nc1(i))+temp(nc2(i))+temp(nc3(i))+temp(nc4(i)))
229 ENDDO
230 ENDIF
231 ELSE
232 CALL s8evolume(x, volgn, volpn, nela, nptr, npts, nptt,
233 . nc1, nc2, nc3, nc4, nc5, nc6, nc7, nc8 )
234 IF(jthe < 0 ) THEN
235 CALL s8etemper(temp, tempn, nela, nptr, npts, nptt,
236 . nc1, nc2, nc3, nc4, nc5, nc6, nc7, nc8 )
237 ENDIF
238 ENDIF
239
240 DO i=1,nela
241 j=index(i)
242 volg(j) = volgn(i)/facvol
243 ENDDO
244
245 DO ir=1,nptr
246 DO is=1,npts
247 DO it=1,nptt
248 ip = ir + ( (is-1) + (it-1)*npts )*nptr
249 volp => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,it)%VOL
250 IF(jthe < 0 ) teip => elbuf_tab(ng)%BUFLY(1)%LBUF(ir,is,it)%TEMP
251 DO i=1,nela
252 j=index(i)
253 volp(j) = volpn(i,ip)
254 IF(jthe < 0 ) teip(j) = tempn(i,ip)
255 ENDDO
256 ENDDO
257 ENDDO
258 ENDDO
259 ENDIF
260
261
262 igof = 1
263 DO i = 1,nel
264 IF (offg(i) /= zero) igof=0
265 ENDDO
266 iparg(8,ng) = igof
267
268
269 ELSEIF(ity==2) THEN
270
271 offg => elbuf_tab(ng)%GBUF%OFF
272 DO i=1,nel
273 ii=i+nft
274 IF (igqu /= 0) THEN
275 DO j=1,igrquad(igqu)%NENTITY
276 IF (ii == igrquad(igqu)%ENTITY(j)) THEN
277 offg(i) = one
278 WRITE(iout,'(A,I10,A,G13.5)')' QUAD ACTIVATION:',ixq(7,ii),' AT TIME:',time
279 ENDIF
280 ENDDO
281 ENDIF
282 ENDDO
283
284 igof = 1
285 DO i = 1,nel
286 IF (offg(i) /= zero) igof=0
287 ENDDO
288 iparg(8,ng) = igof
289
290 ELSEIF(ity==3)THEN
291
292 offg => elbuf_tab(ng)%GBUF%OFF
293 DO i=1,nel
294 ii=i+nft
295 IF (igsh /= 0) THEN
296 DO j=1,igrsh4n(igsh)%NENTITY
297 IF (ii == igrsh4n(igsh)%ENTITY(j)) THEN
298 offg(i) = abs(offg(i))
299 WRITE(iout,'(A,I10,A,G13.5)')' SHELL ACTIVATION:',ixc(7,ii),' AT TIME:',time
300 ENDIF
301 ENDDO
302 ENDIF
303 ENDDO
304
305 igof = 1
306 DO i = 1,nel
307 IF (offg(i) > zero) igof=0
308 ENDDO
309 iparg(8,ng) = igof
310
311 ELSEIF(ity==4) THEN
312
313 offg => elbuf_tab(ng)%GBUF%OFF
314 DO i=1,nel
315 ii=i+nft
316 IF (igtr /= 0) THEN
317 DO j=1,igrtruss(igtr)%NENTITY
318 IF (ii == igrtruss(igtr)%ENTITY(j)) THEN
319 offg(i)= one
320 WRITE(iout,'(A,I10,A,G13.5)')' TRUSS ACTIVATION:',ixt(5,ii),' AT TIME:',time
321 ENDIF
322 ENDDO
323 ENDIF
324 ENDDO
325
326 igof = 1
327 DO i = 1,nel
328 IF (offg(i) /= zero) igof=0
329 ENDDO
330 iparg(8,ng) = igof
331
332 ELSEIF(ity==5) THEN
333
334 offg => elbuf_tab(ng)%GBUF%OFF
335 DO i=1,nel
336 ii=i+nft
337 IF (igbm /= 0) THEN
338 DO j=1,igrbeam(igbm)%NENTITY
339 IF (ii == igrbeam(igbm)%ENTITY(j)) THEN
340 offg(i)= one
341 WRITE(iout,'(A,I10,A,G13.5)')' BEAM ACTIVATION:',ixp(6,ii),' AT TIME:',time
342 ENDIF
343 ENDDO
344 ENDIF
345 ENDDO
346
347 igof = 1
348 DO i = 1,nel
349 IF(offg(i) > zero) igof=0
350 ENDDO
351 iparg(8,ng) = igof
352
353 ELSEIF(ity==6) THEN
354
355 offg => elbuf_tab(ng)%GBUF%OFF
356
357
358
359
360 DO i=1,nel
361 ii=i+nft
362 IF (igsp /= 0) THEN
363 DO j=1,igrspring(igsp)%NENTITY
364 IF (ii == igrspring(igsp)%ENTITY(j)) THEN
365 offg(i)= one
366 WRITE(iout,'(A,I10,A,G13.5)')' SPRING ACTIVATION:',ixr(nixr,ii),' AT TIME:',time
367 ENDIF
368 ENDDO
369 ENDIF
370 ENDDO
371 igof = 0
372 iparg(8,ng) = igof
373
374 ELSEIF(ity==7)THEN
375
376 offg => elbuf_tab(ng)%GBUF%OFF
377 DO i=1,nel
378 ii=i+nft
379 IF (igsh3 /= 0) THEN
380 DO j=1,igrsh3n(igsh3)%NENTITY
381 IF (ii == igrsh3n(igsh3)%ENTITY(j)) THEN
382 offg(i) = one
383 WRITE(iout,'(A,I10,A,G13.5)')' SH_3N ACTIVATION:',ixtg(6,ii),' AT TIME:',time
384 ENDIF
385 ENDDO
386 ENDIF
387 ENDDO
388
389 igof = 1
390 DO i = 1,nel
391 IF (offg(i) /= zero) igof=0
392 ENDDO
393 iparg(8,ng) = igof
394
395 ENDIF
396 ENDDO
397 ELSE IF (iflag == 1) THEN
398
399
400
401
402 IF (igbr /= 0) THEN
403 DO j=1,igrbric(igbr)%NENTITY
404 ii = igrbric(igbr)%ENTITY(j)
405 ng = igroups(ii)
406 offg => elbuf_tab(ng)%GBUF%OFF
407 volg => elbuf_tab(ng)%GBUF%VOL
408 mlw=iparg(1,ng)
409 nel=iparg(2,ng)
410 nft=iparg(3,ng)
411 ity=iparg(5,ng)
412 isolnod=iparg(28,ng)
413 itetra4=iparg(41,ng)
414 IF (mlw == 0 .OR. mlw == 13) cycle
415 i = ii - nft
416 offg(i) = zero
417 WRITE(iout,'(A,I10,A,G13.5)')' BRICK DEACTIVATION:',ixs(11,ii),' AT TIME:',time
418 IF(itherm_fe > 0 .AND. iform == 2) THEN
419 facvol=one
420 IF(isolnod == 4 .AND. itetra4 == 1) facvol=four
421 rhocp=pm(69,ixs(1,ii))
422 mcps=one_over_8*rhocp*volg(i)*facvol
423 DO k=2,9
424 kk = ixs(k,ii)
425 mcp(kk) = mcp(kk) - mcps
426 ENDDO
427 ENDIF
428 ENDDO
429 ENDIF
430
431 DO ng=1,ngroup
432 mlw=iparg(1,ng)
433 nel=iparg(2,ng)
434 nft=iparg(3,ng)
435 ity=iparg(5,ng)
436 IF (mlw == 0 .OR. mlw == 13) cycle
437 IF(ity==1) THEN
438
439 offg => elbuf_tab(ng)%GBUF%OFF
440 volg => elbuf_tab(ng)%GBUF%VOL
441
442 igof = 1
443 DO i = 1,nel
444 IF (offg(i) > zero) igof=0
445 ENDDO
446 iparg(8,ng) = igof
447
448 ELSEIF(ity==2) THEN
449
450 offg => elbuf_tab(ng)%GBUF%OFF
451 DO i=1,nel
452 ii=i+nft
453 IF (igqu /= 0) THEN
454 DO j=1,igrquad(igqu)%NENTITY
455 IF (ii == igrquad(igqu)%ENTITY(j)) THEN
456 offg(i) = zero
457 WRITE(iout'(A,I10,A,G13.5)')' QUAD DEACTIVATION:',ixq(7,ii),' AT TIME:',time
458 ENDIF
459 ENDDO
460 ENDIF
461 ENDDO
462
463 igof = 1
464 DO i = 1,nel
465 IF (offg(i) /= zero) igof=0
466 ENDDO
467 iparg(8,ng) = igof
468
469 ELSEIF(ity==3) THEN
470
471 offg => elbuf_tab(ng)%GBUF%OFF
472 DO i=1,nel
473 ii=i+nft
474 IF (igsh /= 0) THEN
475 DO j=1,igrsh4n(igsh)%NENTITY
476 IF (ii ==THEN
477 offg(i) = -abs(offg(i))
478
479 WRITE(iout,'(A,I10,A,G13.5)'' SHELL DEACTIVATION:',ixc(7,ii),' AT TIME:',time
480 ENDIF
481 ENDDO
482 ENDIF
483 ENDDO
484
485 igof = 1
486 DO i = 1,nel
487 IF (offg(i) > zero) igof=0
488 ENDDO
489 iparg(8,ng) = igof
490
491 ELSEIF(ity==4) THEN
492
493 offg => elbuf_tab(ng)%GBUF%OFF
494 DO i=1,nel
495 ii=i+nft
496 IF (igtr /= 0) THEN
497 DO j=1,igrtruss(igtr)%NENTITY
498 IF (ii == igrtruss(igtr)%ENTITY(j)) THEN
499 offg(i)= zero
500 WRITE(iout,'(A,I10,A,G13.5)')' TRUSS DEACTIVATION:',ixt(5,ii),' AT TIME:',time
501 ENDIF
502 ENDDO
503 ENDIF
504 ENDDO
505
506 igof = 1
507 DO i = 1,nel
508 IF(offg(i) /= zero) igof=0
509 ENDDO
510 iparg(8,ng) = igof
511
512 ELSEIF(ity==5) THEN
513
514 offg => elbuf_tab(ng)%GBUF%OFF
515 DO i=1,nel
516 ii=i+nft
517 IF (igbm /= 0) THEN
518 DO j=1,igrbeam(igbm)%NENTITY
519 IF (ii == igrbeam(igbm)%ENTITY(j)) THEN
520 offg(i)= zero
521 WRITE(iout,'(A,I10,A,G13.5)')' BEAM DEACTIVATION:',ixp(6,ii),' AT TIME:',time
522 ENDIF
523 ENDDO
524 ENDIF
525 ENDDO
526
527 igof = 1
528 DO i = 1,nel
529 IF(offg(i) > zero) igof=0
530 ENDDO
531 iparg(8,ng) = igof
532
533 ELSEIF(ity==6) THEN
534
535 offg => elbuf_tab(ng)%GBUF%OFF
536
537
538
539
540 DO i=1,nel
541 ii=i+nft
542 IF (igsp /= 0) THEN
543 DO j=1,igrspring(igsp)%NENTITY
544 IF (ii == igrspring(igsp)%ENTITY(j)) THEN
545 offg(i)= zero
546 WRITE(iout,'(A,I10,A,G13.5)')' SPRING DEACTIVATION:',ixr(nixr,ii),' AT TIME:',time
547 ENDIF
548 ENDDO
549 ENDIF
550 ENDDO
551
552 igof = 0
553 iparg(8,ng) = igof
554
555 ELSEIF(ity==7) THEN
556
557 offg => elbuf_tab(ng)%GBUF%OFF
558 DO i=1,nel
559 ii=i+nft
560 IF (igsh3 /= 0) THEN
561 DO j=1,igrsh3n(igsh3)%NENTITY
562 IF (ii == igrsh3n(igsh3)%ENTITY(j)) THEN
563 offg(i) = zero
564 WRITE(iout,'(A,I10,A,G13.5)')' SH_3N DEACTIVATION:',ixtg' AT TIME:',time
565 ENDIF
566 ENDDO
567 ENDIF
568 ENDDO
569
570 igof = 1
571 DO i = 1,nel
572 IF (offg(i) /= zero) igof=0
573 ENDDO
574 iparg(8,ng) = igof
575
576 ENDIF
577 ENDDO
578 ELSE
579 IF(itherm_fe > 0 ) THEN
580
581 mcp_off(1:numnod) = one
582 DO ii = 1,numels
583 ng = igroups(ii)
584 offg => elbuf_tab(ng)%GBUF%OFF
585 mlw=iparg(1,ng)
586 nel=iparg(2,ng)
587 nft=iparg(3,ng)
588 ity=iparg(5,ng)
589 i = ii - nft
590 IF(offg(i) == 0) THEN
591
592
593 DO k=2,9
594 kk = ixs(k,ii)
595 mcp_off(kk) = 0.0
596 ENDDO
597 ENDIF
598 ENDDO
599 DO ii = 1,numels
600 ng = igroups(ii)
601 offg => elbuf_tab(ng)%GBUF%OFF
602 mlw=iparg(1,ng)
603 nel=iparg(2,ng)
604 nft=iparg(3,ng)
605 ity=iparg(5,ng)
606 i = ii - nft
607 IF(offg(i) /= 0) THEN
608
609
610 DO k=2,9
611 kk = ixs(k,ii)
612 mcp_off(kk) = one
613 ENDDO
614 ENDIF
615 ENDDO
616 ENDIF
617
618 ENDIF
619
620
621 IF(iflag == 1 .OR. iflag == 0) DEALLOCATE(index2)
622
623 RETURN
subroutine s10nxt4(nx, nel)
subroutine s4volume(x, vol, nel, nc1, nc2, nc3, nc4)
subroutine s8etemper(temp, tempel, nela, nptr, npts, nptt, nc1, nc2, nc3, nc4, nc5, nc6, nc7, nc8)
subroutine s8evolume(x, volg, volp, nela, nptr, npts, nptt, nc1, nc2, nc3, nc4, nc5, nc6, nc7, nc8)