Creates new distribution from a template distribution
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dbcsr_distribution_obj), | intent(out) | :: | dist |
distribution |
||
type(dbcsr_distribution_obj), | intent(in), | optional | :: | template | ||
integer, | intent(in), | optional | :: | group | ||
integer, | optional, | DIMENSION(:, :), POINTER | :: | pgrid | ||
integer, | intent(in), | DIMENSION(:), POINTER, CONTIGUOUS | :: | row_dist | ||
integer, | intent(in), | DIMENSION(:), POINTER, CONTIGUOUS | :: | col_dist | ||
logical, | intent(in), | optional | :: | reuse_arrays |
SUBROUTINE dbcsr_distribution_new_template(dist, template, group, pgrid, row_dist, col_dist, &
reuse_arrays)
!! Creates new distribution from a template distribution
TYPE(dbcsr_distribution_obj), INTENT(OUT) :: dist
!! distribution
TYPE(dbcsr_distribution_obj), INTENT(IN), &
OPTIONAL :: template
INTEGER, INTENT(IN), OPTIONAL :: group
INTEGER, DIMENSION(:, :), OPTIONAL, POINTER :: pgrid
INTEGER, DIMENSION(:), INTENT(IN), POINTER, CONTIGUOUS :: row_dist, col_dist
LOGICAL, INTENT(IN), OPTIONAL :: reuse_arrays
TYPE(dbcsr_mp_obj) :: mp_env
IF (PRESENT(pgrid) .AND. .NOT. PRESENT(group)) &
DBCSR_ABORT("pgrid can only be supplied together with group")
IF (PRESENT(template)) THEN
mp_env = template%d%mp_env
IF (PRESENT(group)) &
DBCSR_ABORT("dbcsr_distribution_new called with template and group")
IF (PRESENT(pgrid)) &
DBCSR_ABORT("dbcsr_distribution_new called with template and pgrid")
ELSE IF (PRESENT(group)) THEN
CALL dbcsr_mp_new(mp_env, group, pgrid)
ELSE
DBCSR_ABORT("dbcsr_distribution_new: neither template nor group supplied")
END IF
CALL dbcsr_distribution_new_low(dist, mp_env, &
row_dist_block=row_dist, &
col_dist_block=col_dist, &
reuse_arrays=reuse_arrays)
IF (.NOT. PRESENT(template)) &
CALL dbcsr_mp_release(mp_env)
END SUBROUTINE dbcsr_distribution_new_template