test-Compute-irregular_regrid.R 2.27 KB
Newer Older
aho's avatar
aho committed
library(s2dv)

context("Irregular regriding in the workflow")

test_that("1. ex2_13", {

aho's avatar
aho committed
path <- paste0('/esarchive/exp/CMIP6/dcppA-hindcast/CMCC-CM2-SR5/',
aho's avatar
aho committed
               'DCPP/CMCC/CMCC-CM2-SR5/dcppA-hindcast/$member$/Omon/$var$/gn/v20200101/',
aho's avatar
aho committed
               '$var$_*_s$sdate$-$member$_gn_$aux$.nc')
suppressWarnings(
data <- Start(dataset = path,
              var = 'tos',
              sdate = '1960',
              aux = 'all',
              aux_depends = 'sdate',
aho's avatar
aho committed
              x = indices(2:361), # remove two indices to avoid white strips 
              y = indices(2:291), # remove two indices to avoid white strips 
aho's avatar
aho committed
              time = indices(1),
              member = 'r1i1p1f1',
aho's avatar
aho committed
#              synonims = list(j = c(j, x), i = c(i, y)),
              return_vars = list(#x = NULL, y = NULL,
                                 nav_lat = NULL, nav_lon = NULL),
aho's avatar
aho committed
              retrieve = F)
)
func_regrid <- function(data) {
aho's avatar
aho committed
  lons <- attr(data, 'Variables')$common$nav_lon
  lats <- attr(data, 'Variables')$common$nav_lat
  data <- s2dv::CDORemap(data, lons[2:361, 2:291], lats[2:361, 2:291], grid = 'r360x180',
aho's avatar
aho committed
                         method = 'bil', crop = FALSE)
  lons_reg <- data[['lons']]
  lats_reg <- data[['lats']]
  return(list(data = data[[1]], lats = lats_reg, lons = lons_reg))
}

step <- Step(fun = func_regrid,
aho's avatar
aho committed
             target_dims = list(data = c('x', 'y')),
aho's avatar
aho committed
             output_dims = list(data = c('lon', 'lat'),
                                lats = 'lat', lons = 'lon'),
             use_attributes = list(data = "Variables"))
suppressWarnings(
wf <- AddStep(data, step)
)
suppressWarnings(
res <- Compute(workflow = wf$data, chunks = list(sdate = 1))
)

expect_equal(
dim(res$data),
c(lon = 360, lat = 180, dataset = 1, var = 1, sdate = 1, aux = 1, time = 1, member = 1)
)
expect_equal(
dim(res$lons),
c(lon = 360, dataset = 1, var = 1, sdate = 1, aux = 1, time = 1, member = 1)
)
expect_equal(
attr(data, 'Dimensions'),
aho's avatar
aho committed
c(dataset = 1, var = 1, sdate = 1, aux = 1, x = 360, y = 290, time = 1, member = 1)
aho's avatar
aho committed
)
expect_equal(
mean(res$data, na.rm = T),
aho's avatar
aho committed
8.782398,
aho's avatar
aho committed
tolerance = 0.0001
)
expect_equal(
drop(res$data)[120,105:110],
c(28.32521, 28.07044, 27.59033, 27.02514, 26.55184, 26.67090),
tolerance = 0.0001
)
aho's avatar
aho committed
expect_equal(
range(res$data),
c(-1.799982, 31.130471),
tolerance = 0.0001
)