83 SUBROUTINE hist2(PM ,D ,X ,V ,A ,
84 2 IXS ,BUFEL ,WA ,IPARG ,SENSOR_TAB,
85 4 FSAV ,FLSW ,SKEW ,ELBUF_TAB ,CLUSTER ,
86 5 PARTSAV ,ACCELM ,NSENSOR ,MATPARAM_TAB,
87 6 WEIGHT ,IPART ,IGRSURF ,EBCS_TAB ,
88 7 ITHGRP ,ITHBUF ,SUBSET ,GEO ,
90 9 KXSP ,NOD2SP ,SPBUF ,
92 D LRIVET ,RIVET ,IXP ,
93 E ISKWN ,IFRAME ,XFRAME ,IXC ,IXQ ,
94 F DTHIS0 ,THIS0 ,IFIL ,NTHGRP2 ,IXTG ,
96 H IPARTL ,NPARTL ,IACCP ,NACCP ,
97 I IPARTH ,NPARTH ,NVPARTH ,
98 J MONVOL ,VOLMON ,FR_MV ,TEMP,INOD ,
99 K FTHREAC ,NODREAC ,GRESAV ,GAUGE ,
100 L IGAUP ,NGAUP ,ITTYP ,SIZE_MES ,
101 M RTHBUF ,THKE ,STACK ,ISPHIO ,VSPHIO ,
102 N ITHFLAG ,PINCH_DATA,MULTI_FVM,W ,SITHBUF ,
103 Q FSAVSURF,NEED_TO_REINIT_FSAV ,GLOB_THERM ,OUTPUT)
117 USE ebcs_mod ,
only : t_ebcs_tab
120 USE output_mod ,
ONLY : output_
125#include "implicit_f.inc"
129#include "com01_c.inc"
130#include "com04_c.inc"
131#include "com06_c.inc"
132#include "com08_c.inc"
134#include "units_c.inc"
135#include "param_c.inc"
136#include "scr05_c.inc"
137#include "scr07_c.inc"
138#include "scr11_c.inc"
139#include "scr12_c.inc"
140#include "scr13_c.inc"
141#include "scr17_c.inc"
142#include "scr23_c.inc"
143#include "scrfs_c.inc"
145#include "impl1_c.inc"
146#include "rad2r_c.inc"
147#include "tabsiz_c.inc"
151 TYPE(t_ebcs_tab),
TARGET,
INTENT(IN) :: EBCS_TAB
152 INTEGER,
INTENT(IN) :: SITHBUF,NSENSOR
154 INTEGER IXS(NIXS,NUMELS),IPARG(NPARG,NGROUP),
155 . IGEO(NPROPGI,NUMGEO),
156 . WEIGHT(NUMNOD),IPART(LIPART1,*),
157 . ITHGRP(NITHGR,*),ITHBUF(*),
158 . IXR(NIXR,*),KXSP(NISP,*),NOD2SP(*),LRIVET(4,*),IPM(NPROPMI,NUMMAT),
159 . ISKWN(LISKN,*),IFRAME(LISKN,*),IXC(NIXC,NUMELC),IXQ(NIXQ,NUMELQ),
160 . IXTG(NIXTG,*),IFIL,NTHGRP2,IPARTL(*),IACCP(*),
161 . NACCP(*),NPARTH,IPARTH(NPARTH,*),NVPARTH,
162 . MONVOL(*), FR_MV(*),INOD(*),
163 . NODREAC(*),KXX(NIXX,*),IGAUP(*),NGAUP(*),ITTYP,
164 . SIZE_MES,ISPHIO(NISPHIO,*),ITHFLAG
166 . PM(NPROPM,NUMMAT), D(3,NUMNOD), X(3,NUMNOD), V(3,NUMNOD), A(3,NUMNOD), BUFEL(*), WA(*),
167 . FSAV(NTHVKI,*), FLSW(9,*)
171 . rivoff(nrivet), volmon(*),
172 . temp(*),fthreac(*),gresav(npsav,*), gauge(llgauge,nbgauge),rthbuf(*),
173 . vsphio(*), w(3,numnod)
174 REAL(KIND=8), intent(inout) :: this0, dthis0
175 INTEGER,
DIMENSION(NIXP,NUMELP) ,
INTENT(IN):: IXP
176 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP) :: ELBUF_TAB
177 TYPE (CLUSTER_) ,
DIMENSION(NCLUSTER) :: CLUSTER
178 TYPE (STACK_PLY) :: STACK
179 TYPE (SUBSET_) ,
DIMENSION(NSUBS) :: SUBSET
180 TYPE (SURF_) ,
DIMENSION(NSURF) :: IGRSURF
181 TYPE (PINCH) :: PINCH_DATA
182 TYPE (MULTI_FVM_STRUCT),
INTENT(IN) :: MULTI_FVM
183 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) ,
INTENT(IN) :: SENSOR_TAB
184 TYPE (MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT) ,
INTENT(IN) :: MATPARAM_TAB
185 TYPE (glob_therm_),
INTENT(IN) :: glob_therm
186 my_real,
INTENT(INOUT) :: FSAVSURF(TH_SURF_NUM_CHANNEL,NSURF)
187 LOGICAL,
INTENT(INOUT) :: NEED_TO_REINIT_FSAV
188 TYPE(OUTPUT_),
INTENT(INOUT) :: OUTPUT
192 LOGICAL ICOND,RIVET_BOOL,
194 INTEGER I,J,K,L,M,N,II,JJ,NP,NN,N1,NRWA,
195 . jale,fsavmax,
nvar,iad,ityp,iadv,krbhol,id_hist, seek_id,
196 . imid,ipid,jale_from_mat,jale_from_prop,surf_id
198 my_real xx,yy,zz,det,xxmom,yymom,zzmom,
199 . xcg, ycg, zcg, ixx, iyy, izz,ixy, iyz, izx,
200 . jxx, jyy, jzz, jxy, jyz, jzx, aa, thisc,
201 . fsavint(nthvki,ninter+nintsub),fsavvent(5,nventtot),
203 my_real,
DIMENSION(100) :: subsav
204 my_real,
DIMENSION(1) :: wa_local
205 REAL(KIND=8) :: this0_double,tt_double
206 REAL(KIND=8) :: dthis0_double,dt1_double,thisc_double
234 IF (iunit == 3) seek_id = 1
236 IF ((irad2r==1).AND.(r2r_siu==1))
THEN
237 r2r_th_flag(seek_id) = 0
239 r2r_th_main(seek_id) = 0
241 IF (r2r_th_main(seek_id)==0)
THEN
244 ELSEIF (r2r_th_main(seek_id)==1)
THEN
246 thisc_double = thisc_double - em20
255 IF (tt>=thisc_double)
THEN
256 need_to_reinit_fsav = .true.
258 IF (iddom == 0) r2r_th_main(seek_id) = 1
259 r2r_th_flag(seek_id) = 1
262 dthis0_double = dthis0
265 this0_double=
max(tt_double,this0_double+
max(dthis0_double,dt1_double))
266 this0_double=
min(tstop,this0_double)
269 this0_double=
max(tt_double,this0_double+dthis0_double)
270 this0_double=
min(tstop,this0_double)
276 array(1) = glob_therm%HEAT_FFLUX
277 array(2) = glob_therm%HEAT_STORED
278 array(3) = glob_therm%HEAT_CONV
279 array(4) = glob_therm%HEAT_RADIA
280 array(5) = glob_therm%HEAT_MECA
285 IF ((irad2r==1).AND.(r2r_siu==1))
THEN
286 IF (seek_flag(seek_id)==1)
THEN
288 seek_flag(seek_id) = 0
295 CALL wrtdes(wa_local,wa_local,1,ittyp,1)
308 wa(ii+9) =output%TH%WFEXT
310 wa(ii+11)=econt+econt_cumu+econtv+econtd
312 wa(ii+13)= econt+econt_cumu
317 IF(iunit==iuhis)
CALL wrtdes(wa,wa,nglobth,ittyp,1)
323 IF(nspmd > 1 .AND. nthpart > 0)
CALL spmd_glob_dsum9(gresav,npsav*ngpe)
337 nvar=iparth(nvparth,i)
338 iad =iparth(nvparth+1,i)
341 partsav(j,i) = gresav(j,i-npart)
351 aa = one/
max(em20,partsav(6,i))
352 xcg = partsav(9,i)*aa
353 ycg = partsav(10,i)*aa
354 zcg = partsav(11,i)*aa
355 xxmom = partsav(12,i)-partsav(5,i)*ycg+partsav(4,i)*zcg
356 yymom = partsav(13,i)-partsav(3,i)*zcg+partsav(5,i)*xcg
357 zzmom = partsav(14,i)-partsav(4,i)*xcg+partsav(3,i)*ycg
358 xx = partsav( 9,i)*xcg
359 yy = partsav(10,i)*ycg
360 zz = partsav(11,i)*zcg
361 ixx = partsav(15,i)-yy-zz
362 iyy = partsav(16,i)-zz-xx
363 izz = partsav(17,i)-xx-yy
364 ixy = partsav(18,i)+partsav( 9,i)*ycg
365 iyz = partsav(19,i)+partsav(10,i)*zcg
366 izx = partsav(20,i)+partsav(11,i)*xcg
370 IF(n <= sithbuf)
THEN
376 wa(ii)=partsav(1,i)+partsav(24,i)+partsav(26,i)
416 wa(ii)=partsav(21,i)+partsav(23,i)
419 . *( partsav(3,i)*partsav(3,i)
420 . + partsav(4,i)*partsav(4,i)
421 . + partsav(5,i)*partsav(5,i) )
422 . /
max(em20,partsav(6,i))
435 . ixx * jxx + ixy * jxy + izx * jzx)
437 . (half*(jxx*xxmom*xxmom+jyy*yymom*yymom+jzz*zzmom*zzmom)
438 . + jxy*xxmom*yymom+jyz*yymom*zzmom+jzx*xxmom*zzmom )
444 wa(ii)=partsav(3,i)/
max(partsav(6,i),em20)
446 wa(ii)=partsav(4,i)/
max(partsav(6,i),em20)
448 wa(ii)=partsav(5,i)/
max(partsav(6,i),em20)
451 ELSEIF(k > 0 .AND.
SIZE(partsav,1) >= k)
THEN
459 IF (ii/=0)
CALL wrtdes(wa,wa,ii,ittyp,1)
465 IF(nsubs>0.AND.ispmd==0)
THEN
468 nvar=subset(i)%NVARTH(ithflag)
470 np = subset(i)%NTPART
476 jj=subset(i)%TPART(j)
478 subsav(k)=subsav(k)+partsav(k,jj)
482 aa = one/
max(em20,subsav(6))
486 xxmom = subsav(12)-subsav(5)*ycg+subsav(4)*zcg
487 yymom = subsav(13)-subsav(3)*zcg+subsav(5)*xcg
488 zzmom = subsav(14)-subsav(4)*xcg+subsav(3)*ycg
492 ixx = subsav(15)-yy-zz
493 iyy = subsav(16)-zz-xx
494 izz = subsav(17)-xx-yy
495 ixy = subsav(18)+subsav( 9)*ycg
496 iyz = subsav(19)+subsav(10)*zcg
497 izx = subsav(20)+subsav(11)*xcg
498 IF ((irad2r==1).AND.(r2r_siu==1))
THEN
514 wa(ii)=subsav(1)+subsav(24)+subsav(26)
552 . *( subsav(3)*subsav(3)
553 . + subsav(4)*subsav(4)
554 . + subsav(5)*subsav(5) )
555 . /
max(em20,subsav(6))
567 det = one/
max(em20,ixx * jxx + ixy * jxy + izx * jzx)
568 wa(ii)=det * (half*(ixx*xxmom*xxmom+iyy*yymom*yymom+izz*zzmom*zzmom)
569 . + ixy*xxmom*yymom+iyz*yymom*zzmom+izx*xxmom*zzmom )
575 wa(ii)=subsav(3)/
max(subsav(6),em20)
577 wa(ii)=subsav(4)/
max(subsav(6),em20)
579 wa(ii)=subsav(5)/
max(subsav(6),em20)
590 IF(ii/=0)
CALL wrtdes(wa,wa,ii,ittyp,1)
596 fsavmax = nvolu+nrbag+njoint+nsect+nrbody+nrwall+ninter+nintsub
601 IF(nintsub>0)
CALL spmd_glob_dsum9(fsav(1,1+ninter+nrwall+nrbody+nsect+njoint+nvolu+nrbag),nthvki*nintsub)
613 IF(ninter+nintsub/=0.AND.ispmd==0)
THEN
616 fsavint(j,n)=fsav(j,n)
619 fsavint(j,ninter+n)=fsav(j,(ninter+nrwall+nrbody+nsect+njoint+nvolu+nrbag)+n)
630 krbhol =1 + nrvolu * nvolu + lrcbag + lrbagjet
631 CALL bufmonv(fsavvent,monvol,volmon(krbhol),fr_mv)
648 IF(igrsurf(i)%TH_SURF == 1 .AND. fsavsurf(1,i) == zero)
THEN
650 CALL surf_area(x, nn, igrsurf(i)%NODES, fsavsurf(1,i), numnod)
671 IF(igrsurf(i)%TH_SURF == 1)
THEN
672 IF( fsavsurf(5,i) > zero )
THEN
673 fsavsurf(4,i) = fsavsurf(4,i) / fsavsurf(5,i)
686 IF (ebcs_tab%nebcs > 0)
THEN
687 DO k=1,ebcs_tab%nebcs
688 IF(.NOT.ebcs_tab%need_to_compute(k)) cycle
689 has_th = ebcs_tab%TAB(k)%poly%has_th
691 surf_id = ebcs_tab%TAB(k)%poly%surf_id
692 nn = igrsurf(surf_id)%NSEG
693 IF(fsavsurf(1,surf_id) > zero)
THEN
694 fsavsurf(3,surf_id) = fsavsurf(3,surf_id) / fsavsurf(1,surf_id)
695 fsavsurf(4,surf_id) = fsavsurf(4,surf_id) / fsavsurf(1,surf_id)
704 IF(nrivf>1 .AND. nspmd > 1 .AND. nrivet>0)
THEN
708 rivoff(k) = rivet(1,k)
710 IF(lrivet(2,k) <1) rivet_bool=.true.
711 IF(rivet_bool.EQV..false.)
THEN
712 IF (weight(i)/=1) rivet_bool=.true.
723 rivet(1,k) = rivoff(k)
729 IF(naccelm>0 .AND. nspmd > 1)
THEN
736 IF(nbgauge>0 .AND. nspmd > 1)
THEN
743 IF(nslipring_g + nretractor_g > 0)
THEN
747 th_slipring(
slipring(k)%IDG,1:6) = zero
777! -------------------------------------
782 CALL thres(iparg,ithbuf,elbuf_tab,
wa_spring(id_hist)%WA_REAL,igeo,
783 . ixr,nthgrp2,ithgrp,x)
799 2
wa_nod(id_hist)%WA_REAL,x ,d ,v ,a ,
800 3 vr ,ar ,iskwn ,iframe ,skew ,
801 4 xframe ,weight ,temp ,inod ,fthreac,
802 5 nodreac, cptreac ,dr ,ittyp ,nthgrp2,
803 6 ithgrp ,pinch_data,glob_therm%ITHERM_FE)
819 CALL thsol( elbuf_tab, nthgrp2, ithgrp ,
820 . iparg , ithbuf ,
wa_sol(id_hist)%WA_REAL ,
821 . ixs , x , ipm ,pm ,igeo ,
822 . multi_fvm, v , w ,glob_therm%ITHERM,
823 . numels , nummat , numgeo , numnod,sithbuf)
837! th optimization
for quad/tria elements
840 CALL thquad(elbuf_tab,nthgrp2 ,ithgrp ,
841 1 iparg ,ithbuf ,
wa_quad(id_hist)%WA_REAL ,
842 2 ipm ,ixq ,ixtg ,x ,multi_fvm ,
843 3 v ,w ,glob_therm%ITHERM ,pm ,
844 . numelq ,nummat ,numnod ,sithbuf ,numeltg)
860 CALL thcoq(elbuf_tab,matparam_tab,nthgrp2 , ithgrp ,
861 . iparg,ithbuf,
wa_coq(id_hist)%WA_REAL,
862 . ipm,igeo,ixc,ixtg ,pm,
863 . rthbuf ,thke ,stack)
879 CALL thtrus(iparg,nthgrp2 ,
880 . ithbuf ,elbuf_tab,
wa_trus(id_hist)%WA_REAL )
896 CALL thpout(iparg , nthgrp2 , ithgrp , geo, ixp,
897 . ithbuf, elbuf_tab,
wa_pout(id_hist)%WA_REAL )
913 CALL thsph(elbuf_tab, nthgrp2, ithgrp, iparg, ithbuf,
914 1 spbuf ,kxsp ,nod2sp,pm,
wa_sph(id_hist)%WA_REAL )
930 CALL thnst(elbuf_tab,iparg,nthgrp2, ithgrp,ithbuf,
931 . geo ,kxx,
wa_nst(id_hist)%WA_REAL)
958 ELSEIF( nanaly /= 0 .AND. (ityp==2.OR.ityp==117) )
THEN
962 ELSEIF(ityp==3.OR.ityp==7)
THEN
989 ELSEIF(ityp==100)
THEN
996 ELSEIF(ityp==101)
THEN
1000 CALL thkin(iad,iad+nn-1,ithbuf,iadv,iadv+
nvar-1,
1002 ELSEIF(ityp==102)
THEN
1006 CALL thkin(iad,iad+nn-1,ithbuf,iadv,iadv+
nvar-1,
1007 . wa,fsav(1,1+ninter),ittyp)
1008 ELSEIF(ityp==103)
THEN
1012 CALL thkin(iad,iad+nn-1,ithbuf,iadv,iadv+
nvar-1,
1013 . wa,fsav(1,1+ninter+nrwall),ittyp)
1014 ELSEIF(ityp==104)
THEN
1018 CALL thkin(iad,iad+nn-1,ithbuf,iadv,iadv+
nvar-1,
1019 . wa,fsav(1,1+ninter+nrwall+nrbody),
1021 ELSEIF(ityp==105)
THEN
1025 CALL thkin(iad,iad+nn-1,ithbuf,iadv,iadv+
nvar-1,wa,
1026 . fsav(1,1+ninter+nrwall+nrbody+nsect),ittyp)
1027 ELSEIF(ityp==106)
THEN
1031 CALL thkin(iad,iad+nn-1,ithbuf,iadv,iadv+
nvar-1,wa,
1032 . fsav(1,1+ninter+nrwall+nrbody+nsect+njoint),
1034 ELSEIF(ityp==107)
THEN
1038 CALL thmonv(iad,iad+nn-1,ithbuf,iadv,iadv+
nvar-1,wa,
1039 . fsav(1,1+ninter+nrwall+nrbody+nsect+njoint+nrbag),
1040 . fsavvent,monvol,ittyp)
1041 ELSEIF(ityp==108)
THEN
1050 DO l=iadv,iadv+
nvar-1
1053 wa(ii)=accelm(19+k,i)
1056 IF(ii>0)
CALL wrtdes(wa,wa,ii,ittyp,1)
1058 ELSEIF(ityp==109.AND.nrivf>1)
THEN
1066 DO l=iadv,iadv+
nvar-1
1072 IF(ii>0)
CALL wrtdes(wa,wa,ii,ittyp,1)
1074 ELSEIF(ityp==110)
THEN
1085 DO l=iadv,iadv+
nvar-1
1141 DO l=iadv,iadv+
nvar-1
1195 DO l=iadv,iadv+
nvar-1
1251 IFCALL wrtdes(wa,wa,ii,ittyp,1)
1253 ELSEIF(ityp==111)
THEN
1257 CALL thkin(iad,iad+nn-1,ithbuf,iadv,iadv+
nvar-1,wa,
1258 . fsav(1,1+ninter+nrwall+nrbody+nsect+njoint+nrbag+nvolu),
1260 ELSEIF (ityp==112)
THEN
1262 ELSEIF (ityp==113)
THEN
1270 DO l=iadv,iadv+
nvar-1
1292 IF(ii>0)
CALL wrtdes(wa,wa,ii,ittyp,1)
1294 ELSEIF (ityp==114)
THEN
1299 . ittyp,ithbuf,cluster,skew,x ,
1301 ELSEIF (ityp==115)
THEN
1309 wa(ii)=vsphio(isphio(4,i)+16)
1312 IF((ispmd==0).AND.(ii>0))
CALL wrtdes(wa,wa,ii,ittyp,1)
1313 ELSEIF (ityp==116)
THEN
1317 CALL thsurf(iad,iad+nn-1,iadv,iadv+
nvar-1,ithbuf,wa ,fsavsurf,ittyp,nsurf)
1319 ELSEIF (ityp==118)
THEN
1327 DO l=iadv,iadv+
nvar-1
1331 wa(ii)= th_slipring(i,1)
1333 wa(ii)= th_slipring(i,2)
1335 wa(ii)= th_slipring(i,3)
1337 wa(ii)= th_slipring(i,4)
1339 wa(ii)= th_slipring(i,5)
1341 wa(ii)= th_slipring(i,6)
1345 IF(ii>0)
CALL wrtdes(wa,wa,ii,ittyp,1)
1348 ELSEIF (ityp==119)
THEN
1356 DO l=iadv,iadv+
nvar-1
1360 wa(ii)= th_retractor(i
1362 wa(ii)= th_retractor(i,2)
1368 IF(ii>0)
CALL wrtdes(wa,wa,ii,ittyp,1)
1371 ELSEIF (ityp == 120)
THEN
1375 CALL thsens (sensor_tab,nsensor,
1376 . iad ,iad+nn-1 ,iadv ,iadv+
nvar-1,ithbuf ,
1377 . wa ,ittyp ,sithbuf)
1380 ELSEIF (ityp == 121)
THEN
1385 . iad ,iad+nn-1 ,iadv ,iadv+
nvar-1,ithbuf ,
1386 . wa ,ittyp ,sithbuf,swa,ispmd)
1395 IF (nsflsw> 0 .AND. nabfile==0)
THEN
1422 CALL wrtdes(wa,wa,9*nsflsw,ittyp,1)
1430 DO m=1,npart+nthpart
1433 IF((i<23.OR.i>26.OR.i==25).AND.i/=8 .AND. nabfile==0
1434 . .AND. (mstop /= 1 .OR. ictlstop == 1) )
then
1445 icond = tt+2.*dt2>=t1s+dt2s
1451 jale_from_mat = nint(pm(72,imid))
1452 jale_from_prop = igeo(62,ipid)
1453 jale =
max(jale_from_mat, jale_from_prop)
1454 IF(jale == 0 .OR. (jale > 0 .AND. icond))
THEN
1456 IF((i < 23.OR.i > 26.OR.i==25) .AND. i /= 8 .AND. nabfile==0 .AND.(mstop /= 1 .OR. ictlstop == 1) )
THEN
1465 IF (nthpart > 0)
THEN
subroutine hist2(pm, d, x, v, a, ixs, bufel, wa, iparg, sensor_tab, fsav, flsw, skew, elbuf_tab, cluster, partsav, accelm, nsensor, matparam_tab, weight, ipart, igrsurf, ebcs_tab, ithgrp, ithbuf, subset, geo, kxx, ixr, kxsp, nod2sp, spbuf, ar, vr, dr, lrivet, rivet, ixp, iskwn, iframe, xframe, ixc, ixq, dthis0, this0, ifil, nthgrp2, ixtg, igeo, ipm, ipartl, npartl, iaccp, naccp, iparth, nparth, nvparth, monvol, volmon, fr_mv, temp, inod, fthreac, nodreac, gresav, gauge, igaup, ngaup, ittyp, size_mes, rthbuf, thke, stack, isphio, vsphio, ithflag, pinch_data, multi_fvm, w, sithbuf, fsavsurf, need_to_reinit_fsav, glob_therm, output)