The main documentation of the Output_Ortho_Diffusion Procedure contains additional explanation of this code listing.
subroutine Output_Ortho_Diffusion (Diff_Term, First, Last, Unit, Indent, &
status)
! Input variables.
! Variable to be output.
type(Ortho_Diffusion_type), intent(inout) :: Diff_Term
type(integer), intent(in), optional :: First ! Extents of value data
type(integer), intent(in), optional :: Last ! to be output.
type(integer), intent(in), optional :: Unit ! Output unit.
type(integer), optional :: Indent ! Indentation.
! Output variable.
type(Status_type), intent(out), optional :: status ! Exit status.
! Internal variables.
type(integer) :: A_First ! Actual first value.
type(integer) :: A_Last ! Actual last value.
type(integer) :: A_Unit ! Actual output unit.
type(integer) :: A_Indent ! Actual indentation.
type(character,80) :: Blanks ! A line of blanks.
type(Mathematic_Vector_type) :: Coefficient_MV ! Temp MV for Coefficient.
type(Mathematic_Vector_type) :: Phi_MV ! Temp MV for Phi.
type(Status_type), dimension(2) :: allocate_status ! Allocation Status.
type(Status_type) :: consolidated_status ! Consolidated Status.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(Diff_Term),5) ! Diff_Term is valid.
! Set unit number.
if (PRESENT(Unit)) then
A_Unit = Unit
else
A_Unit = 6
end if
! Set indentation.
if (PRESENT(Indent)) then
A_Indent = Indent
else
A_Indent = 0
end if
Blanks = ' '
! Set up local limits in terms of global limits.
if (PRESENT(First)) then
A_First = First
else
A_First = 1
end if
if (PRESENT(Last)) then
A_Last = Last
else
A_Last = Length_Total(Diff_Term%Structure)
end if
! Allocations and initializations.
call Initialize (allocate_status)
call Initialize (consolidated_status)
! Output Identification Info.
if (this_is_IO_PE) then
write (A_Unit,100) Blanks(1:A_Indent), 'Ortho_Diffusion Information:'
write (A_Unit,101) Blanks(1:A_Indent+2), 'Name = ', &
TRIM(Diff_Term%Name)
write (A_Unit,102) Blanks(1:A_Indent+2), 'Initialized =', &
Initialized(Diff_Term)
write (A_Unit,101) Blanks(1:A_Indent+2), 'Locus = ', &
TRIM(Diff_Term%Locus)
write (A_Unit,103) Blanks(1:A_Indent+2), 'Extrapolation = ', &
Diff_Term%Extrapolation
end if
! Output internal structure info.
call Output (Diff_Term%Structure, A_Unit, 'Ortho_Diffusion Locus', &
A_Indent+2)
call Initialize (Coefficient_MV, Diff_Term%Structure, &
'Coefficient as an MV', allocate_status(1))
Coefficient_MV = Diff_Term%Coefficient
call Output (Coefficient_MV, A_First, A_Last, A_Unit, A_Indent+2)
call Finalize (Coefficient_MV)
call Initialize (Phi_MV, Diff_Term%Structure, &
'Phi as an MV', allocate_status(2))
Phi_MV = Diff_Term%Phi
call Output (Phi_MV, A_First, A_Last, A_Unit, A_Indent+2)
call Finalize (Phi_MV)
! Process status variables.
consolidated_status = allocate_status
if (PRESENT(status)) then
WARN_IF(Error(consolidated_status), 5)
status = consolidated_status
else
VERIFY(Normal(consolidated_status), 5)
end if
call Finalize (consolidated_status)
call Finalize (allocate_status)
! Format statements.
100 format (/, 2a, /)
101 format (3a)
102 format (2a, l2)
103 format (2a, 1p, e13.5e3)
! Verify guarantees - none.
return
end subroutine Output_Ortho_Diffusion