mirror of
https://github.com/autc04/Retro68.git
synced 2024-06-28 11:30:19 +00:00
81 lines
2.0 KiB
Fortran
81 lines
2.0 KiB
Fortran
! { dg-do run }
|
|
!
|
|
! PR fortran/56737
|
|
!
|
|
! Contributed by Jonathan Hogg
|
|
!
|
|
module hsl_mc73_single
|
|
implicit none
|
|
integer, parameter, private :: wp = kind(0.0)
|
|
contains
|
|
subroutine mc73_fiedler(n,lirn,irn,ip,list)
|
|
integer, intent (in) :: n
|
|
integer, intent (in) :: lirn
|
|
integer, intent (in) :: irn(*)
|
|
integer, intent (in) :: ip(*)
|
|
integer, intent (out) :: list(*)
|
|
|
|
integer :: icntl(10)
|
|
|
|
call fiedler_graph(icntl)
|
|
end subroutine mc73_fiedler
|
|
|
|
subroutine mc73_order
|
|
integer :: icntl(10)
|
|
|
|
call fiedler_graph(icntl)
|
|
end subroutine mc73_order
|
|
|
|
subroutine fiedler_graph(icntl)
|
|
integer, intent (in) :: icntl(10)
|
|
|
|
real (kind = wp) :: tol
|
|
real (kind = wp) :: tol1
|
|
real (kind = wp) :: rtol
|
|
|
|
call multilevel_eig(tol,tol1,rtol,icntl)
|
|
end subroutine fiedler_graph
|
|
|
|
subroutine multilevel_eig(tol,tol1,rtol,icntl)
|
|
real (kind = wp), intent (in) :: tol,tol1,rtol
|
|
integer, intent(in) :: icntl(10)
|
|
|
|
call level_print(6,'end of level ',1)
|
|
end subroutine multilevel_eig
|
|
|
|
subroutine level_print(mp,title1,level)
|
|
character (len = *), intent(in) :: title1
|
|
integer, intent(in) :: mp,level
|
|
character(len=80) fmt
|
|
integer :: char_len1,char_len2
|
|
|
|
char_len1=len_trim(title1)
|
|
|
|
write (fmt,"('(',i4,'(1H ),6h===== ,a',i4,',i4,6h =====)')") &
|
|
level*3, char_len1
|
|
! print *, "fmt = ", fmt
|
|
! print *, "title1= ", title1
|
|
! print *, "level = ", level
|
|
write (66,fmt) title1,level
|
|
end subroutine level_print
|
|
end module hsl_mc73_single
|
|
|
|
program test
|
|
use hsl_mc73_single
|
|
implicit none
|
|
character(len=200) :: str(2)
|
|
integer, parameter :: wp = kind(0.0)
|
|
|
|
integer :: n, lirn
|
|
integer :: irn(1), ip(1), list(1)
|
|
|
|
str = ""
|
|
open (66, status='scratch')
|
|
call mc73_order
|
|
call mc73_fiedler(n,lirn,irn,ip,list)
|
|
rewind (66)
|
|
read (66, '(a)') str
|
|
close (66)
|
|
if (any (str /= " ===== end of level 1 =====")) STOP 1
|
|
end program test
|