New functionality, improved documentation, and a few breaking changes (hopefully for the better) to the API.
Major new functionality includes **convective adjustment to the moist adiabat**, and **moist EBMs with diffusion on moist static energy gradients**.
- ``climlab.convection.ConvectiveAdjustement`` now allows non-constant critical lapse rates, stored in input parameter ``adj_lapse_rate``.
- New switches to implement automatic adjustment to **dry** and **moist** adiabats (pseudoadiabat)
- ``climlab.EBM()`` and its daughter classes are significantly reorganized to better respect CLIMLAB principles:
- Essentially all the computations are done by subprocesses
- SW radiation is now handled by ``climlab.radiation.SimpleAbsorbedShortwave`` class
- Diffusion and its diagnostics now handled by ``climlab.dynamics.MeridionalHeatDiffusion`` class.
- Diffusivity can be altered at any time by the user, e.g. during timestepping
- Diffusivity input value ``K`` in class ``climlab.dynamics.MeridionalDiffusion`` is now specified in physical units of m2/s instead of (1/s). This is consistent with its parent class ``climlab.dynamics.Diffusion``.
- A new class ``climlab.dynamics.MeridionalMoistDiffusion`` for the moist EBM (diffusion down moist static energy gradient)
- Tests that require compiled code are now marked with ``pytest.mark.compiled`` for easy exclusion during local development
Under-the-hood changes include
- Internal changes to the timestepping; the ``compute()`` method of every subprocess is now called explicitly.
- ``Process.compute()`` now always returns tendency dictionaries