33 - 光合作用与荧光源项¶
本章计算叶片的光合速率、气孔导度和随光合状态变化的叶绿素荧光。光合作用使用 Farquhar–von Caemmerer–Berry 模型,气孔导度使用 Ball–Berry 模型。叶温可以给定,也可以与能量平衡一起求解,三者在同一个耦合状态中完成。
所需属性¶
参与光合作用和荧光计算的叶片需要四类属性:
| 物理域 | 属性 | 作用 |
|---|---|---|
| 光学 | Fluspect |
叶片的反射、透射、吸收和荧光光谱 |
| 热 | ThermalProperty |
初始温度和发射率 |
| 生物物理 | BiophysicalProperty |
叶宽、气孔所在面、热量和水汽交换 |
| 生理 | Farquhar |
光合作用和气孔导度参数 |
import less
scene = less.Scene()
scene.size = 6.0
scene.terrain = less.Terrain(property=less.Lambertian(reflectance=0.15))
scene.terrain.set_property(less.ThermalProperty(temperature=300.0, emissivity=0.95))
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150), atmosphere=less.NoAtmosphere())
plant = less.Object("plant")
plant.add_component("leaves", less.Mesh(less.asset_path("tutorial_tree.obj"), group="leaves"))
plant.set_property("leaves", less.Fluspect(N=1.5, cab=45, car=10, cw=0.012, cm=0.006,
fqe="dynamic"))
plant.set_property("leaves", less.ThermalProperty(temperature="air", emissivity=0.98))
plant.set_property("leaves", less.BiophysicalProperty(leaf_width=0.05, stomata_side="bottom"))
plant.set_property("leaves", less.Farquhar(Vcmax25=60.0))
scene.add(plant, positions=[(3, 3, 0)])
fqe="dynamic" 表示荧光产额由光合状态决定。
光合模型¶
Farquhar() 默认使用 SCOPE 的 C3 光合方程(formulation="scope"),以 Vcmax25 为主要参数:
需要单独给出最大电子传递速率时,使用 formulation="jmax",不给 Jmax25 时取 2 × Vcmax25:
| 参数 | 含义 |
|---|---|
Vcmax25 |
25 °C 时的最大羧化速率(µmol m⁻² s⁻¹) |
Jmax25 |
25 °C 时的最大电子传递速率,仅用于 "jmax" |
Rd25_ratio |
暗呼吸与 Vcmax25 之比 |
BallBerrySlope、BallBerryIntercept |
Ball–Berry 气孔导度模型的斜率和截距 |
absorption_component |
驱动光合作用的吸收部分,默认 "chlorophyll" |
叶绿素吸收与总吸收¶
光合作用默认由叶绿素吸收的光合有效辐射驱动。Prospect 和 Fluspect 会给出每个波长上叶绿素吸收所占的比例。希望使用叶片的总吸收时:
实测光谱(MeasuredSpectrum)需要给出色素分区模型才能计算叶绿素吸收(见第 10 章)。比较与色素有关的吸收时,光合有效辐射范围内宜使用约 1 nm 的光谱间隔,波段过宽会使叶绿素吸收比例产生偏差。
求解¶
climate = less.Microclimate(air_temperature=25.0, humidity=60.0, wind_speed=2.0, ca=400.0)
state = scene.solve(microclimate=climate,
modules=["energy_balance", "photosynthesis", "sif"],
photosynthesis_kwargs={"quality": "preview"})
photo = state.photosynthesis
print("净光合速率:", photo.An)
print("气孔导度:", photo.gs)
print("荧光产额:", photo.Phi_f)
print("叶温(K):", photo.T_leaf)
scene.solve() 依次计算辐射场、能量平衡、光合作用和荧光,它们使用同一个耦合状态:叶温影响光合,光合决定气孔导度和蒸腾,蒸腾又改变叶温。求解后,热红外和荧光成像会自动使用这个状态:
thermal = scene.simulate(less.ThermalImager(less.Orthographic(image_size=64),
bands=[10600.0], quality=32), microclimate=climate)
sif = scene.simulate(less.SIFImager(less.Orthographic(image_size=64),
bands=[687.0, 740.0, 760.0], quality=32))
thermal.save("dynamic_temperature.tif")
sif.save("dynamic_sif.tif")
Microclimate 中 pressure 的单位是 Pa,oxygen 是 mmol mol⁻¹,ca(CO₂)是 µmol mol⁻¹。实际水汽压由气温和相对湿度计算。
受光叶片与阴影叶片¶
冠层中的直射光很不均匀。LESS 分别计算受光叶片和阴影叶片,再按受光比例汇总:
| 结果 | 含义 |
|---|---|
sunlit_fraction |
能直接看到太阳的叶面积比例 |
APAR、APAR_total |
所选吸收部分的 APAR、叶片总吸收的 APAR |
APAR_sunlit、APAR_shaded |
受光、阴影叶片的 APAR |
T_sunlit、T_shaded |
受光、阴影叶片的温度 |
An_sunlit、An_shaded |
受光、阴影叶片的净光合速率 |
天空光和多次散射同时照到受光和阴影叶片,只有受光叶片还接收太阳直射。最终结果为
其中 p 是受光比例。光合作用对光强是非线性的,先分别计算再平均,与先平均光强再计算的结果不同。
APAR 的单位是 µmol 光子 m⁻² 叶 s⁻¹,An 的单位是 µmol CO₂ m⁻² 叶 s⁻¹。
结果的空间单元由 photo.spatial_mode 说明:只有三角网格时为 "primitive"(每个三角形一个值);含统计植被时按组件给出,需要更细的结果可以把树冠分成多个组件。photo.scene_elements 标识每一行对应的场景元素。
荧光源项¶
荧光源项是每片叶子发出的荧光光谱,由 SIFProcess 计算。上面的 scene.solve() 已经包含它;也可以单独计算:
import numpy as np
source = state.sif
wavelengths = np.arange(650.0, 851.0, 1.0)
leaf = source.emission(wavelengths) # 每单位叶面积,W m⁻² nm⁻¹
photosystem = source.emission(wavelengths, level="photosystem") # 叶片重吸收之前
total = source.total_emission(wavelengths) # 整个场景,W nm⁻¹
by_component = source.total_emission(wavelengths, by="component")
by_layer = source.total_emission(wavelengths, by="layer", layers=[0.0, 2.0, 4.0, 6.0])
level="leaf"(默认):离开叶片两个表面的荧光,即在冠层中传播的荧光;level="photosystem":光系统发出、尚未被叶片自身重吸收的荧光。红光荧光大部分在叶内被重新吸收,远红光荧光大部分能离开叶片;by可以是"scene"、"component"、"instance"或"layer"(按高度分层,layers为分层边界)。
固定产额的荧光(mode="static",使用 Fluspect.fqe)不需要温度和光合作用,见第 27 章。叶片重吸收后再次激发的二次荧光不在计算中,典型产额下它小于总荧光的 1%–2%。
采样质量¶
state = scene.solve(microclimate=climate,
modules=["energy_balance", "photosynthesis", "sif"],
photosynthesis_kwargs={"quality": "standard"},
sif_kwargs={"quality": "standard"},
seed=42)
质量可以是 "preview"、"standard" 或 "high"。定量研究时,比较不同质量下的 APAR、叶温、An、gs 和荧光产额,确认结果已经稳定。固定 seed 可以重复同样的结果。
检查收敛¶
eb = state.energy_balance.result
print("能量平衡收敛:", eb.converged)
print("光合收敛:", state.photosynthesis.converged, "迭代次数:", state.photosynthesis.iterations)
print("最大残差:", abs(eb.residual[eb.active_mask]).max())
光照、微气象、属性或几何改变后,需要重新运行 scene.solve()。
统计植被¶
统计植被冠层的用法完全相同,只需把叶片属性设在统计植被组件上(代表叶片用 Fluspect):
crown = less.Object("crown")
crown.add_component("crown", less.TurbidBoundary(less.asset_path("tutorial_tree.obj"), group="crown"))
crown.set_property("crown", less.OpticalVegetation(
leaf=less.Fluspect(cab=45, fqe="dynamic"), leaf_area_density=1.5,
leaf_angle_distribution="spherical"))
crown.set_property("crown", less.ThermalProperty(temperature="air", emissivity=0.98))
crown.set_property("crown", less.BiophysicalProperty(leaf_width=0.05, stomata_side="bottom"))
crown.set_property("crown", less.Farquhar(Vcmax25=60.0))
scene.add(crown, positions=[(3, 3, 0)])
mixed = scene.solve(microclimate=climate, modules=["energy_balance", "photosynthesis", "sif"],
photosynthesis_kwargs={"quality": "preview"})
print(mixed.photosynthesis.spatial_mode)
三角网格叶片、统计植被和地形可以在同一次求解中计算。