ENSORechargeOscillator
ENSORechargeOscillator(
var_name='enso_recharge_oscillator',
mu=0.7,
en=0.0,
c=1.0,
r=0.25,
alpha=0.125,
b0=2.5,
gamma=0.75,
state_variables=None,
diagnostic_variables=None,
*args,
**kwargs,
)Jin-style ENSO recharge oscillator.
Couples the eastern Pacific SST anomaly T to the thermocline depth anomaly h via a nonlinear recharge-discharge mechanism:
dT/dt = R*T + gamma*h - en*(h + b*T)^3
dh/dt = -r*h - alpha*b*T
where b = b0*mu and R = gamma*b - c.
Seasonal or any other external forcing is added through the standard :meth:~climatecritters.core.CCModel.register_forcing interface::
from climatecritters.utils.forcing import create_sinusoid_forcing
model = ENSORechargeOscillator()
model.register_forcing(
'T',
create_sinusoid_forcing(A=0.5, period=6.0),
attachment_style='additive',
timing='pre',
)
Parameters
var_name : str = 'enso_recharge_oscillator'-
Label for the model output. Default
'enso_recharge_oscillator'. mu : float or callable orcc.Forcing= 0.7-
Bjerknes coupling coefficient. Default 0.7.
en : float or callable orcc.Forcing= 0.0-
Nonlinear damping coefficient. Default 0.0 (linear limit).
c : float or callable orcc.Forcing= 1.0-
Newtonian cooling rate of SST. Default 1.0.
r : float or callable orcc.Forcing= 0.25-
Thermocline recharge damping rate. Default 0.25.
alpha : float or callable orcc.Forcing= 0.125-
Wind-stress feedback strength. Default 0.125.
b0 : float or callable orcc.Forcing= 2.5-
Background thermocline slope sensitivity. Default 2.5.
gamma : float or callable orcc.Forcing= 0.75-
Thermocline feedback onto SST. Default 0.75.
Notes
State vector: [T, h] — eastern Pacific SST anomaly and thermocline depth anomaly.
References
Jin, F.-F. (1997). An equatorial ocean recharge paradigm for ENSO. J. Atmos. Sci., 54, 811–829.
Examples
import matplotlib.pyplot as plt
import climatecritters as cc
from climatecritters.model_critters.enso_recharge import ENSORechargeOscillator
from climatecritters.utils.forcing import create_sinusoid_forcing
model = ENSORechargeOscillator(mu=0.75)
model.register_forcing(
'T',
create_sinusoid_forcing(A=0.5, period=6.0),
attachment_style='additive',
timing='pre',
)
output = model.integrate(t_span=(0, 120), y0=[0.5, 0.0], method='RK45')
ts = output.to_pyleo(var_names=['T'])
ts.plot()
plt.savefig('docs/reference/figures/ENSORechargeOscillator_example.png',
dpi=150, bbox_inches='tight')