The main documentation of the Collected_Array 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: 01/21/00
! CVS Info: $Id: collected_array.F90,v 10.8 2006/10/17 23:01:53 hall Exp $
module Caesar_Collected_Array_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_Overlapped_Vector_Class
! Start up with everything untyped and private.
implicit none
private
! Public procedures.
public :: Initialize, Finalize, Valid_State, Initialized
public :: Assignment (=), Collect, Combine_with_Average, Combine_with_MAX, &
Combine_with_MIN, Combine_with_SUM, Gather, Gather_and_Collect, &
Get_Values, Many_Locus, Name, One_Locus, Output, Set_Values, &
Set_Version, Version
interface Initialize
module procedure Initialize_Collected_Array_1
module procedure Initialize_Collected_Array_2
end interface
interface Finalize
module procedure Finalize_Collected_Array
end interface
interface Valid_State
module procedure Valid_State_Collected_Array
end interface
interface Assignment (=)
module procedure Collect_CA_from_OV
module procedure Gather_and_Collect_CA_from_DV
module procedure Get_Values_Collected_Array_1
module procedure Get_Values_Collected_Array_2
module procedure Get_Values_Collected_Array_3
module procedure Get_Values_Collected_Array_4
module procedure Get_Values_Collected_Array_5
module procedure Set_Values_Collected_Array_1
module procedure Set_Values_Collected_Array_2
module procedure Set_Values_Collected_Array_3
module procedure Set_Values_Collected_Array_4
module procedure Set_Values_Collected_Array_5
module procedure Set_Version_Collected_Array
module procedure Combine_with_SUM_DV_from_CA
end interface
interface Collect
module procedure Collect_CA_from_OV
end interface
fortext([Op],[Average MAX MIN SUM],[
interface expand(Combine_with_Op)
module procedure expand(Combine_with_Op_DV_from_CA)
end interface
])
interface Gather
module procedure Gather_and_Collect_CA_from_DV
end interface
interface Gather_and_Collect
module procedure Gather_and_Collect_CA_from_DV
end interface
interface Get_Values
module procedure Get_Values_Collected_Array_1
module procedure Get_Values_Collected_Array_2
module procedure Get_Values_Collected_Array_3
module procedure Get_Values_Collected_Array_4
module procedure Get_Values_Collected_Array_5
end interface
interface Initialized
module procedure Initialized_Collected_Array
end interface
interface Many_Locus
module procedure Get_Many_Locus_CA
end interface
interface Name
module procedure Get_Name_Collected_Array
end interface
interface One_Locus
module procedure Get_One_Locus_CA
end interface
interface Output
module procedure Output_Collected_Array
end interface
interface Set_Values
module procedure Set_Values_Collected_Array_1
module procedure Set_Values_Collected_Array_2
module procedure Set_Values_Collected_Array_3
module procedure Set_Values_Collected_Array_4
module procedure Set_Values_Collected_Array_5
end interface
interface Set_Version
module procedure Set_Version_Collected_Array
end interface
interface Version
module procedure Get_Version_Collected_Array
end interface
! Public type definitions.
public :: Collected_Array_type
type Collected_Array_type
! Initialization flag.
type(integer) :: Initialized
! The name for this variable (especially useful in a vector of Collected
! Arrays).
type(character,name_length) :: Name
! Version number which is incremented every time the array 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 Collected Array is based on. The
! One_Structure corresponds to the way that this Collected Array
! has been formed. If this Collected Array were to be combined, it
! would result in a Distributed Vector with a One_Structure basis. This
! Collected Array 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 "array" has, including the dimension
! that is spread over the processors (the One_Axis), but not including
! the Many_Axis, if it is present. "Ragged_Right" vectors are signified
! by a Dimensionality of -1. Note that the Collected Array will have the
! same Dimensionality as the Distributed Vector it is based on and the
! Distributed Vector it can be combined to form, even though in reality
! it may have an extra dimension. The "Actual Dimensionality", which
! potentially includes the Many_Axis, is given by A_Dimensionality.
type(integer) :: Dimensionality
type(integer) :: A_Dimensionality
! The extents of the dimensions that the "array" has, including
! the dimensions for the One_Axis and the Many_Axis (if present).
type(integer,1) :: Dimensions
! The Index that is used to translate between the Distributed Vectors.
type(Data_Index_type), pointer :: Many_of_One_Index
! Values in the array, that are stored locally, with a different
! length on each PE. Values may have either 1, 2, 3, 4, or 5 dimensions,
! or be a ragged right array. The last dimension is the dimension
! that is spread across the processors, if the Many_of_One_Index is a
! vector index. Otherwise, the penultimate axis will be spread across the
! processors. The form of the Values array is:
!
! Values( [dim1, [dim2, [dim3,]]] One_Axis [, Many_Axis] )
!
! 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
type(real,5) :: Values5
! Needed for Adaptive Angular Refinement.
! type(Ragged_Right_Real_type) :: ValuesRR
end type Collected_Array_type
! Global class variables.
type(integer), parameter :: Version_Increment = 64
contains
The Collected_Array Class contains the following routines which are listed in separate sections:
end module Caesar_Collected_Array_Class