Newer
Older
#---------------------------------------------------------------------
# This script tells you how to load experimental and observational data in a
# consistent way, facilating the following comparison.
# First, we load the experimental data. Because the latitude order of observation
# is opposite with experiment, and the sdate/time dimension is also different, we
# use the attributes (sdate and latitude) of experimental data to define the
# selectors for observation.
# You can see how to use parameter '*_across', 'merge_across_dims', and
# 'split_multiselected_dims' to create the consistent dimension as experiment.
12
13
14
15
16
17
18
19
20
21
22
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#---------------------------------------------------------------------
library(startR)
# exp
repos_exp <- paste0('/esarchive/exp/ecearth/a1tr/cmorfiles/CMIP/EC-Earth-Consortium/',
'EC-Earth3/historical/r24i1p1f1/Amon/$var$/gr/v20190312/',
'$var$_Amon_EC-Earth3_historical_r24i1p1f1_gr_$sdate$01-$sdate$12.nc')
exp <- Start(dat = repos_exp,
var = 'tas',
sdate = as.character(c(2005:2008)),
time = indices(1:3),
lat = 'all',
lon = 'all',
synonims = list(lat = c('lat', 'latitude'),
lon = c('lon', 'longitude')),
return_vars = list(lon = NULL,
lat = NULL,
time = 'sdate'),
retrieve = FALSE)
# Retrieve attributes for the following observation.
# Because latitude order in experiment is [-90, 90] but in observation is [90, -90],
# latitude values need to be retrieved and used below.
lats <- attr(exp, 'Variables')$common$lat
# The 'time' attribute is dependent on 'sdate'. You can see the dimension below.
dates <- attr(exp, 'Variables')$common$time
# dim(dates)
#sdate ftime
# 4 3
#-------------------------------------------
# obs
# 1. For lat, use experiment attribute. For lon, it is not necessary because they have
# same values.
# 2. For dimension 'date', it is a vector involving the first 3 months (ftime) of the four years (sdate).
# 3. Dimension 'time' is assigned by the matrix, so we can seperate 'sdate' and 'time'
# using 'split_multiselected_dims' later.
# 4. Because the 'time' is actually across all the files, so we need to specify
# 'time_across'. Then, use 'merge_across_dims' to make dimension 'date' disappears.
# At this moment, the dimension is 'time = 12'.
# 5. However, we want to seperate year and month (which are 'sdate' and 'ftime' in
# experimental data). So we use 'split_multiselected_dims' to split the two dimensions
# of dimension 'time'.
repos_obs <- '/esarchive/recon/ecmwf/erainterim/monthly_mean/$var$_f6h/$var$_$date$.nc'
obs <- Start(dat = repos_obs,
var = 'tas',
date = unique(format(dates, '%Y%m')),
time = values(dates), #dim: [sdate = 4, time = 3]
lat = values(lats),
lon = 'all',
time_across = 'date',
merge_across_dims = TRUE,
split_multiselected_dims = TRUE,
synonims = list(lat = c('lat', 'latitude'),
lon = c('lon', 'longitude')),
return_vars = list(lon = NULL,
lat = NULL,
time = 'date'),
retrieve = FALSE)
#==========================
# Check attributes
#==========================
##-----dimension-----
print(attr(exp, 'Dimensions'))
# dat var sdate time lat lon
# 1 1 4 3 256 512
print(attr(obs, 'Dimensions'))
# dat var sdate time lat lon
# 1 1 4 3 256 512
##-----time-----
print(attr(exp, 'Variables')$common$time)
# [1] "2005-01-16 13:14:44 CET" "2006-01-16 13:14:44 CET"
# [3] "2007-01-16 13:14:44 CET" "2008-01-16 13:14:44 CET"
# [5] "2005-02-15 01:14:44 CET" "2006-02-15 01:14:44 CET"
# [7] "2007-02-15 01:14:44 CET" "2008-02-15 13:14:44 CET"
# [9] "2005-03-16 13:14:44 CET" "2006-03-16 13:14:44 CET"
#[11] "2007-03-16 13:14:44 CET" "2008-03-16 13:14:44 CET"
print(attr(obs, 'Variables')$common$time)
# [1] "2005-01-31 18:00:00 CET" "2006-01-31 18:00:00 CET"
# [3] "2007-01-31 18:00:00 CET" "2008-01-31 18:00:00 CET"
# [5] "2005-02-28 18:00:00 CET" "2006-02-28 18:00:00 CET"
# [7] "2007-02-28 18:00:00 CET" "2008-02-29 18:00:00 CET"
# [9] "2005-03-31 19:00:00 CEST" "2006-03-31 19:00:00 CEST"
#[11] "2007-03-31 19:00:00 CEST" "2008-03-31 19:00:00 CEST"
##-----lat-----
print(attr(exp, 'Variables')$common$lat[1:3])
#[1] -89.46282 -88.76695 -88.06697
print(attr(exp, 'Variables')$common$lat[256])
#[1] 89.46282
print(attr(obs, 'Variables')$common$lat[1:3])
#[1] -89.46282 -88.76695 -88.06697
print(attr(obs, 'Variables')$common$lat[256])
#[1] 89.46282