45 SUBROUTINE ecrit(TIMERS,PARTSAV ,MS ,V ,IN ,R ,
46 2 DMAS ,WEIGHT ,ENINTOT ,EKINTOT ,
47 3 A ,AR ,FXBIPM ,FXBRPM ,MONVOL ,
48 4 XMOM_SMS ,SENSORS ,QFRICINT ,IPARI ,WEIGHT_MD ,
49 5 WFEXTH ,IFLAG ,MS_2D ,MULTI_FVM,MAS_ND ,
50 6 KEND ,H3D_DATA ,DYNAIN_DATA,USREINT,OUTPUT)
61 USE output_mod ,
ONLY : output_
65#include "implicit_f.inc"
87#include "timeri_c.inc"
95 TYPE(),
INTENT(INOUT) :: TIMERS
97 INTEGER WEIGHT(NUMNOD),FXBIPM(NBIPM,*),
98 . IPARI(NPARI,NINTER),WEIGHT_MD(NUMNOD)
100 my_real,
INTENT(INOUT) :: wfexth
101 my_real dmas, partsav(npsav,*), ms(numnod), v(3,numnod), a(3,numnod),
102 . in(numnod), r(3,numnod), ar(3,numnod),fxbrpm(*),
103 . xmom_sms(3,*),qfricint(*),ms_2d(*),kend,mas_nd
105 TYPE(multi_fvm_struct),
INTENT(IN) :: MULTI_FVM
107 TYPE (SENSORS_) ,
INTENT(IN) :: SENSORS
108 TYPE (DYNAIN_DATABASE),
INTENT(INOUT) :: DYNAIN_DATA
109 TYPE(output_),
INTENT(INOUT) :: OUTPUT
113 INTEGER IPRI, INFO, I,M, JPRI, ILIGN,ITHIS, ADRRPM, ISENS,NTY,INTHE,IABFIS
114 my_real :: entot, entot1, err, err1, x99, emass,mas,enintot,ekintot,
115 . vx,vy,vz,dt05,entmp(12) ,rtmp(10),
116 . mvx, mvy, mvz, ts, mas2, wewe2, entot1b,dmasnd
119 DOUBLE PRECISION :: ETIME, RETIME, TT0,
120 . ENCIND, XMOMTD, YMOMTD, ZMOMTD,
121 . XMASSD, ENROTD, ENINTD, ENCIND2,
122 . enrotd2, entotb, eamsd
126 CHARACTER ELTYP(0:105)*5
129 1
'SOLID',
'QUAD ',
'SHELL',
'TRUSS',
'BEAM ',
130 2
'SPRIN',
'SH_3N',
'TRIA ',
'AIRBA',
'INTER',
131 3
'NODE ',
'BLAST',
' ',
' ',
' ',
132 4
' ',
' ',
' ',
' ',
' ',
133 5
' ',
' ',
' ',
' ',
' ',
134 6
' ',
' ',
' ',
' ',
' ',
135 7
' ',
' ',
' ',
' ',
' ',
136 8
' ',
' ',
' ',
' ',
' ',
137 9
' ',
' ',
' ',
' ',
' ',
138 a
' ',
' ',
' ',
' ',
' ',
139 b
'SPCEL',
'FVBAG',
' ',
' ',
' ',
140 c
' ',
' ',
' ',
' ',
' ',
141 d
' ',
' ',
' ',
' ',
' ',
142 e
' ',
' ',
' ',
' ',
' ',
143 f
' ',
' ',
' ',
' ',
' ',
144 g
' ',
' ',
' ',
' ',
' ',
145 h
' ',
' ',
' ',
' ',
' ',
146 i
' ',
' ',
' ',
' ',
' ',
147 j
' ',
' ',
' ',
' ',
' ',
148 k
' ',
' ',
' ',
' ',
'XELEM',
149 k
'IGE3D',
' ',
' ',
' ',
' '/
156 IF(t1s==tt)ipri=mod(ncycle,iabs(ncpri))
160 IF(tt<output%TH%THIS)ithis=1
161 IF(tt<tabfis(1))iabfis=1
163 IF ((irad2r==1).AND.(r2r_siu==1).AND.(iddom/=0))
THEN
166 IF (r2r_th_main(i)>0) ithis=0
170 IF(imon > 0)
CALL elapstime(timers,etime)
171 IF(ipri/=0.AND.ithis/=0.AND.
172 . info<=0.AND.istat==0
173 . .AND.nth==0.AND.nanim==0 .AND.
174 . (iabfis/=0.OR.abfile(1)==0) )
RETURN
195 IF(n2d == 0 .AND. .NOT. multi_fvm%IS_USED)
THEN
200 mas=ms(i)*weight_md(i)
201 vx = dy_v(1,i) - dt05*dy_a(1,i)
202 vy = dy_v(2,i) - dt05*dy_a(2,i)
203 vz = dy_v(3,i) - dt05*dy_a(3,i)
204 encind=encind + ( vx*vx + vy*vy + vz*vz)*half*mas
209 mas2=ms(i)*(1-weight_md(i))*weight(i)
210 encind2=encind2 + ( vx*vx + vy*vy + vz*vz)*half*mas2
214 xmassd=xmassd+ms(i)*weight_md(i)
217 ELSEIF(idtmins==0.AND.idtmins_int==0)
THEN
220 mas=ms(i)*weight_md(i)
221 vx = v(1,i) + dt05*a(1,i)
222 vy = v(2,i) + dt05*a(2,i)
223 vz = v(3,i) + dt05*a(3,i)
224 encind=encind + ( vx*vx + vy*vy + vz*vz)
229 mas2=ms(i)*(1-weight_md(i))*weight(i)
230 encind2=encind2 + ( vx*vx + vy*vy + vz*vz)*half*mas2
236 mas=ms(i)*weight_md(i)
237 vx = v(1,i) + dt05*a(1,i)
238 vy = v(2,i) + dt05*a(2,i)
239 vz = v(3,i) + dt05*a(3,i)
240 mvx=xmom_sms(1,i)*weight_md(i)
241 mvy=xmom_sms(2,i)*weight_md(i)
242 mvz=xmom_sms(3,i)*weight_md(i)
243 encind=encind + ( vx*mvx + vy*mvy + vz*mvz)*half
244 eamsd=eamsd + ( vx*vx + vy*vy + vz*vz)*half*mas
249 mas2=ms(i)*(1-weight_md(i))*weight(i)
250 encind2=encind2 + ( vx*vx + vy*vy + vz*vz)*half*mas2
256 ELSE IF (multi_fvm%IS_USED)
THEN
258 encind = encind + partsav(2,m)
259 xmassd = xmassd + partsav(6,m)
260 xmomtd = xmomtd + partsav(3,m)
261 ymomtd = ymomtd + partsav(4,m)
262 zmomtd = zmomtd + partsav(5,m)
267 mas=ms_2d(i)*weight_md(i)
268 vx = v(1,i) + dt05*a(1,i)
269 vy = v(2,i) + dt05*a(2,i)
270 vz = v(3,i) + dt05*a(3,i)
271 encind=encind + ( vx*vx + vy*vy + vz*vz)*half*mas
276 mas2=ms_2d(i)*(1-weight_md(i))*weight(i)
277 encind2=encind2 + ( vx*vx + vy*vy + vz*vz)*half*mas2
284 encind = encind + partsav(2,m)
285 xmassd = xmassd + partsav(6,m)
286 xmomtd = xmomtd + partsav(3,m)
287 ymomtd = ymomtd + partsav(4,m)
288 zmomtd = zmomtd + partsav(5,m)
289 IF(partsav(6,m)>zero) encind2 = encind2 + half/partsav(6,m)*(partsav(3,m)**2+partsav(4,m)**2+partsav(5,m)**2)
295 encind = encind + kend
296 xmassd = xmassd -mas_nd
297 dmasnd =
max(zero,(mas_nd-ms_nd))
298 IF (dmasnd>ms_nd*em10) dmas = dmas -dmasnd
307 vx = dy_vr(1,i) - dt05*dy_ar(1,i)
308 vy = dy_vr(2,i) - dt05*dy_ar(2,i)
309 vz = dy_vr(3,i) - dt05*dy_ar(3,i)
311 . + (vx*vx + vy*vy + vz*vz)*half*in(i)*weight_md(i)
312 wewe2 = (1-weight_md(i))*weight(i)
314 . + (vx*vx + vy*vy + vz*vz)*half*in(i)*wewe2
319 vx = r(1,i) + dt05*ar(1,i)
320 vy = r(2,i) + dt05*ar(2,i)
321 vz = r(3,i) + dt05*ar(3,i)
323 . + (vx*vx + vy*vy + vz*vz)*half*in(i)*weight_md(i)
324 wewe2 = (1-weight_md(i))*weight(i)
326 . + (vx*vx + vy*vy + vz*vz)*half*in(i)*wewe2
332 enintd = epor + usreint + (dampw+edamp)*dt05
337 enintd=enintd+fxbrpm(adrrpm+10)-fxbrpm(adrrpm+14)
338 encind=encind+fxbrpm(adrrpm+11)
342 enrotd= enrotd + partsav(7,m)
343 enintd = enintd + partsav(1,m) + partsav(24,m) + partsav(26,m)
344 output%TH%WFEXT = output%TH%WFEXT + partsav(27,m)
345 wfexth = wfexth + partsav(27,m)
346 wplast = wplast + partsav(29,m)
353 IF(nty == 7 .OR. nty == 21)
THEN
356 enintd = enintd + qfricint(i)
364 encin2=encin2+encind2
366 enrot2=enrot2+enrotd2
384 output%TH%WFEXT=enint
385 ELSEIF (idy_damp>0)
THEN
387 enint = enint + dy_edamp
431 ELSEIF (istat==3)
THEN
441 entmp(1) = output%TH%WFEXT
447 entmp(7) = econt_cumu
449 entmp(9) = output%DATA%INOUT%DM_IN
450 entmp(10) = output%DATA%INOUT%DM_OUT
451 entmp(11) = output%DATA%INOUT%DE_IN
452 entmp(12) = output%DATA%INOUT%DE_OUT
455 output%TH%WFEXT = zero
463 output%DATA%INOUT%DM_IN = zero
464 output%DATA%INOUT%DM_OUT = zero
465 output%DATA%INOUT%DE_IN = zero
466 output%DATA%INOUT%DE_OUT = zero
468 output%TH%WFEXT = entmp(1)
474 econt_cumu = entmp(7)
476 output%DATA%INOUT%DM_IN = entmp(9)
477 output%DATA%INOUT%DM_OUT = entmp(10)
478 output%DATA%INOUT%DE_IN = entmp(11)
479 output%DATA%INOUT%DE_OUT = entmp(12)
485 IF(idtmins/=0.OR.idtmins_int/=0)
THEN
487 eams = (encin-eams)/eams
497 dm_inout = output%DATA%INOUT%DM_IN+output%DATA%INOUT%DM_OUT
498 de_inout = output%DATA%INOUT%DE_IN+output%DATA%INOUT%DE_OUT
500 entot = encin + enint + enrot
501 entotb = entot + encin2 + enrot2
503 entot0=entot - output%TH%WFEXT - output%TH%WFEXT_MD - de_inout
504 deltae=encin2 + enrot2
505 mass0 = xmass - dmas - dm_inout
507 entot1=entot0 + output%TH%WFEXT + de_inout
508 entot1b=entot0 + output%TH%WFEXT + deltae + output%TH%WFEXT_MD + de_inout
509 IF(abs(entot1b)>em20)
THEN
510 err = entotb/entot1b - one
511 err1 =
max(-x99,
min(x99,err*hundred))
516 emass = (xmass - (mass0+dm_inout)) /
max(mass0+dm_inout,em20)
523 IF (sensors%NSTAT > 0)
THEN
526 isens = sensors%STAT(i)
527 ts = sensors%SENSOR_TAB(isens)%TSTART
529 mstat(i) = mstat(i)+1
531 IF (mstat(i)==1) mstatt=1
537 IF (sensors%NOUTP > 0)
THEN
540 isens = sensors%OUTP(i)
541 ts = sensors%SENSOR_TAB(isens)%TSTART
543 moutp(i) = moutp(i)+1
545 IF(moutp(i)==1) moutpt=1
549 IF((nerr_posit==0.AND.abs(err)>demxk).OR.
550 . (nerr_posit==1.AND.err>demxk))
THEN
551 CALL ancmsg(msgid=205,anmode=aninfo)
563 ELSEIF((nerr_posit==0.AND.abs(err)>demxs).OR.
564 . (nerr_posit==1.AND.err>demxs))
THEN
565 CALL ancmsg(msgid=206,anmode=aninfo)
581 CALL ancmsg(msgid=207,anmode=aninfo)
593 ELSEIF(emass>dmtmxs)
THEN
594 CALL ancmsg(msgid=208,anmode=aninfo)
617 rtmp(4) = output%TANIM
618 rtmp(5) = output%TH%THIS
622 rtmp(9) = h3d_data%TH3D
623 rtmp(10) = dynain_data%TDYNAIN
628 mstop = nint(rtmp(1))
629 mrest = nint(rtmp(2))
630 mdess = nint(rtmp(3))
631 output%TANIM = rtmp(4)
632 output%TH%THIS = rtmp(5)
635 h3d_data%TH3D = rtmp(9)
636 dynain_data%TDYNAIN = rtmp(10)
647 IF (nlpri /= 0) ilign = nlpri
648 jpri=mod(ncycle,ilign*iabs(ncpri))
649 IF(jpri==0)
WRITE(iout,1000)
650 WRITE(iout,1100) ncycle,tt,dt2,eltyp(itypts),nelts,err1,enint,encin,enrot
654 IF(ncycle>=debug(10))
THEN
655 write (*,*)
" ALE ADVECTION SET OFF"
658 WRITE(istdo,
'(A,I8,2(A,1PE11.4),A,0PF5.1,A,1PE11.4)')
' NC=',ncycle,
' T=',tt,
' DT=',dt2,
' ERR=',err1,
'% DM/M=',emass
660 WRITE(istdo,
'(2(A,I8),A,1PE11.4)')
' LAG_NC=',lag_nc,
', NITER_GC=',niter_gc,
', LAG_ERSQ2=',lag_ersq2
662 IF(imon > 0 .AND. tt-tt0 > zero)
THEN
664 retime = (etime*(tstop-tt0)) / (tt-tt0) - etime
665 WRITE(istdo,
'(A,F14.2,A,A,F14.2,A)')
' ELAPSED TIME=',etime,
' s ',
' REMAINING TIME=',retime,' s
'
672 WRITE (IUSC3,'(//,a)
',ERR=990) ' current state:
'
673 WRITE (IUSC3,'(a,/)
',ERR=990) ' --------------
'
674 WRITE (IUSC3,'(a,i10)
',ERR=990) ' cycle =
',NCYCLE
675 WRITE (IUSC3,'(a,g14.7)
',ERR=990) ' time =
',TT
676 WRITE (IUSC3,'(a,g14.7,a,i8)
',ERR=990)' time step =
',DT2,ELTYP(ITYPTS),NELTS
677 WRITE (IUSC3,'(a,f5.1,a)
',ERR=990) ' energy error =
',ERR1,'%
'
678 WRITE (IUSC3,'(a,g14.7)
',ERR=990) ' internal energy =
',ENINT
679 WRITE (IUSC3,'(a,g14.7)
',ERR=990) ' kinetic energy =
',ENCIN
680 WRITE (IUSC3,'(a,g14.7)
',ERR=990) ' rot. kin. energy =
',ENROT
681 WRITE (IUSC3,'(a,g14.7)
',ERR=990) ' EXTERNAL work =
',OUTPUT%TH%WFEXT
682 WRITE (IUSC3,'(a,g14.7)
',ERR=990) ' mass.err(m-m0)/m0=
',EMASS
684 CALL FVSTATS1(IUSC3,MONVOL,1)
686.AND.
IF(IMON > 0 TT > ZERO) THEN
688 RETIME = (ETIME*TSTOP) / TT - ETIME
689 WRITE(IUSC3,'(a)
',ERR=990) ' '
690 WRITE(IUSC3,'(a,f14.2,a)
',ERR=990)'',ETIME,' s
'
691 WRITE(IUSC3,'(a,f14.2,a)
',ERR=990)' remaining time estimate =
',RETIME,' s
'
700 1000 FORMAT(' cycle time time-step element
',
701 + 'error i-energy k-energy t k-energy r
',
702 + 'ext-work mas.err total mass mass added
')
703 1100 FORMAT(I8,2(1X,G11.4),1X,A5,1X,I10,1X,F5.1,1H%,7(1X,G11.4))
subroutine sortie_main(timers, pm, d, v, ale_connect, w, elbuf, iparg, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, wa, itab, x, geo, ms, a, partsav, icut, xcut, lpby, npby, nstrf, rwbuf, nprw, ebcs_tab, tani, inoise, bufnois, rby, neflsw, nnflsw, crflsw, flsw, lout, nodes, fsav, skew, elbuf_tab, cluster, vr, in, weight, fcluster, mcluster, dd_iad, dmas, accelm, gauge, ipari, eani, ipart, mat_param, igrnod, subset, nom_opt, ar, igrsurf, bufsf, idata, rdata, kxx, ixx, bufmat, bufgeo, kxsp, ixsp, nod2sp, spbuf, dr, fsavd, ixri, rivet, iskwn, iframe, xframe, ixs10, ixs20, ixs16, ndma, monvol, volmon, ipm, igeo, nodglob, iad_elem, fr_elem, fr_rby2, iad_rby2, fr_wall, fr_sec, fxbipm, fxbrpm, ndin, fxbdep, fxbvit, fxbacc, iflow, rflow, ipartl, npartl, iaccp, naccp, fasolfr, iparth, fr_mv, ipart_state, sh4tree, sh3tree, temp, thke, err_thk_sh4, err_thk_sh3, inod_pxfem, fthreac, nodreac, gresav, diag_sms, sh4trim, sh3trim, xmom_sms, irbe2, irbe3, lrbe2, lrbe3, fr_rbe2, fr_rbe3m, iad_rbe2, dxancg, iel_pxfem, zi_ply, vgaz, fcontg, fncontg, ftcontg, fanreac, inod_crk, iel_crk, elcutc, iadc_crk, res_sms, sensors, qfricint, igaup, ngaup, weight_md, ncont, indexcont, nodglobxfe, nodedge, xfem_tab, nv46, rthbuf, kxig3d, ixig3d, knot, wige, nercvois, nesdvois, lercvois, lesdvois, crkedge, stack, isphio, vsphio, icode, indx_crk, xedge4n, xedge3n, sph2sol, stifn, stifr, drape_sh4n, drape_sh3n, ms_2d, multi_fvm, segquadfr, h3d_data, iskew, pskids, iskwp, knotlocpc, knotlocel, pinch_data, tag_skins6, irunn_bis, tf, npc, dynain_data, fcont_max, mds_matid, ibcl, iloadp, lloadp, loadp, tagncont, loadp_hyd_inter, forc, drapeg, user_windows, output, dt, fsavsurf, table, loads, sfani, iparit, x_c, sz_npcont2, npcont2, glob_therm, pblast, wfext, mass0_start)