The main documentation of the Overlapped_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/28/99 ! CVS Info: $Id: overlapped_vector.F90,v 9.7 2006/10/17 23:01:53 hall Exp $ module Caesar_Overlapped_Vector_Class ! Global use associations. use Caesar_Intrinsics_Module use Caesar_Trace_Class use Caesar_Communication_Class use Caesar_Base_Structure_Class use Caesar_Data_Index_Class use Caesar_Assembled_Vector_Class use Caesar_Distributed_Vector_Class use Caesar_Numbers_Module, only: zero ! Start up with everything untyped and private. implicit none private ! Public procedures. public :: Initialize, Finalize, Valid_State, Initialized public :: Assignment (=), Collect_and_Access, Collect_and_Average, & Collect_and_MAX, Collect_and_MIN, Collect_and_SUM, Gather, & Get_Values, Many_Locus, Name, One_Locus, Output, Set_Version, & Version interface Initialize module procedure Initialize_Overlapped_Vector_1 module procedure Initialize_Overlapped_Vector_2 end interface interface Finalize module procedure Finalize_Overlapped_Vector end interface interface Valid_State module procedure Valid_State_Overlapped_Vector end interface interface Assignment (=) module procedure Collect_and_SUM_DV_from_OV module procedure Gather_OV_from_DV module procedure Get_Values_Overlapped_Vector_1 module procedure Get_Values_Overlapped_Vector_2 module procedure Get_Values_Overlapped_Vector_3 module procedure Get_Values_Overlapped_Vector_4 module procedure Get_Values_Overlapped_Vector_5 module procedure Set_Version_Overlapped_Vector end interface interface Collect_and_Access module procedure Get_Values_Overlapped_Vector_1 module procedure Get_Values_Overlapped_Vector_2 module procedure Get_Values_Overlapped_Vector_3 module procedure Get_Values_Overlapped_Vector_4 module procedure Get_Values_Overlapped_Vector_5 end interface fortext([Op],[Average MAX MIN SUM],[ interface expand(Collect_and_Op) module procedure expand(Collect_and_Op_DV_from_OV) end interface ]) interface Gather module procedure Gather_OV_from_DV end interface interface Get_Values module procedure Get_Values_Overlapped_Vector_1 module procedure Get_Values_Overlapped_Vector_2 module procedure Get_Values_Overlapped_Vector_3 module procedure Get_Values_Overlapped_Vector_4 module procedure Get_Values_Overlapped_Vector_5 end interface interface Initialized module procedure Initialized_Overlapped_Vector end interface interface Many_Locus module procedure Get_Many_Locus_OV end interface interface Name module procedure Get_Name_Overlapped_Vector end interface interface One_Locus module procedure Get_One_Locus_OV end interface interface Output module procedure Output_Overlapped_Vector end interface interface Set_Version module procedure Set_Version_Overlapped_Vector end interface interface Version module procedure Get_Version_Overlapped_Vector end interface ! Public type definitions. public :: Overlapped_Vector_type type Overlapped_Vector_type ! Initialization status. type(integer) :: Initialized ! The name for this variable (especially useful in a vector of Overlapped ! 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 structures. The Many_Structure corresponds to the structure ! of the Distributed Vector that this Overlapped Vector is based on. The ! One_Structure corresponds to the way that this Overlapped Vector ! has been formed. If this Overlapped Vector were to be combined, it ! would result in a Distributed Vector with a One_Structure basis. This ! Overlapped Vector can be thought of as a "Many of One" relationship ! (e.g. Many Faces of Each Cell, or Faces_of_Cells). type(Base_Structure_type), pointer :: Many_Structure type(Base_Structure_type), pointer :: One_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 ! The Distributed Vector that this Overlapped Vector is based on. If ! this Overlapped Vector is not based on an external Distributed ! Vector, an internal Distributed Vector will be constructed and the ! Distributed_Vector variable will point to that one instead. type(Distributed_Vector_type), pointer :: DV type(Distributed_Vector_type) :: DV_Internal ! The Index that is used to modify the Distributed Vector. type(Data_Index_type), pointer :: Many_of_One_Index ! Off-PE values in the vector, that are stored locally, 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) :: Overlap_Values1 type(real,2) :: Overlap_Values2 type(real,3) :: Overlap_Values3 type(real,4) :: Overlap_Values4 ! Needed for Adaptive Angular Refinement. ! type(Ragged_Right_Real_type) :: Overlapped_ValuesRR ! The index and trace for the distributed axis of the off-PE values. type(integer,1) :: Overlap_Index type(Trace_type), pointer :: Overlap_Trace end type Overlapped_Vector_type ! Global class variables. type(integer), parameter :: Version_Increment = 16 contains
The Overlapped_Vector Class contains the following routines which are listed in separate sections:
end module Caesar_Overlapped_Vector_Class