xref: /phasta/phSolver/compressible/bflux.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
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