6
6
submodule (stdlib_linalg) stdlib_linalg_eigenvalues
7
7
!! Compute eigenvalues and eigenvectors
8
8
use stdlib_linalg_constants
9
- use stdlib_linalg_lapack, only: geev, heev, syev
9
+ use stdlib_linalg_lapack, only: geev, ggev, heev, syev
10
10
use stdlib_linalg_state, only: linalg_state_type, linalg_error_handling, LINALG_ERROR, &
11
11
LINALG_INTERNAL_ERROR, LINALG_VALUE_ERROR, LINALG_SUCCESS
12
12
implicit none(type,external)
@@ -29,13 +29,13 @@ submodule (stdlib_linalg) stdlib_linalg_eigenvalues
29
29
end function symmetric_triangle_task
30
30
31
31
!> Process GEEV output flags
32
- elemental subroutine handle_geev_info(err,info,m,n )
32
+ pure subroutine handle_geev_info(err,info,shapea )
33
33
!> Error handler
34
34
type(linalg_state_type), intent(inout) :: err
35
35
!> GEEV return flag
36
36
integer(ilp), intent(in) :: info
37
37
!> Input matrix size
38
- integer(ilp), intent(in) :: m,n
38
+ integer(ilp), intent(in) :: shapea(2)
39
39
40
40
select case (info)
41
41
case (0)
@@ -46,7 +46,7 @@ submodule (stdlib_linalg) stdlib_linalg_eigenvalues
46
46
case (-2)
47
47
err = linalg_state_type(this,LINALG_INTERNAL_ERROR,'Invalid task ID: right eigenvectors.')
48
48
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 )
50
50
case (-9)
51
51
err = linalg_state_type(this,LINALG_VALUE_ERROR,'insufficient left vector matrix size.')
52
52
case (-11)
@@ -322,7 +322,7 @@ submodule (stdlib_linalg) stdlib_linalg_eigenvalues
322
322
#{if rt.startswith('complex')}#lambda,#{else}#lreal,limag,#{endif}# &
323
323
umat,ldu,vmat,ldv,&
324
324
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}# )
326
326
327
327
! Compute eigenvalues
328
328
if (info==0) then
@@ -336,7 +336,7 @@ submodule (stdlib_linalg) stdlib_linalg_eigenvalues
336
336
#{if rt.startswith('complex')}#lambda,#{else}#lreal,limag,#{endif}# &
337
337
umat,ldu,vmat,ldv,&
338
338
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}# )
340
340
341
341
endif
342
342
0 commit comments