The main documentation of the Valid_State_Solver Procedure contains additional explanation of this code listing.
function Valid_State_Solver (Solver) result(Valid)
! Use association information.
use Caesar_Numbers_Module, only: zero
! Input variables.
! Variable to be checked.
type(Solver_type), intent(in) :: Solver
! Output variables.
type(logical) :: Valid ! Logical state.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Start out true.
Valid = .true.
! Check for validity of internals.
Valid = Valid .and. Initialized(Solver)
Valid = Valid .and. Valid_State(Solver%Epsilon)
Valid = Valid .and. Valid_State(Solver%LAMG_levout)
Valid = Valid .and. Valid_State(Solver%Maximum_Iterations)
Valid = Valid .and. Valid_State(Solver%Stopping_Test)
if (.not.Valid) return
! Checks on the validity of Solver.
Valid = Valid .and. (Solver%Package == 'LAMG')
! .or. Solver%Package == 'Other Package'
Valid = Valid .and. Solver%Epsilon >= zero
Valid = Valid .and. Solver%Maximum_Iterations >= 0
Valid = Valid .and. (Solver%Stopping_Test == '||r||/||b|| < Eps')
! .or. Solver%Stopping_Test == 'Other Test'
return
end function Valid_State_Solver