context("Start() different calendar") test_that("1. 360_day, daily", { path_hadgem3 <- paste0('/esarchive/exp/CMIP6/dcppA-hindcast/hadgem3-gc31-mm/', 'cmip6-dcppA-hindcast_i1p1/DCPP/MOHC/HadGEM3-GC31-MM/', 'dcppA-hindcast/r1i1p1f2/day/$var$/gn/v20200101/', '$var$_day_HadGEM3-GC31-MM_dcppA-hindcast_s$sdate$-r1i1p1f2_gn_$fyear$.nc') sdate <- c('2000', '2001') fyear_hadgem3 <- indices(1) suppressWarnings( data <- Start(dat = path_hadgem3, var = 'tasmax', sdate = sdate, fyear = fyear_hadgem3, fyear_depends = 'sdate', time = indices(1:3), lat = indices(1), lon = indices(1), return_vars = list(lat = 'dat', lon = 'dat', time = 'sdate'), retrieve = FALSE) ) expect_equal( dim(attr(data, 'Variables')$common$time), c(sdate = 2, time = 3) ) time <- c(as.POSIXct('2000-11-01 12:00:00', tz = 'UTC'), as.POSIXct('2000-11-02 12:00:00', tz = 'UTC'), as.POSIXct('2000-11-03 12:00:00', tz = 'UTC')) attr(time, "tzone") <- "UTC" expect_equal( attr(data, 'Variables')$common$time[1, ], time ) time <- c( as.POSIXct('2001-11-01 12:00:00', tz = 'UTC'), as.POSIXct('2001-11-02 12:00:00', tz = 'UTC'), as.POSIXct('2001-11-03 12:00:00', tz = 'UTC')) attr(time, "tzone") <- "UTC" expect_equal( attr(data, 'Variables')$common$time[2, ], time ) }) test_that("2. 365_day, daily", { path_bcc_csm2 <- '/esarchive/exp/CMIP6/dcppA-hindcast/bcc-csm2-mr/cmip6-dcppA-hindcast_i1p1/DCPP/BCC/BCC-CSM2-MR/dcppA-hindcast/r1i1p1f1/day/$var$/gn/v20200408/$var$_day_BCC-CSM2-MR_dcppA-hindcast_s$sdate$-r1i1p1f1_gn_19800101-19891231.nc' data <- Start(dat = path_bcc_csm2, var = 'tasmax', sdate = '1980', time = indices(1:3), lat = indices(1), lon = indices(1), return_vars = list(lat = 'dat', lon = 'dat', time = 'sdate'), retrieve = FALSE) expect_equal( dim(attr(data, 'Variables')$common$time), c(sdate = 1, time = 3) ) time <- c(as.POSIXct('1980-01-01 12:00:00', tz = 'UTC'), as.POSIXct('1980-01-02 12:00:00', tz = 'UTC'), as.POSIXct('1980-01-03 12:00:00', tz = 'UTC')) attr(time, "tzone") <- "UTC" expect_equal( attr(data, 'Variables')$common$time[1, ], time ) }) test_that("3. gregorian/standard, daily", { path_mpi_esm <- paste0('/esarchive/exp/CMIP6/dcppA-hindcast/mpi-esm1-2-hr/', 'cmip6-dcppA-hindcast_i1p1/DCPP/MPI-M/MPI-ESM1-2-HR/', 'dcppA-hindcast/r1i1p1f1/day/$var$/gn/v20200101/', '$var$_day_MPI-ESM1-2-HR_dcppA-hindcast_s$sdate$-r1i1p1f1_gn_$fyear$.nc') var <- 'tasmax' sdate <- '2000' fyear_mpi_esm <- paste0(sdate, '1101-', as.numeric(sdate) + 10, '1231') data <- Start(dat = path_mpi_esm, var = var, sdate = sdate, fyear = fyear_mpi_esm, fyear_depends = 'sdate', time = indices(1:3), lat = indices(1), lon = indices(1), return_vars = list(lat = 'dat', lon = 'dat', time = 'sdate'), retrieve = FALSE) expect_equal( dim(attr(data, 'Variables')$common$time), c(sdate = 1, time = 3) ) time <- c(as.POSIXct('2000-11-01 12:00:00', tz = 'UTC'), as.POSIXct('2000-11-02 12:00:00', tz = 'UTC'), as.POSIXct('2000-11-03 12:00:00', tz = 'UTC')) attr(time, "tzone") <- "UTC" expect_equal( attr(data, 'Variables')$common$time[1, ], time ) }) test_that("4. gregorian/standard, monthly", { path_mpi_esm <- paste0('/esarchive/exp/CMIP6/dcppA-hindcast/mpi-esm1-2-hr/', 'cmip6-dcppA-hindcast_i1p1/DCPP/MPI-M/MPI-ESM1-2-HR/', 'dcppA-hindcast/r1i1p1f1/Amon/$var$/gn/v20200320/', '$var$_Amon_MPI-ESM1-2-HR_dcppA-hindcast_s$sdate$-r1i1p1f1_gn_200011-201012.nc') sdate <- '2000' fyear_mpi_esm <- paste0(sdate, '1101-', as.numeric(sdate) + 10, '1231') data <- Start(dat = path_mpi_esm, var = 'tasmax', sdate = '2000', time = indices(1:3), lat = indices(1), lon = indices(1), return_vars = list(lat = 'dat', lon = 'dat', time = 'sdate'), retrieve = FALSE) expect_equal( dim(attr(data, 'Variables')$common$time), c(sdate = 1, time = 3) ) time <- c(as.POSIXct('2000-11-16 00:00:00', tz = 'UTC'), as.POSIXct('2000-12-16 12:00:00', tz = 'UTC'), as.POSIXct('2001-01-16 12:00:00', tz = 'UTC')) attr(time, "tzone") <- "UTC" expect_equal( attr(data, 'Variables')$common$time[1, ], time ) }) test_that("4. gregorian/standard, 6hrly", { repos_obs <- paste0('/esarchive/recon/ecmwf/erainterim/6hourly/', '$var$/$var$_199405.nc') date <- paste0('1994-05-', sprintf('%02d', 1:31), ' 00:00:00') date <- as.POSIXct(date, tz = 'UTC') # attr(date, 'tzone') <- 'UTC' data <- Start(dat = repos_obs, var = 'tas', time = date, latitude = indices(1), longitude = indices(1), return_vars = list(latitude = NULL, longitude = NULL, time = NULL), retrieve = TRUE) expect_equal( as.vector(attr(data, 'Variables')$common$time[1:31]), as.vector(date) ) expect_equal( as.vector(data)[1:5], c(255.0120, 256.8095, 254.3654, 254.6059, 257.0551), tolerance = 0.0001 ) expect_equal( as.vector(data)[length(data)], c(268.2216), tolerance = 0.0001 ) })