Skip to content

Commit 49987e2

Browse files
authored
Merge pull request #1286 from CliMA/kp/extensions
Add modules in src for LandSimVis and FluxnetSimulations
2 parents a366651 + eecc407 commit 49987e2

24 files changed

+181
-159
lines changed

docs/src/tutorials/integrated/soil_canopy_tutorial.jl

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ using ClimaLand.Canopy.PlantHydraulics
5353
import ClimaLand
5454
import ClimaLand.Parameters as LP
5555
using DelimitedFiles
56-
FluxnetSimulationsExt =
57-
Base.get_extension(ClimaLand, :FluxnetSimulationsExt).FluxnetSimulationsExt;
56+
import ClimaLand.FluxnetSimulations as FluxnetSimulations
5857

5958
# Define the floating point precision desired (64 or 32 bit), and get the
6059
# parameter set holding constants used across CliMA Models:
@@ -103,7 +102,7 @@ dt = Float64(30)
103102
# read in the observed LAI and let that vary in time in a prescribed manner.
104103

105104
# Forcing data
106-
(; atmos, radiation) = FluxnetSimulationsExt.prescribed_forcing_fluxnet(
105+
(; atmos, radiation) = FluxnetSimulations.prescribed_forcing_fluxnet(
107106
site_ID,
108107
lat,
109108
long,
@@ -241,11 +240,8 @@ LAI = ClimaLand.prescribed_lai_modis(
241240
start_date,
242241
);
243242
# Get the maximum LAI at this site over the first year of the simulation
244-
maxLAI = FluxnetSimulationsExt.get_maxLAI_at_site(
245-
modis_lai_ncdata_path[1],
246-
lat,
247-
long,
248-
)
243+
maxLAI =
244+
FluxnetSimulations.get_maxLAI_at_site(modis_lai_ncdata_path[1], lat, long)
249245

250246
SAI = FT(0.00242)
251247
RAI = (SAI + maxLAI) * f_root_to_shoot;

docs/src/tutorials/standalone/Canopy/canopy_tutorial.jl

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@ using ClimaLand.Canopy.PlantHydraulics
5353
import ClimaLand
5454
import ClimaLand.Parameters as LP
5555
using DelimitedFiles
56-
FluxnetSimulationsExt =
57-
Base.get_extension(ClimaLand, :FluxnetSimulationsExt).FluxnetSimulationsExt;
56+
import ClimaLand.FluxnetSimulations as FluxnetSimulations
5857

5958
# Define the floating point precision desired (64 or 32 bit), and get the
6059
# parameter set holding constants used across CliMA Models:
@@ -123,7 +122,7 @@ dt = 225.0
123122
# read in the observed LAI and let that vary in time in a prescribed manner.
124123

125124
# Forcing data
126-
(; atmos, radiation) = FluxnetSimulationsExt.prescribed_forcing_fluxnet(
125+
(; atmos, radiation) = FluxnetSimulations.prescribed_forcing_fluxnet(
127126
site_ID,
128127
lat,
129128
long,
@@ -206,11 +205,8 @@ LAI = ClimaLand.prescribed_lai_modis(
206205
start_date,
207206
);
208207
# Get the maximum LAI at this site over the first year of the simulation
209-
maxLAI = FluxnetSimulationsExt.get_maxLAI_at_site(
210-
modis_lai_ncdata_path[1],
211-
lat,
212-
long,
213-
);
208+
maxLAI =
209+
FluxnetSimulations.get_maxLAI_at_site(modis_lai_ncdata_path[1], lat, long);
214210

215211
SAI = FT(0.00242)
216212
f_root_to_shoot = FT(3.5)

experiments/integrated/fluxnet/ozark_pft.jl

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,9 @@ using ClimaDiagnostics
2525
using ClimaUtilities
2626

2727
using DelimitedFiles
28-
FluxnetSimulationsExt =
29-
Base.get_extension(ClimaLand, :FluxnetSimulationsExt).FluxnetSimulationsExt;
28+
import ClimaLand.FluxnetSimulations as FluxnetSimulations
3029
using CairoMakie, ClimaAnalysis, GeoMakie, Poppler_jll, Printf, StatsBase
31-
LandSimulationVisualizationExt =
32-
Base.get_extension(
33-
ClimaLand,
34-
:LandSimulationVisualizationExt,
35-
).LandSimulationVisualizationExt;
30+
import ClimaLand.LandSimVis as LandSimVis
3631
const FT = Float64
3732
earth_param_set = LP.LandParameters(FT)
3833
climaland_dir = pkgdir(ClimaLand)
@@ -116,7 +111,7 @@ include(
116111
),
117112
)
118113
start_date = DateTime(2010) + Hour(time_offset)
119-
(; atmos, radiation) = FluxnetSimulationsExt.prescribed_forcing_fluxnet(
114+
(; atmos, radiation) = FluxnetSimulations.prescribed_forcing_fluxnet(
120115
site_ID,
121116
lat,
122117
long,
@@ -140,11 +135,8 @@ LAI = ClimaLand.prescribed_lai_modis(
140135
start_date,
141136
)
142137
# Get the maximum LAI at this site over the first year of the simulation
143-
maxLAI = FluxnetSimulationsExt.get_maxLAI_at_site(
144-
modis_lai_ncdata_path[1],
145-
lat,
146-
long,
147-
);
138+
maxLAI =
139+
FluxnetSimulations.get_maxLAI_at_site(modis_lai_ncdata_path[1], lat, long);
148140
RAI = maxLAI * f_root_to_shoot
149141
capacity = plant_ν * maxLAI * h_leaf * FT(1000)
150142

@@ -279,7 +271,7 @@ jacobian! = make_jacobian(land);
279271
jac_kwargs =
280272
(; jac_prototype = ClimaLand.FieldMatrixWithSolver(Y), Wfact = jacobian!);
281273

282-
FluxnetSimulationsExt.set_fluxnet_ic!(Y, site_ID, start_date, time_offset, land)
274+
FluxnetSimulations.set_fluxnet_ic!(Y, site_ID, start_date, time_offset, land)
283275
set_initial_cache! = make_set_initial_cache(land)
284276
set_initial_cache!(p, Y, t0);
285277

@@ -319,7 +311,7 @@ diag_cb = ClimaDiagnostics.DiagnosticsCallback(diagnostic_handler);
319311

320312
## How often we want to update the drivers. Note that this uses the defined `t0` and `tf`
321313
## defined in the simulatons file
322-
data_dt = Float64(FluxnetSimulationsExt.get_data_dt(site_ID))
314+
data_dt = Float64(FluxnetSimulations.get_data_dt(site_ID))
323315
updateat = Array(t0:data_dt:tf)
324316
model_drivers = ClimaLand.get_drivers(land)
325317
updatefunc = ClimaLand.make_update_drivers(model_drivers)
@@ -341,12 +333,11 @@ prob = SciMLBase.ODEProblem(
341333
sol = SciMLBase.solve(prob, ode_algo; dt = dt, callback = cb);
342334

343335
ClimaLand.Diagnostics.close_output_writers(diags)
344-
comparison_data =
345-
FluxnetSimulationsExt.get_comparison_data(site_ID, time_offset)
336+
comparison_data = FluxnetSimulations.get_comparison_data(site_ID, time_offset)
346337
savedir =
347338
joinpath(pkgdir(ClimaLand), "experiments/integrated/fluxnet/US-MOz/pft/out")
348339
mkpath(savedir)
349-
LandSimulationVisualizationExt.make_diurnal_timeseries(
340+
LandSimVis.make_diurnal_timeseries(
350341
land_domain,
351342
diags,
352343
start_date;
@@ -355,7 +346,7 @@ LandSimulationVisualizationExt.make_diurnal_timeseries(
355346
spinup_date = start_date + Day(N_spinup_days),
356347
comparison_data,
357348
)
358-
LandSimulationVisualizationExt.make_timeseries(
349+
LandSimVis.make_timeseries(
359350
land_domain,
360351
diags,
361352
start_date;

experiments/integrated/fluxnet/run_fluxnet.jl

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,9 @@ using ClimaDiagnostics
2020
using ClimaUtilities
2121

2222
using DelimitedFiles
23-
FluxnetSimulationsExt =
24-
Base.get_extension(ClimaLand, :FluxnetSimulationsExt).FluxnetSimulationsExt;
23+
import ClimaLand.FluxnetSimulations as FluxnetSimulations
2524
using CairoMakie, ClimaAnalysis, GeoMakie, Poppler_jll, Printf, StatsBase
26-
LandSimulationVisualizationExt =
27-
Base.get_extension(
28-
ClimaLand,
29-
:LandSimulationVisualizationExt,
30-
).LandSimulationVisualizationExt;
25+
import ClimaLand.LandSimVis as LandSimVis
3126

3227
const FT = Float64
3328
earth_param_set = LP.LandParameters(FT)
@@ -76,9 +71,8 @@ include(
7671
"experiments/integrated/fluxnet/fluxnet_simulation.jl",
7772
),
7873
)
79-
(start_date, end_date) =
80-
FluxnetSimulationsExt.get_data_dates(site_ID, time_offset)
81-
(; atmos, radiation) = FluxnetSimulationsExt.prescribed_forcing_fluxnet(
74+
(start_date, end_date) = FluxnetSimulations.get_data_dates(site_ID, time_offset)
75+
(; atmos, radiation) = FluxnetSimulations.prescribed_forcing_fluxnet(
8276
site_ID,
8377
lat,
8478
long,
@@ -102,11 +96,8 @@ LAI = ClimaLand.prescribed_lai_modis(
10296
start_date,
10397
)
10498
# Get the maximum LAI at this site over the first year of the simulation
105-
maxLAI = FluxnetSimulationsExt.get_maxLAI_at_site(
106-
modis_lai_ncdata_path[1],
107-
lat,
108-
long,
109-
);
99+
maxLAI =
100+
FluxnetSimulations.get_maxLAI_at_site(modis_lai_ncdata_path[1], lat, long);
110101
RAI = maxLAI * f_root_to_shoot
111102
capacity = plant_ν * maxLAI * h_leaf * FT(1000)
112103

@@ -240,7 +231,7 @@ land = LandModel{FT}(;
240231

241232
Y, p, cds = initialize(land)
242233

243-
FluxnetSimulationsExt.set_fluxnet_ic!(Y, site_ID, start_date, time_offset, land)
234+
FluxnetSimulations.set_fluxnet_ic!(Y, site_ID, start_date, time_offset, land)
244235
set_initial_cache! = make_set_initial_cache(land)
245236
set_initial_cache!(p, Y, t0);
246237

@@ -286,7 +277,7 @@ diag_cb = ClimaDiagnostics.DiagnosticsCallback(diagnostic_handler);
286277

287278
## How often we want to update the drivers. Note that this uses the defined `t0`, and `tf`
288279
## defined in the simulatons file
289-
data_dt = Float64(FluxnetSimulationsExt.get_data_dt(site_ID));
280+
data_dt = Float64(FluxnetSimulations.get_data_dt(site_ID));
290281
updateat = Array(t0:data_dt:tf);
291282
model_drivers = ClimaLand.get_drivers(land);
292283
updatefunc = ClimaLand.make_update_drivers(model_drivers);
@@ -308,12 +299,11 @@ prob = SciMLBase.ODEProblem(
308299
@time sol = SciMLBase.solve(prob, ode_algo; dt = dt, callback = cb);
309300

310301
ClimaLand.Diagnostics.close_output_writers(diags)
311-
comparison_data =
312-
FluxnetSimulationsExt.get_comparison_data(site_ID, time_offset)
302+
comparison_data = FluxnetSimulations.get_comparison_data(site_ID, time_offset)
313303
savedir =
314304
joinpath(pkgdir(ClimaLand), "experiments/integrated/fluxnet/$(site_ID)/out")
315305
mkpath(savedir)
316-
LandSimulationVisualizationExt.make_diurnal_timeseries(
306+
LandSimVis.make_diurnal_timeseries(
317307
land_domain,
318308
diags,
319309
start_date;
@@ -322,7 +312,7 @@ LandSimulationVisualizationExt.make_diurnal_timeseries(
322312
spinup_date = start_date + Day(N_spinup_days),
323313
comparison_data,
324314
)
325-
LandSimulationVisualizationExt.make_timeseries(
315+
LandSimVis.make_timeseries(
326316
land_domain,
327317
diags,
328318
start_date;

experiments/integrated/fluxnet/snow_soil/simulation.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ import ClimaLand.Parameters as LP
2222
import ClimaParams
2323

2424
using DelimitedFiles
25-
FluxnetSimulationsExt =
26-
Base.get_extension(ClimaLand, :FluxnetSimulationsExt).FluxnetSimulationsExt;
25+
import ClimaLand.FluxnetSimulations as FluxnetSimulations
2726
using CairoMakie, StatsBase
2827

2928
climaland_dir = pkgdir(ClimaLand)
@@ -57,7 +56,7 @@ tf = t0 + FT(3600 * 24 * N_days)
5756
# Height of sensor on flux tower
5857
atmos_h = FT(32)
5958
start_date = DateTime(2010) + Hour(time_offset)
60-
forcing = FluxnetSimulationsExt.prescribed_forcing_fluxnet(
59+
forcing = FluxnetSimulations.prescribed_forcing_fluxnet(
6160
site_ID,
6261
lat,
6362
long,
@@ -125,7 +124,7 @@ set_initial_cache! = make_set_initial_cache(land)
125124

126125

127126
#Initial conditions
128-
FluxnetSimulationsExt.set_fluxnet_ic!(Y, site_ID, start_date, time_offset, land)
127+
FluxnetSimulations.set_fluxnet_ic!(Y, site_ID, start_date, time_offset, land)
129128
set_initial_cache!(p, Y, t0)
130129

131130
saveat = Array(t0:dt:tf)
@@ -172,8 +171,7 @@ sol = SciMLBase.solve(
172171
# Plotting
173172
daily = sol.t ./ 3600 ./ 24
174173
savedir = joinpath(climaland_dir, "experiments/integrated/fluxnet/snow_soil")
175-
comparison_data =
176-
FluxnetSimulationsExt.get_comparison_data(site_ID, time_offset)
174+
comparison_data = FluxnetSimulations.get_comparison_data(site_ID, time_offset)
177175

178176
# Water content
179177
seconds =

experiments/integrated/performance/conservation/ozark_conservation.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ import ClimaLand.Parameters as LP
1818
import ClimaParams
1919
import ClimaUtilities.OutputPathGenerator: generate_output_path
2020
using DelimitedFiles
21-
FluxnetSimulationsExt =
22-
Base.get_extension(ClimaLand, :FluxnetSimulationsExt).FluxnetSimulationsExt;
21+
import ClimaLand.FluxnetSimulations as FluxnetSimulations
2322

2423
global climaland_dir = pkgdir(ClimaLand)
2524
global site_ID = "US-MOz"

experiments/integrated/performance/conservation/ozark_conservation_setup.jl

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,8 @@ land_domain = Column(;
5454
canopy_domain = ClimaLand.Domains.obtain_surface_domain(land_domain)
5555

5656
# Get the atmospheric and radiation forcing data
57-
(start_date, end_date) =
58-
FluxnetSimulationsExt.get_data_dates(site_ID, time_offset)
59-
(; atmos, radiation) = FluxnetSimulationsExt.prescribed_forcing_fluxnet(
57+
(start_date, end_date) = FluxnetSimulations.get_data_dates(site_ID, time_offset)
58+
(; atmos, radiation) = FluxnetSimulations.prescribed_forcing_fluxnet(
6059
site_ID,
6160
lat,
6261
long,
@@ -80,11 +79,8 @@ LAI = ClimaLand.prescribed_lai_modis(
8079
start_date,
8180
)
8281
# Get the maximum LAI at this site over the first year of the simulation
83-
maxLAI = FluxnetSimulationsExt.get_maxLAI_at_site(
84-
modis_lai_ncdata_path[1],
85-
lat,
86-
long,
87-
);
82+
maxLAI =
83+
FluxnetSimulations.get_maxLAI_at_site(modis_lai_ncdata_path[1], lat, long);
8884
RAI = FT(maxLAI) * f_root_to_shoot # convert to float type of simulation
8985
capacity = plant_ν * maxLAI * h_leaf * FT(1000)
9086
# Now we set up the model. For the soil model, we pick
@@ -211,5 +207,5 @@ Y, p, cds = initialize(land)
211207
jac_kwargs =
212208
(; jac_prototype = ClimaLand.FieldMatrixWithSolver(Y), Wfact = jacobian!);
213209

214-
FluxnetSimulationsExt.set_fluxnet_ic!(Y, site_ID, start_date, time_offset, land)
210+
FluxnetSimulations.set_fluxnet_ic!(Y, site_ID, start_date, time_offset, land)
215211
set_initial_cache!(p, Y, t0)

experiments/long_runs/bucket.jl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,7 @@ using Dates
3434
import NCDatasets
3535

3636
using CairoMakie, GeoMakie, Poppler_jll, ClimaAnalysis
37-
LandSimVis =
38-
Base.get_extension(
39-
ClimaLand,
40-
:LandSimulationVisualizationExt,
41-
).LandSimulationVisualizationExt;
37+
import ClimaLand.LandSimVis as LandSimVis
4238

4339
const FT = Float64;
4440
time_interpolation_method = LinearInterpolation(PeriodicCalendar())

experiments/long_runs/land_region.jl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,7 @@ import ClimaLand.Simulations: LandSimulation, solve!
3838
using Dates
3939

4040
using CairoMakie, GeoMakie, Poppler_jll, ClimaAnalysis
41-
LandSimVis =
42-
Base.get_extension(
43-
ClimaLand,
44-
:LandSimulationVisualizationExt,
45-
).LandSimulationVisualizationExt;
41+
import ClimaLand.LandSimVis as LandSimVis
4642

4743
const FT = Float64;
4844
context = ClimaComms.context()

experiments/long_runs/snowy_land.jl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,7 @@ import ClimaLand.Simulations: LandSimulation, solve!
4040
using Dates
4141

4242
using CairoMakie, GeoMakie, Poppler_jll, ClimaAnalysis
43-
LandSimVis =
44-
Base.get_extension(
45-
ClimaLand,
46-
:LandSimulationVisualizationExt,
47-
).LandSimulationVisualizationExt;
43+
import ClimaLand.LandSimVis as LandSimVis
4844

4945
const FT = Float64;
5046
# If you want to do a very long run locally, you can enter `export

0 commit comments

Comments
 (0)