User Tools

Site Tools


tutorials:sensitivity-analysis-using-grolink-and-gror

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tutorials:sensitivity-analysis-using-grolink-and-gror [2025/06/06 15:29] – [Parameter File] ttutorials:sensitivity-analysis-using-grolink-and-gror [2025/06/06 17:11] (current) – [Example: Morris Screening using the sensitivity package] t
Line 1: Line 1:
 ====== Sensitivity analysis on GroIMP models using GroR ====== ====== Sensitivity analysis on GroIMP models using GroR ======
-This wiki explains how to do a sensitivity analysis on GroIMP models using the GroR interface using a Morris screening over input parameters of the [[http://134.76.18.36/wordpress/courses-and-tutorials/simplefspm/ | "Example08" FSPM model]] from the gallery as an example.+This wiki explains how to do a sensitivity analysis on GroIMP models using the GroR interface using a Morris screening over input parameters of the [[https://gallery.grogra.de/project_gallery/67053a3f256715cda41c867f | "Example08" FSPM model]] from the gallery as an example.
 ===== Prerequisites ===== ===== Prerequisites =====
 Make sure to [[:tutorials:getting-started-with-grolink-and-gror|set up GroR]]. Play a bit around with it and get a feel for how it works and what the [[https://gitlab.com/grogra/groimp-utils/rapilibrary#grolink|different functions]] do and what they return. The approach presented in the wiki here is just one way you could approach a sensitivity analysis. You will likely find your own approach for your specific model, but GroR will be the space you work in. Make sure to [[:tutorials:getting-started-with-grolink-and-gror|set up GroR]]. Play a bit around with it and get a feel for how it works and what the [[https://gitlab.com/grogra/groimp-utils/rapilibrary#grolink|different functions]] do and what they return. The approach presented in the wiki here is just one way you could approach a sensitivity analysis. You will likely find your own approach for your specific model, but GroR will be the space you work in.
Line 98: Line 98:
 library(sensitivity) library(sensitivity)
  
-wb1 <- GroLink.open("http://localhost:58081/api", path="Example08_prepared.gsz") # copy gsz to groimp path+# copy groimp model gsz to groimp path to open it like this: 
 +wb1 <- GroLink.open("http://localhost:58081/api", path="Example08_prepared.gsz") 
 +push model gsz to groimp from any file location like this: 
 +wb1 <- GroLink.open("http://localhost:58081/api",content = readBin("D:/Example08_prepared.gsz", "raw", 10e6))
  
 </code> </code>
Line 123: Line 126:
 </code> </code>
  
 +When you run the while loop, in the end, the ''model_output'' variable will contain the total amount of absorbed light by all leaves at the growth step when flowers emerged (this will be some float) or 0 in case no flowers emerged.
  
  
Line 153: Line 156:
  
 <code R> <code R>
-executeModel <- function(params, timeout = 200){ +executeModel <- function(params,       # Vector containing values for all model parameters 
-  wb1 <- GroLink.open("http://localhost:58081/api", path="Example08.gsz")+                         timeout = 200 # max. number of grow function executions 
 +                         ){ 
 +  # Open workbench with model 
 +  wb1 <- GroLink.open("http://localhost:58081/api", content readBin("D:/Example08_prepared.gsz", "raw", 10e6)
 +  # Override parameters.rgg with new values from params vector
   WBRef.updateFile(wb1, "param/parameters.rgg",   WBRef.updateFile(wb1, "param/parameters.rgg",
                    paste("static float NormalInternodeLength = ", as.character(params[1]),                    paste("static float NormalInternodeLength = ", as.character(params[1]),
Line 163: Line 170:
                          ";",                          ";",
                          sep = ""))                          sep = ""))
 +  # Compile the workbench
   WBRef.compile(wb1)   WBRef.compile(wb1)
  
   model_output <- ""   model_output <- ""
   n_grows <- 0   n_grows <- 0
 +  # Execute the grow function for as long as there are no flowers
   while (!(is.numeric(model_output)) && (n_grows < timeout)) {   while (!(is.numeric(model_output)) && (n_grows < timeout)) {
     result <- WBRef.runRGGFunction(wb1,"grow")     result <- WBRef.runRGGFunction(wb1,"grow")
Line 176: Line 184:
     n_grows <- n_grows + 1     n_grows <- n_grows + 1
   }   }
 +  # Retrun NA in case of timeout
   if (n_grows == timeout) {   if (n_grows == timeout) {
     model_output <- NA     model_output <- NA
   }   }
 +  # Close workbench in the end
   WBRef.close(wb1)   WBRef.close(wb1)
   return(model_output)   return(model_output)
tutorials/sensitivity-analysis-using-grolink-and-gror.1749216596.txt.gz · Last modified: 2025/06/06 15:29 by t