Skip to content

Commit 4888e21

Browse files
committed
generalize error handling
1 parent 9d86d45 commit 4888e21

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

src/stdlib_linalg_eigenvalues.fypp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
submodule (stdlib_linalg) stdlib_linalg_eigenvalues
77
!! Compute eigenvalues and eigenvectors
88
use stdlib_linalg_constants
9-
use stdlib_linalg_lapack, only: geev, heev, syev
9+
use stdlib_linalg_lapack, only: geev, ggev, heev, syev
1010
use stdlib_linalg_state, only: linalg_state_type, linalg_error_handling, LINALG_ERROR, &
1111
LINALG_INTERNAL_ERROR, LINALG_VALUE_ERROR, LINALG_SUCCESS
1212
implicit none(type,external)
@@ -29,13 +29,13 @@ submodule (stdlib_linalg) stdlib_linalg_eigenvalues
2929
end function symmetric_triangle_task
3030

3131
!> Process GEEV output flags
32-
elemental subroutine handle_geev_info(err,info,m,n)
32+
pure subroutine handle_geev_info(err,info,shapea)
3333
!> Error handler
3434
type(linalg_state_type), intent(inout) :: err
3535
!> GEEV return flag
3636
integer(ilp), intent(in) :: info
3737
!> Input matrix size
38-
integer(ilp), intent(in) :: m,n
38+
integer(ilp), intent(in) :: shapea(2)
3939

4040
select case (info)
4141
case (0)
@@ -46,7 +46,7 @@ submodule (stdlib_linalg) stdlib_linalg_eigenvalues
4646
case (-2)
4747
err = linalg_state_type(this,LINALG_INTERNAL_ERROR,'Invalid task ID: right eigenvectors.')
4848
case (-5,-3)
49-
err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size: a=',[m,n])
49+
err = linalg_state_type(this,LINALG_VALUE_ERROR,'invalid matrix size: a=',shapea)
5050
case (-9)
5151
err = linalg_state_type(this,LINALG_VALUE_ERROR,'insufficient left vector matrix size.')
5252
case (-11)
@@ -322,7 +322,7 @@ submodule (stdlib_linalg) stdlib_linalg_eigenvalues
322322
#{if rt.startswith('complex')}#lambda,#{else}#lreal,limag,#{endif}# &
323323
umat,ldu,vmat,ldv,&
324324
work_dummy,lwork,#{if rt.startswith('complex')}#rwork,#{endif}#info)
325-
call handle_geev_info(err0,info,m,n)
325+
call handle_${ei}$_info(err0,info,[m,n]#{if ei=='ggev'}#,shape(bmat)#{endif}#)
326326

327327
! Compute eigenvalues
328328
if (info==0) then
@@ -336,7 +336,7 @@ submodule (stdlib_linalg) stdlib_linalg_eigenvalues
336336
#{if rt.startswith('complex')}#lambda,#{else}#lreal,limag,#{endif}# &
337337
umat,ldu,vmat,ldv,&
338338
work,lwork,#{if rt.startswith('complex')}#rwork,#{endif}#info)
339-
call handle_geev_info(err0,info,m,n)
339+
call handle_${ei}$_info(err0,info,[m,n]#{if ei=='ggev'}#,shape(bmat)#{endif}#)
340340

341341
endif
342342

0 commit comments

Comments
 (0)