Skip to main content

wrfrun is a comprehensive toolkit for managing and using WRF

Project description

🌀 wrfrun

A modern, unified framework for running and managing numerical models.

Designed for researchers who want to focus on science — not on the details of model execution.

📖 Introduction

wrfrun is a Python package that provides a general-purpose, reproducible, and extensible framework for running numerical models.

It automates the tedious parts of model execution — preparing input data, handling namelist configurations, organizing logs, and submitting jobs — so that you can spend your time on research, not on managing model runs.

⚡ Quick Installation

pip install wrfrun

📖 Documentation

Check https://wrfrun.syize.cn.

🌟 Core Features

🧩 Unified Interface Architecture

wrfrun enforces a unified interface specification for all numerical models. Specifically, each model interface must inherit from a provided base class, ensuring a consistent structure and behavior across different models.

This design makes model execution intuitive — any supported model can be launched simply by calling a Python function or class method, while wrfrun automatically handles all background tasks such as data preparation and configuration file management.

from wrfrun import WRFRun
from wrfrun.model.wrf import geogrid, metgrid, real, ungrib, wrf

# wrfrun will prepare input data, generate namelist file, 
# save outputs and logs automatically.
with WRFRun("./config.toml", init_workspace=True) as wrf_run:
    geogrid()
    ungrib()
    metgrid()
    real()
    wrf()

🪶 Record & Replay

Every simulation can be fully recorded and later reproduced from a single .replay file — ensuring total reproducibility.

from wrfrun import WRFRun
from wrfrun.model.wrf import geogrid, ungrib, metgrid, real, wrf


# 1. Record simulation with method `record_simulation`.
with WRFRun("./config.toml", init_workspace=True) as wrf_run:
    wrf_run.record_simulation(output_path="./outputs/example.replay")

    geogrid()
    ungrib()
    metgrid()
    real()
    wrf()

# 2. Replay the simulation in a different directory or on a different machine.
with WRFRun("./config.toml", init_workspace=True) as wrf_run:
    wrf_run.replay_simulation("./example.replay")

⚙️ Simplified Configuration

Manage all simulation settings in TOML files: A main config file, and model config files.

For more information about the configuration file, check config.

# main config file: config.toml
work_dir = "./.wrfrun"

input_data_path = ""
output_path = "./outputs"
log_path = "./logs"

server_host = "localhost"
server_port = 54321

core_num = 36

[job_scheduler]
job_scheduler = "pbs"

queue_name = ""
node_num = 1
env_settings = {}
python_interpreter = "/usr/bin/python3"     # or just "python3"

[model]
[model.wrf]
use = false
include = "./configs/wrf.toml"

wrfrun remains compatible with original namelist inputs, just set namelist file path in the model config.

# WRF model config file: wrf.toml
wps_path = '/path/to/your/WPS/folder'
wrf_path = '/path/to/your/WRF/folder'
wrfda_path = ''		# WRFDA is optional.
geog_data_path = '/path/to/your/geog/data'
user_wps_namelist = ''		# set your own namelist file here
user_real_namelist = ''		# set your own namelist file here
user_wrf_namelist = ''		# set your own namelist file here
user_wrfda_namelist = ''	# set your own namelist file here
restart_mode = false
debug_level = 100

[time]
start_date = 2021-03-24T12:00:00Z   # or [2021-03-24T12:00:00Z, 2021-03-24T12:00:00Z]
end_date = 2021-03-26T00:00:00Z     # or [2021-03-26T00:00:00Z, 2021-03-24T12:00:00Z]
input_data_interval = 10800
output_data_interval = 180
time_step = 120
parent_time_step_ratio = [1, 3, 4]
restart_interval = -1


[domain]
domain_num = 3
parent_grid_ratio = [1, 3, 9]
i_parent_start = [1, 17, 72]
j_parent_start = [1, 17, 36]
e_we = [120, 250, 1198]
e_sn = [120, 220, 1297]
dx = 9000
dy = 9000
map_proj = 'lambert'
truelat1 = 34.0
truelat2 = 40.0
ref_lat = 37.0
ref_lon = 120.5
stand_lon = 120.5


[scheme]
long_wave_scheme = { name = "rrtm", option = {} }
short_wave_scheme = { name = "rrtmg", option = {} }
cumulus_scheme = { name = "kf", option = {} }
pbl_scheme = { name = "ysu", option = { ysu_topdown_pblmix = 1} }
land_surface_scheme = { name = "noah", option = {} }
surface_layer_scheme = { name = "mm5", option = {} }

💻 Job Scheduling Integration

Automatically submit jobs to supported schedulers:

  • PBS
  • Slurm
  • LSF

wrfrun takes care of resource requests and queue management automatically.

from wrfrun import WRFRun
from wrfrun.model.wrf import geogrid, metgrid, real, ungrib, wrf

# just set submit_job=True
with WRFRun("./config.toml", init_workspace=True, submit_job=True) as wrf_run:
    geogrid()
    ungrib()
    metgrid()
    real()
    wrf()

📡 Real-time Monitoring

wrfrun can parse model log files and start a lightweight socket server to report simulation progress.

from wrfrun import WRFRun
from wrfrun.model.wrf import geogrid, metgrid, real, ungrib, wrf

# just set start_server=True
with WRFRun("./config.toml", init_workspace=True, start_server=True) as wrf_run:
    geogrid()
    ungrib()
    metgrid()
    real()
    wrf()

🌍 Current Capabilities

  • Automated ERA5 data download (requires cdsapi authentication)
  • Real-time progress reporting via socket interface
  • Partial WRF support:
    • Full support for WPS
    • Wrapped execution for real and wrf
  • Job submission on PBS, Slurm, and LSF
  • record / replay reproducibility for all compliant interfaces

🧭 TODO

  • Full WRF model integration.
  • Broaden model support.
  • Enhanced progress visualization dashboard.

🤝 Contributing

This project is currently for personal and research use. If you have ideas or feature requests, feel free to open an issue.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wrfrun-0.3.2.tar.gz (106.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wrfrun-0.3.2-py3-none-any.whl (118.0 kB view details)

Uploaded Python 3

File details

Details for the file wrfrun-0.3.2.tar.gz.

File metadata

  • Download URL: wrfrun-0.3.2.tar.gz
  • Upload date:
  • Size: 106.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for wrfrun-0.3.2.tar.gz
Algorithm Hash digest
SHA256 56f192d6067b1e82b515bcccb444d78e1d9c00408ef3a167e5a2668037796abb
MD5 6bb81ead0006da43745b39c31b3b815f
BLAKE2b-256 8c669b03cee8a88fb2e02749ec4c6da3377362cc7beeb23b8d90d0f1bff7f51f

See more details on using hashes here.

Provenance

The following attestation bundles were made for wrfrun-0.3.2.tar.gz:

Publisher: python-package.yaml on wrfrun/wrfrun

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wrfrun-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: wrfrun-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 118.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for wrfrun-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e0e3081e3153cd5db87a4b24f80b4cfd20061f86625dfb8d4fe581be81e5740b
MD5 9da903374f0418a03aa003aa79b0ee05
BLAKE2b-256 b2f2d4645575969cbf1f6564d20d54b21ddb7d6a7edacfa3989557a1abf5fd1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for wrfrun-0.3.2-py3-none-any.whl:

Publisher: python-package.yaml on wrfrun/wrfrun

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page