@@ -37,12 +37,12 @@ module stdlib_specialmatrices
37
37
38
38
!--> Symmetric Tridiagonal matrices
39
39
#:for k1, t1, s1 in (KINDS_TYPES)
40
- type, public :: symtridiagonal_${s1}$_type
40
+ type, extends(tridiagonal_${s1}$_type), public :: symtridiagonal_${s1}$_type
41
41
!! Base type to define a `symtridiagonal` matrix.
42
42
private
43
- ${t1}$, allocatable :: dv(:), ev(:)
44
- integer(ilp) :: n
43
+ #:if t1.startswith('real')
45
44
logical(lk) :: is_posdef
45
+ #:endif
46
46
end type
47
47
#:endfor
48
48
@@ -238,16 +238,7 @@ module stdlib_specialmatrices
238
238
#:for k1, t1, s1 in (KINDS_TYPES)
239
239
#:for rank in RANKS
240
240
module subroutine spmv_tridiag_${rank}$d_${s1}$(A, x, y, alpha, beta, op)
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
+ class(tridiagonal_${s1}$_type), intent(in) :: A
251
242
${t1}$, intent(in), contiguous, target :: x${ranksuffix(rank)}$
252
243
${t1}$, intent(inout), contiguous, target :: y${ranksuffix(rank)}$
253
244
real(${k1}$), intent(in), optional :: alpha
@@ -271,19 +262,11 @@ module stdlib_specialmatrices
271
262
#:for k1, t1, s1 in (KINDS_TYPES)
272
263
pure module function tridiagonal_to_dense_${s1}$(A) result(B)
273
264
!! Convert a `tridiagonal` matrix to its dense representation.
274
- type (tridiagonal_${s1}$_type), intent(in) :: A
265
+ class (tridiagonal_${s1}$_type), intent(in) :: A
275
266
!! Input Tridiagonal matrix.
276
267
${t1}$, allocatable :: B(:, :)
277
268
!! Corresponding dense matrix.
278
269
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
287
270
#:endfor
288
271
end interface
289
272
@@ -293,15 +276,9 @@ module stdlib_specialmatrices
293
276
!! [Specifications](../page/specs/stdlib_specialmatrices.html#transpose)
294
277
#:for k1, t1, s1 in (KINDS_TYPES)
295
278
pure module function transpose_tridiagonal_${s1}$(A) result(B)
296
- type (tridiagonal_${s1}$_type), intent(in) :: A
279
+ class (tridiagonal_${s1}$_type), intent(in) :: A
297
280
!! Input matrix.
298
- type(tridiagonal_${s1}$_type) :: B
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
281
+ class(tridiagonal_${s1}$_type), allocatable :: B
305
282
end function
306
283
#:endfor
307
284
end interface
@@ -313,15 +290,9 @@ module stdlib_specialmatrices
313
290
!! [Specifications](../page/specs/stdlib_specialmatrices.html#hermitian)
314
291
#:for k1, t1, s1 in (KINDS_TYPES)
315
292
pure module function hermitian_tridiagonal_${s1}$(A) result(B)
316
- type(tridiagonal_${s1}$_type), intent(in) :: A
317
- !! Input matrix.
318
- type(tridiagonal_${s1}$_type) :: B
319
- end function
320
-
321
- pure module function hermitian_symtridiagonal_${s1}$(A) result(B)
322
- type(symtridiagonal_${s1}$_type), intent(in) :: A
293
+ class(tridiagonal_${s1}$_type), intent(in) :: A
323
294
!! Input matrix.
324
- type(symtridiagonal_ ${s1}$_type) :: B
295
+ class(tridiagonal_ ${s1}$_type), allocatable :: B
325
296
end function
326
297
#:endfor
327
298
end interface
@@ -339,24 +310,13 @@ module stdlib_specialmatrices
339
310
#:for k1, t1, s1 in (KINDS_TYPES)
340
311
pure module function scalar_multiplication_tridiagonal_${s1}$(alpha, A) result(B)
341
312
${t1}$, intent(in) :: alpha
342
- type (tridiagonal_${s1}$_type), intent(in) :: A
343
- type (tridiagonal_${s1}$_type) :: B
313
+ class (tridiagonal_${s1}$_type), intent(in) :: A
314
+ class (tridiagonal_${s1}$_type), allocatable :: B
344
315
end function
345
316
pure module function scalar_multiplication_bis_tridiagonal_${s1}$(A, alpha) result(B)
346
- type(tridiagonal_${s1}$_type), intent(in) :: A
347
- ${t1}$, intent(in) :: alpha
348
- type(tridiagonal_${s1}$_type) :: B
349
- end function
350
-
351
- pure module function scalar_multiplication_symtridiagonal_${s1}$(alpha, A) result(B)
317
+ class(tridiagonal_${s1}$_type), intent(in) :: A
352
318
${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
319
+ class(tridiagonal_${s1}$_type), allocatable :: B
360
320
end function
361
321
#:endfor
362
322
end interface
@@ -367,15 +327,9 @@ module stdlib_specialmatrices
367
327
!! [Specifications](../page/specs/stdlib_specialmatrices.html#operators)
368
328
#:for k1, t1, s1 in (KINDS_TYPES)
369
329
pure module function matrix_add_tridiagonal_${s1}$(A, B) result(C)
370
- type(tridiagonal_${s1}$_type), intent(in) :: A
371
- type(tridiagonal_${s1}$_type), intent(in) :: B
372
- type(tridiagonal_${s1}$_type) :: C
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
330
+ class(tridiagonal_${s1}$_type), intent(in) :: A
331
+ class(tridiagonal_${s1}$_type), intent(in) :: B
332
+ class(tridiagonal_${s1}$_type), allocatable :: C
379
333
end function
380
334
#:endfor
381
335
end interface
@@ -386,15 +340,9 @@ module stdlib_specialmatrices
386
340
!! [Specifications](../page/specs/stdlib_specialmatrices.html#operators)
387
341
#:for k1, t1, s1 in (KINDS_TYPES)
388
342
pure module function matrix_sub_tridiagonal_${s1}$(A, B) result(C)
389
- type(tridiagonal_${s1}$_type), intent(in) :: A
390
- type(tridiagonal_${s1}$_type), intent(in) :: B
391
- type(tridiagonal_${s1}$_type) :: C
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
343
+ class(tridiagonal_${s1}$_type), intent(in) :: A
344
+ class(tridiagonal_${s1}$_type), intent(in) :: B
345
+ class(tridiagonal_${s1}$_type), allocatable :: C
398
346
end function
399
347
#:endfor
400
348
end interface
0 commit comments