PM-JPL 1.2.1__py3-none-any.whl → 1.7.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. PMJPL/ECOv002-cal-val-PM-JPL-inputs.csv +1048 -0
  2. PMJPL/ECOv002-cal-val-PM-JPL-outputs.csv +1048 -0
  3. PMJPL/ECOv002-static-tower-PM-JPL-inputs.csv +122 -0
  4. PMJPL/ECOv002_calval_PMJPL_inputs.py +19 -0
  5. PMJPL/ECOv002_static_tower_PMJPL_inputs.py +19 -0
  6. PMJPL/PMJPL.py +45 -378
  7. PMJPL/{parameters.py → PMJPL_parameter_from_IGBP.py} +22 -7
  8. PMJPL/VPD_factor.py +1 -1
  9. PMJPL/__init__.py +1 -6
  10. PMJPL/calculate_gamma.py +128 -0
  11. PMJPL/canopy_aerodynamic_resistance.py +151 -18
  12. PMJPL/canopy_conductance.py +71 -15
  13. PMJPL/closed_minimum_temperature.py +11 -0
  14. PMJPL/closed_vapor_pressure_deficit.py +11 -0
  15. PMJPL/constants.py +6 -1
  16. PMJPL/correctance_factor.py +56 -7
  17. PMJPL/generate_PMJPL_inputs.py +263 -0
  18. PMJPL/interception.py +1 -3
  19. PMJPL/leaf_conductance_to_evaporated_water.py +11 -0
  20. PMJPL/leaf_conductance_to_sensible_heat.py +58 -0
  21. PMJPL/maximum_boundary_layer_resistance.py +11 -0
  22. PMJPL/minimum_boundary_layer_resistance.py +11 -0
  23. PMJPL/{tmin_factor.py → minimum_temperature_factor.py} +2 -2
  24. PMJPL/mod16.csv +19 -0
  25. PMJPL/model.py +690 -0
  26. PMJPL/open_minimum_temperature.py +11 -0
  27. PMJPL/open_vapor_pressure_deficit.py +11 -0
  28. PMJPL/potential_soil_evaporation.py +2 -2
  29. PMJPL/potential_stomatal_conductance.py +11 -0
  30. PMJPL/process_PMJPL_table.py +208 -0
  31. PMJPL/process_daily_ET_table.py +40 -0
  32. PMJPL/transpiration.py +4 -4
  33. PMJPL/verify.py +77 -0
  34. PMJPL/version.py +4 -0
  35. PMJPL/wet_canopy_resistance.py +1 -0
  36. PMJPL/wet_soil_evaporation.py +4 -4
  37. {pm_jpl-1.2.1.dist-info → pm_jpl-1.7.0.dist-info}/METADATA +18 -21
  38. pm_jpl-1.7.0.dist-info/RECORD +42 -0
  39. {pm_jpl-1.2.1.dist-info → pm_jpl-1.7.0.dist-info}/WHEEL +1 -1
  40. PMJPL/MCD12C1/MCD12C1.py +0 -10
  41. PMJPL/MCD12C1/__init__.py +0 -1
  42. PMJPL/SEBAL/SEBAL.py +0 -45
  43. PMJPL/SEBAL/__init__.py +0 -1
  44. PMJPL/downscaling/__init__.py +0 -1
  45. PMJPL/downscaling/downscaling.py +0 -271
  46. PMJPL/downscaling/linear_downscale.py +0 -71
  47. PMJPL/evapotranspiration_conversion/__init__.py +0 -1
  48. PMJPL/evapotranspiration_conversion/evapotranspiration_conversion.py +0 -80
  49. PMJPL/fwet.py +0 -21
  50. PMJPL/meteorology_conversion/__init__.py +0 -1
  51. PMJPL/meteorology_conversion/meteorology_conversion.py +0 -123
  52. PMJPL/penman_monteith/__init__.py +0 -1
  53. PMJPL/penman_monteith/penman_monteith.py +0 -20
  54. PMJPL/priestley_taylor/__init__.py +0 -1
  55. PMJPL/priestley_taylor/priestley_taylor.py +0 -27
  56. PMJPL/santanello/__init__.py +0 -1
  57. PMJPL/santanello/santanello.py +0 -46
  58. PMJPL/soil_heat_flux/__init__.py +0 -1
  59. PMJPL/soil_heat_flux/soil_heat_flux.py +0 -62
  60. PMJPL/vegetation_conversion/__init__.py +0 -1
  61. PMJPL/vegetation_conversion/vegetation_conversion.py +0 -47
  62. PMJPL/verma_net_radiation/__init__.py +0 -1
  63. PMJPL/verma_net_radiation/verma_net_radiation.py +0 -108
  64. pm_jpl-1.2.1.dist-info/RECORD +0 -44
  65. {pm_jpl-1.2.1.dist-info → pm_jpl-1.7.0.dist-info}/licenses/LICENSE +0 -0
  66. {pm_jpl-1.2.1.dist-info → pm_jpl-1.7.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,122 @@
1
+ ID,name,elevation_km,IGBP,gl_sh,gl_e_wv,RBL_min,RBL_max,CL,Tmin_open,Tmin_closed,VPD_open,VPD_closed,geometry
2
+ US-NC3,NC_Clearcut#3,0.005,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-76.656 35.799)
3
+ PE-QFR,Quistococha Forest Reserve,0.104,2,0.01,0.01,70.0,100.0,0.0025,9.09,-8.0,1000.0,4000.0,POINT (-73.319 -3.8344)
4
+ US-Mi3,LTAR UCB (Upper Chesapeake Bay) Miscanthus 3,0.27,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-80.637 41.8222)
5
+ US-NC4,NC_AlligatorRiver,0.001,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-75.9038 35.7879)
6
+ CA-DB2,Delta Burns Bog 2,0.004,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-122.9951 49.119)
7
+ US-Sne,Sherman Island Restored Wetland,-0.005,13,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-121.7547 38.0369)
8
+ US-Mi1,LTAR UCB (Upper Chesapeake Bay) Miscanthus 1,0.29,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-80.6313 41.7727)
9
+ US-PFe,NW4 Lake-1 CHEESEHEAD 2019,0.48,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.3004 45.9793)
10
+ US-NR1,Niwot Ridge Forest (LTER NWT1),3.05,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-105.5464 40.0329)
11
+ US-Vcp,Valles Caldera Ponderosa Pine,2.542,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-106.5974 35.8624)
12
+ US-xAB,NEON Abby Road (ABBY),0.363,1,0.04,0.04,65.0,95.0,0.0032,8.31,-8.0,650.0,3000.0,POINT (-122.3303 45.7624)
13
+ US-HBK,Hubbard Brook Experimental Forest,0.367,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-71.7181 43.9397)
14
+ US-EDN,Eden Landing Ecological Reserve,,13,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-122.114 37.6156)
15
+ US-PFh,NE2 Pine-3 CHEESEHEAD 2019,0.463,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.2406 45.9557)
16
+ US-Me6,Metolius Young Pine Burn,0.998,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-121.6078 44.3233)
17
+ US-NC2,NC_Loblolly Plantation,0.005,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-76.6685 35.803)
18
+ US-Whs,Walnut Gulch Lucky Hills Shrub,1.37,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-110.0522 31.7438)
19
+ US-SRM,Santa Rita Mesquite,1.12,7,0.04,0.04,20.0,55.0,0.0065,8.8,-8.0,650.0,4400.0,POINT (-110.8661 31.8214)
20
+ US-CS1,Central Sands Irrigated Agricultural Field,0.328,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-89.5379 44.1031)
21
+ US-PFs,SE5 Aspen-5 CHEESEHEAD 2019,0.489,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.2382 45.9381)
22
+ US-PFg,NE1 Pine-2 CHEESEHEAD 2019,0.475,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.2723 45.9735)
23
+ US-Ha1,Harvard Forest EMS Tower (HFR1),0.34,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-72.1715 42.5378)
24
+ US-Ne2,Mead - irrigated maize-soybean rotation site,0.362,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-96.4701 41.1649)
25
+ US-PFm,SW3 Hardwood-2 CHEESEHEAD 2019,0.484,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.3099 45.9207)
26
+ US-PFr,SE4 Tussock-2 CHEESEHEAD 2019,0.49,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.2475 45.9245)
27
+ US-PFL,SW2 Aspen-3 CHEESEHEAD 2019,0.464,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.3177 45.9409)
28
+ US-PFj,NE4 Maple-1 CHEESEHEAD 2019,0.484,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.227 45.9619)
29
+ US-CC2,Coloma Corn 2,0.32,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-89.6196 44.1039)
30
+ US-NR3,Niwot Ridge Alpine (T-Van West),3.504,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-105.5864 40.052)
31
+ US-PFt,SE6 Pine-4 CHEESEHEAD 2019,0.466,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.2288 45.9197)
32
+ CA-Cbo,"Ontario - Mixed Deciduous, Borden Forest Site",0.12,9,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3600.0,POINT (-79.9333 44.3167)
33
+ PR-xLA,NEON Lajas Experimental Station (LAJA),0.024,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-67.0769 18.0212)
34
+ US-Ne3,Mead - rainfed maize-soybean rotation site,0.363,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-96.4397 41.1797)
35
+ US-PHM,Plum Island High Marsh,0.0014,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-70.8301 42.7423)
36
+ US-Tw1,Twitchell Wetland West Pond,-0.005,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-121.6469 38.1074)
37
+ US-Hn3,Hanford 100H sagebrush,0.12090000000000001,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-119.4614 46.6878)
38
+ US-PFk,SW1 Aspen-2 CHEESEHEAD 2019,0.476,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.3425 45.9149)
39
+ US-CS2,Tri county school Pine Forest,0.328,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-89.5002 44.1467)
40
+ US-ONA,Florida pine flatwoods,0.025,9,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3600.0,POINT (-81.9509 27.3836)
41
+ US-CC1,Coloma Corn 1,0.314,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-89.6787 44.0732)
42
+ US-Rls,RCEW Low Sagebrush,1.608,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-116.7356 43.1439)
43
+ US-UMd,UMBS Disturbance,0.239,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-84.6975 45.5625)
44
+ US-PFq,SE3 Aspen-4 CHEESEHEAD 2019,0.473,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.2475 45.9271)
45
+ US-PFn,SW4 Hardwood-3 CHEESEHEAD 2019,0.478,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.2823 45.9392)
46
+ US-HB3,Hobcaw Barony Longleaf Pine Restoration,0.0073,1,0.04,0.04,65.0,95.0,0.0032,8.31,-8.0,650.0,3000.0,POINT (-79.2322 33.3482)
47
+ US-DFC,"US Dairy Forage Research Center, Prairie du Sac",0.26489999999999997,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-89.7117 43.3448)
48
+ US-Wkg,Walnut Gulch Kendall Grasslands,1.531,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-109.9419 31.7365)
49
+ US-CF1,CAF-LTAR Cook East,0.794,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-117.0821 46.7815)
50
+ US-Ho2,Howland Forest (west tower),0.061,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-68.747 45.2091)
51
+ US-Snf,Sherman Barn,-0.004,0,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-121.7272 38.0402)
52
+ US-Me2,Metolius mature ponderosa pine,1.253,1,0.04,0.04,65.0,95.0,0.0032,8.31,-8.0,650.0,3000.0,POINT (-121.5574 44.4523)
53
+ US-CF3,CAF-LTAR Boyd North,0.795,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-117.1261 46.7551)
54
+ US-Ne1,Mead - irrigated continuous maize site,0.361,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-96.4766 41.1651)
55
+ US-Ha2,Harvard Forest Hemlock Site,0.36,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-72.1779 42.5393)
56
+ CA-Ca3,British Columbia - Pole sapling Douglas-fir stand,,1,0.04,0.04,65.0,95.0,0.0032,8.31,-8.0,650.0,3000.0,POINT (-124.9004 49.5346)
57
+ US-SP1,Slashpine-Austin Cary- 65yrs nat regen,0.05,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-82.2188 29.7381)
58
+ US-UMB,Univ. of Mich. Biological Station,0.234,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-84.7138 45.5598)
59
+ US-Bi1,Bouldin Island Alfalfa,-0.0027,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-121.4993 38.0992)
60
+ US-PFi,NE3 Hardwood-1 CHEESEHEAD 2019,0.488,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.2327 45.9749)
61
+ US-CF2,CAF-LTAR Cook West,0.807,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-117.0908 46.784)
62
+ US-KFS,Kansas Field Station,0.31,9,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3600.0,POINT (-95.1907 39.0561)
63
+ US-CMW,Charleston Mesquite Woodland,1.199,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-110.1777 31.6637)
64
+ US-Ro4,Rosemount Prairie,0.274,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-93.0723 44.6781)
65
+ US-PAS,"Florida, Paspalum notatum pasture",0.027100000000000003,9,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3600.0,POINT (-81.951 27.3944)
66
+ US-xYE,NEON Yellowstone Northern Range (Frog Rock) (YELL),2.116,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-110.5391 44.9535)
67
+ US-Los,Lost Creek,0.48,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-89.9792 46.0827)
68
+ US-PFd,NW3 Tussock-1 CHEESEHEAD 2019,0.473,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.301 45.9689)
69
+ US-KM4,KBS Marshall Farms Smooth Brome Grass (Ref),0.24630000000000002,9,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3600.0,POINT (-85.3301 42.4423)
70
+ US-Syv,Sylvania Wilderness Area,0.54,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-89.3477 46.242)
71
+ US-WCr,Willow Creek,0.52,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-90.0799 45.8059)
72
+ US-Rws,Reynolds Creek Wyoming big sagebrush,1.425,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-116.7132 43.1675)
73
+ US-xJE,NEON Jones Ecological Research Center (JERC),0.044,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-84.4686 31.1948)
74
+ US-SRG,Santa Rita Grassland,1.291,7,0.04,0.04,20.0,55.0,0.0065,8.8,-8.0,650.0,4400.0,POINT (-110.8277 31.7894)
75
+ US-xNW,NEON Niwot Ridge Mountain Research Station (NIWO),3.513,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-105.5824 40.0543)
76
+ US-Rms,RCEW Mountain Big Sagebrush,2.111,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-116.7486 43.0645)
77
+ US-NR4,Niwot Ridge Alpine (T-Van East),3.502,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-105.5859 40.052)
78
+ US-xDS,NEON Disney Wilderness Preserve (DSNY),0.015,9,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3600.0,POINT (-81.4362 28.125)
79
+ US-xJR,NEON Jornada LTER (JORN),1.329,7,0.04,0.04,20.0,55.0,0.0065,8.8,-8.0,650.0,4400.0,POINT (-106.8425 32.5907)
80
+ US-Bar,Bartlett Experimental Forest,0.272,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-71.2881 44.0646)
81
+ US-ALQ,Allequash Creek Site,,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-89.6067 46.0308)
82
+ US-MMS,Morgan Monroe State Forest,0.275,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-86.4131 39.3232)
83
+ US-UC1,LTAR UCB (Upper Chesapeake Bay) EC1,0.39,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-78.0056 40.7536)
84
+ US-PFb,NW1 Pine-1 CHEESEHEAD 2019,0.474,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.3232 45.972)
85
+ US-xDL,NEON Dead Lake (DELA),0.022,13,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-87.8039 32.5417)
86
+ US-xPU,NEON Pu'u Maka'ala Natural Area Reserve (PUUM),1.685,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-155.3173 19.5531)
87
+ US-xBL,NEON Blandy Experimental Farm (BLAN),0.183,9,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3600.0,POINT (-78.0716 39.0603)
88
+ US-xST,NEON Steigerwaldt Land Services (STEI),0.481,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-89.5864 45.5089)
89
+ US-xSB,NEON Ordway-Swisher Biological Station (OSBS),0.045,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-81.9934 29.6893)
90
+ US-xRN,NEON Oak Ridge National Lab (ORNL),0.334,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-84.2826 35.9641)
91
+ US-UC2,LTAR UCB (Upper Chesapeake Bay) EC2,0.396,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-77.9998 40.7559)
92
+ US-xTR,NEON Treehaven (TREE),0.472,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-89.5857 45.4937)
93
+ US-xRM,"NEON Rocky Mountain National Park, CASTNET (RMNP)",2.743,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-105.5459 40.2759)
94
+ US-Tw4,Twitchell East End Wetland,-0.005,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-121.6413 38.1027)
95
+ US-Bi2,Bouldin Island corn,-0.005,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-121.5351 38.1091)
96
+ US-Jo2,Jornada Experimental Range Mixed Shrubland,1.469,7,0.04,0.04,20.0,55.0,0.0065,8.8,-8.0,650.0,4400.0,POINT (-106.6032 32.5849)
97
+ US-CS5,Central Sands Irrigated Agricultural Field,0.328,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-89.5377 44.1095)
98
+ US-Mpj,Mountainair Pinyon-Juniper Woodland,2.138,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-106.2377 34.4384)
99
+ US-xWR,NEON Wind River Experimental Forest (WREF),0.407,1,0.04,0.04,65.0,95.0,0.0032,8.31,-8.0,650.0,3000.0,POINT (-121.9519 45.8205)
100
+ US-xUK,NEON The University of Kansas Field Station (UKFS),0.335,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-95.1921 39.0404)
101
+ US-xUN,NEON University of Notre Dame Environmental Research Center (UNDE),0.518,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-89.5373 46.2339)
102
+ US-xBR,NEON Bartlett Experimental Forest (BART),0.232,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-71.2873 44.0639)
103
+ US-CF4,CAF-LTAR Boyd South,0.795,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-117.1285 46.7518)
104
+ US-xCL,NEON LBJ National Grassland (CLBJ),0.259,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-97.57 33.4012)
105
+ CA-DBB,Delta Burns Bog,0.004,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-122.9849 49.1293)
106
+ US-Hn2,Hanford 100H grassland,0.1175,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-119.4641 46.6889)
107
+ US-PFp,SE2 Hardwood-4 CHEESEHEAD 2019,0.497,5,0.04,0.04,65.0,95.0,0.0025,9.5,-7.0,650.0,2900.0,POINT (-90.2641 45.9365)
108
+ US-xKA,NEON Konza Prairie Biological Station - Relocatable (KONA),1.329,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-96.6129 39.1104)
109
+ US-CS3,Central Sands Irrigated Agricultural Field,0.328,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-89.5727 44.1394)
110
+ US-xTE,NEON Lower Teakettle (TEAK),2.147,9,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3600.0,POINT (-119.006 37.0058)
111
+ US-Rwf,RCEW Upper Sheep Prescibed Fire,1.878,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-116.7231 43.1207)
112
+ US-xML,NEON Mountain Lake Biological Station (MLBS),1.126,4,0.01,0.01,65.0,100.0,0.0028,9.94,-6.0,650.0,2900.0,POINT (-80.5248 37.3783)
113
+ US-UiB,University of Illinois Miscanthus,0.224,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-88.1984 40.0628)
114
+ PR-xGU,NEON Guanica Forest (GUAN),0.143,8,0.08,0.08,25.0,45.0,0.0065,11.39,-8.0,650.0,3500.0,POINT (-66.8687 17.9696)
115
+ US-ARM,ARM Southern Great Plains site- Lamont,0.314,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-97.4888 36.6058)
116
+ US-Kon,Konza Prairie LTER (KNZ),0.417,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-96.5603 39.0824)
117
+ US-HB2,Hobcaw Barony Mature Longleaf Pine,0.0047,1,0.04,0.04,65.0,95.0,0.0032,8.31,-8.0,650.0,3000.0,POINT (-79.244 33.3242)
118
+ US-xSL,"NEON North Sterling, CO (STER)",1.364,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-103.0293 40.4619)
119
+ US-xWD,NEON Woodworth (WOOD),0.579,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-99.2414 47.1282)
120
+ US-CS4,Central Sands Irrigated Agricultural Field,0.328,12,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4500.0,POINT (-89.5475 44.1597)
121
+ US-xAE,NEON Klemme Range Research Station (OAES),0.516,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-99.0588 35.4106)
122
+ US-GLE,GLEES,3.197,10,0.02,0.02,20.0,50.0,0.007,12.02,-8.0,650.0,4200.0,POINT (-106.2399 41.3665)
@@ -0,0 +1,19 @@
1
+ import os
2
+ import pandas as pd
3
+
4
+ def load_ECOv002_calval_PMJPL_inputs() -> pd.DataFrame:
5
+ """
6
+ Load the input data for the PM-JPL model from the ECOSTRESS Collection 2 Cal-Val dataset.
7
+
8
+ Returns:
9
+ pd.DataFrame: A DataFrame containing the input data.
10
+ """
11
+
12
+ # Define the path to the input CSV file relative to this module's directory
13
+ module_dir = os.path.dirname(os.path.abspath(__file__))
14
+ input_file_path = os.path.join(module_dir, "ECOv002-cal-val-PM-JPL-inputs.csv")
15
+
16
+ # Load the input data into a DataFrame
17
+ inputs_df = pd.read_csv(input_file_path)
18
+
19
+ return inputs_df
@@ -0,0 +1,19 @@
1
+ import os
2
+ import pandas as pd
3
+
4
+ def load_ECOv002_static_tower_PMJPL_inputs() -> pd.DataFrame:
5
+ """
6
+ Load the input data for the PM-JPL model from the ECOSTRESS Collection 2 Cal-Val dataset.
7
+
8
+ Returns:
9
+ pd.DataFrame: A DataFrame containing the input data.
10
+ """
11
+
12
+ # Define the path to the input CSV file relative to this module's directory
13
+ module_dir = os.path.dirname(os.path.abspath(__file__))
14
+ input_file_path = os.path.join(module_dir, "ECOv002-static-tower-PM-JPL-inputs.csv")
15
+
16
+ # Load the input data into a DataFrame
17
+ inputs_df = pd.read_csv(input_file_path)
18
+
19
+ return inputs_df
PMJPL/PMJPL.py CHANGED
@@ -1,3 +1,4 @@
1
+
1
2
  """
2
3
  MOD16 model of evapotranspiration
3
4
 
@@ -6,401 +7,67 @@ https://landweb.nascom.nasa.gov/QA_WWW/forPage/user_guide/MOD16UsersGuide2016.pd
6
7
 
7
8
  Developed by Gregory Halverson in the Jet Propulsion Laboratory Year-Round Internship Program (Columbus Technologies and Services), in coordination with the ECOSTRESS mission and master's thesis studies at California State University, Northridge.
8
9
  """
