1*0f541e5dSKenneth E. Jansen subroutine genblkPosix (IBKSZ) 29d714148SKenneth E. Jansenc 39d714148SKenneth E. Jansenc---------------------------------------------------------------------- 49d714148SKenneth E. Jansenc 59d714148SKenneth E. Jansenc This routine reads the interior elements and generates the 69d714148SKenneth E. Jansenc appropriate blocks. 79d714148SKenneth E. Jansenc 89d714148SKenneth E. Jansenc Zdenek Johan, Fall 1991. 99d714148SKenneth E. Jansenc---------------------------------------------------------------------- 109d714148SKenneth E. Jansenc 119d714148SKenneth E. Jansen use pointer_data 12*0f541e5dSKenneth E. Jansen use phio 13*0f541e5dSKenneth E. Jansen use iso_c_binding 149d714148SKenneth E. Jansen include "common.h" 15*0f541e5dSKenneth E. Jansen include "mpif.h" !Required to determine the max for itpblk 16*0f541e5dSKenneth E. Jansen 17*0f541e5dSKenneth E. Jansen integer, target, allocatable :: ientp(:,:) 189d714148SKenneth E. Jansen integer mater(ibksz) 19*0f541e5dSKenneth E. Jansen integer, target :: intfromfile(50) ! integers read from headers 209d714148SKenneth E. Jansen character*255 fname1 21*0f541e5dSKenneth E. Jansen integer :: descriptor, descriptorG, GPID, color 22*0f541e5dSKenneth E. Jansen integer :: numparts, writeLock 23*0f541e5dSKenneth E. Jansen integer :: ierr_io, numprocs 24*0f541e5dSKenneth E. Jansen integer, target :: itpblktot,ierr,iseven 25*0f541e5dSKenneth E. Jansen character*255 fname2 26*0f541e5dSKenneth E. Jansen character(len=30) :: dataInt 27*0f541e5dSKenneth E. Jansen dataInt = c_char_'integer'//c_null_char 28*0f541e5dSKenneth E. Jansen numparts = numpe !This is the common settings. Beware if you try to compute several parts per process 29*0f541e5dSKenneth E. Jansen ione=1 30*0f541e5dSKenneth E. Jansen itwo=2 31*0f541e5dSKenneth E. Jansen iseven=7 32*0f541e5dSKenneth E. Jansen ieleven=11 339d714148SKenneth E. Jansen iel=1 349d714148SKenneth E. Jansen itpblk=nelblk 359d714148SKenneth E. Jansen 369d714148SKenneth E. Jansen nelblk=0 379d714148SKenneth E. Jansen mattyp = 0 389d714148SKenneth E. Jansen ndofl = ndof 399d714148SKenneth E. Jansen nsymdl = nsymdf 409d714148SKenneth E. Jansen do iblk = 1, itpblk 41*0f541e5dSKenneth E. Jansen write (fname2,"('connectivity interior?')") 42*0f541e5dSKenneth E. Jansen call phio_readheader(fhandle, fname2 // char(0), 43*0f541e5dSKenneth E. Jansen & c_loc(intfromfile), iseven, dataInt, iotype) 449d714148SKenneth E. Jansen neltp =intfromfile(1) 459d714148SKenneth E. Jansen nenl =intfromfile(2) 469d714148SKenneth E. Jansen ipordl =intfromfile(3) 479d714148SKenneth E. Jansen nshl =intfromfile(4) 489d714148SKenneth E. Jansen ijunk =intfromfile(5) 499d714148SKenneth E. Jansen ijunk =intfromfile(6) 509d714148SKenneth E. Jansen lcsyst =intfromfile(7) 519d714148SKenneth E. Jansen allocate (ientp(neltp,nshl)) 529d714148SKenneth E. Jansen iientpsiz=neltp*nshl 53*0f541e5dSKenneth E. Jansen call phio_readdatablock(fhandle,fname2 // char(0), 54*0f541e5dSKenneth E. Jansen & c_loc(ientp), iientpsiz, dataInt, iotype) 559d714148SKenneth E. Jansen 569d714148SKenneth E. Jansen do n=1,neltp,ibksz 579d714148SKenneth E. Jansen 589d714148SKenneth E. Jansen nelblk=nelblk+1 599d714148SKenneth E. Jansen npro= min(IBKSZ, neltp - n + 1) 609d714148SKenneth E. Jansenc 619d714148SKenneth E. Jansen lcblk(1,nelblk) = iel 629d714148SKenneth E. Jansenc lcblk(2,nelblk) = iopen ! available for later use 639d714148SKenneth E. Jansen lcblk(3,nelblk) = lcsyst 649d714148SKenneth E. Jansen lcblk(4,nelblk) = ipordl 659d714148SKenneth E. Jansen lcblk(5,nelblk) = nenl 669d714148SKenneth E. Jansen lcblk(6,nelblk) = nfacel 679d714148SKenneth E. Jansen lcblk(7,nelblk) = mattyp 689d714148SKenneth E. Jansen lcblk(8,nelblk) = ndofl 699d714148SKenneth E. Jansen lcblk(9,nelblk) = nsymdl 709d714148SKenneth E. Jansen lcblk(10,nelblk) = nshl ! # of shape functions per elt 719d714148SKenneth E. Jansenc 729d714148SKenneth E. Jansenc.... allocate memory for stack arrays 739d714148SKenneth E. Jansenc 749d714148SKenneth E. Jansen allocate (mmat(nelblk)%p(npro)) 759d714148SKenneth E. Jansenc 769d714148SKenneth E. Jansen allocate (mien(nelblk)%p(npro,nshl)) 779d714148SKenneth E. Jansen allocate (mxmudmi(nelblk)%p(npro,maxsh)) 78*0f541e5dSKenneth E. Jansen if(usingpetsc.eq.0) then 79*0f541e5dSKenneth E. Jansen allocate (mienG(nelblk)%p(1,1)) 80*0f541e5dSKenneth E. Jansen else 81*0f541e5dSKenneth E. Jansen allocate (mienG(nelblk)%p(npro,nshl)) 82*0f541e5dSKenneth E. Jansen endif 83*0f541e5dSKenneth E. Jansen ! note mienG will be passed to gensav but nothing filled if not 84*0f541e5dSKenneth E. Jansen ! using PETSc so this is safe 859d714148SKenneth E. Jansenc 869d714148SKenneth E. Jansenc.... save the element block 879d714148SKenneth E. Jansenc 889d714148SKenneth E. Jansen n1=n 899d714148SKenneth E. Jansen n2=n+npro-1 909d714148SKenneth E. Jansen mater=1 ! all one material for now 919d714148SKenneth E. Jansen call gensav (ientp(n1:n2,1:nshl), 929d714148SKenneth E. Jansen & mater, mien(nelblk)%p, 93*0f541e5dSKenneth E. Jansen & mienG(nelblk)%p, 949d714148SKenneth E. Jansen & mmat(nelblk)%p) 959d714148SKenneth E. Jansen iel=iel+npro 969d714148SKenneth E. Jansen enddo 979d714148SKenneth E. Jansen deallocate(ientp) 989d714148SKenneth E. Jansen enddo 999d714148SKenneth E. Jansen lcblk(1,nelblk+1) = iel 1009d714148SKenneth E. Jansenc 1019d714148SKenneth E. Jansenc.... return 1029d714148SKenneth E. Jansenc 103*0f541e5dSKenneth E. Jansen 1049d714148SKenneth E. Jansen return 1059d714148SKenneth E. Jansenc 1069d714148SKenneth E. Jansen1000 format(a80,//, 1079d714148SKenneth E. Jansen & ' N o d a l C o n n e c t i v i t y',//, 1089d714148SKenneth E. Jansen & ' Elem ',/, 1099d714148SKenneth E. Jansen & ' Number ',7x,27('Node',i2,:,2x)) 1109d714148SKenneth E. Jansen1100 format(2x,i5,6x,27i8) 1119d714148SKenneth E. Jansen end 112