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 |