# hermitian_banded_matrix_t Derived Type

## type, public :: hermitian_banded_matrix_t

type to represent a complex Hermitian banded matrix

## Components

TypeVisibilityAttributesNameInitial
integer, public :: n

number of rows/columns

character, public :: uplo

store upper ("U") or lower ("L") triangular part

integer, public :: kd

number of sub/superdiagonals

complex(kind=dp), public, allocatable:: AB(:,:)

the matrix in banded storage

## Type-Bound Procedures

• ### private pure function get_element(this, row, col) result(element)

Retrieves the element at position (row, col) of the original matrix. See the LAPACK documentation, element $a_{ij}$ of the original matrix is stored at position $(kd + 1 + i - j, j)$ if uplo = "U" and at position $(1 + i - j, j)$ if uplo = "L" in the banded storage.

#### Arguments

TypeIntentOptionalAttributesName
class(hermitian_banded_matrix_t), intent(in) :: this

type instance

integer, intent(in) :: row

the row index of the original position

integer, intent(in) :: col

the column index of the original position

#### Return Value complex(kind=dp)

the element at the original position (row, col)

• ### private pure subroutine set_element(this, row, col, element)

Sets the element $a_{ij}$ of the original array into the banded structure. The row and col arguments refer to the row and column indices of the element in the original array. This routine has no effect if the location falls outside of the banded structure.

#### Arguments

TypeIntentOptionalAttributesName
class(hermitian_banded_matrix_t), intent(inout) :: this

type instance

integer, intent(in) :: row

row index of element

integer, intent(in) :: col

column index of element

complex(kind=dp), intent(in) :: element

value for the element at (row, col)

• ### private pure function get_total_nb_elements(this)

Returns the total number of elements inside the banded matrix

#### Arguments

TypeIntentOptionalAttributesName
class(hermitian_banded_matrix_t), intent(in) :: this

type instance

• ### private pure function is_compatible_with(this, other)

Checks if a Hermitian band matrix is compatible with another Hermitian band matrix. This implies that the following attributes should be equal: - number of rows/columns - number of sub/superdiagonals - storage of upper or lower triangular part - dimensions of the banded matrices themselves Returns .true. if all criteria are satisfied, .false. otherwise.

#### Arguments

TypeIntentOptionalAttributesName
class(hermitian_banded_matrix_t), intent(in) :: this

type instance

class(hermitian_banded_matrix_t), intent(in) :: other

other banded matrix

• ### private pure subroutine destroy(this)

Destructor, deallocates the datastructure.

#### Arguments

TypeIntentOptionalAttributesName
class(hermitian_banded_matrix_t), intent(inout) :: this

type instance