Dear Julians,
I would like to present AIBECS.jl.
I am making this announcement in the hopes to get people to try the AIBECS. Better would be to get some Julian-expert feedback… And even better would be some direct contributions! (issues and PRs welcome of course!)
In short, the AIBECS (for Algebraic Implicit Biogeochemical Elemental Cycling System) allows you to create and run simulations of marine tracers in a just a few lines of code. An AIBECS user just needs to
- supply functions to specify the local sources and sinks
- chose one of the available (steady-state) ocean circulations
- optionally: define a vertical transport if one of the tracers sinks towards the ocean floor (e.g., particulate organic matter)
The AIBECS is still work in progress but it has usable documentation and associated Jupyter notebooks (thanks to Documenter.jl and Literate.jl), so I encourage you to try those if you feel like you want to run a quick marine tracer simulation, as you do.
The AIBECS uses a number of cool packages, including
- Unitful.jl and UnitfulAstro.jl for, well, units
- DataDeps.jl for downloading data dependencies, e.g., the grid and arrays for the available ocean circulations, which are stored using BSON.jl and
my OceanGrids.jl . - DualNumbers.jl and HyperdualNumbers.jl, as well as my DualMatrixTools and HyperDualMatrixTools packages for solving dual- and hyperdual-valued linear systems (and sparse ones)
- DataFrames.jl, Flatten.jl and FieldMetadata.jl for model parameters
- DiffEqBase.jl for the
SteadyStateProblem
type andsolve
function.
The AIBECS uses its own root-finding quasi-Newton iterative solver (basically translated to Julia from C.T.Kelley’s MATLAB nsold.m
code with a few AIBECS-taylored additions), which maybe could make its way to NLSolvers or DifferentialEquaiton (or something else) at some point.
I’ll stop here for the announcement because I don’t want this to be too long, but I hope it piqued your interest, especially if you’re into oceanography!
Of course if you are not into oceanography but you have ideas of how to improve things like the API or the performance, that would be amazing, too! So please don’t hesitate to tell me how wrong my code is
Cheers!