xref: /phasta/phSolver/common/genblk.f (revision d1293ce908feb078a7fc65b010fc9344f582bfd9)
159599516SKenneth E. Jansen        subroutine genblk (IBKSZ)
259599516SKenneth E. Jansenc
359599516SKenneth E. Jansenc----------------------------------------------------------------------
459599516SKenneth E. Jansenc
559599516SKenneth E. Jansenc  This routine reads the interior elements and generates the
659599516SKenneth E. Jansenc  appropriate blocks.
759599516SKenneth E. Jansenc
859599516SKenneth E. Jansenc Zdenek Johan, Fall 1991.
959599516SKenneth E. Jansenc----------------------------------------------------------------------
1059599516SKenneth E. Jansenc
1159599516SKenneth E. Jansen        use pointer_data
1259599516SKenneth E. Jansenc
1359599516SKenneth E. Jansen        include "common.h"
1459599516SKenneth E. Jansen!MR CHANGE
1559599516SKenneth E. Jansen        include "mpif.h" !Required to determine the max for itpblk
1659599516SKenneth E. Jansen!MR CHANGE END
1759599516SKenneth E. Jansenc
1859599516SKenneth E. Jansen        integer, allocatable :: ientp(:,:)
1959599516SKenneth E. Jansen        integer mater(ibksz)
2059599516SKenneth E. Jansen        integer intfromfile(50) ! integers read from headers
2159599516SKenneth E. Jansen        character*255 fname1
2259599516SKenneth E. Jansen
2359599516SKenneth E. Jansencccccccccccccc New Phasta IO starts here ccccccccccccccccccccccccc
2459599516SKenneth E. Jansen
2559599516SKenneth E. Jansen        integer :: descriptor, descriptorG, GPID, color, nfiles
2659599516SKenneth E. Jansen        integer ::  numparts, writeLock
2759599516SKenneth E. Jansen        integer :: ierr_io, numprocs, itmp, itmp2
2859599516SKenneth E. Jansen!MR CHANGE
2959599516SKenneth E. Jansen        integer :: itpblktot,ierr,iseven
3059599516SKenneth E. Jansen!MR CHANGE END
3159599516SKenneth E. Jansen        character*255 fnamer, fname2, temp2
3259599516SKenneth E. Jansen        character*64 temp1, temp3
3359599516SKenneth E. Jansen!THIS NEEDS TO BE CLEANED - MR
3459599516SKenneth E. Jansen        nfiles = nsynciofiles
3559599516SKenneth E. Jansen!        nfields = nsynciofieldsreadgeombc
3659599516SKenneth E. Jansen        numparts = numpe !This is the common settings. Beware if you try to compute several parts per process
3759599516SKenneth E. Jansen
3859599516SKenneth E. Jansen!        nppp = numparts/numpe
3959599516SKenneth E. Jansen!        nppf = numparts/nfiles
4059599516SKenneth E. Jansen
4159599516SKenneth E. Jansen        color = int(myrank/(numparts/nfiles)) !Should call the SyncIO routine here
4259599516SKenneth E. Jansen        itmp2 = int(log10(float(color+1)))+1
4359599516SKenneth E. Jansen        write (temp2,"('(''geombc-dat.'',i',i1,')')") itmp2
4459599516SKenneth E. Jansen        temp2=trim(temp2)
4559599516SKenneth E. Jansen        write (fnamer,temp2) (color+1)
4659599516SKenneth E. Jansen        fnamer=trim(fnamer)
4759599516SKenneth E. Jansen
4859599516SKenneth E. Jansen        ione=1
4959599516SKenneth E. Jansen        itwo=2
5059599516SKenneth E. Jansen        iseven=7
5159599516SKenneth E. Jansen        ieleven=11
5259599516SKenneth E. Jansen        itmp = int(log10(float(myrank+1)))+1
5359599516SKenneth E. Jansen
5459599516SKenneth E. Jansencccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
5559599516SKenneth E. Jansen
5659599516SKenneth E. Jansenc
5759599516SKenneth E. Jansen        iel=1
5859599516SKenneth E. Jansen        itpblk=nelblk
5959599516SKenneth E. Jansen!MR CHANGE
6059599516SKenneth E. Jansen
6159599516SKenneth E. Jansen        ! Get the total number of different interior topologies in the whole domain.
6259599516SKenneth E. Jansen        ! Try to read from a field. If the field does not exist, scan the geombc file.
6359599516SKenneth E. Jansen        itpblktot=-1
6459599516SKenneth E. Jansen        write(temp1,
6559599516SKenneth E. Jansen     &   "('(''total number of interior tpblocks@'',i',i1,',A1)')") itmp
6659599516SKenneth E. Jansen
6759599516SKenneth E. Jansen        write (fname2,temp1) (myrank+1),'?'
68*d1293ce9SCameron Smith        call phio_readheader(igeom,fname2 // char(0) ,itpblktot,ione,
6959599516SKenneth E. Jansen     &  'integer' // char(0),iotype)
7059599516SKenneth E. Jansen
7159599516SKenneth E. Jansen!        write (*,*) 'Rank: ',myrank,' interior itpblktot intermediate:',
7259599516SKenneth E. Jansen!     &               itpblktot
7359599516SKenneth E. Jansen
7459599516SKenneth E. Jansen        if (itpblktot == -1) then
7559599516SKenneth E. Jansen          ! The field 'total number of different interior tpblocks' was not found in the geombc file.
7659599516SKenneth E. Jansen          ! Scan all the geombc file for the 'connectivity interior' fields to get this information.
7759599516SKenneth E. Jansen          iblk=0
7859599516SKenneth E. Jansen          neltp=0
7959599516SKenneth E. Jansen          do while(neltp .ne. -1)
8059599516SKenneth E. Jansen
8159599516SKenneth E. Jansen            ! intfromfile is reinitialized to -1 every time.
8259599516SKenneth E. Jansen            ! If connectivity interior@xxx is not found, then
8359599516SKenneth E. Jansen            ! readheader will return intfromfile unchanged
8459599516SKenneth E. Jansen
8559599516SKenneth E. Jansen            intfromfile(:)=-1
8659599516SKenneth E. Jansen            iblk = iblk+1
8759599516SKenneth E. Jansen            write (temp1,"('connectivity interior',i1)") iblk
8859599516SKenneth E. Jansen            temp1 = trim(temp1)
8959599516SKenneth E. Jansen            write (temp3,"('(''@'',i',i1,',A1)')") itmp
9059599516SKenneth E. Jansen            write (fname2, temp3) (myrank+1), '?'
9159599516SKenneth E. Jansen            fname2 = trim(temp1)//trim(fname2)
9259599516SKenneth E. Jansen
9359599516SKenneth E. Jansen            !write(*,*) 'rank, fname2',myrank, trim(adjustl(fname2))
94*d1293ce9SCameron Smith            call phio_readheader(igeom,fname2 // char(0),intfromfile,
9559599516SKenneth E. Jansen     &       iseven,'integer' // char(0),iotype)
9659599516SKenneth E. Jansen            neltp = intfromfile(1) ! -1 if fname2 was not found, >=0 otherwise
9759599516SKenneth E. Jansen          end do
9859599516SKenneth E. Jansen          itpblktot = iblk-1
9959599516SKenneth E. Jansen        end if
10059599516SKenneth E. Jansen
10159599516SKenneth E. Jansen        if (myrank == 0) then
10259599516SKenneth E. Jansen          write(*,*) 'Number of interior topologies: ',itpblktot
10359599516SKenneth E. Jansen        endif
10459599516SKenneth E. Jansen!        write (*,*) 'Rank: ',myrank,' interior itpblktot final:',
10559599516SKenneth E. Jansen!     &               itpblktot
10659599516SKenneth E. Jansen
10759599516SKenneth E. Jansen!MR CHANGE END
10859599516SKenneth E. Jansen
10959599516SKenneth E. Jansen        nelblk=0
11059599516SKenneth E. Jansen        mattyp = 0
11159599516SKenneth E. Jansen        ndofl = ndof
11259599516SKenneth E. Jansen        nsymdl = nsymdf
11359599516SKenneth E. Jansen
11459599516SKenneth E. Jansen!        call initphmpiio( nfields, nppf, nfiles, igeom )
11559599516SKenneth E. Jansen!        call openfile( fnamer, 'read', igeom )
11659599516SKenneth E. Jansen
11759599516SKenneth E. Jansen!         do iblk = 1, itpblk
11859599516SKenneth E. Jansen        do iblk = 1, itpblktot
11959599516SKenneth E. Jansen           writeLock=0;
12059599516SKenneth E. Jansen!MR CHANGE END
12159599516SKenneth E. Jansenc
12259599516SKenneth E. Jansenc           read(igeomBAK) neltp,nenl,ipordl,nshl, ijunk, ijunk, lcsyst
12359599516SKenneth E. Jansenc           call creadlist(igeomBAK,iseven,
12459599516SKenneth E. Jansenc     &          neltp,nenl,ipordl,nshl, ijunk, ijunk, lcsyst)
12559599516SKenneth E. Jansen
12659599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
12759599516SKenneth E. Jansen
12859599516SKenneth E. Jansen           write (temp1,"('connectivity interior',i1)") iblk
12959599516SKenneth E. Jansen           temp1=trim(temp1)
13059599516SKenneth E. Jansen           write (temp3,"('(''@'',i',i1,',A1)')") itmp
13159599516SKenneth E. Jansen           write (fname2, temp3) (myrank+1), '?'
13259599516SKenneth E. Jansen           fname2 = trim(temp1)//trim(fname2)
13359599516SKenneth E. Jansen
13459599516SKenneth E. Jansenccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
13559599516SKenneth E. Jansen
13659599516SKenneth E. Jansenc           fname1='connectivity interior?'
13759599516SKenneth E. Jansen
13859599516SKenneth E. Jansen           ! Synchronization for performance monitoring, as some parts do not include some topologies
13959599516SKenneth E. Jansen           call MPI_Barrier(MPI_COMM_WORLD,ierr)
140*d1293ce9SCameron Smith           call phio_readheader(igeom,fname2 // char(0) ,intfromfile,
14159599516SKenneth E. Jansen     &     iseven,"integer" // char(0), iotype)
14259599516SKenneth E. Jansen           neltp  =intfromfile(1)
14359599516SKenneth E. Jansen           nenl   =intfromfile(2)
14459599516SKenneth E. Jansen           ipordl =intfromfile(3)
14559599516SKenneth E. Jansen           nshl   =intfromfile(4)
14659599516SKenneth E. Jansen           ijunk  =intfromfile(5)
14759599516SKenneth E. Jansen           ijunk  =intfromfile(6)
14859599516SKenneth E. Jansen           lcsyst =intfromfile(7)
14959599516SKenneth E. Jansen           allocate (ientp(neltp,nshl))
15059599516SKenneth E. Jansenc           read(igeomBAK) ientp
15159599516SKenneth E. Jansen           iientpsiz=neltp*nshl
15259599516SKenneth E. Jansen
15359599516SKenneth E. Jansen           if (neltp==0) then
15459599516SKenneth E. Jansen              writeLock=1;
15559599516SKenneth E. Jansen           endif
15659599516SKenneth E. Jansen
15759599516SKenneth E. Jansen           call readdatablock(igeom,fname2 // char(0),ientp,iientpsiz,
15859599516SKenneth E. Jansen     &                     "integer" // char(0), iotype)
15959599516SKenneth E. Jansen
16059599516SKenneth E. Jansen!            call closefile( igeom, "read" // char(0) )
16159599516SKenneth E. Jansen!            call finalizephmpiio( igeom )
16259599516SKenneth E. Jansen
16359599516SKenneth E. Jansen!MR CHANGE
16459599516SKenneth E. Jansen           if(writeLock==0) then
16559599516SKenneth E. Jansen!MR CHANGE
16659599516SKenneth E. Jansen
16759599516SKenneth E. Jansen             do n=1,neltp,ibksz
16859599516SKenneth E. Jansen                nelblk=nelblk+1
16959599516SKenneth E. Jansen                npro= min(IBKSZ, neltp - n + 1)
17059599516SKenneth E. Jansenc
17159599516SKenneth E. Jansen                lcblk(1,nelblk)  = iel
17259599516SKenneth E. Jansenc                lcblk(2,nelblk)  = iopen ! available for later use
17359599516SKenneth E. Jansen                lcblk(3,nelblk)  = lcsyst
17459599516SKenneth E. Jansen                lcblk(4,nelblk)  = ipordl
17559599516SKenneth E. Jansen                lcblk(5,nelblk)  = nenl
17659599516SKenneth E. Jansen                lcblk(6,nelblk)  = nfacel
17759599516SKenneth E. Jansen                lcblk(7,nelblk)  = mattyp
17859599516SKenneth E. Jansen                lcblk(8,nelblk)  = ndofl
17959599516SKenneth E. Jansen                lcblk(9,nelblk)  = nsymdl
18059599516SKenneth E. Jansen                lcblk(10,nelblk) = nshl ! # of shape functions per elt
18159599516SKenneth E. Jansenc
18259599516SKenneth E. Jansenc.... allocate memory for stack arrays
18359599516SKenneth E. Jansenc
18459599516SKenneth E. Jansen                allocate (mmat(nelblk)%p(npro))
18559599516SKenneth E. Jansenc
18659599516SKenneth E. Jansen                allocate (mien(nelblk)%p(npro,nshl))
18759599516SKenneth E. Jansen                allocate (mxmudmi(nelblk)%p(npro,maxsh))
18859599516SKenneth E. Jansenc
18959599516SKenneth E. Jansenc.... save the element block
19059599516SKenneth E. Jansenc
19159599516SKenneth E. Jansen                n1=n
19259599516SKenneth E. Jansen                n2=n+npro-1
19359599516SKenneth E. Jansen                mater=1   ! all one material for now
19459599516SKenneth E. Jansen                call gensav (ientp(n1:n2,1:nshl),
19559599516SKenneth E. Jansen     &                       mater,           mien(nelblk)%p,
19659599516SKenneth E. Jansen     &                       mmat(nelblk)%p)
19759599516SKenneth E. Jansen                iel=iel+npro
19859599516SKenneth E. Jansenc
19959599516SKenneth E. Jansen             enddo
20059599516SKenneth E. Jansen!MR CHANGE
20159599516SKenneth E. Jansen           endif
20259599516SKenneth E. Jansen!MR CHANGE
20359599516SKenneth E. Jansen           deallocate(ientp)
20459599516SKenneth E. Jansen        enddo
20559599516SKenneth E. Jansen
20659599516SKenneth E. Jansen!        call closefile( igeom, "read" // char(0) )
20759599516SKenneth E. Jansen!        call finalizephmpiio( igeom )
20859599516SKenneth E. Jansen
20959599516SKenneth E. Jansen        lcblk(1,nelblk+1) = iel
21059599516SKenneth E. Jansenc
21159599516SKenneth E. Jansenc.... return
21259599516SKenneth E. Jansenc
21359599516SKenneth E. JansenCAD        call timer ('Back    ')
21459599516SKenneth E. Jansenc
21559599516SKenneth E. Jansen        return
21659599516SKenneth E. Jansenc
21759599516SKenneth E. Jansen1000    format(a80,//,
21859599516SKenneth E. Jansen     &  ' N o d a l   C o n n e c t i v i t y',//,
21959599516SKenneth E. Jansen     &  '   Elem  ',/,
22059599516SKenneth E. Jansen     &  '  Number  ',7x,27('Node',i2,:,2x))
22159599516SKenneth E. Jansen1100    format(2x,i5,6x,27i8)
22259599516SKenneth E. Jansen        end
223