main Program

Uses

  • program~~main~3~~UsesGraph program~main~3 main iso_fortran_env iso_fortran_env program~main~3->iso_fortran_env module~lsqr_kinds lsqr_kinds program~main~3->module~lsqr_kinds module~lsqr_module lsqr_module program~main~3->module~lsqr_module module~lsqr_kinds->iso_fortran_env module~lsqr_module->module~lsqr_kinds module~lsqpblas_module lsqpblas_module module~lsqr_module->module~lsqpblas_module module~lsqpblas_module->module~lsqr_kinds

Main program for EZ test.


Calls

program~~main~3~~CallsGraph program~main~3 main proc~initialize_ez lsqr_module::lsqr_solver_ez%initialize_ez program~main~3->proc~initialize_ez proc~solve_ez lsqr_module::lsqr_solver_ez%solve_ez program~main~3->proc~solve_ez proc~lsqr lsqr_module::lsqr_solver%LSQR proc~solve_ez->proc~lsqr aprod aprod proc~lsqr->aprod proc~d2norm lsqr_module::d2norm proc~lsqr->proc~d2norm proc~dcopy lsqpblas_module::dcopy proc~lsqr->proc~dcopy proc~dnrm2 lsqpblas_module::dnrm2 proc~lsqr->proc~dnrm2 proc~dscal lsqpblas_module::dscal proc~lsqr->proc~dscal

Variables

Type Attributes Name Initial
integer, parameter :: m = 3

number of rows in A matrix

integer, parameter :: n = 3

number of columns in A matrix

real(kind=wp), parameter, dimension(m) :: b = real([1, 2, 3], wp)
integer, parameter, dimension(m*n) :: icol = [1, 1, 1, 2, 2, 2, 3, 3, 3]
integer, parameter, dimension(m*n) :: irow = [1, 2, 3, 1, 2, 3, 1, 2, 3]
real(kind=wp), parameter, dimension(m*n) :: a = real([1, 4, 7, 2, 5, 88, 3, 66, 9], wp)
real(kind=wp), parameter :: damp = zero
real(kind=wp), parameter, dimension(m,1) :: b_vec = reshape(b, [m, 1])
real(kind=wp), parameter, dimension(m,n) :: a_mat = reshape(a, [3, 3])
type(lsqr_solver_ez) :: solver
real(kind=wp), dimension(n) :: x
real(kind=wp), dimension(1) :: se

not used

real(kind=wp), dimension(n,1) :: x_vec
integer :: istop

Source Code

    program main

    use lsqr_kinds
    use lsqr_module,     only: lsqr_solver_ez
    use iso_fortran_env, only: output_unit

    implicit none

    ! define a 3x3 dense system to solve:
    integer,parameter :: m = 3 !! number of rows in `A` matrix
    integer,parameter :: n = 3 !! number of columns in `A` matrix
    real(wp),dimension(m),parameter :: b = real([1,2,3],wp)
    integer,dimension(m*n),parameter :: icol = [1,1,1,2,2,2,3,3,3]
    integer,dimension(m*n),parameter :: irow = [1,2,3,1,2,3,1,2,3]
    real(wp),dimension(m*n),parameter :: a = real([1,4,7,2,5,88,3,66,9],wp)
    real(wp),parameter :: damp = zero
    real(wp),dimension(m,1),parameter :: b_vec = reshape(b,[m,1])
    real(wp),dimension(m,n),parameter :: a_mat = reshape(a,[3,3])

    type(lsqr_solver_ez) :: solver
    real(wp),dimension(n) :: x
    real(wp),dimension(1) :: se !! not used
    real(wp),dimension(n,1) :: x_vec
    integer :: istop

    call solver%initialize(m,n,a,irow,icol,&
                            itnlim = 100,&
                            nout   = output_unit)
    call solver%solve(b,damp,x,istop)

    x_vec(1:3,1) = x

    write(*,*) ''
    write(*,*) 'istop = ', istop
    write(*,*) ''
    write(*,'(1P,A,*(E16.6))') 'x       = ', x
    write(*,'(1P,A,*(E16.6))') 'A*x     = ', matmul(a_mat, x_vec)
    write(*,'(1P,A,*(E16.6))') 'A*x - b = ', matmul(a_mat, x_vec) - b_vec

    if (any(abs(matmul(a_mat, x_vec) - b_vec) > 1.0e-12)) error stop 'TEST FAILED'

    end program main