dbcsr_tensor_index Module

tensor index and mapping to DBCSR index



Contents


Variables

TypeVisibilityAttributesNameInitial
character(len=*), private, parameter:: moduleN ='dbcsr_tensor_index'

Derived Types

type, public :: nd_to_2d_mapping

Components

TypeVisibilityAttributesNameInitial
integer, public :: ndim_nd
integer, public :: ndim1_2d
integer, public :: ndim2_2d
integer, public, DIMENSION(:), ALLOCATABLE:: dims_nd
integer(kind=int_8), public, DIMENSION(2):: dims_2d
integer, public, DIMENSION(:), ALLOCATABLE:: dims1_2d
integer, public, DIMENSION(:), ALLOCATABLE:: dims2_2d
integer, public, DIMENSION(:), ALLOCATABLE:: map1_2d
integer, public, DIMENSION(:), ALLOCATABLE:: map2_2d
integer, public, DIMENSION(:), ALLOCATABLE:: map_nd
integer, public :: base
logical, public :: col_major

Functions

public pure function ndims_mapping(map)

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(in) :: map

Return Value integer

public pure function ndims_mapping_row(map)

how many tensor dimensions are mapped to matrix row

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(in) :: map

Return Value integer

public pure function ndims_mapping_column(map)

how many tensor dimensions are mapped to matrix column

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(in) :: map

Return Value integer

public pure function combine_tensor_index(ind_in, dims) result(ind_out)

transform nd index to flat index

Arguments

TypeIntentOptionalAttributesName
integer, intent(in), DIMENSION(:):: ind_in

nd index nd dimensions

integer, intent(in), DIMENSION(:):: dims

nd index nd dimensions

Return Value integer(kind=int_8)

flat index

public pure function combine_pgrid_index(ind_in, dims) result(ind_out)

transform nd index to flat index

Arguments

TypeIntentOptionalAttributesName
integer, intent(in), DIMENSION(:):: ind_in

nd index nd dimensions

integer, intent(in), DIMENSION(:):: dims

nd index nd dimensions

Return Value integer

flat index

public pure function split_tensor_index(ind_in, dims) result(ind_out)

transform flat index to nd index

Arguments

TypeIntentOptionalAttributesName
integer(kind=int_8), intent(in) :: ind_in

flat index

integer, intent(in), DIMENSION(:):: dims

nd dimensions

Return Value integer,DIMENSION(SIZE(dims))

nd index

public pure function split_pgrid_index(ind_in, dims) result(ind_out)

transform flat index to nd index

Arguments

TypeIntentOptionalAttributesName
integer, intent(in) :: ind_in

flat index

integer, intent(in), DIMENSION(:):: dims

nd dimensions

Return Value integer,DIMENSION(SIZE(dims))

nd index

public pure function get_2d_indices_tensor(map, ind_in) result(ind_out)

transform nd index to 2d index, using info from index mapping.

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(in) :: map

index mapping

integer, intent(in), DIMENSION(map%ndim_nd):: ind_in

nd index

Return Value integer(kind=int_8),DIMENSION(2)

2d index

public pure function get_2d_indices_pgrid(map, ind_in) result(ind_out)

transform nd index to 2d index, using info from index mapping.

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(in) :: map

index mapping

integer, intent(in), DIMENSION(map%ndim_nd):: ind_in

nd index

Return Value integer,DIMENSION(2)

2d index

public pure function get_nd_indices_tensor(map, ind_in) result(ind_out)

transform 2d index to nd index, using info from index mapping.

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(in) :: map

index mapping

integer(kind=int_8), intent(in), DIMENSION(2):: ind_in

2d index

Return Value integer,DIMENSION(map%ndim_nd)

nd index

public pure function get_nd_indices_pgrid(map, ind_in) result(ind_out)

transform 2d index to nd index, using info from index mapping.

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(in) :: map

index mapping

integer, intent(in), DIMENSION(2):: ind_in

2d index

Return Value integer,DIMENSION(map%ndim_nd)

nd index

public pure function dbcsr_t_inverse_order(order)

Invert order

Arguments

TypeIntentOptionalAttributesName
integer, intent(in), DIMENSION(:):: order

Return Value integer,DIMENSION(SIZE(order))


Subroutines

public subroutine create_nd_to_2d_mapping(map, dims, map1_2d, map2_2d, base, col_major)

Create all data needed to quickly map between nd index and 2d index.

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(out) :: map

index mapping data

integer, intent(in), DIMENSION(:):: dims

nd sizes which nd-indices map to first matrix index and in which order which nd-indices map to second matrix index and in which order

integer, intent(in), DIMENSION(:):: map1_2d

nd sizes which nd-indices map to first matrix index and in which order which nd-indices map to second matrix index and in which order

integer, intent(in), DIMENSION(:):: map2_2d

nd sizes which nd-indices map to first matrix index and in which order which nd-indices map to second matrix index and in which order

integer, intent(in), optional :: base

base index (1 for Fortran-style, 0 for C-style, default is 1)

logical, intent(in), optional :: col_major

whether index should be column major order (.TRUE. for Fortran-style, .FALSE. for C-style, default is .TRUE.).

public subroutine destroy_nd_to_2d_mapping(map)

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(inout) :: map

public pure subroutine dbcsr_t_get_mapping_info(map, ndim_nd, ndim1_2d, ndim2_2d, dims_2d_i8, dims_2d, dims_nd, dims1_2d, dims2_2d, map1_2d, map2_2d, map_nd, base, col_major)

get mapping info

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(in) :: map

index mapping data.

integer, intent(out), optional :: ndim_nd

number of dimensions number of dimensions that map to first 2d index number of dimensions that map to first 2d index

integer, intent(out), optional :: ndim1_2d

number of dimensions number of dimensions that map to first 2d index number of dimensions that map to first 2d index

integer, intent(out), optional :: ndim2_2d

number of dimensions number of dimensions that map to first 2d index number of dimensions that map to first 2d index

integer(kind=int_8), intent(out), optional DIMENSION(2):: dims_2d_i8
integer, intent(out), optional DIMENSION(2):: dims_2d

2d dimensions

integer, intent(out), optional DIMENSION(ndims_mapping(map)):: dims_nd

nd dimensions

integer, intent(out), optional DIMENSION(ndims_mapping_row(map)):: dims1_2d

dimensions that map to first 2d index

integer, intent(out), optional DIMENSION(ndims_mapping_column(map)):: dims2_2d

dimensions that map to second 2d index

integer, intent(out), optional DIMENSION(ndims_mapping_row(map)):: map1_2d

indices that map to first 2d index

integer, intent(out), optional DIMENSION(ndims_mapping_column(map)):: map2_2d

indices that map to second 2d index

integer, intent(out), optional DIMENSION(ndims_mapping(map)):: map_nd

inverse of [map1_2d, map2_2d]

integer, intent(out), optional :: base

base index

logical, intent(out), optional :: col_major

is index in column major order

public subroutine permute_index(map_in, map_out, order)

reorder tensor index (no data)

Arguments

TypeIntentOptionalAttributesName
type(nd_to_2d_mapping), intent(in) :: map_in
type(nd_to_2d_mapping), intent(out) :: map_out
integer, intent(in), DIMENSION(ndims_mapping(map_in)):: order