Skip to content

Commit 6f91af6

Browse files
committed
more tests for Kv
1 parent 0cd8f4e commit 6f91af6

1 file changed

Lines changed: 45 additions & 0 deletions

File tree

test/test-Kv_profile.jl

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,51 @@ end
111111
@test ubc[3] 500.0 # z_exp upper
112112
end
113113

114+
@testset "KvExpPiecewise — kv_at_depth" begin
115+
# 2-segment profile:
116+
# seg1: z ∈ [0, 100], Ksat = 10·exp(-0.01·z)
117+
# seg2: z ∈ [100,200], Ksat = 5·exp(-0.02·(z-100))
118+
# below 200: constant tail = 5·exp(-0.02·100) = 5·exp(-2)
119+
kv = KvExpPiecewise{Float64,2}(kv=[10.0, 5.0], f=[0.01, 0.02], z_exp=[100.0, 200.0])
120+
121+
@test kv_at_depth(kv, 1, 0.0) 10.0 # surface
122+
@test kv_at_depth(kv, 1, 50.0) 10.0 * exp(-0.5) # mid seg1
123+
@test kv_at_depth(kv, 1, 100.0) 10.0 * exp(-1.0) # boundary (≤ z_exp[1])
124+
@test kv_at_depth(kv, 2, 150.0) 5.0 * exp(-1.0) # mid seg2 (local z=50)
125+
@test kv_at_depth(kv, 3, 250.0) 5.0 * exp(-2.0) # constant tail
126+
127+
# within each segment: strictly decreasing with local depth
128+
@test kv_at_depth(kv, 1, 10.0) > kv_at_depth(kv, 1, 90.0) # seg1
129+
@test kv_at_depth(kv, 2, 110.0) > kv_at_depth(kv, 2, 190.0) # seg2
130+
# seg2 resets to kv[2] at local z=0 (z=100)
131+
@test kv_at_depth(kv, 2, 100.0 + 1e-10) 5.0 atol=1e-8
132+
end
133+
134+
@testset "KvExpPiecewise — kv_layer_ksat" begin
135+
kv = KvExpPiecewise{Float64,2}(kv=[10.0, 5.0], f=[0.01, 0.02], z_exp=[100.0, 200.0])
136+
tail = 5.0 * exp(-2.0) # constant below z=200
137+
138+
# layer entirely in seg1
139+
@test kv_layer_ksat(kv, 1, 0.0, 100.0) 10.0 * (1 - exp(-1.0)) # = 10/(f·dz)·Δexp
140+
141+
# layer entirely in seg2 (local z ∈ [0, 100])
142+
@test kv_layer_ksat(kv, 2, 100.0, 200.0) 2.5 * (1 - exp(-2.0))
143+
144+
# layer straddling the segment boundary [80, 120]
145+
e1 = 10.0 / (0.01 * 20) * (exp(-0.8) - exp(-1.0)) * 20 # seg1 contribution × width
146+
e2 = 5.0 / (0.02 * 20) * (1 - exp(-0.4)) * 20 # seg2 contribution × width
147+
@test kv_layer_ksat(kv, 1, 80.0, 120.0) (e1 + e2) / 40
148+
149+
# layer entirely below last segment: constant
150+
@test kv_layer_ksat(kv, 3, 210.0, 250.0) tail
151+
@test kv_layer_ksat(kv, 3, 200.0, 250.0) tail # starts exactly at boundary
152+
153+
# layer straddling last segment end [160, 220]
154+
e3 = 5.0 / (0.02 * 40) * (exp(-1.2) - exp(-2.0)) * 40 # seg2 part
155+
e4 = tail * 20 # constant part (20 cm)
156+
@test kv_layer_ksat(kv, 2, 160.0, 220.0) (e3 + e4) / 60
157+
end
158+
114159
# @testset "KvProfile layer ModelParams bridge" begin
115160
# kv = KvExpLayers{Float64,3}(kv=[5.0, 8.0, 3.0], f=[0.02, 0.01, 0.01])
116161
# @test kv isa AbstractKvLayers

0 commit comments

Comments
 (0)