MSM_input.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from sqlalchemy import Column, Integer, Float, String
  2. from sqlalchemy import ForeignKey, ForeignKeyConstraint
  3. from geoalchemy2 import Geometry
  4. from app.database import Base
  5. class MSMInputData(Base):
  6. """
  7. 络合模型输入数据模型
  8. 存储络合模型(MSM)计算所需的所有输入参数
  9. 模型逻辑:
  10. 1. 每个记录对应农田样点(Farmland_data)的特定样本
  11. 2. 大部分数值通过Soil_data和Parameters表数据计算得来
  12. 3. Var字段标识数据类型来源(如:实测值/普查值)
  13. """
  14. __tablename__ = 'MSM_input_data'
  15. # 主键
  16. id = Column('ID', Integer, primary_key=True, autoincrement=True)
  17. # 外键参考Farmland_data表 (复合主键)
  18. farmland_id = Column('Farmland_ID', Integer, nullable=False)
  19. sample_id = Column('Sample_ID', Integer, nullable=False)
  20. # 外键约束定义
  21. __table_args__ = (
  22. ForeignKeyConstraint(
  23. ['Farmland_ID', 'Sample_ID'],
  24. ['Farmland_data.Farmland_ID', 'Farmland_data.Sample_ID']
  25. ),
  26. {'comment': '络合模型输入数据模型'}
  27. )
  28. # 过程模型数据索引符 - 标识数据来源(如:PC2013实测、XC2018普查、SP2023三普)
  29. var = Column('Var', String(20), nullable=False, comment='过程模型数据索引符')
  30. # 化学参数字段(带默认值的列)
  31. co2_tot = Column('CO2_g_tot', Float, default=1e-5, nullable=False,
  32. comment='二氧化碳全量值')
  33. water_volume = Column('watervolume', Float, nullable=True,
  34. comment='土壤水体积[cm³/cm³] = Soil_data.POR_Layer')
  35. sl_ratio = Column('SL', Float, nullable=True,
  36. comment='固液比 = (1-POR_Layer)*bd020_90/(POR_Layer*1)')
  37. ph_value = Column('pH', Float, nullable=True,
  38. comment='pH值(实测或Soil_data中IDW_*_pH三者之一)')
  39. # 金属离子浓度 (mol/L)
  40. ca_tot = Column('Ca_plus2_tot', Float, nullable=True,
  41. comment='总游离钙 = ExCa_IDW*0.005/(POR_Layer/bd020_90)')
  42. mg_tot = Column('Mg_plus2_tot', Float, nullable=True,
  43. comment='总游离镁 = ExMg_IDW*0.005/(POR_Layer/bd020_90)')
  44. k_tot = Column('K_plus_tot', Float, nullable=True,
  45. comment='总游离钾 = ExK_IDW*0.005/(POR_Layer/bd020_90)')
  46. na_tot = Column('Na_plus_tot', Float, nullable=True,
  47. comment='总游离钠 = ExNa_IDW*0.005/(POR_Layer/bd020_90)')
  48. cl_tot = Column('Cl_minus_tot', Float, nullable=True,
  49. comment='总游离氯 = (Ca_tot+Mg_tot)*2 + K_tot + Na_tot')
  50. cd_tot = Column('Cd_tot', Float, nullable=True,
  51. comment='总游离镉 = Cd/112000/(POR_Layer/bd020_90)')
  52. # 土壤成分 (kg/kg)
  53. hfo_kgkg = Column('HFO_kgkg', Float, nullable=True,
  54. comment='不定型铁 = Fed_IDW/1000 + ExAl_IDW*0.00009')
  55. clay_kgkg = Column('CLAY_kgkg', Float, nullable=True,
  56. comment='粘土矿物 = Soil_data.0002IDW')
  57. ha_kgkg = Column('HA_kgkg', Float, nullable=True,
  58. comment='活性胡敏酸 = SOM_IDW/1724*F1*F2')
  59. fa_kgkg = Column('FA_kgkg', Float, nullable=True,
  60. comment='活性富里酸 = SOM_IDW/1724*F1*(1-F2)')