cell_type Derived Type

type, private :: cell_type

This is the next level up of data and represents the cell type. A cell has a unique it,ik pair and represents all the fields/field eq on the extended domain for the given it/ik


Contents

Source Code


Components

TypeVisibility AttributesNameInitial
type(rowblock_type), public, dimension(:), allocatable:: rb

These are the row blocks, currently one for each field equation

integer, public :: nrb

How many row blocks, equal to nfield

integer, public :: row_llim

The row limits, always 1 to nfield*nextend

integer, public :: row_ulim

The row limits, always 1 to nfield*nextend

integer, public, dimension(:), allocatable:: col_llim

These are the column limits for each fdq

integer, public, dimension(:), allocatable:: col_ulim

These are the column limits for each fdq

integer, public :: nrow

The number of rows and columns for each field equation.

integer, public :: ncol

The number of rows and columns for each field equation.

integer, public :: ncol_tot

The total number of columns (nfdq*ncol)

logical, public :: is_local

Does this cell have any data on this proc?

logical, public :: is_empty

Have we got any data for this cell on this proc?

logical, public :: is_all_local

Is all of this cells data on this proc?

logical, public :: ignore_boundary

Do we ignore the boundary point (column) in this cell?

complex, public, dimension(:), allocatable:: tmp_sum

Work space for field update

type(comm_type), public :: parent_sub

Sub communicator involving all processors in parent

integer, public :: ic_ind

Cell properties

integer, public :: it_ind

Cell properties

integer, public :: ik_ind

Parent properties

integer, public :: is_ind

Parent properties


Type-Bound Procedures

procedure, private :: deallocate => c_deallocate

  • private subroutine c_deallocate(self)

    Deallocate storage space

    Arguments

    Type IntentOptional AttributesName
    class(cell_type), intent(inout) :: self

procedure, private :: allocate => c_allocate

  • private subroutine c_allocate(self)

    Allocate storage space

    Arguments

    Type IntentOptional AttributesName
    class(cell_type), intent(inout) :: self

procedure, private :: debug_print => c_debug_print

  • private subroutine c_debug_print(self)

    Debug printing

    Arguments

    Type IntentOptional AttributesName
    class(cell_type), intent(in) :: self

procedure, private :: mv_mult_rb => c_mv_mult_rb

  • private subroutine c_mv_mult_rb(self, vect, ifq)

    Do matrix vector multiplication at rowblock level

    Arguments

    Type IntentOptional AttributesName
    class(cell_type), intent(inout) :: self
    complex, intent(in), dimension(self%ncol):: vect
    integer, intent(in) :: ifq

procedure, private :: get_field_update => c_get_field_update

  • private subroutine c_get_field_update(self, fq, fqa, fqp)

    Get the field update for this cells data Note still need to reduce across other cells in this supercell.

    Arguments

    Type IntentOptional AttributesName
    class(cell_type), intent(inout) :: self
    complex, intent(in), dimension(self%ncol):: fq
    complex, intent(in), dimension(self%ncol):: fqa
    complex, intent(in), dimension(self%ncol):: fqp

procedure, private :: reset => c_reset

  • private subroutine c_reset(self)

    A routine to reset the object

    Arguments

    Type IntentOptional AttributesName
    class(cell_type), intent(inout) :: self

procedure, private :: set_locality => c_set_locality

  • private subroutine c_set_locality(self)

    Set the locality of each object

    Arguments

    Type IntentOptional AttributesName
    class(cell_type), intent(inout) :: self

procedure, private :: has_row => c_has_row

  • private function c_has_row(self, irow)

    Test if a given row belongs to the current cell

    Arguments

    Type IntentOptional AttributesName
    class(cell_type), intent(in) :: self
    integer, intent(in) :: irow

    Return Value logical

Source Code

  type, private :: cell_type
     type(rowblock_type), dimension(:), allocatable :: rb !< These are the row blocks, currently one for each field equation
     integer :: nrb !< How many row blocks, equal to nfield
     !//NOTE: probably don't want these as this data should be stored by the row blocks only
     integer :: row_llim, row_ulim !< The row limits, always 1 to nfield*nextend
     integer, dimension(:), allocatable :: col_llim, col_ulim !< These are the column limits for each fdq
     !//////
     integer :: nrow, ncol !< The number of rows and columns for each field equation.
     integer :: ncol_tot !< The total number of columns (nfdq*ncol)
     logical :: is_local !< Does this cell have any data on this proc?
     logical :: is_empty !< Have we got any data for this cell on this proc?
     logical :: is_all_local !< Is all of this cells data on this proc?
     logical :: ignore_boundary !< Do we ignore the boundary point (column) in this cell?
     complex, dimension(:),allocatable :: tmp_sum !< Work space for field update
     type(comm_type) :: parent_sub !< Sub communicator involving all processors in parent
     !Cell and parent properties. Mostly for debug printing.
     integer :: ic_ind, it_ind !< Cell properties
     integer :: ik_ind, is_ind !< Parent properties
   contains
     private
     procedure :: deallocate => c_deallocate
     procedure :: allocate => c_allocate
     procedure :: debug_print => c_debug_print
     procedure :: mv_mult_rb => c_mv_mult_rb
     procedure :: get_field_update => c_get_field_update
     procedure :: reset => c_reset
     procedure :: set_locality => c_set_locality
     procedure :: has_row => c_has_row
  end type cell_type