@@ -42,6 +42,7 @@ module stdlib_specialmatrices
42
42
private
43
43
${t1}$, allocatable :: dv(:), ev(:)
44
44
integer(ilp) :: n
45
+ logical(lk) :: is_posdef
45
46
end type
46
47
#:endfor
47
48
@@ -138,7 +139,7 @@ module stdlib_specialmatrices
138
139
139
140
interface symtridiagonal
140
141
!! ([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 `
142
143
!! matrix. Only the non-zero elements of \( A \) are stored, i.e.
143
144
!!
144
145
!! \[
@@ -237,7 +238,16 @@ module stdlib_specialmatrices
237
238
#:for k1, t1, s1 in (KINDS_TYPES)
238
239
#:for rank in RANKS
239
240
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
241
251
${t1}$, intent(in), contiguous, target :: x${ranksuffix(rank)}$
242
252
${t1}$, intent(inout), contiguous, target :: y${ranksuffix(rank)}$
243
253
real(${k1}$), intent(in), optional :: alpha
@@ -266,6 +276,14 @@ module stdlib_specialmatrices
266
276
${t1}$, allocatable :: B(:, :)
267
277
!! Corresponding dense matrix.
268
278
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
269
287
#:endfor
270
288
end interface
271
289
@@ -279,6 +297,12 @@ module stdlib_specialmatrices
279
297
!! Input matrix.
280
298
type(tridiagonal_${s1}$_type) :: B
281
299
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
282
306
#:endfor
283
307
end interface
284
308
@@ -293,6 +317,12 @@ module stdlib_specialmatrices
293
317
!! Input matrix.
294
318
type(tridiagonal_${s1}$_type) :: B
295
319
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
296
326
#:endfor
297
327
end interface
298
328
@@ -317,6 +347,17 @@ module stdlib_specialmatrices
317
347
${t1}$, intent(in) :: alpha
318
348
type(tridiagonal_${s1}$_type) :: B
319
349
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
320
361
#:endfor
321
362
end interface
322
363
@@ -330,6 +371,12 @@ module stdlib_specialmatrices
330
371
type(tridiagonal_${s1}$_type), intent(in) :: B
331
372
type(tridiagonal_${s1}$_type) :: C
332
373
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
333
380
#:endfor
334
381
end interface
335
382
@@ -343,6 +390,12 @@ module stdlib_specialmatrices
343
390
type(tridiagonal_${s1}$_type), intent(in) :: B
344
391
type(tridiagonal_${s1}$_type) :: C
345
392
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
346
399
#:endfor
347
400
end interface
348
401
0 commit comments