10
+
11
+ # All imports moved to the top
9
12
  import logging
10
- from typing import Callable, Dict, Union
13
+ from typing import Dict, Union
11
14
  from datetime import datetime
12
- from os.path import join, abspath, dirname, expanduser
13
15
 
14
16
  import numpy as np
15
- import pandas as pd
16
- from numpy import where, nan, exp, array, isnan, logical_and, clip, float32
17
- import warnings
17
+ import rasters as rt
18
+ from rasters import Raster, RasterGrid, RasterGeometry, VectorGeometry
18
19
 
19
- import rasters as rt
20
+ from check_distribution import check_distribution
21
+ from GEOS5FP import GEOS5FP
22
+ from NASADEM import NASADEM
23
+ from verma_net_radiation import verma_net_radiation
24
+ from SEBAL_soil_heat_flux import calculate_SEBAL_soil_heat_flux
25
+ from MCD12C1_2019_v006 import load_MCD12C1_IGBP
20
26
 
21
- from rasters import Raster, RasterGrid, RasterGeometry
27
+ from carlson_leaf_area_index import carlson_leaf_area_index
28
+ from carlson_fractional_vegetation_cover import carlson_fractional_vegetation_cover
29
+ from carlson_leaf_area_index import carlson_leaf_area_index
22
30
 
