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