Skip to content

Commit 5532ded

Browse files
committed
interpret *LANGE inputs
1 parent 427bc68 commit 5532ded

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

src/stdlib_linalg_norms.fypp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ submodule(stdlib_linalg) stdlib_linalg_norms
2424
integer(ilp), parameter :: NORM_INF = +huge(0_ilp) ! infinity norm
2525
integer(ilp), parameter :: NORM_POW_LAST = NORM_INF - 1_ilp
2626
integer(ilp), parameter :: NORM_MINUSINF = -huge(0_ilp)
27+
28+
!> Wrappers to LAPACK *LANGE matrix norm flags
29+
character, parameter :: LANGE_NORM_MAT = 'M' ! maxval(sum(abs(a))) ! over whole matrix: unused
30+
character, parameter :: LANGE_NORM_ONE = '1' ! maxval(sum(abs(a),1)) ! over columns
31+
character, parameter :: LANGE_NORM_INF = 'I' ! maxval(sum(abs(a),2)) ! over rows
32+
character, parameter :: LANGE_NORM_TWO = 'E' ! "Euclidean" or "Frobenius"
2733

2834
interface parse_norm_type
2935
module procedure parse_norm_type_integer
@@ -100,6 +106,27 @@ submodule(stdlib_linalg) stdlib_linalg_norms
100106

101107
end subroutine parse_norm_type_character
102108

109+
!> From a user norm request, generate a *LANGE task command
110+
pure subroutine lange_task_request(norm_type,lange_task,err)
111+
!> Parsed matrix norm type
112+
integer(ilp), intent(in) :: norm_type
113+
!> LANGE task
114+
character, intent(out) :: lange_task
115+
!> Error flag
116+
type(linalg_state_type), intent(inout) :: err
117+
118+
select case (norm_type)
119+
case (NORM_INF)
120+
lange_task = LANGE_NORM_INF
121+
case (NORM_ONE)
122+
lange_task = LANGE_NORM_ONE
123+
case (NORM_TWO)
124+
lange_task = LANGE_NORM_TWO
125+
case default
126+
err = linalg_state_type(this,LINALG_VALUE_ERROR,'Order ',norm_type,' is not a valid matrix norm input.')
127+
end select
128+
end subroutine lange_task_request
129+
103130
#:for rk,rt,ri in ALL_KINDS_TYPES
104131

105132
! Compute stride of a 1d array

0 commit comments

Comments
 (0)