Skip to content

Commit 7fd2586

Browse files
committed
backward solve to use Lt marix
1 parent f027017 commit 7fd2586

File tree

2 files changed

+23
-23
lines changed

2 files changed

+23
-23
lines changed

src/stdlib_linalg_iterative_aux.fypp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,17 @@ contains
3232
end do
3333
end subroutine
3434

35-
module subroutine solve_backward_triangular_dense_${s}$(U,b,x)
36-
${t}$, intent(in) :: U(:,:)
35+
module subroutine solve_backward_triangular_dense_${s}$(Lt,b,x)
36+
${t}$, intent(in) :: Lt(:,:)
3737
${t}$, intent(in) :: b(:)
3838
${t}$, intent(inout) :: x(:)
3939

4040
integer(ilp) :: i, j, m
4141

42-
do j = size(U,dim=2), 1, -1
42+
do j = size(Lt,dim=2), 1, -1
4343
x(j) = b(j)
4444
do i = 1, j-1
45-
x(i) = x(i) - U(i,j)*x(j)
45+
x(i) = x(i) - Lt(j,i)*x(j)
4646
end do
4747
end do
4848
end subroutine
@@ -88,8 +88,8 @@ contains
8888
end select
8989
end subroutine
9090

91-
module subroutine solve_backward_triangular_csr_${s}$(U,b,x)
92-
type(CSR_${s}$_type), intent(in) :: U
91+
module subroutine solve_backward_triangular_csr_${s}$(Lt,b,x)
92+
type(CSR_${s}$_type), intent(in) :: Lt
9393
${t}$, intent(in) :: b(:)
9494
${t}$, intent(inout) :: x(:)
9595
${t}$ :: aux
@@ -98,30 +98,30 @@ contains
9898
integer(ilp) :: i, j, m
9999

100100
baux = zero_${s}$
101-
select case (U%storage)
101+
select case (Lt%storage)
102102
case(sparse_full)
103-
do i = U%nrows, 1, -1
103+
do i = Lt%nrows, 1, -1
104104
x(i) = b(i) - baux(i)
105-
do m = U%rowptr(i), U%rowptr(i+1)-1
106-
j = U%col(m)
105+
do m = Lt%rowptr(i), Lt%rowptr(i+1)-1
106+
j = Lt%col(m)
107107
if(j<i) cycle !> skip lower part of the matrix
108-
baux(j) = baux(j) + U%data(m)*x(i)
108+
baux(j) = baux(j) + Lt%data(m)*x(i)
109109
end do
110110
end do
111111
case(sparse_lower)
112-
do i = U%nrows, 1, -1
112+
do i = Lt%nrows, 1, -1
113113
x(i) = b(i) - baux(i)
114-
do m = U%rowptr(i), U%rowptr(i+1)-2
115-
j = U%col(m)
116-
baux(j) = baux(j) + U%data(m)*x(i)
114+
do m = Lt%rowptr(i), Lt%rowptr(i+1)-2
115+
j = Lt%col(m)
116+
baux(j) = baux(j) + Lt%data(m)*x(i)
117117
end do
118118
end do
119119
case(sparse_upper)
120-
do i = U%nrows, 1, -1
120+
do i = Lt%nrows, 1, -1
121121
x(i) = b(i)
122-
do m = U%rowptr(i)+1, U%rowptr(i+1)-1
123-
j = U%col(m)
124-
x(i) = x(i) - U%data(m)*x(j)
122+
do m = Lt%rowptr(i)+1, Lt%rowptr(i+1)-1
123+
j = Lt%col(m)
124+
x(i) = x(i) - Lt%data(m)*x(j)
125125
end do
126126
end do
127127
end select

src/stdlib_linalg_iterative_solvers.fypp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,13 +153,13 @@ module stdlib_linalg_iterative_solvers
153153
interface solve_backward_triangular
154154
!> Solve the system U x = b, where U is a strictly upper triangular matrix (diagonal assumed = 1).
155155
#:for k, t, s in R_KINDS_TYPES
156-
module subroutine solve_backward_triangular_dense_${s}$(U,b,x)
157-
${t}$, intent(in) :: U(:,:)
156+
module subroutine solve_backward_triangular_dense_${s}$(Lt,b,x)
157+
${t}$, intent(in) :: Lt(:,:)
158158
${t}$, intent(in) :: b(:)
159159
${t}$, intent(inout) :: x(:)
160160
end subroutine
161-
module subroutine solve_backward_triangular_csr_${s}$(U,b,x)
162-
type(CSR_${s}$_type), intent(in) :: U
161+
module subroutine solve_backward_triangular_csr_${s}$(Lt,b,x)
162+
type(CSR_${s}$_type), intent(in) :: Lt
163163
${t}$, intent(in) :: b(:)
164164
${t}$, intent(inout) :: x(:)
165165
end subroutine

0 commit comments

Comments
 (0)