From c77f56468ec8a8cd8d5db5edca3b2a2ee8049f95 Mon Sep 17 00:00:00 2001
From: David <david.dorchies@inrae.fr>
Date: Mon, 27 May 2024 15:33:15 +0200
Subject: [PATCH] feat(CreateInputsCrit): allow sibling nodes as AprioriIds
Refs #156
---
R/CreateInputsCrit.GRiwrmInputsModel.R | 8 +++++---
tests/testthat/test-CreateInputsCrit.R | 21 ++++++++++++++++++---
2 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/R/CreateInputsCrit.GRiwrmInputsModel.R b/R/CreateInputsCrit.GRiwrmInputsModel.R
index 69a97d5..bc234ed 100644
--- a/R/CreateInputsCrit.GRiwrmInputsModel.R
+++ b/R/CreateInputsCrit.GRiwrmInputsModel.R
@@ -53,14 +53,16 @@ CreateInputsCrit.GRiwrmInputsModel <- function(InputsModel,
stop("'Each item of AprioriIds must be an id of a modelled node:",
" the id \"", AprioriIds[id] ,"\" is not in the list of the modelled nodes")
}
- if (! isNodeDownstream(InputsModel, AprioriIds[id], id)) {
+ if (!AprioriIds[id] %in% names(InputsModel)[1:which(id == names(InputsModel))]) {
stop("'AprioriIds': the node \"", AprioriIds[id],
- "\" is not upstream the node \"", id,"\"")
+ "\" is not calibrated before the node \"", id,"\".",
+ "\nIf possible, set this apriori id as the donor of the node \"",
+ id,"\" to force the calibration sequence order")
}
if (InputsModel[[AprioriIds[id]]]$isUngauged &
InputsModel[[AprioriIds[id]]]$gaugedId == id) {
stop("'AprioriIds': the node \"", AprioriIds[id],
- "\" is an ungauged upstream node of the node \"", id,"\"")
+ "\" is ungauged, use a gauged node instead")
}
if (!identical(InputsModel[[id]]$FUN_MOD, InputsModel[[AprioriIds[id]]]$FUN_MOD)) {
stop("'AprioriIds': the node \"", AprioriIds[id],
diff --git a/tests/testthat/test-CreateInputsCrit.R b/tests/testthat/test-CreateInputsCrit.R
index 3b419ae..8c3ad5a 100644
--- a/tests/testthat/test-CreateInputsCrit.R
+++ b/tests/testthat/test-CreateInputsCrit.R
@@ -103,10 +103,25 @@ test_that("Lavenne criterion: wrong sub-catchment order should throw error", {
CreateInputsCrit(InputsModel = InputsModel,
RunOptions = RunOptions,
Obs = Qobs[IndPeriod_Run,],
- AprioriIds = c("54057" = "54032", "54032" = "54001", "54001" = "54029"),
+ AprioriIds = c("54057" = "54032", "54032" = "54001", "54095" = "54029"),
transfo = "sqrt"),
- regexp = "is not upstream the node"
+ regexp = "is not calibrated before the node"
+ )
+})
+
+test_that("Lavenne criterion: not upstream a priori nodes are allow if processed before #156", {
+ IC156 <- CreateInputsCrit(
+ InputsModel = InputsModel,
+ RunOptions = RunOptions,
+ Obs = Qobs[IndPeriod_Run, ],
+ AprioriIds = c(
+ "54057" = "54032",
+ "54032" = "54001",
+ "54029" = "54095"
+ ),
+ transfo = "sqrt"
)
+ expect_equal(attr(IC156$`54029`, "AprioriId"), c("54029" = "54095"))
})
test_that("Lavenne criterion: current node and a priori node must use the same model", {
@@ -131,6 +146,6 @@ test_that("Ungauged node as Apriori node should throw an error", {
Obs = Qobs[IndPeriod_Run,],
AprioriIds = c("54057" = "54032", "54032" = "54001", "54001" = "54029"),
transfo = "sqrt"),
- regexp = "\"54001\" is an ungauged upstream node of the node \"54032\""
+ regexp = "\"54001\" is ungauged"
)
})
--
GitLab