23
- from .MCD12C1.MCD12C1 import load_MCD12C1_IGBP
24
- from .parameters import MOD16_parameter_from_IGBP
25
- from .evapotranspiration_conversion.evapotranspiration_conversion import lambda_Jkg_from_Ta_C
26
- from .meteorology_conversion.meteorology_conversion import SVP_Pa_from_Ta_C, calculate_specific_heat, calculate_surface_pressure, celcius_to_kelvin
27
- from .penman_monteith.penman_monteith import calculate_gamma
28
- from .priestley_taylor.priestley_taylor import delta_Pa_from_Ta_C, delta_kPa_from_Ta_C
31
+ from daylight_evapotranspiration import lambda_Jkg_from_Ta_C
29
32
 
30
- from .soil_heat_flux import calculate_soil_heat_flux
31
- from .evapotranspiration_conversion import daily_ET_from_daily_LE
32
- from .meteorology_conversion import kelvin_to_celsius, calculate_specific_humidity, calculate_air_density
33
- from .vegetation_conversion.vegetation_conversion import FVC_from_NDVI, LAI_from_NDVI
33
+ from meteorology_conversion import SVP_Pa_from_Ta_C
34
+ from meteorology_conversion import calculate_air_density
35
+ from meteorology_conversion import calculate_specific_heat
36
+ from meteorology_conversion import calculate_specific_humidity
37
+ from meteorology_conversion import calculate_surface_pressure
38
+ from meteorology_conversion import celcius_to_kelvin
34
39
 
