Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand All @@ -47,7 +47,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand All @@ -72,7 +72,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand All @@ -97,7 +97,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand All @@ -122,7 +122,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand All @@ -147,7 +147,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand All @@ -172,7 +172,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand All @@ -197,7 +197,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand All @@ -222,7 +222,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand All @@ -247,7 +247,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand All @@ -272,7 +272,7 @@ jobs:
fail-fast: false
matrix:
version:
- '1.10'
- '1.12'
os:
- ubuntu-latest
arch:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- uses: actions/checkout@v3
- uses: julia-actions/setup-julia@v2
with:
version: '1.10'
version: '1.12'
- name: Install dependencies
run: julia --color=yes --project -e 'using Pkg; Pkg.instantiate()'
- name: Build and deploy
Expand Down
4 changes: 2 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "Oceanostics"
uuid = "d0ccf422-c8fb-49b5-a76d-74acdde946ac"
version = "0.16.5"
authors = ["tomchor <[email protected]>"]
version = "0.16.4"

[deps]
DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
Expand All @@ -11,7 +11,7 @@ SeawaterPolynomials = "d496a93d-167e-4197-9f49-d3af4ff8fe40"

[compat]
DocStringExtensions = "0.9"
Oceananigans = "^0.100.3"
Oceananigans = "0.101"
SeawaterPolynomials = "0.3"
julia = "1.9"

