Newer
Older
# Author: An-Chi Ho
# Date: 13th July 2021
#--------------------------------------------------------------------------------
# This script shows how to define the dependency between file dimensions.
# Note that ex1_13 is for the dependency between one inner dimension and one file
# dimension (i.e., the usage of *_across), while this use case is for two file
# dimensions (i.e., the usage of *_depends).
# The first case simply use indices() or 'all' to define the depending file dimension.
# In the second case, we use values() to define both the depended and depending
# dimensions. The depending dimension should be a list with names that are the values
# of depended dimensions.
#--------------------------------------------------------------------------------
library(startR)
path <- paste0('/esarchive/exp/CMIP6/dcppA-hindcast/hadgem3-gc31-mm/',
'cmip6-dcppA-hindcast_i1p1/DCPP/MOHC/HadGEM3-GC31-MM/dcppA-hindcast/',
'r1i1p1f2/Omon/tos/gn/v20200417/',
'$var$_Omon_HadGEM3-GC31-MM_dcppA-hindcast_s$sdate$-r1i1p1f2_gn_$chunk$.nc')
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Case 1: Define the depending dimension ('chunk') by indices or 'all'
data1 <- Start(dat = path,
var = 'tos',
sdate = sdates,
chunk = indices(2:4), # 'all' if you want to read all the files
chunk_depends = 'sdate',
time = 'all',
i = indices(450:500),
j = indices(650:700),
time_across = 'chunk',
merge_across_dims = TRUE,
return_vars = list(time = 'sdate'),
retrieve = TRUE)
dim(data1)
# dat var sdate time i j
# 1 1 3 36 51 51
data1[1, 1, 1:3, 1:5, 1, 1]
# [,1] [,2] [,3] [,4] [,5]
#[1,] 29.26021 29.73614 29.67156 29.61240 29.59503
#[2,] 29.37948 29.38624 29.73120 29.97264 29.89160
#[3,] 30.43721 30.58396 30.06479 30.51131 29.81269
#=====================================================================
# Case 2: Define the depended ('sdate') and depending ('chunk') dimensions by values
sdates <- c('2016', '2017', '2018')
chunks <- array(dim = c(chunk = 3, sdate = 3))
chunks[, 1] <- c("201701-201712", "201801-201812", "201901-201912")
chunks[, 2] <- c("201801-201812", "201901-201912", "202001-202012")
chunks[, 3] <- c("201901-201912", "202001-202012", "202101-202112")
data2 <- Start(dat = path,
var = 'tos',
sdate = sdates,
# the names should be the values of the depended dimension
chunk = list('2016' = chunks[, 1], '2017' = chunks[, 2], '2018' = chunks[ ,3]),
chunk_depends = 'sdate',
time = 'all',
i = indices(450:500),
j = indices(650:700),
time_across = 'chunk',
merge_across_dims = TRUE,
return_vars = list(time = 'sdate'),
retrieve = TRUE)
dim(data2)
# dat var sdate time i j
# 1 1 3 36 51 51
all.equal(as.vector(data1), as.vector(data2))
#[1] TRUE