35
- from .constants import *
40
+ from priestley_taylor import delta_Pa_from_Ta_C
41
+ from PTJPL import calculate_relative_surface_wetness
42
+ from PTJPL import RH_THRESHOLD, MIN_FWET
36
43
 
37
- from .fwet import calculate_fwet
44
+ from .constants import *
45
+ from .PMJPL_parameter_from_IGBP import PMJPL_parameter_from_IGBP
46
+ from .calculate_gamma import calculate_gamma
38
47
  from .soil_moisture_constraint import calculate_fSM
39
- from .tmin_factor import calculate_tmin_factor
40
- from .correctance_factor import calculate_rcorr
48
+ from .minimum_temperature_factor import Tmin_factor
49
+ from .correctance_factor import calculate_correctance_factor
41
50
  from .VPD_factor import calculate_VPD_factor
42
-
43
51
  from .canopy_conductance import calculate_canopy_conductance
44
-
45
52
  from .wet_canopy_resistance import calculate_wet_canopy_resistance
46
- from .canopy_aerodynamic_resistance import calculate_rtotc
47
-
53
+ from .canopy_aerodynamic_resistance import calculate_canopy_aerodynamic_resistance
48
54
  from .wet_soil_evaporation import calculate_wet_soil_evaporation
49
55
  from .potential_soil_evaporation import calculate_potential_soil_evaporation
