D.4 Data_Index Class Code Listing

The main documentation of the Data_Index 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: 09/15/99
! CVS Info:   $Id: data_index.F90,v 8.4 2006/10/17 23:01:53 hall Exp $

module Caesar_Data_Index_Class

  ! Global use associations.

  use Caesar_Intrinsics_Module
  use Caesar_Trace_Class
  use Caesar_Communication_Class
  use Caesar_Base_Structure_Class
  use Caesar_Numbers_Module, only: zero

  ! Start up with everything untyped and private.

  implicit none

  ! Public procedures.

  public :: Initialize, Finalize, Valid_State, Initialized
  public :: Assignment (=), Get_Values, Initialize_Shell_Partition, Output

  interface Initialize
    module procedure Initialize_Data_Index
  end interface

  interface Finalize
    module procedure Finalize_Data_Index
  end interface

  interface Valid_State
    module procedure Valid_State_Data_Index
  end interface

  interface Initialized
    module procedure Initialized_Data_Index
  end interface

  interface Assignment (=)
    module procedure Get_Values_Data_Index_1
    module procedure Get_Values_Data_Index_2
  end interface

  interface Get_Values
    module procedure Get_Values_Data_Index_1
    module procedure Get_Values_Data_Index_2
  end interface

  interface Output
    module procedure Output_Data_Index
  end interface

  ! Public type definitions.

  public :: Data_Index_type

  type Data_Index_type

    ! Initialization flag.

    type(integer) :: Initialized

    ! Basic data structures. The Many_Structure corresponds to the columns in
    ! the index array. The One_Structure corresponds to the rows in the index
    ! array. The index array can be thought of as a "Many of One" relationship
    ! (e.g. Many Faces of Each Cell, or Faces_of_Cells), with each row of the
    ! array signifying all the "Many" items that correspond to that "One" row.

    type(Base_Structure_type), pointer :: Many_Structure
    type(Base_Structure_type), pointer :: One_Structure

    ! The number of dimensions that the index has. "Ragged_Right" indices
    ! are signified by a Dimensionality of -1, and are equivalent to a
    ! Dimensionality of 2 where the number of columns per row varies.

    type(integer) :: Dimensionality

    ! The index values, which are modified: 1. to reflect off-PE locations
    ! with a negative number corresponding to the location in Off_PE_Index
    ! of the original value; and 2. to have a local numbering instead of a
    ! global numbering.

    type(integer,1) :: Index1
    type(integer,2) :: Index2
    ! Needed for polyhedral "Faces of Cells", "Nodes of Faces".
    ! type(Ragged_Integer_type)  :: IndexRR

    ! The trace for the communication associated with the index.

    type(Trace_type) :: Trace

    ! The values of the index which are not local to this PE.

    type(integer,1) :: Off_PE_Index

    ! The number of Off-PE values.

    type(integer) :: NOff_PE

    ! The trace for the communication associated with the Off_PE_Index.

    type(Trace_type) :: Off_PE_Trace

  end type Data_Index_type


The Data_Index Class contains the following routines which are listed in separate sections:

* Initialize_Data_Index
* Finalize_Data_Index
* Valid_State_Data_Index
* Initialized_Data_Index
* Generate_Shell_Partition
* Get_Values_Data_Index
* Initialize_Shell_Partition
* Output_Data_Index

end module Caesar_Data_Index_Class

Michael L. Hall