Add temperature/snow-dependent sea ice albedo#163
Open
simone-silvestri wants to merge 15 commits intomainfrom
Open
Add temperature/snow-dependent sea ice albedo#163simone-silvestri wants to merge 15 commits intomainfrom
simone-silvestri wants to merge 15 commits intomainfrom
Conversation
3 tasks
- Bathymetry: minor fix in regrid_bathymetry - DataWrangling: inpainting and restoring improvements - Diagnostics: MLD minor update - EarthSystemModels: simplify time stepping, minor earth_system_model cleanup - InterfaceComputations: minor refactors in sea_ice_ocean fluxes and heat flux formulations Note: Ocean simulation refactoring (flux_and_restoring, Oceans.jl, ocean_simulation.jl) and Diagnostics (interface_fluxes) are handled in PR #155 and #158.
15695f0 to
d99b2b6
Compare
- Bathymetry: minor fix in regrid_bathymetry - DataWrangling: inpainting and restoring improvements - Diagnostics: interface flux diagnostics and MLD updates - Oceans: refactor ocean simulation, extract flux_and_restoring - EarthSystemModels: simplify time stepping, minor earth_system_model cleanup - InterfaceComputations: minor refactors in sea_ice_ocean fluxes and heat flux formulations
New type SeaIceAlbedo implementing the CCSM3 albedo parameterization (Briegleb et al. 2004): - Broadband albedos: bare ice 0.54, snow-covered 0.83 - Temperature-dependent reduction near melting (implicit melt ponds) - Thin-ice transition to ocean albedo below 0.5 m - Snow cover blending (full snow albedo at hs > 0.02 m) - Handles nothing snow_thickness gracefully Also evaluates state-dependent albedo to scalar via stateindex at the top of the atmosphere-sea ice flux kernel, fixing a potential struct-in-arithmetic bug when the albedo is not a plain number. Changes to atmosphere_sea_ice_fluxes.jl: - Evaluate radiation properties (α, ϵ) via stateindex before iteration - Pass local_interface_properties with scalar values to compute_interface_state - Add hs (snow thickness) to local_interior_state - Rename h → hi for ice thickness in interior state References: - Briegleb et al. (2004): NCAR Tech Note - Briegleb & Light (2007): NCAR/TN-472+STR
5ebaa5e to
c1345d7
Compare
- Add Adapt.adapt_structure for InterfaceProperties so that SeaIceAlbedo Fields are properly adapted for GPU kernels - Fix get_snow_thickness call to pass grid argument Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
simone-silvestri
added a commit
that referenced
this pull request
Apr 15, 2026
Strip out changes that belong to other PRs or branches: - FluxAndRestoring struct and plumbing (separate PR) - Bottom drag rework (drag_bulk_velocity, Uᴮ) - Barotropic potential toggle, clock kwarg, materialize_buoyancy_gradients - TKE advection change, meridional heat transport deletion - Bathymetry minimum depth, inpainting NaN fill, restoring extract_field_time_series - Sea ice albedo (CCSM3 scheme) and Adapt for InterfaceProperties (PR #163) - ocean_surface_salinity/temperature view change Keep only snow model integration: snow thermodynamics, snowfall routing, IceSnowConductiveFlux flux balance, hs in exchanger and interior state. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Strip out changes that belong to other PRs: FluxAndRestoring, bottom drag rework, barotropic potential toggle, meridional heat transport deletion, bathymetry/inpainting/restoring changes, NCAR bulk flux includes/exports, snow-specific h→hi rename and hs additions. Keep only sea ice albedo: SeaIceAlbedo struct, stateindex evaluation in atmosphere-sea-ice kernel, Adapt for InterfaceProperties, export/include. Add test_sea_ice_albedo.jl covering: constructor, cold/melting ice, thin ice→ocean transition, snow cover blending, nothing snow thickness, Adapt.adapt_structure for both SeaIceAlbedo and InterfaceProperties. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
Removed comments about albedo struct evaluation.
Added comment to clarify the purpose of the variable zᵃᵗ.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add a state-dependent sea ice albedo parameterization following the CCSM3 scheme
(Briegleb et al. 2004; Briegleb & Light 2007), replacing the default constant albedo.
The
SeaIceAlbedostruct stores references to sea ice model fields and is evaluatedpointwise via
stateindexinside the atmosphere--sea-ice flux kernel.Also adds
Adapt.adapt_structureforInterfacePropertiesso that nested structscontaining GPU field references (like
SeaIceAlbedo) are properly adapted whenpassed to GPU kernels.
Algorithm
The broadband albedo is computed in four steps:
1. Temperature-dependent melt reduction
Near the melting point, albedo is reduced to represent implicit melt-pond formation:
where
αi_cold = 0.54,αs_cold = 0.83,Δαi = 0.075,Δαs = 0.10, andΔT = 1 K.2. Thin-ice transition to ocean albedo
For ice thinner than
h_min = 0.5 m, the bare-ice albedo blends toward ocean albedoαo = 0.06:3. Snow cover blending
Snow depth interpolates between bare-ice and snow albedo, reaching full snow cover at
hs_min = 0.02 m:4. Final albedo
Default parameters
αi_coldαs_coldΔαiΔαsTmΔTαoh_minhs_minChanges
sea_ice_albedo.jl—SeaIceAlbedostruct, constructor,stateindex,Adapt.adapt_structureInterfaceComputations.jl— exportSeaIceAlbedo, includesea_ice_albedo.jlinterface_states.jl—Adapt.adapt_structureforInterfacePropertiesatmosphere_sea_ice_fluxes.jl— evaluate radiation properties viastateindexbefore the similarity-theory iteration; passlocal_interface_propertieswith scalar albedo/emissivityReferences
Scientific description of the sea ice component in CCSM3. NCAR Tech Note NCAR/TN-463+STR.
Tests
test/test_sea_ice_albedo.jl— 8 test sets:Adapt.adapt_structureforSeaIceAlbedoandInterfaceProperties