read.sa.output() now reads only the runs in sa.run.ids, so each site of a multisite sensitivity analysis gets its own results. Previously every site read the last site's runs from the shared runs_manifest.csv.run.sensitivity.analysis() skips traits with no spread in their SA samples, with a warning. Previously one such trait stopped the analysis for every PFT.runs_manifest.csv now has a column ens_num to distinguish ensemble members without reparsing run IDs.run.sensitivity.analysis() no longer converts traits in Celsius (e.g. psnTOpt) to K before evaluating their splines, which are fit in Celsius. Their sensitivity, elasticity and variance were wrong in earlier versions, and so were the partial variances of the other traits in the PFT. CV and elasticity are still computed in K.input.ens.gen() handling of parent ids (#3783):
parent_ids now accepts integer vectors even if not wrapped in a list.bad_parent_action chooses how to handle parent ids that do not match an input path:
default "error" to stop with an error, "resample" to replace invalid indices from the input paths that do exist.settings$modeloutdir rather than assuming an out/ folder inside settings$outdir (@Akash-paluvai, #3722).generate_OAT_SA_design() for creating input design matrices for
sensitivity analysis. This function ensures non-parameter inputs
(met, IC, soil) are held constant, which is required for valid
variance decomposition in one-at-a-time (OAT) sensitivity analysis (#3729)get.parameter.samples() now consistently accepts PFTs with no outdir specified. These previously failed when no database connection was available.plot_variance_decomposition().plot_variance_decomposition() gains argument order_by, sorting highest variance to the top by default. To reproduce old behavior, use order_by = "none".PEcAn.uncertainty is now distributed under the BSD 3-clause license instead of the NCSA Open Source license.
input_design matrix, generated via new funtion generate_joint_ensemble_design(), keeps parameter draws and sampled inputs aligned across run.write.configs(), write.ensemble.configs(), and write.sa.configs(). (@blesson-07, #3535, #3677).compute_sobol_indices for use in global sensitivity analyses (@blesson-07, #3612).write.ensemble.configs gains new mandatory arguments input_design and ensemble.size, and removes argument samples. Note that input_design and ensemble.size are added to the beginning of the argument list, so calls passing defaults unnamed as the first arg will break (#3612, #3634).input.ens.gen gains new mandatory argument ensemble_size, added between the existing settings and input args.write.ensemble.configs and write.sa.configs now generate an ensemble id if one is not provided in a DB-free run (#3654). Runs with DB continue to always generate a new id. Note that multi-site runs with no id provided will now get a separate ensemble ID (and thus generate separate analyses) for each site.runModule.run.sensitivity.analysis does not yet work with multisite settings. This will be fixed in a future release.get.ensemble.samples has changed from "uniform" to "random" (#3535).write.ensemble.configs now respects argument write.to.db when settings$database$bety$write is NULL
(but if settings$database$bety$write is set, it still overrides write.to.db).pfts argument to run.sensitivity.analysis() so that sensitivity analysis and variance decomposition can be run on a subset of PFTs defined in settings if desired (#3155).NEWS.md file to track changes to the package.