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.
#---------------------------------------------------------------------
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)
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
#-------------------------------------------
# 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