50
56
  from .interception import calculate_interception
51
57
  from .transpiration import calculate_transpiration
58
+ from .leaf_conductance_to_sensible_heat import leaf_conductance_to_sensible_heat
59
+ from .potential_stomatal_conductance import potential_stomatal_conductance
60
+ from .open_minimum_temperature import open_minimum_temperature
61
+ from .closed_minimum_temperature import closed_minimum_temperature
62
+ from .open_vapor_pressure_deficit import open_vapor_pressure_deficit
63
+ from .closed_vapor_pressure_deficit import closed_vapor_pressure_deficit
64
+ from .leaf_conductance_to_evaporated_water import leaf_conductance_to_evaporated_water
65
+ from .maximum_boundary_layer_resistance import maximum_boundary_layer_resistance
66
+ from .minimum_boundary_layer_resistance import minimum_boundary_layer_resistance
67
+ from .model import PMJPL
68
+ from .process_PMJPL_table import process_PMJPL_table
69
+ from .ECOv002_static_tower_PMJPL_inputs import load_ECOv002_static_tower_PMJPL_inputs
70
+ from .ECOv002_calval_PMJPL_inputs import load_ECOv002_calval_PMJPL_inputs
71
+ from .verify import verify
52
72
 
53
73
  __author__ = 'Qiaozhen Mu, Maosheng Zhao, Steven W. Running, Gregory Halverson'
