17 integer(kind=kint),
parameter:: ORDERING_DEFAULT = 0
18 integer(kind=kint),
parameter:: ORDERING_QMD = 1
19 integer(kind=kint),
parameter:: ORDERING_METIS = 2
20 integer(kind=kint),
parameter:: ORDERING_RCM = 3
21 integer(kind=kint),
parameter:: ORDERING_NMAX = 3
23 integer(kind=kint),
parameter:: ORDERING_DEBUG = 0
36 integer(kind=kint),
intent(in):: neqns
37 integer(kind=kint),
intent(in):: nttbr
38 integer(kind=kint),
intent(in):: adj0(:)
39 integer(kind=kint),
intent(in):: xadj(:)
40 integer(kind=kint),
intent(in):: opt
41 integer(kind=kint),
intent(in):: loglevel
42 integer(kind=kint),
intent(out):: perm(:)
43 integer(kind=kint),
intent(out):: invp(:)
45 integer(kind=kint):: ordering
47 if (ordering < 0 .or. ordering > ordering_nmax)
then
48 stop
"ERROR ordering option for direct solver out of range"
50 if (ordering == ordering_default)
then
51 #ifdef HECMW_WITH_METIS
52 ordering = ordering_metis
54 ordering = ordering_qmd
57 select case (ordering)
59 if (loglevel > 0)
write(*,*)
'Ordering method: QMD'
62 if (loglevel > 0)
write(*,*)
'Ordering method: METIS_NodeND'
65 if (loglevel > 0)
write(*,*)
'Ordering method: RCM'
68 if (ordering_debug > 0)
then
70 call write_perm(neqns, perm, invp)
76 integer(kind=kint),
intent(in) :: N
77 integer(kind=kint),
intent(in) :: index(:)
78 integer(kind=kint),
intent(in) :: item(:)
79 integer(kind=kint),
intent(in) :: perm(:), iperm(:)
80 integer(kind=kint),
parameter :: F_ORG = 901
81 integer(kind=kint),
parameter :: F_NEW = 902
82 integer(kind=kint) :: i, j, irow, jcol
83 open(f_org, file=
'nzprof_org.txt', status=
'replace')
86 do j = index(i), index(i+1)-1
88 write(f_org,*) irow, jcol
92 open(f_new, file=
'nzprof_new.txt', status=
'replace')
95 do j = index(i), index(i+1)-1
97 write(f_new,*) irow, iperm(jcol)
103 subroutine write_perm(N, perm, iperm)
105 integer(kind=kint),
intent(in) :: N
106 integer(kind=kint),
intent(in) :: perm(:), iperm(:)
107 integer(kind=kint),
parameter :: F_PERM = 903
108 integer(kind=kint) :: i
109 open(f_perm, file=
'perm_iperm.txt', status=
'replace')
111 write(f_perm,*) perm(i), iperm(i)
114 end subroutine write_perm