Skip to content

Commit ecc8ecf

Browse files
committed
done
2 parents 9816d8a + 42054c9 commit ecc8ecf

2 files changed

Lines changed: 47 additions & 0 deletions

File tree

src/specialmatrices/stdlib_specialmatrices_tridiagonal.fypp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
3838
!! Corresponding tridiagonal matrix.
3939

4040
<<<<<<< HEAD
41+
<<<<<<< HEAD
42+
=======
43+
>>>>>>> 42054c9d7c11c427d6628bba5c236f0bf2fcdc97
4144
! Internal variables.
4245
type(linalg_state_type) :: err0
4346

@@ -51,9 +54,13 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
5154
allocate( A%dl(n-1), source = dl )
5255
allocate( A%dv(n), source= dv )
5356
allocate( A%du(n-1), source = du )
57+
<<<<<<< HEAD
5458
=======
5559
call build_tridiagonal(dl, dv, du, n, A)
5660
>>>>>>> 72698fd78241550f6d359b58ef08499d9c1ed030
61+
=======
62+
call build_tridiagonal(dl, dv, du, n, A)
63+
>>>>>>> 42054c9d7c11c427d6628bba5c236f0bf2fcdc97
5764
end function
5865

5966
module function initialize_tridiagonal_impure_${s1}$(dl, dv, du, err) result(A)
@@ -237,6 +244,9 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
237244
allocate(B(n, n), source=zero_${k1}$)
238245
#:endif
239246
<<<<<<< HEAD
247+
<<<<<<< HEAD
248+
=======
249+
>>>>>>> 42054c9d7c11c427d6628bba5c236f0bf2fcdc97
240250

241251
if (n == 1) then
242252
B(1, 1) = A%dv(1)
@@ -251,7 +261,10 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
251261
B(n, n-1) = A%dl(n-1)
252262
B(n, n) = A%dv(n)
253263
end if
264+
<<<<<<< HEAD
265+
=======
254266
=======
267+
>>>>>>> 42054c9d7c11c427d6628bba5c236f0bf2fcdc97
255268
B(1, 1) = A%dv(1)
256269
B(1, 2) = A%du(1)
257270
do concurrent (i=2:n-1)
@@ -261,7 +274,10 @@ submodule (stdlib_specialmatrices) tridiagonal_matrices
261274
enddo
262275
B(n, n-1) = A%dl(n-1)
263276
B(n, n) = A%dv(n)
277+
<<<<<<< HEAD
264278
>>>>>>> 72698fd78241550f6d359b58ef08499d9c1ed030
279+
=======
280+
>>>>>>> 42054c9d7c11c427d6628bba5c236f0bf2fcdc97
265281
end associate
266282
end function
267283
#:endfor

test/linalg/test_linalg_specialmatrices.fypp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,10 +446,41 @@ contains
446446
! Scalar multiplication test
447447
C = 3.0_wp * A
448448
call check(error, all_close(dense(C), 3.0_wp * dense(A)), .true.)
449+
subroutine test_sym_tridiagonal_arithmetic(error)
450+
!> Error handling
451+
type(error_type), allocatable, intent(out) :: error
452+
#:for k1, t1, s1 in (KINDS_TYPES)
453+
block
454+
integer, parameter :: wp = ${k1}$
455+
type(sym_tridiagonal_${s1}$_type) :: A, B, C
456+
${t1}$, allocatable :: dv(:), du(:)
457+
458+
dv = [1.0_wp, 5.0_wp, 9.0_wp, 13.0_wp]
459+
du = [2.0_wp, 6.0_wp, 10.0_wp]
460+
A = sym_tridiagonal(du, dv)
461+
462+
dv = [3.0_wp, 7.0_wp, 11.0_wp, 14.0_wp]
463+
du = [4.0_wp, 8.0_wp, 12.0_wp]
464+
B = sym_tridiagonal(du, dv)
465+
466+
C = A + B
467+
call check(error, all_close(dense(C), dense(A) + dense(B)), .true., &
468+
"Symmetric tridiagonal operator + failed")
469+
if (allocated(error)) return
470+
471+
C = A - B
472+
call check(error, all_close(dense(C), dense(A) - dense(B)), .true., &
473+
"Symmetric tridiagonal operator - failed")
474+
if (allocated(error)) return
475+
476+
C = 5.0_wp * A
477+
call check(error, all_close(dense(C), 5.0_wp * dense(A)), .true., &
478+
"Symmetric tridiagonal operator * failed")
449479
if (allocated(error)) return
450480
end block
451481
#:endfor
452482
end subroutine
483+
end module
453484

454485
end module
455486

0 commit comments

Comments
 (0)