Repository: geco-bern/rsofun
Pull request #288: Phydro: make test pass
Author: login: fabern
Created: 2025-03-02T22:15:18Z | Merged: 2025-03-03T07:34:41Z

This updates the test-suite, documentation, vignettes, and example data sets in the phydro branch.
This is needed since there had been changes to:
- input parameters (`vwind`)
- model computation (factor `x2` surface conductance)

Updating the reference tests makes evident in what way the model output changes when surface conductance is changed: see [this commit](https://github.com/geco-bern/rsofun/pull/288/commits/ee592a40d8b79a1820c96f12ed922c1bf43f44e2?diff=split&w=0#)


Diff:
diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml
index 91c76f72..e3f4307d 100644
--- a/.github/workflows/test-coverage.yaml
+++ b/.github/workflows/test-coverage.yaml
@@ -7,6 +7,7 @@ on:
     branches:
       - main
       - master
+      - phydro
 
 name: test-coverage
 jobs:
@@ -45,7 +46,7 @@ jobs:
 
       - name: Upload test results
         if: failure()
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: coverage-test-failures
           path: ${{ runner.temp }}/package
diff --git a/R/data.R b/R/data.R
index fc88b7f4..9a0bd97e 100644
--- a/R/data.R
+++ b/R/data.R
@@ -22,8 +22,10 @@
 #'       \item{rain}{Rain as precipitation in liquid form in mm s\eqn{^{-1}}.}
 #'       \item{tmin}{Daily minimum air temperature in \eqn{^\circ}C.}
 #'       \item{tmax}{Daily maximum air temperature in \eqn{^\circ}C.}
+#'       \item{vwind}{Windspeed in m/s assumed to be measured at the reference 
+#'       height (site_info$reference_height).}
 #'       \item{fapar}{Fraction of photosynthetic active radiation (fAPAR), taking
-#'      values between 0 and 1.}
+#'       values between 0 and 1.}
 #'       \item{co2}{Atmospheric CO\eqn{_2} concentration.}
 #'       \item{ccov}{Cloud coverage in \%. This is only used when either PPFD or
 #'       net radiation are not prescribed.}
@@ -43,6 +45,9 @@
 #'       \item{lgn3}{A logical value, \code{TRUE} if grass with C3 photosynthetic
 #'       pathway and N-fixing.}
 #'       \item{lgr4}{A logical value, \code{TRUE} if grass with C4 photosynthetic pathway.}
+#'       \item{use_pml}{TODO: document.}
+#'       \item{use_gs}{TODO: document.}
+#'       \item{use_phydro}{TODO: document.}
 #'     }
 #'   }
 #'   \item{site_info}{A tibble containing site meta information.
@@ -51,6 +56,8 @@
 #'       \item{lat}{Latitude of the site location in degrees north.}
 #'       \item{elv}{Elevation of the site location, in meters above sea level.}
 #'       \item{whc}{A numeric value for the rooting zone water holding capacity (in mm)}
+#'       \item{canopy_height}{Height of canopy, in meters above ground.}
+#'       \item{reference_height}{Height of windspeed and VPD measurement, in meters above ground.}
 #'     }
 #'   }
 #' }
diff --git a/data-raw/README.md b/data-raw/README.md
index 24a1ddeb..fa5b92ea 100644
--- a/data-raw/README.md
+++ b/data-raw/README.md
@@ -1 +1,48 @@
-The script for generating `data/p_model_drivers.rda` is in [`geco-bern/FluxDataKit/analysis/05_generate_demo_rsofun_drivers.R`](https://github.com/geco-bern/FluxDataKit/blob/main/analysis/05_generate_demo_rsofun_drivers.R).
\ No newline at end of file
+The script for generating `data/p_model_drivers.rda` is in [`geco-bern/FluxDataKit/analysis/05_generate_demo_rsofun_drivers.R`](https://github.com/geco-bern/FluxDataKit/blob/main/analysis/05_generate_demo_rsofun_drivers.R).
+
+2025-02: added vwind=2.0 m/s with following code:
+```
+load("~/GitHub/geco-bern/rsofun/data/p_hydro_drivers.rda")
+p_hydro_drivers <- p_hydro_drivers |> rowwise() |> 
+  mutate(forcing = list(mutate(forcing, vwind=2.0)), 
+         forcing_daytime_mean = list(mutate(forcing_daytime_mean, vwind=2.0)), 
+         forcing_halfhourly = list(mutate(forcing_halfhourly, vwind=2.0)), 
+         forcing_acclim = list(mutate(forcing_acclim, vwind=2.0))) |> 
+  ungroup()
+save(p_hydro_drivers, file = "~/GitHub/geco-bern/rsofun/data/p_hydro_drivers.rda", compress = "xz")
+
+load("~/GitHub/geco-bern/rsofun/data/p_model_drivers_vcmax25.rda")
+p_model_drivers_vcmax25 <- p_model_drivers_vcmax25 |> 
+  rowwise() |> mutate(forcing = list(mutate(forcing, vwind=2.0))) |> ungroup()
+save(p_model_drivers_vcmax25, file = "~/GitHub/geco-bern/rsofun/data/p_model_drivers_vcmax25.rda", compress = "xz")
+
+load("~/GitHub/geco-bern/rsofun/data/p_model_drivers.rda")
+p_model_drivers <- p_model_drivers |> 
+  rowwise() |> mutate(forcing = list(mutate(forcing, vwind=2.0))) |> ungroup()
+save(p_model_drivers, file = "~/GitHub/geco-bern/rsofun/data/p_model_drivers.rda", compress = "bzip2")
+
+load("~/GitHub/geco-bern/rsofun/data/p_model_drivers_format2024_08.rda")
+p_model_drivers_format2025_02 <- p_model_drivers_format2024_08 |> 
+  rowwise() |> mutate(forcing = list(mutate(forcing, vwind=2.0))) |> ungroup()
+save(p_model_drivers_format2025_02, file = "~/GitHub/geco-bern/rsofun/data/p_model_drivers_format2025_02.rda", compress = "bzip2")
+load("~/GitHub/geco-bern/rsofun/data/p_model_validation_format2024_08.rda")
+p_model_validation_format2025_02 <- p_model_validation_format2024_08
+save(p_model_validation_format2025_02, file = "~/GitHub/geco-bern/rsofun/data/p_model_validation_format2025_02.rda", compress = "bzip2")
+```
+
+TODO: what still needs to be updated in branch phydro are other information in the example drivers, namely params_siml (use_pml, use_gs, use_phydro) and site_info (canopy_height, reference_height):
+```
+rsofun::p_model_drivers_vcmax25 |>
+    # TODO: NOT YET UPDATED FOR PHYDRO
+    # # specify additionally needed params_siml flags:
+    dplyr::mutate(params_siml = purrr::map(params_siml, \(x)
+                                    dplyr::mutate(x,
+                                           use_pml    = TRUE,
+                                           use_gs     = TRUE,
+                                           use_phydro = FALSE))) |>
+    # specify additionally needed site info:
+    dplyr::mutate(site_info = purrr::map(site_info, \(x)
+                                  dplyr::mutate(x,
+                                         canopy_height = 5,
+                                         reference_height = 10)))
+```
diff --git a/data/AU-ASM_p_hydro_drivers.rda b/data/AU-ASM_p_hydro_drivers.rda
deleted file mode 100644
index 782f82cc..00000000
Binary files a/data/AU-ASM_p_hydro_drivers.rda and /dev/null differ
diff --git a/data/p_hydro_drivers.rda b/data/p_hydro_drivers.rda
new file mode 100644
index 00000000..bbe2a536
Binary files /dev/null and b/data/p_hydro_drivers.rda differ
diff --git a/data/AU-ASM_p_hydro_validation.rda b/data/p_hydro_validation.rda
similarity index 100%
rename from data/AU-ASM_p_hydro_validation.rda
rename to data/p_hydro_validation.rda
diff --git a/data/p_model_drivers.rda b/data/p_model_drivers.rda
index cd859f9c..b6de5901 100644
Binary files a/data/p_model_drivers.rda and b/data/p_model_drivers.rda differ
diff --git a/data/p_model_drivers_format2024_08.rda b/data/p_model_drivers_format2024_08.rda
deleted file mode 100644
index 5b339ae5..00000000
Binary files a/data/p_model_drivers_format2024_08.rda and /dev/null differ
diff --git a/data/p_model_drivers_format2025_02.rda b/data/p_model_drivers_format2025_02.rda
new file mode 100644
index 00000000..da6241b9
Binary files /dev/null and b/data/p_model_drivers_format2025_02.rda differ
diff --git a/data/p_model_drivers_vcmax25.rda b/data/p_model_drivers_vcmax25.rda
index 1eeff848..af06cc2e 100644
Binary files a/data/p_model_drivers_vcmax25.rda and b/data/p_model_drivers_vcmax25.rda differ
diff --git a/data/p_model_validation_format2024_08.rda b/data/p_model_validation_format2024_08.rda
deleted file mode 100644
index 4d11a955..00000000
Binary files a/data/p_model_validation_format2024_08.rda and /dev/null differ
diff --git a/data/p_model_validation_format2025_02.rda b/data/p_model_validation_format2025_02.rda
new file mode 100644
index 00000000..28f0eeac
Binary files /dev/null and b/data/p_model_validation_format2025_02.rda differ
diff --git a/src/forcing_siterun_pmodel.mod.f90 b/src/forcing_siterun_pmodel.mod.f90
index 8436567e..a4e642b9 100644
--- a/src/forcing_siterun_pmodel.mod.f90
+++ b/src/forcing_siterun_pmodel.mod.f90
@@ -54,7 +54,7 @@ function getclimate( nt, forcing, climateyear_idx, in_ppfd, in_netrad ) result (
     !----------------------------------------------------------------
     ! arguments
     integer,  intent(in) :: nt ! number of time steps
-    real(kind=dp),  dimension(nt,12), intent(in)  :: forcing  ! array containing all temporally varying forcing data (rows: time steps; columns: 1=air temperature, 2=rainfall, 3=vpd, 4=ppfd, 5=net radiation, 6=sunshine fraction, 7=snowfall, 8=co2, 9=N-deposition) 
+    real(kind=dp),  dimension(nt,13), intent(in)  :: forcing  ! array containing all temporally varying forcing data (rows: time steps; columns: 1=air temperature, 2=rainfall, 3=vpd, 4=ppfd, 5=net radiation, 6=sunshine fraction, 7=snowfall, 8=co2, 9=N-deposition) 
     integer, intent(in) :: climateyear_idx
     logical, intent(in) :: in_ppfd
     logical, intent(in) :: in_netrad
diff --git a/src/gpp_pmodel.mod.f90 b/src/gpp_pmodel.mod.f90
index af67d1ce..7a9c81ee 100644
--- a/src/gpp_pmodel.mod.f90
+++ b/src/gpp_pmodel.mod.f90
@@ -244,7 +244,7 @@ subroutine gpp( tile, tile_fluxes, co2, climate, climate_acclimation, grid, init
                             kphio = dble(kphio_temp), &
                             psi_soil = dble(swp_memory(pft)), & !0.d0, &
                             rdark = dble(params_gpp%rd_to_vcmax), &
-                            vwind = 3.0d0, &
+                            vwind = 3.0d0, &            ! NOTE: this is hardcoded as 3.0, while other places use v_wind (that used to have a default of 2.0)
                             par_plant = par_plant, &
                             par_cost = par_cost, &
                             par_control = options &
@@ -306,7 +306,7 @@ subroutine gpp( tile, tile_fluxes, co2, climate, climate_acclimation, grid, init
                             kphio = dble(kphio_temp), &
                             psi_soil = dble(swp(pft)), & !0.d0, &
                             rdark = dble(params_gpp%rd_to_vcmax), &
-                            vwind = 3.0d0, &
+                            vwind = 3.0d0, &             ! NOTE: this is hardcoded as 3.0, while other places use v_wind (that used to have a default of 2.0)
                             par_plant = par_plant, &
                             par_cost = par_cost, &
                             par_control = options &
diff --git a/tests/testthat/test-calibration-pmodel.R b/tests/testthat/test-calibration-pmodel.R
index 1812fceb..7f83f6b0 100644
--- a/tests/testthat/test-calibration-pmodel.R
+++ b/tests/testthat/test-calibration-pmodel.R
@@ -3,7 +3,7 @@ set.seed(10)
 
 test_that("test GPP calibration routine p-model (BT, likelihood maximization)", {
   skip_on_cran()
-  drivers <- rsofun::p_model_drivers_format2024_08 # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
+  drivers <- rsofun::p_model_drivers_format2025_02 # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
   drivers$params_siml[[1]]$use_gs     <- TRUE
   
   obs <- rsofun::p_model_validation
@@ -56,7 +56,7 @@ test_that("test GPP calibration routine p-model (BT, likelihood maximization)",
 
 test_that("test GPP calibration routine p-model (GenSA, rmse, all params)", {
   skip_on_cran()
-  drivers <- rsofun::p_model_drivers_format2024_08 # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
+  drivers <- rsofun::p_model_drivers_format2025_02 # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
   drivers$params_siml[[1]]$use_gs     <- TRUE
   obs <- rsofun::p_model_validation
   
@@ -211,7 +211,7 @@ test_that("test Vcmax25 calibration routine p-model (GenSA, rmse)", {
 test_that("test joint calibration routine p-model (BT, likelihood maximization)", {
   skip_on_cran()
   drivers <- rbind(
-    gpp     =   rsofun::p_model_drivers_format2024_08, # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
+    gpp     = rsofun::p_model_drivers_format2025_02, # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
     vcmax25 = rsofun::p_model_drivers_vcmax25  |>
       # TODO: NOT YET UPDATED FOR PHYDRO
       # # specify additionally needed params_siml flags:
@@ -284,7 +284,7 @@ test_that("test joint calibration routine p-model (BT, likelihood maximization)"
     # dput(pars$par)
   # print(dput(pars$par))
   ref_pars <- c(kphio       = 0.0453,
-                err_gpp     = 1.51,
+                err_gpp     = 1.14,
                 err_vcmax25 = 0.0060)
   expect_equal(pars$par, ref_pars, tolerance = 0.1)
   
diff --git a/tests/testthat/test-model-runs.R b/tests/testthat/test-model-runs.R
index 810bea25..6543f0ae 100644
--- a/tests/testthat/test-model-runs.R
+++ b/tests/testthat/test-model-runs.R
@@ -33,7 +33,7 @@ test_that("run_pmodel_f_bysite()", {
   )
 
   # read in demo data
-  df_drivers <- rsofun::p_model_drivers_format2024_08
+  df_drivers <- rsofun::p_model_drivers_format2025_02
   
   # check run_pmodel_f_bysite() ##########################
   # run the SOFUN Fortran P-model using the internal function `run_pmodel_f_bysite`
@@ -141,25 +141,25 @@ test_that("run_pmodel_f_bysite()", {
   #       To do so, simply use the commented code, making use of dput(). Thanks!
   # tibble(mod1) |> slice(c(1, 70, 1200, 1400, 2000, 2180)) |> dput()
   ref1 <- tibble(
-    date      = structure(c(13514, 13583, 14714, 14914, 15515, 15695), class = "Date"), 
-    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97), 
-    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846,0.689359784126282), 
-    gpp       = c(1.65618813037872, 6.02679443359375, 6.72385692596436, 1.84405922889709, 9.40890026092529, 0.896598398685455), 
-    aet       = c(0.977257549762726, 1.5287424325943, 3.31175374984741, 1.61871206760406, 3.53805994987488, 1.13068926334381), 
+    date      = as.Date(c("2007-01-01","2007-03-11","2010-04-15","2010-11-01","2012-06-24","2012-12-21")), 
+    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97),
+    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846, 0.689359784126282),
+    gpp       = c(1.65618813037872, 6.02679443359375, 6.72385692596436, 1.84405922889709, 9.40890026092529, 0.896598398685455),
+    aet       = c(0.977257549762726, 1.5287424325943, 3.31175374984741, 1.61871206760406, 3.53805994987488, 1.13068926334381),
     le        = c(2417903.75, 3775541, 8173714, 3988548.25, 8600976, 2803547.25), 
-    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592, 0.335356384515762, 6.51526165008545, -0.377504140138626), 
-    vcmax     = c(9.54577535594581e-06, 1.18804200610612e-05, 1.91590133908903e-05, 1.37124443426728e-05, 5.95575438637752e-05, 5.93948425375856e-06), 
-    jmax      = c(3.08439557556994e-05, 3.66509229934309e-05, 5.80160958634224e-05, 3.691642996273e-05, 0.000109297579911072, 2.01222374016652e-05), 
-    vcmax25   = c(3.51696653524414e-05, 3.77493124688044e-05, 5.76805359742139e-05, 3.59945297532249e-05, 5.17318439960945e-05, 2.60039796557976e-05), 
-    jmax25    = c(7.8623415902257e-05, 8.34658203530125e-05,0.000126882849144749, 7.2937982622534e-05, 9.94235306279734e-05,5.87244903726969e-05), 
-    gs_accl   = c(0.0016942253569141, 0.00173744710627943,0.00175592955201864, 0.00170137174427509, 0.00156046624761075,0.00193470600061119), 
-    wscal     = c(0.157053604722023, 0.15498948097229, 0.310147076845169, 0.205126166343689, 0.264321148395538, 0.318660259246826), 
-    chi       = c(0.629108071327209, 0.642833471298218, 0.639411568641663,0.66897189617157, 0.674327433109283, 0.673606336116791), 
-    iwue      = c(9.066015627468e-05,8.73051467351615e-05, 8.65905749378726e-05, 7.94415027485229e-05,8.00566194811836e-05, 8.02328504505567e-05), 
-    rd        = c(0.0936944633722305, 0.121099025011063, 0.188513651490211, 0.146433308720589, 0.569870233535767,0.0640662834048271), 
-    tsoil     = c(8.88349437713623, 11.0428524017334,11.4038162231445, 15.0282745361328, 20.0777721405029, 9.41864013671875), 
-    netrad    = c(4.16539621353149, 55.9189796447754, 116.783561706543, 12.2599382400513, 192.525726318359, -16.011812210083), 
-    wcont     = c(314.107208251953, 309.978973388672, 620.294128417969, 410.252319335938, 528.642272949219, 637.320495605469), 
+    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592, 0.335356384515762, 6.51526165008545, -0.377504140138626),
+    vcmax     = c(9.54577535594581e-06, 1.18804200610612e-05, 1.91590133908903e-05, 1.37124443426728e-05, 5.95575438637752e-05, 5.93948425375856e-06),
+    jmax      = c(3.08439557556994e-05, 3.66509229934309e-05, 5.80160958634224e-05, 3.691642996273e-05, 0.000109297579911072, 2.01222374016652e-05),
+    vcmax25   = c(3.51696653524414e-05, 3.77493124688044e-05, 5.76805359742139e-05, 3.59945297532249e-05, 5.17318439960945e-05, 2.60039796557976e-05),
+    jmax25    = c(7.8623415902257e-05, 8.34658203530125e-05, 0.000126882849144749, 7.2937982622534e-05, 9.94235306279734e-05, 5.87244903726969e-05),
+    gs_accl   = c(1.80036209940226e-07, 6.6131934772784e-07, 7.74569343775511e-07, 2.13159879081104e-07, 1.07288553863327e-06, 9.92605464489316e-08),
+    wscal     = c(0.157053604722023, 0.15498948097229, 0.310147076845169, 0.205126166343689, 0.264321148395538, 0.318660259246826),
+    chi       = c(0.629108071327209, 0.642833471298218, 0.639411568641663, 0.66897189617157, 0.674327433109283, 0.673606336116791),
+    iwue      = c(9.066015627468e-05, 8.73051467351615e-05, 8.65905749378726e-05, 7.94415027485229e-05, 8.00566194811836e-05, 8.02328504505567e-05),
+    rd        = c(0.0936944633722305, 0.121099025011063, 0.188513651490211, 0.146433308720589, 0.569870233535767, 0.0640662834048271),
+    tsoil     = c(8.88349437713623, 11.0428524017334, 11.4038162231445, 15.0282745361328, 20.0777721405029, 9.41864013671875),
+    netrad    = c(4.16539621353149, 55.9189796447754, 116.783561706543, 12.2599382400513, 192.525726318359, -16.011812210083),
+    wcont     = c(314.107208251953, 309.978973388672, 620.294128417969, 410.252319335938, 528.642272949219, 637.320495605469),
     snow      = c(0, 0, 0, 0, 0, 0), 
     cond      = c(0, 0, 0, 0, 0, 0), 
     le_canopy = c(0, 0, 0, 0, 0, 0), 
@@ -169,89 +169,87 @@ test_that("run_pmodel_f_bysite()", {
   
   # tibble(mod2) |> slice(c(1, 70, 1200, 1400, 2000, 2180)) |> dput()
   ref2 <- tibble(
-    date      = structure(c(13514, 13583, 14714, 14914, 15515, 15695), class = "Date"), 
-    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97), 
-    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846, 0.689359784126282), 
-    gpp       = c(1.65618813037872, 6.02679443359375, 6.72385692596436, 1.84405922889709, 9.40890026092529, 0.896598398685455), 
-    aet       = c(0.0831360220909119, 1.46265971660614, 1.86834669113159, 0.240892946720123, 5.62481117248535, -0.0911358147859573), 
-    le        = c(205692.84375, 3612336.25, 4611252, 593566.4375, 13673840, -225971.515625),     
-    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592,     0.335356384515762, 6.51526165008545, -0.377504140138626),     
-    vcmax     = c(9.54577535594581e-06, 1.18804200610612e-05, 1.91590133908903e-05,     1.37124443426728e-05, 5.95575438637752e-05, 5.93948425375856e-06    ), 
-    jmax      = c(3.08439557556994e-05, 3.66509229934309e-05, 5.80160958634224e-05,     3.691642996273e-05, 0.000109297579911072, 2.01222374016652e-05    ), 
-    vcmax25   = c(3.51696653524414e-05, 3.77493124688044e-05,     5.76805359742139e-05, 3.59945297532249e-05, 5.17318439960945e-05,     2.60039796557976e-05), 
-    jmax25    = c(7.8623415902257e-05, 8.34658203530125e-05,     0.000126882849144749, 7.2937982622534e-05, 9.94235306279734e-05,     5.87244903726969e-05), 
-    gs_accl   = c(0.0016942253569141, 0.00173744710627943,     0.00175592955201864, 0.00170137174427509, 0.00156046624761075,     0.00193470600061119), 
-    wscal     = c(0.104094244539738, 0.129727467894554,     0.587451696395874, 0.497713387012482, 0.780628979206085,     0.86269211769104), 
-    chi       = c(0.629108071327209, 0.642833471298218,     0.639411568641663, 0.66897189617157, 0.674327433109283, 0.673606336116791    ), 
-    iwue      = c(9.066015627468e-05, 8.73051467351615e-05, 8.65905749378726e-05,     7.94415027485229e-05, 8.00566194811836e-05, 8.02328504505567e-05    ), 
-    rd        = c(0.0936944633722305, 0.121099025011063, 0.188513651490211,     0.146433308720589, 0.569870233535767, 0.0640662834048271),     
-    tsoil     = c(9.02208423614502, 11.0288057327271, 11.3866157531738,     15.0849714279175, 19.9336929321289, 9.59065818786621), 
-    netrad    = c(4.16539621353149,     55.9189796447754, 116.783561706543, 12.2599382400513, 192.525726318359,     -16.011812210083), 
-    wcont     = c(208.188491821289, 259.454925537109,     1174.90344238281, 995.4267578125, 1561.25793457031, 1725.38427734375    ), 
+    date      = as.Date(c("2007-01-01","2007-03-11","2010-04-15","2010-11-01","2012-06-24","2012-12-21")), 
+    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97),
+    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846, 0.689359784126282),
+    gpp       = c(1.65618813037872, 6.02679443359375, 6.72385692596436, 1.84405922889709, 9.40890026092529, 0.896598398685455),
+    aet       = c(0.0913383215665817, 1.57156276702881, 2.11342096328735, 0.263829529285431, 6.06539392471313, -0.115333966910839),
+    le        = c(225986.75, 3881294.5, 5216118.5, 650082.75, 14744891, -285970.90625), 
+    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592, 0.335356384515762, 6.51526165008545, -0.377504140138626),
+    vcmax     = c(9.54577535594581e-06, 1.18804200610612e-05, 1.91590133908903e-05, 1.37124443426728e-05, 5.95575438637752e-05, 5.93948425375856e-06),
+    jmax      = c(3.08439557556994e-05, 3.66509229934309e-05, 5.80160958634224e-05, 3.691642996273e-05, 0.000109297579911072, 2.01222374016652e-05),
+    vcmax25   = c(3.51696653524414e-05, 3.77493124688044e-05, 5.76805359742139e-05, 3.59945297532249e-05, 5.17318439960945e-05, 2.60039796557976e-05),
+    jmax25    = c(7.8623415902257e-05, 8.34658203530125e-05, 0.000126882849144749, 7.2937982622534e-05, 9.94235306279734e-05, 5.87244903726969e-05),
+    gs_accl   = c(1.80036209940226e-07, 6.6131934772784e-07, 7.74569343775511e-07, 2.13159879081104e-07, 1.07288553863327e-06, 9.92605464489316e-08),
+    wscal     = c(0.0881856083869934, 0.112692959606647, 0.529396653175354, 0.425926119089127, 0.673057317733765, 0.744019031524658),
+    chi       = c(0.629108071327209, 0.642833471298218, 0.639411568641663, 0.66897189617157, 0.674327433109283, 0.673606336116791),
+    iwue      = c(9.066015627468e-05, 8.73051467351615e-05, 8.65905749378726e-05, 7.94415027485229e-05, 8.00566194811836e-05, 8.02328504505567e-05),
+    rd        = c(0.0936944633722305, 0.121099025011063, 0.188513651490211, 0.146433308720589, 0.569870233535767, 0.0640662834048271),
+    tsoil     = c(9.0977668762207, 11.0215282440186, 11.3917474746704, 15.0705471038818, 19.9689388275146, 9.54828262329102),
+    netrad    = c(4.16539621353149, 55.9189796447754, 116.783561706543, 12.2599382400513, 192.525726318359, -16.011812210083),
+    wcont     = c(176.371215820312, 225.385925292969, 1058.79333496094, 851.852233886719, 1346.11462402344, 1488.0380859375),
     snow      = c(0, 0, 0, 0, 0, 0), 
-    cond      = c(0, 0, 0, 0, 0, 0),     
-    le_canopy = c(127639.390625, 2577880.75, 2284844.5, 376195.9375,     9554412, 4795.3779296875), 
-    le_soil   = c(78053.453125, 1034455.5625,     2326407.75, 217370.515625, 4119428, -230766.890625), 
-    dpsi      = c(0,     0, 0, 0, 0, 0), 
+    cond      = c(0, 0, 0, 0, 0, 0), 
+    le_canopy = c(127639.3984375, 2577880.75, 2284844.5, 376195.875, 9554412, 4795.3779296875), 
+    le_soil   = c(98347.3515625, 1303413.875, 2931274, 273886.84375, 5190479, -290766.28125),     
+    dpsi      = c(0, 0, 0, 0, 0, 0),     
     psi_leaf  = c(0, 0, 0, 0, 0, 0))
 
   # tibble(mod3) |> slice(c(1, 70, 1200, 1400, 2000, 2180)) |> dput()
   ref3 <- tibble(
-    date      = structure(c(13514, 13583, 14714, 14914, 15515, 15695), class = "Date"), 
-    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97), 
-    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846, 0.689359784126282), 
-    gpp       = c(1.65618813037872, 6.02679443359375, 6.72385692596436, 1.84405922889709, 9.40890026092529, 0.896598398685455), 
-    aet       = c(0.100568220019341, 1.24525260925293, 2.51481199264526, 0.302865445613861, 5.28670930862427, -0.297944843769073), 
-    le        = c(248823.109375, 3075405.25, 6206788, 746268.3125, 12851919, -738755.125), 
-    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592, 0.335356384515762, 6.51526165008545, -0.377504140138626), 
-    vcmax     = c(9.54577535594581e-06, 1.18804200610612e-05, 1.91590133908903e-05, 1.37124443426728e-05, 5.95575438637752e-05, 5.93948425375856e-06), 
-    jmax      = c(3.08439557556994e-05, 3.66509229934309e-05, 5.80160958634224e-05, 3.691642996273e-05, 0.000109297579911072, 2.01222374016652e-05), 
-    vcmax25   = c(3.51696653524414e-05, 3.77493124688044e-05, 5.76805359742139e-05, 3.59945297532249e-05, 5.17318439960945e-05, 2.60039796557976e-05), 
-    jmax25    = c(7.8623415902257e-05, 8.34658203530125e-05, 0.000126882849144749, 7.2937982622534e-05, 9.94235306279734e-05, 5.87244903726969e-05), 
-    gs_accl   = c(0.0016942253569141, 0.00173744710627943, 0.00175592955201864, 0.00170137174427509, 0.00156046624761075, 0.00193470600061119), 
-    wscal     = c(0.0814638137817383, 0.108003400266171, 0.461629569530487, 0.326345980167389, 0.524366974830627, 0.587543725967407), 
-    chi       = c(0.629108071327209, 0.642833471298218, 0.639411568641663, 0.66897189617157, 0.674327433109283, 0.673606336116791), 
-    iwue      = c(9.066015627468e-05, 8.73051467351615e-05, 8.65905749378726e-05, 7.94415027485229e-05, 8.00566194811836e-05, 8.02328504505567e-05), 
-    rd        = c(0.0936944633722305, 0.121099025011063, 0.188513651490211, 0.146433308720589, 0.569870233535767, 0.0640662834048271), 
-    tsoil     = c(9.16451072692871, 11.0153512954712, 11.3974561691284, 15.0535011291504, 20.0137233734131, 9.49603080749512), 
-    netrad    = c(4.16539621353149, 55.9189796447754, 116.783561706543, 12.2599382400513, 192.525726318359, -16.011812210083), 
-    wcont     = c(162.927627563477, 216.006805419922, 923.259155273438, 652.691955566406, 1048.73400878906, 1175.08740234375), 
-    snow      = c(0, 0, 0, 0, 0, 0), 
+    date      = as.Date(c("2007-01-01","2007-03-11","2010-04-15","2010-11-01","2012-06-24","2012-12-21")), 
+    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97),
+    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846, 0.689359784126282),
+    gpp       = c(1.65618813037872, 6.02679443359375, 6.72385692596436, 1.84405922889709, 9.40890026092529, 0.896598398685455),
+    aet       = c(0.0496958047151566, 0.866879522800446, 1.87889838218689, 0.156055122613907, 4.60135173797607, -0.136744096875191),
+    le        = c(122955.984375, 2140935.5, 4637295, 384523.84375, 11185824, -339057.375), 
+    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592, 0.335356384515762, 6.51526165008545, -0.377504140138626),
+    vcmax     = c(9.54577535594581e-06, 1.18804200610612e-05, 1.91590133908903e-05, 1.37124443426728e-05, 5.95575438637752e-05, 5.93948425375856e-06),
+    jmax      = c(3.08439557556994e-05, 3.66509229934309e-05, 5.80160958634224e-05, 3.691642996273e-05, 0.000109297579911072, 2.01222374016652e-05),
+    vcmax25   = c(3.51696653524414e-05, 3.77493124688044e-05, 5.76805359742139e-05, 3.59945297532249e-05, 5.17318439960945e-05, 2.60039796557976e-05),
+    jmax25    = c(7.8623415902257e-05, 8.34658203530125e-05, 0.000126882849144749, 7.2937982622534e-05, 9.94235306279734e-05, 5.87244903726969e-05),
+    gs_accl   = c(1.80036209940226e-07, 6.6131934772784e-07, 7.74569343775511e-07, 2.13159879081104e-07, 1.07288553863327e-06, 9.92605464489316e-08),
+    wscal     = c(0.294413775205612, 0.325790286064148, 0.887494623661041, 0.82906848192215, 0.962663650512695, 1), 
+    chi       = c(0.629108071327209, 0.642833471298218, 0.639411568641663, 0.66897189617157, 0.674327433109283, 0.673606336116791),
+    iwue      = c(9.066015627468e-05, 8.73051467351615e-05, 8.65905749378726e-05, 7.94415027485229e-05, 8.00566194811836e-05, 8.02328504505567e-05),
+    rd        = c(0.0936944633722305, 0.121099025011063, 0.188513651490211, 0.146433308720589, 0.569870233535767, 0.0640662834048271),
+    tsoil     = c(8.90927314758301, 11.0400791168213, 11.3561420440674, 15.1653509140015, 19.8312225341797, 9.67751979827881),
+    netrad    = c(4.16539621353149, 55.9189796447754, 116.783561706543, 12.2599382400513, 192.525726318359, -16.011812210083),
+    wcont     = c(588.827575683594, 651.58056640625, 1774.9892578125, 1658.13696289062, 1925.32727050781, 2000), 
+    snow      = c(0, 0, 0, 0, 0, 0),
     cond      = c(0, 0, 0, 0, 0, 0), 
-    le_canopy = c(170769.65625, 2040949.625, 3880380.25, 528897.8125, 8732491, -507988.21875), 
-    le_soil   = c(78053.453125, 1034455.5625, 2326407.75, 217370.515625, 4119428, -230766.890625), 
-    dpsi      = c(0, 0, 0, 0, 0, 0), 
-    psi_leaf  = c(0, 0, 0, 0, 0, 0)
-  )
+    le_canopy = c(24608.6328125, 837521.75, 1706020.75, 110637.0078125, 5995345.5, -48291.109375),
+    le_soil   = c(98347.3515625, 1303413.875, 2931274, 273886.84375, 5190479, -290766.28125), 
+    dpsi      = c(0, 0, 0, 0, 0, 0),
+    psi_leaf  = c(0, 0, 0, 0, 0, 0))
   
   # tibble(mod4) |> slice(c(1, 70, 1200, 1400, 2000, 2180)) |> dput()
   ref4 <- tibble(
-    date      = structure(c(13514, 13583, 14714, 14914, 15515, 15695), class = "Date"), 
-    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97), 
-    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846, 0.689359784126282), 
-    gpp       = c(2.4825496673584, 4.29858160018921, 6.37876176834106, 1.16307175159454, 6.1460018157959, 1.46240973472595), 
-    aet       = c(0.100733757019043, 1.24704611301422, 2.51813817024231, 0.303279280662537, 5.29152059555054, -0.29841285943985), 
-    le        = c(249232.671875, 3079834.5, 6214997, 747287.9375, 12863615, -739915.5), 
-    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592, 0.335356384515762, 6.51526165008545, -0.377504140138626), 
-    vcmax     = c(6.10240022069775e-06, 7.75274838815676e-06, 1.19952146633295e-05, 3.3023632113327e-06, 4.0464994526701e-05, 4.28065595770022e-06), 
-    jmax      = c(2.29531615332235e-05, 2.86642443825258e-05, 4.33885979873594e-05, 6.07609081271221e-06, 7.67164674471132e-05, 1.72506606759271e-05), 
-    vcmax25   = c(1.77287929545855e-05, 2.02291139430599e-05, 2.96182388410671e-05, 8.04998035164317e-06, 3.55662923539057e-05, 1.51168824231718e-05), 
-    jmax25    = c(5.07305485371035e-05, 5.73555880691856e-05, 8.36326944408938e-05, 1.08401309262263e-05, 7.12774199200794e-05, 4.33774948760401e-05), 
-    gs_accl   = c(0.127987444400787, 0.0686747059226036, 0.0995644107460976, 0.0210667010396719, 0.0324819944798946, 0.811927676200867), 
-    wscal     = c(0.642368197441101, 0.852013349533081, 0.966963946819305, 0.419518351554871, 0.556477844715118, 1), 
-    chi       = c(0.952207505702972, 0.845774114131927, 0.839214026927948, 0.861443877220154, 0.536405801773071, 0.995586931705475), 
-    iwue      = c(1.86916877282783e-05, 6.03179141762666e-05, 6.17376645095646e-05, 5.3201994887786e-05, 0.000182334129931405, 1.73568002992397e-06), 
-    rd        = c(0.076534204185009, 0.101837269961834, 0.157444804906845, 0.0489852055907249, 0.582775950431824, 0.0540263988077641), 
-    tsoil     = c(8.96044540405273, 11.0349359512329, 11.3815355300903, 15.0929355621338, 19.9768238067627, 9.54089260101318), 
-    netrad    = c(4.16539621353149, 55.9189796447754, 116.783561706543, 12.2599382400513, 192.525726318359, -16.011812210083), 
-    wcont     = c(162.519149780273, 215.559371948242, 244.641876220703, 106.138145446777, 140.78889465332, 253), 
-    snow      = c(0, 0, 0, 0, 0, 0), 
-    cond      = c(0, 0, 0, 0, 0, 0), 
-    le_canopy = c(171179.21875, 2045379, 3888589.5, 529917.4375, 8744187, -509148.625), 
-    le_soil   = c(78053.453125, 1034455.5625, 2326407.75, 217370.515625, 4119428, -230766.890625), 
-    dpsi      = c(0.334371000528336, 1.04337632656097, 1.22221386432648, 0.45578670501709, 1.94676566123962, 0.0780353099107742), 
-    psi_leaf  = c(-0.594782650470734, -1.09586262702942, -1.22868001461029, -1.56316161155701, -2.32053685188293, -0.0780353099107742)
-  )
+    date      = as.Date(c("2007-01-01","2007-03-11","2010-04-15","2010-11-01","2012-06-24","2012-12-21")), 
+    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97),
+    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846, 0.689359784126282),
+    gpp       = c(2.47916746139526, 4.29396057128906, 6.37855243682861, 1.12339150905609, 4.18545007705688, 1.46236681938171),
+    aet       = c(0.108937680721283, 1.35598421096802, 2.76325654983521, 0.32624351978302, 5.73224258422852, -0.3226118683815),
+    le        = c(269530.59375, 3348879.5, 6819973, 803872.375, 13935005, -799917),
+    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592, 0.335356384515762, 6.51526165008545, -0.377504140138626),
+    vcmax     = c(6.111431048339e-06, 7.75509124650853e-06, 1.19958594950731e-05, 3.18529146170476e-06, 4.026747046737e-05, 4.28107478001039e-06),
+    jmax      = c(2.28475473704748e-05, 2.86447157122893e-05, 4.33829118264839e-05, 5.85015914111864e-06, 7.40396353648975e-05, 1.724714456941e-05),
+    vcmax25   = c(1.77550300577423e-05, 2.02352257474558e-05, 2.96198322757846e-05, 7.76460092311027e-06, 3.53926807292737e-05, 1.51183612615569e-05),
+    jmax25    = c(5.0497124902904e-05, 5.73165089008398e-05, 8.36217368487269e-05, 1.04370537883369e-05, 6.87903666403145e-05, 4.33686545875389e-05),
+    gs_accl   = c(0.124305546283722, 0.0675740614533424, 0.0994751155376434, 0.0197544004768133, 0.0170975066721439, 0.811915874481201),
+    wscal     = c(0.627422451972961, 0.828165829181671, 0.963730275630951, 0.414474546909332, 0.442287534475327, 1),
+    chi       = c(0.950858950614929, 0.843430578708649, 0.839075028896332, 0.857280552387238, 0.400212585926056, 0.99558699131012),
+    iwue      = c(1.92191091628047e-05, 6.12344738328829e-05, 6.17910482105799e-05, 5.48005882592406e-05, 0.000235899657127447, 1.73565433669864e-06),
+    rd        = c(0.0766474679112434, 0.101868033409119, 0.157453283667564, 0.0472486354410648, 0.579931199550629, 0.0540316849946976),
+    tsoil     = c(8.95078659057617, 11.0359144210815, 11.3826942443848, 15.0886602401733, 19.9825744628906, 9.5286808013916),
+    netrad    = c(4.16539621353149, 55.9189796447754, 116.783561706543, 12.2599382400513, 192.525726318359, -16.011812210083),
+    wcont     = c(158.737884521484, 209.525955200195, 243.823760986328, 104.862060546875, 111.898742675781, 253),
+    snow      = c(0, 0, 0, 0, 0, 0),
+    cond      = c(0, 0, 0, 0, 0, 0),
+    le_canopy = c(171183.25, 2045465.5, 3888698.75, 529985.5625, 8744526, -509150.75),
+    le_soil   = c(98347.3515625, 1303413.875, 2931274, 273886.84375, 5190479, -290766.28125),
+    dpsi      = c(0.338661968708038, 1.0493232011795, 1.22259771823883, 0.456368923187256, 1.90744316577911, 0.0780341103672981),
+    psi_leaf  = c(-0.624942302703857, -1.11408090591431, -1.22973167896271, -1.60701656341553, -2.70482659339905, -0.0780341103672981))
 
   expect_equal(dplyr::slice(tibble(mod1), c(1, 70, 1200, 1400, 2000, 2180)), ref1, tolerance = 1e-6)
   expect_equal(dplyr::slice(tibble(mod2), c(1, 70, 1200, 1400, 2000, 2180)), ref2, tolerance = 1e-6)
