Denudation
Denudation could be achieved by three ways: modelling physical erosion, modelling chemical dissolution and estimating total denudation rates based on chlorine (Cl) isotope data.
How to use?
In CarboKitten, you could choose which type of the three you would like to attempt. To do this you could simply change the erosion_type
in the input.
Example: in examples, you find caps_miller_diss.jl
, caps_miller_emp.jl
, caps_miller_phys.jl
, for chemical dissolution, empirical denudation or physical denudation, respectively. This file uses the [6] cure as sea level curve input. You could try different erosion types by changing the erosion_type
:
NoDenudation
means no erosion, and is used for debugging only.Dissolution
means chemical dissolution. The default input parameters are: Temperature = 273K, precipitation = 1000mm/yr, atmospheric CO2 partial pressure = 10^(-1.5)* ATM, and reaction rate = 0.002 m/yr.PhysicalErosion
means physical erosion and sediments redistribution. The default parameters is erodability = 0.001 m/yr.EmpericalDenudation
means total denudation calculated based on emperical relationship by Cl isotope observations. The default input parameter is: precipitation = 1000mm/yr.
Tests for three modes of denudation
In this module, 7 tests are implemented.
Tests 1:
@test sum(denudation_mass_LOW_T) < sum(denudation_mass_HIGH_T)
This means that higher temperature would dissolve faster than the colder scenario. It tests the Dissolution mode.
Test2:
@test sum(denudation_mass_LOW_P) < sum(denudation_mass_HIGH_P)
This means more humid scenario has higher denudation rates than the arid scenario. This tests emperical denudation mode.
Test3:
@test sum(denudation_mass_phys) > sum(denudation_mass_phys_flat)
This means more topography has higher denudation rates than the flatter topography. This tests physical erosion.
Test4:
@test sum(denudation_mass_phys) ≈ sum(redistribution_mass)
This means in physical erosion mode, the total amount of eroded material = the total amount of redistributed material. In this case, boundary condition of 'Periodic has been used.
Test 5 to 7 are regression tests: the outputs from the module is similar to the values calculated by calculator.
API
The different denudation models all follow the same API.
module Abstract
using ...BoundaryTrait: Boundary
using ...Boxes: Box
using Unitful
abstract type DenudationType end
"""
denudation(box, param, state)
FIXME Computes the denudation for a single time-step, given denudation parameters `param` and a simulation state `state`. `param` should have a `DenudationType` type and `state` should contain the `height` property and `sealevel`.
"""
function denudation(input)
function (state, water_depth, slope)
return denudation(input.box, input.denudation, water_depth, slope, input.facies,state)
end
end
"""
denudation(box::Box, param::DenudationType, water_depth, slope, facies)
Computes the amount of denudation. This function is called on a pixel by pixel basis, so all arguments can be assumed to be scalar. The `param` argument should be of a subtype of `DenudationType` containing all the input parameters for this specific denudation model.
"""
function denudation(box::Box, param::DenudationType, water_depth, slope, facies, state)
error("Abstract `denudation` function called.")
end
"""
redistribution()
FIXME
"""
function redistribution(input)
function (state, water_depth, denudation_mass)
return redistribution(input.box, input.denudation, denudation_mass, water_depth)
end
end
function redistribution(box::Box, param::DenudationType, denudation_mass, water_depth)
error("Abstract `redistribution` function called.")
end
end # module
No Denudation
"""
module NoDenudation
Doesn't do any denudation: used for testing purposes.
"""
module NoDenudationMod
import ..Abstract: DenudationType, denudation, redistribution
using ...Boxes: Box
using Unitful
struct NoDenudation <: DenudationType end
function denudation(box::Box, p::NoDenudation, water_depth::Any, slope, facies, state)
return nothing
end
function redistribution(box::Box, p::NoDenudation, denudation_mass, water_depth)
return nothing
end
end