diff --git a/NEWS.md b/NEWS.md index de0362740f7fcd0d236b32bcbc119ab9187f72d0..827fa583c8fbe4a0f58725b978af023fa2edf963 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,7 @@ -# startR v1.0.1 (Release date: 2020-04-) +# startR v1.0.2 (Release date: 2020-) +- Bugfix for longitude transformation when the required grid point across the borders. The bug apprears at v1.0.0 and v1.0.1. + +# startR v1.0.1 (Release date: 2020-04-21) - Bugfix for global longitude across the borders. - Bugfix for longitude transformation when across the borders. - Bugfix for transform_extra_cells when across the borders. diff --git a/R/Start.R b/R/Start.R index 1cf059c09ca241be70daa515e6381450a341e424..156ee53f905394ce7627e2e1da1f6f162e895175 100644 --- a/R/Start.R +++ b/R/Start.R @@ -2177,14 +2177,36 @@ print("-> SELECTORS REQUESTED BEFORE TRANSFORM.") first_index <- min(unlist(sub_array_of_indices)) last_index <- max(unlist(sub_array_of_indices)) - 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 = ", + start_padding <- min(beta, first_index - 1) + end_padding <- min(beta, n - last_index) + + if (exists("is_circular_dim")) { + if (!is_circular_dim) { #latitude + 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.")) - } + } + } else { #longitude + if ((last_index - first_index + 1 + beta * 2) >= n) { + sub_array_of_fri <- 1:n + } else if (start_padding < beta) { # left side too close to border, need to go to right side + sub_array_of_fri <- c((first_index - start_padding):(last_index + end_padding), (n - (beta - start_padding - 1)):n) + } else if (end_padding < beta) { # right side too close to border, need to go to left side + sub_array_of_fri <- c(1: (beta - end_padding), (first_index - start_padding):(last_index + end_padding)) + } else { #normal + sub_array_of_fri <- (first_index - start_padding):(last_index + end_padding) + } + } + } else { # when _reorder is not used + 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