@@ -9,16 +9,15 @@ module test_mkgridmapMod
9
9
private
10
10
11
11
public :: test_gridmap_areastddev
12
- public :: test_gridmap_areaave_default
12
+ public :: test_gridmap_areaave_no_srcmask
13
13
public :: test_gridmap_areaave_srcmask
14
- public :: test_gridmap_areaave_srcmask2
15
14
16
15
character (len=* ), parameter :: modname = ' test_mkgridmapMod'
17
16
18
17
contains
19
18
20
19
!- -----------------------------------------------------------------------------
21
- subroutine test_gridmap_areaave_default
20
+ subroutine test_gridmap_areaave_no_srcmask
22
21
23
22
implicit none
24
23
@@ -32,7 +31,7 @@ subroutine test_gridmap_areaave_default
32
31
real (r8 ), parameter :: nodata = - 1._r8
33
32
real (r8 ), parameter :: eps = 1.e-13_r8
34
33
35
- character (len=* ), parameter :: subname = ' test_gridmap_areaave_default '
34
+ character (len=* ), parameter :: subname = ' test_gridmap_areaave_no_srcmask '
36
35
37
36
! Note about the gridmaps for the tests here:
38
37
! For most tests here, the test arrays are: (1) simple case, (2) the main case to
@@ -61,7 +60,7 @@ subroutine test_gridmap_areaave_default
61
60
testname = ' no overlap'
62
61
src_array = (/ 0.1_r8 ,0.2_r8 ,0.3_r8 ,0.4_r8 / )
63
62
dst_array_t = (/ 0.125_r8 , nodata, 0.375_r8 / )
64
- call gridmap_areaave (gridmap, src_array, dst_array, nodata)
63
+ call gridmap_areaave_no_srcmask (gridmap, src_array, dst_array, nodata)
65
64
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
66
65
deallocate (gridmap% src_indx, gridmap% dst_indx, gridmap% wovr, gridmap% frac_dst)
67
66
deallocate (src_array, dst_array, dst_array_t)
@@ -87,15 +86,15 @@ subroutine test_gridmap_areaave_default
87
86
testname = ' single overlap'
88
87
src_array = (/ 0.1_r8 ,0.2_r8 ,0.5_r8 ,0.3_r8 ,0.4_r8 / )
89
88
dst_array_t = (/ 0.125_r8 , 0.5_r8 , 0.375_r8 / )
90
- call gridmap_areaave (gridmap, src_array, dst_array, nodata)
89
+ call gridmap_areaave_no_srcmask (gridmap, src_array, dst_array, nodata)
91
90
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
92
91
93
92
! Now change the overlap point to have weight=0
94
93
testname = ' single overlap with 0 weight'
95
94
gridmap% wovr(3 ) = 0.0_r8
96
95
gridmap% frac_dst(2 ) = 0.0_r8
97
96
dst_array_t(2 ) = nodata
98
- call gridmap_areaave (gridmap, src_array, dst_array, nodata)
97
+ call gridmap_areaave_no_srcmask (gridmap, src_array, dst_array, nodata)
99
98
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
100
99
101
100
deallocate (gridmap% src_indx, gridmap% dst_indx, gridmap% wovr, gridmap% frac_dst)
@@ -130,13 +129,13 @@ subroutine test_gridmap_areaave_default
130
129
testname= ' multiple overlaps, all the same value'
131
130
src_array = (/ 0.1_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.6_r8 / )
132
131
dst_array_t = (/ 0.2_r8 , 0.5_r8 , 0.575_r8 / )
133
- call gridmap_areaave (gridmap, src_array, dst_array, nodata)
132
+ call gridmap_areaave_no_srcmask (gridmap, src_array, dst_array, nodata)
134
133
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
135
134
136
135
testname= ' multiple overlaps, different values'
137
136
src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
138
137
dst_array_t = (/ 0.125_r8 , 0.875_r8 , 1.775_r8 / )
139
- call gridmap_areaave (gridmap, src_array, dst_array, nodata)
138
+ call gridmap_areaave_no_srcmask (gridmap, src_array, dst_array, nodata)
140
139
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
141
140
142
141
! dividing the weights by 2 shouldn't affect the mean
@@ -145,7 +144,7 @@ subroutine test_gridmap_areaave_default
145
144
gridmap% frac_dst(:) = gridmap% frac_dst(:) / 2.0_r8
146
145
src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
147
146
dst_array_t = (/ 0.125_r8 , 0.875_r8 , 1.775_r8 / )
148
- call gridmap_areaave (gridmap, src_array, dst_array, nodata)
147
+ call gridmap_areaave_no_srcmask (gridmap, src_array, dst_array, nodata)
149
148
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
150
149
! restore wovr & frac_dst
151
150
gridmap% wovr(:) = gridmap% wovr(:) * 2.0_r8
@@ -157,15 +156,15 @@ subroutine test_gridmap_areaave_default
157
156
gridmap% frac_dst(:) = gridmap% frac_dst(:) * 2.0_r8
158
157
src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
159
158
dst_array_t = (/ 0.125_r8 , 0.875_r8 , 1.775_r8 / )
160
- call gridmap_areaave (gridmap, src_array, dst_array, nodata)
159
+ call gridmap_areaave_no_srcmask (gridmap, src_array, dst_array, nodata)
161
160
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
162
161
! restore wovr & frac_dst
163
162
gridmap% wovr(:) = gridmap% wovr(:) / 2.0_r8
164
163
gridmap% frac_dst(:) = gridmap% frac_dst(:) / 2.0_r8
165
164
166
165
deallocate (src_array, dst_array, dst_array_t)
167
166
168
- end subroutine test_gridmap_areaave_default
167
+ end subroutine test_gridmap_areaave_no_srcmask
169
168
170
169
!- -----------------------------------------------------------------------------
171
170
subroutine test_gridmap_areaave_srcmask
@@ -176,7 +175,7 @@ subroutine test_gridmap_areaave_srcmask
176
175
character (len= 128 ) :: testname
177
176
178
177
real (r8 ), allocatable :: src_array(:)
179
- real ( r8 ) , allocatable :: mask_src(:)
178
+ integer , allocatable :: mask_src(:)
180
179
real (r8 ), allocatable :: dst_array(:)
181
180
real (r8 ), allocatable :: dst_array_t(:)
182
181
@@ -212,9 +211,9 @@ subroutine test_gridmap_areaave_srcmask
212
211
dst_array_t(gridmap% nb))
213
212
testname = ' no overlap'
214
213
src_array = (/ 0.1_r8 ,0.2_r8 ,0.3_r8 ,0.4_r8 / )
215
- mask_src(:) = 1.0_r8
214
+ mask_src(:) = 1
216
215
dst_array_t = (/ 0.125_r8 , nodata, 0.375_r8 / )
217
- call gridmap_areaave (gridmap, src_array, dst_array, nodata, mask_src)
216
+ call gridmap_areaave_srcmask (gridmap, src_array, dst_array, nodata, mask_src= mask_src, frac_dst = gridmap % frac_dst )
218
217
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
219
218
deallocate (gridmap% src_indx, gridmap% dst_indx, gridmap% wovr, gridmap% frac_dst)
220
219
deallocate (src_array, mask_src, dst_array, dst_array_t)
@@ -242,14 +241,14 @@ subroutine test_gridmap_areaave_srcmask
242
241
src_array = (/ 0.1_r8 ,0.2_r8 ,0.5_r8 ,0.3_r8 ,0.4_r8 / )
243
242
mask_src(:) = 1.0_r8
244
243
dst_array_t = (/ 0.125_r8 , 0.5_r8 , 0.375_r8 / )
245
- call gridmap_areaave (gridmap, src_array, dst_array, nodata, mask_src)
244
+ call gridmap_areaave_srcmask (gridmap, src_array, dst_array, nodata, mask_src= mask_src, frac_dst = gridmap % frac_dst )
246
245
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
247
246
248
247
! Now change the overlap point to have src_mask=0
249
248
testname = ' single overlap with 0 src_mask'
250
249
mask_src(3 ) = 0.0_r8
251
250
dst_array_t(2 ) = nodata
252
- call gridmap_areaave (gridmap, src_array, dst_array, nodata, mask_src)
251
+ call gridmap_areaave_srcmask (gridmap, src_array, dst_array, nodata, mask_src= mask_src, frac_dst = gridmap % frac_dst )
253
252
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
254
253
255
254
deallocate (gridmap% src_indx, gridmap% dst_indx, gridmap% wovr, gridmap% frac_dst)
@@ -286,21 +285,21 @@ subroutine test_gridmap_areaave_srcmask
286
285
src_array = (/ 0.1_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.6_r8 / )
287
286
mask_src(:) = 1.0_r8
288
287
dst_array_t = (/ 0.2_r8 , 0.5_r8 , 0.575_r8 / )
289
- call gridmap_areaave (gridmap, src_array, dst_array, nodata, mask_src)
288
+ call gridmap_areaave_srcmask (gridmap, src_array, dst_array, nodata, mask_src= mask_src, frac_dst = gridmap % frac_dst )
290
289
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
291
290
292
291
testname= ' multiple overlaps, different values'
293
292
src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
294
293
mask_src(:) = 1.0_r8
295
294
dst_array_t = (/ 0.125_r8 , 0.875_r8 , 1.775_r8 / )
296
- call gridmap_areaave (gridmap, src_array, dst_array, nodata, mask_src)
295
+ call gridmap_areaave_srcmask (gridmap, src_array, dst_array, nodata, mask_src= mask_src, frac_dst = gridmap % frac_dst )
297
296
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
298
297
299
298
testname= ' multiple overlaps, different values, srcmask'
300
299
src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
301
300
mask_src(:) = (/ 1.0_r8 , 1.0_r8 , 0.0_r8 , 0.5_r8 , 1.0_r8 , 0.5_r8 , 0.0_r8 , 1.0_r8 , 1.0_r8 / )
302
301
dst_array_t = (/ 0.125_r8 , 0.923076923076923_r8 , 1.775_r8 / )
303
- call gridmap_areaave (gridmap, src_array, dst_array, nodata, mask_src)
302
+ call gridmap_areaave_srcmask (gridmap, src_array, dst_array, nodata, mask_src= mask_src, frac_dst = gridmap % frac_dst )
304
303
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
305
304
306
305
! dividing the weights by 2 and dividing mask_src by a constant shouldn't affect the mean
@@ -310,7 +309,7 @@ subroutine test_gridmap_areaave_srcmask
310
309
src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
311
310
mask_src(:) = 0.25_r8
312
311
dst_array_t = (/ 0.125_r8 , 0.875_r8 , 1.775_r8 / )
313
- call gridmap_areaave (gridmap, src_array, dst_array, nodata, mask_src)
312
+ call gridmap_areaave_srcmask (gridmap, src_array, dst_array, nodata, mask_src= mask_src, frac_dst = gridmap % frac_dst )
314
313
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
315
314
! restore wovr & frac_dst
316
315
gridmap% wovr(:) = gridmap% wovr(:) * 2.0_r8
@@ -323,7 +322,7 @@ subroutine test_gridmap_areaave_srcmask
323
322
src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
324
323
mask_src(:) = 0.25_r8
325
324
dst_array_t = (/ 0.125_r8 , 0.875_r8 , 1.775_r8 / )
326
- call gridmap_areaave (gridmap, src_array, dst_array, nodata, mask_src)
325
+ call gridmap_areaave_srcmask (gridmap, src_array, dst_array, nodata, mask_src= mask_src, frac_dst = gridmap % frac_dst )
327
326
call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
328
327
! restore wovr & frac_dst
329
328
gridmap% wovr(:) = gridmap% wovr(:) / 2.0_r8
@@ -334,193 +333,6 @@ subroutine test_gridmap_areaave_srcmask
334
333
335
334
end subroutine test_gridmap_areaave_srcmask
336
335
337
- !- -----------------------------------------------------------------------------
338
- subroutine test_gridmap_areaave_srcmask2
339
-
340
- implicit none
341
-
342
- type (gridmap_type) :: gridmap
343
- character (len= 128 ) :: testname
344
-
345
- real (r8 ), allocatable :: src_array(:)
346
- real (r8 ), allocatable :: mask_src(:)
347
- real (r8 ), allocatable :: dst_array(:)
348
- real (r8 ), allocatable :: mask_dst(:)
349
- real (r8 ), allocatable :: dst_array_t(:)
350
-
351
- real (r8 ), parameter :: mask_dst_min = 0.0_r8
352
- real (r8 ), parameter :: nodata = - 1._r8
353
- real (r8 ), parameter :: eps = 1.e-13_r8
354
-
355
- character (len=* ), parameter :: subname = ' test_gridmap_areaave_srcmask2'
356
-
357
- ! Note about the gridmaps for the tests here:
358
- ! For most tests here, the test arrays are: (1) simple case, (2) the main case to
359
- ! test, (3) simple case. Thus, the main case in question is #2 of 3, and we're always
360
- ! basically just testing one scenario in each call to the subroutine (rather than
361
- ! doing a bunch of tests at once, which could make setting up the test arrays more
362
- ! error-prone).
363
-
364
- ! Set up a gridmap with 0 weight of overlap on dest #2
365
- gridmap% na = 4
366
- gridmap% nb = 3
367
- gridmap% ns = 4
368
- allocate (gridmap% src_indx(gridmap% ns), &
369
- gridmap% dst_indx(gridmap% ns), &
370
- gridmap% wovr (gridmap% ns), &
371
- gridmap% frac_dst(gridmap% nb))
372
- gridmap% src_indx = (/ 1 ,2 ,3 ,4 / )
373
- gridmap% dst_indx = (/ 1 ,1 ,3 ,3 / )
374
- gridmap% wovr = (/ 0.75_r8 ,0.25_r8 , & ! weights of sources 1:2 on dest 1
375
- 0.25_r8 ,0.75_r8 / ) ! weights of sources 3:4 on test 3
376
- gridmap% frac_dst = (/ 1.0 , 0.0 , 1.0 / )
377
- gridmap% set = ' gridmap_IsSet'
378
- allocate (src_array (gridmap% na), &
379
- mask_src (gridmap% na), &
380
- dst_array (gridmap% nb), &
381
- mask_dst (gridmap% nb), &
382
- dst_array_t(gridmap% nb))
383
- testname = ' no overlap'
384
- src_array = (/ 0.1_r8 ,0.2_r8 ,0.3_r8 ,0.4_r8 / )
385
- mask_src(:) = 1.0_r8
386
- mask_dst(:) = 1.0_r8
387
- dst_array_t = (/ 0.125_r8 , nodata, 0.375_r8 / )
388
- call gridmap_areaave(gridmap, src_array, dst_array, nodata, mask_src, mask_dst, mask_dst_min)
389
- call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
390
- deallocate (gridmap% src_indx, gridmap% dst_indx, gridmap% wovr, gridmap% frac_dst)
391
- deallocate (src_array, mask_src, dst_array, mask_dst, dst_array_t)
392
-
393
- ! Set up a gridmap with a single point overlapping dest #2
394
- gridmap% na = 5
395
- gridmap% nb = 3
396
- gridmap% ns = 5
397
- allocate (gridmap% src_indx(gridmap% ns), &
398
- gridmap% dst_indx(gridmap% ns), &
399
- gridmap% wovr (gridmap% ns), &
400
- gridmap% frac_dst(gridmap% nb))
401
- gridmap% src_indx = (/ 1 ,2 ,3 ,4 ,5 / )
402
- gridmap% dst_indx = (/ 1 ,1 ,2 ,3 ,3 / )
403
- gridmap% wovr = (/ 0.75_r8 ,0.25_r8 , & ! weights of sources 1:2 on dest 1
404
- 1.0_r8 , & ! weight of source 3 on dest 2
405
- 0.25_r8 ,0.75_r8 / ) ! weights of sources 4:5 on test 3
406
- gridmap% frac_dst = (/ 1.0 , 1.0 , 1.0 / )
407
- gridmap% set = ' gridmap_IsSet'
408
- allocate (src_array (gridmap% na), &
409
- mask_src (gridmap% na), &
410
- dst_array (gridmap% nb), &
411
- mask_dst (gridmap% nb), &
412
- dst_array_t(gridmap% nb))
413
- testname = ' single overlap'
414
- src_array = (/ 0.1_r8 ,0.2_r8 ,0.5_r8 ,0.3_r8 ,0.4_r8 / )
415
- mask_src(:) = 1.0_r8
416
- mask_dst(:) = 1.0_r8
417
- dst_array_t = (/ 0.125_r8 , 0.5_r8 , 0.375_r8 / )
418
- call gridmap_areaave(gridmap, src_array, dst_array, nodata, mask_src, mask_dst, mask_dst_min)
419
- call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
420
-
421
- ! Now change the overlap point to have src_mask=0
422
- testname = ' single overlap with 0 src_mask'
423
- mask_src(3 ) = 0.0_r8
424
- mask_dst(:) = 1.0_r8
425
- dst_array_t(2 ) = nodata
426
- call gridmap_areaave(gridmap, src_array, dst_array, nodata, mask_src, mask_dst, mask_dst_min)
427
- call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
428
-
429
- deallocate (gridmap% src_indx, gridmap% dst_indx, gridmap% wovr, gridmap% frac_dst)
430
- deallocate (src_array, mask_src, dst_array, mask_dst, dst_array_t)
431
-
432
- ! Set up a gridmap for the remaining tests
433
- ! This gridmap will have 3 src cells, 9 dest cells, and:
434
- ! src 1: just overlaps with dst 1
435
- ! src 2: overlaps with dst 1 & dst 2
436
- ! src 3..7: just overlaps with dst 2
437
- ! src 8: overlaps with dst 2 & dst 3
438
- ! src 9: just overlaps with dst 3
439
- gridmap% na = 9
440
- gridmap% nb = 3
441
- gridmap% ns = 11
442
- allocate (gridmap% src_indx(gridmap% ns), &
443
- gridmap% dst_indx(gridmap% ns), &
444
- gridmap% wovr (gridmap% ns), &
445
- gridmap% frac_dst(gridmap% nb))
446
- gridmap% src_indx = (/ 1 ,2 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,8 ,9 / )
447
- gridmap% dst_indx = (/ 1 ,1 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,3 ,3 / )
448
- gridmap% wovr = (/ 0.75_r8 ,0.25_r8 , & ! weights of sources 1:2 on dest 1
449
- 0.05_r8 ,0.05_r8 ,0.1_r8 ,0.3_r8 ,0.2_r8 ,0.15_r8 ,0.15_r8 , & ! weights of sources 2:8 on dest 2
450
- 0.25_r8 ,0.75_r8 / ) ! weights of sources 8:9 on test 3
451
- gridmap% frac_dst = (/ 1.0_r8 , 1.0_r8 , 1.0_r8 / )
452
- gridmap% set = ' gridmap_IsSet'
453
- allocate (src_array (gridmap% na), &
454
- mask_src (gridmap% na), &
455
- dst_array (gridmap% nb), &
456
- mask_dst (gridmap% nb), &
457
- dst_array_t(gridmap% nb))
458
-
459
-
460
- testname= ' multiple overlaps, all the same value'
461
- src_array = (/ 0.1_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.5_r8 , 0.6_r8 / )
462
- mask_src(:) = 1.0_r8
463
- mask_dst(:) = 1.0_r8
464
- dst_array_t = (/ 0.2_r8 , 0.5_r8 , 0.575_r8 / )
465
- call gridmap_areaave(gridmap, src_array, dst_array, nodata, mask_src, mask_dst, mask_dst_min)
466
- call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
467
-
468
- testname= ' multiple overlaps, different values'
469
- src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
470
- mask_src(:) = 1.0_r8
471
- mask_dst(:) = 1.0_r8
472
- dst_array_t = (/ 0.125_r8 , 0.875_r8 , 1.775_r8 / )
473
- call gridmap_areaave(gridmap, src_array, dst_array, nodata, mask_src, mask_dst, mask_dst_min)
474
- call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
475
-
476
- testname= ' multiple overlaps, different values, dst mask'
477
- src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
478
- mask_src(:) = 1.0_r8
479
- mask_dst(:) = (/ 1.0_r8 , 0.0_r8 , 1.0_r8 / )
480
- dst_array_t = (/ 0.125_r8 , nodata, 1.775_r8 / )
481
- call gridmap_areaave(gridmap, src_array, dst_array, nodata, mask_src, mask_dst, mask_dst_min)
482
- call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
483
-
484
- testname= ' multiple overlaps, different values, srcmask'
485
- src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
486
- mask_src(:) = (/ 1.0_r8 , 1.0_r8 , 0.0_r8 , 0.5_r8 , 1.0_r8 , 0.5_r8 , 0.0_r8 , 1.0_r8 , 1.0_r8 / )
487
- mask_dst(:) = 1.0_r8
488
- dst_array_t = (/ 0.125_r8 , 0.923076923076923_r8 , 1.775_r8 / )
489
- call gridmap_areaave(gridmap, src_array, dst_array, nodata, mask_src, mask_dst, mask_dst_min)
490
- call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
491
-
492
- ! dividing the weights by 2 and dividing mask_src by a constant shouldn't affect the mean
493
- testname= ' weights divided by 2'
494
- gridmap% wovr(:) = gridmap% wovr(:) / 2.0_r8
495
- gridmap% frac_dst(:) = gridmap% frac_dst(:) / 2.0_r8
496
- src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
497
- mask_src(:) = 0.25_r8
498
- mask_dst(:) = 1.0_r8
499
- dst_array_t = (/ 0.125_r8 , 0.875_r8 , 1.775_r8 / )
500
- call gridmap_areaave(gridmap, src_array, dst_array, nodata, mask_src, mask_dst, mask_dst_min)
501
- call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
502
- ! restore wovr & frac_dst
503
- gridmap% wovr(:) = gridmap% wovr(:) * 2.0_r8
504
- gridmap% frac_dst(:) = gridmap% frac_dst(:) * 2.0_r8
505
-
506
- ! using frac_dst > 1 should be okay
507
- testname= ' frac_dst > 1'
508
- gridmap% wovr(:) = gridmap% wovr(:) * 2.0_r8
509
- gridmap% frac_dst(:) = gridmap% frac_dst(:) * 2.0_r8
510
- src_array = (/ 0.1_r8 , 0.2_r8 , 0.3_r8 , 0.7_r8 , 0.5_r8 , 1.5_r8 , 0.5_r8 , 1.7_r8 , 1.8_r8 / )
511
- mask_src(:) = 0.25_r8
512
- mask_dst(:) = 1.0_r8
513
- dst_array_t = (/ 0.125_r8 , 0.875_r8 , 1.775_r8 / )
514
- call gridmap_areaave(gridmap, src_array, dst_array, nodata, mask_src, mask_dst, mask_dst_min)
515
- call test_close(dst_array, dst_array_t, eps, modname// ' -- ' // subname// ' -- ' // trim (testname))
516
- ! restore wovr & frac_dst
517
- gridmap% wovr(:) = gridmap% wovr(:) / 2.0_r8
518
- gridmap% frac_dst(:) = gridmap% frac_dst(:) / 2.0_r8
519
-
520
- deallocate (src_array, mask_src, dst_array, mask_dst, dst_array_t)
521
-
522
- end subroutine test_gridmap_areaave_srcmask2
523
-
524
336
!- -----------------------------------------------------------------------------
525
337
subroutine test_gridmap_areastddev
526
338
0 commit comments