Calibrate PMLV2 model using FLUXNET data
US Twt (CRO, 2009)
using PML, Ipaper
df_out, df, _par = deserialize(file_FLUXNET_CRO_USTwt)
par = Param_PMLV2(; _par..., hc=0.5)
df.GPP_obs = df.GPPobs
df.ET_obs = df.ETobs
275-element Vector{Float64}:
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
⋮
1.60968225909663
1.27912555152687
1.06059787751179
0.779535860816098
0.578394230978662
0.332647468807178
0.50089104654852
1.26067990507329
1.35241601110533
模型参数率定
parNames = [
:α, :η, :g1, :Am_25, :VPDmin, :VPDmax, :D0, :kQ, :kA, :S_sls, :fER0 # :hc
]
theta, goal, flag = ModelCalib(df, par0, parNames)
df_out = PMLV2_sites(df; par=theta2par(theta, parNames))
df_out[1:10, :]
10×14 DataFrame
Row | ET | GPP | Ec | Ecr | Eca | Ei | Pi | Es_eq | Eeq | ET_water | Ga | Gc_w | fval_soil | Es |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | |
1 | 0.414697 | 0.545709 | 0.165042 | 0.00883793 | 0.156205 | 0.0153008 | 0.313699 | 0.234353 | 0.290273 | 0.858553 | 0.014428 | 0.00136352 | 1.0 | 0.234353 |
2 | 0.716772 | 1.09093 | 0.541877 | 0.0233499 | 0.518527 | 0.0 | 0.0 | 0.265969 | 0.368498 | 1.62444 | 0.0162197 | 0.00222434 | 0.657576 | 0.174895 |
3 | 0.902411 | 1.11298 | 0.440393 | 0.0696786 | 0.370714 | 0.0893813 | 0.877869 | 0.372637 | 0.576104 | 1.31439 | 0.0106403 | 0.00250303 | 1.0 | 0.372637 |
4 | 1.25377 | 1.89176 | 0.80629 | 0.109563 | 0.696727 | 0.0168142 | 0.130936 | 0.430665 | 0.741149 | 1.8532 | 0.0153346 | 0.00400455 | 1.0 | 0.430665 |
5 | 1.51155 | 2.04539 | 0.813452 | 0.162363 | 0.651089 | 0.256732 | 1.65602 | 0.441369 | 0.84345 | 1.7751 | 0.0147179 | 0.00453156 | 1.0 | 0.441369 |
6 | 1.52538 | 1.78246 | 0.485462 | 0.103802 | 0.38166 | 0.68448 | 8.02602 | 0.355437 | 0.752408 | 1.41139 | 0.0268158 | 0.00464504 | 1.0 | 0.355437 |
7 | 1.92613 | 2.66826 | 0.889583 | 0.285437 | 0.604146 | 0.579148 | 2.99185 | 0.457394 | 1.06993 | 1.78514 | 0.0164274 | 0.00637722 | 1.0 | 0.457394 |
8 | 2.03736 | 2.9364 | 0.903795 | 0.323217 | 0.580577 | 0.712139 | 4.23086 | 0.421428 | 1.10398 | 1.75211 | 0.0181245 | 0.00727743 | 1.0 | 0.421428 |
9 | 2.39085 | 4.92544 | 1.73869 | 0.795952 | 0.942739 | 0.00180662 | 0.00669338 | 0.650355 | 1.90304 | 2.80294 | 0.0131528 | 0.0108613 | 1.0 | 0.650355 |
10 | 2.55767 | 4.9414 | 1.78719 | 0.91494 | 0.872252 | 0.134092 | 0.447158 | 0.636383 | 2.0679 | 2.85248 | 0.0152381 | 0.0113444 | 1.0 | 0.636383 |
拟合优度
gof = [
(; var="ET", GOF(df.ET_obs, df_out.ET)...),
(; var="GPP", GOF(df.GPP_obs, df_out.GPP)...)] |> DataFrame
DataFrame(gof)
2×10 DataFrame
Row | var | NSE | R2 | KGE | R | RMSE | MAE | bias | bias_perc | n_valid |
---|---|---|---|---|---|---|---|---|---|---|
String | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Float64 | Int64 | |
1 | ET | 0.615196 | 0.617177 | 0.713556 | 0.785606 | 1.34366 | 0.993881 | -0.0778958 | -2.59433 | 263 |
2 | GPP | 0.544157 | 0.620855 | 0.468911 | 0.787944 | 3.30045 | 2.62295 | 0.63708 | 16.9614 | 260 |
绘图
using Plots
gr(framestyle=:box, titlefontsize=12)
t = df.date
inds = 1:46*1
function plot_var(var; label=string(var), title=string(var),
data=df_out, scale=1, kw...)
plot(t[inds], data[inds, var] * scale; label, title, kw...)
end
function plot_var!(p, var; label=string(var),
data=df_out, kw...)
plot!(p, t[inds], data[inds, var]; label, kw...)
end
p_et = plot(title="ET components (mm/d)")
plot_var!(p_et, :Ec)
plot_var!(p_et, :Es)
plot_var!(p_et, :Ei)
plot_var!(p_et, :ETobs; data=df, label="ET_obs", color=:black)
p_gpp = plot_var(:GPP; title="GPP (gC m-2 d-1)", label="GPP")
plot_var!(p_gpp, :GPPobs; data=df, label="GPP_obs", color=:black)
plot(
p_et, p_gpp,
plot_var(:Eeq; title="Eeq (mm/d)", label="Eeq"),
plot_var(:Gc_w; title="Conductance (m s-1)", label="Gc"),
plot_var(:fval_soil; title="β_soil", label="β_soil"),
plot_var(:VPD; data=df, scale=-1, title="-VPD (kPa)", label="-VPD"),
plot_var(:Pi; title="P - Ei (mm/d)"),
plot_var(:Es_eq; title="Es_eq (mm/d)"),
size=(800, 700),
layout=(4, 2),
)
This page was generated using Literate.jl.