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