// Deterministic native workloads used for local performance measurement.
///|
fn print_npzd_benchmark() -> Unit {
let model = @models.create_npzd_model(15.0, 0.5, 0.1, 0.2)
let env_fn = fn(t) { @types.EnvironmentForcing::seasonal_forcing(t, 45.0) }
match @solver.solve_rk4(model, 30.0, 0.25, env_fn) {
Ok(trajectory) => {
let series = trajectory.get_time_series("P").unwrap()
let summary = @analysis.summarize_series(
trajectory.get_timestamps(),
series,
).unwrap()
let final_value = series[series.length() - 1]
println(
"npzd,rk4," +
trajectory.length().to_string() +
"," +
final_value.to_string() +
"," +
summary.integral.to_string(),
)
}
Err(err) => println("ERROR,npzd,rk4," + err)
}
}
///|
fn print_coupled_benchmark() -> Unit {
let model = @models.create_coupled_carbon_npzd_model(
12.0, 0.8, 0.2, 0.1, 240.0, 2100.0, 2300.0,
)
let env_fn = fn(t) { @types.EnvironmentForcing::seasonal_forcing(t, 45.0) }
let config = @solver.AdaptiveSolverConfig::default()
match @solver.solve_rk45(model, 20.0, 0.25, config, env_fn) {
Ok(trajectory) => {
let series = trajectory.get_time_series("DIC").unwrap()
let summary = @analysis.summarize_series(
trajectory.get_timestamps(),
series,
).unwrap()
let final_value = series[series.length() - 1]
println(
"coupled_carbon,rk45," +
trajectory.length().to_string() +
"," +
final_value.to_string() +
"," +
summary.integral.to_string(),
)
}
Err(err) => println("ERROR,coupled_carbon,rk45," + err)
}
}
///|
fn main {
println("workload,solver,steps,final_metric,integral_metric")
print_npzd_benchmark()
print_coupled_benchmark()
}