54
-
55
- logger = logging.getLogger(__name__)
56
-
57
- DEFAULT_WORKING_DIRECTORY = "."
58
- DEFAULT_MOD16_INTERMEDIATE = "MOD16_intermediate"
59
-
60
- DEFAULT_OUTPUT_VARIABLES = [
61
- 'LEi',
62
- 'LEc',
63
- 'LEs',
64
- 'LE',
65
- 'LE_daily',
66
- 'ET_daily_kg'
67
- ]
68
-
69
- def PMJPL(
70
- Rn: Union[Raster, np.ndarray],
71
- G: Union[Raster, np.ndarray],
72
- NDVI: Union[Raster, np.ndarray],
73
- Ta_C: Union[Raster, np.ndarray],
74
- Tmin_C: Union[Raster, np.ndarray],
75
- RH: Union[Raster, np.ndarray],
76
- IGBP: Union[Raster, np.ndarray],
77
- Ps_Pa: Union[Raster, np.ndarray] = None,
78
- elevation_m: Union[Raster, np.ndarray] = None,
79
- delta_Pa: Union[Raster, np.ndarray] = None,
80
- gamma_Jkg: Union[Raster, np.ndarray, float] = None) -> Dict[str, Raster]:
81
- results = {}
82
-
83
- # calculate leaf area index if it's not given
84
- if LAI is None:
85
- # calculate leaf area index from NDVI
86
- LAI = LAI_from_NDVI(NDVI)
87
-
88
- # calculate fraction of vegetation cover if it's not given
89
- if FVC is None:
90
- # calculate fraction of vegetation cover from NDVI
91
- FVC = FVC_from_NDVI(NDVI)
92
-
93
- # calculate surface air pressure if it's not given
94
- if Ps_Pa is None:
95
- # calculate surface air pressure is Pascal
96
- Ps_Pa = calculate_surface_pressure(elevation_m=elevation_m, Ta_C=Ta_C)
97
-
98
- # calculate Penman-Monteith/Priestley-Taylor delta term if it's not given
99
- if delta_Pa is None:
100
- # calculate Penman-Monteith/Priestley-Taylor delta term in Pascal per degree Celsius
101
- delta_Pa = delta_Pa_from_Ta_C(Ta_C)
102
-
103
- # calculate latent heat of vaporization if it's not given
104
- if lambda_Jkg is None:
105
- # calculate latent heat of vaporization in Joules per kilogram
106
- lambda_Jkg = lambda_Jkg_from_Ta_C(Ta_C)
107
-
108
- logger.info("calculating PM-MOD meteorology")
109
-
110
- # calculate air temperature in Kelvin
111
- Ta_K = celcius_to_kelvin(Ta_C)
112
-
113
- # calculate saturation vapor pressure in Pascal from air temperature in Celsius
114
- SVP_Pa = SVP_Pa_from_Ta_C(Ta_C)
115
-
116
- # calculate vapor pressure in Pascal from releative humidity and saturation vapor pressure
117
- Ea_Pa = RH * SVP_Pa
118
-
119
- # specific humidity of air
120
- # as a ratio of kilograms of water to kilograms of air and water
121
- # from surface pressure and actual water vapor pressure
122
- specific_humidity = calculate_specific_humidity(Ea_Pa, Ps_Pa)
123
- results['specific_humidity'] = specific_humidity
124
-
125
- # calculate air density (rho) in kilograms per cubic meter
126
- rho_kgm3 = calculate_air_density(Ps_Pa, Ta_K, specific_humidity)
127
- results["rho_kgm3"] = rho_kgm3
128
-
129
- # calculate specific heat capacity of the air (Cp)
130
- # in joules per kilogram per kelvin
131
- # from specific heat of water vapor (CPW)
132
- # and specific heat of dry air (CPD)
133
- Cp_Jkg = calculate_specific_heat(specific_humidity)
134
- results["Cp"] = Cp_Jkg
135
-
136
- # calculate delta term if it's not given
137
- if delta_Pa is None:
138
- # slope of saturation vapor pressure curve in Pascal per degree
139
- delta_Pa = delta_Pa_from_Ta_C(Ta_C)
140
-
141
- results["delta_Pa"] = delta_Pa
142
-
143
- # calculate gamma term if it's not given
144
- if gamma_Jkg is None:
145
- # calculate psychrometric gamma in Joules per kilogram
146
- gamma_Jkg = calculate_gamma(
147
- Ta_C=Ta_C,
148
- Ps_Pa=Ps_Pa,
149
- Cp_Jkg=Cp_Jkg
150
- )
151
-
152
- # vapor pressure deficit in Pascal
153
- VPD_Pa = rt.clip(SVP_Pa - Ea_Pa, 0.0, None)
154
-
155
- # calculate relative surface wetness (fwet)
156
- # from relative humidity
157
- fwet = calculate_fwet(RH)
158
- results['fwet'] = fwet
159
-
160
- logger.info("calculating PM-MOD resistances")
161
-
162
- # query leaf conductance to sensible heat (gl_sh) in seconds per meter
163
- gl_sh = MOD16_parameter_from_IGBP(
164
- variable="gl_sh",
165
- IGBP=IGBP
166
- )
167
-
168
- results['gl_sh'] = gl_sh
169
-
170
- # calculate wet canopy resistance to sensible heat (rhc) in seconds per meter
171
- # from leaf conductance to sensible heat (gl_sh), LAI, and relative surface wetness (fwet)
172
- rhc = calculate_wet_canopy_resistance(gl_sh, LAI, fwet)
173
- results['rhc'] = rhc
174
-
175
- # calculate resistance to radiative heat transfer through air (rrc)
176
- rrc = float32(rho_kgm3 * Cp_Jkg / (4.0 * SIGMA * Ta_K ** 3.0))
177
- results['rrc'] = rrc
178
-
179
- # calculate aerodynamic resistance (rhrc)
180
- # in seconds per meter
181
- # from wet canopy resistance to sensible heat
182
- # and resistance to radiative heat transfer through air
183
- rhrc = float32((rhc * rrc) / (rhc + rrc))
184
- results['rhrc'] = rhrc
185
-
186
- # calculate leaf conductance to evaporated water vapor (gl_e_wv)
187
- gl_e_wv = MOD16_parameter_from_IGBP(
188
- variable="gl_e_wv",
189
- IGBP=IGBP
190
- )
191
-
192
- results['gl_e_wv'] = gl_e_wv
193
-
194
- rvc = calculate_wet_canopy_resistance(gl_e_wv, LAI, fwet)
195
- results['rvc'] = rvc
196
-
197
- # caluclate available radiation to the canopy (Ac)
198
- # in watts per square meter
199
- # this is the same as net radiation to the canopy in PT-JPL
200
- Ac = Rn * FVC
201
- results['Ac'] = Ac
202
-
203
- # calculate wet latent heat flux (LEi)
204
- # in watts per square meter
205
- LEi = calculate_interception(
206
- delta_Pa=delta_Pa,
207
- Ac=Ac,
208
- rho=rho_kgm3,
209
- Cp=Cp_Jkg,
210
- VPD_Pa=VPD_Pa,
211
- FVC=FVC,
212
- rhrc=rhrc,
213
- fwet=fwet,
214
- rvc=rvc,
215
- gamma_Jkg=gamma_Jkg
216
- )
217
-
218
- results['LEi'] = LEi
219
-
220
- # calculate correctance factor (rcorr)
221
- # for stomatal and cuticular conductances
222
- # from surface pressure and air temperature
223
- rcorr = calculate_rcorr(Ps_Pa, Ta_K)
224
- results['rcorr'] = rcorr
225
-
226
- # query biome-specific mean potential stomatal conductance per unit leaf area
227
- CL = MOD16_parameter_from_IGBP(
228
- variable="CL",
229
- IGBP=IGBP
230
- )
231
-
232
- results['CL'] = CL
233
-
234
- # query open minimum temperature by land-cover
235
- tmin_open = MOD16_parameter_from_IGBP(
236
- variable="tmin_open",
237
- IGBP=IGBP
238
- )
239
-
240
- results['tmin_open'] = tmin_open
241
-
242
- # query closed minimum temperature by land-cover
243
- tmin_close = MOD16_parameter_from_IGBP(
244
- variable="tmin_close",
245
- IGBP=IGBP
246
- )
247
-
248
- results['tmin_close'] = tmin_close
249
-
250
- # calculate minimum temperature factor for stomatal conductance
251
- mTmin = calculate_tmin_factor(Tmin_C, tmin_open, tmin_close, IGBP)
252
- results['mTmin'] = mTmin
253
-
254
- # query open vapor pressure deficit by land-cover
255
- VPD_open = MOD16_parameter_from_IGBP(
256
- variable="VPD_open",
257
- IGBP=IGBP
258
- )
259
-
260
- results['vpd_open'] = VPD_open
261
-
262
- # query closed vapor pressure deficit by land-cover
263
- VPD_close = MOD16_parameter_from_IGBP(
264
- variable="VPD_close",
265
- IGBP=IGBP
266
- )
267
-
268
- results['vpd_close'] = VPD_close
269
-
270
- # calculate vapor pressure deficit factor for stomatal conductance
271
- mVPD = calculate_VPD_factor(VPD_open, VPD_close, VPD_Pa)
272
- results['mVPD'] = mVPD
273
-
274
- # calculate stomatal conductance (gs1)
275
- gs1 = CL * mTmin * mVPD * rcorr
276
- results['gs1'] = gs1
277
-
278
- # correct cuticular conductance constant to leaf cuticular conductance (Gcu) using correction factor (rcorr)
279
- Gcu = CUTICULAR_CONDUCTANCE * rcorr
280
- results['Gcu'] = Gcu
281
-
282
- # calculate canopy conductance
283
- # equivalent to g_canopy
284
- Cc = calculate_canopy_conductance(LAI, fwet, gl_sh, gs1, Gcu)
285
- results['Cc'] = Cc
286
-
287
- # calculate surface resistance to evapotranspiration as inverse of canopy conductance (Cc)
288
- rs = rt.clip(1.0 / Cc, 0.0, MAX_RESISTANCE)
289
- results['rs'] = rs
290
-
291
- # calculate convective heat transfer as inverse of leaf conductance to sensible heat (gl_sh)
292
- rh = 1.0 / gl_sh
293
- results['rh'] = rs
294
-
295
- # calculate radiative heat transfer (rr)
296
- rr = rho_kgm3 * Cp_Jkg / (4.0 * SIGMA * Ta_K ** 3)
297
- results['rr'] = rr
298
-
299
- # calculate parallel resistance (ra)
300
- # MOD16 user guide is not clear about what to call this
301
- ra = (rh * rr) / (rh + rr)
302
- results["ra"] = ra
303
-
304
- # calculate transpiration
305
- LEc = calculate_transpiration(
306
- delta_Pa=delta_Pa,
307
- Ac=Ac,
308
- rho=rho_kgm3,
309
- Cp_Jkg=Cp_Jkg,
310
- VPD_Pa=VPD_Pa,
311
- FVC=FVC,
312
- ra=ra,
313
- fwet=fwet,
314
- rs=rs,
315
- gamma_Jkg=gamma_Jkg
316
- )
317
-
318
- results['LEc'] = LEc
319
-
320
- # soil evaporation
321
-
322
- # query aerodynamic resistant constraints from land-cover
323
- rbl_max = MOD16_parameter_from_IGBP(
324
- variable="rbl_max",
325
- IGBP=IGBP
326
- )
327
-
328
- results['rbl_max'] = rbl_max
329
-
330
- rbl_min = MOD16_parameter_from_IGBP(
331
- variable="rbl_min",
332
- IGBP=IGBP
333
- )
334
-
335
- results['rbl_min'] = rbl_min
336
-
337
- rtotc = calculate_rtotc(VPD_Pa, VPD_open, VPD_close, rbl_max, rbl_min)
338
- results['rtotc'] = rtotc
339
-
340
- # calculate total aerodynamic resistance
341
- # by applying correction to total canopy resistance
342
- rtot = rcorr * rtotc
343
- results['rtot'] = rtot
344
-
345
- # calculate resistance to radiative heat transfer through air
346
- rrs = float32(rho_kgm3 * Cp_Jkg / (4.0 * SIGMA * Ta_K ** 3))
347
- results['rrs'] = rrs
348
-
349
- # calculate aerodynamic resistance at the soil surface
350
- ras = (rtot * rrs) / (rtot + rrs)
351
- results['ras'] = ras
352
-
353
- # calculate available radiation at the soil
354
- Asoil = rt.clip((1.0 - FVC) * Rn - G, 0.0, None)
355
- results['Asoil'] = Asoil
356
-
357
- # separate wet soil evaporation and potential soil evaporation
358
-
359
- # calculate wet soil evaporation
360
- LE_soil_wet = calculate_wet_soil_evaporation(
361
- delta_Pa=delta_Pa,
362
- Asoil=Asoil,
363
- rho=rho_kgm3,
364
- Cp_Jkg=Cp_Jkg,
365
- FVC=FVC,
366
- VPD_Pa=VPD_Pa,
367
- ras=ras,
368
- fwet=fwet,
369
- rtot=rtot,
370
- gamma_Jkg=gamma_Jkg
371
- )
372
-
373
- results['LE_soil_wet'] = LE_soil_wet
374
-
375
- # calculate potential soil evaporation
376
- LE_soil_pot = calculate_potential_soil_evaporation(
377
- delta_Pa=delta_Pa,
378
- Asoil=Asoil,
379
- rho=rho_kgm3,
380
- Cp_Jkg=Cp_Jkg,
381
- FVC=FVC,
382
- VPD_Pa=VPD_Pa,
383
- ras=ras,
384
- fwet=fwet,
385
- rtot=rtot,
386
- gamma_Jkg=gamma_Jkg
387
- )
388
-
389
- results['LE_soil_pot'] = LE_soil_pot
390
-
391
- # calculate soil moisture constraint
392
- fSM = calculate_fSM(RH, VPD_Pa)
393
- results['fSM'] = fSM
394
-
395
- # calculate soil evaporation
396
- LEs = rt.clip(LE_soil_wet + LE_soil_pot * fSM, 0.0, None)
397
-
398
- # fill soil evaporation with zero
399
- LEs = rt.where(isnan(LEs), 0.0, LEs)
400
- results['LEs'] = LEs
401
-
402
- # sum partitions into total latent heat flux
403
- LE = rt.clip(LEi + LEc + LEs, 0.0, Rn)
404
- results['LE'] = LE
405
-
406
- return results
@@ -3,13 +3,20 @@ from os.path import join, abspath, dirname
3
3
  import numpy as np
