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
Original file line number Diff line number Diff line change
Expand Up @@ -210,13 +210,13 @@ end

Base.show(io::IO, closure::ScalarDiffusivity) = print(io, summary(closure))

function Adapt.adapt_structure(to, closure::ScalarDiffusivity{TD, F, <:Any, <:Any, N}) where {TD, F, N}
function Adapt.adapt_structure(to, closure::ScalarDiffusivity{TD, F, N}) where {TD, F, N}
ν = Adapt.adapt(to, closure.ν)
κ = Adapt.adapt(to, closure.κ)
return ScalarDiffusivity{TD, F, N}(ν, κ)
end

function Architectures.on_architecture(to, closure::ScalarDiffusivity{TD, F, <:Any, <:Any, N}) where {TD, F, N}
function Architectures.on_architecture(to, closure::ScalarDiffusivity{TD, F, N}) where {TD, F, N}
ν = on_architecture(to, closure.ν)
κ = on_architecture(to, closure.κ)
return ScalarDiffusivity{TD, F, N}(ν, κ)
Expand Down
25 changes: 24 additions & 1 deletion test/turbulence_closures/closures.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ using Oceananigans.TurbulenceClosures: CATKEVerticalDiffusivity, RiBasedVertical
LagrangianAveraging,
AnisotropicMinimumDissipation,
IsopycnalSkewSymmetricDiffusivity,
DiffusiveFormulation, AdvectiveFormulation, ThreeDimensionalFormulation
DiffusiveFormulation, AdvectiveFormulation, ThreeDimensionalFormulation,
VerticalFormulation

ConstantSmagorinsky(FT=Float64) = Smagorinsky(FT, coefficient=0.16)
DirectionallyAveragedDynamicSmagorinsky(FT=Float64) = DynamicSmagorinsky(FT, averaging=(1, 2))
Expand Down Expand Up @@ -449,6 +450,28 @@ end
@test required_halo_size_y(closure) == 1
@test required_halo_size_z(closure) == 1

@testset "ScalarDiffusivity architecture conversion preserves halo size" begin
time_discretization = VerticallyImplicitTimeDiscretization()
diffusivity_formulation = VerticalFormulation()
ν = (x, y, z, t) -> 0.3
κ = (x, y, z, t) -> 0.7
for tracer_diffusivities in (κ, (T=κ, S=κ))
closure = ScalarDiffusivity(time_discretization, diffusivity_formulation, Float32;
ν, κ=tracer_diffusivities, required_halo_size=3)
converted_closures = (Adapt.adapt_structure(identity, closure),
on_architecture(CPU(), closure))

for converted in converted_closures
@test required_halo_size_x(converted) == 3
@test required_halo_size_y(converted) == 3
@test required_halo_size_z(converted) == 3
@test converted.ν == closure.ν
@test converted.κ == closure.κ
@test typeof(converted).parameters[1:2] == typeof(closure).parameters[1:2]
end
end
end

closure = ScalarBiharmonicDiffusivity(ν=0.3)
@test required_halo_size_x(closure) == 2
@test required_halo_size_y(closure) == 2
Expand Down
Loading