The main documentation of the Duplicate_Mathematic_Vector Procedure contains additional explanation of this code listing.
subroutine Duplicate_Mathematic_Vector (MV_duplicate, MV_source, status)
! Input variables.
type(Mathematic_Vector_type), intent(in) :: MV_source
! Output variables.
! Mathematic_Vector to be initialized.
type(Mathematic_Vector_type), intent(out) :: MV_duplicate
type(Status_type), intent(out), optional :: status ! Exit status.
! Internal variables.
type(Status_type) :: A_status ! Actual status.
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! Verify requirements.
VERIFY(Valid_State(MV_source),5) ! MV_source is valid.
! Allocate MV_duplicate to be like MV_source.
call Initialize (A_status)
call Initialize (MV_duplicate, MV_source%Structure, MV_source%Name, &
A_status)
! Process status variable.
if (PRESENT(status)) then
WARN_IF(Error(A_status), 5)
status = A_status
else
VERIFY(Normal(A_status), 5)
end if
call Finalize (A_status)
! Copy internals from source mathematical vector.
MV_duplicate%Average = MV_source%Average
MV_duplicate%Average_is_Updated = MV_source%Average_is_Updated
MV_duplicate%Infinity_Norm = MV_source%Infinity_Norm
MV_duplicate%Infinity_Norm_is_Updated = MV_source%Infinity_Norm_is_Updated
MV_duplicate%Maximum = MV_source%Maximum
MV_duplicate%Maximum_is_Updated = MV_source%Maximum_is_Updated
MV_duplicate%Minimum = MV_source%Minimum
MV_duplicate%Minimum_is_Updated = MV_source%Minimum_is_Updated
MV_duplicate%One_Norm = MV_source%One_Norm
MV_duplicate%One_Norm_is_Updated = MV_source%One_Norm_is_Updated
MV_duplicate%P_Norm = MV_source%P_Norm
MV_duplicate%P_Norm_Exponent = MV_source%P_Norm_Exponent
MV_duplicate%P_Norm_is_Updated = MV_source%P_Norm_is_Updated
MV_duplicate%Sum = MV_source%Sum
MV_duplicate%Sum_is_Updated = MV_source%Sum_is_Updated
MV_duplicate%Two_Norm = MV_source%Two_Norm
MV_duplicate%Two_Norm_is_Updated = MV_source%Two_Norm_is_Updated
MV_duplicate%Values = MV_source%Values
! Verify guarantees.
VERIFY(Valid_State(MV_duplicate),5) ! Mathematic_Vector is now valid.
return
end subroutine Duplicate_Mathematic_Vector