!! File  : test_lu.f90
!!
!! Creation Date: 16.10.2015; Time: 18:21
!! Time-stamp: <2015-11-04 14:41:01 (andrzejbaran)> 
!!
!! Andrzej Baran
!! IF UMCS, ul. Radziszewskiego 10, 20-031 Lublin, PL
!! baran@kft.umcs.lublin.pl
!!
program test_lu
  USE LU
  IMPLICIT NONE

  integer, parameter :: n = 4

  real    :: A(n,n)          !real matrix (n x n)
  real    :: B(n)            !real vector (n)
  integer :: INDX(n)         !integer vector (n)
  integer :: i, j, flag, d

  data A/ &
       8.000000,  2.000000,  3.000000,  12.00000, &
       2.000000,  4.000000,  7.000000,  0.250000, &
       3.000000,  7.000000,  3.000000,  5.000000, &
       12.00000,  0.250000,  5.000000,  2.000000/ &
       B &
       /25.00000, 13.25000, 18.00000,  19.25000/

  ! Rozwiązujemy układ Ax = B.
  ! Metoda: rozkład LU macierzy A.
  ! A = zadana macierz n x n;   B = zadany wektor n;
  ! x - rozwiązanie zapisane na wyjsciu w B, wektor n.

  ! Rozwiązanie przykładowego układu powyższych równań:
  ! X1=  1.000000,  X2=  1.000000,  X3=  1.000000,  X4=  1.000000

  ! dekompozycja LU
  call LUDCMP(A,n,INDX,D,flag)

  ! podstawienia
  if (flag.eq.0) then
     call LUBKSB(A,n,INDX,B)
  endif

  ! Wydruk wyników
  if (flag.eq.1) then
     write(*,*) 'Macierz jest osobliwa!'
  else
     write(*,*) "Rozwiązanie:"
     do i=1, n 
        write(*,200) i,B(i) 
     end do
  end if

200 format('  X',I1,' = ',F9.6)

END program test_lu
