The main documentation of the Valid_State_Communication Procedure contains additional explanation of this code listing.
function Valid_State_Communication (Communication) result(Valid)
! Input variable.
! Place holder to allow generic procedure calls -- real data associated
! with the communication is stored in global class variables for easy
! access.
type(Communication_type), intent(in) :: Communication
! Output variables.
type(logical) :: Valid ! Logical state.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Start out true.
Valid = .true.
! Must be either serial or parallel.
Valid = Valid .and. (Parallel .neqv. Serial)
! Limits on this_PE.
Valid = Valid .and. (this_PE .InInterval. (/ 1, NPEs /) )
! Limits on IO_PE.
Valid = Valid .and. (IO_PE .InInterval. (/ 1, NPEs /) )
Valid = Valid .and. ((IO_PE == this_PE) .eqv. this_is_IO_PE)
Valid = Valid .and. ((delta_PE_IO_PE == 1) .eqv. this_is_IO_PE)
! Serial-only checks.
if (Serial) then
Valid = Valid .and. NPEs == 1
Valid = Valid .and. this_PE == 1
Valid = Valid .and. IO_PE == 1
Valid = Valid .and. this_is_IO_PE
Valid = Valid .and. Parallel_Library == 'None'
end if
return
end function Valid_State_Communication