3
3
submodule (stdlib_linalg) stdlib_linalg_qr
4
4
use stdlib_linalg_constants
5
5
use stdlib_linalg_lapack, only: geqrf, orgqr, ungqr
6
+ use stdlib_linalg_lapack_aux, only: handle_geqrf_info
6
7
use stdlib_linalg_state, only: linalg_state_type, linalg_error_handling, LINALG_ERROR, &
7
8
LINALG_INTERNAL_ERROR, LINALG_VALUE_ERROR
8
9
implicit none
@@ -64,29 +65,7 @@ submodule (stdlib_linalg) stdlib_linalg_qr
64
65
err = linalg_state_type(this,LINALG_INTERNAL_ERROR,'catastrophic error')
65
66
end select
66
67
67
- end subroutine handle_orgqr_info
68
-
69
- elemental subroutine handle_geqrf_info(info,m,n,lwork,err)
70
- integer(ilp), intent(in) :: info,m,n,lwork
71
- type(linalg_state_type), intent(out) :: err
72
-
73
- ! Process output
74
- select case (info)
75
- case (0)
76
- ! Success
77
- case (-1)
78
- err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size m=',m)
79
- case (-2)
80
- err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size n=',n)
81
- case (-4)
82
- err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size a=',[m,n])
83
- case (-7)
84
- err = linalg_state_type(this,LINALG_ERROR,'invalid input for lwork=',lwork)
85
- case default
86
- err = linalg_state_type(this,LINALG_INTERNAL_ERROR,'catastrophic error')
87
- end select
88
-
89
- end subroutine handle_geqrf_info
68
+ end subroutine handle_orgqr_info
90
69
91
70
#:for rk,rt,ri in RC_KINDS_TYPES
92
71
@@ -113,7 +92,7 @@ submodule (stdlib_linalg) stdlib_linalg_qr
113
92
! QR space
114
93
lwork_qr = -1_ilp
115
94
call geqrf(m,n,a_dummy,m,tau_dummy,work_dummy,lwork_qr,info)
116
- call handle_geqrf_info(info,m,n,lwork_qr,err0)
95
+ call handle_geqrf_info(this, info,m,n,lwork_qr,err0)
117
96
if (err0%error()) then
118
97
call linalg_error_handling(err0,err)
119
98
return
@@ -224,7 +203,7 @@ submodule (stdlib_linalg) stdlib_linalg_qr
224
203
225
204
! Compute factorization.
226
205
call geqrf(m,n,amat,m,tau,work,lwork,info)
227
- call handle_geqrf_info(info,m,n,lwork,err0)
206
+ call handle_geqrf_info(this, info,m,n,lwork,err0)
228
207
229
208
if (err0%ok()) then
230
209
0 commit comments