|
13 | 13 |
|
14 | 14 | module ice_read_write |
15 | 15 |
|
| 16 | + use,intrinsic :: ieee_arithmetic |
16 | 17 | use ice_kinds_mod |
17 | 18 | use ice_constants, only: c0, spval_dbl, & |
18 | 19 | field_loc_noupdate, field_type_noupdate |
@@ -1139,6 +1140,8 @@ subroutine ice_read_nc_xy(fid, nrec, varname, work, diag, & |
1139 | 1140 | real (kind=dbl_kind), dimension(:,:), allocatable :: & |
1140 | 1141 | work_g1 |
1141 | 1142 |
|
| 1143 | + logical, dimension(:,:), allocatable :: mask |
| 1144 | + |
1142 | 1145 | integer (kind=int_kind) :: nx, ny |
1143 | 1146 |
|
1144 | 1147 | integer (kind=int_kind) :: lnrec ! local value of nrec |
@@ -1222,10 +1225,17 @@ subroutine ice_read_nc_xy(fid, nrec, varname, work, diag, & |
1222 | 1225 | ! call ice_check_nc(status, subname//' ERROR: Missing _FillValue', & |
1223 | 1226 | ! file=__FILE__, line=__LINE__) |
1224 | 1227 | ! write(nu_diag,*) subname,' missingvalue= ',missingvalue |
1225 | | - amin = minval(work_g1) |
1226 | | - amax = maxval(work_g1, mask = work_g1 /= missingvalue) |
1227 | | - asum = sum (work_g1, mask = work_g1 /= missingvalue) |
| 1228 | + allocate(mask(nx,ny)) |
| 1229 | + if ( ieee_is_nan(missingvalue) ) then |
| 1230 | + mask = ieee_is_nan(work_g1) |
| 1231 | + else |
| 1232 | + mask = work_g1 /= missingvalue |
| 1233 | + endif |
| 1234 | + amin = minval(work_g1, mask = mask ) |
| 1235 | + amax = maxval(work_g1, mask = mask ) |
| 1236 | + asum = sum (work_g1, mask = mask ) |
1228 | 1237 | write(nu_diag,*) subname,' min, max, sum =', amin, amax, asum, trim(varname) |
| 1238 | + deallocate(mask) |
1229 | 1239 | endif |
1230 | 1240 |
|
1231 | 1241 | !------------------------------------------------------------------- |
@@ -1320,6 +1330,8 @@ subroutine ice_read_nc_xyz(fid, nrec, varname, work, diag, & |
1320 | 1330 | real (kind=dbl_kind), dimension(:,:,:), allocatable :: & |
1321 | 1331 | work_g1 |
1322 | 1332 |
|
| 1333 | + logical, dimension(:,:), allocatable :: mask |
| 1334 | + |
1323 | 1335 | integer (kind=int_kind) :: nx, ny |
1324 | 1336 |
|
1325 | 1337 | integer (kind=int_kind) :: lnrec ! local value of nrec |
@@ -1400,13 +1412,19 @@ subroutine ice_read_nc_xyz(fid, nrec, varname, work, diag, & |
1400 | 1412 | status = nf90_get_att(fid, varid, "_FillValue", missingvalue) |
1401 | 1413 | ! call ice_check_nc(status, subname//' ERROR: Missing _FillValue', & |
1402 | 1414 | ! file=__FILE__, line=__LINE__) |
1403 | | -! write(nu_diag,*) subname,' missingvalue= ',missingvalue |
| 1415 | + allocate(mask(nx,ny)) |
1404 | 1416 | do n=1,ncat |
1405 | | - amin = minval(work_g1(:,:,n)) |
1406 | | - amax = maxval(work_g1(:,:,n), mask = work_g1(:,:,n) /= missingvalue) |
1407 | | - asum = sum (work_g1(:,:,n), mask = work_g1(:,:,n) /= missingvalue) |
| 1417 | + if ( ieee_is_nan(missingvalue) ) then |
| 1418 | + mask = ieee_is_nan(work_g1(:,:,n)) |
| 1419 | + else |
| 1420 | + mask = work_g1(:,:,n) /= missingvalue |
| 1421 | + endif |
| 1422 | + amin = minval(work_g1(:,:,n), mask = mask ) |
| 1423 | + amax = maxval(work_g1(:,:,n), mask = mask ) |
| 1424 | + asum = sum (work_g1(:,:,n), mask = mask ) |
1408 | 1425 | write(nu_diag,*) subname,' min, max, sum =', amin, amax, asum, trim(varname) |
1409 | 1426 | enddo |
| 1427 | + deallocate(mask) |
1410 | 1428 | endif |
1411 | 1429 |
|
1412 | 1430 | !------------------------------------------------------------------- |
@@ -1508,6 +1526,8 @@ subroutine ice_read_nc_xyf(fid, nrec, varname, work, diag, & |
1508 | 1526 | real (kind=dbl_kind), dimension(:,:,:), allocatable :: & |
1509 | 1527 | work_g1 |
1510 | 1528 |
|
| 1529 | + logical, dimension(:,:), allocatable :: mask |
| 1530 | + |
1511 | 1531 | integer (kind=int_kind) :: nx, ny |
1512 | 1532 |
|
1513 | 1533 | integer (kind=int_kind) :: lnrec ! local value of nrec |
@@ -1592,13 +1612,19 @@ subroutine ice_read_nc_xyf(fid, nrec, varname, work, diag, & |
1592 | 1612 | status = nf90_get_att(fid, varid, "_FillValue", missingvalue) |
1593 | 1613 | ! call ice_check_nc(status, subname//' ERROR: Missing _FillValue', & |
1594 | 1614 | ! file=__FILE__, line=__LINE__) |
1595 | | -! write(nu_diag,*) subname,' missingvalue= ',missingvalue |
1596 | | - do n = 1, nfreq |
1597 | | - amin = minval(work_g1(:,:,n)) |
1598 | | - amax = maxval(work_g1(:,:,n), mask = work_g1(:,:,n) /= missingvalue) |
1599 | | - asum = sum (work_g1(:,:,n), mask = work_g1(:,:,n) /= missingvalue) |
| 1615 | + allocate(mask(nx,ny)) |
| 1616 | + do n=1,ncat |
| 1617 | + if ( ieee_is_nan(missingvalue) ) then |
| 1618 | + mask = ieee_is_nan(work_g1(:,:,n)) |
| 1619 | + else |
| 1620 | + mask = work_g1(:,:,n) /= missingvalue |
| 1621 | + endif |
| 1622 | + amin = minval(work_g1(:,:,n), mask = mask ) |
| 1623 | + amax = maxval(work_g1(:,:,n), mask = mask ) |
| 1624 | + asum = sum (work_g1(:,:,n), mask = mask ) |
1600 | 1625 | write(nu_diag,*) subname,' min, max, sum =', amin, amax, asum, trim(varname) |
1601 | 1626 | enddo |
| 1627 | + deallocate(mask) |
1602 | 1628 | endif |
1603 | 1629 |
|
1604 | 1630 | !------------------------------------------------------------------- |
|
0 commit comments