@@ -280,8 +278,8 @@ test_that("runread_pmodel_f()", {
   )
   
   # read in demo data
-  df_drivers <- rsofun::p_model_drivers_format2024_08 # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
-  
+  df_drivers <- rsofun::p_model_drivers_format2025_02 # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
+
   df_output_singlecore <- rsofun::runread_pmodel_f(
     df_drivers,
     par = params_modl, 
@@ -337,7 +335,8 @@ test_that("p-model run check Vcmax25", {
                                   mutate(x,
                                          canopy_height = 5,
                                          reference_height = 10)))
-  
+  for (it in seq_along((df_drivers$forcing))){df_drivers$forcing[[it]]$vwind = 2.0} # TODO: add vwind, TODO: this would need to be changed in rsofun example data
+
   # run the SOFUN Fortran P-model
   mod <- rsofun::run_pmodel_f_bysite( 
     df_drivers$sitename[1],
@@ -393,7 +392,7 @@ test_that("phydro-model run check LE and AET", {
   )
 
   # read in demo data
-  df_drivers <- rsofun::p_model_drivers_format2024_08 # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
+  df_drivers <- rsofun::p_model_drivers_format2025_02 # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
   df_drivers$params_siml[[1]]$use_gs     <- TRUE
 
   # run the SOFUN Fortran PHYDRO-model
diff --git a/tests/testthat/test-quantitative-validation.R b/tests/testthat/test-quantitative-validation.R
index c5908130..5aa0f691 100644
--- a/tests/testthat/test-quantitative-validation.R
+++ b/tests/testthat/test-quantitative-validation.R
@@ -20,11 +20,10 @@ test_that("p-model quantitative check versus observations (FR-Pue)", {
     kc_jmax            = 0.41
   )
   
-  df_drivers <- rsofun::p_model_drivers_format2024_08 # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
-  df_drivers <- df_drivers # |>        
+  df_drivers <- rsofun::p_model_drivers_format2025_02 # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters) # |>        
     # formerly we corrected to 2000mm: tidyr::unnest(site_info) |> mutate(whc = 2000) |>        
     # formerly we corrected to 2000mm: tidyr::nest(site_info = !c(sitename, params_siml, starts_with("forcing")))        
-
+  
   # run the model for these parameters
   res <- rsofun::runread_pmodel_f(
     drivers = df_drivers,
diff --git a/vignettes/pmodel_use_newdata.Rmd b/vignettes/pmodel_use_newdata.Rmd
index 56ea5f2d..ab53face 100644
--- a/vignettes/pmodel_use_newdata.Rmd
+++ b/vignettes/pmodel_use_newdata.Rmd
@@ -273,9 +273,9 @@ params_modl <- list(
 
 # run the model for these parameters
 output <- rsofun::runread_pmodel_f(
-  rsofun::p_model_drivers_format2024_08,
+  rsofun::p_model_drivers_format2025_02,
   par = params_modl
-  )
+  )  
 ```
 
 ### Plotting output
@@ -379,7 +379,7 @@ params_modl$kphio <- pars$par["kphio"]
 
 # Run the model for these parameters
 output_new <- rsofun::runread_pmodel_f(
-  rsofun::p_model_drivers_format2024_08,
+  rsofun::p_model_drivers_format2025_02,
   par = params_modl
   )
 
@@ -441,7 +441,7 @@ Run the model and plot outputs
 ```{r}
 # run the model for these parameters
 output <- rsofun::runread_pmodel_f(
-  mutate(rsofun::p_model_drivers_format2024_08,
+  mutate(rsofun::p_model_drivers_format2025_02,
          params_siml = params_siml |> mutate(use_gs = FALSE) |> list()),
   par = params_modl
 )
@@ -491,7 +491,7 @@ Run the model.
 ```{r}
 # run the model for these parameters
 output <- rsofun::runread_pmodel_f(
-  mutate(rsofun::p_model_drivers_format2024_08,
+  mutate(rsofun::p_model_drivers_format2025_02,
          params_siml = params_siml |> mutate(use_gs = TRUE) |> list()),
   par = params_modl
 )
@@ -543,7 +543,7 @@ Run the model.
 ```{r}
 # run the model for these parameters
 output <- rsofun::runread_pmodel_f(
-  mutate(rsofun::p_model_drivers_format2024_08,
+  mutate(rsofun::p_model_drivers_format2025_02,
          params_siml = params_siml |> mutate(use_gs = TRUE, use_pml = TRUE, use_phydro + FALSE) |> list()),
   par = params_modl
 )
@@ -589,10 +589,10 @@ out_le$gg +
 For P-hydro, we must use the 3-hr daily max forcing as the acclimation forcing. So let's rename it in the data.
 
 ```{r}
-phdro_model_drivers <- rsofun::p_model_drivers_format2024_08 |> 
+phydro_model_drivers <- rsofun::p_model_drivers_format2025_02  |> 
   rename(forcing_acclim = forcing_3hrmax)
-
-phdro_model_drivers$forcing_acclim[[1]] |>
+  
+phydro_model_drivers$forcing_acclim[[1]] |>
     # dplyr::filter(year(date) >= ystart & year(date) <= yend) |>
     dplyr::select(date, co2, ppfd, netrad, temp, vpd, fapar, rain, ccov) |>
     tidyr::pivot_longer(-date) |>
@@ -608,7 +608,7 @@ phdro_model_drivers$forcing_acclim[[1]] |>
     theme_classic() +
     theme(strip.background = element_rect(color = "white", size = 1))+
     facet_wrap(~name, scales = "free")+
-    ggtitle(phdro_model_drivers$sitename[[1]])
+    ggtitle(phydro_model_drivers$sitename[[1]])
 ```
 
 For P-hydro runs, we always set `use_phydro = T` and `use_gs = T`.
@@ -633,7 +633,7 @@ params_modl <- list(
 
 # run the model for these parameters
 output <- rsofun::runread_pmodel_f(
-  mutate(phdro_model_drivers, 
+  mutate(phydro_model_drivers, 
          params_siml = params_siml |> mutate(use_gs = TRUE, use_phydro = TRUE) |> list()),
   par = params_modl
 )
diff --git a/vignettes/sensitivity_analysis.Rmd b/vignettes/sensitivity_analysis.Rmd
index 2158d45b..e873b013 100644
--- a/vignettes/sensitivity_analysis.Rmd
+++ b/vignettes/sensitivity_analysis.Rmd
@@ -3,7 +3,7 @@ title: "Sensitivity analysis and calibration interpretation"
 author: "Josefa Arán"
 output: rmarkdown::html_vignette
 vignette: >
-  %\VignetteIndexEntry{Sensitivity analysis}
+  %\VignetteIndexEntry{Sensitivity analysis and calibration interpretation}
   %\VignetteEngine{knitr::rmarkdown}
   %\usepackage[utf8]{inputenc}
 ---
@@ -61,7 +61,7 @@ ll_pmodel <- function(
   rsofun::cost_likelihood_pmodel(        # reuse likelihood cost function
     as.list(par_v),                      # must be a named list
     obs = rsofun::p_model_validation,    # example data from package
-    drivers = rsofun::p_model_drivers_format2024_08, #TODO rsofun::p_model_drivers is NOT YET UPDATED FOR PHYDRO (a newformat, b add phydro_ parameters)
+    drivers = rsofun::p_model_drivers_format2025_02, #TODO rsofun::p_model_drivers is NOT YET UPDATED FOR PHYDRO (a newformat, b add phydro_ parameters)
     targets = "gpp"
   )
 }
@@ -78,7 +78,6 @@ ll_pmodel(
     rd_to_vcmax        = 0.014,      # value from Atkin et al. 2015 for C3 herbaceous
     tau_acclim         = 30.0,
     kc_jmax            = 0.41,
-    whc                = 430,
     err_gpp            = 0.9         # value from previous simulations
 ))
 ```
@@ -98,7 +97,6 @@ par_cal_best <- c(
     rd_to_vcmax        = 0.014,
     tau_acclim         = 30.0,
     kc_jmax            = 0.41,
-    whc                = 430,
     err_gpp          = 1
   )
 
@@ -112,7 +110,6 @@ par_cal_min <- c(
     rd_to_vcmax        = 0.01,
     tau_acclim         = 7.0,
     kc_jmax            = 0.2,
-    whc                = 300,
     err_gpp            = 0.01
   )
 
@@ -126,7 +123,6 @@ par_cal_max <- c(
     rd_to_vcmax        = 0.1,
     tau_acclim         = 60.0,
     kc_jmax            = 0.8,
-    whc                = 600,
     err_gpp            = 4
   )
 ```
@@ -270,7 +266,7 @@ settings_calib <- list(
 
 # Calibrate kphio-related parameters and err_gpp 
 par_calib <- calib_sofun(
-  drivers = rsofun::p_model_drivers_format2024_08, # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
+  drivers = rsofun::p_model_drivers_format2025_02, # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
   obs = p_model_validation,
   settings = settings_calib,
   par_fixed = list(
@@ -278,8 +274,7 @@ par_calib <- calib_sofun(
     beta_unitcostratio = 146.0,
     rd_to_vcmax        = 0.014,
     tau_acclim         = 30.0,
-    kc_jmax            = 0.41,
-    whc                = 430),
+    kc_jmax            = 0.41),
   targets = "gpp"
 )
 
@@ -310,7 +305,7 @@ settings_calib <- list(
 )
 
 par_calib <- calib_sofun(
-  drivers = rsofun::p_model_drivers_format2024_08, # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
+  drivers = rsofun::p_model_drivers_format2025_02, # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
   obs = p_model_validation,
   settings = settings_calib,
   par_fixed = list(
@@ -318,8 +313,7 @@ par_calib <- calib_sofun(
     kphio_par_b = 20,
     beta_unitcostratio = 146.0,
     rd_to_vcmax        = 0.014,
-    tau_acclim         = 30.0,
-    whc                = 430),
+    tau_acclim         = 30.0),
   targets = "gpp"
 )
 ```
@@ -406,7 +400,7 @@ run_pmodel <- function(sample_par){
   # and also adds the new observation error
   
   out <- runread_pmodel_f(
-    drivers = rsofun::p_model_drivers_format2024_08, # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
+    drivers = rsofun::p_model_drivers_format2025_02, # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
     par =  list(                      # copied from par_fixed above
       kphio = sample_par$kphio,
       kphio_par_a = sample_par$kphio_par_a,
@@ -415,7 +409,6 @@ run_pmodel <- function(sample_par){
       beta_unitcostratio = 146.0,
       rd_to_vcmax        = 0.014,
       tau_acclim         = 30.0,
-      whc                = 430,
       kc_jmax            = 0.41)       # value from posterior
   )
   
@@ -515,7 +508,7 @@ plot_gpp_error +
 # 
 # Plot observed and predicted GPP, with a 95% confidence interval using err_gpp
 plot_gpp_error <- ggplot(data = runread_pmodel_f(
-    drivers = rsofun::p_model_drivers_format2024_08, # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
+    drivers = rsofun::p_model_drivers_format2025_02, # TODO: NOT YET UPDATED FOR PHYDRO (still add default phydro_* parameters)
     par =  list(                       
       kphio = par_calib$par[1],        # values from posterior
       kphio_par_a = par_calib$par[2],
@@ -524,7 +517,6 @@ plot_gpp_error <- ggplot(data = runread_pmodel_f(
       beta_unitcostratio = 146.0,
       rd_to_vcmax        = 0.014,
       tau_acclim         = 30.0,
-      whc                = 430,
       kc_jmax            = 0.41)       
   ) |>
     dplyr::select(sitename, data) |>


Reviews:
user: login: fabern
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-02T22:40:00Z
user: login: fabern
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-02T22:42:43Z

Review comments:
diff_hunk: @@ -141,25 +141,25 @@ test_that("run_pmodel_f_bysite()", {
   #       To do so, simply use the commented code, making use of dput(). Thanks!
   # tibble(mod1) |> slice(c(1, 70, 1200, 1400, 2000, 2180)) |> dput()
   ref1 <- tibble(
-    date      = structure(c(13514, 13583, 14714, 14914, 15515, 15695), class = "Date"), 
-    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97), 
-    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846,0.689359784126282), 
-    gpp       = c(1.65618813037872, 6.02679443359375, 6.72385692596436, 1.84405922889709, 9.40890026092529, 0.896598398685455), 
-    aet       = c(0.977257549762726, 1.5287424325943, 3.31175374984741, 1.61871206760406, 3.53805994987488, 1.13068926334381), 
+    date      = as.Date(c("2007-01-01","2007-03-11","2010-04-15","2010-11-01","2012-06-24","2012-12-21")), 
+    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97),
+    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846, 0.689359784126282),
+    gpp       = c(1.65618813037872, 6.02679443359375, 6.72385692596436, 1.84405922889709, 9.40890026092529, 0.896598398685455),
+    aet       = c(0.977257549762726, 1.5287424325943, 3.31175374984741, 1.61871206760406, 3.53805994987488, 1.13068926334381),
     le        = c(2417903.75, 3775541, 8173714, 3988548.25, 8600976, 2803547.25), 
-    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592, 0.335356384515762, 6.51526165008545, -0.377504140138626), 
-    vcmax     = c(9.54577535594581e-06, 1.18804200610612e-05, 1.91590133908903e-05, 1.37124443426728e-05, 5.95575438637752e-05, 5.93948425375856e-06), 
-    jmax      = c(3.08439557556994e-05, 3.66509229934309e-05, 5.80160958634224e-05, 3.691642996273e-05, 0.000109297579911072, 2.01222374016652e-05), 
-    vcmax25   = c(3.51696653524414e-05, 3.77493124688044e-05, 5.76805359742139e-05, 3.59945297532249e-05, 5.17318439960945e-05, 2.60039796557976e-05), 
-    jmax25    = c(7.8623415902257e-05, 8.34658203530125e-05,0.000126882849144749, 7.2937982622534e-05, 9.94235306279734e-05,5.87244903726969e-05), 
-    gs_accl   = c(0.0016942253569141, 0.00173744710627943,0.00175592955201864, 0.00170137174427509, 0.00156046624761075,0.00193470600061119), 
-    wscal     = c(0.157053604722023, 0.15498948097229, 0.310147076845169, 0.205126166343689, 0.264321148395538, 0.318660259246826), 
-    chi       = c(0.629108071327209, 0.642833471298218, 0.639411568641663,0.66897189617157, 0.674327433109283, 0.673606336116791), 
-    iwue      = c(9.066015627468e-05,8.73051467351615e-05, 8.65905749378726e-05, 7.94415027485229e-05,8.00566194811836e-05, 8.02328504505567e-05), 
-    rd        = c(0.0936944633722305, 0.121099025011063, 0.188513651490211, 0.146433308720589, 0.569870233535767,0.0640662834048271), 
-    tsoil     = c(8.88349437713623, 11.0428524017334,11.4038162231445, 15.0282745361328, 20.0777721405029, 9.41864013671875), 
-    netrad    = c(4.16539621353149, 55.9189796447754, 116.783561706543, 12.2599382400513, 192.525726318359, -16.011812210083), 
-    wcont     = c(314.107208251953, 309.978973388672, 620.294128417969, 410.252319335938, 528.642272949219, 637.320495605469), 
+    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592, 0.335356384515762, 6.51526165008545, -0.377504140138626),
+    vcmax     = c(9.54577535594581e-06, 1.18804200610612e-05, 1.91590133908903e-05, 1.37124443426728e-05, 5.95575438637752e-05, 5.93948425375856e-06),
+    jmax      = c(3.08439557556994e-05, 3.66509229934309e-05, 5.80160958634224e-05, 3.691642996273e-05, 0.000109297579911072, 2.01222374016652e-05),
+    vcmax25   = c(3.51696653524414e-05, 3.77493124688044e-05, 5.76805359742139e-05, 3.59945297532249e-05, 5.17318439960945e-05, 2.60039796557976e-05),
+    jmax25    = c(7.8623415902257e-05, 8.34658203530125e-05, 0.000126882849144749, 7.2937982622534e-05, 9.94235306279734e-05, 5.87244903726969e-05),
+    gs_accl   = c(1.80036209940226e-07, 6.6131934772784e-07, 7.74569343775511e-07, 2.13159879081104e-07, 1.07288553863327e-06, 9.92605464489316e-08),
path: tests/testthat/test-model-runs.R
user: login: fabern
body: Is this large difference in `gs_accl` expected (1.7e-3 to 1.8e-7) from the changes performed?
created_at: 2025-03-02T22:40:00Z
author_association: MEMBER
diff_hunk: @@ -141,25 +141,25 @@ test_that("run_pmodel_f_bysite()", {
   #       To do so, simply use the commented code, making use of dput(). Thanks!
   # tibble(mod1) |> slice(c(1, 70, 1200, 1400, 2000, 2180)) |> dput()
   ref1 <- tibble(
-    date      = structure(c(13514, 13583, 14714, 14914, 15515, 15695), class = "Date"), 
-    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97), 
-    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846,0.689359784126282), 
-    gpp       = c(1.65618813037872, 6.02679443359375, 6.72385692596436, 1.84405922889709, 9.40890026092529, 0.896598398685455), 
-    aet       = c(0.977257549762726, 1.5287424325943, 3.31175374984741, 1.61871206760406, 3.53805994987488, 1.13068926334381), 
+    date      = as.Date(c("2007-01-01","2007-03-11","2010-04-15","2010-11-01","2012-06-24","2012-12-21")), 
+    year_dec  = c(2007, 2007.189, 2010.285, 2010.833, 2012.478, 2012.97),
+    fapar     = c(0.617119550704956, 0.637238144874573, 0.614814937114716, 0.668549001216888, 0.672287464141846, 0.689359784126282),
+    gpp       = c(1.65618813037872, 6.02679443359375, 6.72385692596436, 1.84405922889709, 9.40890026092529, 0.896598398685455),
+    aet       = c(0.977257549762726, 1.5287424325943, 3.31175374984741, 1.61871206760406, 3.53805994987488, 1.13068926334381),
     le        = c(2417903.75, 3775541, 8173714, 3988548.25, 8600976, 2803547.25), 
-    pet       = c(0.103817254304886, 1.45484209060669, 3.08336925506592, 0.335356384515762, 6.51526165008545, -0.377504140138626), 
-    vcmax     = c(9.54577535594581e-06, 1.18804200610612e-05, 1.91590133908903e-05, 1.37124443426728e-05, 5.95575438637752e-05, 5.93948425375856e-06), 
-    jmax      = c(3.08439557556994e-05, 3.66509229934309e-05, 5.80160958634224e-05, 3.691642996273e-05, 0.000109297579911072, 2.01222374016652e-05), 
-    vcmax25   = c(3.51696653524414e-05, 3.77493124688044e-05, 5.76805359742139e-05, 3.59945297532249e-05, 5.17318439960945e-05, 2.60039796557976e-05), 
-    jmax25    = c(7.8623415902257e-05, 8.34658203530125e-05,0.000126882849144749, 7.2937982622534e-05, 9.94235306279734e-05,5.87244903726969e-05), 
-    gs_accl   = c(0.0016942253569141, 0.00173744710627943,0.00175592955201864, 0.00170137174427509, 0.00156046624761075,0.00193470600061119), 
path: tests/testthat/test-model-runs.R
user: login: fabern
body: Is this large difference in `gs_accl` expected (1.7e-3 to 1.8e-7) from the changes performed?
created_at: 2025-03-02T22:42:43Z
author_association: MEMBER

PR comments:
user: login: fabern
created_at: 2025-03-02T22:47:45Z
body: Note that there seems to be still an issue with the `phydro` simulation.

- [x] As mentioned in above comments, `gs_accl` has decreased by 4 magnitudes from 1.7e-3 to 1.8e-7. Is this correct?
- [ ] If these low `gs_accl` values are assumed correct. There is still an issue between the local tests on my machine vs those on CI. The numeric tests pass locally on my machine, but [fail with NA [!] in wscal on CI](https://github.com/geco-bern/rsofun/actions/runs/13619907886/job/38067834359?pr=288#step:6:59):
    ```
     ── Failure ('test-model-runs.R:257:3'): run_pmodel_f_bysite() ──────────────────
    dplyr::slice(tibble(mod4), c(1, 70, 1200, 1400, 2000, 2180)) not equal to `ref4`.
    Component "gpp": Mean relative difference: 2.695639
    Component "aet": Mean relative difference: 0.0001916751
    Component "le": Mean relative difference: 0.0001915846
    Component "vcmax": Mean relative difference: 2.351734
    Component "jmax": Mean relative difference: 3.512928
    Component "vcmax25": Mean relative difference: 1.36744
    Component "jmax25": Mean relative difference: 2.735835
    Component "gs_accl": Mean relative difference: 12.48786
    Component "wscal": 'is.NA' value mismatch: 0 in current 6 in target
    ```
author_association: MEMBER
user: login: stineb
created_at: 2025-03-02T22:59:43Z
body: The change in gs_accl is most likely correct as we have included factors to make units add up. This quantity was not analysed previously. Therefore, please override this test. 
Relatively large differences in numeric tests with this PR are not unexpected. We should focus on the benchmarking in sofunCalVal. Best would be to run a calibration/evaluation with `phydro` and compare outputs. That's essentially what @FrancescoGrossi-unimi has done anyways and he's finding that the model improves with modifications coming with `phydro`.

author_association: COLLABORATOR
user: login: fabern
created_at: 2025-03-03T07:24:49Z
body: Okay, then test for the `gsaccl` will be updated with this PR.

The tests here are complementary to the calibration tests in soFunCalVal.
The more immediate the feedback of tests is, the earlier bugs are spotted. 
So I think there is great value in including these kind of regression tests in CI testing, namely for:
- immediate, human-readable documentation of which commits have changed model output in what way
- spotting memory issues or inconsistent behavior across platforms or model runs (e.g. [this bug in phydro when introducting gw_calib](https://github.com/geco-bern/rsofun/pull/287/commits/22bbdfe47fe07fa0e4ee87357bbd70ffc4aa371c) or [this compiler warning](https://github.com/geco-bern/rsofun/pull/288/commits/381487bce79b4b11dfdf4b9a5941e8bf8cd5bbf8))

The second issue with the NaN on the CI platform is now tracked here: https://github.com/geco-bern/rsofun/issues/289

author_association: MEMBER