Skip to content

Commit debeb3b

Browse files
committed
remove HydrologyEarthParameters struct
1 parent 260b427 commit debeb3b

File tree

4 files changed

+22
-103
lines changed

4 files changed

+22
-103
lines changed

NEWS.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ ClimaLand.jl Release Notes
44
main
55
-------
66

7+
- Change `Soil.phase_change_source` interface to take model parameters
8+
as the final argument; remove `HydrologyEarthParameters` struct.
9+
PR[#982](https://github.com/CliMA/ClimaLand.jl/pull/982)
710

811
v0.15.7
912
-------

src/standalone/Soil/energy_hydrology.jl

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -640,15 +640,11 @@ function ClimaLand.source!(
640640
model,
641641
) where {FT}
642642
params = model.parameters
643-
(; ν, ρc_ds, θ_r, hydrology_cm, earth_param_set) = params
643+
(; ν, ρc_ds, θ_r, earth_param_set) = params
644644
_ρ_l = FT(LP.ρ_cloud_liq(earth_param_set))
645645
_ρ_i = FT(LP.ρ_cloud_ice(earth_param_set))
646646
Δz = model.domain.fields.Δz # center face distance
647647

648-
# Wrap hydrology and earth parameters in one struct to avoid type inference failure. This is allocating! We should remove it.
649-
hydrology_earth_params =
650-
ClimaLand.Soil.HydrologyEarthParameters.(hydrology_cm, earth_param_set)
651-
652648
@. dY.soil.ϑ_l +=
653649
-phase_change_source(
654650
p.soil.θ_l,
@@ -666,7 +662,7 @@ function ClimaLand.source!(
666662
),
667663
ν,
668664
θ_r,
669-
hydrology_earth_params,
665+
params,
670666
)
671667
@. dY.soil.θ_i +=
672668
(_ρ_l / _ρ_i) * phase_change_source(
@@ -685,7 +681,7 @@ function ClimaLand.source!(
685681
),
686682
ν,
687683
θ_r,
688-
hydrology_earth_params,
684+
params,
689685
)
690686
end
691687

src/standalone/Soil/soil_heat_parameterizations.jl

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ end
3131
τ::FT,
3232
ν::FT,
3333
θ_r::FT,
34-
hydrology_earth_params::HEP
35-
) where {FT, HEP}
34+
params::P
35+
) where {FT, P}
3636
Returns the source term (1/s) used for converting liquid water
3737
and ice into each other during phase changes. Note that
3838
there are unitless prefactors multiplying this term in the
@@ -49,11 +49,10 @@ function phase_change_source(
4949
τ::FT,
5050
ν::FT,
5151
θ_r::FT,
52-
hydrology_earth_params::HEP,
53-
) where {FT, HEP}
52+
params::P,
53+
) where {FT, P}
5454
# Extract parameter sets from their container
55-
hydrology_cm = hydrology_earth_params.hydrology_cm
56-
earth_param_set = hydrology_earth_params.earth_param_set
55+
(; hydrology_cm, earth_param_set) = params
5756

