From 485be9f0e72e135197eedefc0dbc407f05ee902a Mon Sep 17 00:00:00 2001 From: David <david.dorchies@inrae.fr> Date: Fri, 24 May 2024 16:53:50 +0200 Subject: [PATCH] fix(getNodeRanking): wrong sorting between sibling and upstream ungauged with same donor - fix & test Refs #155 --- R/getNodeRanking.R | 5 ++++- tests/testthat/test-getNodeRanking.R | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/R/getNodeRanking.R b/R/getNodeRanking.R index e4c6cf4..792c081 100644 --- a/R/getNodeRanking.R +++ b/R/getNodeRanking.R @@ -40,7 +40,10 @@ getNodeRanking <- function(griwrm) { # Check if upstream nodes have already been processed immediate_upstream_nodes <- g$id[!is.na(g$down) & g$down %in% g2$id] immediate_upstream_nodes <- immediate_upstream_nodes[!immediate_upstream_nodes %in% g2$id] - if (all(immediate_upstream_nodes %in% r)) { + if (all(immediate_upstream_nodes %in% r) && + (upDonor %in% r || isNodeDownstream(g2, upId, upDonor))) { + areNodesUpstreamDonor <- sapply(g2$id, function(id) isNodeDownstream(g2, id, upDonor)) + g2 <- g2[upDonor %in% r | g2$id == upDonor | areNodesUpstreamDonor, ] g2$donor <- g2$id ungaugedIds <- getNodeRanking(g2) r <- c(r, ungaugedIds) diff --git a/tests/testthat/test-getNodeRanking.R b/tests/testthat/test-getNodeRanking.R index 5019347..18ace82 100644 --- a/tests/testthat/test-getNodeRanking.R +++ b/tests/testthat/test-getNodeRanking.R @@ -55,3 +55,14 @@ test_that("Impossible case detected: ungauged node with diversion to an upstream area = NA)) expect_error(CreateGRiwrm(nodes_div)) }) + +test_that("donor of ungauged cluster is processed before sibling ungauged nodes (#155)", { + n155 <- data.frame(id = c("UngSib", "UngUp", "Donor", "Down"), + down = c("Down", "Donor", "Down", NA), + length = c(rep(1, 3), NA), + model = c("Ungauged", "Ungauged", "RunModel_GR4J", "RunModel_GR4J"), + area = rep(1,4), + donor = c("Donor", NA, NA, NA)) + g155 <- CreateGRiwrm(n155) + expect_equal(getNodeRanking(g155), c("UngUp", "Donor", "UngSib", "Down")) +}) -- GitLab