Implement a generalized column thermodynamics model#141
Draft
glwagner wants to merge 6 commits into
Draft
Conversation
Member
Author
|
Here is a pdf with notes about this model: |
Member
Author
|
@simone-silvestri this PR implements a multilayer sea ice model, following the paradigm proposed in the above PDF. The idea is to solve an energy equation of a particular form that admits a tridiagonal solve for the energy transport. The formulation is general, still, so that existing sea ice models may be implemented into it. The goal here is to show that we can reproduce a few different column implementations. |
Collaborator
|
Nice! Tomorrow I will go through it! |
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
Adds column-energy sea-ice thermodynamics with the fixed-salinity Bitz-Lipscomb BL99 reproduction path, evolving-salinity mushy-column configuration, and CICE/Icepack single-column validation evidence.
This PR now includes:
ColumnEnergyThermodynamicsfield containers, presets, checkpoint helpers, Oceananigans integration, and a focusedcolumn_energytest group.FixedDrainedIceSalinityProfile,FixedSalinityBrinePocketEnergyRelation,MaykutUntersteinerConductivity, andBubblyBrineConductivity.MeltingConstrainedSurfaceFluxBalanceandOceanFreezingTemperatureBoundary.MutableVerticalDiscretizationpath that advances energy and prognostic salinity with the moving vertical Jacobian and explicit swept-face enthalpy/salinity fluxes.Moving Coordinate / Changing Thickness
Changing ice thickness is handled with the conservative moving-coordinate balance on Oceananigans' mutable vertical grid. With reference coordinate
r, physical coordinatez(r, t), and vertical JacobianJ = partial z / partial r, the implemented energy and salinity equations areThe finite-volume energy update is
The assembled tridiagonal solve divides this balance by the current layer thickness, so the right-hand side contains the previous-to-current metric ratio plus the explicit swept-face tracer integral. The salinity step uses the same moving-Jacobian/swept-face structure when bulk salinity is prognostic.
For strict CICE/Icepack BL99 agreement, the validation also applies Icepack's split
thickness_changesenthalpy repartitioning for top ablation and basal congelation. The continuous moving-metric replay is still reported as a diagnostic because CICE does not implement growth and ablation as a single continuous moving-grid diffusion solve.CICE/Icepack BL99 Validation
The validation directory runs and analyzes no-snow one-column CICE histories for:
Each case is run with both
conduct = 'MU71'andconduct = 'bubbly', for eight histories total.The aggregate CSV is
All eight histories now have
strict_bl99_validation_status = pass. The strict gate uses the source-level BL99 temperature matrix, source-level prognostic-thickness replay, CICE-thickness temperature acceptance, CICE-negative-enthalpy error, and column-energy error. The general ClimaSeaIce split solve and moving-metric CICE-thickness replays are retained as diagnostics; the general path still does not fully reproduce forced top ablation without the source-level Icepack split repartitioning sequence.Aggregate one-figure summary:
Dynamic thickness-changing visualization for the default
basal_growth / MU71case:Movie output:
Example Results
The literated example still compares fixed-salinity BL-style and evolving-salinity mushy-column configurations. For the 12-day one-meter comparison with identical forcing and initial profiles:
For the melting-limited surface-flux case:
Validation Commands
Ran locally:
TEST_GROUP=column_energy JULIA_DEPOT_PATH=/private/tmp/julia_depot:/Users/gregorywagner/.julia /Users/gregorywagner/.julia/juliaup/julia-1.11.9+0.aarch64.apple.darwin14/bin/julia --project=. test/runtests.jlvalidation/cice_bitz_lipscomb/analyze_cice_comparison.jl.strict_bl99_validation_status = pass.JULIA_DEPOT_PATH=/private/tmp/julia_depot:/Users/gregorywagner/.julia /Users/gregorywagner/.julia/juliaup/julia-1.11.9+0.aarch64.apple.darwin14/bin/julia --project=docs validation/cice_bitz_lipscomb/plot_cice_single_column_validation.jlvalidation/cice_bitz_lipscomb/results/cice_single_column_validation.png.JULIA_DEPOT_PATH=/private/tmp/julia_depot:/Users/gregorywagner/.julia /Users/gregorywagner/.julia/juliaup/julia-1.11.9+0.aarch64.apple.darwin14/bin/julia --project=. validation/cice_bitz_lipscomb/visualize_cice_column_dynamics.jlvalidation/cice_bitz_lipscomb/results/basal_growth_MU71_column_dynamics.pngandvalidation/cice_bitz_lipscomb/results/basal_growth_MU71_column_dynamics.mp4.JULIA_DEPOT_PATH=/private/tmp/julia_depot:/Users/gregorywagner/.julia /Users/gregorywagner/.julia/juliaup/julia-1.11.9+0.aarch64.apple.darwin14/bin/julia --project=. -e 'using ClimaSeaIce; @assert MeltingConstrainedSurfaceFluxBalance === MeltingConstrainedFluxBalance; @assert OceanFreezingTemperatureBoundary(; salinity=34).salinity == 34'bash -n validation/cice_bitz_lipscomb/run_cice_cases.shgit diff --checkDocs were not rebuilt with
docs/make.jlafter the latest visualization-doc edit because that script deploys documentation as part of its normal flow.