File: example_specialmatrices_cdp_spmv.f90

package info (click to toggle)
fortran-stdlib 0.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 34,008 kB
  • sloc: f90: 24,178; ansic: 1,244; cpp: 623; python: 119; makefile: 13
file content (30 lines) | stat: -rw-r--r-- 899 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
program example_tridiagonal_matrix_cdp
    use stdlib_linalg_constants, only: dp
    use stdlib_specialmatrices, only: tridiagonal_cdp_type, tridiagonal, dense, spmv
    implicit none

    integer, parameter :: n = 5
    type(tridiagonal_cdp_type) :: A
    complex(dp) :: dl(n-1), dv(n), du(n-1)
    complex(dp) :: x(n), y(n), y_dense(n)
    integer :: i
    complex(dp) :: alpha, beta

    dl = [(cmplx(i,i, dp), i=1, n - 1)]
    dv = [(cmplx(2*i,2*i, dp), i=1, n)]
    du = [(cmplx(3*i,3*i, dp), i=1, n - 1)]

    A = tridiagonal(dl, dv, du)

    x = (1.0_dp, 0.0_dp)
    y = (3.0_dp, -7.0_dp)
    y_dense = (0.0_dp, 0.0_dp)
    alpha = cmplx(2.0_dp, 3.0_dp)
    beta = cmplx(-1.0_dp, 5.0_dp)

    y_dense = alpha * matmul(dense(A), x) + beta * y
    call spmv(A, x, y, alpha, beta)

    print *, 'dense       :', y_dense
    print *, 'Tridiagonal :', y
end program example_tridiagonal_matrix_cdp