utils.forcing.create_periodic_forcing

utils.forcing.create_periodic_forcing(
    periods_powers,
    desired_amplitude=1,
    y0=0,
    duration=None,
)

Build a composite periodic forcing from normalised sine components.

Component amplitudes are rescaled so their summed peak amplitude equals desired_amplitude.

Parameters

periods_powers : sequence of (float, float)

Sequence of (period, power) pairs. Each period must be > 0. power sets the relative weight of that component.

desired_amplitude : float = 1

Peak amplitude of the composite signal. Default 1.

y0 : float = 0

Constant offset. Default 0.

duration : float = None

If given, returns a :class:~climatecritters.core.ForcingElement. If omitted, returns an indefinite :class:~climatecritters.core.Forcing.

Returns

: Forcing or ForcingElement

Examples

import matplotlib.pyplot as plt
from climatecritters.utils.forcing import create_periodic_forcing

# Milankovitch-like: 100 kyr eccentricity + 41 kyr obliquity
orbital = create_periodic_forcing([(100, 0.6), (41, 0.4)], desired_amplitude=25.0)
fig, ax = orbital.plot(t_span=(0, 500))
ax.set_xlabel('time (kyr)'); ax.set_ylabel('forcing (W m⁻²)')
plt.savefig('docs/reference/figures/create_periodic_forcing_example.png',
            dpi=150, bbox_inches='tight')

create_periodic_forcing example output