xref: /phasta/phSolver/common/genbkb.f (revision bc62cfd4f9523e2fcff7faf06823f3eba320b056)
159599516SKenneth E. Jansen        subroutine genbkb (ibksz)
259599516SKenneth E. Jansenc
359599516SKenneth E. Jansenc----------------------------------------------------------------------
459599516SKenneth E. Jansenc
559599516SKenneth E. Jansenc  This routine reads the boundary elements, reorders them and
659599516SKenneth E. Jansenc  generates traces for the gather/scatter operations.
759599516SKenneth E. Jansenc
859599516SKenneth E. Jansenc Zdenek Johan, Fall 1991.
959599516SKenneth E. Jansenc----------------------------------------------------------------------
1059599516SKenneth E. Jansenc
1159599516SKenneth E. Jansen        use dtnmod
1259599516SKenneth E. Jansen        use pointer_data
13e5afe575SCameron Smith        use phio
14e5afe575SCameron Smith        use iso_c_binding
1559599516SKenneth E. Jansenc
1659599516SKenneth E. Jansen        include "common.h"
1759599516SKenneth E. Jansen!MR CHANGE
1859599516SKenneth E. Jansen        include "mpif.h" !Required to determine the max for itpblk
1959599516SKenneth E. Jansen!MR CHANGE END
2059599516SKenneth E. Jansenc
2159599516SKenneth E. Jansen
2259599516SKenneth E. Jansen        integer, allocatable :: ientp(:,:),iBCBtp(:,:)
2359599516SKenneth E. Jansen        real*8, allocatable :: BCBtp(:,:)
2459599516SKenneth E. Jansen        integer materb(ibksz)
2559599516SKenneth E. Jansen        integer intfromfile(50) ! integers read from headers
2659599516SKenneth E. Jansen        character*255 fname1
2759599516SKenneth E. Jansen
2859599516SKenneth E. Jansencccccccccccccc New Phasta IO starts here cccccccccccccccccccccccccccccc
2959599516SKenneth E. Jansen
3059599516SKenneth E. Jansen        integer :: descriptor, descriptorG, GPID, color, nfiles, nfields
3159599516SKenneth E. Jansen        integer :: numparts, nppf, nppp, nprocs, writeLock
3259599516SKenneth E. Jansen        integer :: ierr_io, numprocs, itmp, itmp2
3359599516SKenneth E. Jansen!        integer :: num_local_loop, num_global_loop
3459599516SKenneth E. Jansen!MR CHANGE
3559599516SKenneth E. Jansen        integer :: itpblktot,ierr
3659599516SKenneth E. Jansen!MR CHANGE END
3759599516SKenneth E. Jansen
3859599516SKenneth E. Jansen        character*255 fnamer, fname2, temp2
3959599516SKenneth E. Jansen        character*64 temp1, temp3
4059599516SKenneth E. Jansen
41e5afe575SCameron Smith        type(c_ptr) :: handle
42*bc62cfd4SCameron Smith        character(len=30) :: dataInt, dataDbl
43e5afe575SCameron Smith        dataInt = c_char_'integer'//c_null_char
44*bc62cfd4SCameron Smith        dataDbl = c_char_'double'//c_null_char
45e5afe575SCameron Smith
4659599516SKenneth E. Jansen        nfiles = nsynciofiles
4759599516SKenneth E. Jansen        nfields = nsynciofieldsreadgeombc
4859599516SKenneth E. Jansen        numparts = numpe !This is the common settings. Beware if you try to compute several parts per process
4959599516SKenneth E. Jansen
5059599516SKenneth E. Jansen        nppp = numparts/numpe
5159599516SKenneth E. Jansen        nppf = numparts/nfiles
5259599516SKenneth E. Jansen
5359599516SKenneth E. Jansen        color = int(myrank/(numparts/nfiles))
5459599516SKenneth E. Jansen        itmp2 = int(log10(float(color+1)))+1
5559599516SKenneth E. Jansen        write (temp2,"('(''geombc-dat.'',i',i1,')')") itmp2
5659599516SKenneth E. Jansen        temp2=trim(temp2)
5759599516SKenneth E. Jansen        write (fnamer,temp2) (color+1)
5859599516SKenneth E. Jansen        fnamer=trim(fnamer)
5959599516SKenneth E. Jansen
6059599516SKenneth E. Jansen        ione=1
6159599516SKenneth E. Jansen        itwo=2
6259599516SKenneth E. Jansen        ieight=8
6359599516SKenneth E. Jansen        ieleven=11
6459599516SKenneth E. Jansen        itmp = int(log10(float(myrank+1)))+1
6559599516SKenneth E. Jansen
6659599516SKenneth E. Jansen!        num_global_loop = 4
6759599516SKenneth E. Jansen!        num_local_loop = nelblb
6859599516SKenneth E. Jansen
6959599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
7059599516SKenneth E. Jansen
7159599516SKenneth E. Jansen        iel=1
7259599516SKenneth E. Jansen        itpblk=nelblb
7359599516SKenneth E. Jansen
7459599516SKenneth E. Jansen
7559599516SKenneth E. Jansen!MR CHANGE
7659599516SKenneth E. Jansen        ! Get the total number of different interior topologies in the whole domain.
7759599516SKenneth E. Jansen        ! Try to read from a field. If the field does not exist, scan the geombc file.
7859599516SKenneth E. Jansen        itpblktot=-1
79e5afe575SCameron Smith        call phio_readheader(handle,
80e5afe575SCameron Smith     &   c_char_'total number of boundary tpblocks' // char(0),
81e5afe575SCameron Smith     &   c_loc(itpblktot), ione, dataInt, iotype)
8259599516SKenneth E. Jansen
8359599516SKenneth E. Jansen!        write (*,*) 'Rank: ',myrank,' boundary itpblktot intermediate:',
8459599516SKenneth E. Jansen!     &               itpblktot
8559599516SKenneth E. Jansen
8659599516SKenneth E. Jansen        if (itpblktot == -1) then
8759599516SKenneth E. Jansen          ! The field 'total number of different boundary tpblocks' was not found in the geombc file.
8859599516SKenneth E. Jansen          ! Scan all the geombc file for the 'connectivity interior' fields to get this information.
8959599516SKenneth E. Jansen          iblk=0
9059599516SKenneth E. Jansen          neltp=0
9159599516SKenneth E. Jansen          do while(neltp .ne. -1)
9259599516SKenneth E. Jansen
9359599516SKenneth E. Jansen            ! intfromfile is reinitialized to -1 every time.
9459599516SKenneth E. Jansen            ! If connectivity boundary@xxx is not found, then
9559599516SKenneth E. Jansen            ! readheader will return intfromfile unchanged
9659599516SKenneth E. Jansen
9759599516SKenneth E. Jansen            intfromfile(:)=-1
9859599516SKenneth E. Jansen            iblk = iblk+1
99e5afe575SCameron Smith            call phio_readheader(handle,
100e5afe575SCameron Smith     &       c_char_'connectivity boundary1' // char(0),
101e5afe575SCameron Smith     &       c_loc(intfromfile), ieight, dataInt, iotype)
10259599516SKenneth E. Jansen            neltp = intfromfile(1) ! -1 if fname2 was not found, >=0 otherwise
10359599516SKenneth E. Jansen          end do
10459599516SKenneth E. Jansen          itpblktot = iblk-1
10559599516SKenneth E. Jansen        end if
10659599516SKenneth E. Jansen
10759599516SKenneth E. Jansen        if (myrank == 0) then
10859599516SKenneth E. Jansen          write(*,*) 'Number of boundary topologies: ',itpblktot
10959599516SKenneth E. Jansen        endif
11059599516SKenneth E. Jansen!        write (*,*) 'Rank: ',myrank,' boundary itpblktot final:',
11159599516SKenneth E. Jansen!     &               itpblktot
11259599516SKenneth E. Jansen
11359599516SKenneth E. Jansen!MR CHANGE END
11459599516SKenneth E. Jansen        nelblb=0
11559599516SKenneth E. Jansen        mattyp=0
11659599516SKenneth E. Jansen        ndofl = ndof
11759599516SKenneth E. Jansen!MR CHANGE
11859599516SKenneth E. Jansen!        call initphmpiio( nfields, nppf, nfiles, igeom )
11959599516SKenneth E. Jansen!        call openfile( fnamer, 'read', igeom )
12059599516SKenneth E. Jansen
12159599516SKenneth E. Jansen        do iblk = 1, itpblktot
12259599516SKenneth E. Jansen           writeLock=0;
12359599516SKenneth E. Jansen!MR CHANGE END
12459599516SKenneth E. Jansen
12559599516SKenneth E. Jansen
12659599516SKenneth E. Jansen!           print *, "Loop ",iblk, myrank, itpblk, trim(fnamer)
12759599516SKenneth E. Jansen
12859599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
12959599516SKenneth E. Jansen!           write(*,*) 'rank, fname2',myrank, trim(adjustl(fname2))
13059599516SKenneth E. Jansen
13159599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
13259599516SKenneth E. Jansen
13359599516SKenneth E. Jansen           ! Synchronization for performance monitoring, as some parts do not include some topologies
13459599516SKenneth E. Jansen           call MPI_Barrier(MPI_COMM_WORLD,ierr)
135e5afe575SCameron Smith           call phio_readheader(handle,
136e5afe575SCameron Smith     &      c_char_'connectivity boundary1' // char(0),
137e5afe575SCameron Smith     &      c_loc(intfromfile), ieight, dataInt, iotype)
13859599516SKenneth E. Jansen           neltp =intfromfile(1)
13959599516SKenneth E. Jansen           nenl  =intfromfile(2)
14059599516SKenneth E. Jansen           ipordl=intfromfile(3)
14159599516SKenneth E. Jansen           nshl  =intfromfile(4)
14259599516SKenneth E. Jansen           nshlb =intfromfile(5)
14359599516SKenneth E. Jansen           nenbl =intfromfile(6)
14459599516SKenneth E. Jansen           lcsyst=intfromfile(7)
14559599516SKenneth E. Jansen           numnbc=intfromfile(8)
14659599516SKenneth E. Jansen
14759599516SKenneth E. Jansen!MR CHANGE
14859599516SKenneth E. Jansen!           write (temp1,"('connectivityBoundaryHeader_',i1,'_',i1)")
14959599516SKenneth E. Jansen!     &                                              iblk,myrank
15059599516SKenneth E. Jansen!           temp1=trim(temp1)
15159599516SKenneth E. Jansen!           open(unit=14,file=temp1,status='unknown')
15259599516SKenneth E. Jansen!           write(14,*) intfromfile(:)
15359599516SKenneth E. Jansen!           close(14)
15459599516SKenneth E. Jansen!MR CHANGE END
15559599516SKenneth E. Jansen
15659599516SKenneth E. Jansen           allocate (ientp(neltp,nshl))
15759599516SKenneth E. Jansen           allocate (iBCBtp(neltp,ndiBCB))
15859599516SKenneth E. Jansen           allocate (BCBtp(neltp,ndBCB))
15959599516SKenneth E. Jansen           iientpsiz=neltp*nshl
16059599516SKenneth E. Jansen
16159599516SKenneth E. Jansen           if (neltp==0) then
16259599516SKenneth E. Jansen              writeLock=1;
16359599516SKenneth E. Jansen           endif
16459599516SKenneth E. Jansen
16559599516SKenneth E. Jansen!           print *, "neltp is ", neltp
16659599516SKenneth E. Jansen
167*bc62cfd4SCameron Smith           call phio_readdatablock(handle,
168*bc62cfd4SCameron Smith     &      c_char_'connectivity boundary1' // char(0),
169*bc62cfd4SCameron Smith     &      c_loc(ientp),iientpsiz,dataInt,iotype)
17059599516SKenneth E. Jansen
17159599516SKenneth E. Jansen!MR CHANGE
17259599516SKenneth E. Jansen!           write (temp1,"('connectivityBoundaryDatablock_',i1,'_',i1)")
17359599516SKenneth E. Jansen!     &                                              iblk,myrank
17459599516SKenneth E. Jansen!           temp1=trim(temp1)
17559599516SKenneth E. Jansen
17659599516SKenneth E. Jansen!           open(unit=14,file=temp1,status='unknown')
17759599516SKenneth E. Jansen!           do i=1,neltp
17859599516SKenneth E. Jansen!              do j=1,nshl
17959599516SKenneth E. Jansen!                write(14,*) ientp(i,j)
18059599516SKenneth E. Jansen!              enddo
18159599516SKenneth E. Jansen!           enddo
18259599516SKenneth E. Jansen!           write(14,*) iientpsiz
18359599516SKenneth E. Jansen!           close(14)
18459599516SKenneth E. Jansen!MR CHANGE END
18559599516SKenneth E. Jansen
18659599516SKenneth E. Jansen
18759599516SKenneth E. Jansenc
18859599516SKenneth E. Jansenc.... Read the boundary flux codes
18959599516SKenneth E. Jansenc
19059599516SKenneth E. Jansen
19159599516SKenneth E. Jansen!           print *,"connectivity [] is ", trim(fname2),ientp(0,0)
19259599516SKenneth E. Jansen
19359599516SKenneth E. Jansen
19459599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
19559599516SKenneth E. Jansen           call MPI_BARRIER(MPI_COMM_WORLD, ierr)
19659599516SKenneth E. Jansen
19759599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
19859599516SKenneth E. Jansen
199e5afe575SCameron Smith           call phio_readheader(handle,
200e5afe575SCameron Smith     &      c_char_'nbc codes1' // char(0),
201e5afe575SCameron Smith     &      c_loc(intfromfile), ieight, dataInt, iotype)
20259599516SKenneth E. Jansen           iiBCBtpsiz=neltp*ndiBCB
203*bc62cfd4SCameron Smith           call phio_readdatablock(handle,
204*bc62cfd4SCameron Smith     &      c_char_'nbc codes1' // char(0),
205*bc62cfd4SCameron Smith     &      c_loc(iBCBtp),iiBCBtpsiz,dataInt,iotype)
20659599516SKenneth E. Jansen
20759599516SKenneth E. Jansen!MR CHANGE
20859599516SKenneth E. Jansen!           print *, "ndiBCB is ",ndiBCB
20959599516SKenneth E. Jansen!           write (temp1,"('nbcCodesDatablock_',i1,'_',i1)")
21059599516SKenneth E. Jansen!     &                                              iblk,myrank
21159599516SKenneth E. Jansen!           temp1=trim(temp1)
21259599516SKenneth E. Jansen!
21359599516SKenneth E. Jansen!           open(unit=13,file=temp1,status='unknown')
21459599516SKenneth E. Jansen!           do i=1,neltp
21559599516SKenneth E. Jansen!              do j=1,ndiBCB
21659599516SKenneth E. Jansen!                write(13,*) iBCBtp(i,j)
21759599516SKenneth E. Jansen!              enddo
21859599516SKenneth E. Jansen!           enddo
21959599516SKenneth E. Jansen!           write(13,*) iiBCBtpsiz
22059599516SKenneth E. Jansen!           close(13)
22159599516SKenneth E. Jansen!!           iBCBtp(:,:) = 0 ! JUST FOR TEST
22259599516SKenneth E. Jansen!MR CHANGE END
22359599516SKenneth E. Jansen
22459599516SKenneth E. Jansenc
22559599516SKenneth E. Jansenc.... read the boundary condition data
22659599516SKenneth E. Jansenc
22759599516SKenneth E. Jansen
22859599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
22959599516SKenneth E. Jansen           call MPI_BARRIER(MPI_COMM_WORLD, ierr)
23059599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
23159599516SKenneth E. Jansen
232e5afe575SCameron Smith           call phio_readheader(handle,
233e5afe575SCameron Smith     &      c_char_'nbc values1' // char(0),
234e5afe575SCameron Smith     &      c_loc(intfromfile), ieight, dataInt, iotype)
23559599516SKenneth E. Jansen           BCBtp    = zero
23659599516SKenneth E. Jansen           iBCBtpsiz=neltp*ndBCB
237*bc62cfd4SCameron Smith           call phio_readdatablock(handle,
238*bc62cfd4SCameron Smith     &      c_char_'nbc values1' // char(0),
239*bc62cfd4SCameron Smith     &      c_loc(BCBtp),iBCBtpsiz,dataDbl,iotype)
24059599516SKenneth E. Jansen
24159599516SKenneth E. Jansen!MR CHANGE
24259599516SKenneth E. Jansen!           write (temp1,"('nbcValuesDatablock_',i1,'_',i1)")
24359599516SKenneth E. Jansen!     &                                              iblk,myrank
24459599516SKenneth E. Jansen!           temp1=trim(temp1)
24559599516SKenneth E. Jansen!           open(unit=12,file=temp1,status='unknown')
24659599516SKenneth E. Jansen!           do i=1,neltp
24759599516SKenneth E. Jansen!              do j=1,ndBCB
24859599516SKenneth E. Jansen!                write(12,*) BCBtp(i,j)
24959599516SKenneth E. Jansen!              enddo
25059599516SKenneth E. Jansen!           enddo
25159599516SKenneth E. Jansen!           write(12,*) iBCBtpsiz
25259599516SKenneth E. Jansen!           close(12)
25359599516SKenneth E. Jansen!MR CHANGE END
25459599516SKenneth E. Jansen
25559599516SKenneth E. Jansenc
25659599516SKenneth E. Jansenc This is a temporary fix until NSpre properly zeros this array where it
25759599516SKenneth E. Jansenc is not set.  DEC has indigestion with these arrays though the
25859599516SKenneth E. Jansenc result is never used (never effects solution).
25959599516SKenneth E. Jansenc
26059599516SKenneth E. Jansen
26159599516SKenneth E. Jansen
26259599516SKenneth E. Jansen!MR CHANGE
26359599516SKenneth E. Jansen           if(writeLock==0) then
26459599516SKenneth E. Jansen!MR CHANGE
26559599516SKenneth E. Jansen!              print *,"In ASSIGN ASSIGN",myrank
26659599516SKenneth E. Jansen              where(.not.btest(iBCBtp(:,1),0)) BCBtp(:,1)=zero
26759599516SKenneth E. Jansen              where(.not.btest(iBCBtp(:,1),1)) BCBtp(:,2)=zero
26859599516SKenneth E. Jansen              where(.not.btest(iBCBtp(:,1),3)) BCBtp(:,6)=zero
26959599516SKenneth E. Jansen              if(ndBCB.gt.6) then
27059599516SKenneth E. Jansen                 do i=6,ndof
27159599516SKenneth E. Jansen                    where(.not.btest(iBCBtp(:,1),i-1)) BCBtp(:,i+1)=zero
27259599516SKenneth E. Jansen                 enddo
27359599516SKenneth E. Jansen              endif
27459599516SKenneth E. Jansen              where(.not.btest(iBCBtp(:,1),2))
27559599516SKenneth E. Jansen                 BCBtp(:,3)=zero
27659599516SKenneth E. Jansen                 BCBtp(:,4)=zero
27759599516SKenneth E. Jansen                 BCBtp(:,5)=zero
27859599516SKenneth E. Jansen              endwhere
27959599516SKenneth E. Jansen
28059599516SKenneth E. Jansen              do n=1,neltp,ibksz
28159599516SKenneth E. Jansen                 nelblb=nelblb+1
28259599516SKenneth E. Jansen                 npro= min(IBKSZ, neltp - n + 1)
28359599516SKenneth E. Jansenc
28459599516SKenneth E. Jansen                 lcblkb(1,nelblb)  = iel
28559599516SKenneth E. Jansenc     lcblkb(2,nelblb)  = iopen ! available for later use
28659599516SKenneth E. Jansen                 lcblkb(3,nelblb)  = lcsyst
28759599516SKenneth E. Jansen                 lcblkb(4,nelblb)  = ipordl
28859599516SKenneth E. Jansen                 lcblkb(5,nelblb)  = nenl
28959599516SKenneth E. Jansen                 lcblkb(6,nelblb)  = nenbl
29059599516SKenneth E. Jansen                 lcblkb(7,nelblb)  = mattyp
29159599516SKenneth E. Jansen                 lcblkb(8,nelblb)  = ndofl
29259599516SKenneth E. Jansen                 lcblkb(9,nelblb)  = nshl
29359599516SKenneth E. Jansen                 lcblkb(10,nelblb) = nshlb ! # of shape functions per elt
29459599516SKenneth E. Jansenc
29559599516SKenneth E. Jansenc.... save the element block
29659599516SKenneth E. Jansenc
29759599516SKenneth E. Jansen                 n1=n
29859599516SKenneth E. Jansen                 n2=n+npro-1
29959599516SKenneth E. Jansen                 materb=1       ! all one material for now
30059599516SKenneth E. Jansenc
30159599516SKenneth E. Jansenc.... allocate memory for stack arrays
30259599516SKenneth E. Jansenc
30359599516SKenneth E. Jansen
30459599516SKenneth E. Jansen                 allocate (mienb(nelblb)%p(npro,nshl))
30559599516SKenneth E. Jansenc
30659599516SKenneth E. Jansen                 allocate (miBCB(nelblb)%p(npro,ndiBCB))
30759599516SKenneth E. Jansenc
30859599516SKenneth E. Jansen                 allocate (mBCB(nelblb)%p(npro,nshlb,ndBCB))
30959599516SKenneth E. Jansenc
31059599516SKenneth E. Jansen                 allocate (mmatb(nelblb)%p(npro))
31159599516SKenneth E. Jansenc
31259599516SKenneth E. Jansenc.... save the boundary element block
31359599516SKenneth E. Jansenc
31459599516SKenneth E. Jansen                 call gensvb (ientp(n1:n2,1:nshl),
31559599516SKenneth E. Jansen     &                iBCBtp(n1:n2,:),      BCBtp(n1:n2,:),
31659599516SKenneth E. Jansen     &                materb,        mienb(nelblb)%p,
31759599516SKenneth E. Jansen     &                miBCB(nelblb)%p,        mBCB(nelblb)%p,
31859599516SKenneth E. Jansen     &                mmatb(nelblb)%p)
31959599516SKenneth E. Jansenc
32059599516SKenneth E. Jansen                 iel=iel+npro
32159599516SKenneth E. Jansen              enddo
32259599516SKenneth E. Jansen
32359599516SKenneth E. Jansen!MR CHANGE
32459599516SKenneth E. Jansen           endif
32559599516SKenneth E. Jansen!MR CHANGE
32659599516SKenneth E. Jansen           deallocate(ientp)
32759599516SKenneth E. Jansen           deallocate(iBCBtp)
32859599516SKenneth E. Jansen           deallocate(BCBtp)
32959599516SKenneth E. Jansen
33059599516SKenneth E. Jansen        enddo
33159599516SKenneth E. Jansen        lcblkb(1,nelblb+1) = iel
33259599516SKenneth E. Jansen
33359599516SKenneth E. Jansen!        call closefile( igeom, "read" )
33459599516SKenneth E. Jansen!        call finalizephmpiio( igeom )
33559599516SKenneth E. Jansen
33659599516SKenneth E. Jansenc
33759599516SKenneth E. Jansenc.... return
33859599516SKenneth E. Jansenc
33959599516SKenneth E. Jansen        return
34059599516SKenneth E. Jansenc
34159599516SKenneth E. Jansenc.... end of file error handling
34259599516SKenneth E. Jansenc
34359599516SKenneth E. Jansen 911    call error ('genbcb  ','end file',igeomBAK)
34459599516SKenneth E. Jansenc
34559599516SKenneth E. Jansen1000    format(a80,//,
34659599516SKenneth E. Jansen     &  ' B o u n d a r y   E l e m e n t   C o n n e c t i v i t y',//,
34759599516SKenneth E. Jansen     &  '   Elem   BC codes',/,
34859599516SKenneth E. Jansen     &  '  Number  C P V H ',5x,27('Node',i1,:,2x))
34959599516SKenneth E. Jansen1100    format(2x,i5,2x,4i2,3x,27i7)
35059599516SKenneth E. Jansenc$$$2000    format(a80,//,
35159599516SKenneth E. Jansenc$$$     &  ' B o u n d a r y   E l e m e n t   B C   D a t a ',//,
35259599516SKenneth E. Jansenc$$$     &  '   Node   ',3x,'mass',/,
35359599516SKenneth E. Jansenc$$$     &  '  Number  ',3x,'flux',6x,'Pressure',6x,'Heat',6x,
35459599516SKenneth E. Jansenc$$$     &  3('Viscous',i1,:,4x))
35559599516SKenneth E. Jansen2100    format(2x,i5,1p,1x,6e12.4)
35659599516SKenneth E. Jansenc
35759599516SKenneth E. Jansen        end
35859599516SKenneth E. Jansen
359