The main documentation of the Initialize_Mathematic_Vector Procedure contains additional explanation of this code listing.
subroutine Initialize_Mathematic_Vector (MV, Structure, Name, status) ! Use associations. use Caesar_Flags_Module, only: initialized_flag ! Use association information. use Caesar_Numbers_Module, only: zero ! Input variables. ! Base_Structure. type(Base_Structure_type), intent(in), target :: Structure type(character,*), intent(in), optional :: Name ! Variable name. ! Output variables. ! Mathematic_Vector to be initialized. type(Mathematic_Vector_type), intent(out) :: MV type(Status_type), intent(out), optional :: status ! Exit status. ! Internal variables. type(Status_type), dimension(19) :: allocate_status ! Allocation Status. type(Status_type) :: consolidated_status ! Consolidated Status. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Verify requirements. VERIFY(Valid_State(Structure),5) ! Structure is valid. ! Set up structure pointer. MV%Structure => Structure ! Allocations and initializations. call Initialize (allocate_status) call Initialize (consolidated_status) call Initialize (MV%Values, Length_PE(Structure), allocate_status(1)) ! Set up internals. if (PRESENT(Name)) MV%Name = Name call Initialize (MV%Average, allocate_status(2)) call Initialize (MV%Average_is_Updated, allocate_status(3)) call Initialize (MV%Infinity_Norm, allocate_status(4)) call Initialize (MV%Infinity_Norm_is_Updated, allocate_status(5)) call Initialize (MV%Maximum, allocate_status(6)) call Initialize (MV%Maximum_is_Updated, allocate_status(7)) call Initialize (MV%Minimum, allocate_status(8)) call Initialize (MV%Minimum_is_Updated, allocate_status(9)) call Initialize (MV%One_Norm, allocate_status(10)) call Initialize (MV%One_Norm_is_Updated, allocate_status(11)) call Initialize (MV%DV_is_Updated, allocate_status(12)) call Initialize (MV%P_Norm, allocate_status(13)) call Initialize (MV%P_Norm_Exponent, allocate_status(14)) call Initialize (MV%P_Norm_is_Updated, allocate_status(15)) call Initialize (MV%Sum, allocate_status(16)) call Initialize (MV%Sum_is_Updated, allocate_status(17)) call Initialize (MV%Two_Norm, allocate_status(18)) call Initialize (MV%Two_Norm_is_Updated, allocate_status(19)) ! Make sure that initial values are correct. MV%Average = zero MV%Average_is_Updated = .false. MV%Infinity_Norm = zero MV%Infinity_Norm_is_Updated = .false. MV%Maximum = zero MV%Maximum_is_Updated = .false. MV%Minimum = zero MV%Minimum_is_Updated = .false. MV%One_Norm = zero MV%One_Norm_is_Updated = .false. MV%DV_is_Updated = .false. MV%P_Norm = zero MV%P_Norm_Exponent = 1 MV%P_Norm_is_Updated = .false. MV%Sum = zero MV%Sum_is_Updated = .false. MV%Two_Norm = zero MV%Two_Norm_is_Updated = .false. ! 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) ! Set initialization flag. MV%Initialized = initialized_flag ! Verify guarantees. VERIFY(Valid_State(MV),5) ! Mathematic_Vector is now valid. return end subroutine Initialize_Mathematic_Vector