Skip to content

Commit f4ba488

Browse files
committed
Moved handle_orgqr_info
1 parent 611b280 commit f4ba488

File tree

2 files changed

+29
-26
lines changed

2 files changed

+29
-26
lines changed

src/lapack/stdlib_linalg_lapack_aux.fypp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ module stdlib_linalg_lapack_aux
4646
public :: handle_gesv_info
4747
public :: handle_gees_info
4848
public :: handle_geqrf_info
49+
public :: handle_orgqr_info
4950

5051
! SELCTG is a LOGICAL FUNCTION of three DOUBLE PRECISION arguments
5152
! used to select eigenvalues to sort to the top left of the Schur form.
@@ -1457,4 +1458,29 @@ module stdlib_linalg_lapack_aux
14571458

14581459
end subroutine handle_geqrf_info
14591460

1461+
elemental subroutine handle_orgqr_info(this,info,m,n,k,lwork,err)
1462+
character(len=*), intent(in) :: this
1463+
integer(ilp), intent(in) :: info,m,n,k,lwork
1464+
type(linalg_state_type), intent(out) :: err
1465+
1466+
! Process output
1467+
select case (info)
1468+
case (0)
1469+
! Success
1470+
case (-1)
1471+
err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size m=',m)
1472+
case (-2)
1473+
err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size n=',n)
1474+
case (-4)
1475+
err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid k=min(m,n)=',k)
1476+
case (-5)
1477+
err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size a=',[m,n])
1478+
case (-8)
1479+
err = linalg_state_type(this,LINALG_ERROR,'invalid input for lwork=',lwork)
1480+
case default
1481+
err = linalg_state_type(this,LINALG_INTERNAL_ERROR,'catastrophic error')
1482+
end select
1483+
1484+
end subroutine handle_orgqr_info
1485+
14601486
end module stdlib_linalg_lapack_aux

src/stdlib_linalg_qr.fypp

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
submodule (stdlib_linalg) stdlib_linalg_qr
44
use stdlib_linalg_constants
55
use stdlib_linalg_lapack, only: geqrf, orgqr, ungqr
6-
use stdlib_linalg_lapack_aux, only: handle_geqrf_info
6+
use stdlib_linalg_lapack_aux, only: handle_geqrf_info, handle_orgqr_info
77
use stdlib_linalg_state, only: linalg_state_type, linalg_error_handling, LINALG_ERROR, &
88
LINALG_INTERNAL_ERROR, LINALG_VALUE_ERROR
99
implicit none
@@ -43,29 +43,6 @@ submodule (stdlib_linalg) stdlib_linalg_qr
4343

4444
end subroutine check_problem_size
4545

46-
elemental subroutine handle_orgqr_info(info,m,n,k,lwork,err)
47-
integer(ilp), intent(in) :: info,m,n,k,lwork
48-
type(linalg_state_type), intent(out) :: err
49-
50-
! Process output
51-
select case (info)
52-
case (0)
53-
! Success
54-
case (-1)
55-
err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size m=',m)
56-
case (-2)
57-
err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size n=',n)
58-
case (-4)
59-
err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid k=min(m,n)=',k)
60-
case (-5)
61-
err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size a=',[m,n])
62-
case (-8)
63-
err = linalg_state_type(this,LINALG_ERROR,'invalid input for lwork=',lwork)
64-
case default
65-
err = linalg_state_type(this,LINALG_INTERNAL_ERROR,'catastrophic error')
66-
end select
67-
68-
end subroutine handle_orgqr_info
6946

7047
#:for rk,rt,ri in RC_KINDS_TYPES
7148

@@ -103,7 +80,7 @@ submodule (stdlib_linalg) stdlib_linalg_qr
10380
lwork_ord = -1_ilp
10481
call #{if rt.startswith('complex')}# ungqr #{else}# orgqr #{endif}# &
10582
(m,m,k,a_dummy,m,tau_dummy,work_dummy,lwork_ord,info)
106-
call handle_orgqr_info(info,m,n,k,lwork_ord,err0)
83+
call handle_orgqr_info(this,info,m,n,k,lwork_ord,err0)
10784
if (err0%error()) then
10885
call linalg_error_handling(err0,err)
10986
return
@@ -215,7 +192,7 @@ submodule (stdlib_linalg) stdlib_linalg_qr
215192
! Convert K elementary reflectors tau(1:k) -> orthogonal matrix Q
216193
call #{if rt.startswith('complex')}# ungqr #{else}# orgqr #{endif}# &
217194
(q1,q2,k,amat,lda,tau,work,lwork,info)
218-
call handle_orgqr_info(info,m,n,k,lwork,err0)
195+
call handle_orgqr_info(this,info,m,n,k,lwork,err0)
219196

220197
! Copy result back to Q
221198
if (.not.use_q_matrix) q = amat(:q1,:q2)

0 commit comments

Comments
 (0)