From f17e16b10b5c221354b56e33c1c78b047ac52b18 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 10 Feb 2020 16:38:32 +0100 Subject: [PATCH 01/49] Update NEWS.md for v0.1.4 --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index ab5acb1..90832a3 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# startR next release (Release date: ) +# startR v0.1.4 (Release date: 2020-02-10) - Bugfixes of transform in Start(). Change the default value of param 'extra_cells' to 2. (issue37) - Bugfixes of chunk function in Utils.R (issue23) - Bugfixes of paramter 'split_multiselected_dims' in ByChunk.R -- GitLab From fbd1c11b714d89b1920c936e1c48266a32d5b659 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 12 Feb 2020 11:20:57 +0100 Subject: [PATCH 02/49] FAQ for specifying avoiding a node #43 --- inst/doc/faq.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index b6df41c..b0b0493 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -10,6 +10,7 @@ This document intends to be the first reference for any doubts that you may have 4. [Use package function in Compute()](#4-use-package-function-in-compute) 5. [Do interpolation in Start() (using parameter 'transform')](#5-do-interpolation-in-start-using-parameter-transform) 6. [Get data attributes without retrieving data to workstation](#6-get-data-attributes-without-retrieving-data-to-workstation) + 7. [Avoid or specify a node from cluster in Compute()](#7-avoid-or-specify-a-node-from-cluster-in-Compute) 2. **Something goes wrong...** @@ -295,6 +296,42 @@ And if you want to retrieve the data to the workstation afterward, you can use ` Find examples at [usecase.md](/inst/doc/usecase.md), ex1_1 and ex1_3. +### 7. Avoid or specify a node from cluster in Compute() + +When submitting a job to Fatnodes using Compute(), the parameter 'extra_queue_params' could be used to restricthe job to be run in a expecific node as follows: + +``` + extra_queue_params = list('#SBATCH -w moore'), +``` + +or exclude a specific node from job by: + +``` + extra_queue_params = list('#SBATCH -x moore'), +``` + +Look at the position of `extra_queue_params` parameter in a full call of Compute: + +``` + res <- Compute(wf1, + chunks = list(ensemble = 20, + sdate = 2), + threads_load = 2, + threads_compute = 4, + cluster = list(queue_host = queue_host, + queue_type = 'slurm', + extra_queue_params = list('#SBATCH -x moore'), + cores_per_job = 2, + temp_dir = temp_dir, + r_module = 'R/3.5.0-foss-2018b', + polling_period = 10, + job_wallclock = '01:00:00', + max_jobs = 40, + bidirectional = FALSE), + ecflow_suite_dir = ecflow_suite_dir, + wait = TRUE) +``` + ## Something goes wrong... ### 1. No space left on device -- GitLab From 0cfb4b725b177aba27beb59b4f47d11e809e1659 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 13 Feb 2020 14:05:35 +0100 Subject: [PATCH 03/49] Correct the internal link. --- inst/doc/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index b0b0493..58cfcb0 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -10,7 +10,7 @@ This document intends to be the first reference for any doubts that you may have 4. [Use package function in Compute()](#4-use-package-function-in-compute) 5. [Do interpolation in Start() (using parameter 'transform')](#5-do-interpolation-in-start-using-parameter-transform) 6. [Get data attributes without retrieving data to workstation](#6-get-data-attributes-without-retrieving-data-to-workstation) - 7. [Avoid or specify a node from cluster in Compute()](#7-avoid-or-specify-a-node-from-cluster-in-Compute) + 7. [Avoid or specify a node from cluster in Compute()](#7-avoid-or-specify-a-node-from-cluster-in-compute) 2. **Something goes wrong...** -- GitLab From 96edf7b33a9eff43c743908c89fada586db19116 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 13 Feb 2020 15:06:02 +0100 Subject: [PATCH 04/49] Add FAQ 2-4. --- inst/doc/faq.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 58cfcb0..0b3bc53 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -16,7 +16,8 @@ This document intends to be the first reference for any doubts that you may have 2. **Something goes wrong...** 1. [No space left on device](#1-no-space-left-on-device) 2. [ecFlow UI remains blue and does not update status](#2-ecflow-ui-remains-blue-and-does-not-update-status) - 3. [Compute() successfully but then killed on R session](#3-compute-successfully-but-then-killed-on-r-session) + 3. [Compute() successfully but then killed on R session](#3-compute-successfully-but-then-killed-on-r-session) + 4. [My jobs work well in workstation and fatnodes but not on Power9 (or vice versa)](#4-my-jobs-work-well-in-workstation-and-fatnodes-but-not-on-power9-or-vice-versa) ## 1. How to @@ -369,3 +370,26 @@ When Compute() on HPCs, the machines are able to process data which are much lar Further explanation: though the complete output (i.e., merging all the chunks into one returned array) cannot be sent back to workstation, but the chunking results (.Rds file) are completed and saved in the directory '/STARTR_CHUNKING_'. If you still want to use the chunking results, you can find them there. + +### 4. My jobs work well in workstation and fatnodes but not on Power9 (or vice versa) + +There are several possible reasons for this situation. Here we list some of them, and please let us know if you find any other reason not listed here yet. +- **R module or package version difference.** Sometimes, the versions among these +machines are not consistency, and it might cause the problem. Try to load +different module to see if it fixes the problem. +- **The package is not known by the machine you use.** If the package you use +in the function does not include in the R module, you have to assign the +parameter `lib_dir` in the cluster list in Compute() (see more details in +[practical_guide.md](https://earth.bsc.es/gitlab/es/startR/blob/master/inst/doc/practical_guide.md#compute-on-cte-power-9).) +- **The function is specified the package name ahead.** The package name needs +to be added in front of function connected with '::' (e.g., `s2dv::Clim`) or with + ':::' if the function is internal (e.g., `CSTools:::.cal`). +- **Source or load the file not in the machine you use.** If you use self-defined +function or load data in the function, you need to put those files in the machine +you run the computation on, so the machine can find it (e.g., when submitting jobs +to power9, you should put the files in Power9 instead of local workstation.) +- **Connection problem.** Test the successful script you used to use (if you do not +have one, go to [usecase.md](https://earth.bsc.es/gitlab/es/startR/tree/develop-FAQcluster/inst/doc/usecase) to find one!). +If it fails, it means that your connection to machine or the ecFlow setting has +some problem. + -- GitLab From 4ead1bdb741c9b0b066e256faf59e87b3e446fe0 Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 14 Feb 2020 15:36:01 +0100 Subject: [PATCH 05/49] FAQ about path definition --- inst/doc/faq.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 0b3bc53..3fef595 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -11,6 +11,7 @@ This document intends to be the first reference for any doubts that you may have 5. [Do interpolation in Start() (using parameter 'transform')](#5-do-interpolation-in-start-using-parameter-transform) 6. [Get data attributes without retrieving data to workstation](#6-get-data-attributes-without-retrieving-data-to-workstation) 7. [Avoid or specify a node from cluster in Compute()](#7-avoid-or-specify-a-node-from-cluster-in-compute) + 8. [Define a path with multiple dependencies](#8-define-a-path-with-multiple-dependencies) 2. **Something goes wrong...** @@ -333,6 +334,54 @@ Look at the position of `extra_queue_params` parameter in a full call of Compute wait = TRUE) ``` +###8. Define a path with multiple dependencies + +The structure of the BSC Earth data repository, esarchive, allow us to create a path pattern to the data by using diferent variables (between dolar symbol), such as, $var$, for the variable name, or $sdates$, for the start date of the simulation. Here a example for loading montly simulations of system4_m1 data: + +path <- '/esarchive/exp/ecmwf/system4_m1/monthly_mean/$var$_f6h/$var$_$sdate$.nc' + +The function Start() will require two parameters 'var' and 'sdate' to load the desired data. + +In other cases, the creation of the path could be a litle bit more complicated. Some researcher create their own EC-Earth experiments which are identified by a experiment ID ($expid$) and the are run with different model version ($version) even for different members ($member$): + +| expid | member | version | +|-------|----------|---------| +| a1st | r7i1p1f1 |v20190302| +| a1sx |r10i1p1f1 |v20190308| + +In this case, the variables member and version take different value depending on the expid (the member r10i1p1f1 does not exist for expid a1st). The path will include this varibles: + +path <- '/esarchive/exp/ecearth/$expid$/diags/CMIP/EC-Earth-Consortium/EC-Earth3/historical/$member$/Omon/$var$/gn/$version$/$var$_Omon_EC-Earth3_historical_$member$_gn_$year$.nc' + +However, the following paramters are mandatory to make Start() aware that they are not independent variables: + +``` + member_depends = 'expid', + version_depends = 'expid', +``` + +The final Start() call will look like: + +``` +yrh1 = 1960 +yrh2 = 2014 +years <- paste0(c(yrh1 : yrh2), '01-', c(yrh1 : yrh2), '12') +data <- Start(dat = repos, + var = 'tosmean', + expid = c('a1st','a1sx'), + member = 'all', + version = 'all', + member_depends = 'expid', + version_depends = 'expid', + year = years, + time = 'all', + region = indices(1 : 4), + return_vars = list(time = NULL, region = NULL), + retrieve = TRUE) +``` + + + ## Something goes wrong... ### 1. No space left on device -- GitLab From c4465bb17a2d244d9b612317a3d492b26b42e32f Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 14 Feb 2020 15:37:42 +0100 Subject: [PATCH 06/49] Missing space to FAQ title --- inst/doc/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 3fef595..66b6a45 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -334,7 +334,7 @@ Look at the position of `extra_queue_params` parameter in a full call of Compute wait = TRUE) ``` -###8. Define a path with multiple dependencies +### 8. Define a path with multiple dependencies The structure of the BSC Earth data repository, esarchive, allow us to create a path pattern to the data by using diferent variables (between dolar symbol), such as, $var$, for the variable name, or $sdates$, for the start date of the simulation. Here a example for loading montly simulations of system4_m1 data: -- GitLab From 1a624560d3f448a4cdc8b78e3f6a4f94a404b5ec Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 14 Feb 2020 15:40:14 +0100 Subject: [PATCH 07/49] formatting FAQ about path definition --- inst/doc/faq.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 66b6a45..5097bac 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -336,13 +336,13 @@ Look at the position of `extra_queue_params` parameter in a full call of Compute ### 8. Define a path with multiple dependencies -The structure of the BSC Earth data repository, esarchive, allow us to create a path pattern to the data by using diferent variables (between dolar symbol), such as, $var$, for the variable name, or $sdates$, for the start date of the simulation. Here a example for loading montly simulations of system4_m1 data: +The structure of the BSC Earth data repository, esarchive, allow us to create a path pattern to the data by using diferent variables (between dolar symbol), such as, `$var$`, for the variable name, or `$sdates$`, for the start date of the simulation. Here a example for loading montly simulations of system4_m1 data: -path <- '/esarchive/exp/ecmwf/system4_m1/monthly_mean/$var$_f6h/$var$_$sdate$.nc' +`path <- '/esarchive/exp/ecmwf/system4_m1/monthly_mean/$var$_f6h/$var$_$sdate$.nc'` The function Start() will require two parameters 'var' and 'sdate' to load the desired data. -In other cases, the creation of the path could be a litle bit more complicated. Some researcher create their own EC-Earth experiments which are identified by a experiment ID ($expid$) and the are run with different model version ($version) even for different members ($member$): +In other cases, the creation of the path could be a litle bit more complicated. Some researcher create their own EC-Earth experiments which are identified by a experiment ID (`$expid$`) and the are run with different model version (`$version`) even for different members (`$member$`): | expid | member | version | |-------|----------|---------| @@ -351,7 +351,7 @@ In other cases, the creation of the path could be a litle bit more complicated. In this case, the variables member and version take different value depending on the expid (the member r10i1p1f1 does not exist for expid a1st). The path will include this varibles: -path <- '/esarchive/exp/ecearth/$expid$/diags/CMIP/EC-Earth-Consortium/EC-Earth3/historical/$member$/Omon/$var$/gn/$version$/$var$_Omon_EC-Earth3_historical_$member$_gn_$year$.nc' +`path <- '/esarchive/exp/ecearth/$expid$/diags/CMIP/EC-Earth-Consortium/EC-Earth3/historical/$member$/Omon/$var$/gn/$version$/$var$_Omon_EC-Earth3_historical_$member$_gn_$year$.nc'` However, the following paramters are mandatory to make Start() aware that they are not independent variables: -- GitLab From 26fbc8cc51e1d2652409d83d37846338dddf67e7 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 14 Feb 2020 16:51:38 +0100 Subject: [PATCH 08/49] Rewrite usecase ex1_2 because the old script doesn't work anymore. --- inst/doc/usecase.md | 16 +++- inst/doc/usecase/ex1_2_exp_obs_attr.R | 117 +++++++++++++++++++++++ inst/doc/usecase/ex1_2_plotmap.R | 130 -------------------------- 3 files changed, 130 insertions(+), 133 deletions(-) create mode 100644 inst/doc/usecase/ex1_2_exp_obs_attr.R delete mode 100644 inst/doc/usecase/ex1_2_plotmap.R diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index 880020d..1da3ff5 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -4,9 +4,19 @@ In this document, you can link to the example scripts for various demands. For t 1. **Retrieve data (use `Start()` only)** 1. [Interpolation in Start()](inst/doc/usecase/ex1_1_tranform.R) - Do the interpolation within Start(), and compare with Load() result. When the Start() parameter `transform_extra_cells = 2`, the two results will be the same. - 2. [Use s2dverification map plotting functions for exp and obs data](inst/doc/usecase/ex1_2_plotmap.R) - Use `s2dverification::PlotEquiMap, PlotStereoMap, PlotLayout` to visualize load-in data, and use the experimental data attributes to load in associated observational data. It also shows how to use parameters `xxx_reorder`, `xxx_across`, `merge_across_dims`, `split_multiselected_dims`. + Do the interpolation within Start(), and compare with Load() result. When the Start() parameter `transform_extra_cells = 2`, the two results will be the same. + + 2. [Load experimental and observational data with same dimension structure](inst/doc/usecase/ex1_2_exp_obs_attr.R) + This script tells you how to load experimental and observational data in a + consistent way, facilating the following comparison. In this case, experimental + data is one file per year, each file contains 12 months (time = 12). However, + observational data is one file per month, each file contains only one time step. + You can learn how to select all the required year and month for observation, and + tweak the dimension to make it consistent with experiment. + + The highlight paramters used in this usecase are: '*_across', 'merge_across_dims', + and 'split_multiselected_dims'. + 3. [Use experimental data attribute to load in oberservational data](inst/doc/usecase/ex1_3_attr_loadin.R) Load the experimental data first (with `retrieve = FALSE`), then retreive its dates and time attributes to use in the observational data load-in. It also shows how to use parameters `xxx_tolerance`, `xxx_across`, `merge_across_dims`, `split_multiselected_dims`. diff --git a/inst/doc/usecase/ex1_2_exp_obs_attr.R b/inst/doc/usecase/ex1_2_exp_obs_attr.R new file mode 100644 index 0000000..32c2d0a --- /dev/null +++ b/inst/doc/usecase/ex1_2_exp_obs_attr.R @@ -0,0 +1,117 @@ +#--------------------------------------------------------------------- +# 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) +#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 + diff --git a/inst/doc/usecase/ex1_2_plotmap.R b/inst/doc/usecase/ex1_2_plotmap.R deleted file mode 100644 index f6230b4..0000000 --- a/inst/doc/usecase/ex1_2_plotmap.R +++ /dev/null @@ -1,130 +0,0 @@ -#--------------------------------------------------------------------- -# 1. Check the data with s2dverification map plotting functions -# 2. Read associated data of another data set matching the dates of the first one -# 3. How to use paramters `xxx_reorder`, `xxx_across`, `merge_across_dims`, `split_multiselected_dims` -#--------------------------------------------------------------------- -library(startR) -library(s2dverification) - -path <- '/esarchive/exp/ecearth/a0lg/monthly_mean/$var$_*/' -repos <- paste0(path, '$var$_*_S$sdate$_$member$_$chunk$.nc') -header <- Start(dat = repos, - var = 'tas', - member = indices(1:5), - sdate = indices(1:21 * 2), - chunk = 'all', - ftime = indices(1:3), - lat = 'all', - lon = 'all', - lat_reorder = Sort(), - lon_reorder = CircularSort(0, 360), - chunk_depends = 'sdate', - ftime_across = 'chunk', - merge_across_dims = TRUE, - split_multiselected_dims = TRUE, - synonims = list(ftime = 'time', - lat = c('lat', 'latitude'), - lon = c('lon', 'longitude')), - return_vars = list(lon = NULL, - lat = NULL, - time = 'sdate') - ) - -# ------ Check exp data ------ - attr(header, 'Dimensions') -# dat var member sdate ftime lat lon -# 1 1 5 21 3 256 512 -# ---------------------------- - -lon <- attr(header, 'Variables')$common$lon -lat <- attr(header, 'Variables')$common$lat - -data <- eval(header) #retrieve data - - -# check 5 members -PlotLayout(PlotEquiMap, - c('lon', 'lat'), - Subset(data, c('dat', 'var', 'sdate', 'ftime'), list(1, 1, 1, 1)), - lon, - lat, - fill = FALSE - ) - -# check 3 ftimes -PlotLayout(PlotEquiMap, - c('lon', 'lat'), - Subset(data, c('dat', 'var', 'sdate', 'member'), list(1, 1, 1, 1)), - lon, - lat, - fill = FALSE - ) - -# check 21 sdates -PlotLayout(PlotStereoMap, - c('lon', 'lat'), - Subset(data, c('dat', 'var', 'ftime', 'member'), list(1, 1, 1, 1)), - lon, - lat, - fill = FALSE - ) - - -#----------------------------- -# Associated obs data -#----------------------------- -dates <- attr(header, 'Variables')$common$time #use date attributes in exp data -#> dim(dates) -#sdate ftime -# 21 3 - -path <- '/esarchive/recon/ecmwf/erainterim/monthly_mean/$var$_*/' -repos <- paste0(path, '$var$_$date$.nc') -data_obs <- Start(dat = repos, - var = 'tas', - date = unique(format(dates, '%Y%m')), - ftime = values(dates), - lat = 'all', - lon = 'all', - lat_reorder = Sort(), - lon_reorder = CircularSort(0, 360), - # ftime continues along date - ftime_across = 'date', - # merge ftime and date into one dim - merge_across_dims = TRUE, - # separate ftime dimension, which is [sdate = 21, ftime = 3] - split_multiselected_dims = TRUE, - synonims = list(ftime = 'time', - lat = c('lat', 'latitude'), - lon = c('lon', 'longitude')), - return_vars = list(lon = NULL, - lat = NULL, - ftime = 'date') - ) -# ------ Check obs data ------ - attr(data_obs, 'Dimensions') -# dat var sdate ftime lat lon -# 1 1 21 3 256 512 -# ---------------------------- - -# retrieve obs data into workstation -data_obs <- eval(data_obs) - -# check 3 ftimes -PlotLayout(PlotEquiMap, - c('lon', 'lat'), - Subset(data_obs, c('dat', 'var', 'sdate'), list(1, 1, 1)), - attr(data_obs, 'Variables')$common$lon, - attr(data_obs, 'Variables')$common$lat, - fill = FALSE - ) - -# check 2 sdates -PlotLayout(PlotEquiMap, - c('lon', 'lat'), - Subset(data_obs, c('dat', 'var', 'sdate', 'ftime'), list(1, 1, 1:2, 1)), - attr(data_obs, 'Variables')$common$lon, - attr(data_obs, 'Variables')$common$lat, - fill = FALSE - ) - -- GitLab From 8f9e922e0a4aae6ab536d3621981fbad428d3546 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 14 Feb 2020 16:56:28 +0100 Subject: [PATCH 09/49] .md format adjustment --- inst/doc/usecase.md | 8 ++++---- inst/doc/usecase/ex1_2_exp_obs_attr.R | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index 1da3ff5..8f02b8e 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -13,13 +13,13 @@ In this document, you can link to the example scripts for various demands. For t observational data is one file per month, each file contains only one time step. You can learn how to select all the required year and month for observation, and tweak the dimension to make it consistent with experiment. + The highlight paramters used in this usecase are: **'*_across'**, + **'merge_across_dims'**, and **'split_multiselected_dims'**. - The highlight paramters used in this usecase are: '*_across', 'merge_across_dims', - and 'split_multiselected_dims'. - - 3. [Use experimental data attribute to load in oberservational data](inst/doc/usecase/ex1_3_attr_loadin.R) + 3. [Use experimental data attribute to load in oberservational data](inst/doc/usecase/ex1_3_attr_loadin.R) Load the experimental data first (with `retrieve = FALSE`), then retreive its dates and time attributes to use in the observational data load-in. It also shows how to use parameters `xxx_tolerance`, `xxx_across`, `merge_across_dims`, `split_multiselected_dims`. + 2. **Execute computation (use `Compute()`)** 1. [Function working on time dimension](inst/doc/usecase/ex2_1_timedim.R) 2. [Function using attributes of the data](inst/doc/usecase/ex2_2_attr.R) diff --git a/inst/doc/usecase/ex1_2_exp_obs_attr.R b/inst/doc/usecase/ex1_2_exp_obs_attr.R index 32c2d0a..de1926e 100644 --- a/inst/doc/usecase/ex1_2_exp_obs_attr.R +++ b/inst/doc/usecase/ex1_2_exp_obs_attr.R @@ -8,7 +8,7 @@ # 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. +# 'split_multiselected_dims' to create the consistent dimension as experiment. #--------------------------------------------------------------------- library(startR) -- GitLab From 392f5b8d1c6ade6842a4aa2fe1e932643fd103d0 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 14 Feb 2020 17:40:19 +0100 Subject: [PATCH 10/49] Correct typos. --- inst/doc/faq.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 5097bac..1ce2616 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -336,24 +336,24 @@ Look at the position of `extra_queue_params` parameter in a full call of Compute ### 8. Define a path with multiple dependencies -The structure of the BSC Earth data repository, esarchive, allow us to create a path pattern to the data by using diferent variables (between dolar symbol), such as, `$var$`, for the variable name, or `$sdates$`, for the start date of the simulation. Here a example for loading montly simulations of system4_m1 data: +The structure of the BSC Earth data repository 'esarchive' allows us to create a path pattern to the data by using different variables (between dollar symbol), such as `$var$`, for the variable name, or `$sdates$`, for the start date of the simulation. Here is an example for loading monthly simulations of system4_m1 data: `path <- '/esarchive/exp/ecmwf/system4_m1/monthly_mean/$var$_f6h/$var$_$sdate$.nc'` The function Start() will require two parameters 'var' and 'sdate' to load the desired data. -In other cases, the creation of the path could be a litle bit more complicated. Some researcher create their own EC-Earth experiments which are identified by a experiment ID (`$expid$`) and the are run with different model version (`$version`) even for different members (`$member$`): +In some cases, the creation of the path could be a little bit more complicated. Some researchers create their own EC-Earth experiments which are identified by an experiment ID (`$expid$`) and with different model version (`$version`), even for different members (`$member$`): | expid | member | version | |-------|----------|---------| | a1st | r7i1p1f1 |v20190302| | a1sx |r10i1p1f1 |v20190308| -In this case, the variables member and version take different value depending on the expid (the member r10i1p1f1 does not exist for expid a1st). The path will include this varibles: +In this case, the variable member and version have different value depending on the expid (the member r10i1p1f1 does not exist for expid a1st). The path will include this varibles: `path <- '/esarchive/exp/ecearth/$expid$/diags/CMIP/EC-Earth-Consortium/EC-Earth3/historical/$member$/Omon/$var$/gn/$version$/$var$_Omon_EC-Earth3_historical_$member$_gn_$year$.nc'` -However, the following paramters are mandatory to make Start() aware that they are not independent variables: +However, the following parameters are mandatory to make Start() aware of that they are not independent variables: ``` member_depends = 'expid', -- GitLab From 614da27ca9d58d87e3148dd1836c603aedebfeb8 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 18 Feb 2020 18:40:41 +0100 Subject: [PATCH 11/49] Bugfix for lat/lon read-in when assigned by values() in Start(). It was incorrect when the values are from big to small. --- NEWS.md | 2 ++ R/Start.R | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/NEWS.md b/NEWS.md index 90832a3..e50ff10 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,5 @@ +# startR v0.1.5 (Release date:) +- Bugfixes of lat and lon assigned by 'values' in Start(). In v0.1.4 it is incorrect when assigned from big to small values. # startR v0.1.4 (Release date: 2020-02-10) - Bugfixes of transform in Start(). Change the default value of param 'extra_cells' to 2. (issue37) - Bugfixes of chunk function in Utils.R (issue23) diff --git a/R/Start.R b/R/Start.R index eec20ac..c3422bb 100644 --- a/R/Start.R +++ b/R/Start.R @@ -1983,6 +1983,13 @@ print("-> THE INNER DIMENSION DOES NOT GO ACROSS ANY FILE DIMENSION OR IT DOES B tolerance_params[[inner_dim]] }) } + ## This 'if' runs in both Start() and Compute(). In Start(), it doesn't have any effect (no chunk). + ## In Compute(), it creates the indices for each chunk. For example, if 'sub_array_of_indices' + ## is c(5:10) and chunked into 2, 'sub_array_of_indices' becomes c(5:7) for chunk = 1, c(8:10) + ## for chunk = 2. If 'sub_array_of_indices' is list(55, 62) and chunked into 2, it becomes + ## list(55, 58) for chunk = 1 and list(59, 62) for chunk = 2. + ## TODO: The list can be turned into vector here? So afterward no need to judge if it is list + ## or vector. if (!is.list(sub_array_of_indices)) { sub_array_of_indices <- sub_array_of_indices[chunk_indices(length(sub_array_of_indices), chunks[[inner_dim]]["chunk"], @@ -1992,13 +1999,13 @@ print("-> THE INNER DIMENSION DOES NOT GO ACROSS ANY FILE DIMENSION OR IT DOES B tmp <- chunk_indices(length(sub_array_of_indices[[1]]:sub_array_of_indices[[2]]), chunks[[inner_dim]]["chunk"], chunks[[inner_dim]]["n_chunks"], inner_dim) - start_pt <- sub_array_of_indices[[1]] - sub_array_of_indices[[1]] <- start_pt + tmp[1] - 1 - sub_array_of_indices[[2]] <- start_pt + tmp[length(tmp)] - 1 + vect <- sub_array_of_indices[[1]]:sub_array_of_indices[[2]] + sub_array_of_indices[[1]] <- vect[tmp[1]] + sub_array_of_indices[[2]] <- vect[tmp[length(tmp)]] } - # The sub_array_of_indices now contains numeric indices of the values to be taken. + # The sub_array_of_indices now contains numeric indices of the values to be taken by each chunk. -#Check if all the files have the selectors assigned (e.g., region = 'Grnland') _20191015 +# Check if all the files have the selectors assigned (e.g., region = 'Grnland') _20191015 if (is.character(sub_array_of_selectors)) { array_of_var_files_check <- vector('list', length(selector_indices)) for (k in 1:length(selector_indices)) { @@ -3124,3 +3131,4 @@ print(str(store_indices)) } is.null(sub_array) } + -- GitLab From 1e4c87f997929e0c2f22a351c75224518009183a Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 21 Feb 2020 13:32:23 +0100 Subject: [PATCH 12/49] Add FAQ 1-9 about using CDORemap() in function --- inst/doc/faq.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 1ce2616..087e00a 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -12,6 +12,7 @@ This document intends to be the first reference for any doubts that you may have 6. [Get data attributes without retrieving data to workstation](#6-get-data-attributes-without-retrieving-data-to-workstation) 7. [Avoid or specify a node from cluster in Compute()](#7-avoid-or-specify-a-node-from-cluster-in-compute) 8. [Define a path with multiple dependencies](#8-define-a-path-with-multiple-dependencies) + 9. [Use CDORemap() in function](#9-use-cdoremap-in-function) 2. **Something goes wrong...** @@ -380,6 +381,11 @@ data <- Start(dat = repos, retrieve = TRUE) ``` +### 9. Use CDORemap() in function + +If you want to interpolate data by s2dverification::CDORemap in function, you need to tell the +machine which CDO module to use. Therefore, `CDO_module = 'CDO/1.9.5-foss-2018b'` should be +added in Compute() cluster list. See the example in usecase [ex2_3_cdo.R](inst/doc/usecase/ex2_3_cdo.R). ## Something goes wrong... -- GitLab From 4d187d9a12065364edec62d054d84e5b69ed4633 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 21 Feb 2020 17:54:02 +0100 Subject: [PATCH 13/49] Fix lat_reorder when selector is values(list()). --- R/SelectorChecker.R | 34 ++++++++++++++++++++++++++++------ R/Start.R | 9 ++++++--- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/R/SelectorChecker.R b/R/SelectorChecker.R index 141cae2..a37fc83 100644 --- a/R/SelectorChecker.R +++ b/R/SelectorChecker.R @@ -52,7 +52,7 @@ SelectorChecker <- function(selectors, var = NULL, return_indices = TRUE, } } else if (is.numeric(selectors[[i]])) { if (is.numeric(var)) { - val <- selectors[[i]] + tol <- 0 if (!is.null(tolerance)) { if (!any(class(tolerance) %in% "numeric")) { @@ -60,24 +60,46 @@ SelectorChecker <- function(selectors, var = NULL, return_indices = TRUE, } tol <- tolerance } + + val <- selectors[[i]] + if (i == 1) { if (crescent_selectors) { val <- val - tol - selectors[[i]] <- which(var >= val)[1] + if (var[1] < var[2]) { + selectors[[i]] <- which(var >= val)[1] + } else if (var[1] > var[2]) { + selectors[[i]] <- rev(which(var >= val))[1] + } + } else { val <- val + tol - selectors[[i]] <- rev(which(var <= val))[1] + if (var[1] < var[2]) { + selectors[[i]] <- rev(which(var <= val))[1] + } else if (var[1] > var[2]) { + selectors[[i]] <- which(var <= val)[1] + } } } - else { + else if (i == 2) { if (crescent_selectors) { val <- val + tol - selectors[[i]] <- rev(which(var <= val))[1] + if (var[1] < var[2]) { + selectors[[i]] <- rev(which(var <= val))[1] + } else if (var[1] > var[2]) { + selectors[[i]] <- which(var <= val)[1] + } + } else { val <- val - tol - selectors[[i]] <- which(var >= val)[1] + if (var[1] < var[2]) { + selectors[[i]] <- which(var >= val)[1] + } else if (var[1] > var[2]) { + selectors[[i]] <- rev(which(var >= val))[1] + } } } + } else { stop("Numeric selectors provided but possible values in 'var' are not numeric.") } diff --git a/R/Start.R b/R/Start.R index c3422bb..e7de222 100644 --- a/R/Start.R +++ b/R/Start.R @@ -1955,9 +1955,12 @@ print("-> THE INNER DIMENSION DOES NOT GO ACROSS ANY FILE DIMENSION OR IT DOES B if (!is.null(var_ordered) && !selectors_are_indices) { if (!is.null(dim_reorder_params[[inner_dim]])) { if (is.list(sub_array_of_selectors)) { - sub_array_reordered <- dim_reorder_params[[inner_dim]](unlist(sub_array_of_selectors)) - sub_array_unorder <- sort(sub_array_reordered$ix, index.return = TRUE)$ix - sub_array_of_selectors <- as.list(sub_array_reordered$x[sub_array_unorder]) + # HERE change to the same code as below (under 'else'). Not sure why originally + #it uses additional lines, which make reorder not work. + sub_array_of_selectors <- as.list(dim_reorder_params[[inner_dim]](unlist(sub_array_of_selectors))$x) + #sub_array_reordered <- dim_reorder_params[[inner_dim]](unlist(sub_array_of_selectors)) + #sub_array_unorder <- sort(sub_array_reordered$ix, index.return = TRUE)$ix + #sub_array_of_selectors <- as.list(sub_array_reordered$x[sub_array_unorder]) is_circular_dim <- attr(dim_reorder_params[[inner_dim]], 'circular') if (!is.null(is_circular_dim)) { if (is_circular_dim) { -- GitLab From d0a0e2f378e32116efe4f3cf905a8cdc4e2d9b22 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 25 Feb 2020 15:04:07 +0100 Subject: [PATCH 14/49] Fix reordering when transform, also considering if return_vars is common or not --- R/Start.R | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/R/Start.R b/R/Start.R index e7de222..0a1a3ca 100644 --- a/R/Start.R +++ b/R/Start.R @@ -1408,21 +1408,32 @@ debug <- TRUE picked_vars_to_transform <- names(picked_vars[[i]])[picked_vars_to_transform] new_vars_to_transform <- picked_vars[[i]][picked_vars_to_transform] which_are_ordered <- which(!sapply(picked_vars_ordered[[i]][picked_vars_to_transform], is.null)) + +##NOTE: The following 'if' replaces the original with reordering vector if (length(which_are_ordered) > 0) { - new_vars_to_transform[which_are_ordered] <- picked_vars_ordered[[i]][which_are_ordered] + tmp <- which(!is.na(match(names(picked_vars_ordered[[i]]), names(which_are_ordered)))) + new_vars_to_transform[which_are_ordered] <- picked_vars_ordered[[i]][tmp] + } vars_to_transform <- c(vars_to_transform, new_vars_to_transform) } + +##NOTE: Above is non-common vars, here is common vars (ie, return_vars = NULL). picked_common_vars_to_transform <- which(names(picked_common_vars) %in% transform_vars) if (length(picked_common_vars_to_transform) > 0) { picked_common_vars_to_transform <- names(picked_common_vars)[picked_common_vars_to_transform] - new_vars_to_transform <- picked_common_vars[[i]][picked_common_vars_to_transform] - which_are_ordered <- which(!sapply(picked_common_vars_ordered[[i]][picked_common_vars_to_transform], is.null)) + + new_vars_to_transform <- picked_common_vars[picked_common_vars_to_transform] + which_are_ordered <- which(!sapply(picked_common_vars_ordered[picked_common_vars_to_transform], is.null)) + if (length(which_are_ordered) > 0) { - new_vars_to_transform[which_are_ordered] <- picked_common_vars_ordered[[i]][which_are_ordered] + + tmp <- which(!is.na(match(names(picked_common_vars_ordered), names(which_are_ordered)))) + new_vars_to_transform[which_are_ordered] <- picked_common_vars_ordered[tmp] } vars_to_transform <- c(vars_to_transform, new_vars_to_transform) } + # Transform the variables transformed_data <- do.call(transform, c(list(data_array = NULL, variables = vars_to_transform, @@ -2066,8 +2077,23 @@ print("-> SELECTORS REQUESTED BEFORE TRANSFORM.") } subset_vars_to_transform <- vars_to_transform if (!is.null(var_ordered)) { + +##NOTE: if var_ordered is common_vars, it doesn't have attributes and it is a vector. +## Turn it into array and add dimension name. + if (!is.array(var_ordered)) { + var_ordered <- as.array(var_ordered) + names(dim(var_ordered)) <- inner_dim + } + subset_vars_to_transform[[var_with_selectors_name]] <- Subset(var_ordered, inner_dim, sub_array_of_fri) } else { +##NOTE: It should be redundant because without reordering the var should remain array +## But just stay same with above... + if (!is.array(sub_array_of_values)) { + sub_array_of_values <- as.array(sub_array_of_values) + names(dim(sub_array_of_values)) <- inner_dim + } + subset_vars_to_transform[[var_with_selectors_name]] <- Subset(sub_array_of_values, inner_dim, sub_array_of_fri) } transformed_subset_var <- do.call(transform, c(list(data_array = NULL, -- GitLab From 37d7df08c8df1924544542c3fdce9cfc74cd40a6 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Feb 2020 13:19:34 +0100 Subject: [PATCH 15/49] FAQ and use case --- inst/doc/faq.md | 14 ++++++ inst/doc/usecase/ex_1_4_variable_nmember.R | 54 ++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 inst/doc/usecase/ex_1_4_variable_nmember.R diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 087e00a..65326c0 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -13,6 +13,7 @@ This document intends to be the first reference for any doubts that you may have 7. [Avoid or specify a node from cluster in Compute()](#7-avoid-or-specify-a-node-from-cluster-in-compute) 8. [Define a path with multiple dependencies](#8-define-a-path-with-multiple-dependencies) 9. [Use CDORemap() in function](#9-use-cdoremap-in-function) + 10. [The number of members depends on the start date](#10-the-number-of-members-depends-on-the-start-date) 2. **Something goes wrong...** @@ -387,6 +388,19 @@ If you want to interpolate data by s2dverification::CDORemap in function, you ne machine which CDO module to use. Therefore, `CDO_module = 'CDO/1.9.5-foss-2018b'` should be added in Compute() cluster list. See the example in usecase [ex2_3_cdo.R](inst/doc/usecase/ex2_3_cdo.R). +### 10. The number of member depends on the start date + +In seasonal forecast, there are a few start dates that are more widely used (e.g. November 1st) than others. For those start dates extensively used, the number of members available is greater than for other start dates. This is the case of the model system5_m1: + - for the start date November 1st, 1999, there are 51 members available, while + - for the start date September 1st, 1999, there are 25 members available. + +When trying to load both start dates at once using Start(), the order in which the start dates is specify will impact on the dimensions of the dataset if all member are loaded with `member = 'all'`: + - `sdates = c('19991101', '19990901')`, the member dimension will be of length 51, showing missing values for the members 26 to 51 in the second start date; + - `sdates = c('19990901', '19991101')`, the member dimension will be of length 25, any member will be missing. + +The code to reproduce this behaviour could be found in the Use Cases section, [example 1.4](/inst/doc/usecase/ex_1_4_variable_nmember.R). + + ## Something goes wrong... diff --git a/inst/doc/usecase/ex_1_4_variable_nmember.R b/inst/doc/usecase/ex_1_4_variable_nmember.R new file mode 100644 index 0000000..58cdcac --- /dev/null +++ b/inst/doc/usecase/ex_1_4_variable_nmember.R @@ -0,0 +1,54 @@ +# This code shows that the number of members could depend on the start date +# and the order of start dates requested +# See FAQ 10 [The members depends on the start date](/inst/doc/faq.md) + +library(startR) +lats.min <- -90 +lats.max <- 90 +lons.min <- 0 +lons.max <- 360 + +path_list <- list(list(name = 'system5', + path = '/esarchive/exp/ecmwf/system5_m1/monthly_mean/$var$_f6h/$var$_$sdate$.nc')) +sdates_exp <- c('19991101', '19990901') +data_Nov_Sep <- Start(dat = path_list, + var = 'psl', + member = 'all', + sdate = sdates_exp, + time = indices(1), + latitude = values(list(0, 20)), + longitude = values(list(0, 5)), + synonims = list(latitude = c('lat', 'latitude'), + longitude = c('lon', 'longitude'), + member = c('ensemble', 'realization')), + retrieve = TRUE) +# 51 members +dim(data_Nov_Sep) +# dat var member sdate time latitude longitude +# 1 1 51 2 1 640 19 +apply(data_Nov_Sep, 4, function(x){sum(is.na(x))}) +# 26 missing values for the second start date + +sdates_exp <- c('19990901', '19991101') +data_Sep_Nov <- Start(dat = path_list, + var = 'psl', + member = 'all', + sdate = sdates_exp, + time = indices(1), + latitude = values(list(0, 20)), + longitude = values(list(0, 5)), + synonims = list(latitude = c('lat', 'latitude'), + longitude = c('lon', 'longitude'), + member = c('ensemble', 'realization')), + retrieve = TRUE) + +# 25 members available +dim(data_Sep_Nov) +# dat var member sdate time latitude longitude +# 1 1 25 2 1 640 19 + +# Any missing value: +apply(data_Sep_Nov, 4, function(x){sum(is.na(x))}) + + + -- GitLab From 8fcbbafed6f0fafffd6a96dac84a5d8fec9ff9e5 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Feb 2020 15:57:37 +0100 Subject: [PATCH 16/49] Incluing link in usecase.md to new code for member vs startdate --- inst/doc/usecase.md | 4 +++- .../{ex_1_4_variable_nmember.R => ex1_4_variable_nmember.R} | 0 2 files changed, 3 insertions(+), 1 deletion(-) rename inst/doc/usecase/{ex_1_4_variable_nmember.R => ex1_4_variable_nmember.R} (100%) diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index 8f02b8e..3518793 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -18,7 +18,9 @@ In this document, you can link to the example scripts for various demands. For t 3. [Use experimental data attribute to load in oberservational data](inst/doc/usecase/ex1_3_attr_loadin.R) Load the experimental data first (with `retrieve = FALSE`), then retreive its dates and time attributes to use in the observational data load-in. It also shows how to use parameters `xxx_tolerance`, `xxx_across`, `merge_across_dims`, `split_multiselected_dims`. - + + 4. [Checking impact of start date order in the number of members](inst/doc/usecase/ex1_4_variable_nmember.R) + Mixing start dates of different months can lead to load different number of members, check the code provided and the [FAQ 10](/inst/doc/faq.md). 2. **Execute computation (use `Compute()`)** 1. [Function working on time dimension](inst/doc/usecase/ex2_1_timedim.R) diff --git a/inst/doc/usecase/ex_1_4_variable_nmember.R b/inst/doc/usecase/ex1_4_variable_nmember.R similarity index 100% rename from inst/doc/usecase/ex_1_4_variable_nmember.R rename to inst/doc/usecase/ex1_4_variable_nmember.R -- GitLab From 3441fd6d8fdd7f344ae25dff54528267c7b02a97 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Feb 2020 15:58:53 +0100 Subject: [PATCH 17/49] fixing link in faq 10 --- inst/doc/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 65326c0..7f48bc8 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -13,7 +13,7 @@ This document intends to be the first reference for any doubts that you may have 7. [Avoid or specify a node from cluster in Compute()](#7-avoid-or-specify-a-node-from-cluster-in-compute) 8. [Define a path with multiple dependencies](#8-define-a-path-with-multiple-dependencies) 9. [Use CDORemap() in function](#9-use-cdoremap-in-function) - 10. [The number of members depends on the start date](#10-the-number-of-members-depends-on-the-start-date) + 10. [The number of members depends on the start date](#10-the-number-of-members-depends-on-the-start-date) 2. **Something goes wrong...** -- GitLab From 4281bdeea05b9532b0805a231fc8037d78f7c989 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Feb 2020 16:04:31 +0100 Subject: [PATCH 18/49] improving text and link in faq10 --- inst/doc/faq.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 7f48bc8..c561cac 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -388,9 +388,9 @@ If you want to interpolate data by s2dverification::CDORemap in function, you ne machine which CDO module to use. Therefore, `CDO_module = 'CDO/1.9.5-foss-2018b'` should be added in Compute() cluster list. See the example in usecase [ex2_3_cdo.R](inst/doc/usecase/ex2_3_cdo.R). -### 10. The number of member depends on the start date +### 10. The number of members depends on the start date -In seasonal forecast, there are a few start dates that are more widely used (e.g. November 1st) than others. For those start dates extensively used, the number of members available is greater than for other start dates. This is the case of the model system5_m1: +In seasonal forecast, some start dates, such us November 1st, are more widely used than others. For those start dates extensively used, the number of members available is greater than for other start dates. This is the case of the model system5_m1: - for the start date November 1st, 1999, there are 51 members available, while - for the start date September 1st, 1999, there are 25 members available. -- GitLab From 605693ca5478031711e77ea0ccd8f06a0dd6adab Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Feb 2020 16:07:03 +0100 Subject: [PATCH 19/49] fix FAQ 10 link to usecase 1.4 --- inst/doc/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index c561cac..ab10e3c 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -398,7 +398,7 @@ When trying to load both start dates at once using Start(), the order in which t - `sdates = c('19991101', '19990901')`, the member dimension will be of length 51, showing missing values for the members 26 to 51 in the second start date; - `sdates = c('19990901', '19991101')`, the member dimension will be of length 25, any member will be missing. -The code to reproduce this behaviour could be found in the Use Cases section, [example 1.4](/inst/doc/usecase/ex_1_4_variable_nmember.R). +The code to reproduce this behaviour could be found in the Use Cases section, [example 1.4](/inst/doc/usecase/ex1_4_variable_nmember.R). -- GitLab From a6d8407183732b1310b4a0610c0a3c05ed3c76f5 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Feb 2020 16:10:04 +0100 Subject: [PATCH 20/49] Formatting usecase.md 1.4 --- inst/doc/usecase.md | 1 + 1 file changed, 1 insertion(+) diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index 3518793..e1e4614 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -20,6 +20,7 @@ In this document, you can link to the example scripts for various demands. For t Load the experimental data first (with `retrieve = FALSE`), then retreive its dates and time attributes to use in the observational data load-in. It also shows how to use parameters `xxx_tolerance`, `xxx_across`, `merge_across_dims`, `split_multiselected_dims`. 4. [Checking impact of start date order in the number of members](inst/doc/usecase/ex1_4_variable_nmember.R) + Mixing start dates of different months can lead to load different number of members, check the code provided and the [FAQ 10](/inst/doc/faq.md). 2. **Execute computation (use `Compute()`)** -- GitLab From 5345d2e449c364768dc884217a9956ee2d5abd84 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Feb 2020 16:11:12 +0100 Subject: [PATCH 21/49] Formatting usecase.md 1.4 removing line --- inst/doc/usecase.md | 1 - 1 file changed, 1 deletion(-) diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index e1e4614..3518793 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -20,7 +20,6 @@ In this document, you can link to the example scripts for various demands. For t Load the experimental data first (with `retrieve = FALSE`), then retreive its dates and time attributes to use in the observational data load-in. It also shows how to use parameters `xxx_tolerance`, `xxx_across`, `merge_across_dims`, `split_multiselected_dims`. 4. [Checking impact of start date order in the number of members](inst/doc/usecase/ex1_4_variable_nmember.R) - Mixing start dates of different months can lead to load different number of members, check the code provided and the [FAQ 10](/inst/doc/faq.md). 2. **Execute computation (use `Compute()`)** -- GitLab From fba022ce905769b4ae0eaa9bc4462c3c750c1cdb Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Feb 2020 16:11:59 +0100 Subject: [PATCH 22/49] Formatting usecase.md 1.4 adding line --- inst/doc/usecase.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index 3518793..15f2faa 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -20,7 +20,7 @@ In this document, you can link to the example scripts for various demands. For t Load the experimental data first (with `retrieve = FALSE`), then retreive its dates and time attributes to use in the observational data load-in. It also shows how to use parameters `xxx_tolerance`, `xxx_across`, `merge_across_dims`, `split_multiselected_dims`. 4. [Checking impact of start date order in the number of members](inst/doc/usecase/ex1_4_variable_nmember.R) - Mixing start dates of different months can lead to load different number of members, check the code provided and the [FAQ 10](/inst/doc/faq.md). + Mixing start dates of different months can lead to load different number of members, check the code provided and the [FAQ 10](/inst/doc/faq.md). 2. **Execute computation (use `Compute()`)** 1. [Function working on time dimension](inst/doc/usecase/ex2_1_timedim.R) -- GitLab From d12745a9b75fdef6963a4f19fb25e44e27cce764 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Feb 2020 16:13:47 +0100 Subject: [PATCH 23/49] Formatting usecase.md 1.4 adding spaces --- inst/doc/usecase.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index 15f2faa..fcaa782 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -19,8 +19,9 @@ In this document, you can link to the example scripts for various demands. For t 3. [Use experimental data attribute to load in oberservational data](inst/doc/usecase/ex1_3_attr_loadin.R) Load the experimental data first (with `retrieve = FALSE`), then retreive its dates and time attributes to use in the observational data load-in. It also shows how to use parameters `xxx_tolerance`, `xxx_across`, `merge_across_dims`, `split_multiselected_dims`. - 4. [Checking impact of start date order in the number of members](inst/doc/usecase/ex1_4_variable_nmember.R) - Mixing start dates of different months can lead to load different number of members, check the code provided and the [FAQ 10](/inst/doc/faq.md). + 4. [Checking impact of start date order in the number of members](inst/doc/usecase/ex1_4_variable_nmember.R) + Mixing start dates of different months can lead to load different number of members, check the code provided and the [FAQ 10](/inst/doc/faq.md). + 2. **Execute computation (use `Compute()`)** 1. [Function working on time dimension](inst/doc/usecase/ex2_1_timedim.R) -- GitLab From 61bb6ba815414251dc143c40946cb958a0483343 Mon Sep 17 00:00:00 2001 From: nperez Date: Wed, 26 Feb 2020 16:27:36 +0100 Subject: [PATCH 24/49] Removing unnecessary lines and adding lat Sort --- inst/doc/usecase/ex1_4_variable_nmember.R | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/inst/doc/usecase/ex1_4_variable_nmember.R b/inst/doc/usecase/ex1_4_variable_nmember.R index 58cdcac..495c6f8 100644 --- a/inst/doc/usecase/ex1_4_variable_nmember.R +++ b/inst/doc/usecase/ex1_4_variable_nmember.R @@ -3,10 +3,6 @@ # See FAQ 10 [The members depends on the start date](/inst/doc/faq.md) library(startR) -lats.min <- -90 -lats.max <- 90 -lons.min <- 0 -lons.max <- 360 path_list <- list(list(name = 'system5', path = '/esarchive/exp/ecmwf/system5_m1/monthly_mean/$var$_f6h/$var$_$sdate$.nc')) @@ -17,6 +13,7 @@ data_Nov_Sep <- Start(dat = path_list, sdate = sdates_exp, time = indices(1), latitude = values(list(0, 20)), + latitude_reorder=Sort(), longitude = values(list(0, 5)), synonims = list(latitude = c('lat', 'latitude'), longitude = c('lon', 'longitude'), @@ -25,7 +22,7 @@ data_Nov_Sep <- Start(dat = path_list, # 51 members dim(data_Nov_Sep) # dat var member sdate time latitude longitude -# 1 1 51 2 1 640 19 +# 1 1 51 2 1 71 19 apply(data_Nov_Sep, 4, function(x){sum(is.na(x))}) # 26 missing values for the second start date @@ -36,6 +33,7 @@ data_Sep_Nov <- Start(dat = path_list, sdate = sdates_exp, time = indices(1), latitude = values(list(0, 20)), + latitude_reorder=Sort(), longitude = values(list(0, 5)), synonims = list(latitude = c('lat', 'latitude'), longitude = c('lon', 'longitude'), @@ -45,7 +43,7 @@ data_Sep_Nov <- Start(dat = path_list, # 25 members available dim(data_Sep_Nov) # dat var member sdate time latitude longitude -# 1 1 25 2 1 640 19 +# 1 1 25 2 1 71 19 # Any missing value: apply(data_Sep_Nov, 4, function(x){sum(is.na(x))}) -- GitLab From 90213b855c3aaf07b89ef4abf1c1915336ac3f09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ver=C3=B3nica=20Torralba-Fern=C3=A1ndez?= Date: Wed, 26 Feb 2020 16:40:02 +0100 Subject: [PATCH 25/49] Update faq.md --- inst/doc/faq.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index ab10e3c..572bff8 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -390,11 +390,11 @@ added in Compute() cluster list. See the example in usecase [ex2_3_cdo.R](inst/d ### 10. The number of members depends on the start date -In seasonal forecast, some start dates, such us November 1st, are more widely used than others. For those start dates extensively used, the number of members available is greater than for other start dates. This is the case of the model system5_m1: +In seasonal forecast, some start dates, such as November 1st, are more widely used than others. For those start dates extensively used, the number of members available is greater than for other start dates. This is the case of the seasonal forecast system ECMWF SEAS5 (system5_m1): - for the start date November 1st, 1999, there are 51 members available, while - for the start date September 1st, 1999, there are 25 members available. -When trying to load both start dates at once using Start(), the order in which the start dates is specify will impact on the dimensions of the dataset if all member are loaded with `member = 'all'`: +When trying to load both start dates at once using Start(), the order in which the start dates is specified will impact on the dimensions of the dataset if all members are loaded with `member = 'all'`: - `sdates = c('19991101', '19990901')`, the member dimension will be of length 51, showing missing values for the members 26 to 51 in the second start date; - `sdates = c('19990901', '19991101')`, the member dimension will be of length 25, any member will be missing. -- GitLab From c70f447a3209fd83942d10833a2650e904757c1a Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 4 Mar 2020 09:39:16 +0100 Subject: [PATCH 26/49] Remove param lib_dir in Compute(). The example path is out-of-date. --- inst/doc/practical_guide.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/inst/doc/practical_guide.md b/inst/doc/practical_guide.md index 0ae2806..d476652 100644 --- a/inst/doc/practical_guide.md +++ b/inst/doc/practical_guide.md @@ -87,7 +87,6 @@ res <- Compute(wf, cluster = list(queue_host = 'p9login1.bsc.es', queue_type = 'slurm', temp_dir = '/gpfs/scratch/bsc32/bsc32473/startR_hpc/', - lib_dir = '/gpfs/projects/bsc32/share/R_libs/3.5/', r_module = 'R/3.5.0-foss-2018b', job_wallclock = '00:10:00', cores_per_job = 4, @@ -570,7 +569,6 @@ res <- Compute(wf, cluster = list(queue_host = 'p9login1.bsc.es', queue_type = 'slurm', temp_dir = '/gpfs/scratch/bsc32/bsc32473/startR_hpc/', - lib_dir = '/gpfs/projects/bsc32/share/R_libs/3.5/', r_module = 'R/3.5.0-foss-2018b', cores_per_job = 4, job_wallclock = '00:10:00', @@ -703,7 +701,6 @@ res <- Compute(wf, cluster = list(queue_host = 'p9login1.bsc.es', queue_type = 'slurm', temp_dir = '/gpfs/scratch/bsc32/bsc32473/startR_hpc/', - lib_dir = '/gpfs/projects/bsc32/share/R_libs/3.5/', r_module = 'R/3.5.0-foss-2018b', cores_per_job = 4, job_wallclock = '00:10:00', @@ -951,7 +948,6 @@ res <- Compute(wf, queue_type = 'slurm', data_dir = '/gpfs/projects/bsc32/share/startR_data_repos/', temp_dir = '/gpfs/scratch/pr1efe00/pr1efe03/startR_tests/', - lib_dir = '/gpfs/projects/bsc32/share/R_libs/3.4/', r_module = 'R/3.4.0', cores_per_job = 2, job_wallclock = '00:10:00', @@ -1027,7 +1023,6 @@ r <- Compute(wf, cluster = list(queue_host = 'p9login1.bsc.es', queue_type = 'slurm', temp_dir = '/gpfs/scratch/bsc32/bsc32473/startR_hpc/', - lib_dir = '/gpfs/projects/bsc32/share/R_libs/3.5/', r_module = 'R/3.5.0-foss-2018b', cores_per_job = 4, job_wallclock = '00:10:00', @@ -1056,7 +1051,6 @@ cluster = list(queue_host = 'mn2.bsc.es', queue_type = 'slurm', data_dir = '/gpfs/projects/bsc32/share/startR_data_repos/', temp_dir = '/gpfs/scratch/pr1efe00/pr1efe03/startR_hpc/', - lib_dir = '/gpfs/projects/bsc32/share/R_libs/3.4/', r_module = 'R/3.4.0', cores_per_job = 2, job_wallclock = '00:10:00', @@ -1075,7 +1069,6 @@ cluster = list(queue_host = 'nord1.bsc.es', queue_type = 'lsf', data_dir = '/gpfs/projects/bsc32/share/startR_data_repos/', temp_dir = '/gpfs/scratch/bsc32/bsc32473/startR_hpc/', - lib_dir = '/gpfs/projects/bsc32/share/R_libs/3.3/', init_commands = list('module load intel/16.0.1'), r_module = 'R/3.3.0', cores_per_job = 2, @@ -1095,7 +1088,6 @@ cluster = list(queue_host = 'mt1.bsc.es', queue_type = 'slurm', data_dir = '/gpfs/projects/bsc32/share/startR_data_repos/', temp_dir = '/gpfs/scratch/bsc32/bsc32473/startR_hpc/', - lib_dir = '/gpfs/projects/bsc32/share/R_libs/3.3/', r_module = 'R/3.3.3', cores_per_job = 2, job_wallclock = '00:10:00', -- GitLab From 8f83c20fb46ccbeb0267d29adc24834e74a94c3e Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 11 Mar 2020 09:04:15 +0100 Subject: [PATCH 27/49] Fix bugs for non-transform longitude reorder (CircularSort) --- R/SelectorChecker.R | 32 ++++++++++++++++++++++++++++++++ R/Start.R | 30 +++++++++++++++++++++--------- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/R/SelectorChecker.R b/R/SelectorChecker.R index a37fc83..817610b 100644 --- a/R/SelectorChecker.R +++ b/R/SelectorChecker.R @@ -100,10 +100,34 @@ SelectorChecker <- function(selectors, var = NULL, return_indices = TRUE, } } + # Check if the selectors (i.e., lower/upper limits) out of range + if (!is.na(selectors[[i]])) { + if (i == 1) { + if (val < min(var)) { + warning(paste0("The lower boundary of selector of ", + attr(attr(selectors, "dim"), "names"), + " is out of range [", + min(var), ", ", max(var), "]. ", + "Check if the desired range is all included.")) + } + + } else if (i == 2) { + if (val > max(var)) { + warning(paste0("The upper boundary of selector of ", + attr(attr(selectors, "dim"), "names"), + " is out of range [", + min(var), ", ", max(var), "]. ", + "Check if the desired range is all included.")) + } + } + } + + } else { stop("Numeric selectors provided but possible values in 'var' are not numeric.") } } else if (any(c("POSIXct", "POSIXlt", "POSIXt", "Date") %in% class(selectors[[i]]))) { + # TODO: Here, change to as above (numeric part). if (any(c("POSIXct", "POSIXlt", "POSIXt", "Date") %in% class(var))) { val <- selectors[[i]] tol <- 0 @@ -136,6 +160,14 @@ SelectorChecker <- function(selectors, var = NULL, return_indices = TRUE, } } } + + # Check if any of the selectors are NA + if (any(is.na(selectors))) { + stop(paste0("The selectors of ", attr(attr(selectors, + "dim"), "names"), " are out of range [", range(var)[1], + ", ", range(var)[2], "].")) + } + # The checker is returning a list of two indices. ##selectors[[1]]:selectors[[2]] selectors diff --git a/R/Start.R b/R/Start.R index 0a1a3ca..577921c 100644 --- a/R/Start.R +++ b/R/Start.R @@ -1966,19 +1966,27 @@ print("-> THE INNER DIMENSION DOES NOT GO ACROSS ANY FILE DIMENSION OR IT DOES B if (!is.null(var_ordered) && !selectors_are_indices) { if (!is.null(dim_reorder_params[[inner_dim]])) { if (is.list(sub_array_of_selectors)) { + +## NOTE: The check of 'goes_across_prime_meridian' is moved forward to here. + is_circular_dim <- attr(dim_reorder_params[[inner_dim]], "circular") + if (!is.null(is_circular_dim)) { + if (is_circular_dim) { + +# NOTE: Use CircularSort() to put the values in the assigned range, and get the order. +# For example, [-10, 20] in CircularSort(0, 360) is [350, 20]. The $ix list is [2, 1]. +# 'goes_across_prime_meridian' means the selector range across the border. For example, +# CircularSort(-180, 180) with selector [170, 190] -> goes_across_prime_meridian = TRUE. + tmp <- dim_reorder_params[[inner_dim]](unlist(sub_array_of_selectors))$ix + goes_across_prime_meridian <- tmp[1] > tmp[2] + } + } + # HERE change to the same code as below (under 'else'). Not sure why originally #it uses additional lines, which make reorder not work. sub_array_of_selectors <- as.list(dim_reorder_params[[inner_dim]](unlist(sub_array_of_selectors))$x) #sub_array_reordered <- dim_reorder_params[[inner_dim]](unlist(sub_array_of_selectors)) #sub_array_unorder <- sort(sub_array_reordered$ix, index.return = TRUE)$ix #sub_array_of_selectors <- as.list(sub_array_reordered$x[sub_array_unorder]) - is_circular_dim <- attr(dim_reorder_params[[inner_dim]], 'circular') - if (!is.null(is_circular_dim)) { - if (is_circular_dim) { - goes_across_prime_meridian <- abs(sub_array_of_selectors[[1]]) > abs(sub_array_of_selectors[[2]]) - ## TODO: if (bounds[1] > bounds[2]) goes_across_prime_meridian <- !goes_across_prime_meridian - } - } } else { sub_array_of_selectors <- dim_reorder_params[[inner_dim]](sub_array_of_selectors)$x } @@ -2052,6 +2060,9 @@ if (inner_dim %in% dims_to_check) { print("-> SELECTORS REQUESTED BEFORE TRANSFORM.") } } + +###NOTE: Here, the transform, is different from the below part of non-transform. +# search 'if (goes_across_prime_meridian' to find the lines below. if (goes_across_prime_meridian) { sub_array_of_fri <- 1:n #gap_width <- sub_array_of_indices[[1]] - sub_array_of_indices[[2]] - 1 @@ -2171,8 +2182,9 @@ print(str(tvi)) list(value = sub_array_of_sri))) } else { if (goes_across_prime_meridian) { - #sub_array_of_fri <- 1:n - sub_array_of_fri <- c(1:sub_array_of_indices[[2]], sub_array_of_indices[[1]]:n) + sub_array_of_fri <- c(1:min(unlist(sub_array_of_indices)), + max(unlist(sub_array_of_indices)):n) + } else if (is.list(sub_array_of_indices)) { sub_array_of_fri <- sub_array_of_indices[[1]]:sub_array_of_indices[[2]] } else { -- GitLab From ee6c43aeb605973a12be5651733d935a96493d78 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 11 Mar 2020 10:01:59 +0100 Subject: [PATCH 28/49] Fix the warning in SelectorChecker() for out-of-range selectors --- R/SelectorChecker.R | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/R/SelectorChecker.R b/R/SelectorChecker.R index 817610b..1701ee0 100644 --- a/R/SelectorChecker.R +++ b/R/SelectorChecker.R @@ -103,21 +103,21 @@ SelectorChecker <- function(selectors, var = NULL, return_indices = TRUE, # Check if the selectors (i.e., lower/upper limits) out of range if (!is.na(selectors[[i]])) { if (i == 1) { - if (val < min(var)) { - warning(paste0("The lower boundary of selector of ", - attr(attr(selectors, "dim"), "names"), - " is out of range [", - min(var), ", ", max(var), "]. ", - "Check if the desired range is all included.")) + if (val < range(var)[1] | val > range(var)[2]) { + .warning(paste0("The lower boundary of selector of ", + attr(attr(selectors, "dim"), "names"), + " is out of range [", + min(var), ", ", max(var), "]. ", + "Check if the desired range is all included.")) } } else if (i == 2) { - if (val > max(var)) { - warning(paste0("The upper boundary of selector of ", - attr(attr(selectors, "dim"), "names"), - " is out of range [", - min(var), ", ", max(var), "]. ", - "Check if the desired range is all included.")) + if (val < range(var)[1] | val > range(var)[2]) { + .warning(paste0("The upper boundary of selector of ", + attr(attr(selectors, "dim"), "names"), + " is out of range [", + min(var), ", ", max(var), "]. ", + "Check if the desired range is all included.")) } } } -- GitLab From cc4c5401ed5c304283b49ff22c61a2bc757ac4ea Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 11 Mar 2020 13:36:28 +0100 Subject: [PATCH 29/49] Move the out-of-range warning from SelectorChecker() to Start() --- R/SelectorChecker.R | 22 ---------------------- R/Start.R | 46 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/R/SelectorChecker.R b/R/SelectorChecker.R index 1701ee0..a92e349 100644 --- a/R/SelectorChecker.R +++ b/R/SelectorChecker.R @@ -100,28 +100,6 @@ SelectorChecker <- function(selectors, var = NULL, return_indices = TRUE, } } - # Check if the selectors (i.e., lower/upper limits) out of range - if (!is.na(selectors[[i]])) { - if (i == 1) { - if (val < range(var)[1] | val > range(var)[2]) { - .warning(paste0("The lower boundary of selector of ", - attr(attr(selectors, "dim"), "names"), - " is out of range [", - min(var), ", ", max(var), "]. ", - "Check if the desired range is all included.")) - } - - } else if (i == 2) { - if (val < range(var)[1] | val > range(var)[2]) { - .warning(paste0("The upper boundary of selector of ", - attr(attr(selectors, "dim"), "names"), - " is out of range [", - min(var), ", ", max(var), "]. ", - "Check if the desired range is all included.")) - } - } - } - } else { stop("Numeric selectors provided but possible values in 'var' are not numeric.") diff --git a/R/Start.R b/R/Start.R index 577921c..ad5ea76 100644 --- a/R/Start.R +++ b/R/Start.R @@ -1987,6 +1987,24 @@ print("-> THE INNER DIMENSION DOES NOT GO ACROSS ANY FILE DIMENSION OR IT DOES B #sub_array_reordered <- dim_reorder_params[[inner_dim]](unlist(sub_array_of_selectors)) #sub_array_unorder <- sort(sub_array_reordered$ix, index.return = TRUE)$ix #sub_array_of_selectors <- as.list(sub_array_reordered$x[sub_array_unorder]) + +# Add warning if the boundary is out of range + if (sub_array_of_selectors[1] < range(var_ordered)[1] | sub_array_of_selectors[1] > range(var_ordered)[2]) { + .warning(paste0("The lower boundary of selector of ", + inner_dim, + " is out of range [", + min(var_ordered), ", ", max(var_ordered), "]. ", + "Check if the desired range is all included.")) + } + if (sub_array_of_selectors[2] < range(var_ordered)[1] | sub_array_of_selectors[2] > range(var_ordered)[2]) { + .warning(paste0("The upper boundary of selector of ", + inner_dim, + " is out of range [", + min(var_ordered), ", ", max(var_ordered), "]. ", + "Check if the desired range is all included.")) + } + + } else { sub_array_of_selectors <- dim_reorder_params[[inner_dim]](sub_array_of_selectors)$x } @@ -1998,6 +2016,34 @@ print("-> THE INNER DIMENSION DOES NOT GO ACROSS ANY FILE DIMENSION OR IT DOES B tolerance_params[[inner_dim]] }) } else { + +# Add warning if the boundary is out of range + if (is.list(sub_array_of_selectors)) { + print("HEREEEE") + print("sub_array_of_selectors") + print(str(sub_array_of_selectors)) + print("sub_array_of_values") + print(str(sub_array_of_values)) + if (sub_array_of_selectors[1] < + min(sub_array_of_values) | sub_array_of_selectors[1] > + max(sub_array_of_values)) { + .warning(paste0("The lower boundary of selector of ", + inner_dim, " is out of range [", + min(sub_array_of_values), ", ", + max(sub_array_of_values), "]. ", + "Check if the desired range is all included.")) + } + if (sub_array_of_selectors[2] < + min(sub_array_of_values) | sub_array_of_selectors[2] > + max(sub_array_of_values)) { + .warning(paste0("The upper boundary of selector of ", + inner_dim, " is out of range [", + min(sub_array_of_values), ", ", + max(sub_array_of_values), "]. ", + "Check if the desired range is all included.")) + } + } + sub_array_of_indices <- selector_checker(sub_array_of_selectors, sub_array_of_values, tolerance = if (aiat) { NULL -- GitLab From f09e29d8358b7a40f5baef3d57f230efe2922d7a Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 12 Mar 2020 17:35:07 +0100 Subject: [PATCH 30/49] Fix bugs for transform longitude reorder (CircularSort) and without reorder cases --- R/Start.R | 64 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 19 deletions(-) diff --git a/R/Start.R b/R/Start.R index ad5ea76..9b77868 100644 --- a/R/Start.R +++ b/R/Start.R @@ -2015,15 +2015,18 @@ print("-> THE INNER DIMENSION DOES NOT GO ACROSS ANY FILE DIMENSION OR IT DOES B } else { tolerance_params[[inner_dim]] }) + + if (any(is.na(sub_array_of_indices))) { + + stop(paste0("The selectors of ", inner_dim, + " are out of range [", min(var_ordered), + ", ", max(var_ordered), "].")) + } + } else { # Add warning if the boundary is out of range if (is.list(sub_array_of_selectors)) { - print("HEREEEE") - print("sub_array_of_selectors") - print(str(sub_array_of_selectors)) - print("sub_array_of_values") - print(str(sub_array_of_values)) if (sub_array_of_selectors[1] < min(sub_array_of_values) | sub_array_of_selectors[1] > max(sub_array_of_values)) { @@ -2050,6 +2053,14 @@ print("-> THE INNER DIMENSION DOES NOT GO ACROSS ANY FILE DIMENSION OR IT DOES B } else { tolerance_params[[inner_dim]] }) + + if (any(is.na(sub_array_of_indices))) { + + stop(paste0("The selectors of ", inner_dim, + " are out of range [", min(sub_array_of_values), + ", ", max(sub_array_of_values), "].")) + } + } ## This 'if' runs in both Start() and Compute(). In Start(), it doesn't have any effect (no chunk). ## In Compute(), it creates the indices for each chunk. For example, if 'sub_array_of_indices' @@ -2110,7 +2121,12 @@ print("-> SELECTORS REQUESTED BEFORE TRANSFORM.") ###NOTE: Here, the transform, is different from the below part of non-transform. # search 'if (goes_across_prime_meridian' to find the lines below. if (goes_across_prime_meridian) { - sub_array_of_fri <- 1:n +# NOTE: before changing, the return is already correct. sub_array_of_fri is defined +# again afterward. Not sure if here is redundant. + sub_array_of_fri <- c(1:min(unlist(sub_array_of_indices)), + max(unlist(sub_array_of_indices)):n) + + #gap_width <- sub_array_of_indices[[1]] - sub_array_of_indices[[2]] - 1 #sub_array_of_fri <- c((1:(sub_array_of_indices[[2]] + min(gap_width, beta))), # (sub_array_of_indices[[1]] - min(gap_width, beta)):n) @@ -2120,17 +2136,16 @@ print("-> SELECTORS REQUESTED BEFORE TRANSFORM.") } first_index <- min(unlist(sub_array_of_indices)) last_index <- max(unlist(sub_array_of_indices)) - if (first_index - beta <= 0 | last_index + beta > n) { - sub_array_of_fri <- 1:n - .warning(paste0("Adding the parameter transform_extra_cells = ", - transform_extra_cells, " to the transformed index excesses ", - "the border. Use the whole index instead.")) - } else { - sub_array_of_fri <- (first_index - beta):(last_index + beta) - } - #start_padding <- min(beta, first_index - 1) - #end_padding <- min(beta, n - last_index) - #sub_array_of_fri <- (first_index - start_padding):(last_index + end_padding) + + start_padding <- min(beta, first_index - 1) + end_padding <- min(beta, n - last_index) + sub_array_of_fri <- (first_index - start_padding):(last_index + end_padding) + if (start_padding != beta | end_padding != beta) { + .warning(paste0("Adding parameter transform_extra_cells = ", + transform_extra_cells, " to the transformed index excesses ", + "the border. The border index is used for transformation.")) + } + } subset_vars_to_transform <- vars_to_transform if (!is.null(var_ordered)) { @@ -2153,6 +2168,14 @@ print("-> SELECTORS REQUESTED BEFORE TRANSFORM.") subset_vars_to_transform[[var_with_selectors_name]] <- Subset(sub_array_of_values, inner_dim, sub_array_of_fri) } +## NOTE: Remove 'crop' from transform_params if no reorder. It causes error. +## But 'crop' has effect on reorder cases... need further investigation + if (is.null(dim_reorder_params[[inner_dim]])) { + if ('crop' %in% names(transform_params)) { + transform_params <- transform_params[-which(names(transform_params) == 'crop')] + } + } + transformed_subset_var <- do.call(transform, c(list(data_array = NULL, variables = subset_vars_to_transform, file_selectors = selectors_of_first_files_with_data[[i]]), @@ -2172,8 +2195,11 @@ print("-> SELECTORS REQUESTED BEFORE TRANSFORM.") NULL }) if (goes_across_prime_meridian) { - sub_array_of_sri <- c(1:sub_array_of_sri[[2]], sub_array_of_sri[[1]]:length(transformed_subset_var)) - #sub_array_of_sri <- c(sub_array_of_sri[[1]]:length(transformed_subset_var), 1:sub_array_of_sri[[2]]) + # Because sub_array_of_sri order is exchanged due to + # previous development, here [[1]] and [[2]] should exchange + sub_array_of_sri <- c(1:sub_array_of_sri[[1]], + sub_array_of_sri[[2]]:length(transformed_subset_var)) + } else if (is.list(sub_array_of_sri)) { sub_array_of_sri <- sub_array_of_sri[[1]]:sub_array_of_sri[[2]] } -- GitLab From 1d7154ae898c7eb959021ea2784611105b73f574 Mon Sep 17 00:00:00 2001 From: aho Date: Tue, 17 Mar 2020 21:58:42 +0100 Subject: [PATCH 31/49] Bugfix for lon-unreorder-transform. If the selectors is out of transform grid range, return Error. --- R/Start.R | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/R/Start.R b/R/Start.R index 9b77868..8a34b07 100644 --- a/R/Start.R +++ b/R/Start.R @@ -2194,6 +2194,18 @@ print("-> SELECTORS REQUESTED BEFORE TRANSFORM.") } else { NULL }) + +# Check if selectors fall out of the range of the transform grid +# It may happen when original lon is [-180, 180] while want to regrid to +# [0, 360], and lon selector = [-20, -10]. + if (any(is.na(sub_array_of_sri))) { + stop(paste0("The selectors of ", + inner_dim, " are out of range of transform grid '", + transform_params$grid, "'. Use parameter '", + inner_dim, "_reorder' or change ", inner_dim, + " selectors.")) + } + if (goes_across_prime_meridian) { # Because sub_array_of_sri order is exchanged due to # previous development, here [[1]] and [[2]] should exchange -- GitLab From abd2e47231b4c05310fb20d8ee3aef8745248d18 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 18 Mar 2020 20:18:55 +0100 Subject: [PATCH 32/49] Add How-to-#11 about lat/lon convention --- inst/doc/faq.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 572bff8..1fc988d 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -14,6 +14,7 @@ This document intends to be the first reference for any doubts that you may have 8. [Define a path with multiple dependencies](#8-define-a-path-with-multiple-dependencies) 9. [Use CDORemap() in function](#9-use-cdoremap-in-function) 10. [The number of members depends on the start date](#10-the-number-of-members-depends-on-the-start-date) + 11. [Read latitude and longitude with the usage of parameter 'xxx_reorder'](#11-read-latitude-and-longitude-with-the-usage-of-parameter-xxx-reorder) 2. **Something goes wrong...** @@ -400,6 +401,31 @@ When trying to load both start dates at once using Start(), the order in which t The code to reproduce this behaviour could be found in the Use Cases section, [example 1.4](/inst/doc/usecase/ex1_4_variable_nmember.R). +### 11. Read latitude and longitude with the usage of parameter 'xxx_reorder' + +There are three ways to specify the dimension selectors: special keywords('all', 'first', 'last'), indices, or values (find more details in [pratical guide](inst/doc/practical_guide.md)). +The parameter 'xxx_reorder' is only effective when using values. + +There are two reorder functions in startR package, Sort() for latitude and CircularSort() for longitude. +Sort() is a wrapper function of base function sort(), rearranging the values from low to high (decreasing = TRUE, default) or +from high to low (decreasing = FALSE). For example, if you want to sort latitude from 90 to -90, use `latitude_reorder = Sort(decreasing = TRUE)`. +By this means, the result will always from big to small value no matter how the original order is. + +On the other hand, the concept of CircularSort() is different. It is used for a circular region, putting the out-of-region values back to the region. +It requires two input numbers defining the borders of the whole region, which are usually [0, 360] or [-180, 180]. For example, +`longitude_reorder = CircularSort(0, 360)` means that the left border is 0 and the right border is 360, so 360 will be put back to 0, 361 will be put back to 1, +and -1 will become 359. After circulating values, CircularSort() also sorts the values from small to big. It may cause the discontinous sub-region, +but the problem can be solved by assigning the borders correctly. + +The following chart helps you to decide how to use CircularSort() to get the desired region. +Note that this chart only provides the idea. The real numbers may slightly differ depending on the original/transform values. + +(Here needs to insert the chart) + +If parameter 'xxx_reorder' is not used, the situation will be more complicated and easier to get unexpected results. +The following chart shows some examples. We encourage to always use 'xxx_reorder' so you can ensure the results are in line with your expectation. + +(Here needs to insert the chart) ## Something goes wrong... -- GitLab From ba165f80a44d6f233a222eeeaccda4015f59fa48 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 18 Mar 2020 20:40:55 +0100 Subject: [PATCH 33/49] Remove the out-of-range error in SelectorChecker. It is in Start() now. --- R/SelectorChecker.R | 7 ------- 1 file changed, 7 deletions(-) diff --git a/R/SelectorChecker.R b/R/SelectorChecker.R index a92e349..14bae7e 100644 --- a/R/SelectorChecker.R +++ b/R/SelectorChecker.R @@ -139,13 +139,6 @@ SelectorChecker <- function(selectors, var = NULL, return_indices = TRUE, } } - # Check if any of the selectors are NA - if (any(is.na(selectors))) { - stop(paste0("The selectors of ", attr(attr(selectors, - "dim"), "names"), " are out of range [", range(var)[1], - ", ", range(var)[2], "].")) - } - # The checker is returning a list of two indices. ##selectors[[1]]:selectors[[2]] selectors -- GitLab From 7e99b6a2f46475c4ed0eee238667e82ed3e499f9 Mon Sep 17 00:00:00 2001 From: aho Date: Wed, 18 Mar 2020 21:05:46 +0100 Subject: [PATCH 34/49] Fix hyperlink for how-to-#11 --- inst/doc/faq.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 1fc988d..331a99a 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -14,7 +14,7 @@ This document intends to be the first reference for any doubts that you may have 8. [Define a path with multiple dependencies](#8-define-a-path-with-multiple-dependencies) 9. [Use CDORemap() in function](#9-use-cdoremap-in-function) 10. [The number of members depends on the start date](#10-the-number-of-members-depends-on-the-start-date) - 11. [Read latitude and longitude with the usage of parameter 'xxx_reorder'](#11-read-latitude-and-longitude-with-the-usage-of-parameter-xxx-reorder) + 11. [Read latitude and longitude with the usage of parameter 'xxx_reorder'](#11-read-latitude-and-longitude-with-the-usage-of-parameter-xxx_reorder) 2. **Something goes wrong...** @@ -418,6 +418,7 @@ and -1 will become 359. After circulating values, CircularSort() also sorts the but the problem can be solved by assigning the borders correctly. The following chart helps you to decide how to use CircularSort() to get the desired region. +The first row represents `values(list(lon.min, lon.max))`. Note that this chart only provides the idea. The real numbers may slightly differ depending on the original/transform values. (Here needs to insert the chart) -- GitLab From 5cd342e2998699b00c636f6a8d0231ab9f47d82f Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 19 Mar 2020 10:21:54 +0100 Subject: [PATCH 35/49] Add usecase for latlon reorder functions. --- inst/doc/usecase.md | 5 + inst/doc/usecase/ex1_5_latlon_reorder.R | 170 ++++++++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100644 inst/doc/usecase/ex1_5_latlon_reorder.R diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index fcaa782..5edf112 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -22,6 +22,11 @@ In this document, you can link to the example scripts for various demands. For t 4. [Checking impact of start date order in the number of members](inst/doc/usecase/ex1_4_variable_nmember.R) Mixing start dates of different months can lead to load different number of members, check the code provided and the [FAQ 10](/inst/doc/faq.md). + 5. [Use reorder functions to get desired lat/lon region](inst/doc/usecase/ex1_5_latlon_reorder.R) + This script shows you how to use reorder function (`Sort()`, `CircularSort()`) to +get the desired longitude and latitude region. See [faq.md How-to-#11] (/inst/doc/faq.md#11-read-latitude-and-longitude-with-the-usage-of-parameter-xxx_reorder) +for more explanation. + 2. **Execute computation (use `Compute()`)** 1. [Function working on time dimension](inst/doc/usecase/ex2_1_timedim.R) diff --git a/inst/doc/usecase/ex1_5_latlon_reorder.R b/inst/doc/usecase/ex1_5_latlon_reorder.R new file mode 100644 index 0000000..c54314f --- /dev/null +++ b/inst/doc/usecase/ex1_5_latlon_reorder.R @@ -0,0 +1,170 @@ +#--------------------------------------------------------------------- +# This script shows you how to use reorder function (Sort, CircularSort) +# to get the desired longitude and latitude region. + +# Note that the information of the lon/lat system in the original file is +# provided in order to illustrate a clearer picture, but it doesn't affect +# the results as long as the reorder functions are used. + +# Also, whether transformation is used or not, the range results remain the same. + +# See faq.md How-to-#11 for more explanation. + +#--------------------------------------------------------------------- + +library(startR) + +#---------------------------- +# CASE 1: +# Original file: lon [0:360]; lat [90:-90] +# Desired region: lon [-10, 10] in [-180, 180] system; lat [-20, 20] from south to north +# transformation: No +#---------------------------- +# tips: +# 1. Use 'latitude_reorder = Sort()' to sort latitude from south to north. +# The default of the hidden parameter 'decreasing' is TRUE. +# 2. Use 'longitude_reorder = CircularSort(-180, 180). It helps put the longitude values +# in [-180:180] system, so you can get the continuous region across 0 degree. +# 3. With reorder functions, the original file range does not affect the results. +#---------------------------- + +path_exp <- paste0('/esarchive/exp/ecmwf/system5_m1/daily_mean/', + '$var$_f6h/$var$_$sdate$.nc') +var <- 'psl' +sdate <- '19821201' + +lons.min <- -10 +lons.max <- 10 +lats.min <- -20 +lats.max <- 20 + + +res <- Start(dat = path_exp, + var = var, + ensemble = 'first', + sdate = sdate, + time = indices(1), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# Check the longitude and latitude +as.vector(attr(res, 'Variables')$dat1$latitude) +# [1] -19.8126401 ...... [142] 19.8126401 +as.vector(attr(res, 'Variables')$dat1$longitude) +# [1] -10.0000000 ...... [73] 10.0000000 + + + +#---------------------------- +# CASE 2: +# Original file: lon [0:360]; lat [90:-90] +# Desired region: lon [-10, 10] in [-180, 180] system; lat [20, -20] from north to south +# transformation: Yes, to 'r360x181' +#---------------------------- +# tips: +# 1. Use 'latitude_reorder = Sort(decreasing = TRUE)' to sort latitude from north to south. +# 2. Use 'longitude_reorder = CircularSort(-180, 180). It helps put the longitude values +# in [-180:180] system, so you can get the continuous region across 0 degree. +# 3. With the usage of reorder functions, transformation does not affect the results. +# 4. With reorder functions, the original file range does not affect the results. +#---------------------------- + +path_exp <- paste0('/esarchive/exp/ecmwf/system5_m1/daily_mean/', + '$var$_f6h/$var$_$sdate$.nc') +var <- 'psl' +sdate <- '19821201' + +lons.min <- -10 +lons.max <- 10 +lats.min <- 20 +lats.max <- -20 + +res <- Start(dat = path_exp, + var = var, + ensemble = 'first', + sdate = sdate, + time = indices(1), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min, lons.max, + lats.min, lats.max)), + transform_vars = c('longitude', 'latitude'), + synonims = list(latitude=c('lat', 'latitude'), + longitude=c('lon', 'longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# Check the longitude and latitude +as.vector(attr(res, 'Variables')$dat1$latitude) +# [1] 20 ...... [41] -20 +as.vector(attr(res, 'Variables')$dat1$longitude) +# [1] -10 ...... [21] 10 + + + +#---------------------------- +# CASE 3: +# Original file: lon [-180:180]; lat [90:-90] +# Desired region: lon [300, 320] in [0, 360] system; lat [-10, -20] from north to south +# transformation: Yes, to 'r360x181' +#---------------------------- +# tips: +# 1. Use 'latitude_reorder = Sort(decreasing = TRUE)' to sort latitude from north to south. +# 2. Use 'longitude_reorder = CircularSort(0, 360). It helps put the longitude values +# in [-180:180] system, so you can get the continuous region across 0 degree. +# 3. With the usage of reorder functions, transformation does not affect the results. +# 4. With reorder functions, the original file range does not affect the results. +#---------------------------- + +path_exp <- paste0('/esarchive/recon/ecmwf/era5/original_files/', + 'reorder/daily_mean/$var$/$var$_$sdate$.nc') +var <- 'tas' +sdate <- '199212' + +lons.min <- 300 +lons.max <- 320 +lats.min <- -10 +lats.max <- -20 + +res <- Start(dat = path_exp, + var = var, + sdate = sdate, + time = indices(1), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min, lons.max, + lats.min, lats.max)), + transform_vars = c('longitude', 'latitude'), + synonims = list(latitude=c('lat', 'latitude'), + longitude=c('lon', 'longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# Check the longitude and latitude +as.vector(attr(res, 'Variables')$dat1$latitude) +# [1] -10 ...... [11] -20 +as.vector(attr(res, 'Variables')$dat1$longitude) +# [1] 300 ...... [21] 320 + -- GitLab From 9ecf69efda770e4fd799299de60135f5155bbe38 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 19 Mar 2020 10:35:13 +0100 Subject: [PATCH 36/49] Format fix --- inst/doc/usecase.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inst/doc/usecase.md b/inst/doc/usecase.md index 5edf112..1dac948 100644 --- a/inst/doc/usecase.md +++ b/inst/doc/usecase.md @@ -22,9 +22,9 @@ In this document, you can link to the example scripts for various demands. For t 4. [Checking impact of start date order in the number of members](inst/doc/usecase/ex1_4_variable_nmember.R) Mixing start dates of different months can lead to load different number of members, check the code provided and the [FAQ 10](/inst/doc/faq.md). - 5. [Use reorder functions to get desired lat/lon region](inst/doc/usecase/ex1_5_latlon_reorder.R) + 5. [Use reorder functions to get desired lat/lon region](inst/doc/usecase/ex1_5_latlon_reorder.R) This script shows you how to use reorder function (`Sort()`, `CircularSort()`) to -get the desired longitude and latitude region. See [faq.md How-to-#11] (/inst/doc/faq.md#11-read-latitude-and-longitude-with-the-usage-of-parameter-xxx_reorder) +get the desired longitude and latitude region. See [FAQ How-to-#11] (/inst/doc/faq.md#11-read-latitude-and-longitude-with-the-usage-of-parameter-xxx_reorder) for more explanation. -- GitLab From 825b8085e08c97c44ba3274cbc463b24233e12e2 Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 19 Mar 2020 11:03:18 +0100 Subject: [PATCH 37/49] Including tables for FAQ 11 --- inst/doc/faq.md | 5 +++-- inst/doc/figures/lon-2.PNG | Bin 0 -> 67070 bytes inst/doc/figures/lon-3.PNG | Bin 0 -> 126438 bytes 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 inst/doc/figures/lon-2.PNG create mode 100644 inst/doc/figures/lon-3.PNG diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 331a99a..2b81782 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -404,7 +404,7 @@ The code to reproduce this behaviour could be found in the Use Cases section, [e ### 11. Read latitude and longitude with the usage of parameter 'xxx_reorder' There are three ways to specify the dimension selectors: special keywords('all', 'first', 'last'), indices, or values (find more details in [pratical guide](inst/doc/practical_guide.md)). -The parameter 'xxx_reorder' is only effective when using values. +The parameter 'xxx_reorder' is only effective when using **values**. There are two reorder functions in startR package, Sort() for latitude and CircularSort() for longitude. Sort() is a wrapper function of base function sort(), rearranging the values from low to high (decreasing = TRUE, default) or @@ -426,8 +426,9 @@ Note that this chart only provides the idea. The real numbers may slightly diffe If parameter 'xxx_reorder' is not used, the situation will be more complicated and easier to get unexpected results. The following chart shows some examples. We encourage to always use 'xxx_reorder' so you can ensure the results are in line with your expectation. -(Here needs to insert the chart) +`Sb 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%0ABm5$|jx|D@dCF32`vUSlsj&=+&4 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ⅅ7UIIoE{1CL=`wP`DpQ!Y1D7q0GBpo>9g{6T9J6- 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 Date: Thu, 19 Mar 2020 11:05:26 +0100 Subject: [PATCH 38/49] displaying tables in FAQ 11 --- inst/doc/faq.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 2b81782..830feea 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -426,9 +426,9 @@ Note that this chart only provides the idea. The real numbers may slightly diffe If parameter 'xxx_reorder' is not used, the situation will be more complicated and easier to get unexpected results. The following chart shows some examples. We encourage to always use 'xxx_reorder' so you can ensure the results are in line with your expectation. - - ## Something goes wrong... -- GitLab From 82c1dc05e4c0c52a6e16558411fb2e7834e6e322 Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 19 Mar 2020 11:07:04 +0100 Subject: [PATCH 39/49] adjusting Table size in FAQ 11 --- inst/doc/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 830feea..4ddc5e9 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -426,7 +426,7 @@ Note that this chart only provides the idea. The real numbers may slightly diffe If parameter 'xxx_reorder' is not used, the situation will be more complicated and easier to get unexpected results. The following chart shows some examples. We encourage to always use 'xxx_reorder' so you can ensure the results are in line with your expectation. - + -- GitLab From d028f228216e33e5baa19c96b22b7db9ae9c19a2 Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 19 Mar 2020 11:34:45 +0100 Subject: [PATCH 40/49] correct position table in FAQ 11 --- inst/doc/faq.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index 4ddc5e9..de39065 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -421,12 +421,11 @@ The following chart helps you to decide how to use CircularSort() to get the des The first row represents `values(list(lon.min, lon.max))`. Note that this chart only provides the idea. The real numbers may slightly differ depending on the original/transform values. -(Here needs to insert the chart) + If parameter 'xxx_reorder' is not used, the situation will be more complicated and easier to get unexpected results. The following chart shows some examples. We encourage to always use 'xxx_reorder' so you can ensure the results are in line with your expectation. - -- GitLab From 958900ec8b24b34b6364727248e80cd0385bbae4 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 19 Mar 2020 12:20:51 +0100 Subject: [PATCH 41/49] Split how-to-11 into 11 and 12. 11 for using reorder functions, 12 for not using reorder functions. --- inst/doc/faq.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index de39065..ec228c8 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -14,7 +14,8 @@ This document intends to be the first reference for any doubts that you may have 8. [Define a path with multiple dependencies](#8-define-a-path-with-multiple-dependencies) 9. [Use CDORemap() in function](#9-use-cdoremap-in-function) 10. [The number of members depends on the start date](#10-the-number-of-members-depends-on-the-start-date) - 11. [Read latitude and longitude with the usage of parameter 'xxx_reorder'](#11-read-latitude-and-longitude-with-the-usage-of-parameter-xxx_reorder) + 11. [Select the longitude/latitude region](#11-select-the-longitudelatitude-region) + 12. [What will happen if reorder function is not used](#12-what-will-happen-if-reorder-function-is-not-used) 2. **Something goes wrong...** @@ -401,12 +402,12 @@ When trying to load both start dates at once using Start(), the order in which t The code to reproduce this behaviour could be found in the Use Cases section, [example 1.4](/inst/doc/usecase/ex1_4_variable_nmember.R). -### 11. Read latitude and longitude with the usage of parameter 'xxx_reorder' +### 11. Select the longitude/latitude region There are three ways to specify the dimension selectors: special keywords('all', 'first', 'last'), indices, or values (find more details in [pratical guide](inst/doc/practical_guide.md)). The parameter 'xxx_reorder' is only effective when using **values**. -There are two reorder functions in startR package, Sort() for latitude and CircularSort() for longitude. +There are two reorder functions in startR package, **Sort()** for latitude and **CircularSort()** for longitude. Sort() is a wrapper function of base function sort(), rearranging the values from low to high (decreasing = TRUE, default) or from high to low (decreasing = FALSE). For example, if you want to sort latitude from 90 to -90, use `latitude_reorder = Sort(decreasing = TRUE)`. By this means, the result will always from big to small value no matter how the original order is. @@ -418,17 +419,28 @@ and -1 will become 359. After circulating values, CircularSort() also sorts the but the problem can be solved by assigning the borders correctly. The following chart helps you to decide how to use CircularSort() to get the desired region. -The first row represents `values(list(lon.min, lon.max))`. +The first row represents the longitude border of the requested region, e.g., `values(list(lon.min, lon.max))`. Note that this chart only provides the idea. The real numbers may slightly differ depending on the original/transform values. -If parameter 'xxx_reorder' is not used, the situation will be more complicated and easier to get unexpected results. -The following chart shows some examples. We encourage to always use 'xxx_reorder' so you can ensure the results are in line with your expectation. +Find the usecases here [ex1_5_latlon_reorder.R](inst/doc/usecase/ex1_5_latlon_reorder.R) +### 12. What will happen if reorder function is not used + +The reorder functions (i.e., Sort() and CircularSort()) are always recommended to adopt in Start() so you can ensure the result is in line +with your expectation (find more details at [how-to-11](#11-read-latitude-and-longitude-with-the-usage-of-parameter-xxx_reorder) above). If the functions are not used, the situation will be more complicated and easier to +get unexpected results. + +Without reorder functions, the longitude and latitude selectors must be within the respective range in the original file, and the result order +will be the same order as how you request. If transformation is performed simultaneously, you need to consider the latitude/longitude range of +the transform grid too. The requested region values cannot fall out of both the original and the transformed region. + +The following chart shows some examples. + ## Something goes wrong... ### 1. No space left on device -- GitLab From 87d3f40858d3520006b0dfd7b6f82b33f611dee8 Mon Sep 17 00:00:00 2001 From: aho Date: Thu, 19 Mar 2020 12:23:06 +0100 Subject: [PATCH 42/49] Correct the hyperlink in how-to-12 --- inst/doc/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/doc/faq.md b/inst/doc/faq.md index ec228c8..08c5d98 100644 --- a/inst/doc/faq.md +++ b/inst/doc/faq.md @@ -429,7 +429,7 @@ Find the usecases here [ex1_5_latlon_reorder.R](inst/doc/usecase/ex1_5_latlon_re ### 12. What will happen if reorder function is not used The reorder functions (i.e., Sort() and CircularSort()) are always recommended to adopt in Start() so you can ensure the result is in line -with your expectation (find more details at [how-to-11](#11-read-latitude-and-longitude-with-the-usage-of-parameter-xxx_reorder) above). If the functions are not used, the situation will be more complicated and easier to +with your expectation (find more details at [how-to-11](#11-select-the-longitudelatitude-region) above). If the functions are not used, the situation will be more complicated and easier to get unexpected results. Without reorder functions, the longitude and latitude selectors must be within the respective range in the original file, and the result order -- GitLab From a075687e8c60390aafd51412c7b203fb1e75efbb Mon Sep 17 00:00:00 2001 From: nperez Date: Thu, 19 Mar 2020 17:03:11 +0100 Subject: [PATCH 43/49] new figures version --- inst/doc/figures/lon-2.PNG | Bin 67070 -> 41800 bytes inst/doc/figures/lon-3.PNG | Bin 126438 -> 87502 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/inst/doc/figures/lon-2.PNG b/inst/doc/figures/lon-2.PNG index 662df68568cc2df460aa04377bee9bacc85893e0..dd30152869e32275cf141c10b7506914064a3dbf 100644 GIT binary patch literal 41800 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 literal 126438 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%0ABm5$|jx|D@dCF32`vUSlsj&=+&4 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ⅅ7UIIoE{1CL=`wP`DpQ!Y1D7q0GBpo>9g{6T9J6- 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 Date: Thu, 19 Mar 2020 17:08:17 +0100 Subject: [PATCH 44/49] new figures version with out blue square --- inst/doc/figures/lon-2.PNG | Bin 41800 -> 40440 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/inst/doc/figures/lon-2.PNG b/inst/doc/figures/lon-2.PNG index dd30152869e32275cf141c10b7506914064a3dbf..570151241b7b54a7fba28166cd7e75b64f0a6017 100644 GIT binary patch delta 37595 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