Expand Down
46 changes: 23 additions & 23 deletions src/KineticEnergyEquation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,11 @@ KineticEnergy(model; kwargs...) = KineticEnergy(model, model.velocities...; kwar
velocities,
tracers,
auxiliary_fields,
diffusivity_fields,
closure_fields,
pHY′,
clock,
forcings)
common_args = (buoyancy, background_fields, velocities, tracers, auxiliary_fields, diffusivity_fields, pHY′, clock)
common_args = (buoyancy, background_fields, velocities, tracers, auxiliary_fields, closure_fields, pHY′, clock)
u∂ₜu = ℑxᶜᵃᵃ(i, j, k, grid, ψf, velocities.u, u_velocity_tendency, advection, coriolis, stokes_drift, closure, u_immersed_bc, common_args..., forcings.u)
v∂ₜv = ℑyᵃᶜᵃ(i, j, k, grid, ψf, velocities.v, v_velocity_tendency, advection, coriolis, stokes_drift, closure, v_immersed_bc, common_args..., forcings.v)
w∂ₜw = ℑzᵃᵃᶜ(i, j, k, grid, ψf, velocities.w, w_velocity_tendency, advection, coriolis, stokes_drift, closure, w_immersed_bc, common_args..., forcings.w)
Expand Down Expand Up @@ -138,7 +138,7 @@ function KineticEnergyTendency(model::NonhydrostaticModel; location = (Center, C
model.velocities,
model.tracers,
model.auxiliary_fields,
model.diffusivity_fields,
model.closure_fields,
model.pressures.pHY′,
model.clock,
model.forcing,)
Expand Down Expand Up @@ -191,14 +191,14 @@ end

#+++ KineticEnergyStress
@inline function uᵢ∂ⱼ_τᵢⱼᶜᶜᶜ(i, j, k, grid, closure,
diffusivity_fields,
closure_fields,
clock,
model_fields,
buoyancy)

u∂ⱼ_τ₁ⱼ = ℑxᶜᵃᵃ(i, j, k, grid, ψf, model_fields.u, ∂ⱼ_τ₁ⱼ, closure, diffusivity_fields, clock, model_fields, buoyancy)
v∂ⱼ_τ₂ⱼ = ℑyᵃᶜᵃ(i, j, k, grid, ψf, model_fields.v, ∂ⱼ_τ₂ⱼ, closure, diffusivity_fields, clock, model_fields, buoyancy)
w∂ⱼ_τ₃ⱼ = ℑzᵃᵃᶜ(i, j, k, grid, ψf, model_fields.w, ∂ⱼ_τ₃ⱼ, closure, diffusivity_fields, clock, model_fields, buoyancy)
u∂ⱼ_τ₁ⱼ = ℑxᶜᵃᵃ(i, j, k, grid, ψf, model_fields.u, ∂ⱼ_τ₁ⱼ, closure, closure_fields, clock, model_fields, buoyancy)
v∂ⱼ_τ₂ⱼ = ℑyᵃᶜᵃ(i, j, k, grid, ψf, model_fields.v, ∂ⱼ_τ₂ⱼ, closure, closure_fields, clock, model_fields, buoyancy)
w∂ⱼ_τ₃ⱼ = ℑzᵃᵃᶜ(i, j, k, grid, ψf, model_fields.w, ∂ⱼ_τ₃ⱼ, closure, closure_fields, clock, model_fields, buoyancy)

return u∂ⱼ_τ₁ⱼ+ v∂ⱼ_τ₂ⱼ + w∂ⱼ_τ₃ⱼ
end
Expand Down Expand Up @@ -240,7 +240,7 @@ function KineticEnergyStress(model; location = (Center, Center, Center))
model_fields = (; model_fields..., w=ZeroField())
end
dependencies = (model.closure,
model.diffusivity_fields,
model.closure_fields,
model.clock,
fields(model),
model.buoyancy)
Expand Down Expand Up @@ -434,18 +434,18 @@ Axᶠᶜᶠ_δwᶠᶜᶠ_F₃₁ᶠᶜᶠ(i, j, k, grid, closure, K_fields, clo,
Ayᶜᶠᶠ_δwᶜᶠᶠ_F₃₂ᶜᶠᶠ(i, j, k, grid, closure, K_fields, clo, fields, b) = -Ayᶜᶠᶠ(i, j, k, grid) * δyᵃᶠᵃ(i, j, k, grid, fields.w) * viscous_flux_wy(i, j, k, grid, closure, K_fields, clo, fields, b)
Azᶜᶜᶜ_δwᶜᶜᶜ_F₃₃ᶜᶜᶜ(i, j, k, grid, closure, K_fields, clo, fields, b) = -Azᶜᶜᶜ(i, j, k, grid) * δzᵃᵃᶜ(i, j, k, grid, fields.w) * viscous_flux_wz(i, j, k, grid, closure, K_fields, clo, fields, b)

@inline viscous_dissipation_rate_ccc(i, j, k, grid, diffusivity_fields, fields, p) =
(Axᶜᶜᶜ_δuᶜᶜᶜ_F₁₁ᶜᶜᶜ(i, j, k, grid, p.closure, diffusivity_fields, p.clock, fields, p.buoyancy) + # C, C, C
ℑxyᶜᶜᵃ(i, j, k, grid, Ayᶠᶠᶜ_δuᶠᶠᶜ_F₁₂ᶠᶠᶜ, p.closure, diffusivity_fields, p.clock, fields, p.buoyancy) + # F, F, C → C, C, C
ℑxzᶜᵃᶜ(i, j, k, grid, Azᶠᶜᶠ_δuᶠᶜᶠ_F₁₃ᶠᶜᶠ, p.closure, diffusivity_fields, p.clock, fields, p.buoyancy) + # F, C, F → C, C, C
@inline viscous_dissipation_rate_ccc(i, j, k, grid, closure_fields, fields, p) =
(Axᶜᶜᶜ_δuᶜᶜᶜ_F₁₁ᶜᶜᶜ(i, j, k, grid, p.closure, closure_fields, p.clock, fields, p.buoyancy) + # C, C, C
ℑxyᶜᶜᵃ(i, j, k, grid, Ayᶠᶠᶜ_δuᶠᶠᶜ_F₁₂ᶠᶠᶜ, p.closure, closure_fields, p.clock, fields, p.buoyancy) + # F, F, C → C, C, C
ℑxzᶜᵃᶜ(i, j, k, grid, Azᶠᶜᶠ_δuᶠᶜᶠ_F₁₃ᶠᶜᶠ, p.closure, closure_fields, p.clock, fields, p.buoyancy) + # F, C, F → C, C, C

ℑxyᶜᶜᵃ(i, j, k, grid, Axᶠᶠᶜ_δvᶠᶠᶜ_F₂₁ᶠᶠᶜ, p.closure, diffusivity_fields, p.clock, fields, p.buoyancy) + # F, F, C → C, C, C
Ayᶜᶜᶜ_δvᶜᶜᶜ_F₂₂ᶜᶜᶜ(i, j, k, grid, p.closure, diffusivity_fields, p.clock, fields, p.buoyancy) + # C, C, C
ℑyzᵃᶜᶜ(i, j, k, grid, Azᶜᶠᶠ_δvᶜᶠᶠ_F₂₃ᶜᶠᶠ, p.closure, diffusivity_fields, p.clock, fields, p.buoyancy) + # C, F, F → C, C, C
ℑxyᶜᶜᵃ(i, j, k, grid, Axᶠᶠᶜ_δvᶠᶠᶜ_F₂₁ᶠᶠᶜ, p.closure, closure_fields, p.clock, fields, p.buoyancy) + # F, F, C → C, C, C
Ayᶜᶜᶜ_δvᶜᶜᶜ_F₂₂ᶜᶜᶜ(i, j, k, grid, p.closure, closure_fields, p.clock, fields, p.buoyancy) + # C, C, C
ℑyzᵃᶜᶜ(i, j, k, grid, Azᶜᶠᶠ_δvᶜᶠᶠ_F₂₃ᶜᶠᶠ, p.closure, closure_fields, p.clock, fields, p.buoyancy) + # C, F, F → C, C, C

ℑxzᶜᵃᶜ(i, j, k, grid, Axᶠᶜᶠ_δwᶠᶜᶠ_F₃₁ᶠᶜᶠ, p.closure, diffusivity_fields, p.clock, fields, p.buoyancy) + # F, C, F → C, C, C
ℑyzᵃᶜᶜ(i, j, k, grid, Ayᶜᶠᶠ_δwᶜᶠᶠ_F₃₂ᶜᶠᶠ, p.closure, diffusivity_fields, p.clock, fields, p.buoyancy) + # C, F, F → C, C, C
Azᶜᶜᶜ_δwᶜᶜᶜ_F₃₃ᶜᶜᶜ(i, j, k, grid, p.closure, diffusivity_fields, p.clock, fields, p.buoyancy) # C, C, C
ℑxzᶜᵃᶜ(i, j, k, grid, Axᶠᶜᶠ_δwᶠᶜᶠ_F₃₁ᶠᶜᶠ, p.closure, closure_fields, p.clock, fields, p.buoyancy) + # F, C, F → C, C, C
ℑyzᵃᶜᶜ(i, j, k, grid, Ayᶜᶠᶠ_δwᶜᶠᶠ_F₃₂ᶜᶠᶠ, p.closure, closure_fields, p.clock, fields, p.buoyancy) + # C, F, F → C, C, C
Azᶜᶜᶜ_δwᶜᶜᶜ_F₃₃ᶜᶜᶜ(i, j, k, grid, p.closure, closure_fields, p.clock, fields, p.buoyancy) # C, C, C
) / Vᶜᶜᶜ(i, j, k, grid) # This division by volume, coupled with the call to A*δuᵢ above, ensures a derivative operation

const KineticEnergyDissipationRate = CustomKFO{<:typeof(viscous_dissipation_rate_ccc)}
Expand Down Expand Up @@ -484,7 +484,7 @@ function DissipationRate(model; U=ZeroField(), V=ZeroField(), W=ZeroField(),
model.buoyancy)

return KernelFunctionOperation{Center, Center, Center}(viscous_dissipation_rate_ccc, model.grid,
model.diffusivity_fields, model_fields, parameters)
model.closure_fields, model_fields, parameters)
end
#---

Expand All @@ -499,7 +499,7 @@ end
Σˣᶻ² = ℑxzᶜᵃᶜ(i, j, k, grid, fψ_plus_gφ², ∂zᶠᶜᶠ, u, ∂xᶠᶜᶠ, w) / 4
Σʸᶻ² = ℑyzᵃᶜᶜ(i, j, k, grid, fψ_plus_gφ², ∂zᶜᶠᶠ, v, ∂yᶜᶠᶠ, w) / 4

ν = _νᶜᶜᶜ(i, j, k, grid, p.closure, p.diffusivity_fields, p.clock)
ν = _νᶜᶜᶜ(i, j, k, grid, p.closure, p.closure_fields, p.clock, p.model_fields)

return 2ν * (Σˣˣ² + Σʸʸ² + Σᶻᶻ² + 2 * (Σˣʸ² + Σˣᶻ² + Σʸᶻ²))
end
Expand Down Expand Up @@ -531,17 +531,17 @@ KernelFunctionOperation at (Center, Center, Center)
└── arguments: ("Field", "Field", "Field", "NamedTuple")
```
"""
function KineticEnergyIsotropicDissipationRate(u, v, w, closure, diffusivity_fields, clock; location = (Center, Center, Center))
function KineticEnergyIsotropicDissipationRate(u, v, w, closure, closure_fields, model_fields, clock; location = (Center, Center, Center))
validate_location(location, "KineticEnergyIsotropicDissipationRate")
validate_dissipative_closure(closure)

parameters = (; closure, diffusivity_fields, clock)
parameters = (; closure, closure_fields, clock, model_fields)
return KernelFunctionOperation{Center, Center, Center}(isotropic_viscous_dissipation_rate_ccc, u.grid,
u, v, w, parameters)
end

@inline KineticEnergyIsotropicDissipationRate(model; location = (Center, Center, Center)) =
KineticEnergyIsotropicDissipationRate(model.velocities..., model.closure, model.diffusivity_fields, model.clock; location = location)
KineticEnergyIsotropicDissipationRate(model.velocities..., model.closure, model.closure_fields, fields(model), model.clock; location = location)
#---

end # module
2 changes: 1 addition & 1 deletion src/ProgressMessengers/cfl.jl
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ tuple_to_op(::Nothing) = nothing
tuple_to_op(ν_tuple::Tuple) = sum(ν_tuple)

@inline function (maxν::MaxViscosity)(simulation)
ν = tuple_to_op(viscosity(simulation.model.closure, simulation.model.diffusivity_fields))
ν = tuple_to_op(viscosity(simulation.model.closure, simulation.model.closure_fields))
ν_max = maximum(abs, ν)
message = @sprintf("%.2g", ν_max)
maxν.with_prefix && (message = "νₘₐₓ = " * message)
Expand Down
24 changes: 12 additions & 12 deletions src/TracerEquation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ export Advection, Diffusion, ImmersedDiffusion, TotalDiffusion, Forcing,
TracerAdvection, TracerDiffusion, TracerImmersedDiffusion, TracerTotalDiffusion, TracerForcing

# Inline function for total diffusion
@inline total_∇_dot_qᶜ(i, j, k, grid, c, c_immersed_bc, closure, diffusivity_fields, val_tracer_index, clock, model_fields, buoyancy) =
∇_dot_qᶜ(i, j, k, grid, closure, diffusivity_fields, val_tracer_index, c, clock, model_fields, buoyancy) +
immersed_∇_dot_qᶜ(i, j, k, grid, c, c_immersed_bc, closure, diffusivity_fields, val_tracer_index, clock, model_fields, buoyancy)
@inline total_∇_dot_qᶜ(i, j, k, grid, c, c_immersed_bc, closure, closure_fields, val_tracer_index, clock, model_fields, buoyancy) =
∇_dot_qᶜ(i, j, k, grid, closure, closure_fields, val_tracer_index, c, clock, model_fields, buoyancy) +
immersed_∇_dot_qᶜ(i, j, k, grid, c, c_immersed_bc, closure, closure_fields, val_tracer_index, clock, model_fields, buoyancy)

# Type aliases for major functions
const Advection = CustomKFO{<:typeof(div_Uc)}
Expand Down Expand Up @@ -93,15 +93,15 @@ KernelFunctionOperation at (Center, Center, Center)
└── arguments: ("Nothing", "Nothing", "Val", "Field", "Clock", "NamedTuple", "Nothing")
```
"""
function Diffusion(model, val_tracer_index, c, closure, diffusivity_fields, clock, model_fields, buoyancy; location = (Center, Center, Center))
function Diffusion(model, val_tracer_index, c, closure, closure_fields, clock, model_fields, buoyancy; location = (Center, Center, Center))
validate_location(location, "Diffusion", (Center, Center, Center))
return KernelFunctionOperation{Center, Center, Center}(∇_dot_qᶜ, model.grid, closure, diffusivity_fields, val_tracer_index, c, clock, model_fields, buoyancy)
return KernelFunctionOperation{Center, Center, Center}(∇_dot_qᶜ, model.grid, closure, closure_fields, val_tracer_index, c, clock, model_fields, buoyancy)
end

function Diffusion(model, tracer_name; kwargs...)
tracer_index = findfirst(x -> x == tracer_name, keys(model.tracers))
@inbounds c = model.tracers[tracer_name]
return Diffusion(model, Val(tracer_index), c, model.closure, model.diffusivity_fields, model.clock, fields(model), model.buoyancy; kwargs...)
return Diffusion(model, Val(tracer_index), c, model.closure, model.closure_fields, model.clock, fields(model), model.buoyancy; kwargs...)
end


Expand Down Expand Up @@ -129,16 +129,16 @@ KernelFunctionOperation at (Center, Center, Center)
└── arguments: ("Field", "Nothing", "Nothing", "Nothing", "Val", "Clock", "NamedTuple")
```
"""
function ImmersedDiffusion(model, c, c_immersed_bc, closure, diffusivity_fields, val_tracer_index, clock, model_fields; location = (Center, Center, Center))
function ImmersedDiffusion(model, c, c_immersed_bc, closure, closure_fields, val_tracer_index, clock, model_fields; location = (Center, Center, Center))
validate_location(location, "ImmersedDiffusion", (Center, Center, Center))
return KernelFunctionOperation{Center, Center, Center}(immersed_∇_dot_qᶜ, model.grid, c, c_immersed_bc, closure, diffusivity_fields, val_tracer_index, clock, model_fields)
return KernelFunctionOperation{Center, Center, Center}(immersed_∇_dot_qᶜ, model.grid, c, c_immersed_bc, closure, closure_fields, val_tracer_index, clock, model_fields)
end

function ImmersedDiffusion(model, tracer_name; kwargs...)
tracer_index = findfirst(x -> x == tracer_name, keys(model.tracers))
tracer = model.tracers[tracer_name]
immersed_bc = tracer.boundary_conditions.immersed
return ImmersedDiffusion(model, tracer, immersed_bc, model.closure, model.diffusivity_fields, Val(tracer_index), model.clock, fields(model); kwargs...)
return ImmersedDiffusion(model, tracer, immersed_bc, model.closure, model.closure_fields, Val(tracer_index), model.clock, fields(model); kwargs...)
end

"""
Expand All @@ -165,16 +165,16 @@ KernelFunctionOperation at (Center, Center, Center)
└── arguments: ("Field", "Nothing", "Nothing", "Nothing", "Val", "Clock", "NamedTuple", "Nothing")
```
"""
function TotalDiffusion(model, c, c_immersed_bc, closure, diffusivity_fields, val_tracer_index, clock, model_fields, buoyancy; location = (Center, Center, Center))
function TotalDiffusion(model, c, c_immersed_bc, closure, closure_fields, val_tracer_index, clock, model_fields, buoyancy; location = (Center, Center, Center))
validate_location(location, "TotalDiffusion", (Center, Center, Center))
return KernelFunctionOperation{Center, Center, Center}(total_∇_dot_qᶜ, model.grid, c, c_immersed_bc, closure, diffusivity_fields, val_tracer_index, clock, model_fields, buoyancy)
return KernelFunctionOperation{Center, Center, Center}(total_∇_dot_qᶜ, model.grid, c, c_immersed_bc, closure, closure_fields, val_tracer_index, clock, model_fields, buoyancy)
end

function TotalDiffusion(model, tracer_name; kwargs...)
tracer_index = findfirst(x -> x == tracer_name, keys(model.tracers))
tracer = model.tracers[tracer_index]
immersed_bc = tracer.boundary_conditions.immersed
return TotalDiffusion(model, tracer, immersed_bc, model.closure, model.diffusivity_fields, Val(tracer_index), model.clock, fields(model), model.buoyancy; kwargs...)
return TotalDiffusion(model, tracer, immersed_bc, model.closure, model.closure_fields, Val(tracer_index), model.clock, fields(model), model.buoyancy; kwargs...)
end
#---

Expand Down
Loading