@@ -32,7 +32,7 @@ contains
32
32
if (present(center)) then
33
33
res = sum((x - center)**order) / n
34
34
else
35
- res = sum((x)**order) / n
35
+ res = sum((x - mean(x) )**order) / n
36
36
end if
37
37
38
38
end function ${RName}$
@@ -62,7 +62,7 @@ contains
62
62
if (present(center)) then
63
63
res = sum((real(x, dp) - center)**order) / n
64
64
else
65
- res = sum((real(x, dp))**order) / n
65
+ res = sum((real(x, dp) - mean(x) )**order) / n
66
66
end if
67
67
68
68
end function ${RName}$
@@ -83,6 +83,7 @@ contains
83
83
84
84
integer :: i
85
85
real(${k1}$) :: n
86
+ ${t1}$, allocatable :: mean_${ranksuffix(rank-1)}$
86
87
87
88
if (.not.optval(mask, .true.)) then
88
89
res = ieee_value(1._${k1}$, ieee_quiet_nan)
@@ -100,9 +101,11 @@ contains
100
101
res = res + (x${select_subarray(rank, [(fi, 'i')])}$ - center)**order
101
102
end do
102
103
else
104
+ allocate(mean_, source = mean(x, ${fi}$))
103
105
do i = 1, size(x, ${fi}$)
104
- res = res + (x${select_subarray(rank, [(fi, 'i')])}$)**order
106
+ res = res + (x${select_subarray(rank, [(fi, 'i')])}$ - mean_ )**order
105
107
end do
108
+ deallocate(mean_)
106
109
end if
107
110
#:endfor
108
111
case default
@@ -128,6 +131,7 @@ contains
128
131
129
132
integer :: i
130
133
real(dp) :: n
134
+ real(dp), allocatable :: mean_${ranksuffix(rank-1)}$
131
135
132
136
if (.not.optval(mask, .true.)) then
133
137
res = ieee_value(1._dp, ieee_quiet_nan)
@@ -146,9 +150,11 @@ contains
146
150
center)**order
147
151
end do
148
152
else
153
+ allocate(mean_, source = mean(x, ${fi}$))
149
154
do i = 1, size(x, ${fi}$)
150
- res = res + (real(x${select_subarray(rank, [(fi, 'i')])}$, dp))**order
155
+ res = res + (real(x${select_subarray(rank, [(fi, 'i')])}$, dp) - mean_ )**order
151
156
end do
157
+ deallocate(mean_)
152
158
end if
153
159
#:endfor
154
160
case default
@@ -178,7 +184,7 @@ contains
178
184
if (present(center)) then
179
185
res = sum((x - center)**order, mask) / n
180
186
else
181
- res = sum((x)**order, mask) / n
187
+ res = sum((x - mean(x, mask) )**order, mask) / n
182
188
end if
183
189
184
190
end function ${RName}$
@@ -203,7 +209,7 @@ contains
203
209
if (present(center)) then
204
210
res = sum((real(x, dp) - center)**order, mask) / n
205
211
else
206
- res = sum((real(x, dp))**order, mask) / n
212
+ res = sum((real(x, dp) - mean(x,mask) )**order, mask) / n
207
213
end if
208
214
209
215
end function ${RName}$
@@ -224,6 +230,7 @@ contains
224
230
225
231
integer :: i
226
232
real(${k1}$) :: n${reduced_shape('x', rank, 'dim')}$
233
+ ${t1}$, allocatable :: mean_${ranksuffix(rank-1)}$
227
234
228
235
n = count(mask, dim)
229
236
@@ -243,15 +250,17 @@ contains
243
250
mask${select_subarray(rank, [(fi, 'i')])}$)
244
251
end do
245
252
else
253
+ allocate(mean_, source = mean(x, ${fi}$, mask))
246
254
do i = 1, size(x, ${fi}$)
247
- res = res + merge( (x${select_subarray(rank, [(fi, 'i')])}$)**order,&
255
+ res = res + merge( (x${select_subarray(rank, [(fi, 'i')])}$ - mean_ )**order,&
248
256
#:if t1[0] == 'r'
249
257
0._${k1}$,&
250
258
#:else
251
259
cmplx(0,0,kind=${k1}$),&
252
260
#:endif
253
261
mask${select_subarray(rank, [(fi, 'i')])}$)
254
262
end do
263
+ deallocate(mean_)
255
264
end if
256
265
#:endfor
257
266
case default
@@ -277,6 +286,7 @@ contains
277
286
278
287
integer :: i
279
288
real(dp) :: n${reduced_shape('x', rank, 'dim')}$
289
+ real(dp), allocatable :: mean_${ranksuffix(rank-1)}$
280
290
281
291
n = count(mask, dim)
282
292
@@ -291,11 +301,13 @@ contains
291
301
0._dp, mask${select_subarray(rank, [(fi, 'i')])}$)
292
302
end do
293
303
else
304
+ allocate(mean_, source = mean(x, ${fi}$, mask))
294
305
do i = 1, size(x, ${fi}$)
295
- res = res + merge((real(x${select_subarray(rank, [(fi, 'i')])}$, dp))&
306
+ res = res + merge((real(x${select_subarray(rank, [(fi, 'i')])}$, dp) - mean_ )&
296
307
**order,&
297
308
0._dp, mask${select_subarray(rank, [(fi, 'i')])}$)
298
309
end do
310
+ deallocate(mean_)
299
311
end if
300
312
#:endfor
301
313
case default
0 commit comments