@@ -165,7 +165,7 @@ submodule (stdlib_linalg) stdlib_linalg_solve
165165 ! Local variables
166166 type(linalg_state_type) :: err0
167167 integer(ilp) :: lda,n,ldb,ldx,nrhs,nrhsx,info
168- character :: triangle
168+ character :: uplo
169169 ${rt}$, pointer :: xmat(:,:)
170170
171171 ! Problem sizes
@@ -176,8 +176,8 @@ submodule (stdlib_linalg) stdlib_linalg_solve
176176 ldx = size(x,1,kind=ilp)
177177 nrhsx = size(x,kind=ilp)/ldx
178178
179- ! Set triangle based on lower flag (REQUIRED argument)
180- triangle = merge('L','U',lower)
179+ ! Set uplo based on lower flag (REQUIRED argument)
180+ uplo = merge('L','U',lower)
181181
182182 ! Validate dimensions
183183 if (any([lda,n,ldb]<1) .or. any([lda,ldb,ldx]/=n) .or. nrhsx/=nrhs) then
@@ -194,10 +194,10 @@ submodule (stdlib_linalg) stdlib_linalg_solve
194194 xmat(1:n,1:nrhs) => x
195195
196196 ! Solve the system using LAPACK POTRS
197- call potrs(triangle ,n,nrhs,a,lda,xmat,n,info)
197+ call potrs(uplo ,n,nrhs,a,lda,xmat,n,info)
198198
199199 ! Handle errors using standard handler
200- call handle_potrs_info(this,info,triangle ,n,nrhs,lda,n,err0)
200+ call handle_potrs_info(this,info,uplo ,n,nrhs,lda,n,err0)
201201
202202 ! Process output and return
203203 call linalg_error_handling(err0,err)
@@ -232,7 +232,7 @@ submodule (stdlib_linalg) stdlib_linalg_solve
232232 type(linalg_state_type) :: err0
233233 integer(ilp) :: lda,n,ldb,ldx,nrhs,nrhsx,info
234234 logical(lk) :: lower_,copy_a
235- character :: triangle
235+ character :: uplo
236236 ${rt}$, pointer :: xmat(:,:),amat(:,:)
237237
238238 ! Problem sizes
@@ -244,16 +244,11 @@ submodule (stdlib_linalg) stdlib_linalg_solve
244244 nrhsx = size(x,kind=ilp)/ldx
245245
246246 ! Default: use lower triangular
247- lower_ = .true._lk
248- if (present(lower)) lower_ = lower
249- triangle = merge('L','U',lower_)
247+ lower_ = optval(lower, .true._lk)
248+ uplo = merge('L','U',lower_)
250249
251250 ! Can A be overwritten? By default, do not overwrite
252- if (present(overwrite_a)) then
253- copy_a = .not.overwrite_a
254- else
255- copy_a = .true._lk
256- endif
251+ copy_a = .not. optval(overwrite_a, .false._lk)
257252
258253 ! Validate dimensions
259254 if (any([lda,n,ldb]<1) .or. any([lda,ldb,ldx]/=n) .or. nrhsx/=nrhs) then
@@ -277,10 +272,10 @@ submodule (stdlib_linalg) stdlib_linalg_solve
277272 xmat(1:n,1:nrhs) => x
278273
279274 ! Factorize AND solve using LAPACK POSV
280- call posv(triangle ,n,nrhs,amat,lda,xmat,n,info)
275+ call posv(uplo ,n,nrhs,amat,lda,xmat,n,info)
281276
282277 ! Handle errors using standard handler
283- call handle_posv_info(this,info,triangle ,n,nrhs,lda,n,err0)
278+ call handle_posv_info(this,info,uplo ,n,nrhs,lda,n,err0)
284279
285280 if (copy_a) deallocate(amat)
286281
0 commit comments