2. NorthChina C3C4

using PenmanMonteithLeuning, Ipaper, Test, RTableTools

dir_root = "$(@__DIR__)/../../" |> abspath
data = fread("$dir_root/data/Forcing_C3C4_sp2.csv")
replace_missing!(data)
3967×13 DataFrame
3942 rows omitted
Row site date ET_obs GPP_obs Rn Rs Prcp Tavg VPD U2 Pa Ca LAI
String7 Date Float64 Float64 Float64 Float64 Float64 Float64 Float64 Float64 Float64 Float64 Float64
1 固城 2020-01-01 0.530538 1.70652 6.05163 89.5728 0.0 -5.53096 0.166687 0.655644 101.325 412.43 0.2
2 固城 2020-01-02 1.17986 0.891641 3.65701 74.5324 0.0 -3.63221 0.203813 0.463302 101.325 412.43 0.2
3 固城 2020-01-03 0.507802 1.11218 9.11226 82.891 0.0 -2.04656 0.26845 0.366287 101.325 412.43 0.2
4 固城 2020-01-04 0.639389 1.53028 11.488 86.9699 0.0 -0.673144 0.304251 0.54404 101.325 412.43 0.2
5 固城 2020-01-05 0.401485 1.72924 5.36459 31.3203 0.0 -0.554419 0.44767 1.63593 101.325 412.43 0.2
6 固城 2020-01-06 0.352672 1.63489 6.62139 48.8566 2.6 -0.198771 0.559177 0.426304 101.325 412.43 0.2
7 固城 2020-01-07 0.41034 1.43348 -5.13582 35.1992 0.0 -1.02898 0.404559 0.933315 101.325 412.43 0.2
8 固城 2020-01-08 -0.0842133 1.4032 15.4937 104.834 0.0 -1.54316 0.371452 0.71234 101.325 412.43 0.2
9 固城 2020-01-09 0.234851 1.71308 30.5025 89.9842 0.0 -2.82148 0.407567 0.585204 101.325 412.43 0.2
10 固城 2020-01-10 0.267995 1.85874 19.3131 84.7666 0.0 -1.73513 0.418387 0.552027 101.325 412.43 0.2
11 固城 2020-01-11 0.5812 1.33571 -3.10616 39.3625 0.0 -3.69319 0.308355 0.6638 101.325 412.43 0.2
12 固城 2020-01-12 0.844935 1.0941 8.74138 94.0332 0.0 -3.63165 0.29099 0.453004 101.325 412.43 0.2
13 固城 2020-01-13 0.34446 1.3812 10.6341 101.612 0.0 -4.45429 0.265746 0.483777 101.325 412.43 0.2
3956 禹城 2010-12-20 1.227 0.994925 -0.112333 82.2027 0.0 4.18246 0.339789 1.19246 101.481 390.34 0.3
3957 禹城 2010-12-21 0.797462 0.985958 -10.7624 80.078 0.0 4.52735 0.4269 0.944063 100.95 390.34 0.3
3958 禹城 2010-12-22 0.6596 1.33054 -17.845 79.8506 0.0 2.95302 0.456837 1.87465 101.331 390.34 0.3
3959 禹城 2010-12-23 0.926112 0.131809 -26.0213 72.1066 0.0 -1.79542 0.35548 4.73025 102.719 390.34 0.3
3960 禹城 2010-12-24 0.751704 0.0132105 -21.8582 113.342 0.0 -6.51777 0.155578 0.892125 103.35 390.34 0.3
3961 禹城 2010-12-25 0.73888 -0.0168908 -24.516 91.5869 0.0 -5.61671 0.19763 0.069375 102.425 390.34 0.3
3962 禹城 2010-12-26 0.658701 0.464063 -25.1962 106.49 0.0 -3.38248 0.222141 0.354125 101.463 390.34 0.3
3963 禹城 2010-12-27 0.50127 0.282353 -21.9344 64.9561 0.0 0.624104 0.289136 0.668292 100.844 390.34 0.3
3964 禹城 2010-12-28 0.561384 0.384923 -16.4177 120.223 0.0 -0.926458 0.176811 0.854479 101.646 390.34 0.3
3965 禹城 2010-12-29 0.710103 0.114883 -26.9787 69.1139 0.0 -0.324062 0.153707 3.24073 101.85 390.34 0.3
3966 禹城 2010-12-30 0.399544 0.0 -33.1562 118.44 0.0 -4.44437 0.0842493 4.02925 102.3 390.34 0.3
3967 禹城 2010-12-31 0.416367 -0.263003 -26.7204 122.377 0.0 -6.65656 0.113425 1.04904 102.565 390.34 0.3
df = data[data.site.=="固城", :]
# df = data[data.site.=="禹城", :]
# df.ET_obs = df.ET_obs ./ 0.9
par = par0
r = PMLV2(df; par)

parNames = [
  :α, :η, :g1, :VCmax25, :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))
