The main documentation of the Set_Solver_Variable Procedure contains additional explanation of this code listing.
subroutine Set_Solver_Variable (Solver, Variable, Real_Value, &
Integer_Value, Character_Value, &
Logical_Value)
! Input variables.
type(character,*), intent(in) :: Variable ! Variable name.
! Variable value.
type(character,*), intent(in), optional :: Character_Value
type(real), intent(in), optional :: Real_Value
type(integer), intent(in), optional :: Integer_Value
type(logical), intent(in), optional :: Logical_Value
! Input/Output variables.
type(Solver_type), intent(inout) :: Solver ! Solver to be set.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(Solver),5) ! Solver is valid.
! Set Solver variables.
if (Variable == 'Epsilon' .and. PRESENT(Real_Value)) then
Solver%Epsilon = Real_Value
else if (Variable == 'Maximum_Iterations' .and. &
PRESENT(Integer_Value)) then
Solver%Maximum_Iterations = Integer_Value
else if (Variable == 'Stopping_Test' .and. PRESENT(Character_Value)) then
Solver%Stopping_Test = Character_Value
! Set LAMG variables.
else if (Variable == 'LAMG_levout' .and. PRESENT(Integer_Value)) then
Solver%LAMG_levout = Integer_Value
! Error check.
else
! No variable match found.
VERIFY(.false.,0)
end if
! Verify guarantees.
VERIFY(Valid_State(Solver),5) ! Solver is valid.
return
end subroutine Set_Solver_Variable