36 SUBROUTINE eloff(IXS ,IXQ ,IXC ,IXP ,IXT ,
38 . IACTIV ,TIME ,IFLAG ,NN ,ELBUF_TAB,
39 . X ,TEMP ,MCP ,PM ,IGROUPS ,
40 . MCP_OFF ,IGRBRIC ,IGRQUAD ,IGRSH4N ,IGRSH3N ,
41 . IGRTRUSS,IGRBEAM ,IGRSPRING,ITHERM_FE)
50#include "implicit_f.inc"
65 INTEGER ,
INTENT(IN) :: ITHERM_FE
66 INTEGER IACTIV(LACTIV(NPARG,*),
67 . IXS(NIXS,*), IXQ(NIXQ,*),IXC(NIXC,*),
68 . IXT(NIXT,*),IXP(NIXP,*), IXR(NIXR,*), IXTG(NIXTG,*),
71 my_real time, x(3,*), temp(*), mcp(*), pm(npropm,*),mcp_off(*)
72 TYPE(elbuf_struct_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
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
88 INTEGER I,II,J,NG,,MLW,NFT,ITY,IGOF,
89 . igsh,igsh3,igbr,igqu,igbm,igtr,igsp,
90 . jthe, iform, isolnod, itetra4
91 INTEGER NELA,NPTR,NPTS,NPTT,IR,IS,IT,IP,K,KK
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
96 my_real nxt4(mvsiz,4,4), facvol
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 ::
103 IF( iflag == 0 .OR. iflag == 1)
THEN
111 iform = iactiv(10,nn)
113 ALLOCATE(index2(1+mvsiz,ngroup))
123 DO j=1,igrbric(igbr)%NENTITY
124 ii = igrbric(igbr)%ENTITY(j)
128 IF (mlw == 0 .OR. mlw == 13) cycle
130 index2(1,ng) = index2(1,ng) + 1
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
145.OR.
IF (MLW == 0 MLW == 13) CYCLE ! loi0, pas de off
151 OFFG => ELBUF_TAB(NG)%GBUF%OFF
153 INDEX(1:NELA) = INDEX2(2:NELA+1,NG)
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
163.AND.
IF(ISOLNOD == 4 ITETRA4 == 1) FACVOL=FOUR
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
187 RHOCP=PM(69,IXS(1,1+NFT))
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
204 IF(ISOLNOD == 4) THEN
212 CALL S4VOLUME(X, VOLGN, NELA, NC1, NC2, NC3, NC4)
214 IF(ITETRA4 == 1) THEN
215 IF(JTHE < 0) CALL S10NXT4(NXT4,NELA)
218 VOLPN(I,IP) = FOURTH*VOLGN(I)
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))
226 VOLPN(I,1) = VOLGN(I)
228 TEMPN(I,1) = FOURTH*(TEMP(NC1(I))+TEMP(NC2(I))+TEMP(NC3(I))+TEMP(NC4(I)))
232 CALL S8EVOLUME(X, VOLGN, VOLPN, NELA, NPTR, NPTS, NPTT,
233 . NC1, NC2, NC3, NC4, NC5, NC6, NC7, NC8 )
235 CALL S8ETEMPER(TEMP, TEMPN, NELA, NPTR, NPTS, NPTT,
236 . NC1, NC2, NC3, NC4, NC5, NC6, NC7, NC8 )
242 VOLG(J) = VOLGN(I)/FACVOL
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
253 VOLP(J) = VOLPN(I,IP)
254 IF(JTHE < 0 ) TEIP(J) = TEMPN(I,IP)
264 IF (OFFG(I) /= ZERO) IGOF=0
271 OFFG => ELBUF_TAB(NG)%GBUF%OFF
275 DO J=1,IGRQUAD(IGQU)%NENTITY
276 IF (II == IGRQUAD(IGQU)%ENTITY(J)) THEN
278 WRITE(IOUT,'(a,i10,a,g13.5)
')' quad activation:
',IXQ(7,II),' at time:
',TIME
286 IF (OFFG(I) /= ZERO) IGOF=0
292 OFFG => ELBUF_TAB(NG)%GBUF%OFF
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
307 IF (OFFG(I) > ZERO) IGOF=0
313 OFFG => ELBUF_TAB(NG)%GBUF%OFF
317 DO J=1,IGRTRUSS(IGTR)%NENTITY
318 IF (II == IGRTRUSS(IGTR)%ENTITY(J)) THEN
320 WRITE(IOUT,'(a,i10,a,g13.5)
')' truss activation:
',IXT(5,II),' at time:
',TIME
328 IF (OFFG(I) /= ZERO) IGOF=0
334 OFFG => ELBUF_TAB(NG)%GBUF%OFF
338 DO J=1,IGRBEAM(IGBM)%NENTITY
339 IF (II == IGRBEAM(IGBM)%ENTITY(J)) THEN
341 WRITE(IOUT,'(a,i10,a,g13.5)
')' beam activation:
',IXP(6,II),'',TIME
349 IF(OFFG(I) > ZERO) IGOF=0
355 OFFG => ELBUF_TAB(NG)%GBUF%OFF
356! *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
357! We need to compute the local referentiel for spring
358! --> even if off(1:mvsiz)=1, IPARG(8) = 0
359! *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
363 DO J=1,IGRSPRING(IGSP)%NENTITY
364 IF (II == IGRSPRING(IGSP)%ENTITY(J)) THEN
366 WRITE(IOUT,'(a,i10,a,g13.5)
')' spring activation:
',IXR(NIXR,II),' at time:
',TIME
376 OFFG => ELBUF_TAB(NG)%GBUF%OFF
380 DO J=1,IGRSH3N(IGSH3)%NENTITY
381 IF (II == IGRSH3N(IGSH3)%ENTITY(J)) THEN
383 WRITE(IOUT,'(a,i10,a,g13.5)
')' sh_3n activation:
',IXTG(6,II),' at time:
',TIME
391 IF (OFFG(I) /= ZERO) IGOF=0
397 ELSE IF (IFLAG == 1) THEN
403 DO J=1,IGRBRIC(IGBR)%NENTITY
404 II = IGRBRIC(IGBR)%ENTITY(J)
406 OFFG => ELBUF_TAB(NG)%GBUF%OFF
407 VOLG => ELBUF_TAB(NG)%GBUF%VOL
414.OR.
IF (MLW == 0 MLW == 13) CYCLE ! loi0, pas de off
417 WRITE(IOUT,'(a,i10,a,g13.5)
')' brick deactivation:
',IXS(11,II),' at time:
',TIME
418.AND.
IF(ITHERM_FE > 0 IFORM == 2) THEN
420.AND.
IF(ISOLNOD == 4 ITETRA4 == 1) FACVOL=FOUR
421 RHOCP=PM(69,IXS(1,II))
422 MCPS=ONE_OVER_8*RHOCP*VOLG(I)*FACVOL
425 MCP(KK) = MCP(KK) - MCPS
436.OR.
IF (MLW == 0 MLW == 13) CYCLE ! loi0, pas de off
439 OFFG => ELBUF_TAB(NG)%GBUF%OFF
440 VOLG => ELBUF_TAB(NG)%GBUF%VOL
444 IF (OFFG(I) > ZERO) IGOF=0
450 OFFG => ELBUF_TAB(NG)%GBUF%OFF
454 DO J=1,IGRQUAD(IGQU)%NENTITY
455 IF (II == IGRQUAD(IGQU)%ENTITY(J)) THEN
457 WRITE(IOUT,'(a,i10,a,g13.5)
')' quad deactivation:
',IXQ(7,II),' at time:
',TIME
465 IF (OFFG(I) /= ZERO) IGOF=0
471 OFFG => ELBUF_TAB(NG)%GBUF%OFF
475 DO J=1,IGRSH4N(IGSH)%NENTITY
476 IF (II == IGRSH4N(IGSH)%ENTITY(J)) THEN
477 OFFG(I) = -ABS(OFFG(I))
479 WRITE(IOUT,'(a,i10,a,g13.5)
')' shell deactivation:
',IXC(7,II),' at time:
',TIME
487 IF (OFFG(I) > ZERO) IGOF=0
493 OFFG => ELBUF_TAB(NG)%GBUF%OFF
497 DO J=1,IGRTRUSS(IGTR)%NENTITY
498 IF (II == IGRTRUSS(IGTR)%ENTITY(J)) THEN
500 WRITE(IOUT,'(a,i10,a,g13.5)
')' truss deactivation:
',IXT(5,II),' at time:
',TIME
508 IF(OFFG(I) /= ZERO) IGOF=0
514 OFFG => ELBUF_TAB(NG)%GBUF%OFF
518 DO J=1,IGRBEAM(IGBM)%NENTITY
519 IF (II == IGRBEAM(IGBM)%ENTITY(J)) THEN
521 WRITE(IOUT,'(a,i10,a,g13.5)
')' beam deactivation:
',IXP(6,II),' at time:
',TIME
529 IF(OFFG(I) > ZERO) IGOF=0
535 OFFG => ELBUF_TAB(NG)%GBUF%OFF
536! *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
537! We need to compute the local referentiel for spring
538! --> even if off(1:mvsiz)=1, IPARG(8) = 0
539! *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
543 DO J=1,IGRSPRING(IGSP)%NENTITY
544 IF (II == IGRSPRING(IGSP)%ENTITY(J)) THEN
546 WRITE(IOUT,'(a,i10,a,g13.5)
')' spring deactivation:
',IXR(NIXR,II),' at time:
',TIME
557 OFFG => ELBUF_TAB(NG)%GBUF%OFF
561 DO J=1,IGRSH3N(IGSH3)%NENTITY
562 IF (II == IGRSH3N(IGSH3)%ENTITY(J)) THEN
564 WRITE(IOUT,'(a,i10,a,g13.5)
')' sh_3n deactivation:
',IXTG(6,II),' at time:
',TIME
572 IF (OFFG(I) /= ZERO) IGOF=0
579 IF(ITHERM_FE > 0 ) THEN
581 MCP_OFF(1:NUMNOD) = ONE
584 OFFG => ELBUF_TAB(NG)%GBUF%OFF
590 IF(OFFG(I) == 0) THEN
591 ! put 0 to nodes that belong to at least one
592 ! deactivated element
601 OFFG => ELBUF_TAB(NG)%GBUF%OFF
607 IF(OFFG(I) /= 0) THEN
608 ! put one to all nodes that belong to at least one
621.OR.
IF(IFLAG == 1 IFLAG == 0) DEALLOCATE(INDEX2)
subroutine eloff(ixs, ixq, ixc, ixp, ixt, ixr, ixtg, iparg, iactiv, time, iflag, nn, elbuf_tab, x, temp, mcp, pm, igroups, mcp_off, igrbric, igrquad, igrsh4n, igrsh3n, igrtruss, igrbeam, igrspring, itherm_fe)