yK2+lT|eLAxs&@ChHUlw_@UNdEIIm!;zQxH zW!<*n{~Mqy`)`2m;@`*QG|No_BvA4b z&tcL$sPpjf&&(6+l)%585NObPD z_o;vJk8tEa)y@jzRf9fiLE}+E9pcxSrpAeO&S|;on$0Ok&5qk1WUcj(*fdG6$wtoozM0A)x<@)<_BNOUt7@E3zwFh zT7?GC?Salf-4qzz*!i#4bg8tj#K?{2IiA~ms^lb@*rFLe9I0DYGd`OMmgr@ZTzpRn z+a=ztj!4LjW;xoksez^szda8R%q-T;3C6ied;RTh{JomlKk7GBh7u=f>D}YcYmv9!BGajr7e5Q|s%G#oZ*iQ@5!B%~paIgDHOw9dWL{Wb{NUJlx7u;8Vc`H(+vsezY~MA9i02co3=OCEqHv0Bjt`6hXO{&!va~fP$dN0 zQ09+2{&?1h1nQK8aJ`4C=iIMNqpB_6cES?aNW%@=jxd zd;oVVdyw?_QOr5tD^4AWIB%!z;}=qUJ3r$kLS~aGGA~bV;y40Ek(CdTNuwfIkLyW z>-or@XNCo9*d=RGyW7X98A@c60Iw9(>y|5OAM~2?C(GUv0j~P3>=!-NB}trJS%{Cy2143W{BF^Q_J0+@(!X4P$NnG0 z*`_vU3c6S%)m8%6RL#RTomk8Wp8~X7EYh#i;%Xybz1U4L1!OTh`AtCl!V|J@tNP!g zz5nPTAF_}@!~-^afF-;g-Q@_rBK5A%-y+iZS+m89hUmk$mU*{?7Mz&i8w|-~Zj`KG(U= zx&FD&eZ8*hZ8FXA<-(7){{UxQuu`G_2F{4z+Y##bc%BS0aI>Ay_q7vT&*>9PsLUS1{A6|O0$C|YwiDh5Koo$+@C*??9n)z=<-bx%�h7PeECk7TPIPB)Bee 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

AH7K(%sCQK?@FH8l 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 -- GitLab From a3ccfae97fc2b1fe559c4dee2e8256d8fd146111 Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 20 Mar 2020 18:24:55 +0100 Subject: [PATCH 45/49] Bugfix for longitude selectors across border case. The indices were chosen one more in SelectorCheckor. Fix in Start after calling SelectorCheckor. --- R/Start.R | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/R/Start.R b/R/Start.R index 8a34b07..0076e9a 100644 --- a/R/Start.R +++ b/R/Start.R @@ -2009,6 +2009,10 @@ print("-> THE INNER DIMENSION DOES NOT GO ACROSS ANY FILE DIMENSION OR IT DOES B sub_array_of_selectors <- dim_reorder_params[[inner_dim]](sub_array_of_selectors)$x } } + +# NOTE: The ideal solution for selecting indices in goes_across_prime_meridian case +# is modified SelectorCheckor.R. But now SelectorCheckor doesn't know the info of +#goes_across_prime_meridian, so I do the adjustion after calling SelectorCheckor(). sub_array_of_indices <- selector_checker(sub_array_of_selectors, var_ordered, tolerance = if (aiat) { NULL @@ -2016,6 +2020,21 @@ print("-> THE INNER DIMENSION DOES NOT GO ACROSS ANY FILE DIMENSION OR IT DOES B tolerance_params[[inner_dim]] }) + if (goes_across_prime_meridian & sub_array_of_indices[[1]] < sub_array_of_indices[[2]]) { + if (!(sub_array_of_selectors[[1]] %in% var_ordered)){ + sub_array_of_indices[[1]] <- sub_array_of_indices[[1]] - 1 + } + + if (!(sub_array_of_selectors[[2]] %in% var_ordered)){ + sub_array_of_indices[[2]] <- sub_array_of_indices[[2]] + 1 + } + } + +#NOTE: the possible case? + if (goes_across_prime_meridian & sub_array_of_indices[[1]] > sub_array_of_indices[[2]]) { + .stop("The case is goes_across_prime_meridian but no adjustion for the indices!") + } + if (any(is.na(sub_array_of_indices))) { stop(paste0("The selectors of ", inner_dim, -- GitLab From 3f3d65dfb50aa6c45cd812da60952ff936031c5f Mon Sep 17 00:00:00 2001 From: aho Date: Fri, 20 Mar 2020 18:33:12 +0100 Subject: [PATCH 46/49] Create tests folder and include the unit tests. --- tests/testthat.R | 5 + tests/testthat/test-Start-reorder-lat.R | 872 +++++++++++++++ ...st-Start-reorder-lon-transform_-180to180.R | 919 ++++++++++++++++ .../test-Start-reorder-lon-transform_0to360.R | 999 ++++++++++++++++++ .../test-Start-reorder-lon_-180to180.R | 774 ++++++++++++++ .../testthat/test-Start-reorder-lon_0to360.R | 622 +++++++++++ tests/testthat/test-Start-reorder-retrieve.R | 157 +++ 7 files changed, 4348 insertions(+) create mode 100644 tests/testthat.R create mode 100644 tests/testthat/test-Start-reorder-lat.R create mode 100644 tests/testthat/test-Start-reorder-lon-transform_-180to180.R create mode 100644 tests/testthat/test-Start-reorder-lon-transform_0to360.R create mode 100644 tests/testthat/test-Start-reorder-lon_-180to180.R create mode 100644 tests/testthat/test-Start-reorder-lon_0to360.R create mode 100644 tests/testthat/test-Start-reorder-retrieve.R diff --git a/tests/testthat.R b/tests/testthat.R new file mode 100644 index 0000000..d424073 --- /dev/null +++ b/tests/testthat.R @@ -0,0 +1,5 @@ +library(testthat) +library(startR) + +test_check("startR") + diff --git a/tests/testthat/test-Start-reorder-lat.R b/tests/testthat/test-Start-reorder-lat.R new file mode 100644 index 0000000..f53a9ec --- /dev/null +++ b/tests/testthat/test-Start-reorder-lat.R @@ -0,0 +1,872 @@ +context("Start() lat Reorder test") + +#1 selector type 1-values(list) 2-values(vector) 3-indices 4-'all' 5-mix +#2 selector range 1-[10, 20] 2-[20, 10] 3-[-10, -20] 4-[-20, -10] +#3 resolution 1-1 2-<1 3->1 +#4 returns_var 1-NULL 2-'dat' +#5 lat_reorder/Sort() 1-No 2-Yes,decreasing = F 3-Yes,decreasing = T +#6 lon_reorder/CircularSort() 1-No 2-Yes,(0, 360) 3-Yes,(-180, 180) +#7 transform 1-NO 2-YES +#8 transform_crop 1-T 2-F 3-region + +############################################## +path_exp <- '/esarchive/exp/ecmwf/system5_m1/daily_mean/$var$_f6h/$var$_$sdate$.nc' + +## Origin longitude in file: [0:360] + +############################################## +test_that("1-1-2-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10.25761, 19.81264), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 35 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) + +# lon + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(40, 45), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 19 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) + +}) + +############################################## +test_that("1-2-2-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 20 +lats.max <- 10 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10.25761, 19.81264), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 35 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) + +}) + +############################################## +test_that("1-3-2-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- -10 +lats.max <- -20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(-19.81264, -10.25761), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 35 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("1-4-2-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- -20 +lats.max <- -10 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(-19.81264, -10.25761), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 35 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) + +############################################## +test_that("2-1-2-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(9.976578, 20.093670), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) + +# lon + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(40, 45), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 19 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) + +}) + +############################################## +test_that("2-2-2-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 20 +lats.max <- 10 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(9.976578, 20.093670), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("2-3-2-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- -10 +lats.max <- -20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(-20.093670, -9.976578), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("2-4-2-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- -20 +lats.max <- -10 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(-20.093670, -9.976578), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("1-1-2-3-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = NULL, + longitude = NULL, + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$common$latitude)), + c(10.25761, 19.81264), + tolerance = 0.0001 + ) + expect_equal( + attr(res, 'Variables')$dat1$latitude, + NULL + ) + expect_equal( + (attr(res, 'Variables')$common$latitude)[1] < (attr(res, 'Variables')$common$latitude)[2], + TRUE + ) + expect_equal( + class(attr(res, 'Variables')$common$latitude), + 'array' + ) +}) + +############################################## +test_that("2-1-2-3-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = NULL, + longitude = NULL, + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$common$latitude)), + c(9.976578, 20.093670), + tolerance = 0.0001 + ) + expect_equal( + attr(res, 'Variables')$dat1$latitude, + NULL + ) + expect_equal( + (attr(res, 'Variables')$common$latitude)[1] < (attr(res, 'Variables')$common$latitude)[2], + TRUE + ) + expect_equal( + class(attr(res, 'Variables')$common$latitude), + 'array' + ) +}) +############################################## +############################################## +test_that("1-1-2-2-2-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10.25761, 19.81264), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 35 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) + +# lon + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(40, 45), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 19 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) + +}) +############################################## +test_that("1-2-2-2-2-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 20 +lats.max <- 10 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10.25761, 19.81264), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 35 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("1-1-2-2-2-3-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10.25761, 19.81264), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 35 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("2-1-2-2-2-3-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(9.976578, 20.093670), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) + + +############################################## +#1 selector type 1-values(list) 2-values(vector) 3-indices 4-'all' 5-mix +#2 selector range 1-[10, 20] 2-[20, 10] 3-[-10, -20] 4-[-20, -10] +#3 resolution 1-1 2-<1 3->1 +#4 returns_var 1-NULL 2-'dat' +#5 lat_reorder/Sort() 1-No 2-Yes,decreasing = F 3-Yes,decreasing = T +#6 lon_reorder/CircularSort() 1-No 2-Yes,(0, 360) 3-Yes,(-180, 180) +#7 transform 1-NO 2-YES +#8 transform_crop 1-T 2-F 3-region + + +############################################## +test_that("1-1-2-2-1-1-2-3", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) + +############################################## +test_that("1-1-2-2-3-1-2-3", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("1-1-2-2-3-2-2-3", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("1-1-2-2-3-1-2-1", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = T), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) + +############################################## +test_that("1-3. Selector type: indices(list)", { + +}) +############################################## +test_that("1-4. Selector type: indices(vector)", { + +}) +############################################## +test_that("1-4. Selector type: indices(vector)", { + +}) + diff --git a/tests/testthat/test-Start-reorder-lon-transform_-180to180.R b/tests/testthat/test-Start-reorder-lon-transform_-180to180.R new file mode 100644 index 0000000..1b8a96b --- /dev/null +++ b/tests/testthat/test-Start-reorder-lon-transform_-180to180.R @@ -0,0 +1,919 @@ +context("Start() lon Reorder transform -180to180 test") +#1 selector type 1-values(list) 2-values(vector) 3-indices 4-'all' 5-mix +#2 selector range 1-[10, 20] 2-[20, 10] 3-[-10, -20] 4-[-20, -10] 5-[-10, 10] 6-[10, -10] 7-[300, 350] 8-[170, 190] +#3 resolution 1-1 2-<1 3->1 +#4 returns_var 1-NULL 2-'dat' +#5 lat_reorder/Sort() 1-No 2-Yes,decreasing = F 3-Yes,decreasing = T +#6 lon_reorder/CircularSort() 1-No 2-Yes,(0, 360) 3-Yes,(-180, 180) +#7 transform 1-NO 2-'r360x181' +#8 transform_crop 1-T 2-F 3-region 4-x + +############################################## +# 3-2 +## Origin longitude in file: [-179.71875:180] +path_exp <- '/esarchive/recon/ecmwf/era5/original_files/reorder/daily_mean/$var$/$var$_$sdate$.nc' +variable <- 'tas' +sdate <- '199212' + +############################################## +test_that("1-1-2-2-1-1-2-4", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) + +############################################## +test_that("1-2-2-2-1-1-2-4", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) + +############################################## +test_that("1-5-2-2-1-1-2-4", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-10, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) + +############################################## +test_that("1-6-2-2-1-1-2-4", { +lons.min <- 10 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-10, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-8-2-2-1-1-2-4", { +lons.min <- 170 +lons.max <- 190 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(170, 180), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) +############################################## +############################################## +############################################## +test_that("1-1-2-2-2-2-2-3", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) +############################################## +test_that("1-2-2-2-2-2-2-3", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[11:12], + c(10, 20), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-3-2-2-2-2-2-3", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[341:342], + c(340, 350), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-4-2-2-2-2-2-3", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(340, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) +############################################## +test_that("1-5-2-2-2-2-2-3", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[11:12], + c(10, 350), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-6-2-2-2-2-2-3", { +lons.min <- 20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(20, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 331 + ) +}) +############################################## +test_that("1-7-2-2-2-2-2-3", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(330, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-8-2-2-2-2-2-3", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[11:12], + c(10, 350), + tolerance = 0.0001 + ) +}) +############################################## +############################################## +############################################## +test_that("1-1-2-2-2-3-2-3", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) +############################################## +test_that("1-2-2-2-2-3-2-3", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-180, 179), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[191:192], + c(10, 20), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-3-2-2-2-3-2-3", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-180, 179), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[161:162], + c(-20, -10), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-4-2-2-2-3-2-3", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-20, -10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) + +############################################## +test_that("1-5-2-2-2-3-2-3", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-10, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-6-2-2-2-3-2-3", { +lons.min <- 20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-180, 179), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 331 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[171:172], + c(-10, 20), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-7-2-2-2-3-2-3", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-30, -10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-8-2-2-2-3-2-3", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-10, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) diff --git a/tests/testthat/test-Start-reorder-lon-transform_0to360.R b/tests/testthat/test-Start-reorder-lon-transform_0to360.R new file mode 100644 index 0000000..5ef5576 --- /dev/null +++ b/tests/testthat/test-Start-reorder-lon-transform_0to360.R @@ -0,0 +1,999 @@ +context("Start() lon Reorder transform 0to360 test") +#1 selector type 1-values(list) 2-values(vector) 3-indices 4-'all' 5-mix +#2 selector range 1-[10, 20] 2-[20, 10] 3-[-10, -20] 4-[-20, -10] 5-[-10, 10] 6-[10, -10] 7-[300, 350] 8-[350, 370] +#3 resolution 1-1 2-<1 3->1 +#4 returns_var 1-NULL 2-'dat' +#5 lat_reorder/Sort() 1-No 2-Yes,decreasing = F 3-Yes,decreasing = T +#6 lon_reorder/CircularSort() 1-No 2-Yes,(0, 360) 3-Yes,(-180, 180) +#7 transform 1-NO 2-'r360x181' +#8 transform_crop 1-T 2-F 3-region 4-x + +############################################## +# 3-2 +## Origin longitude in file: [0:360] +path_exp <- '/esarchive/exp/ecmwf/system5_m1/daily_mean/$var$_f6h/$var$_$sdate$.nc' +variable <- 'psl' +sdate <- '19821201' + +############################################## +test_that("1-1-2-2-1-1-2-4", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) + +############################################## +test_that("1-2-2-2-1-1-2-4", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) +############################################## +test_that("1-5-2-2-1-1-2-4", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) + +############################################## +test_that("1-6-2-2-1-1-2-4", { +lons.min <- 10 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) +############################################## +test_that("1-7-2-2-1-1-2-4", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(330, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-8-2-2-1-1-2-4", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(350, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 10 + ) +}) +############################################## +############################################## +############################################## +test_that("1-1-2-2-2-2-2-3", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) +############################################## +test_that("1-2-2-2-2-2-2-3", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[11:12], + c(10, 20), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-3-2-2-2-2-2-3", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[341:342], + c(340, 350), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-4-2-2-2-2-2-3", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(340, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) +############################################## +test_that("1-5-2-2-2-2-2-3", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[11:12], + c(10, 350), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-6-2-2-2-2-2-3", { +lons.min <- 20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(20, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 331 + ) +}) +############################################## +test_that("1-7-2-2-2-2-2-3", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(330, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-8-2-2-2-2-2-3", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[11:12], + c(10, 350), + tolerance = 0.0001 + ) +}) +############################################## +############################################## +############################################## +test_that("1-1-2-2-2-3-2-3", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) +############################################## +test_that("1-2-2-2-2-3-2-3", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-180, 179), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[191:192], + c(10, 20), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-3-2-2-2-3-2-3", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-180, 179), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[161:162], + c(-20, -10), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-4-2-2-2-3-2-3", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-20, -10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) + +############################################## +test_that("1-5-2-2-2-3-2-3", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-10, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-6-2-2-2-3-2-3", { +lons.min <- 20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-180, 179), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 331 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[171:172], + c(-10, 20), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-7-2-2-2-3-2-3", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-30, -10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-8-2-2-2-3-2-3", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-10, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) diff --git a/tests/testthat/test-Start-reorder-lon_-180to180.R b/tests/testthat/test-Start-reorder-lon_-180to180.R new file mode 100644 index 0000000..38cd6b8 --- /dev/null +++ b/tests/testthat/test-Start-reorder-lon_-180to180.R @@ -0,0 +1,774 @@ +context("Start() lon Reorder non-transform -180to180 test") +#1 selector type 1-values(list) 2-values(vector) 3-indices 4-'all' 5-mix +#2 selector range 1-[10, 20] 2-[20, 10] 3-[-10, -20] 4-[-20, -10] 5-[-10, 10] 6-[10, -10] 7-[300, 350] 8-[170, 190] +#3 resolution 1-1 2-<1 3->1 +#4 returns_var 1-NULL 2-'dat' +#5 lat_reorder/Sort() 1-No 2-Yes,decreasing = F 3-Yes,decreasing = T +#6 lon_reorder/CircularSort() 1-No 2-Yes,(0, 360) 3-Yes,(-180, 180) +#7 transform 1-NO 2-YES +#8 transform_crop 1-T 2-F 3-region 4-x + +############################################## +# 3-2 + +## Origin longitude in file: [-179.71875:180] +path_exp <- '/esarchive/recon/ecmwf/era5/original_files/reorder/daily_mean/$var$/$var$_$sdate$.nc' +variable <- 'tas' +sdate <- '199212' + +############################################## +test_that("1-1-2-2-1-1-1-x", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lon + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10.12500, 19.96875), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 36 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) + +############################################## +test_that("1-2-2-2-1-1-1-x", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10.12500, 19.96875), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) +}) + +############################################## +test_that("1-3-2-2-1-1-1-x", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-19.96875, -10.12500), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) +}) + +############################################## +test_that("1-4-2-2-1-1-1-x", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-19.96875, -10.12500), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) + +############################################## +test_that("1-5-2-2-1-1-1-x", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-9.84375,9.84375), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + +}) + +############################################## +test_that("1-6-2-2-1-1-1-x", { +lons.min <- 10 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c( -9.84375, 9.84375), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) +}) + +############################################## +test_that("1-8-2-2-1-1-1-x", { +lons.min <- 170 +lons.max <- 190 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(170.1562, 180), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +############################################## +############################################## +test_that("1-1-2-2-2-2-1-x", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10.12500, 19.96875), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 36 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) +############################################## +test_that("1-1-2-2-2-3-1-x", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10.12500, 19.96875), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 36 + ) +}) +############################################## +test_that("1-2-2-2-2-2-1-x", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + 1244 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[36:37], + c(9.84375, 20.25000), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +test_that("1-2-2-2-2-3-1-x", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + 1244 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[676:677], + c(9.84375, 20.25000), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) + +############################################## +test_that("1-3-2-2-2-2-1-x", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + 1244 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[1209:1210], + c(339.7500, 350.1562), + tolerance = 0.0001 + ) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359.7222), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-3-2-2-2-3-1-x", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + 1244 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[569:570], + c(-20.25000, -9.84375), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-4-2-2-2-2-1-x", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(340.0312, 349.8750), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +test_that("1-4-2-2-2-3-1-x", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-19.96875, -10.12500), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +test_that("1-5-2-2-2-2-1-x", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359.7188), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 71 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[36:37], + c(9.84375, 350.15625), + tolerance = 0.0001 + ) +}) + +############################################## +test_that("1-5-2-2-2-3-1-x", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-9.84375, 9.84375), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +test_that("1-6-2-2-2-2-1-x", { +lons.min <- 20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(20.2500, 349.8750), + tolerance = 0.001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 1173 + ) +}) + +############################################## +test_that("1-6-2-2-2-3-1-x", { +lons.min <- 20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-180, 179.7188), + tolerance = 0.001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 1173 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[605:606], + c(-10.12500, 20.25000), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-7-2-2-2-2-1-x", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(330.1875, 349.8750), + tolerance = 0.0001 + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 71 + ) + +}) +############################################## +test_that("1-7-2-2-2-3-1-x", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-29.8125, -10.1250), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 71 + ) + +}) + +############################################## +test_that("1-8-2-2-2-2-1-x", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + 71, + tolerance = 0.0001 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[36:37], + c(9.84375, 350.15625), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-8-2-2-2-3-1-x", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + 71, + tolerance = 0.0001 + ) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-9.84375, 9.84375), + tolerance = 0.0001 + ) +}) diff --git a/tests/testthat/test-Start-reorder-lon_0to360.R b/tests/testthat/test-Start-reorder-lon_0to360.R new file mode 100644 index 0000000..67d0e90 --- /dev/null +++ b/tests/testthat/test-Start-reorder-lon_0to360.R @@ -0,0 +1,622 @@ +context("Start() lon Reorder non-transform 0to360 test") +#1 selector type 1-values(list) 2-values(vector) 3-indices 4-'all' 5-mix +#2 selector range 1-[10, 20] 2-[20, 10] 3-[-10, -20] 4-[-20, -10] 5-[-10, 10] 6-[10, -10] 7-[300, 350] 8-[350, 370] +#3 resolution 1-1 2-<1 3->1 +#4 returns_var 1-NULL 2-'dat' +#5 lat_reorder/Sort() 1-No 2-Yes,decreasing = F 3-Yes,decreasing = T +#6 lon_reorder/CircularSort() 1-No 2-Yes,(0, 360) 3-Yes,(-180, 180) +#7 transform 1-NO 2-YES +#8 transform_crop 1-T 2-F 3-region 4-x + +############################################## +# 3-2 +path_exp <- '/esarchive/exp/ecmwf/system5_m1/daily_mean/$var$_f6h/$var$_$sdate$.nc' + +## Origin longitude in file: [0:359.722222222222] + +############################################## +test_that("1-1-2-2-1-1-1-x", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lon + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 37 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) + +############################################## +test_that("1-2-2-2-1-1-1-x", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) +}) +############################################## +test_that("1-5-2-2-1-1-1-x", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + +}) + +############################################## +test_that("1-6-2-2-1-1-1-x", { +lons.min <- 10 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) +}) + +############################################## +test_that("1-7-2-2-1-1-1-x", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(330, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +test_that("1-8-2-2-1-1-1-x", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(350, 359.7222222), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +############################################## +############################################## +test_that("1-1-2-2-2-2-1-x", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 37 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) +############################################## +test_that("1-1-2-2-2-3-1-x", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 37 + ) +}) +############################################## +test_that("1-2-2-2-2-2-1-x", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(1261) + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[37:38], + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +test_that("1-2-2-2-2-3-1-x", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(1261) + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[685:686], + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) + +############################################## +test_that("1-3-2-2-2-2-1-x", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(1261) + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[1225:1226], + c(340, 350), + tolerance = 0.0001 + ) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359.7222), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-3-2-2-2-3-1-x", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(1261) + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[577:578], + c(-20, -10), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-4-2-2-2-2-1-x", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(340, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +test_that("1-4-2-2-2-3-1-x", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-20, -10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) + +############################################## +test_that("1-5-2-2-2-2-1-x", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(330, 350), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-5-2-2-2-3-1-x", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-30, -10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) + +############################################## +test_that("1-6-2-2-2-2-1-x", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(73), + tolerance = 0.0001 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[37:38], + c(10, 350), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-6-2-2-2-3-1-x", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(73), + tolerance = 0.0001 + ) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-10, 10), + tolerance = 0.0001 + ) +}) diff --git a/tests/testthat/test-Start-reorder-retrieve.R b/tests/testthat/test-Start-reorder-retrieve.R new file mode 100644 index 0000000..47412f5 --- /dev/null +++ b/tests/testthat/test-Start-reorder-retrieve.R @@ -0,0 +1,157 @@ +context("Start() lon Reorder non-transform retrieve test") + + +############################################## +test_that("original range 0to360", { + +## Origin longitude in file: [0:359.722222222222] +path_exp <- '/esarchive/exp/ecmwf/system5_m1/daily_mean/$var$_f6h/$var$_$sdate$.nc' + +lons.min <- -2 +lons.max <- 2 +lats.min <- 10 +lats.max <- 12 + + +res <- Start(dat = path_exp, + var = 'psl', + member = indices(1), + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = T) + + +res1 <- Start(dat = path_exp, + var = 'psl', + member = indices(1), + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = T) + + +res2 <- Start(dat = path_exp, + var = 'psl', + member = indices(1), + sdate = '19821201', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = T) + + expect_equal( + res1[1,1,1,1,1,1:7,], + res[1,1,1,1,1,7:1,] + ) + expect_equal( + res1[1,1,1,1,1,1,8:15], + res2[1,1,1,1,1,1,1:8] + ) + expect_equal( + res1[1,1,1,1,1,1,1:7], + res2[1,1,1,1,1,1,9:15] + ) + +}) + + +############################################## +test_that("original range -180to180", { + +## Origin longitude in file: [0:359.722222222222] +path_exp <- '/esarchive/recon/ecmwf/era5/original_files/reorder/daily_mean/$var$/$var$_$sdate$.nc' +variable <- 'tas' +sdate <- '199212' + +lons.min <- -2 +lons.max <- 2 +lats.min <- 10 +lats.max <- 12 + + +res <- Start(dat = path_exp, + var = variable, + sdate = '199212', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = T) + +res1 <- Start(dat = path_exp, + var = variable, + sdate = '199212', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = T) + + +res2 <- Start(dat = path_exp, + var = variable, + sdate = '199212', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = TRUE), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = T) + + expect_equal( + res1[1,1,1,1,1:7,], + res[1,1,1,1,7:1,] + ) + expect_equal( + res1[1,1,1,1,1,8:15], + res2[1,1,1,1,1,1:8] + ) + expect_equal( + res1[1,1,1,1,1,1:7], + res2[1,1,1,1,1,9:15] + ) + +}) + -- GitLab From dd2c9389c4b90af4ddc5cc2a8507d75509692401 Mon Sep 17 00:00:00 2001 From: nperez Date: Fri, 20 Mar 2020 20:52:15 +0100 Subject: [PATCH 47/49] test for files with coarse resolution --- tests/testthat/test-Start-reorder-latCoarse.R | 874 ++++++++++++++ ...Start-reorder-lon-transform_0to360Coarse.R | 1003 +++++++++++++++++ .../test-Start-reorder-lon0to360Coarse.R | 622 ++++++++++ 3 files changed, 2499 insertions(+) create mode 100644 tests/testthat/test-Start-reorder-latCoarse.R create mode 100644 tests/testthat/test-Start-reorder-lon-transform_0to360Coarse.R create mode 100644 tests/testthat/test-Start-reorder-lon0to360Coarse.R diff --git a/tests/testthat/test-Start-reorder-latCoarse.R b/tests/testthat/test-Start-reorder-latCoarse.R new file mode 100644 index 0000000..bc6f480 --- /dev/null +++ b/tests/testthat/test-Start-reorder-latCoarse.R @@ -0,0 +1,874 @@ +context("Start() lat Reorder test") + +#1 selector type 1-values(list) 2-values(vector) 3-indices 4-'all' 5-mix +#2 selector range 1-[10, 20] 2-[20, 10] 3-[-10, -20] 4-[-20, -10] +#3 resolution 1-1 2-<1 3->1 4-> mixed +#4 returns_var 1-NULL 2-'dat' +#5 lat_reorder/Sort() 1-No 2-Yes,decreasing = F 3-Yes,decreasing = T +#6 lon_reorder/CircularSort() 1-No 2-Yes,(0, 360) 3-Yes,(-180, 180) +#7 transform 1-NO 2-YES +#8 transform_crop 1-T 2-F 3-region + + +## mixed resolution indicates lower than 1 degree resolution for longitude and higer for latitude. +############################################## +#path_exp <- '/esarchive/exp/ecmwf/system5_m1/daily_mean/$var$_f6h/$var$_$sdate$.nc' +path_exp <- '/esarchive/exp/ncar/cesm-dple/monthly_mean/$var$/$var$_$sdate$.nc' +## Origin longitude in file: [0:358.75] step 1.25 degrees #288 values +## latitude: -90 o 90 {-90, -89.05759 ...} #192 values +############################################## +test_that("1-1-4-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path = path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10.83770, 19.31937), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 10 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) + +# lon + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(40, 45), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 5 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) + +}) + +############################################## +test_that("1-2-4-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 20 +lats.max <- 10 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10.83770, 19.31937), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 10 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) + +}) + +############################################## +test_that("1-3-4-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- -10 +lats.max <- -20 + +res <- Start(dat = list(list(path = path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(-19.31937, -10.83770), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 10 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("1-4-4-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- -20 +lats.max <- -10 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(-19.31937, -10.83770), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 10 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) + +############################################## +test_that("2-1-4-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(9.895288, 20.261780), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) + +# lon + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(40, 45), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 5 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) + +}) + +############################################## +test_that("2-2-4-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 20 +lats.max <- 10 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(9.895288, 20.261780), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("2-3-4-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- -10 +lats.max <- -20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(-20.261780, -9.895288), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("2-4-4-2-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- -20 +lats.max <- -10 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(-20.261780, -9.895288), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("1-1-4-3-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = NULL, + longitude = NULL, + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$common$latitude)), + c(10.83770, 19.31937), + tolerance = 0.0001 + ) + expect_equal( + attr(res, 'Variables')$dat1$latitude, + NULL + ) + expect_equal( + (attr(res, 'Variables')$common$latitude)[1] < (attr(res, 'Variables')$common$latitude)[2], + TRUE + ) + expect_equal( + class(attr(res, 'Variables')$common$latitude), + 'array' + ) +}) + +############################################## +test_that("2-1-4-3-1-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = NULL, + longitude = NULL, + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$common$latitude)), + c(9.895288, 20.261780), + tolerance = 0.0001 + ) + expect_equal( + attr(res, 'Variables')$dat1$latitude, + NULL + ) + expect_equal( + (attr(res, 'Variables')$common$latitude)[1] < (attr(res, 'Variables')$common$latitude)[2], + TRUE + ) + expect_equal( + class(attr(res, 'Variables')$common$latitude), + 'array' + ) +}) +############################################## +############################################## +test_that("1-1-4-2-2-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10.83770, 19.31937), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 10 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) + +# lon + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(40, 45), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 5 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) + +}) +############################################## +test_that("1-2-4-2-2-1-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 20 +lats.max <- 10 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10.83770, 19.31937), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 10 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("1-1-4-2-2-3-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10.83770, 19.31937), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 10 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("2-1-4-2-2-3-1-x", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(9.895288, 20.261780), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) + + +############################################## +#1 selector type 1-values(list) 2-values(vector) 3-indices 4-'all' 5-mix +#2 selector range 1-[10, 20] 2-[20, 10] 3-[-10, -20] 4-[-20, -10] +#3 resolution 1-1 2-<1 3->1 4 -> mixed4 -> mixed4 -> mixed4 -> mixed +#4 returns_var 1-NULL 2-'dat' +#5 lat_reorder/Sort() 1-No 2-Yes,decreasing = F 3-Yes,decreasing = T +#6 lon_reorder/CircularSort() 1-No 2-Yes,(0, 360) 3-Yes,(-180, 180) +#7 transform 1-NO 2-YES +#8 transform_crop 1-T 2-F 3-region + + +############################################## +test_that("1-1-4-2-1-1-2-3", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) + +############################################## +test_that("1-1-4-2-3-1-2-3", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("1-1-4-2-3-2-2-3", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) +############################################## +test_that("1-1-4-2-3-1-2-1", { +lons.min <- 40 +lons.max <- 45 +lats.min <- 10 +lats.max <- 20 + +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = T), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) +# lat + expect_equal( + range((attr(res, 'Variables')$dat1$latitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$latitude)[1] < (attr(res, 'Variables')$dat1$latitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$latitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$latitude), + 'array' + ) +}) + +############################################## +test_that("1-3. Selector type: indices(list)", { + +}) +############################################## +test_that("1-4. Selector type: indices(vector)", { + +}) +############################################## +test_that("1-4. Selector type: indices(vector)", { + +}) + diff --git a/tests/testthat/test-Start-reorder-lon-transform_0to360Coarse.R b/tests/testthat/test-Start-reorder-lon-transform_0to360Coarse.R new file mode 100644 index 0000000..262673b --- /dev/null +++ b/tests/testthat/test-Start-reorder-lon-transform_0to360Coarse.R @@ -0,0 +1,1003 @@ +context("Start() lon Reorder transform 0to360 test") +#1 selector type 1-values(list) 2-values(vector) 3-indices 4-'all' 5-mix +#2 selector range 1-[10, 20] 2-[20, 10] 3-[-10, -20] 4-[-20, -10] 5-[-10, 10] 6-[10, -10] 7-[300, 350] 8-[350, 370] +#3 resolution 1-1 2-<1 3->1 4 -> mixed +#4 returns_var 1-NULL 2-'dat' +#5 lat_reorder/Sort() 1-No 2-Yes,decreasing = F 3-Yes,decreasing = T +#6 lon_reorder/CircularSort() 1-No 2-Yes,(0, 360) 3-Yes,(-180, 180) +#7 transform 1-NO 2-'r360x181' +#8 transform_crop 1-T 2-F 3-region 4-x + +############################################## +# 3-2 +## Origin longitude in file: [0:360] +path_exp <- '/esarchive/exp/ncar/cesm-dple/monthly_mean/$var$/$var$_$sdate$.nc' + +## Origin longitude in file: [0:358.75] step 1.25 degrees #288 values +## latitude: -90 o 90 {-90, -89.05759 ...} #192 values + +variable <- 'psl' +sdate <- '20001101' + +############################################## +test_that("1-1-2-2-1-1-2-4", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) + +############################################## +test_that("1-2-2-2-1-1-2-4", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) +############################################## +test_that("1-5-2-2-1-1-2-4", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) + +############################################## +test_that("1-6-2-2-1-1-2-4", { +lons.min <- 10 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) +############################################## +test_that("1-7-2-2-1-1-2-4", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(330, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-8-2-2-1-1-2-4", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con'), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(350, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 10 + ) +}) +############################################## +############################################## +############################################## +test_that("1-1-2-2-2-2-2-3", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) +############################################## +test_that("1-2-2-2-2-2-2-3", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[11:12], + c(10, 20), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-3-2-2-2-2-2-3", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[341:342], + c(340, 350), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-4-2-2-2-2-2-3", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(340, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) +############################################## +test_that("1-5-2-2-2-2-2-3", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[11:12], + c(10, 350), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-6-2-2-2-2-2-3", { +lons.min <- 20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(20, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 331 + ) +}) +############################################## +test_that("1-7-2-2-2-2-2-3", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(330, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-8-2-2-2-2-2-3", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 359), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[11:12], + c(10, 350), + tolerance = 0.0001 + ) +}) +############################################## +############################################## +############################################## +test_that("1-1-2-2-2-3-2-3", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) +############################################## +test_that("1-2-2-2-2-3-2-3", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-180, 179), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[191:192], + c(10, 20), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-3-2-2-2-3-2-3", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-180, 179), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 351 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[161:162], + c(-20, -10), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-4-2-2-2-3-2-3", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-20, -10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 11 + ) +}) + +############################################## +test_that("1-5-2-2-2-3-2-3", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-10, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-6-2-2-2-3-2-3", { +lons.min <- 20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-180, 179), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 331 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[171:172], + c(-10, 20), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-7-2-2-2-3-2-3", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-30, -10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) +############################################## +test_that("1-8-2-2-2-3-2-3", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = variable, + member = indices(1), + sdate = sdate, + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude = values(list(lons.min, lons.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_params = list(grid ='r360x181', + method = 'con', + crop = c(lons.min,lons.max, + lats.min,lats.max)), + transform_vars = c('longitude', 'latitude'), + transform_extra_cells = 2, + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-10, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 21 + ) +}) diff --git a/tests/testthat/test-Start-reorder-lon0to360Coarse.R b/tests/testthat/test-Start-reorder-lon0to360Coarse.R new file mode 100644 index 0000000..461042a --- /dev/null +++ b/tests/testthat/test-Start-reorder-lon0to360Coarse.R @@ -0,0 +1,622 @@ +context("Start() lon Reorder non-transform 0to360 test") +#1 selector type 1-values(list) 2-values(vector) 3-indices 4-'all' 5-mix +#2 selector range 1-[10, 20] 2-[20, 10] 3-[-10, -20] 4-[-20, -10] 5-[-10, 10] 6-[10, -10] 7-[300, 350] 8-[350, 370] +#3 resolution 1-1 2-<1 3->1 4-> mixed +#4 returns_var 1-NULL 2-'dat' +#5 lat_reorder/Sort() 1-No 2-Yes,decreasing = F 3-Yes,decreasing = T +#6 lon_reorder/CircularSort() 1-No 2-Yes,(0, 360) 3-Yes,(-180, 180) +#7 transform 1-NO 2-YES +#8 transform_crop 1-T 2-F 3-region 4-x + +############################################## +# 3-2 +path_exp <- '/esarchive/exp/ncar/cesm-dple/monthly_mean/$var$/$var$_$sdate$.nc' + +## Origin longitude in file: [0:358.75] step 1.25 degrees #288 values +## latitude: -90 o 90 {-90, -89.05759 ...} #192 values +############################################## +test_that("1-1-4-2-1-1-1-x", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + +# lon + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 9 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) + +############################################## +test_that("1-2-4-2-1-1-1-x", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) +}) +############################################## +test_that("1-5-4-2-1-1-1-x", { +lons.min <- -10 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + +}) + +############################################## +test_that("1-6-4-2-1-1-1-x", { +lons.min <- 10 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + FALSE + ) +}) + +############################################## +test_that("1-7-4-2-1-1-1-x", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(330, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +test_that("1-8-4-2-1-1-1-x", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(3:4), + latitude = values(c(lats.min:lats.max)), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(350, 358.75), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +############################################## +############################################## +test_that("1-1-4-2-2-2-1-x", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 9 + ) + expect_equal( + class(attr(res, 'Variables')$dat1$longitude), + 'array' + ) +}) +############################################## +test_that("1-1-4-2-2-3-1-x", { +lons.min <- 10 +lons.max <- 20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) + expect_equal( + length(attr(res, 'Variables')$dat1$longitude), + 9 + ) +}) +############################################## +test_that("1-2-4-2-2-2-1-x", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(281) + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[9:10], + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +test_that("1-2-4-2-2-3-1-x", { +lons.min <- 20 +lons.max <- 10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(281) + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[153:154], + c(10, 20), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) + +############################################## +test_that("1-3-4-2-2-2-1-x", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(281) + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[273:274], + c(340, 350), + tolerance = 0.0001 + ) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(0, 358.75), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-3-4-2-2-3-1-x", { +lons.min <- -10 +lons.max <- -20 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(281) + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[129:130], + c(-20, -10), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-4-4-2-2-2-1-x", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(340, 350), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) +############################################## +test_that("1-4-4-2-2-3-1-x", { +lons.min <- -20 +lons.max <- -10 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-20, -10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) + +############################################## +test_that("1-5-4-2-2-2-1-x", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(330, 350), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-5-4-2-2-3-1-x", { +lons.min <- 330 +lons.max <- 350 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-30, -10), + tolerance = 0.0001 + ) + expect_equal( + (attr(res, 'Variables')$dat1$longitude)[1] < (attr(res, 'Variables')$dat1$longitude)[2], + TRUE + ) +}) + +############################################## +test_that("1-6-4-2-2-2-1-x", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(0, 360), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(17), + tolerance = 0.0001 + ) + expect_equal( + as.vector((attr(res, 'Variables')$dat1$longitude))[9:10], + c(10, 350), + tolerance = 0.0001 + ) +}) +############################################## +test_that("1-6-4-2-2-3-1-x", { +lons.min <- 350 +lons.max <- 370 +lats.min <- 10 +lats.max <- 20 +res <- Start(dat = list(list(path=path_exp)), + var = 'psl', + member = 'all', + sdate = '20001101', + time = indices(4), + latitude = values(list(lats.min, lats.max)), + latitude_reorder = Sort(), + longitude_reorder = CircularSort(-180, 180), + longitude = values(list(lons.min, lons.max)), + synonims = list(latitude=c('lat','latitude'), + longitude=c('lon','longitude'), + member=c('ensemble','realization')), + return_vars = list(latitude = 'dat', + longitude = 'dat', + time = NULL), + retrieve = F) + expect_equal( + length((attr(res, 'Variables')$dat1$longitude)), + c(17), + tolerance = 0.0001 + ) + expect_equal( + range((attr(res, 'Variables')$dat1$longitude)), + c(-10, 10), + tolerance = 0.0001 + ) +}) -- GitLab From bbd9e0a41949950c0566f3c5984da676d7c9ac96 Mon Sep 17 00:00:00 2001 From: aho Date: Mon, 23 Mar 2020 10:15:51 +0100 Subject: [PATCH 48/49] Update NEWS.md for v1.0.0 --- NEWS.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index e50ff10..1352407 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,8 @@ -# startR v0.1.5 (Release date:) +# startR v1.0.0 (Release date: 2020-03-23) - Bugfixes of lat and lon assigned by 'values' in Start(). In v0.1.4 it is incorrect when assigned from big to small values. +- Compatiblity break: Develop longitude and latitude reorder convention. +The reordering functions (i.e., Sort() and CircularSort()) are well-functioning now. + # startR v0.1.4 (Release date: 2020-02-10) - Bugfixes of transform in Start(). Change the default value of param 'extra_cells' to 2. (issue37) - Bugfixes of chunk function in Utils.R (issue23) -- GitLab From 2dbb823899ae0866ee0829cf3fde146673612747 Mon Sep 17 00:00:00 2001 From: nperez Date: Mon, 23 Mar 2020 10:27:09 +0100 Subject: [PATCH 49/49] Bumped version to v1.0.0 --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 65d6333..114cdcb 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,9 +1,10 @@ Package: startR Title: Automatically Retrieve Multidimensional Distributed Data Sets -Version: 0.1.4 +Version: 1.0.0 Authors@R: c( person("BSC-CNS", role = c("aut", "cph")), person("Nicolau", "Manubens", , "nicolau.manubens@bsc.es", role = c("aut")), + person("An Chi", "Ho", , "aho@bsc.es", role = c("ctb")), person("Nuria", "Perez-Zanon", , "nuria.perez@bsc.es", role = c("ctb", "cre"), comment = c(ORCID = "0000-0001-8568-3071")), person("Javier", "Vegas", , "javier.vegas@bsc.es", role = c("ctb")), person("Pierre-Antoine", "Bretonniere", , "pierre-antoine.bretonniere@bsc.es", role = c("ctb")), -- GitLab