The main documentation of the Distributed_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: 10/18/99 ! CVS Info: $Id: distributed_vector.F90,v 5.5 2006/10/17 23:01:53 hall Exp $ module Caesar_Distributed_Vector_Class ! Global use associations. use Caesar_Intrinsics_Module use Caesar_Communication_Class use Caesar_Base_Structure_Class use Caesar_Assembled_Vector_Class ! Start up with everything untyped and private. implicit none private ! Public procedures. public :: Initialize, Finalize, Valid_State, Initialized, Assignment (=) public :: Get_Values, Locus, Name, Output, Set_Values, & Set_Version, Version interface Initialize module procedure Initialize_Distributed_Vector end interface interface Finalize module procedure Finalize_Distributed_Vector end interface interface Valid_State module procedure Valid_State_Distributed_Vector end interface interface Initialized module procedure Initialized_Distributed_Vector end interface interface Assemble module procedure Assemble_AV_from_DV end interface interface Assignment (=) module procedure Assemble_AV_from_DV module procedure Distribute_AV_to_DV module procedure Get_Values_Distributed_Vector_1 module procedure Get_Values_Distributed_Vector_2 module procedure Get_Values_Distributed_Vector_3 module procedure Get_Values_Distributed_Vector_4 module procedure Set_Values_Distributed_Vector_1 module procedure Set_Values_Distributed_Vector_2 module procedure Set_Values_Distributed_Vector_3 module procedure Set_Values_Distributed_Vector_4 module procedure Set_Version_Distributed_Vector end interface interface Distribute module procedure Distribute_AV_to_DV end interface interface Get_Values module procedure Get_Values_Distributed_Vector_1 module procedure Get_Values_Distributed_Vector_2 module procedure Get_Values_Distributed_Vector_3 module procedure Get_Values_Distributed_Vector_4 end interface interface Locus module procedure Get_Locus_Distributed_Vector end interface interface Name module procedure Get_Name_Distributed_Vector end interface interface Output module procedure Output_Distributed_Vector end interface interface Set_Version module procedure Set_Version_Distributed_Vector end interface interface Set_Values module procedure Set_Values_Distributed_Vector_1 module procedure Set_Values_Distributed_Vector_2 module procedure Set_Values_Distributed_Vector_3 module procedure Set_Values_Distributed_Vector_4 end interface interface Version module procedure Get_Version_Distributed_Vector end interface ! Public type definitions. public :: Distributed_Vector_type type Distributed_Vector_type ! Initialization flag. type(integer) :: Initialized ! The name for this variable (especially useful in a vector of Distributed ! Vectors). type(character,name_length) :: Name ! Version number which is incremented every time the vector is modified, ! or is synced with the version number of a data structure that it ! depends on when it is updated. type(integer) :: Version ! Basic data structure for the axis that is spread over the processors. type(Base_Structure_type), pointer :: Structure ! The number of dimensions that the "vector" has, including the dimension ! that is spread over the processors. "Ragged_Right" vectors are signified ! by a Dimensionality of -1. type(integer) :: Dimensionality ! The extents of the dimensions that the "vector" has, including ! the dimension that is spread over the processors, which is last. type(integer,1) :: Dimensions ! Total number of values in the entire vector (including all PEs). type(integer) :: NValues_Total ! Number of values on this PE. type(integer) :: NValues_PE ! A vector containing the number of values on each PE. type(integer,1) :: NValues_Vector ! Values in the vector, with a different length on each PE. Values may ! have either 1, 2, 3, or 4 dimensions, or be a ragged right array. The ! last dimension is always the dimension that is spread across the ! processors. Only one of the following variables will be allocated for ! a given object. type(real,1) :: Values1 type(real,2) :: Values2 type(real,3) :: Values3 type(real,4) :: Values4 ! Needed for Adaptive Angular Refinement. ! type(Ragged_Right_Real_type) :: ValuesRR end type Distributed_Vector_type ! Global class variables. type(integer), parameter :: Version_Increment = 4 ! Not yet implemented: ! ! call Combine_DV_from_BNA (Distributed_Vector, Bare_Naked_Array) --> = (assume SUM) ! (May not be able to make assignment interface due to conflict with BNV accesses.) ! ! Bare_Naked_Array = Gather_Collect_Access (Distributed_Vector, One_Structure, & ! Many_of_One_Index) contains
The Distributed_Vector Class contains the following routines which are listed in separate sections:
end module Caesar_Distributed_Vector_Class