This lightly commented program performs a unit test on the Solver Class.
program Unit_Test
use Caesar_Data_Structures_Module
use Caesar_Mathematic_Vector_Class
use Caesar_ELL_Matrix_Class
use Caesar_Solver_Class
implicit none
type(Communication_type) :: Comm
type(Base_Structure_type) :: Row_Structure, Column_Structure
type(Status_type) :: status
type(character,name_length) :: MV_Name
type(integer) :: NRows
type(ELL_Matrix_type) :: A_ELLM
type(Mathematic_Vector_type) :: X_MV, B_MV, Residual_MV, Solution_MV
type(Solver_type) :: Solver
! Initializations.
call Initialize (Comm)
call Output (Comm)
call Initialize (status)
call Initialize (Solver, 'LAMG')
! Check state of the Solver.
VERIFY(Valid_State(Solver),0)
! Read in a linear system (this initializes and sets A_ELLM,
! B_MV, X_MV, Row_Structure and
! Column_Structure).
if (this_is_IO_PE) then
open (unit=8, &
File='source/class/linear_algebra/battery/Augustus_Prob0_MH_K2_8x8x8.hb')
end if
call Read_Harwell_Boeing (A_ELLM, RHS_MV=B_MV, Solution_MV=X_MV, &
Row_Structure=Row_Structure, &
Column_Structure=Column_Structure, Unit=8, &
status=status)
NRows = NRows_Total(A_ELLM)
call Output (A_ELLM, MAX(1, NRows/10), MIN(NRows, NRows/10+50))
call Output (X_MV, MAX(1, NRows/10), MIN(NRows, NRows/10+50))
call Output (B_MV, MAX(1, NRows/10), MIN(NRows, NRows/10+50))
! Initializations.
MV_Name = 'Calculated Solution'
call Initialize (Solution_MV, Column_Structure, MV_Name)
MV_Name = 'Calculated Residual'
call Initialize (Residual_MV, Row_Structure, MV_Name)
! Solve the system.
call Solve (Solver, A_ELLM, Solution_MV, B_MV)
call Output (Solution_MV, MAX(1, NRows/10), MIN(NRows, NRows/10+50))
! Calculate residual.
call Residual (Residual_MV, A_ELLM, Solution_MV, B_MV)
call Output (Residual_MV, MAX(1, NRows/10), MIN(NRows, NRows/10+50))
! Check state of the Solver.
VERIFY(Valid_State(Solver),0)
! Finalize objects and communications.
call Finalize (Solver)
call Finalize (A_ELLM)
call Finalize (X_MV)
call Finalize (B_MV)
call Finalize (Row_Structure)
call Finalize (Column_Structure)
call Finalize (Solution_MV)
call Finalize (Residual_MV)
call Finalize (Comm)
end