Box Model from Sarmiento and Gruber "Ocean Biogeochemical Dynamics" page 11
In [2]:
import sys
import os
import copy
import numpy as np
import datetime
from matplotlib import pyplot as plt
BOXSIMU_PATH = '/home/aschi/Documents/MyPrivateRepo/boxsimu_project/'
if not BOXSIMU_PATH in sys.path:
sys.path.append(BOXSIMU_PATH)
from boxsimu.entities import Fluid, Variable
from boxsimu.box import Box
from boxsimu.transport import Flow, Flux
from boxsimu.condition import Condition
from boxsimu.system import BoxModelSystem
from boxsimu.process import Process, Reaction
from boxsimu.solver import Solver
from boxsimu import utils
from boxsimu import ur
def get_system():
#############################
# FLUIDS
#############################
seawater = Fluid('sea water', rho=1020*ur.kg/ur.meter**3)
#############################
# VARIABLES
#############################
po4 = Variable('po4')
#############################
# PROCESSES
#############################
#############################
# REACTIONS
#############################
#############################
# BOXES
#############################
inital_po4_masses = (6e-8*3e19*ur.kg + 6e-8*1e21*ur.kg)/2
upper_ocean = Box(
name='upper_ocean',
name_long='Upper Ocean Box',
fluid=seawater.q(3e19*ur.kg),
processes=[],
condition=Condition(),
variables=[po4.q(inital_po4_masses)],
reactions=[],
)
deep_ocean = Box(
name='deep_ocean',
name_long='Deep Ocean Box',
fluid=seawater.q(1e21*ur.kg),
condition=Condition(),
variables=[po4.q(inital_po4_masses)],
reactions=[],
)
#############################
# FLOWS
#############################
flow_downwelling = Flow(
name='Downwelling',
source_box=upper_ocean,
target_box=deep_ocean,
rate=6e17*ur.kg/ur.year,
tracer_transport=True,
)
flow_upwelling = Flow(
name='Upwelling',
source_box=deep_ocean,
target_box=upper_ocean,
rate=6e17*ur.kg/ur.year,
tracer_transport=True,
)
#############################
# FLUXES
#############################
biological_pump = Flux(
name='Biological Pump',
source_box=upper_ocean,
target_box=deep_ocean,
variable=po4,
rate=lambda t, c: 5.1e-8 * 6e17*ur.kg/ur.year
)
#############################
# SYSTEM
#############################
bmsystem = BoxModelSystem('Box Model from Sarmiento and Gruber "Ocean Biogeochemical Dynamics" page 11',
boxes=[upper_ocean, deep_ocean],
flows=[
flow_downwelling,
flow_upwelling,
],
fluxes=[
biological_pump,
],
global_condition=Condition(),
)
return bmsystem
system = get_system()
solver = Solver(system)
In [27]:
sol = solver.solve(500*ur.year, 25*ur.year)
In [28]:
sol.plot_variable_mass_of_all_boxes(system.variables.po4)
Out[28]:
In [17]:
sol.plot_total_variable_masses()
Out[17]:
In [29]:
sol.plot_variable_concentration_of_all_boxes(system.variables.po4)
Out[29]: