Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
df6483a
Base type and constructor interfaces for symtridiagonal matrices.
loiseaujc Jul 21, 2025
20683cf
Basic implementations
loiseaujc Jul 22, 2025
f421812
Export symtridiagonal
loiseaujc Jul 22, 2025
a42928f
Added basic unit tests for symtridiagonal.
loiseaujc Jul 22, 2025
f6a2c88
Fix conjugate-transpose spmv.
loiseaujc Jul 22, 2025
9a37e13
Turned-on complex-valued tests.
loiseaujc Jul 22, 2025
d64ebef
SymTridiagonal is extended from Tridiagonal instead of being its own …
loiseaujc Jul 22, 2025
41d4a03
Regrouped everything in a single submodule.
loiseaujc Jul 22, 2025
089b297
Fixed CMakeLists.txt
loiseaujc Jul 22, 2025
fbb3474
Implementation of the Hermitian Tridiagonal matrices.
loiseaujc Jul 22, 2025
58c4eaf
Added tests for Hermitian Tridiagonal matrices.
loiseaujc Jul 22, 2025
1644315
Complete algebra (+, -, scalar mult.) for combinations of tridiagonal…
loiseaujc Jul 22, 2025
5221f13
Fix scalar multiplication for Hermitian matrices.
loiseaujc Jul 22, 2025
f26a17d
Fix missing module keyword.
loiseaujc Jul 22, 2025
54113b4
Remove tridiag_arithmetic entirely to pinpoint intel error.
loiseaujc Jul 22, 2025
4d6e526
Remove tridiagonal error handling to pinpoint issue with intel 2024.1
loiseaujc Jul 22, 2025
d1d1845
Remove all tridiag arithmetic tests to pinpoint intel issue.
loiseaujc Jul 22, 2025
6209b80
Remove symtridiag spmv kernel tests to pinpoint intel error.
loiseaujc Jul 22, 2025
ca9bf94
Remove hermitian spmv kernel test to pinpoint intel issue.
loiseaujc Jul 22, 2025
d8bcc82
Intel fix (#5)
loiseaujc Jul 23, 2025
7ea8d29
In-code documentation.
loiseaujc Jul 23, 2025
345f6f9
Added documentation for symmetric and hermitian matrices.
loiseaujc Jul 23, 2025
15b0769
Added example for symtridiagonal and hermtridiagonal.
loiseaujc Jul 23, 2025
fb589f9
Added examples to CMakeLists.txt
loiseaujc Jul 23, 2025
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Complete algebra (+, -, scalar mult.) for combinations of tridiagonal…
… matrices
  • Loading branch information
loiseaujc committed Jul 22, 2025
commit 16443155af6210b0c36f5b0f19a6c8e4419cbecb
96 changes: 88 additions & 8 deletions src/stdlib_specialmatrices.fypp
Original file line number Diff line number Diff line change
Expand Up @@ -468,11 +468,51 @@ module stdlib_specialmatrices
!! be of the same type and kind.
!! [Specifications](../page/specs/stdlib_specialmatrices.html#operators)
#:for k1, t1, s1 in (KINDS_TYPES)
pure module function matrix_add_tridiagonal_${s1}$(A, B) result(C)
class(tridiagonal_${s1}$_type), intent(in) :: A
class(tridiagonal_${s1}$_type), intent(in) :: B
class(tridiagonal_${s1}$_type), allocatable :: C
pure module function matrix_add_tridiag_tridiag_${s1}$(A, B) result(C)
type(tridiagonal_${s1}$_type), intent(in) :: A, B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_add_tridiag_symtridiag_${s1}$(A, B) result(C)
type(tridiagonal_${s1}$_type), intent(in) :: A
type(symtridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_add_symtridiag_tridiag_${s1}$(A, B) result(C)
type(symtridiagonal_${s1}$_type), intent(in) :: A
type(tridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_add_symtridiag_symtridiag_${s1}$(A, B) result(C)
type(symtridiagonal_${s1}$_type), intent(in) :: A, B
type(symtridiagonal_${s1}$_type) :: C
end function

#:if t1.startswith("complex")
pure module function matrix_add_tridiag_hermtridiag_${s1}$(A, B) result(C)
type(tridiagonal_${s1}$_type), intent(in) :: A
type(hermtridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_add_hermtridiag_tridiag_${s1}$(A, B) result(C)
type(hermtridiagonal_${s1}$_type), intent(in) :: A
type(tridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_add_symtridiag_hermtridiag_${s1}$(A, B) result(C)
type(symtridiagonal_${s1}$_type), intent(in) :: A
type(hermtridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_add_hermtridiag_symtridiag_${s1}$(A, B) result(C)
type(hermtridiagonal_${s1}$_type), intent(in) :: A
type(symtridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_add_hermtridiag_hermtridiag_${s1}$(A, B) result(C)
type(hermtridiagonal_${s1}$_type), intent(in) :: A, B
type(hermtridiagonal_${s1}$_type) :: C
end function
#:endif
#:endfor
end interface

Expand All @@ -481,11 +521,51 @@ module stdlib_specialmatrices
!! be of the same type and kind.
!! [Specifications](../page/specs/stdlib_specialmatrices.html#operators)
#:for k1, t1, s1 in (KINDS_TYPES)
pure module function matrix_sub_tridiagonal_${s1}$(A, B) result(C)
class(tridiagonal_${s1}$_type), intent(in) :: A
class(tridiagonal_${s1}$_type), intent(in) :: B
class(tridiagonal_${s1}$_type), allocatable :: C
pure module function matrix_sub_tridiag_tridiag_${s1}$(A, B) result(C)
type(tridiagonal_${s1}$_type), intent(in) :: A, B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_sub_tridiag_symtridiag_${s1}$(A, B) result(C)
type(tridiagonal_${s1}$_type), intent(in) :: A
type(symtridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_sub_symtridiag_tridiag_${s1}$(A, B) result(C)
type(symtridiagonal_${s1}$_type), intent(in) :: A
type(tridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_sub_symtridiag_symtridiag_${s1}$(A, B) result(C)
type(symtridiagonal_${s1}$_type), intent(in) :: A, B
type(symtridiagonal_${s1}$_type) :: C
end function

#:if t1.startswith("complex")
pure module function matrix_sub_tridiag_hermtridiag_${s1}$(A, B) result(C)
type(tridiagonal_${s1}$_type), intent(in) :: A
type(hermtridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_sub_hermtridiag_tridiag_${s1}$(A, B) result(C)
type(hermtridiagonal_${s1}$_type), intent(in) :: A
type(tridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_sub_symtridiag_hermtridiag_${s1}$(A, B) result(C)
type(symtridiagonal_${s1}$_type), intent(in) :: A
type(hermtridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_sub_hermtridiag_symtridiag_${s1}$(A, B) result(C)
type(hermtridiagonal_${s1}$_type), intent(in) :: A
type(symtridiagonal_${s1}$_type), intent(in) :: B
type(tridiagonal_${s1}$_type) :: C
end function
pure module function matrix_sub_hermtridiag_hermtridiag_${s1}$(A, B) result(C)
type(hermtridiagonal_${s1}$_type), intent(in) :: A, B
type(hermtridiagonal_${s1}$_type) :: C
end function
#:endif
#:endfor
end interface

Expand Down
Loading
Loading