4
4
  import pandas as pd
5
5
 
6
- from rasters import Raster, RasterGeometry
6
+ from rasters import Raster, RasterGeometry, SpatialGeometry
7
7
 
8
- from .MCD12C1.MCD12C1 import load_MCD12C1_IGBP
8
+ from MCD12C1_2019_v006 import load_MCD12C1_IGBP
9
+
10
+ from .constants import *
9
11
 
10
12
  LUT = pd.read_csv(join(abspath(dirname(__file__)), 'mod16.csv'))
11
13
 
12
- def MOD16_parameter_from_IGBP(variable: str, IGBP: Union[Raster, np.ndarray] = None, geometry: RasterGeometry = None) -> Union[Raster, np.ndarray]:
14
+ def PMJPL_parameter_from_IGBP(
15
+ variable: str,
16
+ IGBP: Union[Raster, np.ndarray] = None,
17
+ geometry: SpatialGeometry = None,
18
+ IGBP_upsampling_resolution_meters: int = IGBP_UPSAMPLING_RESOLUTION_METERS,
19
+ resampling=IGBP_PARAMETER_RESAMPLING) -> Union[Raster, np.ndarray]:
13
20
  """
14
21
  Translates the IGBP (International Geosphere-Biosphere Programme) values to the corresponding values in the Look-Up Table (LUT) for a given variable.
15
22
 
@@ -28,14 +35,22 @@ def MOD16_parameter_from_IGBP(variable: str, IGBP: Union[Raster, np.ndarray] = N
28
35
 
29
36
  Returns:
30
37
  Union[np.ndarray, Raster]: The translated values.
31
-
32
38
  """
