Contains types and routines to handle banded Hermitian matrices. We use the same conventions as explained in the LAPACK guide http://www.netlib.org/lapack/lug/node124.html.
type to represent a complex Hermitian banded matrix
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
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 |
procedure, public :: get_element | |
procedure, public :: set_element | |
procedure, public :: get_total_nb_elements | |
procedure, public :: is_compatible_with | |
procedure, public :: destroy |
Constructor for a new Hermitian banded matrix with a given number of rows and diagonals. Allocates and initialises the datatype. initialise all to zero
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | rows | number of rows/columns |
||
integer, | intent(in) | :: | diags | number of sub/superdiagonals |
||
character, | intent(in) | :: | uplo | store upper ("U") or lower ("L") triangular part |
the Hermitian matrix in banded storage
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.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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 |
the element at the original position (row, col)
Returns the total number of elements inside the banded matrix
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(hermitian_banded_matrix_t), | intent(in) | :: | this | type instance |
Checks whether the given uplo parameter is valid.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character, | intent(in) | :: | uplo | uplo character to check |
Checks if a given position (row, col) is within the banded structure. For uplo = "U" the position is within the band if for uplo = "L" the position is within the band if with $kd$ the number of sub/superdiagonals and $n$ the number of rows/columns.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(hermitian_banded_matrix_t), | intent(in) | :: | matrix | Hermitian banded matrix structure |
||
integer, | intent(in) | :: | row | the row index |
||
integer, | intent(in) | :: | col | the column index |
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.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(hermitian_banded_matrix_t), | intent(in) | :: | this | type instance |
||
class(hermitian_banded_matrix_t), | intent(in) | :: | other | other banded matrix |
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.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
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) |
Destructor, deallocates the datastructure.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(hermitian_banded_matrix_t), | intent(inout) | :: | this | type instance |