159599516SKenneth E. Jansen subroutine Bflux (y, ac, x, 259599516SKenneth E. Jansen & shp, shgl, shpb, 359599516SKenneth E. Jansen & shglb, nodflx, ilwork) 459599516SKenneth E. Jansenc 559599516SKenneth E. Jansenc---------------------------------------------------------------------- 659599516SKenneth E. Jansenc 759599516SKenneth E. Jansenc This routine : 859599516SKenneth E. Jansenc 1. computes the boundary fluxes 959599516SKenneth E. Jansenc 2. prints the results in the file [FLUX.lstep] 1059599516SKenneth E. Jansenc 3. prints the primitives variables in the files [OUTPUT.lstep] 1159599516SKenneth E. Jansenc and [OUTCHM.lstep] (2-D computations only) 1259599516SKenneth E. Jansenc 4. calls the restar routine 1359599516SKenneth E. Jansenc 1459599516SKenneth E. Jansenc 1559599516SKenneth E. Jansenc output: 1659599516SKenneth E. Jansenc in file FLUX.lstep: 1759599516SKenneth E. Jansenc run title 1859599516SKenneth E. Jansenc step number, run time 1959599516SKenneth E. Jansenc node_number 2059599516SKenneth E. Jansenc x_1 ... x_nsd ! coordinates 2159599516SKenneth E. Jansenc normal_1 ... normal_nsd ! outward normal direction 2259599516SKenneth E. Jansenc tau_1n ... tau_nsd n ! boundary viscous flux 2359599516SKenneth E. Jansenc q_n ! boundary head flux 2459599516SKenneth E. Jansenc ro u_1 ... u_nsd t p s Mach ! primitive variables 2559599516SKenneth E. Jansenc y_N2 y_O2 y_NO y_N y_O ! gas composition 2659599516SKenneth E. Jansenc 2759599516SKenneth E. Jansenc in file OUTPUT.lstep: 2859599516SKenneth E. Jansenc run title 2959599516SKenneth E. Jansenc step number, run time, gamma, Rgas 3059599516SKenneth E. Jansenc density, velocity vector and temperature 3159599516SKenneth E. Jansenc 3259599516SKenneth E. Jansenc in file OUTCHM.lstep: 3359599516SKenneth E. Jansenc run title 3459599516SKenneth E. Jansenc step number, run time, gamma, Rgas 3559599516SKenneth E. Jansenc pressure, entropy, Mach, y_N2, y_O2, y_NO, y_N and y_O 3659599516SKenneth E. Jansenc 3759599516SKenneth E. Jansenc 3859599516SKenneth E. Jansenc Zdenek Johan, Summer 1991. 3959599516SKenneth E. Jansenc---------------------------------------------------------------------- 4059599516SKenneth E. Jansenc 4159599516SKenneth E. Jansen use pointer_data 4259599516SKenneth E. Jansenc 4359599516SKenneth E. Jansen include "common.h" 4459599516SKenneth E. Jansenc 4559599516SKenneth E. Jansen dimension y(nshg,ndof), ac(nshg,ndof), 4659599516SKenneth E. Jansen & x(numnp,nsd), 4759599516SKenneth E. Jansen & shp(MAXTOP,maxsh,MAXQPT), 4859599516SKenneth E. Jansen & shgl(MAXTOP,nsd,maxsh,MAXQPT), 4959599516SKenneth E. Jansen & shpb(MAXTOP,maxsh,MAXQPT), 5059599516SKenneth E. Jansen & shglb(MAXTOP,nsd,maxsh,MAXQPT), 5159599516SKenneth E. Jansen & nodflx(numflx) 5259599516SKenneth E. Jansenc 5359599516SKenneth E. Jansen dimension invflx(nshg), flxres(nshg,nflow), 5459599516SKenneth E. Jansen & flxLHS(nshg,1), flxnrm(nshg,nsd), 5559599516SKenneth E. Jansen & temp(nshg), itemp(numflx), 5659599516SKenneth E. Jansen & q(nshg,ndof), qq(nshg,8), 5759599516SKenneth E. Jansen & ilwork(nlwork) 5859599516SKenneth E. Jansenc 59*513954efSKenneth E. Jansen character(len=20) fname1, fname2, 6059599516SKenneth E. Jansen & fmt1, fmt2 6159599516SKenneth E. Jansenc 6259599516SKenneth E. Jansenc.... ************************>> Restart <<*************************** 6359599516SKenneth E. Jansenc 6459599516SKenneth E. Jansenc.... set up the timer 6559599516SKenneth E. Jansenc 6659599516SKenneth E. Jansen call timer ('Output ') 6759599516SKenneth E. Jansenc 6859599516SKenneth E. Jansenc.... call restart option 6959599516SKenneth E. Jansenc 7059599516SKenneth E. Jansen q(:,1:ndof)=y(:,1:ndof) 7159599516SKenneth E. Jansen 7259599516SKenneth E. Jansen if (irs .ge. 1) call restar ('out ', q,ac) 7359599516SKenneth E. Jansenc 7459599516SKenneth E. Jansenc No Flux output for now KENJ 7559599516SKenneth E. Jansenc 7659599516SKenneth E. Jansen return 7759599516SKenneth E. Jansenc 7859599516SKenneth E. Jansenc.... scale the primitive variables for output 7959599516SKenneth E. Jansenc 8059599516SKenneth E. Jansen q(:,1) = ro * q(:,1) 8159599516SKenneth E. Jansen q(:,2) = vel * q(:,2) 8259599516SKenneth E. Jansen q(:,3) = vel * q(:,3) 8359599516SKenneth E. Jansen if (nsd .eq. 3) 8459599516SKenneth E. Jansen & q(:,4) = vel * q(:,4) 8559599516SKenneth E. Jansen q(:,nflow) = temper * q(:,nflow) 8659599516SKenneth E. Jansen qq(:,1) = press * qq(:,1) 8759599516SKenneth E. Jansen qq(:,2) = entrop * qq(:,2) 8859599516SKenneth E. Jansenc 8959599516SKenneth E. Jansenc.... *************************>> Output <<*************************** 9059599516SKenneth E. Jansenc 9159599516SKenneth E. Jansenc.... output only for 2-D computations 9259599516SKenneth E. Jansenc 9359599516SKenneth E. Jansen if ((irs .eq. 2) .and. (nsd .eq. 2)) then 9459599516SKenneth E. Jansenc 9559599516SKenneth E. Jansenc.... get the file names ('output.'lstep) and ('outchm.'lstep) 9659599516SKenneth E. Jansenc 9759599516SKenneth E. Jansen itmp = 1 9859599516SKenneth E. Jansen if (lstep .gt. 0) itmp = int(log10(float(lstep)))+1 9959599516SKenneth E. Jansen write (fmt1,"('(''output.'',i',i1,',1x)')") itmp 10059599516SKenneth E. Jansen write (fmt2,"('(''outchm.'',i',i1,',1x)')") itmp 10159599516SKenneth E. Jansen write (fname1,fmt1) lstep 10259599516SKenneth E. Jansen write (fname2,fmt2) lstep 10359599516SKenneth E. Jansenc 10459599516SKenneth E. Jansenc.... open file 10559599516SKenneth E. Jansenc 10659599516SKenneth E. Jansen if (ioform .eq. 0) then 10759599516SKenneth E. Jansen open (unit=iout, file=fname1, status='unknown', err=995) 10859599516SKenneth E. Jansen if (ichem .eq. 1) 10959599516SKenneth E. Jansen & open (unit=ichmou, file=fname2, status='unknown', err=996) 11059599516SKenneth E. Jansen else 11159599516SKenneth E. Jansen open (unit=iout, file=fname1, status='unknown', err=995, 11259599516SKenneth E. Jansen & form='unformatted') 11359599516SKenneth E. Jansen if (ichem .eq. 1) 11459599516SKenneth E. Jansen & open (unit=ichmou, file=fname2, status='unknown', err=996, 11559599516SKenneth E. Jansen & form='unformatted') 11659599516SKenneth E. Jansen endif 11759599516SKenneth E. Jansenc 11859599516SKenneth E. Jansenc.... output header 11959599516SKenneth E. Jansenc 12059599516SKenneth E. Jansen if (ioform .eq. 0) then 12159599516SKenneth E. Jansen write (iout, 1000) title, lstep, time, gamma, Rgas 12259599516SKenneth E. Jansen if (ichem .eq. 1) 12359599516SKenneth E. Jansen & write (ichmou,1000) title, lstep, time 12459599516SKenneth E. Jansen else 12559599516SKenneth E. Jansen write (iout) title 12659599516SKenneth E. Jansen write (iout) nshg, lstep, time, gamma, Rgas 12759599516SKenneth E. Jansenc 12859599516SKenneth E. Jansen if (ichem .eq. 1) then 12959599516SKenneth E. Jansen write (ichmou) title 13059599516SKenneth E. Jansen write (ichmou) nshg, lstep, time 13159599516SKenneth E. Jansen endif 13259599516SKenneth E. Jansen endif 13359599516SKenneth E. Jansenc 13459599516SKenneth E. Jansen if (ioform .eq. 0) then 13559599516SKenneth E. Jansen do n = 1, nshg 13659599516SKenneth E. Jansen write (iout, 2000) n, (q(n,i), i=1,ndof) 13759599516SKenneth E. Jansen if (ichem .eq. 1) 13859599516SKenneth E. Jansen & write (ichmou,2000) n, (qq(n,i), i=1,8) 13959599516SKenneth E. Jansen enddo 14059599516SKenneth E. Jansen else 14159599516SKenneth E. Jansen write (iout) q 14259599516SKenneth E. Jansen if (ichem .eq. 1) write (ichmou) qq 14359599516SKenneth E. Jansen endif 14459599516SKenneth E. Jansenc 14559599516SKenneth E. Jansenc.... close the files 14659599516SKenneth E. Jansenc 14759599516SKenneth E. Jansen close (iout) 14859599516SKenneth E. Jansen if (ichem .eq. 1) close (ichmou) 14959599516SKenneth E. Jansenc 15059599516SKenneth E. Jansen endif 15159599516SKenneth E. Jansenc 15259599516SKenneth E. Jansenc.... stop the timer 15359599516SKenneth E. Jansenc 15459599516SKenneth E. Jansen call timer ('Back ') 15559599516SKenneth E. Jansenc 15659599516SKenneth E. Jansenc.... *********************>> Boundary Fluxes <<********************** 15759599516SKenneth E. Jansenc 15859599516SKenneth E. Jansen if ((irs .eq. 2) .and. (numflx .ne. 0)) then 15959599516SKenneth E. Jansenc 16059599516SKenneth E. Jansenc.... set up the timer 16159599516SKenneth E. Jansenc 16259599516SKenneth E. Jansen call timer ('Bnd_Flux') 16359599516SKenneth E. Jansenc 16459599516SKenneth E. Jansenc.... calculate the inverse of nodflx 16559599516SKenneth E. Jansenc 16659599516SKenneth E. Jansen itemp = nodflx 16759599516SKenneth E. Jansenc 16859599516SKenneth E. Jansen invflx = 0 16959599516SKenneth E. Jansen invflx(itemp) = (/ (i, i=1,numflx) /) 17059599516SKenneth E. Jansenc 17159599516SKenneth E. Jansenc.... --------------------> interior elements <-------------------- 17259599516SKenneth E. Jansenc 17359599516SKenneth E. Jansenc.... set up parameters 17459599516SKenneth E. Jansenc 17559599516SKenneth E. Jansen intrul = intg (1,itseq) 17659599516SKenneth E. Jansen intind = intpt (intrul) 17759599516SKenneth E. Jansenc 17859599516SKenneth E. Jansen jump = min(iALE + iter-1, 1) 17959599516SKenneth E. Jansen ires = 1 18059599516SKenneth E. Jansen iprec = 0 18159599516SKenneth E. Jansenc 18259599516SKenneth E. Jansenc.... initialize the arrays 18359599516SKenneth E. Jansenc 18459599516SKenneth E. Jansen flxres = zero 18559599516SKenneth E. Jansen flxLHS = zero 18659599516SKenneth E. Jansen flxnrm = zero 18759599516SKenneth E. Jansenc 18859599516SKenneth E. Jansenc.... loop over the element-blocks 18959599516SKenneth E. Jansenc 19059599516SKenneth E. Jansen do iblk = 1, nelblk 19159599516SKenneth E. Jansenc 19259599516SKenneth E. Jansenc.... set up the parameters 19359599516SKenneth E. Jansenc 19459599516SKenneth E. Jansenc$$$ iel = lcblk(1,iblk) 19559599516SKenneth E. Jansenc$$$ nenl = lcblk(5,iblk) 19659599516SKenneth E. Jansenc$$$ mattyp = lcblk(7,iblk) 19759599516SKenneth E. Jansenc$$$ npro = lcblk(1,iblk+1) - iel 19859599516SKenneth E. Jansenc 19959599516SKenneth E. Jansen nenl = lcblk(5,iblk) ! no. of vertices per element 20059599516SKenneth E. Jansen iel = lcblk(1,iblk) 20159599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 20259599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 20359599516SKenneth E. Jansen iorder = lcblk(4,iblk) 20459599516SKenneth E. Jansen nenl = lcblk(5,iblk) ! no. of vertices per element 20559599516SKenneth E. Jansen nshl = lcblk(10,iblk) 20659599516SKenneth E. Jansen mattyp = lcblk(7,iblk) 20759599516SKenneth E. Jansen ndofl = lcblk(8,iblk) 20859599516SKenneth E. Jansen nsymdl = lcblk(9,iblk) 20959599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 21059599516SKenneth E. Jansen ngauss = nint(lcsyst) 21159599516SKenneth E. Jansenc 21259599516SKenneth E. Jansenc 21359599516SKenneth E. Jansen if (mattyp .ne. 0) cycle ! fluid elements only 21459599516SKenneth E. Jansenc 21559599516SKenneth E. Jansenc.... compute and assemble the residuals 21659599516SKenneth E. Jansenc 21759599516SKenneth E. Jansen call AsIFlx (y, ac, 21859599516SKenneth E. Jansen & x, mxmudmi(iblk)%p, 21959599516SKenneth E. Jansen & shp, shgl, mien(iblk)%p, 22059599516SKenneth E. Jansen & mmat(iblk)%p, flxres) 22159599516SKenneth E. Jansenc 22259599516SKenneth E. Jansenc.... end of interior element loop 22359599516SKenneth E. Jansenc 22459599516SKenneth E. Jansen enddo 22559599516SKenneth E. Jansenc 22659599516SKenneth E. Jansenc.... --------------------> boundary elements <-------------------- 22759599516SKenneth E. Jansenc 22859599516SKenneth E. Jansenc.... loop over the elements 22959599516SKenneth E. Jansenc 23059599516SKenneth E. Jansen do iblk = 1, nelblb 23159599516SKenneth E. Jansenc 23259599516SKenneth E. Jansenc.... set up the parameters 23359599516SKenneth E. Jansenc 23459599516SKenneth E. Jansenc$$$ iel = lcblkb(1,iblk) 23559599516SKenneth E. Jansenc$$$ nenl = 4 ! tetrahedral elements (4-vertices) 23659599516SKenneth E. Jansenc$$$ nenbl = 3 ! triangular boundary element faces 23759599516SKenneth E. Jansenc$$$ mattyp = lcblkb(7,iblk) 23859599516SKenneth E. Jansenc$$$ npro = lcblkb(1,iblk+1) - iel 23959599516SKenneth E. Jansenc 24059599516SKenneth E. Jansenc 24159599516SKenneth E. Jansen iel = lcblkb(1,iblk) 24259599516SKenneth E. Jansen lelCat = lcblkb(2,iblk) 24359599516SKenneth E. Jansen lcsyst = lcblkb(3,iblk) 24459599516SKenneth E. Jansen iorder = lcblkb(4,iblk) 24559599516SKenneth E. Jansen nenl = lcblkb(5,iblk) ! no. of vertices per element 24659599516SKenneth E. Jansen nenbl = lcblkb(6,iblk) ! no. of vertices per bdry. face 24759599516SKenneth E. Jansen mattyp = lcblkb(7,iblk) 24859599516SKenneth E. Jansen ndofl = lcblkb(8,iblk) 24959599516SKenneth E. Jansen nshl = lcblkb(9,iblk) 25059599516SKenneth E. Jansen nshlb = lcblkb(10,iblk) 25159599516SKenneth E. Jansen npro = lcblkb(1,iblk+1) - iel 25259599516SKenneth E. Jansen if(lcsyst.eq.3) lcsyst=nenbl 25359599516SKenneth E. Jansen ngaussb = nintb(lcsyst) 25459599516SKenneth E. Jansen 25559599516SKenneth E. Jansen if (mattyp .ne. 0) cycle ! fluid elements only 25659599516SKenneth E. Jansenc 25759599516SKenneth E. Jansenc.... compute and assemble the residuals 25859599516SKenneth E. Jansenc 25959599516SKenneth E. Jansen call AsBFlx (y, x, 26059599516SKenneth E. Jansen & shpb(lcsyst,1:nshl,:), 26159599516SKenneth E. Jansen & shglb(lcsyst,:,1:nshl,:), 26259599516SKenneth E. Jansen & mienb(iblk)%p, mmatb(iblk)%p, 26359599516SKenneth E. Jansen & miBCB(iblk)%p, mBCB(iblk)%p, 26459599516SKenneth E. Jansen & invflx, flxres, 26559599516SKenneth E. Jansen & flxLHS, flxnrm) 26659599516SKenneth E. Jansenc 26759599516SKenneth E. Jansenc.... end of boundary element loop 26859599516SKenneth E. Jansenc 26959599516SKenneth E. Jansen enddo 27059599516SKenneth E. Jansenc 27159599516SKenneth E. Jansenc.... ----------------------------> Communications <------------------- 27259599516SKenneth E. Jansenc 27359599516SKenneth E. Jansen if(numpe > 1) then 27459599516SKenneth E. Jansen call commu (flxres, ilwork, nflow, 'in ') 27559599516SKenneth E. Jansen call commu (flxLHS, ilwork, 1 , 'in ') 27659599516SKenneth E. Jansen call commu (flxnrm, ilwork, nsd , 'in ') 27759599516SKenneth E. Jansen endif 27859599516SKenneth E. Jansenc 27959599516SKenneth E. Jansenc.... ----------------------------> Solve <--------------------------- 28059599516SKenneth E. Jansenc 28159599516SKenneth E. Jansenc.... compute the viscous and heat fluxes 28259599516SKenneth E. Jansenc 28359599516SKenneth E. Jansen do i = 2, nflow 28459599516SKenneth E. Jansen where ( (invflx .ne. 0) .and. (flxLHS(:,1) .ne. zero) ) 28559599516SKenneth E. Jansen & flxres(:,i) = flxres(:,i) / flxLHS(:,1) 28659599516SKenneth E. Jansen enddo 28759599516SKenneth E. Jansenc 28859599516SKenneth E. Jansenc.... normalize the outward normal 28959599516SKenneth E. Jansenc 29059599516SKenneth E. Jansenc if (nsd .eq. 2) then 29159599516SKenneth E. Jansenc 29259599516SKenneth E. Jansenc temp = sqrt(flxnrm(:,1)**2 + flxnrm(:,2)**2) 29359599516SKenneth E. Jansenc where ( (invflx .ne. 0) .and. (temp .ne. zero) ) 29459599516SKenneth E. Jansenc flxnrm(:,1) = flxnrm(:,1) / temp 29559599516SKenneth E. Jansenc flxnrm(:,2) = flxnrm(:,2) / temp 29659599516SKenneth E. Jansenc endwhere 29759599516SKenneth E. Jansenc 29859599516SKenneth E. Jansenc else 29959599516SKenneth E. Jansenc 30059599516SKenneth E. Jansen temp = sqrt(flxnrm(:,1)**2 + flxnrm(:,2)**2 + flxnrm(:,3)**2) 30159599516SKenneth E. Jansen where ( (invflx .ne. 0) .and. (temp .ne. zero) ) 30259599516SKenneth E. Jansen flxnrm(:,1) = flxnrm(:,1) / temp 30359599516SKenneth E. Jansen flxnrm(:,2) = flxnrm(:,2) / temp 30459599516SKenneth E. Jansen flxnrm(:,3) = flxnrm(:,3) / temp 30559599516SKenneth E. Jansen endwhere 30659599516SKenneth E. Jansenc 30759599516SKenneth E. Jansenc endif 30859599516SKenneth E. Jansenc 30959599516SKenneth E. Jansenc.... ----------------------------> Print <--------------------------- 31059599516SKenneth E. Jansenc 31159599516SKenneth E. Jansenc.... get the file name ('flux.'lstep) 31259599516SKenneth E. Jansenc 31359599516SKenneth E. Jansen itmp = 1 31459599516SKenneth E. Jansen if (lstep .gt. 0) itmp = int(log10(float(lstep)))+1 31559599516SKenneth E. Jansen write (fmt1,"('(''flux.'',i',i1,',1x)')") itmp 31659599516SKenneth E. Jansen write (fname1,fmt1) lstep 31759599516SKenneth E. Jansenc 31859599516SKenneth E. Jansenc.... open file 31959599516SKenneth E. Jansenc 32059599516SKenneth E. Jansen open (unit=iflux, file=fname1, status='unknown', err=997) 32159599516SKenneth E. Jansenc 32259599516SKenneth E. Jansenc.... output the header 32359599516SKenneth E. Jansenc 32459599516SKenneth E. Jansen write (iflux, 1000) title, lstep, time 32559599516SKenneth E. Jansenc 32659599516SKenneth E. Jansenc.... output the results 32759599516SKenneth E. Jansenc 32859599516SKenneth E. Jansen do n = 1, numflx 32959599516SKenneth E. Jansenc 33059599516SKenneth E. Jansen k = nodflx(n) 33159599516SKenneth E. Jansen m = k ! global node number 33259599516SKenneth E. Jansenc 33359599516SKenneth E. Jansen write (iflux, 2000) k, (x(m,i), i=1,nsd), 33459599516SKenneth E. Jansen & (flxnrm(m,i), i=1,nsd), 33559599516SKenneth E. Jansen & (flxres(m,i), i=2,nflow), 33659599516SKenneth E. Jansen & (q(k,i), i=1,ndof), 33759599516SKenneth E. Jansen & (qq(k,i), i=1,8) 33859599516SKenneth E. Jansenc 33959599516SKenneth E. Jansen enddo 34059599516SKenneth E. Jansenc 34159599516SKenneth E. Jansenc.... close file 34259599516SKenneth E. Jansenc 34359599516SKenneth E. Jansen close (iflux) 34459599516SKenneth E. Jansenc 34559599516SKenneth E. Jansenc.... stop the timer 34659599516SKenneth E. Jansenc 34759599516SKenneth E. Jansen call timer ('Back ') 34859599516SKenneth E. Jansenc 34959599516SKenneth E. Jansen endif 35059599516SKenneth E. Jansenc 35159599516SKenneth E. Jansen return 35259599516SKenneth E. Jansenc 35359599516SKenneth E. Jansenc.... file error handling 35459599516SKenneth E. Jansenc 35559599516SKenneth E. Jansen995 call error ('bflux ','opening ', iout) 35659599516SKenneth E. Jansen996 call error ('bflux ','opening ', ichmou) 35759599516SKenneth E. Jansen997 call error ('bflux ','opening ', iflux) 35859599516SKenneth E. Jansenc 35959599516SKenneth E. Jansen1000 format(' ',a80,/,1x,i10,1p,3e20.7) 36059599516SKenneth E. Jansen2000 format(1p,1x,i6,23e15.7) 36159599516SKenneth E. Jansenc 36259599516SKenneth E. Jansenc.... end 36359599516SKenneth E. Jansenc 36459599516SKenneth E. Jansen end 365