Advertisement
Guest User

Untitled

a guest
Mar 26th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program main
  2.   implicit none
  3. !=========================================================
  4.  
  5.     character(10) :: filename
  6.     integer       :: n, i
  7.     integer, allocatable :: Ap(:), Ai(:)
  8.     real(8), allocatable :: Ax(:), right(:), result(:)
  9.  
  10.     integer iwk
  11.     integer lfil
  12.  
  13.     real(8), allocatable :: alu(:), w(:), wk(:)
  14.     integer, allocatable :: jlu(:), ju(:), levs(:), jw(:)
  15.  
  16.     integer :: ipar(16), ierr
  17.     real(8) :: fpar(16)
  18.  
  19.     real(8) :: startpoint, finishpoint
  20.  
  21. !=========================================================
  22.  
  23.     read(*, *) filename
  24.     open(1, file=filename)
  25.  
  26.     read(1, *) n
  27.  
  28.     allocate(Ap(n + 1))
  29.     read(1,*) (Ap(i), i = 1, n + 1)
  30.  
  31.     allocate(Ai(Ap(n + 1) - 1))
  32.     read(1,*) (Ai(i), i = 1, Ap(n + 1) - 1)
  33.  
  34.     allocate(Ax(Ap(n + 1) - 1))
  35.     read(1,*) (Ax(i), i = 1, Ap(n + 1) - 1)
  36.  
  37.     allocate(right(n))
  38.     do i = 1, n
  39.         right(i) = sin(real(i, 8))
  40.     end do
  41.  
  42.     allocate(result(n))
  43.     do i = 1, n
  44.         result(i) = 0
  45.     end do
  46.  
  47. !=======================================================
  48.  
  49.     iwk = 10 * (Ap(n + 1) - 1)
  50.     lfil = 1
  51.     ierr = 0
  52.  
  53.     allocate(alu(iwk), jlu(iwk), ju(n), levs(iwk), w(n), jw(3 * n))
  54.  
  55. !========================================================
  56.  
  57.     call cpu_time(startpoint)
  58.     call iluk(n, Ax, Ai, Ap, lfil, alu, jlu, ju, levs, iwk, w, jw, ierr)
  59.     call cpu_time(finishpoint)
  60.  
  61.     if (ierr .eq. 0) then
  62.         print*, 'Preconditioner finished successfully in ', finishpoint - startpoint, ' seconds'
  63.     else
  64.         print*, 'Preconditioner failed with status: ', ierr
  65.     end if
  66.  
  67. !========================================================
  68.  
  69.     ipar(1) = 0
  70.     ipar(2) = 1
  71.     ipar(3) = 1
  72.     ipar(4) = 7 * n
  73.     ipar(5) = 10
  74.     ipar(6) = 1000
  75.     fpar(1) = 1.0E-6
  76.     fpar(2) = 1.0E-8
  77.     fpar(11) = 0.0
  78.  
  79.     allocate(wk(7 * n))
  80.  
  81.     call cpu_time(startpoint)
  82.     10  call bcg(n, right, result, ipar, fpar, wk)
  83.  
  84.     if (ipar(1).eq.1) then
  85.         call amux(n, wk(ipar(8)), wk(ipar(9)), Ax, Ai, Ap)
  86.         goto 10
  87.     else if (ipar(1).eq.2) then
  88.         call atmux(n, wk(ipar(8)), wk(ipar(9)), Ax, Ai, Ap)
  89.         goto 10
  90.     else if (ipar(1).eq.3 .or. ipar(1).eq.5) then
  91.         call lusol(n, wk(ipar(8)),wk(ipar(9)), alu, jlu, ju)
  92.         goto 10
  93.     else if (ipar(1).eq.4 .or. ipar(1).eq.6) then
  94.         call lutsol(n,wk(ipar(8)),wk(ipar(9)), alu, jlu, ju)
  95.         goto 10
  96.     else if (ipar(1).le.0) then
  97.         if (ipar(1).eq.0) then
  98.             print *, 'Iterative solver finished successfully '
  99.         else
  100.             print *, 'Iterative solver failed with status: ', ipar(1)
  101.         endif
  102.     endif
  103.     call cpu_time(finishpoint)
  104.  
  105.     print*, 'in ', finishpoint - startpoint, ' seconds'
  106.     print*, 'Iteration number: ', ipar(7)
  107.  
  108. end
  109.  
  110. real(8) function distdot(n,x,ix,y,iy)
  111.     implicit none
  112.     real(8), external :: ddot
  113.     integer n, ix, iy
  114.     real(8) x(1+(n-1)*ix), y(1+(n-1)*iy)
  115.     distdot = ddot(n, x, ix, y, iy)
  116. end function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement