communication routines to reshape / replicate / merge tall-and-skinny matrices.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| character(len=*), | private, | parameter | :: | moduleN | = | 'dbcsr_tas_reshape_ops' |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer, | intent(out) | :: | ndata | |||
| integer(kind=int_8), | intent(out), | DIMENSION(2) | :: | index | ||
| type(dbcsr_data_obj), | intent(inout), | optional | :: | block | ||
| logical, | intent(in), | optional | :: | advance_iter |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer(kind=int_8), | intent(in), | DIMENSION(2) | :: | index | ||
| type(dbcsr_data_obj), | intent(in) | :: | block | |||
| logical, | intent(in), | optional | :: | transposed |
insert a block into block buffer (at current iterator position)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer(kind=int_8), | intent(in), | DIMENSION(2) | :: | index |
index of block |
|
| real(kind=real_8), | intent(in), | DIMENSION(:, :) | :: | block |
block |
|
| logical, | intent(in), | optional | :: | transposed |
insert a block into block buffer (at current iterator position)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer(kind=int_8), | intent(in), | DIMENSION(2) | :: | index |
index of block |
|
| real(kind=real_4), | intent(in), | DIMENSION(:, :) | :: | block |
block |
|
| logical, | intent(in), | optional | :: | transposed |
insert a block into block buffer (at current iterator position)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer(kind=int_8), | intent(in), | DIMENSION(2) | :: | index |
index of block |
|
| complex(kind=real_8), | intent(in), | DIMENSION(:, :) | :: | block |
block |
|
| logical, | intent(in), | optional | :: | transposed |
insert a block into block buffer (at current iterator position)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer(kind=int_8), | intent(in), | DIMENSION(2) | :: | index |
index of block |
|
| complex(kind=real_4), | intent(in), | DIMENSION(:, :) | :: | block |
block |
|
| logical, | intent(in), | optional | :: | transposed |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | nblock | = | -1 | ||
| integer(kind=int_8), | public, | DIMENSION(:, :), ALLOCATABLE | :: | indx | |||
| real(kind=real_8), | public, | DIMENSION(:), ALLOCATABLE | :: | msg_r_dp | |||
| real(kind=real_4), | public, | DIMENSION(:), ALLOCATABLE | :: | msg_r_sp | |||
| complex(kind=real_8), | public, | DIMENSION(:), ALLOCATABLE | :: | msg_c_dp | |||
| complex(kind=real_4), | public, | DIMENSION(:), ALLOCATABLE | :: | msg_c_sp | |||
| integer, | public | :: | data_type | = | -1 | ||
| integer, | public | :: | endpos | = | -1 |
how many blocks left in iterator
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(in) | :: | buffer |
copy data (involves reshape)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dbcsr_tas_type), | intent(inout) | :: | matrix_in | |||
| type(dbcsr_tas_type), | intent(inout) | :: | matrix_out | |||
| logical, | intent(in), | optional | :: | summation |
whether matrix_out = matrix_out + matrix_in |
|
| logical, | intent(in), | optional | :: | transposed | ||
| logical, | intent(in), | optional | :: | move_data |
memory optimization: move data to matrix_out such that matrix_in is empty on return |
Replicate matrix_in such that each submatrix of matrix_out is an exact copy of matrix_in
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dbcsr_type), | intent(inout) | :: | matrix_in | |||
| type(dbcsr_tas_split_info), | intent(in) | :: | info | |||
| type(dbcsr_tas_type), | intent(out) | :: | matrix_out | |||
| logical, | intent(in), | optional | :: | nodata |
Don't copy data but create matrix_out |
|
| logical, | intent(in), | optional | :: | move_data |
memory optimization: move data to matrix_out such that matrix_in is empty on return |
Merge submatrices of matrix_in to matrix_out by sum
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dbcsr_type), | intent(inout) | :: | matrix_out | |||
| type(dbcsr_tas_type), | intent(inout) | :: | matrix_in | |||
| logical, | intent(in), | optional | :: | summation | ||
| logical, | intent(in), | optional | :: | move_data |
memory optimization: move data to matrix_out such that matrix_in is empty on return |
get all indices from buffer
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(in) | :: | buffer | |||
| integer(kind=int_8), | intent(out), | ALLOCATABLE, DIMENSION(:, :) | :: | index |
Create block buffer for MPI communication.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(out) | :: | buffer |
block buffer |
||
| integer, | intent(in) | :: | nblock |
number of blocks total number of block entries |
||
| integer, | intent(in) | :: | ndata |
number of blocks total number of block entries |
||
| integer, | intent(in) | :: | data_type |
number of blocks total number of block entries |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer(kind=int_8), | intent(in), | DIMENSION(2) | :: | index | ||
| type(dbcsr_data_obj), | intent(in) | :: | block | |||
| logical, | intent(in), | optional | :: | transposed |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer, | intent(out) | :: | ndata | |||
| integer(kind=int_8), | intent(out), | DIMENSION(2) | :: | index | ||
| type(dbcsr_data_obj), | intent(inout), | optional | :: | block | ||
| logical, | intent(in), | optional | :: | advance_iter |
insert a block into block buffer (at current iterator position)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer(kind=int_8), | intent(in), | DIMENSION(2) | :: | index |
index of block |
|
| real(kind=real_8), | intent(in), | DIMENSION(:, :) | :: | block |
block |
|
| logical, | intent(in), | optional | :: | transposed |
insert a block into block buffer (at current iterator position)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer(kind=int_8), | intent(in), | DIMENSION(2) | :: | index |
index of block |
|
| real(kind=real_4), | intent(in), | DIMENSION(:, :) | :: | block |
block |
|
| logical, | intent(in), | optional | :: | transposed |
insert a block into block buffer (at current iterator position)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer(kind=int_8), | intent(in), | DIMENSION(2) | :: | index |
index of block |
|
| complex(kind=real_8), | intent(in), | DIMENSION(:, :) | :: | block |
block |
|
| logical, | intent(in), | optional | :: | transposed |
insert a block into block buffer (at current iterator position)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer(kind=int_8), | intent(in), | DIMENSION(2) | :: | index |
index of block |
|
| complex(kind=real_4), | intent(in), | DIMENSION(:, :) | :: | block |
block |
|
| logical, | intent(in), | optional | :: | transposed |
get next block from buffer. Iterator is advanced only if block is retrieved or advance_iter.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer, | intent(out) | :: | ndata | |||
| integer(kind=int_8), | intent(out), | DIMENSION(2) | :: | index | ||
| real(kind=real_8), | intent(out), | optional, | DIMENSION(:, :) | :: | block | |
| logical, | intent(in), | optional | :: | advance_iter |
get next block from buffer. Iterator is advanced only if block is retrieved or advance_iter.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer, | intent(out) | :: | ndata | |||
| integer(kind=int_8), | intent(out), | DIMENSION(2) | :: | index | ||
| real(kind=real_4), | intent(out), | optional, | DIMENSION(:, :) | :: | block | |
| logical, | intent(in), | optional | :: | advance_iter |
get next block from buffer. Iterator is advanced only if block is retrieved or advance_iter.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer, | intent(out) | :: | ndata | |||
| integer(kind=int_8), | intent(out), | DIMENSION(2) | :: | index | ||
| complex(kind=real_8), | intent(out), | optional, | DIMENSION(:, :) | :: | block | |
| logical, | intent(in), | optional | :: | advance_iter |
get next block from buffer. Iterator is advanced only if block is retrieved or advance_iter.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(block_buffer_type), | intent(inout) | :: | buffer | |||
| integer, | intent(out) | :: | ndata | |||
| integer(kind=int_8), | intent(out), | DIMENSION(2) | :: | index | ||
| complex(kind=real_4), | intent(out), | optional, | DIMENSION(:, :) | :: | block | |
| logical, | intent(in), | optional | :: | advance_iter |
communicate buffer
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mp_comm_type), | intent(in) | :: | mp_comm | |||
| type(block_buffer_type), | intent(inout), | DIMENSION(0:) | :: | buffer_recv | ||
| type(block_buffer_type), | intent(inout), | DIMENSION(0:) | :: | buffer_send | ||
| type(mp_request_type), | intent(out), | DIMENSION(:, :) | :: | req_array |