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
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
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 |
Deallocate storage space
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cell_type), | intent(inout) | :: | self |
Allocate storage space
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cell_type), | intent(inout) | :: | self |
Initialise the members of the cell instance
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cell_type), | intent(inout) | :: | self | |||
integer, | intent(in) | :: | ic | |||
integer, | intent(in) | :: | it | |||
integer, | intent(in) | :: | is | |||
integer, | intent(in) | :: | ik | |||
integer, | intent(in) | :: | nfield | |||
integer, | intent(in) | :: | nrow | |||
integer, | intent(in) | :: | nextend | |||
logical, | intent(in) | :: | ignore_boundary |
Debug printing
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cell_type), | intent(in) | :: | self |
Do matrix vector multiplication at rowblock level
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cell_type), | intent(inout) | :: | self | |||
complex, | intent(in), | dimension(self%ncol) | :: | vect | ||
integer, | intent(in) | :: | ifq |
Get the field update for this cells data Note still need to reduce across other cells in this supercell.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 |
Set the locality of each object
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(cell_type), | intent(inout) | :: | self |
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 :: init => c_init
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