The sweep_dyn
function is designed to allow the user to
map the combined effects of two parameters over the dynamic response of
an isobxr box model,
typically in a system at steady state suddenly facing a
perturbation.
It’s structure is shown below:
The sweep_dyn
function is built as a 2 steps composite
scenario.
The main purpose of this sweep_dyn
structure is:
In addition to the global isobxr master file, the
sweep_dyn
function requires a sweep dyn master
file.
The sweep dyn master file is the (xlsx) document containing
all commands allowing sweep_dyn
function to compose a
scenario of 2 runs.
The two parameters to be swept over run #1 and #2 are defined by user directly in the function input, in the R console.
The format of the sweep dyn master file is the same as the compose master file and the sweep steady master file.
It is where the user sets the design of their 2 runs scenario to be swept:
The format of the sweep dyn master file is standardized. The user is encouraged to comply with these standards, as described thereafter, otherwise there is a high probability for these functions to crash.
sweep_dyn
function inputs: [e.g.,
0_SWEEP_DYN_MASTER.xlsx ].sweep_dyn
function.The sweep dyn master file contains the 5 following sheet strictly named as follows:
The sweep_dyn
function strictly requires a list of
2 successive runs.
Both of these runs should be succesively described one by one on two rows of this sheet, with notably:
See composite master file format description for details.
See composite master file format description for details.
See composite master file format description for details.
See composite master file format description for details.
The user needs to define the two runs composing the 2 steps scenario.
ana_slvr
).sweep_dyn
function will here numerically solve the run #2 (num_slvr
).
A. In the case of a balanced system for run #2, the
sweep_dyn
function will analytically solve the run #2
(ana_slvr
). A. The user should here be aware that the
sweeping of the space of parameters using either the
num_slvr
or ana_slvr
can be time consuming and
require a fair bit of calculating power.sweep_dyn
function sweeps both initial
run #1 and run #2 is that the user might want to sweep parameters that
are actually affecting the steady state of the system (e.g., sweep a
series of lists of fluxes or coefficients).
In addition to all the usual input parameters required for the
sweep_dyn
function, the user has to define the two
parameters to be swept.
There are 6 types of sweepable parameters (or that can be explored), which names are strictly defined as follows:
#> [1] "EXPLO_n_FLUX_MATRICES"
#> [1] "EXPLO_n_ALPHA_MATRICES"
#> [1] "EXPLO_1_SIZE"
#> [1] "EXPLO_1_DELTA"
#> [1] "EXPLO_1_ALPHA"
#> [1] "EXPLO_1_RAYLEIGH_ALPHA"
This type of parameter allows to explore two series of flux lists as defined in isobxr master file, one for run #1 and one for run #2.
data.frame(VALUES_1 = c("flux_list_1", # RUN #1 vector of n strings of chars.
"...",
"flux_list_i",
"...",
"flux_list_n"),
VALUES_2 = c("flux_list_1", # RUN #2 vector of n strings of chars.
"...",
"flux_list_i",
"...",
"flux_list_n"),
EXPLO_TYPES = "EXPLO_n_FLUX_MATRICES") # stricly leave as such
The EXPLO_n_FLUX_MATRICES parameter will allow the
sweep_dyn
function to sweep the effect of two series of
flux lists (defining flux matrices and initial box sizes) on run #1 and
run #2 evolutions.
The format of this data frame should be exactly as shown above.
The values are two vectors of strings of characters containing the list of flux list names, that will be called from the isobxr master file.
This type of parameter allows to explore two series of lists of coefficients as defined in isobxr master file, one for run #1 and one for run #2.
data.frame(VALUES_1 = c("coeff_list_1", # RUN #1 vector of n strings of chars.
"...",
"coeff_list_i",
"...",
"coeff_list_n"),
VALUES_2 = c("coeff_list_1", # RUN #2 vector of n strings of chars.
"...",
"coeff_list_i",
"...",
"coeff_list_n"),
EXPLO_TYPES = "EXPLO_n_ALPHA_MATRICES") # stricly leave as such
The EXPLO_n_ALPHA_MATRICES parameter will allow the
sweep_dyn
function to sweep the effect of two series of
isotope fractionation coefficient lists (defining coefficient matrices)
on run #1 and run #2 evolutions.
The format of this data frame should be exactly as shown above.
The values are two vectors of strings of characters containing the list of coefficients list names, that will be called from the isobxr master file.
This type of parameter allows to explore a range of sizes for a given box over both run #1 and run #2.
This parameter should be used only in the case where RUN #1 is balanced since it sets the initial box size for each run initial condition.
data.frame(BOXES_ID = "BOX_i", # 1 string of char
SIZE_MIN = "min_sweep_value", # 1 numerical value
SIZE_MAX = "max_sweep_value", # 1 numerical value
SIZE_STEPS = "sweep_steps", # 1 numerical value
EXPLO_TYPES = "EXPLO_1_SIZE") # stricly leave as such
The EXPLO_1_SIZE parameter will allow the
sweep_dyn
function to sweep the effect of a range of box
sizes for a given box on run #1 and #2 evolution.
The format of this data frame should be exactly as shown above.
This type of parameter allows to explore a range of delta values for a given box over both run #1 and run #2.
This parameter should be used only for source boxes, since it will force the initial isotope composition of this box for both run #1 and run #2.
data.frame(BOXES_ID = "BOX_i", # 1 string of char
DELTA_MIN = "min_sweep_value", # 1 numerical value
DELTA_MAX = "max_sweep_value", # 1 numerical value
DELTA_STEPS = "sweep_steps", # 1 numerical value
EXPLO_TYPES = "EXPLO_1_DELTA") # stricly leave as such
This type of parameter allows to explore a range of alpha (coeff) values for a given flux over both run #1 and run #2.
data.frame(FROM = "BOX_i", # 1 string of char
TO = "BOX_j", # 1 string of char
ALPHA_MIN = "min_sweep_value", # 1 numerical value
ALPHA_MAX = "max_sweep_value", # 1 numerical value
ALPHA_STEPS = "sweep_steps", # 1 numerical value
EXPLO_TYPES = "EXPLO_1_ALPHA") # stricly leave as such
This type of parameter allows to explore a range of incremental alpha values for a Rayleigh distillation model for both run #1 and run #2. It is calculated for each run using the run’s local flux configuration.
data.frame(XFROM = "Box_B", # B>C flux at numerator (strings of char)
XTO = "Box_C",
YFROM = "Box_A", # A>B flux at denominator (strings of char)
YTO = "Box_B",
AFROM = "Box_B", # resulting fract. coefficient (strings of char)
ATO = "Box_C",
ALPHA_0_MIN = "min_sweep_value", # value of incremental B>A coeff. (num.)
ALPHA_0_MAX = "max_sweep_value",
ALPHA_0_STEPS = "sweep_steps",
EXPLO_TYPES = "EXPLO_1_RAYLEIGH_ALPHA") # stricly leave as such
By default, the sweep_dyn
prints in the R session a
series of default time evolution plots of the delta values of each
system finite boxes in the 2D space of parameters.
All sweep_dyn
output data is stored in a temporary
directory by default.
The user can save these outputs to their working directory by changing the save_run_outputs argument to TRUE.
The sweep_dyn
outputs are structured as follows:
By default, the sweep_dyn
prints in the R session a
series of default heatmap plots of the delta values of each system
finite boxes at the final state of the run in the 2D space of
parameters.
The outputs of the sweep_dyn
can be plotted using the
shinobxr_app
function.
The shinobxr_app
function launches an interactive html
app allowing to edit and export graphical representation of the model
runs.
The shinobxr_app
requires the user to save the
sweep_dyn
output files to a local working directory (by
setting the argument save_run_outputs = TRUE).
More on the use of the shinobxr_app
function can be
found on the Shiny
app page.
Dynamic sweeping of the size of box B and one fractionation coefficient in a 3-boxes balanced open system after a change in the source isotope composition.
Both run #1 and run #2 are performed with the a1 coefficients list, the Fx3_ABC_open_bal flux list and the sweeping parameters.
The system faces a perturbation: the source isotope composition is shifted from 0 to -1 ‰ using the FORCING_DELTA sheet of the sweeping dynamic master file.
Here:
No forcings other than the FORCING_DELTA on the SOURCE box are applied.
To do so, the sweep_dyn
function can be used as
follows:
sweep_dyn(workdir = "/Users/username/Documents/1_ABC_tutorial",
# name of the series ID
SERIES_ID = "ABC_change_source_sweep_dyn_demo1",
# in/out time units for pdf plots
time_units = c("d", "yr"),
# name of sweep dyn master file
EXPLO_MASTER = "0_SWEEP_DYN_MASTER.xlsx",
# make alpha A to C vary between 0.9988 and 1
EXPLO_AXIS_1 = data.frame(FROM = c("A"),
TO = c("C"),
ALPHA_MIN = 0.9988,
ALPHA_MAX = 1,
ALPHA_STEPS = 0.0004,
EXPLO_TYPES = "EXPLO_1_ALPHA"),
# make size of B vary between 500 and 4000
EXPLO_AXIS_2 = data.frame(BOXES_ID = c("B"),
SIZE_MIN = 500,
SIZE_MAX = 4000,
SIZE_STEPS = 500,
EXPLO_TYPES = "EXPLO_1_SIZE"),
to_DYN_DIGEST_CSVs = TRUE)
The sweep_dyn
will prompt a question to user checking if
the number of iterative runs is validated. The higher this number is the
longer the run is.
This run will produce a series of time evolution plots of the delta values of each system finite boxes in the 2D space of parameters.
It will yield for example the following plot for the box C.
You can explore the outputs by then using the isobxr Shiny app
(shinobxr_app
function, presented below).