Skip to content

Apply first-cell penetrative radiation as a surface flux - #605

Open
simone-silvestri wants to merge 17 commits into
mainfrom
ss/catke-surface-shortwave
Open

simone-silvestri wants to merge 17 commits into
mainfrom
ss/catke-surface-shortwave

Conversation

@simone-silvestri

@simone-silvestri simone-silvestri commented Aug 28, 2026 •

Copy link
Copy Markdown
Member

When using penetrative radiation, we apply it as a forcing rather than a surface flux.
This has a pretty large consequence for CATKE which does not see the stabilizing surface flux and believes that the column is convecting, injecting huge amounts of TKE in the surface layer.

Even with the two-color split and a surface cell 1.5 meter thick, all the red light is roughly absorbed in the first layer, so applying the surface cell forcing as a surface flux recovers ~55% of the stabilizing flux which is then threadded through CATKE to the TKE equation.

EDIT: This PR has been modified to follow the API introduced in CliMA/Oceananigans.jl#6099

@codecov

codecov Bot commented Aug 28, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Base automatically changed from ss/chlorophyll-radiation-absorption to main August 31, 2026 23:10
@glwagner

glwagner commented Sep 1, 2026

Copy link
Copy Markdown
Member

What is the argument for not applying this fix to CATKE ?

Comment thread src/Oceans/radiative_forcing.jl Outdated
Comment on lines +248 to +249
Vertical closures build their surface buoyancy flux from the tracer boundary conditions, so this
part of the shortwave has to arrive there rather than as an interior source. Beer's law is evaluated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure you should mention vertical closures in this docstring

Comment thread src/Oceans/radiative_forcing.jl Resolved
@simone-silvestri

simone-silvestri commented Sep 1, 2026 •

Copy link
Copy Markdown
Member Author

I think a CATKE fix is better. We need to add a radiation handler in Oceananigans and modify the $w_\star$ convective scale to see the radiation. Solar radiation adds to $w_\star$ which slightly increases the convective velocity, the mixing length and the surface bcs of tke as compared to if the solar radiation was all dumped at the surface.

The solution here is a bit of a hack: it only considers part of the radiation as a stabilizing effect (as opposed to main which is completely blind to radiation). The correct formulation discounts the stabilizing effects of solar radiation based on the penetration depth.

Basically, if we assume that the flux profile is linear during convection we have that

$$\overline{w^\prime T^\prime}(z) + J_{sw}(z) = J_T(0)\left(1 + \frac{z}{h}\right)$$

which, after integration in the mixed layer leads to (with an absorption coefficient of $\kappa$)

$$w_\star^3 \sim e^{3/2} \sim J_b h - J_{b, sw}(0) \frac{1 - e^{- \kappa h}}{\kappa}$$

where $J_{b, sw}$ is the (negative, stabilizing) buoyancy flux associated with the impinging solar radiation at the top, which leads to a non-linear equation for $h$ (the mixing length in this case).
This is a small (positive) correction to catke's

$$w_\star^3 \sim e^{3/2} \sim J_b h$$

Also, $w_\star^3$ that enters the tke boundary condition will be slightly higher because of this effect.
It is a bit of a detail compared to just communicating the complete penetrated solar flux as a top flux to catke.

jagoosw added a commit that referenced this pull request Oct 27, 2026
TwoColorRadiation implements the penetrative-radiation interface of Oceananigans (CliMA/Oceananigans.jl#6099), whose functions
live in Oceananigans.Forcings in our Oceananigans: penetrative_radiation, surface_radiative_buoyancy_flux, transmitted_fraction,
transmitted_fraction_derivative and transmitted_thickness. The model constructor finds the radiation in the T forcing
(ocean_simulation hands `(forcing.T, radiative_forcing)`, which `penetrative_radiation` searches; a nested MultipleForcings is
searched too) and hands it to every CATKEVerticalDiffusivity.

The whole shortwave is now absorbed in the interior, as in the PR: `shortwave_radiative_forcing` returns zero and the flux
divergence no longer subtracts the surface cell's share, so the temperature boundary condition no longer carries it. This replaces
the surface_absorbed_fraction routing of 5b981e5, which gave the CATKE the surface share through the boundary condition and
would count that share twice now. Closures that read only the tracer boundary conditions (NEMO TKE) no longer see the shortwave
absorbed in the surface cell; KPP already assumed the boundary condition holds none of it.

test_radiative_forcing.jl is the PR's, importing the interface from Oceananigans.Forcings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Comment thread src/Oceans/radiative_forcing.jl Outdated
Forcings.penetrative_radiation(radiation::TwoColorRadiation) = radiation

@inline function two_color_parameters(R::TwoColorRadiation, i, j)
κ₂ = blue_green_absorption_coefficient(R.second_absorption_coefficient, i, j)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can this use stateindex?

Comment thread src/Oceans/radiative_forcing.jl Outdated
end

@inline function Forcings.transmitted_fraction_derivative(R::TwoColorRadiation, i, j, grid, d)
ϵ₁, κ₁, κ₂ = two_color_parameters(R, i, j)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
ϵ₁, κ₁, κ₂ = two_color_parameters(R, i, j)
ϵ₁, κ₁, κ₂ = two_color_parameters(i, j, R)

same for the rest

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants