@@ -24,6 +24,12 @@ submodule(stdlib_linalg) stdlib_linalg_norms
24
24
integer(ilp), parameter :: NORM_INF = +huge(0_ilp) ! infinity norm
25
25
integer(ilp), parameter :: NORM_POW_LAST = NORM_INF - 1_ilp
26
26
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"
27
33
28
34
interface parse_norm_type
29
35
module procedure parse_norm_type_integer
@@ -100,6 +106,27 @@ submodule(stdlib_linalg) stdlib_linalg_norms
100
106
101
107
end subroutine parse_norm_type_character
102
108
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
+
103
130
#:for rk,rt,ri in ALL_KINDS_TYPES
104
131
105
132
! Compute stride of a 1d array
0 commit comments