vignettes/03a-Existing_modules.Rmd
03a-Existing_modules.Rmd
downloadModule("caribou2Movements", path = tmpdir)
downloadModule("wolfAlps", path = tmpdir) # ignore warning about file size
# Can open the .Rmd (how to run it) or .R (module code)
file.edit(file.path(tmpdir, "caribou2Movements", "caribou2Movements.Rmd"))
file.edit(file.path(tmpdir, "wolfAlps", "wolfAlps.Rmd"))
?spades
has new section on debugging that complements the above wikiA model (as defined in the SpaDES
world) consists of multiple interacting components (sub-models), which in the vocabulary of SpaDES
we have been referring to as ‘modules’
One could imagine an example model:
And we would give this ensemble of modules a name, like “LCC2005” (or maybe even a better name, but we will go with this)
SpaDES
developers) create problems?moduleRepo/
|_ childModuleA1/
|_ childModuleA2/
|_ childModuleB1/
|_ childModuleB2/
|_ grandparentModule/
|_ parentModuleA/
|_ parentModuleB/
If you restarted your R session, first prepare the global setup again:
library(SpaDES)
# Remember, if you changed it in the previous step, keep it the same. Otherwise it won't find your modules!
setPaths(cachePath = "~/temp_SpaDESws/cache",
inputPath = "~/temp_SpaDESws/inputs",
modulePath = "~/temp_SpaDESws/modules",
outputPath = "~/temp_SpaDESws/outputs")
Then, prepare the simulation:
# setup simulation
times <- list(start = 2005.0, end = 2015.0, timeunit = "year")
parameters <- list(
.globals = list(burnStats = "fireStats"),
fireSpreadLcc = list(drought = 1.2),
caribouMovementLcc = list(N = 1e3, startTime = times$start + 1,
glmInitialTime = NA_real_)
)
modules <- list("LCC2005")
paths <- list(
cachePath = getPaths()$cachePath,
modulePath = getPaths()$modulePath,
inputPath = getPaths()$inputPath,
outputPath = getPaths()$outputPath
)
mySim <- simInit(modules = modules, paths = paths, params = parameters, times = times)
The LCC2005 is a parent module that contains several children (What are they?). Now make a new parent module from several of the LCC2005 modules, but without, say, fire.
allButFire <- unlist(modules(mySim))[-6]
newModule("LCC2005NoFire", children = allButFire)
openModules("LCC2005NoFire", getPaths()$modulePath)
Go ahead and open the LCC2005NoFire.R and check the child modules in the metadata.
There are a few tools that can help visualize the relationships between modules:
The newModule
function creates a module template for you to edit to suit your needs:
newModule('moduleName', file.path('path/to/my/module/directory'),
type = 'parent', children = c('child1', 'child2'))
Alternatively, use the RStudio addin which is simply a GUI wrapper for this function (select ‘parent’ type):
The new CFS-FD model (Forest Dynamics Model)
Has carbon, caribou, vegetation change, harvesting, climate, fire, insects
But the vegetation module is actually a parent module with 3 modules:
fire module is actually 4 modules:
make a child module that does all the stuff you might think of as parent module content, add appropriate data dependencies
(i.e., outputs are required by the other modules as inputs)
SpaDES
function defineModule