39
+ if geometry is None and isinstance(IGBP, Raster):
40
+ geometry = IGBP.geometry
41
+
42
+ if isinstance(geometry, RasterGeometry):
43
+ IGBP_geometry = geometry.UTM(IGBP_upsampling_resolution_meters)
44
+ else:
45
+ IGBP_geometry = geometry
46
+
33
47
  if IGBP is None:
34
- IGBP = load_MCD12C1_IGBP(geometry=geometry)
48
+ IGBP = load_MCD12C1_IGBP(geometry=IGBP_geometry)
35
49
 
36
50
  result = np.float32(np.array(LUT[variable])[np.array(IGBP).astype(int)])
37
51
 
38
- if isinstance(IGBP, Raster):
39
- result = Raster(result, geometry=IGBP.geometry)
52
+ if isinstance(IGBP, Raster) or isinstance(geometry, RasterGeometry):
53
+ result = Raster(result, geometry=IGBP_geometry)
54
+ result = result.to_geometry(geometry, resampling=resampling)
40
55
 
41
56
  return result
PMJPL/VPD_factor.py CHANGED
@@ -20,7 +20,7 @@ def calculate_VPD_factor(
20
20
  """
21
21
  # calculate VPD factor using queried open and closed VPD
22
22
  mVPD = rt.where(VPD <= VPD_open, 1.0, np.nan)
23
- mVPD = rt.where(rt.logical_and(VPD_open < VPD, VPD < VPD_close), (VPD_close - VPD) / (VPD_close - VPD_open), mVPD)
23
+ mVPD = rt.where(np.logical_and(VPD_open < VPD, VPD < VPD_close), (VPD_close - VPD) / (VPD_close - VPD_open), mVPD)
24
24
  mVPD = rt.where(VPD >= VPD_close, 0.0, mVPD)
25
25
 
26
26
  return mVPD