1*59599516SKenneth E. Jansen subroutine genadj (colm, rowp, icnt ) 2*59599516SKenneth E. Jansenc 3*59599516SKenneth E. Jansen use pointer_data 4*59599516SKenneth E. Jansenc 5*59599516SKenneth E. Jansen include "common.h" 6*59599516SKenneth E. Jansenc 7*59599516SKenneth E. Jansen integer rowp(nshg*nnz), colm(nshg+1) 8*59599516SKenneth E. Jansen integer adjcnt(nshg), row_fill_list(nshg,15*nnz), mloc(1) 9*59599516SKenneth E. Jansenc change ^ if overflow 10*59599516SKenneth E. Jansenc also change overflow check in asadj TWICE 11*59599516SKenneth E. Jansen integer tmprdim(1), nnonzero 12*59599516SKenneth E. Jansen real*8, allocatable, dimension(:) :: tmpr 13*59599516SKenneth E. Jansen 14*59599516SKenneth E. Jansen adjcnt=0 15*59599516SKenneth E. Jansen 16*59599516SKenneth E. Jansen do iblk = 1, nelblk 17*59599516SKenneth E. Jansenc 18*59599516SKenneth E. Jansenc.... set up the parameters 19*59599516SKenneth E. Jansenc 20*59599516SKenneth E. Jansen iel = lcblk(1,iblk) 21*59599516SKenneth E. Jansen lelCat = lcblk(2,iblk) 22*59599516SKenneth E. Jansen lcsyst = lcblk(3,iblk) 23*59599516SKenneth E. Jansen iorder = lcblk(4,iblk) 24*59599516SKenneth E. Jansen nenl = lcblk(5,iblk) ! no. of vertices per element 25*59599516SKenneth E. Jansen nshl = lcblk(10,iblk) 26*59599516SKenneth E. Jansen npro = lcblk(1,iblk+1) - iel 27*59599516SKenneth E. Jansen 28*59599516SKenneth E. Jansenc 29*59599516SKenneth E. Jansenc.... compute sparse matrix data structures 30*59599516SKenneth E. Jansenc 31*59599516SKenneth E. Jansen call Asadj (row_fill_list, 32*59599516SKenneth E. Jansen & mien(iblk)%p, adjcnt ) 33*59599516SKenneth E. Jansen 34*59599516SKenneth E. Jansen enddo 35*59599516SKenneth E. Jansen 36*59599516SKenneth E. Jansen call sumgatInt ( adjcnt, nshg, nnonzero) 37*59599516SKenneth E. Jansen if ( myrank .eq. master) then 38*59599516SKenneth E. Jansen write (*,*) 'Number of global nonzeros ',nnonzero 39*59599516SKenneth E. Jansen endif 40*59599516SKenneth E. Jansen 41*59599516SKenneth E. Jansenc 42*59599516SKenneth E. Jansenc build the colm array 43*59599516SKenneth E. Jansenc 44*59599516SKenneth E. Jansen colm(1)=1 45*59599516SKenneth E. Jansen do i=1,nshg 46*59599516SKenneth E. Jansen colm(i+1)=colm(i)+adjcnt(i) 47*59599516SKenneth E. Jansen enddo 48*59599516SKenneth E. Jansenc 49*59599516SKenneth E. Jansenc sort the rowp into increasing order 50*59599516SKenneth E. Jansenc 51*59599516SKenneth E. Jansen ibig=10*nshg 52*59599516SKenneth E. Jansen icnt=0 53*59599516SKenneth E. Jansen tmprdim=maxval(adjcnt) 54*59599516SKenneth E. Jansen allocate (tmpr(tmprdim(1))) 55*59599516SKenneth E. Jansen do i=1,nshg 56*59599516SKenneth E. Jansen ncol=adjcnt(i) 57*59599516SKenneth E. Jansen tmpr(1:ncol)=row_fill_list(i,1:ncol) 58*59599516SKenneth E. Jansen do j=1,ncol 59*59599516SKenneth E. Jansen icnt=icnt+1 60*59599516SKenneth E. Jansen imin=minval(tmpr(1:ncol)) 61*59599516SKenneth E. Jansen mloc=minloc(tmpr(1:ncol)) 62*59599516SKenneth E. Jansen rowp(icnt)=imin 63*59599516SKenneth E. Jansen tmpr(mloc(1))=ibig 64*59599516SKenneth E. Jansen enddo 65*59599516SKenneth E. Jansen enddo 66*59599516SKenneth E. Jansen deallocate(tmpr) 67*59599516SKenneth E. Jansenc maxfill=tmprdim(1) 68*59599516SKenneth E. Jansenc write(*,*) 'maxfill=',maxfill 69*59599516SKenneth E. Jansen nnza=icnt/nshg +1 70*59599516SKenneth E. Jansen if(icnt.gt.nnz*nshg) then 71*59599516SKenneth E. Jansen write(*,*) 'increase nnz in genmat to',nnza 72*59599516SKenneth E. Jansen stop 73*59599516SKenneth E. Jansenc else 74*59599516SKenneth E. Jansenc write(*,*) 'nnz ok nnz=',nnz,' actually needed',nnza 75*59599516SKenneth E. Jansenc write(*,*) myrank,' is my rank and my nnz_tot is: ',icnt 76*59599516SKenneth E. Jansen endif 77*59599516SKenneth E. Jansen return 78*59599516SKenneth E. Jansen end 79*59599516SKenneth E. Jansen 80*59599516SKenneth E. Jansen 81*59599516SKenneth E. Jansen 82*59599516SKenneth E. Jansen 83*59599516SKenneth E. Jansen 84*59599516SKenneth E. Jansen 85*59599516SKenneth E. Jansen 86*59599516SKenneth E. Jansen 87*59599516SKenneth E. Jansen 88