5857
_ρ_i = FT(LP.ρ_cloud_ice(earth_param_set))
5958
_ρ_l = FT(LP.ρ_cloud_liq(earth_param_set))
@@ -74,29 +73,6 @@ function phase_change_source(
7473
return (θ_l - θstar) / τ
7574
end
7675

77-
"""
78-
struct HydrologyEarthParameters{
79-
HCM <: AbstractSoilHydrologyClosure,
80-
EP <: ClimaLand.Parameters.AbstractLandParameters,
81-
}
82-
83-
A wrapper type around the hydrology closure model and land parameter
84-
structs. This is needed because of a type inference failure coming from
85-
ClimaCore when multiple structs and fields are broadcasted over.
86-
This struct circumvents that issue by wrapping the structs in a single
87-
type, that can be unpacked within the broadcasted function.
88-
89-
See github.com/CliMA/ClimaCore.jl/issues/2065 for more information
90-
"""
91-
struct HydrologyEarthParameters{
92-
HCM <: AbstractSoilHydrologyClosure,
93-
EP <: ClimaLand.Parameters.AbstractLandParameters,
94-
}
95-
hydrology_cm::HCM
96-
earth_param_set::EP
97-
end
98-
Base.broadcastable(x::HydrologyEarthParameters) = tuple(x)
99-
10076
"""
10177
volumetric_heat_capacity(
10278
θ_l::FT,

test/standalone/Soil/soil_parameterizations.jl

Lines changed: 11 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -307,10 +307,6 @@ for FT in (Float32, Float64)
307307
vg_n = FT(1.4)
308308
hcm = vanGenuchten{FT}(; α = vg_α, n = vg_n)
309309

310-
# Wrap hydrology and earth parameters in one struct to avoid type inference failure
311-
hydrology_earth_params =
312-
ClimaLand.Soil.HydrologyEarthParameters(hcm, param_set)
313-
314310
K_sat = FT(1e-5)
315311
ν_ss_om = FT(0.1)
316312
ν_ss_gravel = FT(0.1)
@@ -343,26 +339,11 @@ for FT in (Float32, Float64)
343339
ρc_s = volumetric_heat_capacity.(θ_l, θ_i, parameters.ρc_ds, param_set)
344340
τ = thermal_time.(ρc_s, Δz, parameters.κ_dry)
345341
@test (
346-
phase_change_source.(
347-
θ_l,
348-
θ_i,
349-
T,
350-
τ,
351-
ν,
352-
θ_r,
353-
hydrology_earth_params,
354-
) (θ_l .- θ_star) ./ τ
342+
phase_change_source.(θ_l, θ_i, T, τ, ν, θ_r, parameters)
343+
(θ_l .- θ_star) ./ τ
355344
)
356345
@test sum(
357-
phase_change_source.(
358-
θ_l,
359-
θ_i,
360-
T,
361-
τ,
362-
ν,
363-
θ_r,
364-
hydrology_earth_params,
365-
) .> 0.0,
346+
phase_change_source.(θ_l, θ_i, T, τ, ν, θ_r, parameters) .> 0.0,
366347
) == 3
367348

368349
θ_l = FT.([0.11, 0.15, ν])
@@ -378,15 +359,8 @@ for FT in (Float32, Float64)
378359
ρc_s = volumetric_heat_capacity.(θ_l, θ_i, parameters.ρc_ds, param_set)
379360
τ = thermal_time.(ρc_s, Δz, parameters.κ_dry)
380361
@test (
381-
phase_change_source.(
382-
θ_l,
383-
θ_i,
384-
T,
385-
τ,
386-
ν,
387-
θ_r,
388-
hydrology_earth_params,
389-
) zeros(FT, 3)
362+
phase_change_source.(θ_l, θ_i, T, τ, ν, θ_r, parameters)
363+
zeros(FT, 3)
390364
)
391365
@test (θ_star θ_l)
392366

@@ -404,26 +378,11 @@ for FT in (Float32, Float64)
404378
ρc_s = volumetric_heat_capacity.(θ_l, θ_i, parameters.ρc_ds, param_set)
405379
τ = thermal_time.(ρc_s, Δz, parameters.κ_dry)
406380
@test (
407-
phase_change_source.(
408-
θ_l,
409-
θ_i,
410-
T,
411-
τ,
412-
ν,
413-
θ_r,
414-
hydrology_earth_params,
415-
) (θ_l .- θ_star) ./ τ
381+
phase_change_source.(θ_l, θ_i, T, τ, ν, θ_r, parameters)
382+
(θ_l .- θ_star) ./ τ
416383
)
417384
@test sum(
418-
phase_change_source.(
419-
θ_l,
420-
θ_i,
421-
T,
422-
τ,
423-
ν,
424-
θ_r,
425-
hydrology_earth_params,
426-
) .< 0.0,
385+
phase_change_source.(θ_l, θ_i, T, τ, ν, θ_r, parameters) .< 0.0,
427386
) == 2
428387

429388

@@ -440,26 +399,11 @@ for FT in (Float32, Float64)
440399
ρc_s = volumetric_heat_capacity.(θ_l, θ_i, parameters.ρc_ds, param_set)
441400
τ = thermal_time.(ρc_s, Δz, parameters.κ_dry)
442401
@test (
443-
phase_change_source.(
444-
θ_l,
445-
θ_i,
446-
T,
447-
τ,
448-
ν,
449-
θ_r,
450-
hydrology_earth_params,
451-
) (θ_l .- θ_star) ./ τ
402+
phase_change_source.(θ_l, θ_i, T, τ, ν, θ_r, parameters)
403+
(θ_l .- θ_star) ./ τ
452404
)
453405
@test sum(
454-
phase_change_source.(
455-
θ_l,
456-
θ_i,
457-
T,
458-
τ,
459-
ν,
460-
θ_r,
461-
hydrology_earth_params,
462-
) .> 0.0,
406+
phase_change_source.(θ_l, θ_i, T, τ, ν, θ_r, parameters) .> 0.0,
463407
) == 2
464408
end
465409
end

0 commit comments

Comments
 (0)