Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f4ba488

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /