Statistics
| Branch: | Revision:

root / synthbench / euroben-dm / mod2as / check.f @ 0:839f52ef7657

History | View | Annotate | Download (1.1 kB)

1 0:839f52ef7657 louridas
      Subroutine check( ncols, nrows, nelmts, indx, rowp, outvec, ok )
2 0:839f52ef7657 louridas
! ---------------------------------------------------------------------
3 0:839f52ef7657 louridas
! --- Routine 'check' checks the solution vector 'x' in 'b = Ax'. The
4 0:839f52ef7657 louridas
!     check is possible because of the special definition of 'A' & 'b'.
5 0:839f52ef7657 louridas
! ---------------------------------------------------------------------
6 0:839f52ef7657 louridas
      Use          numerics
7 0:839f52ef7657 louridas
      Use          dist_module
8 0:839f52ef7657 louridas
      Implicit     None
9 0:839f52ef7657 louridas
10 0:839f52ef7657 louridas
      Integer   :: ncols, nrows, nelmts
11 0:839f52ef7657 louridas
      Integer   :: indx(nelmts), rowp(nrows)
12 0:839f52ef7657 louridas
      Real(l_)  :: outvec(nrows)
13 0:839f52ef7657 louridas
      Logical   :: ok
14 0:839f52ef7657 louridas
15 0:839f52ef7657 louridas
      Integer   :: i
16 0:839f52ef7657 louridas
      Real(l_)  :: eps, rowsum
17 0:839f52ef7657 louridas
! ---------------------------------------------------------------------
18 0:839f52ef7657 louridas
      eps = 2.0_l_*ncols*Epsilon( 1.0_l_ )
19 0:839f52ef7657 louridas
      Do i = 1, nrows - 1
20 0:839f52ef7657 louridas
         rowsum = Real( rowp(i+1) - rowp(i), l_ )
21 0:839f52ef7657 louridas
         ok = ok .AND. ( Abs( outvec(i) - rowsum ) <= eps )
22 0:839f52ef7657 louridas
      End Do
23 0:839f52ef7657 louridas
      rowsum = Real( nelmts - rowp(nrows) + 1, l_ )
24 0:839f52ef7657 louridas
      ok = ok .AND. ( Abs( outvec(nrows) - rowsum ) <= eps )
25 0:839f52ef7657 louridas
! ---------------------------------------------------------------------
26 0:839f52ef7657 louridas
      End Subroutine check