diff --git a/R/Start.R b/R/Start.R index 0076e9aa1236daa438573a94ccde57b93cab4fa5..407c0bdad3ba5aea050503ee26601160b929fab4 100644 --- a/R/Start.R +++ b/R/Start.R @@ -2203,7 +2203,9 @@ print("-> SELECTORS REQUESTED BEFORE TRANSFORM.") if (!is.null(dim_reorder_params[[inner_dim]])) { transformed_subset_var_reorder <- dim_reorder_params[[inner_dim]](transformed_subset_var) transformed_subset_var <- transformed_subset_var_reorder$x - transformed_subset_var_unorder <- sort(transformed_subset_var_reorder$ix, index.return = TRUE)$ix +#NOTE: The fix here solves the mis-ordered lon when across_meridian. + transformed_subset_var_unorder <- transformed_subset_var_reorder$ix +# transformed_subset_var_unorder <- sort(transformed_subset_var_reorder$ix, index.return = TRUE)$ix } else { transformed_subset_var_unorder <- 1:length(transformed_subset_var) } diff --git a/tests/testthat/test-Start-transform-lon-across_meridian.R b/tests/testthat/test-Start-transform-lon-across_meridian.R new file mode 100644 index 0000000000000000000000000000000000000000..a5dc84de390a36275dd2244c9320778b8acac76e --- /dev/null +++ b/tests/testthat/test-Start-transform-lon-across_meridian.R @@ -0,0 +1,77 @@ +context("Start() transform across_meridian lon order check") + +test_that("first test", { + + + repos <- "/esarchive/exp/ecmwf/system5_m1/monthly_mean/tas_f6h/$var$_$sdate$.nc" + var <- 'tas' + lon.min <- 170 + lon.max <- 185 #359.723 #360 + lat.min <- -10 #-90 + lat.max <- 20 #90 + + data_across <- Start(dat = repos, + var = var, + sdate = c('20170101'), + ensemble = indices(1), + time = indices(1), + latitude = values(list(lat.min, lat.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lon.min, lon.max)), + longitude_reorder = CircularSort(-180, 180), + transform = CDORemapper, + transform_extra_cells = 0, + transform_params = list( + grid = 'r360x181', + method = 'con', + crop = c(lon.min,lon.max,lat.min,lat.max) + ), + transform_vars = c('latitude', 'longitude'), + return_vars = list(time = 'sdate', + longitude = 'dat', + latitude = 'dat'), + retrieve = T) + + data_no_across <- Start(dat = repos, + var = var, + sdate = c('20170101'), + ensemble = indices(1), + time = indices(1), + latitude = values(list(lat.min, lat.max)), + latitude_reorder = Sort(decreasing = T), + longitude = values(list(lon.min, lon.max)), + longitude_reorder = CircularSort(0, 360), + transform = CDORemapper, + transform_extra_cells = 0, + transform_params = list( + grid = 'r360x181', + method = 'con', + crop = c(lon.min,lon.max,lat.min,lat.max) + ), + transform_vars = c('latitude', 'longitude'), + + return_vars = list(time = 'sdate', + longitude = 'dat', + latitude = 'dat'), + retrieve = T) + + + expect_equal( + as.vector(attr(data_across, 'Variables')$dat1$longitude), + c(-180:-175, 170:179) + ) + expect_equal( + as.vector(attr(data_no_across, 'Variables')$dat1$longitude), + c(170:185) + ) + + expect_equal( + data_across[1,1,1,1,1,1,8:16], + data_no_across[1,1,1,1,1,1,2:10] + ) + expect_equal( + data_across[1,1,1,1,1,1,2:5], + data_no_across[1,1,1,1,1,1,12:15] + ) + +})