xref: /phasta/phSolver/common/genblk.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
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
12e5afe575SCameron Smith        use phio
13e5afe575SCameron Smith        use iso_c_binding
1459599516SKenneth E. Jansen        include "common.h"
1559599516SKenneth E. Jansen        include "mpif.h" !Required to determine the max for itpblk
163aa841a8SCameron Smith
179a6935e5SKenneth E. Jansen        integer, target, allocatable :: ientp(:,:)
1859599516SKenneth E. Jansen        integer mater(ibksz)
199a6935e5SKenneth E. Jansen        integer, target :: intfromfile(50) ! integers read from headers
2059599516SKenneth E. Jansen        character*255 fname1
21fcf561c1SCameron Smith        integer :: descriptor, descriptorG, GPID, color
2259599516SKenneth E. Jansen        integer ::  numparts, writeLock
232efdc748SKenneth E. Jansen        integer :: ierr_io, numprocs
249a6935e5SKenneth E. Jansen        integer, target :: itpblktot,ierr,iseven
252efdc748SKenneth E. Jansen        character*255 fname2
26e5afe575SCameron Smith        character(len=30) :: dataInt
27d5d2f64dSCameron Smith        dataInt = c_char_'integer'//c_null_char
2859599516SKenneth E. Jansen        numparts = numpe !This is the common settings. Beware if you try to compute several parts per process
2959599516SKenneth E. Jansen        ione=1
3059599516SKenneth E. Jansen        itwo=2
3159599516SKenneth E. Jansen        iseven=7
3259599516SKenneth E. Jansen        ieleven=11
3359599516SKenneth E. Jansen        iel=1
3459599516SKenneth E. Jansen        itpblk=nelblk
3559599516SKenneth E. Jansen
3659599516SKenneth E. Jansen        ! Get the total number of different interior topologies in the whole domain.
3759599516SKenneth E. Jansen        ! Try to read from a field. If the field does not exist, scan the geombc file.
382efdc748SKenneth E. Jansen          itpblktot=1  ! hardwired to montopology for now
39d5d2f64dSCameron Smith        call phio_readheader(fhandle,
40e5afe575SCameron Smith     &   c_char_'total number of interior tpblocks' // char(0),
41e5afe575SCameron Smith     &   c_loc(itpblktot), ione, dataInt, iotype)
4259599516SKenneth E. Jansen
4359599516SKenneth E. Jansen        if (itpblktot == -1) then
4459599516SKenneth E. Jansen          ! The field 'total number of different interior tpblocks' was not found in the geombc file.
4559599516SKenneth E. Jansen          ! Scan all the geombc file for the 'connectivity interior' fields to get this information.
4659599516SKenneth E. Jansen          iblk=0
4759599516SKenneth E. Jansen          neltp=0
4859599516SKenneth E. Jansen          do while(neltp .ne. -1)
4959599516SKenneth E. Jansen
5059599516SKenneth E. Jansen            ! intfromfile is reinitialized to -1 every time.
5159599516SKenneth E. Jansen            ! If connectivity interior@xxx is not found, then
5259599516SKenneth E. Jansen            ! readheader will return intfromfile unchanged
5359599516SKenneth E. Jansen
5459599516SKenneth E. Jansen            intfromfile(:)=-1
5559599516SKenneth E. Jansen            iblk = iblk+1
565b7f36ccSCameron Smith            if(input_mode.ge.1) then
57aa9d7345SCameron Smith              write (fname2,"('connectivity interior',i1)") iblk
582efdc748SKenneth E. Jansen            else
592efdc748SKenneth E. Jansen              write (fname2,"('connectivity interior linear tetrahedron')")
60ae8d68e4SKenneth E. Jansen!              write (fname2,"('connectivity interior?')")
612efdc748SKenneth E. Jansen            endif
6259599516SKenneth E. Jansen
6359599516SKenneth E. Jansen            !write(*,*) 'rank, fname2',myrank, trim(adjustl(fname2))
64d5d2f64dSCameron Smith            call phio_readheader(fhandle, fname2 // char(0),
65e5afe575SCameron Smith     &       c_loc(intfromfile), iseven, dataInt, iotype)
6659599516SKenneth E. Jansen            neltp = intfromfile(1) ! -1 if fname2 was not found, >=0 otherwise
6759599516SKenneth E. Jansen          end do
6859599516SKenneth E. Jansen          itpblktot = iblk-1
6959599516SKenneth E. Jansen        end if
7059599516SKenneth E. Jansen
7159599516SKenneth E. Jansen        if (myrank == 0) then
7259599516SKenneth E. Jansen          write(*,*) 'Number of interior topologies: ',itpblktot
7359599516SKenneth E. Jansen        endif
7459599516SKenneth E. Jansen
7559599516SKenneth E. Jansen        nelblk=0
7659599516SKenneth E. Jansen        mattyp = 0
7759599516SKenneth E. Jansen        ndofl = ndof
7859599516SKenneth E. Jansen        nsymdl = nsymdf
7959599516SKenneth E. Jansen
8059599516SKenneth E. Jansen        do iblk = 1, itpblktot
8159599516SKenneth E. Jansen           writeLock=0;
825b7f36ccSCameron Smith            if(input_mode.ge.1) then
83aa9d7345SCameron Smith              write (fname2,"('connectivity interior',i1)") iblk
842efdc748SKenneth E. Jansen            else
852efdc748SKenneth E. Jansen              write (fname2,"('connectivity interior linear tetrahedron')")
86ae8d68e4SKenneth E. Jansen!              write (fname2,"('connectivity interior?')")
872efdc748SKenneth E. Jansen            endif
8859599516SKenneth E. Jansen
8959599516SKenneth E. Jansen           ! Synchronization for performance monitoring, as some parts do not include some topologies
9059599516SKenneth E. Jansen           call MPI_Barrier(MPI_COMM_WORLD,ierr)
91d5d2f64dSCameron Smith           call phio_readheader(fhandle, fname2 // char(0),
92e5afe575SCameron Smith     &      c_loc(intfromfile), iseven, dataInt, iotype)
9359599516SKenneth E. Jansen           neltp  =intfromfile(1)
9459599516SKenneth E. Jansen           nenl   =intfromfile(2)
9559599516SKenneth E. Jansen           ipordl =intfromfile(3)
9659599516SKenneth E. Jansen           nshl   =intfromfile(4)
9759599516SKenneth E. Jansen           ijunk  =intfromfile(5)
9859599516SKenneth E. Jansen           ijunk  =intfromfile(6)
9959599516SKenneth E. Jansen           lcsyst =intfromfile(7)
10059599516SKenneth E. Jansen           allocate (ientp(neltp,nshl))
10159599516SKenneth E. Jansen           iientpsiz=neltp*nshl
10259599516SKenneth E. Jansen
10359599516SKenneth E. Jansen           if (neltp==0) then
10459599516SKenneth E. Jansen              writeLock=1;
10559599516SKenneth E. Jansen           endif
10659599516SKenneth E. Jansen
107d5d2f64dSCameron Smith           call phio_readdatablock(fhandle,fname2 // char(0),
108bc62cfd4SCameron Smith     &      c_loc(ientp), iientpsiz, dataInt, iotype)
10959599516SKenneth E. Jansen
11059599516SKenneth E. Jansen           if(writeLock==0) then
11159599516SKenneth E. Jansen             do n=1,neltp,ibksz
11259599516SKenneth E. Jansen                nelblk=nelblk+1
11359599516SKenneth E. Jansen                npro= min(IBKSZ, neltp - n + 1)
11459599516SKenneth E. Jansen                lcblk(1,nelblk)  = iel
11559599516SKenneth E. Jansen                lcblk(3,nelblk)  = lcsyst
11659599516SKenneth E. Jansen                lcblk(4,nelblk)  = ipordl
11759599516SKenneth E. Jansen                lcblk(5,nelblk)  = nenl
11859599516SKenneth E. Jansen                lcblk(6,nelblk)  = nfacel
11959599516SKenneth E. Jansen                lcblk(7,nelblk)  = mattyp
12059599516SKenneth E. Jansen                lcblk(8,nelblk)  = ndofl
12159599516SKenneth E. Jansen                lcblk(9,nelblk)  = nsymdl
12259599516SKenneth E. Jansen                lcblk(10,nelblk) = nshl ! # of shape functions per elt
12359599516SKenneth E. Jansenc
12459599516SKenneth E. Jansenc.... allocate memory for stack arrays
12559599516SKenneth E. Jansenc
12659599516SKenneth E. Jansen                allocate (mmat(nelblk)%p(npro))
12759599516SKenneth E. Jansenc
12859599516SKenneth E. Jansen                allocate (mien(nelblk)%p(npro,nshl))
12959599516SKenneth E. Jansen                allocate (mxmudmi(nelblk)%p(npro,maxsh))
130*513954efSKenneth E. Jansen                if(usingpetsc.eq.0) then
131*513954efSKenneth E. Jansen                    allocate (mienG(nelblk)%p(1,1))
132*513954efSKenneth E. Jansen                else
133*513954efSKenneth E. Jansen                    allocate (mienG(nelblk)%p(npro,nshl))
134*513954efSKenneth E. Jansen                endif
135*513954efSKenneth E. Jansen                ! note mienG will be passed to gensav but nothing filled if not
136*513954efSKenneth E. Jansen                ! using PETSc so this is safe
13759599516SKenneth E. Jansenc
13859599516SKenneth E. Jansenc.... save the element block
13959599516SKenneth E. Jansenc
14059599516SKenneth E. Jansen                n1=n
14159599516SKenneth E. Jansen                n2=n+npro-1
14259599516SKenneth E. Jansen                mater=1   ! all one material for now
14359599516SKenneth E. Jansen                call gensav (ientp(n1:n2,1:nshl),
14459599516SKenneth E. Jansen     &                       mater,           mien(nelblk)%p,
145*513954efSKenneth E. Jansen     &                       mienG(nelblk)%p,
14659599516SKenneth E. Jansen     &                       mmat(nelblk)%p)
14759599516SKenneth E. Jansen                iel=iel+npro
14859599516SKenneth E. Jansen             enddo
14959599516SKenneth E. Jansen           endif
15059599516SKenneth E. Jansen           deallocate(ientp)
15159599516SKenneth E. Jansen        enddo
15259599516SKenneth E. Jansen
15359599516SKenneth E. Jansen        lcblk(1,nelblk+1) = iel
15459599516SKenneth E. Jansen        return
15559599516SKenneth E. Jansen1000    format(a80,//,
15659599516SKenneth E. Jansen     &  ' N o d a l   C o n n e c t i v i t y',//,
15759599516SKenneth E. Jansen     &  '   Elem  ',/,
15859599516SKenneth E. Jansen     &  '  Number  ',7x,27('Node',i2,:,2x))
15959599516SKenneth E. Jansen1100    format(2x,i5,6x,27i8)
16059599516SKenneth E. Jansen        end
161