Iteration =   0, nEvals = 115, Best Cost = -0.32853
Iteration =   1, nEvals = 293, Best Cost = -0.32853
Iteration =   2, nEvals = 477, Best Cost = -0.34825
Iteration =   3, nEvals = 670, Best Cost = -0.38699
Iteration =   4, nEvals = 858, Best Cost = -0.38940
Iteration =   5, nEvals = 1043, Best Cost = -0.39980
Iteration =   6, nEvals = 1229, Best Cost = -0.41595
Iteration =   7, nEvals = 1432, Best Cost = -0.41827
Iteration =   8, nEvals = 1624, Best Cost = -0.42468
Iteration =   9, nEvals = 1827, Best Cost = -0.42491
Iteration =  10, nEvals = 2029, Best Cost = -0.42722
Iteration =  11, nEvals = 2237, Best Cost = -0.42813
Iteration =  12, nEvals = 2443, Best Cost = -0.42818
Iteration =  13, nEvals = 2637, Best Cost = -0.42954
1045×14 DataFrame
1020 rows omitted
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.126002 1.43003 0.126002 0.00376597 0.122236 0.0 0.0 0.055448 0.0663718 0.459081 0.00452108 0.00162014 0.0 0.0
2 0.122516 1.33675 0.122516 0.00294718 0.119569 0.0 0.0 0.0364996 0.0436904 0.469777 0.00319476 0.00144931 0.0 0.0
3 0.14648 1.41728 0.14648 0.00905284 0.137427 0.0 0.0 0.0973117 0.116483 0.635481 0.00252579 0.00142241 0.0 0.0
4 0.189762 1.46037 0.189762 0.00976063 0.180002 0.0 0.0 0.129729 0.155287 0.770093 0.0037515 0.00141079 0.0 0.0
5 0.189253 0.824622 0.189253 0.00108568 0.188167 0.0 0.0 0.0608661 0.0728573 1.38361 0.0112808 0.000681501 0.0 0.0
6 0.29526 1.0932 0.215649 0.00472808 0.210921 0.0034269 2.59657 0.0761845 0.0911936 1.15361 0.00293964 0.000813054 1.0 0.0761845
7 0.117634 0.889848 0.174812 -0.00183202 0.176644 0.0 0.0 -0.0571773 -0.0684418 0.889258 0.0064358 0.000767554 1.0 -0.0571773
8 0.421913 1.56757 0.252981 0.0104521 0.242529 0.0 0.0 0.168932 0.202213 1.02203 0.00491204 0.00139848 1.0 0.168932
9 0.570105 1.46074 0.25482 0.02021 0.23461 0.0 0.0 0.315285 0.377399 1.25806 0.00403536 0.00124772 1.0 0.315285
10 0.243228 1.43422 0.243228 0.0139265 0.229302 0.0 0.0 0.208923 0.250083 1.11996 0.00380658 0.00121613 0.0 0.0
11 0.144761 0.944753 0.144761 -0.00140567 0.146167 0.0 0.0 -0.0309191 -0.0370105 0.664056 0.00457733 0.0008982 0.0 -0.0
12 0.175315 1.47912 0.175315 0.0070997 0.168215 0.0 0.0 0.0872474 0.104436 0.710074 0.00312375 0.00143588 0.0 0.0
13 0.172681 1.51609 0.172681 0.00817289 0.164508 0.0 0.0 0.10234 0.122502 0.692971 0.00333595 0.00151311 0.0 0.0
1034 0.507332 1.91239 0.507332 0.0671099 0.440222 0.0 0.0 0.508306 0.680822 2.26361 0.00371951 0.00094667 0.0 0.0
1035 0.659771 2.91473 0.659771 0.158781 0.50099 0.0 0.0 1.01201 1.34033 2.5555 0.00467052 0.00180295 0.0 0.0
1036 0.465605 2.49885 0.465605 0.073662 0.391943 0.0 0.0 0.514665 0.674018 1.67571 0.00452821 0.00180053 0.0 0.0
1037 1.09965 2.43759 0.640915 0.0654951 0.57542 0.00456196 1.69544 0.741866 0.971565 2.53699 0.00855074 0.0015003 0.612205 0.454174
1038 1.40338 2.47064 0.704156 0.0480722 0.656084 0.00487429 2.19513 0.694346 0.909332 2.89345 0.010733 0.00143 1.0 0.694346
1039 1.45073 2.70111 0.653257 0.076894 0.576363 0.00362495 0.196375 0.793849 1.03964 2.51287 0.00790872 0.00178821 1.0 0.793849
1040 1.2873 2.66086 0.512188 0.136406 0.375782 0.0 0.0 0.775114 1.01511 2.23561 0.00254739 0.0016407 1.0 0.775114
1041 0.702343 1.66109 0.40261 0.0318433 0.370767 0.00443702 1.49556 0.295296 0.386727 1.84751 0.00368507 0.00095423 1.0 0.295296
1042 0.974521 2.66441 0.454651 0.136948 0.317703 0.00362495 0.196375 0.69551 0.910857 2.02693 0.00205582 0.00165198 0.742254 0.516245
1043 0.882906 2.56655 0.484312 0.083909 0.400403 0.0 0.0 0.540865 0.70833 1.83672 0.00356878 0.00169351 0.736956 0.398594
1044 0.648697 1.67574 0.406261 0.0236156 0.382646 0.0 0.0 0.254762 0.333643 1.6878 0.005256 0.00104522 0.951617 0.242436
1045 0.873242 2.89795 0.787249 0.107617 0.679632 0.0 0.0 1.12474 1.47298 3.14201 0.00892024 0.00171276 0.0764563 0.0859932
sites = unique(df.site)
RES = []
for site in sites
  inds = df.site .== site
  d_obs = df[inds, :]
  d_sim = df_out[inds, :]

  gof = [
    (; var="ET", GOF(d_obs.ET_obs, d_sim.ET)...),
    (; var="GPP", GOF(d_obs.GPP_obs, d_sim.GPP)...)] |> DataFrame
  gof = gof[:, [:var, :NSE, :KGE, :R2, :bias_perc, :n_valid]]
  push!(RES, gof)
end
RES
1-element Vector{Any}:
 2×6 DataFrame
 Row │ var     NSE       KGE       R2        bias_perc  n_valid
 String  Float64   Float64   Float64   Float64    Int64
─────┼──────────────────────────────────────────────────────────
   1 │ ET      0.403063  0.63706   0.454071   -9.58134      927
   2 │ GPP     0.456019  0.612086  0.46946    -5.95595      927

PML-ET - 固城: 0.46 - 禹城: 0.63