xref: /phasta/phSolver/common/genadj.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
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