1*59599516SKenneth E. Jansen subroutine Bflux (y, ac, x, 2*59599516SKenneth E. Jansen & shp, shgl, shpb, 3*59599516SKenneth E. Jansen & shglb, nodflx, ilwork) 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 6*59599516SKenneth E. Jansenc 7*59599516SKenneth E. Jansenc This routine : 8*59599516SKenneth E. Jansenc 1. computes the boundary fluxes 9*59599516SKenneth E. Jansenc 2. prints the results in the file [FLUX.lstep] 10*59599516SKenneth E. Jansenc 3. prints the primitives variables in the files [OUTPUT.lstep] 11*59599516SKenneth E. Jansenc and [OUTCHM.lstep] (2-D computations only) 12*59599516SKenneth E. Jansenc 4. calls the restar routine 13*59599516SKenneth E. Jansenc 14*59599516SKenneth E. Jansenc 15*59599516SKenneth E. Jansenc output: 16*59599516SKenneth E. Jansenc in file FLUX.lstep: 17*59599516SKenneth E. Jansenc run title 18*59599516SKenneth E. Jansenc step number, run time 19*59599516SKenneth E. Jansenc node_number 20*59599516SKenneth E. Jansenc x_1 ... x_nsd ! coordinates 21*59599516SKenneth E. Jansenc normal_1 ... normal_nsd ! outward normal direction 22*59599516SKenneth E. Jansenc tau_1n ... tau_nsd n ! boundary viscous flux 23*59599516SKenneth E. Jansenc q_n ! boundary head flux 24*59599516SKenneth E. Jansenc ro u_1 ... u_nsd t p s Mach ! primitive variables 25*59599516SKenneth E. Jansenc y_N2 y_O2 y_NO y_N y_O ! gas composition 26*59599516SKenneth E. Jansenc 27*59599516SKenneth E. Jansenc in file OUTPUT.lstep: 28*59599516SKenneth E. Jansenc run title 29*59599516SKenneth E. Jansenc step number, run time, gamma, Rgas 30*59599516SKenneth E. Jansenc density, velocity vector and temperature 31*59599516SKenneth E. Jansenc 32*59599516SKenneth E. Jansenc in file OUTCHM.lstep: 33*59599516SKenneth E. Jansenc run title 34*59599516SKenneth E. Jansenc step number, run time, gamma, Rgas 35*59599516SKenneth E. Jansenc pressure, entropy, Mach, y_N2, y_O2, y_NO, y_N and y_O 36*59599516SKenneth E. Jansenc 37*59599516SKenneth E. Jansenc 38*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1991. 39*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 40*59599516SKenneth E. Jansenc 41*59599516SKenneth E. Jansen use pointer_data 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansen include "common.h" 44*59599516SKenneth E. Jansenc 45*59599516SKenneth E. Jansen dimension y(nshg,ndof), ac(nshg,ndof), 46*59599516SKenneth E. Jansen & x(numnp,nsd), 47*59599516SKenneth E. Jansen & shp(MAXTOP,maxsh,MAXQPT), 48*59599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 49*59599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 50*59599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT), 51*59599516SKenneth E. Jansen & nodflx(numflx) 52*59599516SKenneth E. Jansenc 53*59599516SKenneth E. Jansen dimension invflx(nshg), flxres(nshg,nflow), 54*59599516SKenneth E. Jansen & flxLHS(nshg,1), flxnrm(nshg,nsd), 55*59599516SKenneth E. Jansen & temp(nshg), itemp(numflx), 56*59599516SKenneth E. Jansen & q(nshg,ndof), qq(nshg,8), 57*59599516SKenneth E. Jansen & ilwork(nlwork) 58*59599516SKenneth E. Jansenc 59*59599516SKenneth E. Jansen character*20 fname1, fname2, 60*59599516SKenneth E. Jansen & fmt1, fmt2 61*59599516SKenneth E. Jansenc 62*59599516SKenneth E. Jansenc.... ************************>> Restart <<*************************** 63*59599516SKenneth E. Jansenc 64*59599516SKenneth E. Jansenc.... set up the timer 65*59599516SKenneth E. Jansenc 66*59599516SKenneth E. Jansen call timer ('Output ') 67*59599516SKenneth E. Jansenc 68*59599516SKenneth E. Jansenc.... call restart option 69*59599516SKenneth E. Jansenc 70*59599516SKenneth E. Jansen q(:,1:ndof)=y(:,1:ndof) 71*59599516SKenneth E. Jansen 72*59599516SKenneth E. Jansen if (irs .ge. 1) call restar ('out ', q,ac) 73*59599516SKenneth E. Jansenc 74*59599516SKenneth E. Jansenc No Flux output for now KENJ 75*59599516SKenneth E. Jansenc 76*59599516SKenneth E. Jansen return 77*59599516SKenneth E. Jansenc 78*59599516SKenneth E. Jansenc.... scale the primitive variables for output 79*59599516SKenneth E. Jansenc 80*59599516SKenneth E. Jansen q(:,1) = ro * q(:,1) 81*59599516SKenneth E. Jansen q(:,2) = vel * q(:,2) 82*59599516SKenneth E. Jansen q(:,3) = vel * q(:,3) 83*59599516SKenneth E. Jansen if (nsd .eq. 3) 84*59599516SKenneth E. Jansen & q(:,4) = vel * q(:,4) 85*59599516SKenneth E. Jansen q(:,nflow) = temper * q(:,nflow) 86*59599516SKenneth E. Jansen qq(:,1) = press * qq(:,1) 87*59599516SKenneth E. Jansen qq(:,2) = entrop * qq(:,2) 88*59599516SKenneth E. Jansenc 89*59599516SKenneth E. Jansenc.... *************************>> Output <<*************************** 90*59599516SKenneth E. Jansenc 91*59599516SKenneth E. Jansenc.... output only for 2-D computations 92*59599516SKenneth E. Jansenc 93*59599516SKenneth E. Jansen if ((irs .eq. 2) .and. (nsd .eq. 2)) then 94*59599516SKenneth E. Jansenc 95*59599516SKenneth E. Jansenc.... get the file names ('output.'lstep) and ('outchm.'lstep) 96*59599516SKenneth E. Jansenc 97*59599516SKenneth E. Jansen itmp = 1 98*59599516SKenneth E. Jansen if (lstep .gt. 0) itmp = int(log10(float(lstep)))+1 99*59599516SKenneth E. Jansen write (fmt1,"('(''output.'',i',i1,',1x)')") itmp 100*59599516SKenneth E. Jansen write (fmt2,"('(''outchm.'',i',i1,',1x)')") itmp 101*59599516SKenneth E. Jansen write (fname1,fmt1) lstep 102*59599516SKenneth E. Jansen write (fname2,fmt2) lstep 103*59599516SKenneth E. Jansenc 104*59599516SKenneth E. Jansenc.... open file 105*59599516SKenneth E. Jansenc 106*59599516SKenneth E. Jansen if (ioform .eq. 0) then 107*59599516SKenneth E. Jansen open (unit=iout, file=fname1, status='unknown', err=995) 108*59599516SKenneth E. Jansen if (ichem .eq. 1) 109*59599516SKenneth E. Jansen & open (unit=ichmou, file=fname2, status='unknown', err=996) 110*59599516SKenneth E. Jansen else 111*59599516SKenneth E. Jansen open (unit=iout, file=fname1, status='unknown', err=995, 112*59599516SKenneth E. Jansen & form='unformatted') 113*59599516SKenneth E. Jansen if (ichem .eq. 1) 114*59599516SKenneth E. Jansen & open (unit=ichmou, file=fname2, status='unknown', err=996, 115*59599516SKenneth E. Jansen & form='unformatted') 116*59599516SKenneth E. Jansen endif 117*59599516SKenneth E. Jansenc 118*59599516SKenneth E. Jansenc.... output header 119*59599516SKenneth E. Jansenc 120*59599516SKenneth E. Jansen if (ioform .eq. 0) then 121*59599516SKenneth E. Jansen write (iout, 1000) title, lstep, time, gamma, Rgas 122*59599516SKenneth E. Jansen if (ichem .eq. 1) 123*59599516SKenneth E. Jansen & write (ichmou,1000) title, lstep, time 124*59599516SKenneth E. Jansen else 125*59599516SKenneth E. Jansen write (iout) title 126*59599516SKenneth E. Jansen write (iout) nshg, lstep, time, gamma, Rgas 127*59599516SKenneth E. Jansenc 128*59599516SKenneth E. Jansen if (ichem .eq. 1) then 129*59599516SKenneth E. Jansen write (ichmou) title 130*59599516SKenneth E. Jansen write (ichmou) nshg, lstep, time 131*59599516SKenneth E. Jansen endif 132*59599516SKenneth E. Jansen endif 133*59599516SKenneth E. Jansenc 134*59599516SKenneth E. Jansen if (ioform .eq. 0) then 135*59599516SKenneth E. Jansen do n = 1, nshg 136*59599516SKenneth E. Jansen write (iout, 2000) n, (q(n,i), i=1,ndof) 137*59599516SKenneth E. Jansen if (ichem .eq. 1) 138*59599516SKenneth E. Jansen & write (ichmou,2000) n, (qq(n,i), i=1,8) 139*59599516SKenneth E. Jansen enddo 140*59599516SKenneth E. Jansen else 141*59599516SKenneth E. Jansen write (iout) q 142*59599516SKenneth E. Jansen if (ichem .eq. 1) write (ichmou) qq 143*59599516SKenneth E. Jansen endif 144*59599516SKenneth E. Jansenc 145*59599516SKenneth E. Jansenc.... close the files 146*59599516SKenneth E. Jansenc 147*59599516SKenneth E. Jansen close (iout) 148*59599516SKenneth E. Jansen if (ichem .eq. 1) close (ichmou) 149*59599516SKenneth E. Jansenc 150*59599516SKenneth E. Jansen endif 151*59599516SKenneth E. Jansenc 152*59599516SKenneth E. Jansenc.... stop the timer 153*59599516SKenneth E. Jansenc 154*59599516SKenneth E. Jansen call timer ('Back ') 155*59599516SKenneth E. Jansenc 156*59599516SKenneth E. Jansenc.... *********************>> Boundary Fluxes <<********************** 157*59599516SKenneth E. Jansenc 158*59599516SKenneth E. Jansen if ((irs .eq. 2) .and. (numflx .ne. 0)) then 159*59599516SKenneth E. Jansenc 160*59599516SKenneth E. Jansenc.... set up the timer 161*59599516SKenneth E. Jansenc 162*59599516SKenneth E. Jansen call timer ('Bnd_Flux') 163*59599516SKenneth E. Jansenc 164*59599516SKenneth E. Jansenc.... calculate the inverse of nodflx 165*59599516SKenneth E. Jansenc 166*59599516SKenneth E. Jansen itemp = nodflx 167*59599516SKenneth E. Jansenc 168*59599516SKenneth E. Jansen invflx = 0 169*59599516SKenneth E. Jansen invflx(itemp) = (/ (i, i=1,numflx) /) 170*59599516SKenneth E. Jansenc 171*59599516SKenneth E. Jansenc.... --------------------> interior elements <-------------------- 172*59599516SKenneth E. Jansenc 173*59599516SKenneth E. Jansenc.... set up parameters 174*59599516SKenneth E. Jansenc 175*59599516SKenneth E. Jansen intrul = intg (1,itseq) 176*59599516SKenneth E. Jansen intind = intpt (intrul) 177*59599516SKenneth E. Jansenc 178*59599516SKenneth E. Jansen jump = min(iALE + iter-1, 1) 179*59599516SKenneth E. Jansen ires = 1 180*59599516SKenneth E. Jansen iprec = 0 181*59599516SKenneth E. Jansenc 182*59599516SKenneth E. Jansenc.... initialize the arrays 183*59599516SKenneth E. Jansenc 184*59599516SKenneth E. Jansen flxres = zero 185*59599516SKenneth E. Jansen flxLHS = zero 186*59599516SKenneth E. Jansen flxnrm = zero 187*59599516SKenneth E. Jansenc 188*59599516SKenneth E. Jansenc.... loop over the element-blocks 189*59599516SKenneth E. Jansenc 190*59599516SKenneth E. Jansen do iblk = 1, nelblk 191*59599516SKenneth E. Jansenc 192*59599516SKenneth E. Jansenc.... set up the parameters 193*59599516SKenneth E. Jansenc 194*59599516SKenneth E. Jansenc$$$ iel = lcblk(1,iblk) 195*59599516SKenneth E. Jansenc$$$ nenl = lcblk(5,iblk) 196*59599516SKenneth E. Jansenc$$$ mattyp = lcblk(7,iblk) 197*59599516SKenneth E. Jansenc$$$ npro = lcblk(1,iblk+1) - iel 198*59599516SKenneth E. Jansenc 199*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) ! no. of vertices per element 200*59599516SKenneth E. Jansen iel = lcblk(1,iblk) 201*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 202*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 203*59599516SKenneth E. Jansen iorder = lcblk(4,iblk) 204*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) ! no. of vertices per element 205*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 206*59599516SKenneth E. Jansen mattyp = lcblk(7,iblk) 207*59599516SKenneth E. Jansen ndofl = lcblk(8,iblk) 208*59599516SKenneth E. Jansen nsymdl = lcblk(9,iblk) 209*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 210*59599516SKenneth E. Jansen ngauss = nint(lcsyst) 211*59599516SKenneth E. Jansenc 212*59599516SKenneth E. Jansenc 213*59599516SKenneth E. Jansen if (mattyp .ne. 0) cycle ! fluid elements only 214*59599516SKenneth E. Jansenc 215*59599516SKenneth E. Jansenc.... compute and assemble the residuals 216*59599516SKenneth E. Jansenc 217*59599516SKenneth E. Jansen call AsIFlx (y, ac, 218*59599516SKenneth E. Jansen & x, mxmudmi(iblk)%p, 219*59599516SKenneth E. Jansen & shp, shgl, mien(iblk)%p, 220*59599516SKenneth E. Jansen & mmat(iblk)%p, flxres) 221*59599516SKenneth E. Jansenc 222*59599516SKenneth E. Jansenc.... end of interior element loop 223*59599516SKenneth E. Jansenc 224*59599516SKenneth E. Jansen enddo 225*59599516SKenneth E. Jansenc 226*59599516SKenneth E. Jansenc.... --------------------> boundary elements <-------------------- 227*59599516SKenneth E. Jansenc 228*59599516SKenneth E. Jansenc.... loop over the elements 229*59599516SKenneth E. Jansenc 230*59599516SKenneth E. Jansen do iblk = 1, nelblb 231*59599516SKenneth E. Jansenc 232*59599516SKenneth E. Jansenc.... set up the parameters 233*59599516SKenneth E. Jansenc 234*59599516SKenneth E. Jansenc$$$ iel = lcblkb(1,iblk) 235*59599516SKenneth E. Jansenc$$$ nenl = 4 ! tetrahedral elements (4-vertices) 236*59599516SKenneth E. Jansenc$$$ nenbl = 3 ! triangular boundary element faces 237*59599516SKenneth E. Jansenc$$$ mattyp = lcblkb(7,iblk) 238*59599516SKenneth E. Jansenc$$$ npro = lcblkb(1,iblk+1) - iel 239*59599516SKenneth E. Jansenc 240*59599516SKenneth E. Jansenc 241*59599516SKenneth E. Jansen iel = lcblkb(1,iblk) 242*59599516SKenneth E. Jansen lelCat = lcblkb(2,iblk) 243*59599516SKenneth E. Jansen lcsyst = lcblkb(3,iblk) 244*59599516SKenneth E. Jansen iorder = lcblkb(4,iblk) 245*59599516SKenneth E. Jansen nenl = lcblkb(5,iblk) ! no. of vertices per element 246*59599516SKenneth E. Jansen nenbl = lcblkb(6,iblk) ! no. of vertices per bdry. face 247*59599516SKenneth E. Jansen mattyp = lcblkb(7,iblk) 248*59599516SKenneth E. Jansen ndofl = lcblkb(8,iblk) 249*59599516SKenneth E. Jansen nshl = lcblkb(9,iblk) 250*59599516SKenneth E. Jansen nshlb = lcblkb(10,iblk) 251*59599516SKenneth E. Jansen npro = lcblkb(1,iblk+1) - iel 252*59599516SKenneth E. Jansen if(lcsyst.eq.3) lcsyst=nenbl 253*59599516SKenneth E. Jansen ngaussb = nintb(lcsyst) 254*59599516SKenneth E. Jansen 255*59599516SKenneth E. Jansen if (mattyp .ne. 0) cycle ! fluid elements only 256*59599516SKenneth E. Jansenc 257*59599516SKenneth E. Jansenc.... compute and assemble the residuals 258*59599516SKenneth E. Jansenc 259*59599516SKenneth E. Jansen call AsBFlx (y, x, 260*59599516SKenneth E. Jansen & shpb(lcsyst,1:nshl,:), 261*59599516SKenneth E. Jansen & shglb(lcsyst,:,1:nshl,:), 262*59599516SKenneth E. Jansen & mienb(iblk)%p, mmatb(iblk)%p, 263*59599516SKenneth E. Jansen & miBCB(iblk)%p, mBCB(iblk)%p, 264*59599516SKenneth E. Jansen & invflx, flxres, 265*59599516SKenneth E. Jansen & flxLHS, flxnrm) 266*59599516SKenneth E. Jansenc 267*59599516SKenneth E. Jansenc.... end of boundary element loop 268*59599516SKenneth E. Jansenc 269*59599516SKenneth E. Jansen enddo 270*59599516SKenneth E. Jansenc 271*59599516SKenneth E. Jansenc.... ----------------------------> Communications <------------------- 272*59599516SKenneth E. Jansenc 273*59599516SKenneth E. Jansen if(numpe > 1) then 274*59599516SKenneth E. Jansen call commu (flxres, ilwork, nflow, 'in ') 275*59599516SKenneth E. Jansen call commu (flxLHS, ilwork, 1 , 'in ') 276*59599516SKenneth E. Jansen call commu (flxnrm, ilwork, nsd , 'in ') 277*59599516SKenneth E. Jansen endif 278*59599516SKenneth E. Jansenc 279*59599516SKenneth E. Jansenc.... ----------------------------> Solve <--------------------------- 280*59599516SKenneth E. Jansenc 281*59599516SKenneth E. Jansenc.... compute the viscous and heat fluxes 282*59599516SKenneth E. Jansenc 283*59599516SKenneth E. Jansen do i = 2, nflow 284*59599516SKenneth E. Jansen where ( (invflx .ne. 0) .and. (flxLHS(:,1) .ne. zero) ) 285*59599516SKenneth E. Jansen & flxres(:,i) = flxres(:,i) / flxLHS(:,1) 286*59599516SKenneth E. Jansen enddo 287*59599516SKenneth E. Jansenc 288*59599516SKenneth E. Jansenc.... normalize the outward normal 289*59599516SKenneth E. Jansenc 290*59599516SKenneth E. Jansenc if (nsd .eq. 2) then 291*59599516SKenneth E. Jansenc 292*59599516SKenneth E. Jansenc temp = sqrt(flxnrm(:,1)**2 + flxnrm(:,2)**2) 293*59599516SKenneth E. Jansenc where ( (invflx .ne. 0) .and. (temp .ne. zero) ) 294*59599516SKenneth E. Jansenc flxnrm(:,1) = flxnrm(:,1) / temp 295*59599516SKenneth E. Jansenc flxnrm(:,2) = flxnrm(:,2) / temp 296*59599516SKenneth E. Jansenc endwhere 297*59599516SKenneth E. Jansenc 298*59599516SKenneth E. Jansenc else 299*59599516SKenneth E. Jansenc 300*59599516SKenneth E. Jansen temp = sqrt(flxnrm(:,1)**2 + flxnrm(:,2)**2 + flxnrm(:,3)**2) 301*59599516SKenneth E. Jansen where ( (invflx .ne. 0) .and. (temp .ne. zero) ) 302*59599516SKenneth E. Jansen flxnrm(:,1) = flxnrm(:,1) / temp 303*59599516SKenneth E. Jansen flxnrm(:,2) = flxnrm(:,2) / temp 304*59599516SKenneth E. Jansen flxnrm(:,3) = flxnrm(:,3) / temp 305*59599516SKenneth E. Jansen endwhere 306*59599516SKenneth E. Jansenc 307*59599516SKenneth E. Jansenc endif 308*59599516SKenneth E. Jansenc 309*59599516SKenneth E. Jansenc.... ----------------------------> Print <--------------------------- 310*59599516SKenneth E. Jansenc 311*59599516SKenneth E. Jansenc.... get the file name ('flux.'lstep) 312*59599516SKenneth E. Jansenc 313*59599516SKenneth E. Jansen itmp = 1 314*59599516SKenneth E. Jansen if (lstep .gt. 0) itmp = int(log10(float(lstep)))+1 315*59599516SKenneth E. Jansen write (fmt1,"('(''flux.'',i',i1,',1x)')") itmp 316*59599516SKenneth E. Jansen write (fname1,fmt1) lstep 317*59599516SKenneth E. Jansenc 318*59599516SKenneth E. Jansenc.... open file 319*59599516SKenneth E. Jansenc 320*59599516SKenneth E. Jansen open (unit=iflux, file=fname1, status='unknown', err=997) 321*59599516SKenneth E. Jansenc 322*59599516SKenneth E. Jansenc.... output the header 323*59599516SKenneth E. Jansenc 324*59599516SKenneth E. Jansen write (iflux, 1000) title, lstep, time 325*59599516SKenneth E. Jansenc 326*59599516SKenneth E. Jansenc.... output the results 327*59599516SKenneth E. Jansenc 328*59599516SKenneth E. Jansen do n = 1, numflx 329*59599516SKenneth E. Jansenc 330*59599516SKenneth E. Jansen k = nodflx(n) 331*59599516SKenneth E. Jansen m = k ! global node number 332*59599516SKenneth E. Jansenc 333*59599516SKenneth E. Jansen write (iflux, 2000) k, (x(m,i), i=1,nsd), 334*59599516SKenneth E. Jansen & (flxnrm(m,i), i=1,nsd), 335*59599516SKenneth E. Jansen & (flxres(m,i), i=2,nflow), 336*59599516SKenneth E. Jansen & (q(k,i), i=1,ndof), 337*59599516SKenneth E. Jansen & (qq(k,i), i=1,8) 338*59599516SKenneth E. Jansenc 339*59599516SKenneth E. Jansen enddo 340*59599516SKenneth E. Jansenc 341*59599516SKenneth E. Jansenc.... close file 342*59599516SKenneth E. Jansenc 343*59599516SKenneth E. Jansen close (iflux) 344*59599516SKenneth E. Jansenc 345*59599516SKenneth E. Jansenc.... stop the timer 346*59599516SKenneth E. Jansenc 347*59599516SKenneth E. Jansen call timer ('Back ') 348*59599516SKenneth E. Jansenc 349*59599516SKenneth E. Jansen endif 350*59599516SKenneth E. Jansenc 351*59599516SKenneth E. Jansen return 352*59599516SKenneth E. Jansenc 353*59599516SKenneth E. Jansenc.... file error handling 354*59599516SKenneth E. Jansenc 355*59599516SKenneth E. Jansen995 call error ('bflux ','opening ', iout) 356*59599516SKenneth E. Jansen996 call error ('bflux ','opening ', ichmou) 357*59599516SKenneth E. Jansen997 call error ('bflux ','opening ', iflux) 358*59599516SKenneth E. Jansenc 359*59599516SKenneth E. Jansen1000 format(' ',a80,/,1x,i10,1p,3e20.7) 360*59599516SKenneth E. Jansen2000 format(1p,1x,i6,23e15.7) 361*59599516SKenneth E. Jansenc 362*59599516SKenneth E. Jansenc.... end 363*59599516SKenneth E. Jansenc 364*59599516SKenneth E. Jansen end 365