From 0c8d8b17d5b5aaae4596b60d9239071011151a64 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 22 May 2025 10:36:22 +0200 Subject: [PATCH 01/16] go for it --- src/SeaIceSimulations.jl | 44 +++++++++++++++++++++++++++----- test/test_ocean_sea_ice_model.jl | 12 +-------- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index 58766da0c..d204bd895 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -20,7 +20,7 @@ using ClimaSeaIce.SeaIceThermodynamics: IceWaterThermalEquilibrium using ClimaOcean.OceanSimulations: Default -function sea_ice_simulation(grid; +function sea_ice_simulation(grid, ocean=nothing; Δt = 5minutes, ice_salinity = 0, # psu advection = nothing, # for the moment @@ -28,8 +28,8 @@ function sea_ice_simulation(grid; ice_heat_capacity = 2100, # J kg⁻¹ K⁻¹ ice_consolidation_thickness = 0.05, # m ice_density = 900, # kg m⁻³ - dynamics = nothing, - bottom_heat_boundary_condition = IceWaterThermalEquilibrium(), + dynamics = default_sea_ice_dynamics(grid, ocean), + bottom_heat_boundary_condition = nothing, phase_transitions = PhaseTransitions(; ice_heat_capacity, ice_density), conductivity = 2, # kg m s⁻³ K⁻¹ internal_heat_flux = ConductiveFlux(; conductivity)) @@ -41,6 +41,15 @@ function sea_ice_simulation(grid; top_surface_temperature = Field{Center, Center, Nothing}(grid) top_heat_boundary_condition = PrescribedTemperature(top_surface_temperature) + if isnothing(bottom_heat_boundary_condition) + if isnothing(ocean) + surface_ocean_salinity = 0 + else + surface_ocean_salinity = view(ocean.model.tracers.S, :, :, size(ocean.model.grid, 3)) + end + bottom_heat_boundary_condition = IceWaterThermalEquilibrium(surface_ocean_salinity) + end + ice_thermodynamics = SlabSeaIceThermodynamics(grid; internal_heat_flux, phase_transitions, @@ -50,16 +59,12 @@ function sea_ice_simulation(grid; bottom_heat_flux = Field{Center, Center, Nothing}(grid) top_heat_flux = Field{Center, Center, Nothing}(grid) - # top_momentum_stress = (u = Field{Face, Center, Nothing}(grid), - # v = Field{Center, Face, Nothing}(grid)) - # Build the sea ice model sea_ice_model = SeaIceModel(grid; ice_salinity, advection, tracers, ice_consolidation_thickness, - # top_momentum_stress, ice_thermodynamics, dynamics, bottom_heat_flux, @@ -73,4 +78,29 @@ function sea_ice_simulation(grid; return sea_ice end +function default_sea_ice_dynamics(grid, ocean=nothing; # Cannot do it without an ocean + sea_ice_ocean_drag_coefficient = 5.5e-3, + rheology = ElastoViscoPlasticRheology(), + solver = SplitExplicitSolver(120)) + + if isnothing(ocean) + SSU = Oceananigans.Fields.ZeroField() + SSV = Oceananigans.Fields.ZeroField() + else + SSU = view(ocean.model.velocities.u, :, :, grid.Nz) + SSV = view(ocean.model.velocities.v, :, :, grid.Nz) + end + + τo = SemiImplicitStress(uₑ=SSU, vₑ=SSV, Cᴰ=sea_ice_ocean_drag_coefficient) + τua = Field{Face, Center, Nothing}(grid) + τva = Field{Center, Face, Nothing}(grid) + + return SeaIceMomentumEquation(grid; + coriolis = ocean.model.coriolis, + top_momentum_stress = (u=τua, v=τva), + bottom_momentum_stress = τo, + rheology, + solver) +end + end \ No newline at end of file diff --git a/test/test_ocean_sea_ice_model.jl b/test/test_ocean_sea_ice_model.jl index 71e9e416d..0d1b044c2 100644 --- a/test/test_ocean_sea_ice_model.jl +++ b/test/test_ocean_sea_ice_model.jl @@ -81,17 +81,7 @@ using ClimaSeaIce.Rheologies ##### Coupled ocean-sea ice and prescribed atmosphere ##### - # Adding a sea ice model to the coupled model - τua = Field{Face, Center, Nothing}(grid) - τva = Field{Center, Face, Nothing}(grid) - - dynamics = SeaIceMomentumEquation(grid; - coriolis = ocean.model.coriolis, - top_momentum_stress = (u=τua, v=τva), - rheology = ElastoViscoPlasticRheology(), - solver = SplitExplicitSolver(120)) - - sea_ice = sea_ice_simulation(grid; dynamics, advection=WENO(order=7)) + sea_ice = sea_ice_simulation(grid, ocean; advection=WENO(order=7)) liquidus = sea_ice.model.ice_thermodynamics.phase_transitions.liquidus # Set the ocean temperature and salinity From 0f04d0fdf55645472485b73dea9e3fa1f3fc78f8 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 22 May 2025 10:37:32 +0200 Subject: [PATCH 02/16] Update src/SeaIceSimulations.jl --- src/SeaIceSimulations.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index d204bd895..9e1234716 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -103,4 +103,4 @@ function default_sea_ice_dynamics(grid, ocean=nothing; # Cannot do it without an solver) end -end \ No newline at end of file +end From e28b9a4b429b880b043b7bd0194c9be9b16b9aed Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 22 May 2025 11:35:25 +0200 Subject: [PATCH 03/16] Update SeaIceSimulations.jl --- src/SeaIceSimulations.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index 9e1234716..47cdf32cc 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -78,7 +78,7 @@ function sea_ice_simulation(grid, ocean=nothing; return sea_ice end -function default_sea_ice_dynamics(grid, ocean=nothing; # Cannot do it without an ocean +function default_sea_ice_dynamics(grid, ocean=nothing; sea_ice_ocean_drag_coefficient = 5.5e-3, rheology = ElastoViscoPlasticRheology(), solver = SplitExplicitSolver(120)) From 9999f90bf756eb67943f65a1fff7432173b542e6 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 22 May 2025 12:07:47 +0200 Subject: [PATCH 04/16] ice strenght --- src/SeaIceSimulations.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index 47cdf32cc..fe3210350 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -80,7 +80,7 @@ end function default_sea_ice_dynamics(grid, ocean=nothing; sea_ice_ocean_drag_coefficient = 5.5e-3, - rheology = ElastoViscoPlasticRheology(), + rheology = ElastoViscoPlasticRheology(pressure_formulation = IceStrength()), solver = SplitExplicitSolver(120)) if isnothing(ocean) From 2c5a98baa61c6a8c53838dbccf18b6fac31248a6 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 22 May 2025 12:12:07 +0200 Subject: [PATCH 05/16] some.. salinity --- src/SeaIceSimulations.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index fe3210350..f4ed151fa 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -22,7 +22,7 @@ using ClimaOcean.OceanSimulations: Default function sea_ice_simulation(grid, ocean=nothing; Δt = 5minutes, - ice_salinity = 0, # psu + ice_salinity = 4, # psu advection = nothing, # for the moment tracers = (), ice_heat_capacity = 2100, # J kg⁻¹ K⁻¹ From 8d28b6bc2bab6166472341c8e3e8aa52f2b091a6 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 22 May 2025 12:29:01 +0200 Subject: [PATCH 06/16] Update SeaIceSimulations.jl --- src/SeaIceSimulations.jl | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index f4ed151fa..b788b30ba 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -28,7 +28,7 @@ function sea_ice_simulation(grid, ocean=nothing; ice_heat_capacity = 2100, # J kg⁻¹ K⁻¹ ice_consolidation_thickness = 0.05, # m ice_density = 900, # kg m⁻³ - dynamics = default_sea_ice_dynamics(grid, ocean), + dynamics = sea_ice_dynamics(grid, ocean), bottom_heat_boundary_condition = nothing, phase_transitions = PhaseTransitions(; ice_heat_capacity, ice_density), conductivity = 2, # kg m s⁻³ K⁻¹ @@ -78,17 +78,19 @@ function sea_ice_simulation(grid, ocean=nothing; return sea_ice end -function default_sea_ice_dynamics(grid, ocean=nothing; - sea_ice_ocean_drag_coefficient = 5.5e-3, - rheology = ElastoViscoPlasticRheology(pressure_formulation = IceStrength()), - solver = SplitExplicitSolver(120)) +function sea_ice_dynamics(grid, ocean=nothing; + sea_ice_ocean_drag_coefficient = 5.5e-3, + rheology = ElastoViscoPlasticRheology(pressure_formulation = IceStrength()), + solver = SplitExplicitSolver(120)) if isnothing(ocean) SSU = Oceananigans.Fields.ZeroField() SSV = Oceananigans.Fields.ZeroField() + coriolis = nothing else SSU = view(ocean.model.velocities.u, :, :, grid.Nz) SSV = view(ocean.model.velocities.v, :, :, grid.Nz) + coriolis = ocean.model.coriolis end τo = SemiImplicitStress(uₑ=SSU, vₑ=SSV, Cᴰ=sea_ice_ocean_drag_coefficient) @@ -96,7 +98,7 @@ function default_sea_ice_dynamics(grid, ocean=nothing; τva = Field{Center, Face, Nothing}(grid) return SeaIceMomentumEquation(grid; - coriolis = ocean.model.coriolis, + coriolis, top_momentum_stress = (u=τua, v=τva), bottom_momentum_stress = τo, rheology, From 9c0ea6082b40b441ea3c9a1da67ee074fbfc1bdd Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 22 May 2025 14:41:02 +0200 Subject: [PATCH 07/16] Update SeaIceSimulations.jl --- src/SeaIceSimulations.jl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index b788b30ba..729de8772 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -81,16 +81,18 @@ end function sea_ice_dynamics(grid, ocean=nothing; sea_ice_ocean_drag_coefficient = 5.5e-3, rheology = ElastoViscoPlasticRheology(pressure_formulation = IceStrength()), + coriolis = nothing, solver = SplitExplicitSolver(120)) if isnothing(ocean) SSU = Oceananigans.Fields.ZeroField() SSV = Oceananigans.Fields.ZeroField() - coriolis = nothing else SSU = view(ocean.model.velocities.u, :, :, grid.Nz) SSV = view(ocean.model.velocities.v, :, :, grid.Nz) - coriolis = ocean.model.coriolis + if isnothing(coriolis) + coriolis = ocean.model.coriolis + end end τo = SemiImplicitStress(uₑ=SSU, vₑ=SSV, Cᴰ=sea_ice_ocean_drag_coefficient) From ffae48e0fcb9ed6ad0dc3c54274fdb8a02d5c6ec Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 22 May 2025 20:07:37 +0200 Subject: [PATCH 08/16] some changes --- experiments/arctic_simulation.jl | 2 +- .../InterfaceComputations/sea_ice_ocean_fluxes.jl | 2 +- test/test_ocean_sea_ice_model.jl | 2 +- test/test_surface_fluxes.jl | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/experiments/arctic_simulation.jl b/experiments/arctic_simulation.jl index 31e8e3f0b..f93ad70a4 100644 --- a/experiments/arctic_simulation.jl +++ b/experiments/arctic_simulation.jl @@ -59,7 +59,7 @@ set!(ocean.model, T=Metadatum(:temperature; dataset), ##### A Prognostic Sea-ice model ##### -using ClimaSeaIce.SeaIceMomentumEquations +using ClimaSeaIce.SeaIceDynamics using ClimaSeaIce.Rheologies # Remember to pass the SSS as a bottom bc to the sea ice! diff --git a/src/OceanSeaIceModels/InterfaceComputations/sea_ice_ocean_fluxes.jl b/src/OceanSeaIceModels/InterfaceComputations/sea_ice_ocean_fluxes.jl index 29d00eee6..0aad0985d 100644 --- a/src/OceanSeaIceModels/InterfaceComputations/sea_ice_ocean_fluxes.jl +++ b/src/OceanSeaIceModels/InterfaceComputations/sea_ice_ocean_fluxes.jl @@ -1,6 +1,6 @@ using Oceananigans.Operators: Δzᶜᶜᶜ using ClimaSeaIce.SeaIceThermodynamics: melting_temperature -using ClimaSeaIce.SeaIceMomentumEquations: x_momentum_stress, y_momentum_stress +using ClimaSeaIce.SeaIceDynamics: x_momentum_stress, y_momentum_stress function compute_sea_ice_ocean_fluxes!(coupled_model) ocean = coupled_model.ocean diff --git a/test/test_ocean_sea_ice_model.jl b/test/test_ocean_sea_ice_model.jl index 0d1b044c2..6d8edcdbc 100644 --- a/test/test_ocean_sea_ice_model.jl +++ b/test/test_ocean_sea_ice_model.jl @@ -4,7 +4,7 @@ using CUDA using Oceananigans.OrthogonalSphericalShellGrids using ClimaOcean.OceanSeaIceModels: above_freezing_ocean_temperature! using ClimaSeaIce.SeaIceThermodynamics: melting_temperature -using ClimaSeaIce.SeaIceMomentumEquations +using ClimaSeaIce.SeaIceDynamics using ClimaSeaIce.Rheologies @inline kernel_melting_temperature(i, j, k, grid, liquidus, S) = @inbounds melting_temperature(liquidus, S[i, j, k]) diff --git a/test/test_surface_fluxes.jl b/test/test_surface_fluxes.jl index e594b5138..7f0c32670 100644 --- a/test/test_surface_fluxes.jl +++ b/test/test_surface_fluxes.jl @@ -18,7 +18,7 @@ using Oceananigans.TimeSteppers: update_state! using Oceananigans.Units: hours, days using ClimaOcean.DataWrangling: all_dates -using ClimaSeaIce.SeaIceMomentumEquations +using ClimaSeaIce.SeaIceDynamics using ClimaSeaIce.Rheologies import ClimaOcean.OceanSeaIceModels.InterfaceComputations: surface_specific_humidity From 9e5302af9dd97af9f4c5e1a8af82a9ae90bac54d Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Fri, 23 May 2025 11:39:29 +0200 Subject: [PATCH 09/16] ugly workaround --- src/SeaIceSimulations.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index 729de8772..eea2fdd4d 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -45,7 +45,8 @@ function sea_ice_simulation(grid, ocean=nothing; if isnothing(ocean) surface_ocean_salinity = 0 else - surface_ocean_salinity = view(ocean.model.tracers.S, :, :, size(ocean.model.grid, 3)) + kᴺ = size(grid, 3) + surface_ocean_salinity = interior(ocean.model.tracers.S, :, :, kᴺ:kᴺ) end bottom_heat_boundary_condition = IceWaterThermalEquilibrium(surface_ocean_salinity) end From fff2492944719565b4c3bd8320a7d7eb50930dc2 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Fri, 23 May 2025 11:40:01 +0200 Subject: [PATCH 10/16] fix drag --- src/SeaIceSimulations.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index eea2fdd4d..6e2164bad 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -96,6 +96,8 @@ function sea_ice_dynamics(grid, ocean=nothing; end end + sea_ice_ocean_drag_coefficient = convert(eltype(grid), sea_ice_ocean_drag_coefficient) + τo = SemiImplicitStress(uₑ=SSU, vₑ=SSV, Cᴰ=sea_ice_ocean_drag_coefficient) τua = Field{Face, Center, Nothing}(grid) τva = Field{Center, Face, Nothing}(grid) From c779a08df93a68e67db3090088c2a7c1211548bb Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Fri, 23 May 2025 13:57:29 +0200 Subject: [PATCH 11/16] import --- src/SeaIceSimulations.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index 6e2164bad..09bea2428 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -17,6 +17,8 @@ using Oceananigans.Operators using ClimaSeaIce using ClimaSeaIce: SeaIceModel, SlabSeaIceThermodynamics, PhaseTransitions, ConductiveFlux using ClimaSeaIce.SeaIceThermodynamics: IceWaterThermalEquilibrium +using ClimaSeaIce.SeaIceDynamics +using ClimaSeaIce.SeaIceDynamics: IceStrength, SplitExplicitSolver using ClimaOcean.OceanSimulations: Default From 64f15ac379e026e7d6d4f2dfcbcf3e578855f84f Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Fri, 23 May 2025 14:25:24 +0200 Subject: [PATCH 12/16] correction --- src/SeaIceSimulations.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index 09bea2428..da5fd6c75 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -17,8 +17,8 @@ using Oceananigans.Operators using ClimaSeaIce using ClimaSeaIce: SeaIceModel, SlabSeaIceThermodynamics, PhaseTransitions, ConductiveFlux using ClimaSeaIce.SeaIceThermodynamics: IceWaterThermalEquilibrium -using ClimaSeaIce.SeaIceDynamics -using ClimaSeaIce.SeaIceDynamics: IceStrength, SplitExplicitSolver +using ClimaSeaIce.SeaIceDynamics: SplitExplicitSolver +using ClimaSeaIce.Rheologies: IceStrength, ElastoViscoPlasticRheology using ClimaOcean.OceanSimulations: Default From 672dccdcb2f6c47dd661a09f92fb6415494c5204 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Fri, 23 May 2025 14:40:47 +0200 Subject: [PATCH 13/16] bugfix --- src/SeaIceSimulations.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index da5fd6c75..b4dd0200f 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -17,7 +17,7 @@ using Oceananigans.Operators using ClimaSeaIce using ClimaSeaIce: SeaIceModel, SlabSeaIceThermodynamics, PhaseTransitions, ConductiveFlux using ClimaSeaIce.SeaIceThermodynamics: IceWaterThermalEquilibrium -using ClimaSeaIce.SeaIceDynamics: SplitExplicitSolver +using ClimaSeaIce.SeaIceDynamics: SplitExplicitSolver, SemiImplicitStress using ClimaSeaIce.Rheologies: IceStrength, ElastoViscoPlasticRheology using ClimaOcean.OceanSimulations: Default From 82b3ff277dd8f894297c1e37e2ed99919b356257 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Fri, 23 May 2025 14:54:28 +0200 Subject: [PATCH 14/16] another one, probably we should export them? --- src/SeaIceSimulations.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index b4dd0200f..b432a5643 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -17,7 +17,7 @@ using Oceananigans.Operators using ClimaSeaIce using ClimaSeaIce: SeaIceModel, SlabSeaIceThermodynamics, PhaseTransitions, ConductiveFlux using ClimaSeaIce.SeaIceThermodynamics: IceWaterThermalEquilibrium -using ClimaSeaIce.SeaIceDynamics: SplitExplicitSolver, SemiImplicitStress +using ClimaSeaIce.SeaIceDynamics: SplitExplicitSolver, SemiImplicitStress, SeaIceMomentumEquation using ClimaSeaIce.Rheologies: IceStrength, ElastoViscoPlasticRheology using ClimaOcean.OceanSimulations: Default From 53f5058f8e3287c8b28406efe3b169d83ea640e0 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Fri, 23 May 2025 17:54:44 +0200 Subject: [PATCH 15/16] update with free drift --- src/SeaIceSimulations.jl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/SeaIceSimulations.jl b/src/SeaIceSimulations.jl index b432a5643..08f3de9e0 100644 --- a/src/SeaIceSimulations.jl +++ b/src/SeaIceSimulations.jl @@ -17,7 +17,7 @@ using Oceananigans.Operators using ClimaSeaIce using ClimaSeaIce: SeaIceModel, SlabSeaIceThermodynamics, PhaseTransitions, ConductiveFlux using ClimaSeaIce.SeaIceThermodynamics: IceWaterThermalEquilibrium -using ClimaSeaIce.SeaIceDynamics: SplitExplicitSolver, SemiImplicitStress, SeaIceMomentumEquation +using ClimaSeaIce.SeaIceDynamics: SplitExplicitSolver, SemiImplicitStress, SeaIceMomentumEquation, StressBalanceFreeDrift using ClimaSeaIce.Rheologies: IceStrength, ElastoViscoPlasticRheology using ClimaOcean.OceanSimulations: Default @@ -85,6 +85,7 @@ function sea_ice_dynamics(grid, ocean=nothing; sea_ice_ocean_drag_coefficient = 5.5e-3, rheology = ElastoViscoPlasticRheology(pressure_formulation = IceStrength()), coriolis = nothing, + free_drift = nothing, solver = SplitExplicitSolver(120)) if isnothing(ocean) @@ -104,6 +105,10 @@ function sea_ice_dynamics(grid, ocean=nothing; τua = Field{Face, Center, Nothing}(grid) τva = Field{Center, Face, Nothing}(grid) + if isnothing(free_drift) + free_drift = StressBalanceFreeDrift((u=τua, v=τva), τo) + end + return SeaIceMomentumEquation(grid; coriolis, top_momentum_stress = (u=τua, v=τva), From df16d5e8d1508e18682d3f2e70c0c9fa0ec850d0 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Fri, 30 May 2025 18:04:57 +0200 Subject: [PATCH 16/16] update ClimaSeaIce --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 1b3eff927..975dc0724 100644 --- a/Project.toml +++ b/Project.toml @@ -44,7 +44,7 @@ ClimaOceanReactantExt = "Reactant" Adapt = "4" CFTime = "0.1, 0.2" CUDA = "4, 5" -ClimaSeaIce = "0.2.6" +ClimaSeaIce = "0.3" CondaPkg = "0.2.28" CubicSplines = "0.2" DataDeps = "0.7"