From 3179c2c84a4491508a7ab94abb7d9c35036c81fd Mon Sep 17 00:00:00 2001 From: Eva Rifa Date: Wed, 20 Sep 2023 17:20:21 +0200 Subject: [PATCH 01/26] Substitute CST_Load by CST_Start in some vignettes --- vignettes/Analogs_vignette.Rmd | 256 ++++++++++++--------- vignettes/Data_Considerations.Rmd | 68 +++++- vignettes/Figures/Analogs1.png | Bin 92907 -> 92954 bytes vignettes/Figures/Analogs3.png | Bin 127101 -> 127109 bytes vignettes/Figures/Analogs4.png | Bin 186618 -> 186510 bytes vignettes/Figures/Analogs5.png | Bin 134716 -> 135030 bytes vignettes/Figures/Analogs6.png | Bin 29276 -> 39291 bytes vignettes/Figures/Meteofrance_r360x180.png | Bin 30254 -> 92301 bytes 8 files changed, 210 insertions(+), 114 deletions(-) diff --git a/vignettes/Analogs_vignette.Rmd b/vignettes/Analogs_vignette.Rmd index 674dccac..488c63fe 100644 --- a/vignettes/Analogs_vignette.Rmd +++ b/vignettes/Analogs_vignette.Rmd @@ -3,7 +3,7 @@ title: "Analogs based on large scale for downscaling" author: "M. Carmen Alvarez-Castro and M. del Mar Chaves-Montero (CMCC, Italy)" date: "November 2020" revisor: "Eva Rifà" -revision date: "January 2023" +revision date: "September 2023" output: rmarkdown::html_vignette vignette: > %\VignetteEngine{knitr::knitr} @@ -39,7 +39,7 @@ Two datasets are used to illustrate how to use the function. The first one could ### Example 1: using data from CSTools -After loading **CSTools** package on the R session, the user will have access to the sample data `lonlat_temp` and `lonlat_prec`. +After loading **CSTools** package on the R session, the user will have access to the sample data created with using `CST_Start`: lonlat_temp_st` and `lonlat_prec_st`. *Note: If it is the first time using CSTools, install the package by running `install.packages("CSTools")`. @@ -50,43 +50,43 @@ library(CSTools) After exploring the data, the user can directly run the Analogs downscaling method using the 'Large_dis' metric: ``` -class(lonlat_temp$exp) -names(lonlat_temp$obs) -dim(lonlat_temp$obs$data) -dim(lonlat_temp$exp$data) -head(lonlat_temp$exp$attrs$Dates) +class(lonlat_temp_st$exp) +names(lonlat_temp_st$obs) +dim(lonlat_temp_st$obs$data) +dim(lonlat_temp_st$exp$data) +head(lonlat_temp_st$exp$attrs$Dates) ``` There are 15 ensemble members available in the `exp` data set, 6 starting dates and 3 forecast times, which refer to monthly values during 3 months following starting dates on November 1st in the years 2000, 2001, 2002, 2003, 2004 and 2005. ``` -exp1 <- lonlat_temp$exp -exp1$data <- exp1$data[, , 1, 1, , , drop = FALSE] +exp1 <- lonlat_temp_st$exp +exp1$data <- exp1$data[, 1, , 1, 1, , , drop = FALSE] exp1$attrs$Dates <- exp1$attrs$Dates[1] -down_1 <- CST_Analogs(expL = exp1, obsL = lonlat_temp$obs) +down_1 <- CST_Analogs(expL = exp1, obsL = lonlat_temp_st$obs) -exp2 <- lonlat_temp$exp -exp2$data <- exp2$data[, , 1, 2, , , drop = FALSE] +exp2 <- lonlat_temp_st$exp +exp2$data <- exp2$data[, 1, , 1, 2, , , drop = FALSE] exp2$attrs$Dates <- exp2$attrs$Dates[2] -down_2 <- CST_Analogs(expL = exp2, obsL = lonlat_temp$obs) +down_2 <- CST_Analogs(expL = exp2, obsL = lonlat_temp_st$obs) -exp3 <- lonlat_temp$exp -exp3$data <- exp3$data[, , 1, 3, , , drop = FALSE] +exp3 <- lonlat_temp_st$exp +exp3$data <- exp3$data[, 1, , 1, 3, , , drop = FALSE] exp3$attrs$Dates <- exp3$attrs$Dates[3] -down_3 <- CST_Analogs(expL = exp3, obsL = lonlat_temp$obs) +down_3 <- CST_Analogs(expL = exp3, obsL = lonlat_temp_st$obs) ``` The visualization of the first three time steps for the ensemble mean of the forecast initialized the 1st of Noveber 2000 can be done using the package **s2dv**: ``` library(s2dv) -var = list(MeanDims(down_1$data, 'member'), - MeanDims(down_2$data, 'member'), - MeanDims(down_3$data, 'member')) +var = list(MeanDims(down_1$data, 'ensemble'), + MeanDims(down_2$data, 'ensemble'), + MeanDims(down_3$data, 'ensemble')) -PlotLayout(PlotEquiMap, c('lat', 'lon'), +PlotLayout(PlotEquiMap, c('latitude', 'longitude'), var = var, nrow = 1, ncol = 3, lon = down_1$coords$lon, @@ -97,13 +97,12 @@ PlotLayout(PlotEquiMap, c('lat', 'lon'), width = 10, height = 4) ``` - ![](./Figures/Analogs1.png) The user can also request extra Analogs and the information: ``` -down <- CST_Analogs(expL = exp1, obsL = lonlat_temp$obs, +down <- CST_Analogs(expL = exp1, obsL = lonlat_temp_st$obs, nAnalogs = 2, AnalogsInfo = TRUE) ``` @@ -117,13 +116,13 @@ dim(down$data$metric) dim(down$data$dates) down$data$dates[1,15] ``` -The last command run concludes that the best analog of the ensemble 15 corresponding to the 1st of November 2000 is the 1st November 2004: +The last command run concludes that the best analog of the ensemble 15 corresponding to the 15th of November 2001 is the 15th November 2004: ``` -PlotLayout(PlotEquiMap, c('lat', 'lon'), var = list(down$data$fields[1, , , 15], - lonlat_temp$obs$data[1, 1, 5, 1, , ]), nrow = 1, ncol = 2, +PlotLayout(PlotEquiMap, c('latitude', 'longitude'), var = list(down$data$fields[1, , , 15], + lonlat_temp_st$obs$data[1, 1, 1, 5, , ]), nrow = 1, ncol = 2, lon = down$coords$lon, lat = down$coords$lat, filled.continents = FALSE, - titles = c("Downscaled 2000-11-01", "Observed 2004-11-01"), units = 'T(K)', + titles = c("Downscaled 2000-11-01", "Observed 2005-11-01"), units = 'T(K)', width = 7, height = 4) ``` @@ -131,68 +130,111 @@ PlotLayout(PlotEquiMap, c('lat', 'lon'), var = list(down$data$fields[1, , , 15], As expected, they are exatly the same. -### Exemple 2: Load data using CST_Load +### Exemple 2: Load data using CST_Start -In this case, the spatial field of a single forecast day will be downscale using Analogs in this example. This will allow illustrating how to use CST_Load to retrieve observations separated from simulations. To explore other options, see other CSTools vignettes as well as `CST_Load` documentation. +In this case, the spatial field of a single forecast day will be downscale using Analogs in this example. This will allow illustrating how to use `CST_Start` to retrieve observations separated from simulations. To explore other options, see other CSTools vignettes as well as `CST_Start` documentation and [startR](https://cran.r-project.org/web/packages/startR/index.html) package. The simulations available for the desired model cover the period 1993-2016. Here, the 15th of October 2000 (for the simulation initialized in the 1st of October 2000), will be downscaled. For ERA5 from 1979 to the present days. For this example we will just use October days from 2000 to 2006, so, the starting dates can be defined by running the following lines: ``` start <- as.Date(paste(2000, 10, "01", sep = ""), "%Y%m%d") end <- as.Date(paste(2006, 10, "01", sep = ""), "%Y%m%d") -dateseq <- format(seq(start, end, by = "year"), "%Y%m%d") +dates <- as.POSIXct(seq(start, end, by = "year"), format = '%Y%m%d', 'UTC') ``` -Using the `CST_Load` function from **CSTool package**, the data available in our data store can be loaded. The following lines show how this function can be used. The experimental datasets are interpolated to the ERA5 grid by specifying the 'grid' parameter while ERA5 doesn't need to be interpolated. While parameter leadtimemax is set to 1 for the experimental dataset, it is set to 31 for the observations, returning the daily observations for October for the years requested in 'sdate' (2000-2006). Download the data to run the recipe under the HTTPS: downloads.cmcc.bo.it/d_chaves/ANALOGS/data_for_Analogs.Rdat or ask carmen.alvarez-castro at cmcc.it or nuria.perez at bsc.es. - -``` -exp <- list(name = 'ECMWF_system4_m1', - path = file.path("/esarchive/exp/ecmwf/system4_m1/", - "$STORE_FREQ$_mean/$VAR_NAME$_*/$VAR_NAME$_$START_DATE$.nc")) -obs <- list(name = 'ERA5', - path = file.path("/esarchive/recon/ecmwf/era5/$STORE_FREQ$_mean/", - "$VAR_NAME$_f1h-r1440x721cds/$VAR_NAME$_$YEAR$$MONTH$.nc")) - -expTAS <- CST_Load(var = 'tas', exp = list(exp), obs = NULL, - sdates = '20001001', latmin = 22, latmax = 70, - lonmin = -80, lonmax = 50, output = 'lonlat', - storefreq = 'daily', nmember = 15, leadtimemin = 15, - leadtimemax = 15, method = "bilinear", grid = 'r1440x721', - nprocs = 1) -obsTAS <- CST_Load(var = 'tas', exp = NULL, obs = list(obs), - sdates = dateseq, leadtimemax = 31, - latmin = 22, latmax = 70, - lonmin = -80, lonmax = 50, output = 'lonlat', - nprocs = 1, storefreq = "daily", nmember = 1) - -expPSL <- CST_Load(var = 'psl', exp = list(exp), obs = NULL, - sdates = '20001001', latmin = 22, latmax = 70, - lonmin = -80, lonmax = 50, output = 'lonlat', - storefreq = 'daily', nmember = 15, leadtimemin = 15, - leadtimemax = 15, method = "bilinear", grid = 'r1440x721', - nprocs = 1) -obsPSL <- CST_Load(var = 'psl', exp = NULL, obs = list(obs), - sdates = dateseq, leadtimemax = 31, - latmin = 22, latmax = 70, - lonmin = -80, lonmax = 50, output = 'lonlat', - nprocs = 1, storefreq = "daily", nmember = 1) - -``` - -*Note: `CST_Load` allows to load the data simultaneously for 'exp' and 'obs' already formatted to have the same dimensions as in this example. However, it is possible to request separated 'obs' and 'exp'. In this second case, the observations could be return in a continous time series instead of being split in start dates and forecast time.* - -The s2dv_cube objects `expTAS`,`obsTAS`, `expPSL` and `obsPSL` are now loaded in the R enviroment. The first two elements correspond to the experimental and observed data for temperature and the other two are the equivalent for the SLP data. - -Loading the data using `CST_Load` allows to obtain two lists, one for the experimental data and another for the observe data, with the same elements and compatible dimensions of the data element: +Using the `CST_Start` function from **CSTools package**, the data available in our data store can be loaded. The following lines show how this function can be used. The experimental datasets are interpolated to the ERA5 grid by specifying the 'grid' parameter while ERA5 doesn't need to be interpolated. While dimension 'time' is set to 1 for the experimental dataset, it is set to 31 for the observations, returning the daily observations for October for the years requested in 'sdate' (2000-2006). Download the data to run the recipe under the HTTPS: downloads.cmcc.bo.it/d_chaves/ANALOGS/data_for_Analogs.Rdat or ask carmen.alvarez-castro at cmcc.it or nuria.perez at bsc.es. + +``` +exp_path <- paste0('/esarchive/exp/ecmwf/system4_m1/daily_mean/', + '$var$_f6h/$var$_$sdate$.nc') +obs_path <- paste0('/esarchive/recon/ecmwf/era5/daily_mean/', + '$var$_f1h-r1440x721cds/$var$_$sdate$.nc') + +date_exp <- '20001001' +lonmax <- 50 +lonmin <- -80 +latmax <- 70 +latmin <- 22 + +expTAS <- CST_Start(dat = exp_path, + var = 'tas', + ensemble = indices(1:15), + sdate = '20001001', + time = indices(15), + latitude = values(list(latmin, latmax)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lonmin, lonmax)), + longitude_reorder = CircularSort(0, 360), + synonims = list(longitude = c('lon', 'longitude'), + latitude = c('lat', 'latitude')), + transform = CDORemapper, + transform_params = list(grid = 'r1440x721', + method = 'bilinear'), + transform_vars = c('latitude', 'longitude'), + return_vars = list(latitude = NULL, + longitude = NULL, time = 'sdate'), + retrieve = TRUE) + +expPSL <- CST_Start(dat = exp_path, + var = 'psl', + ensemble = indices(1:15), + sdate = '20001001', + time = indices(15), + latitude = values(list(latmin, latmax)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lonmin, lonmax)), + longitude_reorder = CircularSort(0, 360), + synonims = list(longitude = c('lon', 'longitude'), + latitude = c('lat', 'latitude')), + transform = CDORemapper, + transform_params = list(grid = 'r1440x721', + method = 'bilinear'), + transform_vars = c('latitude', 'longitude'), + return_vars = list(latitude = NULL, + longitude = NULL, time = 'sdate'), + retrieve = TRUE) + +obsTAS <- CST_Start(dat = obs_path, + var = 'tas', + sdate = unique(format(dates, '%Y%m')), + time = indices(1:31), + latitude = values(list(latmin, latmax)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lonmin, lonmax)), + longitude_reorder = CircularSort(0, 360), + synonims = list(longitude = c('lon', 'longitude'), + latitude = c('lat', 'latitude')), + return_vars = list(latitude = NULL, + longitude = NULL, time = 'sdate'), + retrieve = TRUE) + +obsPSL <- CST_Start(dat = obs_path, + var = 'psl', + sdate = unique(format(dates, '%Y%m')), + time = indices(1:31), + latitude = values(list(latmin, latmax)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lonmin, lonmax)), + longitude_reorder = CircularSort(0, 360), + synonims = list(longitude = c('lon', 'longitude'), + latitude = c('lat', 'latitude')), + return_vars = list(latitude = NULL, + longitude = NULL, time = 'sdate'), + retrieve = TRUE) +``` + +The 's2dv_cube' objects `expTAS`,`obsTAS`, `expPSL` and `obsPSL` are now loaded in the R environment. The first two elements correspond to the experimental and observed data for temperature and the other two are the equivalent for the SLP data. + +Loading the data using `CST_Start` allows to obtain two lists, one for the experimental data and another for the observe data, with the same elements and compatible dimensions of the data element: ``` dim(expTAS$data) -# dataset member sdate ftime lat lon -# 1 15 1 1 193 521 +# dat var ensemble sdate time latitude longitude +# 1 1 15 1 1 193 521 dim(obsTAS$data) -# dataset member sdate ftime lat lon -# 1 1 7 31 193 521 +# dat var sdate time latitude longitude +# 1 1 7 31 193 521 ``` @@ -210,30 +252,30 @@ Some warnings could appear indicating information about undefining parameters. I ``` names(down1$data) dim(down1$data$field) -# nAnalogs lat lon member time -# 3 193 521 15 1 +# nAnalogs latitude longitude ensemble +# 3 193 521 15 dim(down1$data$dates) -# nAnalogs member time -# 3 15 1 +# nAnalogs ensemble +# 3 15 down1$data$dates[1,1] -# "07-10-2005" +# "24-10-2000" ``` Now, we can visualize the output: ``` -PlotLayout(PlotEquiMap, c('lat', 'lon'), - var = list(expPSL$data[1, 1, 1, 1, , ], obsPSL$data[1, 1, 1, 15, , ], +PlotLayout(PlotEquiMap, c('latitude', 'longitude'), + var = list(expPSL$data[1, 1, 1, 1, 1, , ], obsPSL$data[1, 1, 1, 15, , ], obsPSL$data[1, 1, 6, 7, , ]), lon = obsPSL$coords$lon, lat = obsPSL$coords$lat, filled.continents = FALSE, titles = c('Exp PSL 15-10-2000','Obs PSL 15-10-2000', - 'Obs PSL 7-10-2005'), + 'Obs PSL 24-10-2000'), toptitle = 'First member', ncol = 3, nrow = 1, width = 10, height = 4) -PlotLayout(PlotEquiMap, c('lat', 'lon'), var = list( - expTAS$data[1, 1, 1, 1, , ], obsTAS$data[1, 1, 1, 15, , ], - down1$data$field[1, , , 1], obsTAS$data[1, 1, 6, 7, , ]), - lon = obsTAS$coords$lon, lat = obsTAS$coords$lat, filled.continents = FALSE, +PlotLayout(PlotEquiMap, c('latitude', 'longitude'), var = list( + expTAS$data[1, 1, 1, 1, 1, , ], obsTAS$data[1, 1, 1, 15, , ], + down1$data$field[1, , , 1], obsTAS$data[1, 1, 1, 24, , ]), + lon = obsTAS$coords$longitude, lat = obsTAS$coords$latitude, filled.continents = FALSE, titles = c('Exp TAS 15-10-2000', 'Obs TAS 15-10-2000', - 'Analog TAS 15-10-2000', 'Obs TAS 7-10-2005'), + 'Analog TAS 15-10-2000', 'Obs TAS 24-10-2000'), ncol = 2, nrow = 2) ``` @@ -241,7 +283,7 @@ PlotLayout(PlotEquiMap, c('lat', 'lon'), var = list( The previous figure, shows the PSL inputs and the PSL pattern for the PSL the 7th of October, 2005, which is the best analog. *Note: Analogs automatically exclude the day is being downscaled from the observations.* -The next figure shows the input temperature fields, and the result analog which corresponds to the temperature of the 7th of October, 2005: +The next figure shows the input temperature fields, and the result analog which corresponds to the temperature of the 24th of October, 2000: ![](./Figures/Analogs4.png) @@ -252,8 +294,8 @@ The aim is to downscale the temperature simulation of the 15th of October 2000, ``` region <- c(lonmin = 0, lonmax = 5, latmin = 38.5, latmax = 40.5) -expPSL$data <- expPSL$data[1, 1, 1, 1, , ] -expTAS$data <- expTAS$data[1, 1, 1, 1, , ] +expPSL$data <- expPSL$data[1, 1, 1, 1, 1, , ] +expTAS$data <- expTAS$data[1, 1, 1, 1, 1, , ] down2 <- CST_Analogs(expL = expPSL, obsL = obsPSL, AnalogsInfo = TRUE, criteria = "Local_dist", # nAnalogs = 50, obsVar = obsTAS, expVar = expTAS, @@ -262,30 +304,30 @@ down2 <- CST_Analogs(expL = expPSL, obsL = obsPSL, AnalogsInfo = TRUE, The parameter 'nAnalogs' doesn't correspond to the number of Analogs returned, but to the number of the best observations to use in the comparison between large and local scale. -In this case, when looking to a large scale pattern and also to local scale pattern the best analog for the first member is the 13th of October 2001: +In this case, when looking to a large scale pattern and also to local scale pattern the best analog for the first member is the 7th of October 2001: ``` down2$data$dates[2] -# [1] "13-10-2001" +# [1] "7-10-2001" ``` ``` library(ClimProjDiags) var = list(expTAS$data, obsTAS$data[1, 1, 1, 15, , ], - down2$data$field[1, , ], SelBox(obsTAS$data[1, 1, 2, 13, , ], + down2$data$field[1, , ], SelBox(obsTAS$data[1, 1, 2, 7, , ], lon = as.vector(obsTAS$coords$lon), lat = as.vector(obsTAS$coords$lat), - region)$data) + region, londim = 'longitude', latdim = 'latitude')$data) -PlotLayout(PlotEquiMap, c('lat', 'lon'), var = var, - special_args = list(list(lon = expTAS$coords$lon, lat = expTAS$coords$lat), - list(lon = obsTAS$coords$lon, lat = obsTAS$coords$lat), - list(lon = down2$coords$lon, down2$coords$lat), - list(lon = down2$coords$lon, down2$coords$lat)), +PlotLayout(PlotEquiMap, c('latitude', 'longitude'), var = var, + special_args = list(list(lon = expTAS$coords$longitude, lat = expTAS$coords$latitude), + list(lon = obsTAS$coords$longitude, lat = obsTAS$coords$latitude), + list(lon = down2$coords$longitude, down2$coords$latitude), + list(lon = down2$coords$longitude, down2$coords$latitude)), filled.continents = FALSE, titles = c('Exp TAS 15-10-2000', 'Obs TAS 15-10-2000', - 'Analog TAS 15-10-2000', 'Obs TAS 13-10-2001'), + 'Analog TAS 15-10-2000', 'Obs TAS 7-10-2001'), ncol = 2, nrow = 2) ``` @@ -311,15 +353,17 @@ down3$data$dates[3] ``` ``` -var = list(down3$data$field[1, , ], SelBox(obsTAS$data[1, 1, 2, 10, , ], - lon = as.vector(obsTAS$coords$lon), lat = as.vector(obsTAS$coords$lat), - region)$data) +var = list(down3$data$field[1, , ], + SelBox(obsTAS$data[1, 1, 2, 10, , ], + lon = as.vector(obsTAS$coords$lon), + lat = as.vector(obsTAS$coords$lat), + region, londim = 'longitude', latdim = 'latitude')$data) -PlotLayout(PlotEquiMap, c('lat', 'lon'), var = var, - lon = down3$coords$lon, lat = down3$coords$lat, +PlotLayout(PlotEquiMap, c('latitude', 'longitude'), var = var, + lon = down3$coords$longitude, lat = down3$coords$latitude, filled.continents = FALSE, titles = c('Analog TAS 15-10-2000', 'Obs TAS 10-10-2001'), - ncol = 2, nrow = 1) + ncol = 2, nrow = 1, fileout = 'Analogs6.png') ``` ![](./Figures/Analogs6.png) diff --git a/vignettes/Data_Considerations.Rmd b/vignettes/Data_Considerations.Rmd index 979e1c75..39ff6b08 100644 --- a/vignettes/Data_Considerations.Rmd +++ b/vignettes/Data_Considerations.Rmd @@ -49,6 +49,7 @@ All CSTools functions have been developed following the same guidelines. The mai A reasonable important doubt that a new user may have at this point is: what 's2dv_cube' object is? 's2dv_cube' is a class of an object storing the data and metadata in several elements: + $data element is an N-dimensional array with named dimensions containing the data (e.g.: temperature values), + + $dims vector with the dimensions of $data + $coords is a named list with elements of the coordinates vectors corresponding to the dimensions of the $data, + $attrs is a named list with elements corresponding to attributes of the object. It has the following elements: + $Variable is a list with the variable name in element $varName and with the metadata of all the variables in the $metadata element, @@ -59,9 +60,9 @@ It is possible to visualize an example of the structure of 's2dv_cube' object by ``` library(CSTools) -class(lonlat_temp$exp) # check the class of the object lonlat_temp$exp -names(lonlat_temp$exp) # shows the names of the elements in the object lonlat_temp$exp -str(lonlat_temp$exp) # shows the full structure of the object lonlat_temp$exp +class(lonlat_temp_st$exp) # check the class of the object lonlat_temp$exp +names(lonlat_temp_st$exp) # shows the names of the elements in the object lonlat_temp$exp +str(lonlat_temp_st$exp) # shows the full structure of the object lonlat_temp$exp ``` ### 3. Data storage recommendations @@ -75,9 +76,11 @@ CSTools main objective is to share state-of-the-arts post-processing methods wit - CST_Load can perform spatial averages over a defined region or return the lat-lon grid and - CST_Load can read from files using multiple parallel processes among other possibilites. -If you plan to use CST_Load, we have developed guidelines to download and formatting the data. See [CDS_Seasonal_Downloader](https://earth.bsc.es/gitlab/es/cds-seasonal-downloader). +CSTools also has the function `CST_Start` from [startR](https://cran.r-project.org/web/packages/startR/index.html) that is more flexible than `CST_Load`. We recommend to use `CST_Start` since it's more efficient and flexible. -There are alternatives to CST_Load function, for instance, the user can: +If you plan to use `CST_Load` or `CST_Start`, we have developed guidelines to download and formatting the data. See [CDS_Seasonal_Downloader](https://earth.bsc.es/gitlab/es/cds-seasonal-downloader). + +There are alternatives to these functions, for instance, the user can: 1) use another tool to read the data from files (e.g.: ncdf4, easyNDCF, startR packages) and then convert it to the class 's2dv_cube' with `s2dv.cube()` function or 2) If they keep facing problems to convert the data to that class, they can just skip it and work with the functions without the prefix 'CST_'. In this case, they will be able to work with the basic class 'array'. @@ -98,7 +101,7 @@ month <- '05' start <- as.Date(paste(ini, month, "01", sep = ""), "%Y%m%d") end <- as.Date(paste(fin, month, "01", sep = ""), "%Y%m%d") dateseq <- format(seq(start, end, by = "year"), "%Y%m%d") -c(exp, obs) %<-% CST_Load(var = 'sfcWind', +c(expl, obsl) %<-% CST_Load(var = 'sfcWind', exp = list(list(name = 'meteofrance/system6c3s', path = path)), obs = 'erainterim', sdates = dateseq, leadtimemin = 2, leadtimemax = 4, @@ -108,6 +111,56 @@ c(exp, obs) %<-% CST_Load(var = 'sfcWind', grid = "r360x180") ``` +### 5. CST_Start example +``` +library(CSTools) +path_exp <- paste0('/esarchive/exp/meteofrance/system6c3s/monthly_mean/', + '$var$_f6h/$var$_$sdate$.nc') + +sdates <- sapply(1993:2012, function(x) paste0(x, '0501')) + +lonmax <- 60.5 +lonmin <- -19 +latmax <- 79.5 +latmin <- 0 +exp <- CST_Start(dat = path_exp, + var = 'sfcWind', + ensemble = indices(1:9), + sdate = sdates, + time = indices(1:3), + latitude = values(list(latmin, latmax)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lonmin, lonmax)), + longitude_reorder = CircularSort(0, 360), + synonims = list(longitude = c('lon', 'longitude'), + latitude = c('lat', 'latitude')), + return_vars = list(latitude = NULL, + longitude = NULL, time = 'sdate'), + retrieve = TRUE) + +path_obs <- paste0('/esarchive/recon/ecmwf/erainterim/daily_mean/', + '$var$_f6h/$var$_$sdate$.nc') +dates <- as.POSIXct(sdates, format = '%Y%m%d', 'UTC') +obs <- CST_Start(dat = path_obs, + var = 'sfcWind', + sdate = unique(format(dates, '%Y%m')), + time = indices(2:4), + latitude = values(list(latmin, latmax)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lonmin, lonmax)), + longitude_reorder = CircularSort(0, 360), + synonims = list(longitude = c('lon', 'longitude'), + latitude = c('lat', 'latitude')), + transform = CDORemapper, + transform_extra_cells = 2, + transform_params = list(grid = 'r360x181', + method = 'conservative'), + transform_vars = c('latitude', 'longitude'), + return_vars = list(longitude = NULL, + latitude = NULL, + time = 'sdate'), + retrieve = TRUE) +``` Extra lines to see the size of the objects and visualize the data: @@ -118,11 +171,10 @@ object_size(exp) object_size(obs) # 3.09 MB library(s2dv) -PlotEquiMap(exp$data[1,1,1,1,,], lon = exp$coords$lon, lat= exp$coords$lat, +PlotEquiMap(exp$data[1,1,1,1,1,,], lon = exp$coords$longitude, lat= exp$coords$latitude, filled.continents = FALSE, fileout = "Meteofrance_r360x180.png") ``` - ![Meteofrance](../vignettes/Figures/Meteofrance_r360x180.png) ### Managing big datasets and memory issues diff --git a/vignettes/Figures/Analogs1.png b/vignettes/Figures/Analogs1.png index 5b4f05a94584422a6e58a638888be481a197b3b0..1f839e986b64e43b0f92eebb931e022beab95155 100644 GIT binary patch literal 92954 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