@@ -9,10 +9,8 @@ program test_varn
9
9
real (dp), parameter :: dptol = 1000 * epsilon (1._dp )
10
10
11
11
integer (int32) :: i321(5 ) = [1 , 2 , 3 , 4 , 5 ]
12
- integer (int64) :: i641(5 ) = [1 , 2 , 3 , 4 , 5 ]
13
12
14
13
integer (int32), allocatable :: i32(:,:), i323(:, :, :)
15
- integer (int64), allocatable :: i64(:,:), i643(:, :, :)
16
14
17
15
real (sp) :: s1(5 ) = [1.0_sp , 2.0_sp , 3.0_sp , 4.0_sp , 5.0_sp ]
18
16
real (dp) :: d1(5 ) = [1.0_dp , 2.0_dp , 3.0_dp , 4.0_dp , 5.0_dp ]
@@ -24,17 +22,11 @@ program test_varn
24
22
9._dp , 10._dp , 11._dp , 12._dp ], [4 , 3 ])
25
23
26
24
27
- complex (sp) :: cs1(5 ) = [ cmplx (0.57706_sp , 0.00000_sp ),&
28
- cmplx (0.00000_sp , 1.44065_sp ),&
29
- cmplx (1.26401_sp , 0.00000_sp ),&
30
- cmplx (0.00000_sp , 0.88833_sp ),&
31
- cmplx (1.14352_sp , 0.00000_sp )]
32
25
complex (dp) :: cd1(5 ) = [ cmplx (0.57706_dp , 0.00000_dp ),&
33
26
cmplx (0.00000_dp , 1.44065_dp ),&
34
27
cmplx (1.26401_dp , 0.00000_dp ),&
35
28
cmplx (0.00000_dp , 0.88833_dp ),&
36
29
cmplx (1.14352_dp , 0.00000_dp )]
37
- complex (sp) :: cs(5 ,3 )
38
30
complex (dp) :: cd(5 ,3 )
39
31
40
32
@@ -125,5 +117,242 @@ program test_varn
125
117
], [size (s3,1 ), size (s3,2 )] ))&
126
118
< sptol ))
127
119
120
+ ! dp
121
+ ! 1dim
122
+ print * ,' test_dp_1dim'
123
+ call assert( abs (var(d1, corrected= .false. ) - 2.5_dp * (4._dp / 5 .)) < dptol)
124
+ call assert( abs (var(d1, dim= 1 , corrected= .false. ) - 2.5_dp * (4._dp / 5 .)) < dptol)
125
+
126
+ print * ,' test_dp_1dim_mask'
127
+ call assert( isnan(var(d1, .false. , corrected= .false. )))
128
+ call assert( isnan(var(d1, 1 , .false. , corrected= .false. )))
129
+
130
+ print * ,' test_dp_1dim_mask_array'
131
+ call assert( abs (var(d1, d1 < 5 , corrected= .false. ) - 5._dp / 4 .) < dptol)
132
+ call assert( isnan((var(d1, d1 < 0 , corrected= .false. ))))
133
+ call assert( abs (var(d1, d1 == 1 , corrected= .false. )) < dptol)
134
+ call assert( abs (var(d1, 1 , d1 < 5 , corrected= .false. ) - 5._dp / 4 .) < dptol)
135
+
136
+ ! 2dim
137
+ print * ,' test_dp_2dim'
138
+ call assert( abs (var(d, corrected= .false. ) - 13._dp * 11 ./ 12 .) < dptol)
139
+ call assert( all ( abs ( var(d, 1 , corrected= .false. ) - [20 ., 20 ., 5 .]/ 4._dp ) < dptol))
140
+ call assert( all ( abs ( var(d, 2 , corrected= .false. ) - &
141
+ [38._dp , 86._dp / 3._dp , 62._dp / 3._dp , 14._dp ]/ 3._dp ) < dptol))
142
+
143
+ print * ,' test_dp_2dim_mask'
144
+ call assert( isnan(var(d, .false. , corrected= .false. )))
145
+ call assert( any (isnan(var(d, 1 , .false. , corrected= .false. ))))
146
+ call assert( any (isnan(var(d, 2 , .false. , corrected= .false. ))))
147
+
148
+ print * ,' test_dp_2dim_mask_array'
149
+ call assert( abs (var(d, d < 11 , corrected= .false. ) - 2.75_dp * 3._dp ) < dptol)
150
+ call assert( all ( abs ( var(d, 1 , d < 11 , corrected= .false. ) - &
151
+ [5._dp , 5._dp , 0.25_dp ]) < dptol))
152
+ call assert( all ( abs ( var(d, 2 , d < 11 , corrected= .false. ) - &
153
+ [38._dp / 3 ., 86._dp / 9 ., 0.25_dp , 0.25_dp ]) < dptol))
154
+
155
+
156
+ ! 3dim
157
+ allocate (d3(size (d,1 ),size (d,2 ),3 ))
158
+ d3(:,:,1 )= d;
159
+ d3(:,:,2 )= d* 2 ;
160
+ d3(:,:,3 )= d* 4 ;
161
+
162
+ print * ,' test_dp_3dim'
163
+ call assert( abs (var(d3, corrected= .false. ) - 153.4_dp * 35._dp / 36._dp ) < dptol)
164
+ call assert( all ( abs ( var(d3, 1 , corrected= .false. ) - &
165
+ reshape ([20._dp , 20._dp , 5._dp ,&
166
+ 4 * 20._dp , 4 * 20._dp , 4 * 5._dp ,&
167
+ 16 * 20._dp , 16 * 20._dp , 16 * 5._dp ],&
168
+ [size (d3,2 ), size (d3,3 )])/ 4._dp )&
169
+ < dptol))
170
+ call assert( all ( abs ( var(d3, 2 , corrected= .false. ) - &
171
+ reshape ([38._dp , 86 . / 3._dp , 62 . / 3._dp , 14._dp ,&
172
+ 8 * 19._dp , 8 * 43 . / 3._dp , 8 * 31 . / 3._dp , 8 * 7._dp ,&
173
+ 32 * 19._dp , 32 * 43 . / 3._dp , 32 * 31 . / 3._dp , 32 * 7._dp ],&
174
+ [size (d3,1 ), size (d3,3 )] )/ 3._dp )&
175
+ < dptol))
176
+ print * ,' test_dp_3dim'
177
+ call assert( all (abs ( var(d3, 3 , corrected= .false. ) - &
178
+ reshape ([ 7._dp / 3 ., 21._dp , 175._dp / 3 .,&
179
+ 343._dp / 3 ., 28._dp / 3 ., 112._dp / 3 .,&
180
+ 84._dp , 448._dp / 3 ., 189._dp ,&
181
+ 700._dp / 3 ., 847._dp / 3 ., 336._dp ],&
182
+ [size (d3,1 ), size (d3,2 )] )* 2._dp / 3._dp )&
183
+ < dptol))
184
+
185
+ print * ,' test_dp_3dim_mask'
186
+ call assert( isnan(var(d3, .false. , corrected= .false. )))
187
+ call assert( any (isnan(var(d3, 1 , .false. , corrected= .false. ))))
188
+ call assert( any (isnan(var(d3, 2 , .false. , corrected= .false. ))))
189
+ call assert( any (isnan(var(d3, 3 , .false. , corrected= .false. ))))
190
+
191
+ print * ,' test_dp_3dim_mask_array'
192
+ call assert( abs (var(d3, d3 < 11 , corrected= .false. ) - &
193
+ 7.7370242214532876_dp ) < dptol)
194
+ call assert( all ( abs ( var(d3, 1 , d3 < 45 , corrected= .false. ) - &
195
+ reshape ([5._dp , 5._dp , 1.25_dp , 20._dp , 20._dp , 5._dp ,&
196
+ 80._dp , 80._dp , 32._dp / 3 .],&
197
+ [size (d3, 2 ), size (d3, 3 )])) < dptol ))
198
+ call assert( all ( abs ( var(d3, 2 , d3 < 45 , corrected= .false. ) - &
199
+ reshape ([ 38._dp / 3 ., 86._dp / 9 ., 62._dp / 9 ., 14._dp / 3 ., 152._dp / 3 .,&
200
+ 344._dp / 9 ., 248._dp / 9 ., 168._dp / 9 ., 1824._dp / 9 .,&
201
+ 1376._dp / 9 ., 992._dp / 9 ., 4._dp &
202
+ ],&
203
+ [size (d3, 1 ), size (d3, 3 )])) < dptol ))
204
+ print * ,' test_dp_3dim_mask_array'
205
+ call assert( all ( abs ( var(d3, 3 , d3 < 45 , corrected= .false. ) - &
206
+ reshape ([14._dp / 9 ., 14._dp , 350._dp / 9 ., 686._dp / 9 ., 56._dp / 9 .,&
207
+ 224._dp / 9 ., 56._dp , 896._dp / 9 ., 126._dp , 1400._dp / 9 .,&
208
+ 1694._dp / 9 ., 36._dp &
209
+ ], [size (d3,1 ), size (d3,2 )] ))&
210
+ < dptol ))
211
+
212
+ ! int32
213
+ ! 1dim
214
+ print * ,' test_int32_1dim'
215
+ call assert( abs (var(i321, corrected= .false. ) - 2.5_dp * (4._dp / 5 .)) < dptol)
216
+ call assert( abs (var(i321, dim= 1 , corrected= .false. ) - 2.5_dp * (4._dp / 5 .)) < dptol)
217
+
218
+ print * ,' test_int32_1dim_mask'
219
+ call assert( isnan(var(i321, .false. , corrected= .false. )))
220
+ call assert( isnan(var(i321, 1 , .false. , corrected= .false. )))
221
+
222
+ print * ,' test_int32_1dim_mask_array'
223
+ call assert( abs (var(i321, i321 < 5 , corrected= .false. ) - 5._dp / 4 .) < dptol)
224
+ call assert( isnan((var(i321, i321 < 0 , corrected= .false. ))))
225
+ call assert( abs (var(i321, i321 == 1 , corrected= .false. )) < dptol)
226
+ call assert( abs (var(i321, 1 , i321 < 5 , corrected= .false. ) - 5._dp / 4 .) < dptol)
227
+
228
+ ! 2dim
229
+ i32 = d
230
+ print * ,' test_int32_2dim'
231
+ call assert( abs (var(i32, corrected= .false. ) - 13._dp * 11 ./ 12 .) < dptol)
232
+ call assert( all ( abs ( var(i32, 1 , corrected= .false. ) - &
233
+ [20 ., 20 ., 5 .]/ 4._dp ) < dptol))
234
+ call assert( all ( abs ( var(i32, 2 , corrected= .false. ) - &
235
+ [38._dp , 86._dp / 3._dp , 62._dp / 3._dp , 14._dp ]/ 3._dp ) < dptol))
236
+
237
+ print * ,' test_int32_2dim_mask'
238
+ call assert( isnan(var(i32, .false. , corrected= .false. )))
239
+ call assert( any (isnan(var(i32, 1 , .false. , corrected= .false. ))))
240
+ call assert( any (isnan(var(i32, 2 , .false. , corrected= .false. ))))
241
+
242
+ print * ,' test_int32_2dim_mask_array'
243
+ call assert( abs (var(i32, i32 < 11 , corrected= .false. ) - 2.75_dp * 3._dp ) < dptol)
244
+ call assert( all ( abs ( var(i32, 1 , i32 < 11 , corrected= .false. ) - &
245
+ [5._dp , 5._dp , 0.25_dp ]) < dptol))
246
+ call assert( all ( abs ( var(i32, 2 , i32 < 11 , corrected= .false. ) - &
247
+ [38._dp / 3 ., 86._dp / 9 ., 0.25_dp , 0.25_dp ]) < dptol))
248
+
249
+
250
+ ! 3dim
251
+ allocate (i323(size (i32,1 ),size (i32,2 ),3 ))
252
+ i323(:,:,1 )= i32;
253
+ i323(:,:,2 )= i32* 2 ;
254
+ i323(:,:,3 )= i32* 4 ;
255
+
256
+ print * ,' test_int32_3dim'
257
+ call assert( abs (var(i323, corrected= .false. ) - 153.4_dp * 35._dp / 36._dp ) < dptol)
258
+ call assert( all ( abs ( var(i323, 1 , corrected= .false. ) - &
259
+ reshape ([20._dp , 20._dp , 5._dp ,&
260
+ 4 * 20._dp , 4 * 20._dp , 4 * 5._dp ,&
261
+ 16 * 20._dp , 16 * 20._dp , 16 * 5._dp ],&
262
+ [size (i323,2 ), size (i323,3 )])/ 4._dp )&
263
+ < dptol))
264
+ call assert( all ( abs ( var(i323, 2 , corrected= .false. ) - &
265
+ reshape ([38._dp , 86 . / 3._dp , 62 . / 3._dp , 14._dp ,&
266
+ 8 * 19._dp , 8 * 43 . / 3._dp , 8 * 31 . / 3._dp , 8 * 7._dp ,&
267
+ 32 * 19._dp , 32 * 43 . / 3._dp , 32 * 31 . / 3._dp , 32 * 7._dp ],&
268
+ [size (i323,1 ), size (i323,3 )] )/ 3._dp )&
269
+ < dptol))
270
+ print * ,' test_int32_3dim'
271
+ call assert( all (abs ( var(i323, 3 , corrected= .false. ) - &
272
+ reshape ([ 7._dp / 3 ., 21._dp , 175._dp / 3 .,&
273
+ 343._dp / 3 ., 28._dp / 3 ., 112._dp / 3 .,&
274
+ 84._dp , 448._dp / 3 ., 189._dp ,&
275
+ 700._dp / 3 ., 847._dp / 3 ., 336._dp ],&
276
+ [size (i323,1 ), size (i323,2 )] )* 2._dp / 3._dp )&
277
+ < dptol))
278
+
279
+ print * ,' test_int32_3dim_mask'
280
+ call assert( isnan(var(i323, .false. , corrected= .false. )))
281
+ call assert( any (isnan(var(i323, 1 , .false. , corrected= .false. ))))
282
+ call assert( any (isnan(var(i323, 2 , .false. , corrected= .false. ))))
283
+ call assert( any (isnan(var(i323, 3 , .false. , corrected= .false. ))))
284
+
285
+ print * ,' test_int32_3dim_mask_array'
286
+ call assert( abs (var(i323, i323 < 11 , corrected= .false. ) - &
287
+ 7.7370242214532876_dp ) < dptol)
288
+ call assert( all ( abs ( var(i323, 1 , i323 < 45 , corrected= .false. ) - &
289
+ reshape ([5._dp , 5._dp , 1.25_dp , 20._dp , 20._dp , 5._dp ,&
290
+ 80._dp , 80._dp , 32._dp / 3 .],&
291
+ [size (i323, 2 ), size (i323, 3 )])) < dptol ))
292
+ call assert( all ( abs ( var(i323, 2 , i323 < 45 , corrected= .false. ) - &
293
+ reshape ([ 38._dp / 3 ., 86._dp / 9 ., 62._dp / 9 ., 14._dp / 3 ., 152._dp / 3 .,&
294
+ 344._dp / 9 ., 248._dp / 9 ., 168._dp / 9 ., 1824._dp / 9 .,&
295
+ 1376._dp / 9 ., 992._dp / 9 ., 4._dp &
296
+ ],&
297
+ [size (i323, 1 ), size (i323, 3 )])) < dptol ))
298
+ print * ,' test_int32_3dim_mask_array'
299
+ call assert( all ( abs ( var(i323, 3 , i323 < 45 , corrected= .false. ) - &
300
+ reshape ([14._dp / 9 ., 14._dp , 350._dp / 9 ., 686._dp / 9 ., 56._dp / 9 .,&
301
+ 224._dp / 9 ., 56._dp , 896._dp / 9 ., 126._dp , 1400._dp / 9 .,&
302
+ 1694._dp / 9 ., 36._dp &
303
+ ], [size (i323,1 ), size (i323,2 )] ))&
304
+ < dptol ))
305
+
306
+ ! cdp
307
+ ! 1dim
308
+ print * ,' test_cdp_1dim'
309
+ call assert( abs (var(cd1, corrected= .false. ) - &
310
+ (var(real (cd1), corrected= .false. ) + &
311
+ var(aimag (cd1), corrected= .false. ))) < dptol)
312
+ call assert( abs (var(cd1, dim= 1 , corrected= .false. ) - &
313
+ (var(real (cd1), dim= 1 , corrected= .false. ) + &
314
+ var(aimag (cd1), dim= 1 , corrected= .false. ))) < dptol)
315
+
316
+ print * ,' test_cdp_1dim_mask'
317
+ call assert( isnan(var(cd1, .false. , corrected= .false. )))
318
+ call assert( isnan(var(cd1, 1 , .false. , corrected= .false. )))
319
+
320
+ print * ,' test_cdp_1dim_mask_array'
321
+ call assert( abs (var(cd1, aimag (cd1) == 0 , corrected= .false. ) - &
322
+ var(real (cd1), aimag (cd1) == 0 , corrected= .false. )) < dptol)
323
+ call assert( abs (var(cd1, 1 , aimag (cd1) == 0 , corrected= .false. ) - &
324
+ var(real (cd1), 1 , aimag (cd1) == 0 , corrected= .false. )) < dptol)
325
+ call assert( isnan((var(cd1, (real (cd1) == 0 .and. aimag (cd1) == 0 ),&
326
+ corrected= .false. ))))
327
+ call assert( abs (var(cd1, (real (cd1) > 1.2 .and. aimag (cd1) == 0 ),&
328
+ corrected= .false. )) < dptol)
329
+
330
+ ! 2dim
331
+ cd(:,1 ) = cd1
332
+ cd(:,2 ) = cd1* 3_sp
333
+ cd(:,3 ) = cd1* 1.5_sp
334
+
335
+ print * ,' test_cdp_2dim'
336
+ call assert( abs (var(cd, corrected= .false. ) - &
337
+ (var(real (cd), corrected= .false. ) + &
338
+ var(aimag (cd), corrected= .false. ))) < dptol)
339
+ call assert( all ( abs (var(cd, 1 , corrected= .false. ) - &
340
+ (var(real (cd), 1 , corrected= .false. ) + &
341
+ var(aimag (cd), 1 , corrected= .false. ))) < dptol))
342
+ call assert( all ( abs (var(cd, 2 , corrected= .false. ) - &
343
+ (var(real (cd), 2 , corrected= .false. ) + &
344
+ var(aimag (cd), 2 , corrected= .false. ))) < dptol))
345
+
346
+ print * ,' test_cdp_2dim_mask'
347
+ call assert( isnan(var(cd, .false. , corrected= .false. )))
348
+ call assert( any (isnan(var(cd, 1 , .false. , corrected= .false. ))))
349
+ call assert( any (isnan(var(cd, 2 , .false. , corrected= .false. ))))
350
+
351
+ print * ,' test_cdp_2dim_mask_array'
352
+ call assert( abs (var(cd, aimag (cd) == 0 , corrected= .false. ) - &
353
+ var(real (cd), aimag (cd) == 0 , corrected= .false. )) < dptol)
354
+ call assert( all ( abs ( var(cd, 1 , aimag (cd) == 0 , corrected= .false. ) - &
355
+ var(real (cd), 1 , aimag (cd) == 0 , corrected= .false. )) < dptol))
356
+ call assert( any ( isnan( var(cd, 2 , aimag (cd) == 0 , corrected= .false. ))))
128
357
129
358
end program
0 commit comments