The main documentation of the Mathematic_Vector Class contains additional explanation of this code listing.
!
! Author: Michael L. Hall
! P.O. Box 1663, MS-D413, LANL
! Los Alamos, NM 87545
! ph: 505-665-4312
! email: Hall@LANL.gov
!
! Created on: 12/15/02
! CVS Info: $Id: mathematic_vector.F90,v 1.36 2009/09/11 21:44:06 hall Exp $
module Caesar_Mathematic_Vector_Class
! Global use associations.
use Caesar_Data_Structures_Module
! Start up with everything untyped and private.
implicit none
private
! Public procedures.
public :: Initialize, Finalize, Valid_State, Initialized
public :: Assignment(=), Operator(.DotProduct.), Operator(.Orthogonal.)
public :: Add_Values, Average, Duplicate, First_PE, Get_Values, &
Infinity_Norm, Last_PE, Length_PE, Length_Total, Locus, Maximum, &
Mean, Minimum, Name, Norm, One_Norm, Output, P_Norm, &
Set_Not_Up_to_Date, Set_Value, Set_Values, Sum, Total, Two_Norm, &
Update_DV
interface Initialize
module procedure Initialize_Mathematic_Vector
end interface
interface Finalize
module procedure Finalize_Mathematic_Vector
end interface
interface Valid_State
module procedure Valid_State_Mathematic_Vector
end interface
interface Initialized
module procedure Initialized_Mathematic_Vector
end interface
interface Assignment(=)
module procedure Get_Values_Mathematic_Vector
module procedure Set_Values_Mathematic_Vector_A
module procedure Set_Value_Mathematic_Vector_A
end interface
interface OPERATOR (.DotProduct.)
module procedure DotProduct_Mathematic_Vector
end interface
interface OPERATOR (.Orthogonal.)
module procedure Orthogonal_Mathematic_Vector
end interface
interface Add_Values
module procedure Add_Values_Mathematic_Vector_0
module procedure Add_Values_Mathematic_Vector_1
module procedure Add_Values_Mathematic_Vector_A
end interface
fortext([Value],[Average First_PE Infinity_Norm Last_PE Length_PE
Length_Total Locus Maximum Minimum Name One_Norm
P_Norm Sum Two_Norm],[
interface Value
module procedure expand(Get_Value_MV)
end interface
])
interface DotProduct
module procedure DotProduct_Mathematic_Vector
end interface
interface Duplicate
module procedure Duplicate_Mathematic_Vector
end interface
interface Get_Values
module procedure Get_Values_Mathematic_Vector
end interface
interface Mean
module procedure Get_Average_MV
end interface
interface Norm
module procedure Get_Two_Norm_MV
end interface
interface Orthogonal
module procedure Orthogonal_Mathematic_Vector
end interface
interface Output
module procedure Output_Mathematic_Vector
end interface
interface Set_Not_Up_to_Date
module procedure Set_Not_Up_to_Date_MV
end interface
interface Set_Value
module procedure Set_Value_Mathematic_Vector_A
end interface
interface Set_Values
module procedure Set_Values_Mathematic_Vector_0
module procedure Set_Values_Mathematic_Vector_1
module procedure Set_Values_Mathematic_Vector_A
end interface
interface Total
module procedure Get_Sum_MV
end interface
interface Update_DV
module procedure Update_DV_Mathematic_Vector
end interface
! Public variable (must precede type defs where it is used).
type(integer), parameter :: Number_of_OVs_in_an_MV=4
public :: Number_of_OVs_in_an_MV
! Public type definitions.
public :: Mathematic_Vector_type
type Mathematic_Vector_type
! Initialization flag.
type(integer) :: Initialized
! The name for this variable (especially useful in a vector of
! Mathematic Vectors).
type(character,name_length) :: Name
! Basic data structure.
type(Base_Structure_type), pointer :: Structure
! Values for the Mathematic Vector.
type(real,1) :: Values
! MV dimensionality is unity.
type(integer) :: Dimensionality=1
! Distributed and Overlapped Vectors that are used for matvecs.
type(Distributed_Vector_type) :: DV
type(Overlapped_Vector_type), dimension(Number_of_OVs_in_an_MV) :: OV
! Pointers to the Data_Index for each Overlapped Vector -- cannot
! have an array of pointers in F90 (Arrgh). Note that there are four
! of these because the current value of Number_of_OVs_in_an_MV is 4.
type(Data_Index_type), pointer :: Index1, Index2, Index3, Index4
! Number used to match with a similar number for a matrix during a
! MatVec. This would be better done by using a pointered Data_Index
! in the matrix and checking association status, but that won't work
! currently in F90 -- pointered internals should only be used to point
! to things initialized elsewhere, and cannot be initialized themselves
! because they contain no internals. So, the current solution is somewhat
! of a kludge.
type(integer), dimension(Number_of_OVs_in_an_MV) :: Index_Match_Number
! Norm variables and "updated?" toggles.
type(real) :: Average, Infinity_Norm, Maximum, Minimum, One_Norm, P_Norm, &
Sum, Two_Norm
type(integer) :: P_Norm_Exponent
type(logical) :: Average_is_Updated, Infinity_Norm_is_Updated, &
Maximum_is_Updated, Minimum_is_Updated, &
One_Norm_is_Updated, DV_is_Updated, P_Norm_is_Updated, &
Sum_is_Updated, Two_Norm_is_Updated
end type Mathematic_Vector_type
contains
The Mathematic_Vector Class contains the following routines which are listed in separate sections:
end module Caesar_Mathematic_Vector_Class