Skip to content

Commit 20683cf

Browse files
committed
Basic implementations
1 parent df6483a commit 20683cf

File tree

3 files changed

+136
-92
lines changed

3 files changed

+136
-92
lines changed

src/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ set(fppFiles
5656
stdlib_specialfunctions_gamma.fypp
5757
stdlib_specialfunctions.fypp
5858
stdlib_specialmatrices.fypp
59-
stdlib_specialmatrices_tridiagonal.fypp
59+
stdlib_specialmatrices_tridiagonal.fypp
60+
stdlib_specialmatrices_symtridiagonal.fypp
6061
stdlib_stats.fypp
6162
stdlib_stats_corr.fypp
6263
stdlib_stats_cov.fypp

src/stdlib_specialmatrices.fypp

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ module stdlib_specialmatrices
4242
private
4343
${t1}$, allocatable :: dv(:), ev(:)
4444
integer(ilp) :: n
45+
logical(lk) :: is_posdef
4546
end type
4647
#:endfor
4748

@@ -138,7 +139,7 @@ module stdlib_specialmatrices
138139

139140
interface symtridiagonal
140141
!! ([Specifications](../page/specs/stdlib_specialmatrices.html#SymTridiagonal)) This
141-
!! interface provides different methods to construct a `sylmtridiagonal`
142+
!! interface provides different methods to construct a `symtridiagonal`
142143
!! matrix. Only the non-zero elements of \( A \) are stored, i.e.
143144
!!
144145
!! \[
@@ -237,7 +238,16 @@ module stdlib_specialmatrices
237238
#:for k1, t1, s1 in (KINDS_TYPES)
238239
#:for rank in RANKS
239240
module subroutine spmv_tridiag_${rank}$d_${s1}$(A, x, y, alpha, beta, op)
240-
type(tridiagonal_${s1}$_type), intent(in) :: A
241+
type(tridiagonal_${s1}$_type), intent(in) :: A
242+
${t1}$, intent(in), contiguous, target :: x${ranksuffix(rank)}$
243+
${t1}$, intent(inout), contiguous, target :: y${ranksuffix(rank)}$
244+
real(${k1}$), intent(in), optional :: alpha
245+
real(${k1}$), intent(in), optional :: beta
246+
character(1), intent(in), optional :: op
247+
end subroutine
248+
249+
module subroutine spmv_symtridiag_${rank}$d_${s1}$(A, x, y, alpha, beta, op)
250+
type(symtridiagonal_${s1}$_type), intent(in) :: A
241251
${t1}$, intent(in), contiguous, target :: x${ranksuffix(rank)}$
242252
${t1}$, intent(inout), contiguous, target :: y${ranksuffix(rank)}$
243253
real(${k1}$), intent(in), optional :: alpha
@@ -266,6 +276,14 @@ module stdlib_specialmatrices
266276
${t1}$, allocatable :: B(:, :)
267277
!! Corresponding dense matrix.
268278
end function
279+
280+
pure module function symtridiagonal_to_dense_${s1}$(A) result(B)
281+
!! Convert a `symtridiagonal` matrix to its dense representation.
282+
type(symtridiagonal_${s1}$_type), intent(in) :: A
283+
!! Input SymTridiagonal matrix.
284+
${t1}$, allocatable :: B(:, :)
285+
!! Corresponding dense matrix.
286+
end function
269287
#:endfor
270288
end interface
271289

@@ -279,6 +297,12 @@ module stdlib_specialmatrices
279297
!! Input matrix.
280298
type(tridiagonal_${s1}$_type) :: B
281299
end function
300+
301+
pure module function transpose_symtridiagonal_${s1}$(A) result(B)
302+
type(symtridiagonal_${s1}$_type), intent(in) :: A
303+
!! Input matrix.
304+
type(symtridiagonal_${s1}$_type) :: B
305+
end function
282306
#:endfor
283307
end interface
284308

@@ -293,6 +317,12 @@ module stdlib_specialmatrices
293317
!! Input matrix.
294318
type(tridiagonal_${s1}$_type) :: B
295319
end function
320+
321+
pure module function hermitian_symtridiagonal_${s1}$(A) result(B)
322+
type(symtridiagonal_${s1}$_type), intent(in) :: A
323+
!! Input matrix.
324+
type(symtridiagonal_${s1}$_type) :: B
325+
end function
296326
#:endfor
297327
end interface
298328

@@ -317,6 +347,17 @@ module stdlib_specialmatrices
317347
${t1}$, intent(in) :: alpha
318348
type(tridiagonal_${s1}$_type) :: B
319349
end function
350+
351+
pure module function scalar_multiplication_symtridiagonal_${s1}$(alpha, A) result(B)
352+
${t1}$, intent(in) :: alpha
353+
type(symtridiagonal_${s1}$_type), intent(in) :: A
354+
type(symtridiagonal_${s1}$_type) :: B
355+
end function
356+
pure module function scalar_multiplication_bis_symtridiagonal_${s1}$(A, alpha) result(B)
357+
type(symtridiagonal_${s1}$_type), intent(in) :: A
358+
${t1}$, intent(in) :: alpha
359+
type(symtridiagonal_${s1}$_type) :: B
360+
end function
320361
#:endfor
321362
end interface
322363

@@ -330,6 +371,12 @@ module stdlib_specialmatrices
330371
type(tridiagonal_${s1}$_type), intent(in) :: B
331372
type(tridiagonal_${s1}$_type) :: C
332373
end function
374+
375+
pure module function matrix_add_symtridiagonal_${s1}$(A, B) result(C)
376+
type(symtridiagonal_${s1}$_type), intent(in) :: A
377+
type(symtridiagonal_${s1}$_type), intent(in) :: B
378+
type(symtridiagonal_${s1}$_type) :: C
379+
end function
333380
#:endfor
334381
end interface
335382

@@ -343,6 +390,12 @@ module stdlib_specialmatrices
343390
type(tridiagonal_${s1}$_type), intent(in) :: B
344391
type(tridiagonal_${s1}$_type) :: C
345392
end function
393+
394+
pure module function matrix_sub_symtridiagonal_${s1}$(A, B) result(C)
395+
type(symtridiagonal_${s1}$_type), intent(in) :: A
396+
type(symtridiagonal_${s1}$_type), intent(in) :: B
397+
type(symtridiagonal_${s1}$_type) :: C
398+
end function
346399
#:endfor
347400
end interface
348401

0 commit comments

Comments
 (0)