分布式水资源雪模拟

smrf-dev的Python项目详细描述


资源框架的空间建模

GitHub versionDOIDOIDocker Build StatusDocker Automated buildBuild StatusCoverage Status

资源空间建模框架(SMRF)由美国农业部农业研究局(ARS)的Scott Havens博士在美国伊利诺伊州博伊西市开发。SMRF旨在增加获取实测气象数据和在流域内分布点测量值的灵活性。SMRF被开发用来作为一个操作或研究框架,其中易用性、效率和近实时运行能力是最优先考虑的。在

阅读full documentation for SMRF,包括最新的安装说明。在

安装

python3 -m pip install smrf-dev

要在MacOSX的Linux上本地安装SMRF,请首先克隆存储库并构建到虚拟环境中。这需要gcc <= 9.0。一般步骤如下,将通过运行测试来测试SMRF安装。在

从存储库克隆

^{pr2}$

安装需求,SMRF并运行测试。在

python3 -m pip install -r requirements_dev.txt .[tests]
python3 setup.py install

要可选地验证安装,请运行单元测试

python3 -m unittest -v

对于Windows,install方法使用Docker。在

系统依赖性

如果将SMRF与GRIB文件中的网格化天气数据一起使用,则需要eccodes的系统依赖性,这是GRIB文件读取器。在

地形设置

拓扑为SMRF提供以下静态层:

  1. 数字高程模型
  2. 植被类型
  3. 植被高度
  4. 植被消光系数
  5. 植被光透过率
  6. 面盆面罩(可选)

所有这些层都存储在netCDF文件中,通常称为topo.nc文件。在

虽然topo.nc文件可以手动生成,但是一个很好的选择是使用basin_setup来创建一个与SMRF和AWSM兼容的topo文件。在

输入数据

SMRF的气象数据输入需要以下变量:

  • 空气温度
  • 蒸汽压
  • 降水
  • 风速和风向
  • 云量因子(被云层阻挡的入射太阳的百分比,介于0和1之间)

数据可以通过以下格式提供:

  • CSV文件
  • MySQL database
  • 天气研究和预报(WRF)输出
  • 高分辨率快速刷新(HRRR)
  • 通用netCDF

运行SMRF

运行SMRF有两种方法,第一种是通过run_smrf命令或通过smrfapi。如果SMRF被用作雪或水文模型的输入,我们建议使用run_smrf,因为它将生成所需的所有输入。有关更多详细信息,请参阅完整文档。在

run_smrf <config_file>

码头工人

SMRF还内置在docker映像中,以便于在任何操作系统上安装。docker映像是从Github存储库自动构建的,包括最新的代码库或稳定版本映像。在

SMRF docker映像有一个文件夹,用于在docker映像中装入数据,该文件夹位于/data。在

docker run -v <path to data>:/data usdaarsnwrc/smrf run_smrf <path to config>

<path to data>应该是主机上配置文件、数据和topo所在的路径。这也是SMRF输出的位置。在

注意:配置文件中的路径必须调整为位于docker映像中。例如,在上面的命令中,配置的路径将位于docker映像中。这将是/data/config.ini,而不是主机上的路径。在

在ARS使用的方式中,我们将config、topo和数据保存在一个位置,因为文件非常小。然后将输出放在另一个位置,因为它的文件大小可以大得多。为了实现这一点,请分别挂载输入和输出数据,并修改配置路径。在

docker run -v <input>:/data/input -v <output>:/data/output usdaarsnwrc/smrf run_smrf <path to config>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
当您有许多具有不同密钥值的位置时,java Enterprise是加密环境变量的正确方法   java如何使用视图保持器模式制作自定义适配器?   java如何迭代Camel体中的嵌套列表?   序列化用base 64进行Java序列化   java打开文件的最佳方式(并确保选择了文件)   java marvin图像色差插件错误   java如何在eclipse中添加属性文件文件夹   比较java。util。日历日期到java。util。日期   java无法在下一个类(活动)中获取哈希表   java如何将这段代码转换为循环?   java查找通过REST失败   java getIntent返回null   在Java中,如何通过外部集合从内部集合检索数据?   java单点登录以保护REST API和内部基于web的系统