wrfrun 0.2.0__py3-none-any.whl → 0.3.1__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. wrfrun/__init__.py +8 -3
  2. wrfrun/cli.py +69 -29
  3. wrfrun/core/__init__.py +27 -10
  4. wrfrun/core/_config.py +308 -0
  5. wrfrun/core/_constant.py +236 -0
  6. wrfrun/core/_exec_db.py +105 -0
  7. wrfrun/core/_namelist.py +287 -0
  8. wrfrun/core/_record.py +178 -0
  9. wrfrun/core/_resource.py +172 -0
  10. wrfrun/core/base.py +132 -406
  11. wrfrun/core/core.py +196 -0
  12. wrfrun/core/error.py +28 -2
  13. wrfrun/core/replay.py +10 -96
  14. wrfrun/core/server.py +52 -27
  15. wrfrun/core/type.py +171 -0
  16. wrfrun/data.py +304 -139
  17. wrfrun/extension/goos_sst/__init__.py +2 -2
  18. wrfrun/extension/goos_sst/core.py +9 -14
  19. wrfrun/extension/goos_sst/res/__init__.py +0 -1
  20. wrfrun/extension/goos_sst/utils.py +50 -44
  21. wrfrun/extension/littler/core.py +105 -88
  22. wrfrun/extension/utils.py +4 -3
  23. wrfrun/log.py +117 -0
  24. wrfrun/model/__init__.py +11 -7
  25. wrfrun/model/constants.py +52 -0
  26. wrfrun/model/palm/__init__.py +30 -0
  27. wrfrun/model/palm/core.py +145 -0
  28. wrfrun/model/palm/namelist.py +33 -0
  29. wrfrun/model/plot.py +99 -119
  30. wrfrun/model/type.py +116 -0
  31. wrfrun/model/utils.py +9 -20
  32. wrfrun/model/wrf/__init__.py +4 -9
  33. wrfrun/model/wrf/core.py +246 -161
  34. wrfrun/model/wrf/exec_wrap.py +13 -12
  35. wrfrun/model/wrf/geodata.py +116 -100
  36. wrfrun/model/wrf/log.py +103 -0
  37. wrfrun/model/wrf/namelist.py +90 -73
  38. wrfrun/model/wrf/plot.py +102 -0
  39. wrfrun/model/wrf/scheme.py +108 -52
  40. wrfrun/model/wrf/utils.py +39 -25
  41. wrfrun/model/wrf/vtable.py +35 -3
  42. wrfrun/plot/__init__.py +20 -0
  43. wrfrun/plot/wps.py +96 -73
  44. wrfrun/res/__init__.py +103 -5
  45. wrfrun/res/config/config.template.toml +8 -0
  46. wrfrun/res/config/palm.template.toml +23 -0
  47. wrfrun/run.py +105 -77
  48. wrfrun/scheduler/__init__.py +1 -0
  49. wrfrun/scheduler/lsf.py +3 -2
  50. wrfrun/scheduler/pbs.py +3 -2
  51. wrfrun/scheduler/script.py +17 -5
  52. wrfrun/scheduler/slurm.py +3 -2
  53. wrfrun/scheduler/utils.py +14 -2
  54. wrfrun/utils.py +88 -199
  55. wrfrun/workspace/__init__.py +8 -5
  56. wrfrun/workspace/core.py +20 -12
  57. wrfrun/workspace/palm.py +137 -0
  58. wrfrun/workspace/wrf.py +16 -15
  59. wrfrun-0.3.1.dist-info/METADATA +239 -0
  60. wrfrun-0.3.1.dist-info/RECORD +78 -0
  61. wrfrun/core/config.py +0 -923
  62. wrfrun/model/base.py +0 -14
  63. wrfrun-0.2.0.dist-info/METADATA +0 -68
  64. wrfrun-0.2.0.dist-info/RECORD +0 -62
  65. {wrfrun-0.2.0.dist-info → wrfrun-0.3.1.dist-info}/WHEEL +0 -0
  66. {wrfrun-0.2.0.dist-info → wrfrun-0.3.1.dist-info}/entry_points.txt +0 -0
wrfrun/workspace/wrf.py CHANGED
@@ -16,8 +16,9 @@ from os import listdir, makedirs, symlink
16
16
  from os.path import exists
17
17
  from typing import Literal
18
18
 
19
- from wrfrun.core import WRFRunConfig, get_wrfrun_config, set_register_func
20
- from wrfrun.utils import check_path, logger
19
+ from wrfrun.core import WRFRUN, WRFRunConfig
20
+ from wrfrun.log import logger
21
+ from wrfrun.utils import check_path
21
22
 
22
23
  WORKSPACE_MODEL_WPS = ""
23
24
  WORKSPACE_MODEL_WRF = ""
@@ -30,8 +31,8 @@ def _register_wrf_workspace_uri(wrfrun_config: WRFRunConfig):
30
31
 
31
32
  This is a hook to initializes some global strings.
32
33
 
33
- :param wrfrun_config: ``WRFRunConfig`` instance.
34
- :type wrfrun_config: WRFRunConfig
34
+ :param wrfrun_config: ``WRFRUNProxy`` instance.
35
+ :type wrfrun_config: WRFRUNProxy
35
36
  """
36
37
  global WORKSPACE_MODEL_WPS, WORKSPACE_MODEL_WRF, WORKSPACE_MODEL_WRFDA
37
38
 
@@ -40,7 +41,7 @@ def _register_wrf_workspace_uri(wrfrun_config: WRFRunConfig):
40
41
  WORKSPACE_MODEL_WRFDA = f"{wrfrun_config.WRFRUN_WORKSPACE_MODEL}/WRFDA"
41
42
 
42
43
 
43
- set_register_func(_register_wrf_workspace_uri)
44
+ WRFRUN.set_config_register_func(_register_wrf_workspace_uri)
44
45
 
45
46
 
46
47
  def get_wrf_workspace_path(name: Literal["wps", "wrf", "wrfda"]) -> str:
@@ -77,22 +78,22 @@ def prepare_wrf_workspace(model_config: dict):
77
78
  :param model_config: Model config.
78
79
  :type model_config: dict
79
80
  """
80
- logger.info(f"Initialize workspace for WPS/WRF.")
81
+ logger.info("Initialize workspace for WPS/WRF.")
81
82
 
82
- WRFRUNConfig = get_wrfrun_config()
83
+ WRFRUNConfig = WRFRUN.config
83
84
 
84
85
  wps_path = model_config["wps_path"]
85
86
  wrf_path = model_config["wrf_path"]
86
87
  wrfda_path = model_config["wrfda_path"]
87
88
 
88
89
  if not (wps_path and wrf_path):
89
- logger.warning(f"No WPS/WRF model installation path given, skip initialization.")
90
+ logger.warning("No WPS/WRF model installation path given, skip initialization.")
90
91
  return
91
92
 
92
93
  if wps_path:
93
94
  if not exists(wps_path):
94
- logger.error(f"Your WPS path is wrong.")
95
- raise FileNotFoundError(f"Your WPS path is wrong.")
95
+ logger.error("Your WPS path is wrong.")
96
+ raise FileNotFoundError("Your WPS path is wrong.")
96
97
 
97
98
  wps_work_path = WRFRUNConfig.parse_resource_uri(WORKSPACE_MODEL_WPS)
98
99
  check_path(wps_work_path, f"{wps_work_path}/outputs", force=True)
@@ -104,8 +105,8 @@ def prepare_wrf_workspace(model_config: dict):
104
105
 
105
106
  if wrf_path:
106
107
  if not exists(wrf_path):
107
- logger.error(f"Your WRF path is wrong.")
108
- raise FileNotFoundError(f"Your WRF path is wrong.")
108
+ logger.error("Your WRF path is wrong.")
109
+ raise FileNotFoundError("Your WRF path is wrong.")
109
110
 
110
111
  wrf_work_path = WRFRUNConfig.parse_resource_uri(WORKSPACE_MODEL_WRF)
111
112
  check_path(wrf_work_path, force=True)
@@ -115,8 +116,8 @@ def prepare_wrf_workspace(model_config: dict):
115
116
 
116
117
  if wrfda_path:
117
118
  if not exists(wrfda_path):
118
- logger.error(f"Your WRFDA path is wrong.")
119
- raise FileNotFoundError(f"Your WRFDA path is wrong.")
119
+ logger.error("Your WRFDA path is wrong.")
120
+ raise FileNotFoundError("Your WRFDA path is wrong.")
120
121
 
121
122
  wrfda_work_path = WRFRUNConfig.parse_resource_uri(WORKSPACE_MODEL_WRFDA)
122
123
  check_path(wrfda_work_path, force=True)
@@ -139,7 +140,7 @@ def check_wrf_workspace(model_config: dict) -> bool:
139
140
  :return: ``True`` if WPS/WRF workspace exists, ``False`` otherwise.
140
141
  :rtype: bool
141
142
  """
142
- WRFRUNConfig = get_wrfrun_config()
143
+ WRFRUNConfig = WRFRUN.config
143
144
 
144
145
  wps_path = model_config["wps_path"]
145
146
  wrf_path = model_config["wrf_path"]
@@ -0,0 +1,239 @@
1
+ Metadata-Version: 2.1
2
+ Name: wrfrun
3
+ Version: 0.3.1
4
+ Summary: wrfrun is a comprehensive toolkit for managing and using WRF
5
+ Keywords: WRF
6
+ Author-Email: Syize <syizeliu@gmail.com>
7
+ Maintainer-Email: Syize <syizeliu@gmail.com>
8
+ License: GPL-3.0-or-later
9
+ Project-URL: homepage, https://github.com/Syize/wrfrun
10
+ Project-URL: repository, https://github.com/Syize/wrfrun
11
+ Project-URL: documentation, https://wrfrun.syize.cn
12
+ Project-URL: Bug Tracker, https://github.com/Syize/wrfrun/issues
13
+ Requires-Python: >=3.10
14
+ Requires-Dist: numpy
15
+ Requires-Dist: xarray
16
+ Requires-Dist: netCDF4
17
+ Requires-Dist: rich
18
+ Requires-Dist: pandas
19
+ Requires-Dist: f90nml
20
+ Requires-Dist: cdsapi
21
+ Requires-Dist: matplotlib
22
+ Requires-Dist: Cartopy
23
+ Requires-Dist: tomli
24
+ Requires-Dist: tomli-w
25
+ Requires-Dist: haversine
26
+ Requires-Dist: cfgrib>=0.9.15.1
27
+ Description-Content-Type: text/markdown
28
+
29
+ # 🌀 wrfrun
30
+
31
+ > A modern, unified framework for running and managing numerical models.
32
+ >
33
+ > Designed for researchers who want to focus on science — not on the details of model execution.
34
+
35
+ ## 📖 Introduction
36
+
37
+ `wrfrun` is a Python package that provides a general-purpose, reproducible, and extensible framework for running numerical models.
38
+
39
+ 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.
40
+
41
+ ## ⚡ Quick Installation
42
+
43
+ ```bash
44
+ pip install wrfrun
45
+ ```
46
+
47
+ ## 📖 Documentation
48
+
49
+ Check [https://wrfrun.syize.cn](https://wrfrun.syize.cn/).
50
+
51
+ ## 🌟 Core Features
52
+
53
+ ### 🧩 Unified Interface Architecture
54
+
55
+ `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.
56
+
57
+ 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.
58
+
59
+ ```python
60
+ from wrfrun import WRFRun
61
+ from wrfrun.model.wrf import geogrid, metgrid, real, ungrib, wrf
62
+
63
+ # wrfrun will prepare input data, generate namelist file,
64
+ # save outputs and logs automatically.
65
+ with WRFRun("./config.toml", init_workspace=True) as wrf_run:
66
+ geogrid()
67
+ ungrib()
68
+ metgrid()
69
+ real()
70
+ wrf()
71
+ ```
72
+
73
+ ### 🪶 Record & Replay
74
+
75
+ Every simulation can be fully recorded and later reproduced from a single `.replay` file — ensuring total reproducibility.
76
+
77
+ ```python
78
+ from wrfrun import WRFRun
79
+ from wrfrun.model.wrf import geogrid, ungrib, metgrid, real, wrf
80
+
81
+
82
+ # 1. Record simulation with method `record_simulation`.
83
+ with WRFRun("./config.toml", init_workspace=True) as wrf_run:
84
+ wrf_run.record_simulation(output_path="./outputs/example.replay")
85
+
86
+ geogrid()
87
+ ungrib()
88
+ metgrid()
89
+ real()
90
+ wrf()
91
+
92
+ # 2. Replay the simulation in a different directory or on a different machine.
93
+ with WRFRun("./config.toml", init_workspace=True) as wrf_run:
94
+ wrf_run.replay_simulation("./example.replay")
95
+ ```
96
+
97
+ ### ⚙️ Simplified Configuration
98
+
99
+ Manage all simulation settings in TOML files: A main config file, and model config files.
100
+
101
+ For more information about the configuration file, check [config](wrfrun/res/config).
102
+
103
+ ```toml
104
+ # main config file: config.toml
105
+ work_dir = "./.wrfrun"
106
+
107
+ input_data_path = ""
108
+ output_path = "./outputs"
109
+ log_path = "./logs"
110
+
111
+ server_host = "localhost"
112
+ server_port = 54321
113
+
114
+ core_num = 36
115
+
116
+ [job_scheduler]
117
+ job_scheduler = "pbs"
118
+
119
+ queue_name = ""
120
+ node_num = 1
121
+ env_settings = {}
122
+ python_interpreter = "/usr/bin/python3" # or just "python3"
123
+
124
+ [model]
125
+ [model.wrf]
126
+ use = false
127
+ include = "./configs/wrf.toml"
128
+ ```
129
+
130
+ `wrfrun` remains compatible with original `namelist` inputs, just set namelist file path in the model config.
131
+
132
+ ```toml
133
+ # WRF model config file: wrf.toml
134
+ wps_path = '/path/to/your/WPS/folder'
135
+ wrf_path = '/path/to/your/WRF/folder'
136
+ wrfda_path = '' # WRFDA is optional.
137
+ geog_data_path = '/path/to/your/geog/data'
138
+ user_wps_namelist = '' # set your own namelist file here
139
+ user_real_namelist = '' # set your own namelist file here
140
+ user_wrf_namelist = '' # set your own namelist file here
141
+ user_wrfda_namelist = '' # set your own namelist file here
142
+ restart_mode = false
143
+ debug_level = 100
144
+
145
+ [time]
146
+ start_date = 2021-03-24T12:00:00Z # or [2021-03-24T12:00:00Z, 2021-03-24T12:00:00Z]
147
+ end_date = 2021-03-26T00:00:00Z # or [2021-03-26T00:00:00Z, 2021-03-24T12:00:00Z]
148
+ input_data_interval = 10800
149
+ output_data_interval = 180
150
+ time_step = 120
151
+ parent_time_step_ratio = [1, 3, 4]
152
+ restart_interval = -1
153
+
154
+
155
+ [domain]
156
+ domain_num = 3
157
+ parent_grid_ratio = [1, 3, 9]
158
+ i_parent_start = [1, 17, 72]
159
+ j_parent_start = [1, 17, 36]
160
+ e_we = [120, 250, 1198]
161
+ e_sn = [120, 220, 1297]
162
+ dx = 9000
163
+ dy = 9000
164
+ map_proj = 'lambert'
165
+ truelat1 = 34.0
166
+ truelat2 = 40.0
167
+ ref_lat = 37.0
168
+ ref_lon = 120.5
169
+ stand_lon = 120.5
170
+
171
+
172
+ [scheme]
173
+ long_wave_scheme = { name = "rrtm", option = {} }
174
+ short_wave_scheme = { name = "rrtmg", option = {} }
175
+ cumulus_scheme = { name = "kf", option = {} }
176
+ pbl_scheme = { name = "ysu", option = { ysu_topdown_pblmix = 1} }
177
+ land_surface_scheme = { name = "noah", option = {} }
178
+ surface_layer_scheme = { name = "mm5", option = {} }
179
+ ```
180
+
181
+ ### 💻 Job Scheduling Integration
182
+
183
+ Automatically submit jobs to supported schedulers:
184
+
185
+ - PBS
186
+ - Slurm
187
+ - LSF
188
+
189
+ `wrfrun` takes care of resource requests and queue management automatically.
190
+
191
+ ```python
192
+ from wrfrun import WRFRun
193
+ from wrfrun.model.wrf import geogrid, metgrid, real, ungrib, wrf
194
+
195
+ # just set submit_job=True
196
+ with WRFRun("./config.toml", init_workspace=True, submit_job=True) as wrf_run:
197
+ geogrid()
198
+ ungrib()
199
+ metgrid()
200
+ real()
201
+ wrf()
202
+ ```
203
+
204
+ ### 📡 Real-time Monitoring
205
+
206
+ `wrfrun` can parse model log files and start a lightweight socket server to report simulation progress.
207
+
208
+ ```python
209
+ from wrfrun import WRFRun
210
+ from wrfrun.model.wrf import geogrid, metgrid, real, ungrib, wrf
211
+
212
+ # just set start_server=True
213
+ with WRFRun("./config.toml", init_workspace=True, start_server=True) as wrf_run:
214
+ geogrid()
215
+ ungrib()
216
+ metgrid()
217
+ real()
218
+ wrf()
219
+ ```
220
+
221
+ ## 🌍 Current Capabilities
222
+
223
+ - Automated ERA5 data download (requires `cdsapi` authentication)
224
+ - Real-time progress reporting via socket interface
225
+ - Partial WRF support:
226
+ - Full support for WPS
227
+ - Wrapped execution for `real` and `wrf`
228
+ - Job submission on PBS, Slurm, and LSF
229
+ - `record` / `replay` reproducibility for all compliant interfaces
230
+
231
+ ## 🧭 TODO
232
+
233
+ - [ ] Full WRF model integration.
234
+ - [ ] Broaden model support.
235
+ - [ ] Enhanced progress visualization dashboard.
236
+
237
+ ## 🤝 Contributing
238
+
239
+ This project is currently for personal and research use. If you have ideas or feature requests, feel free to open an issue.
@@ -0,0 +1,78 @@
1
+ wrfrun-0.3.1.dist-info/METADATA,sha256=p8z5A_Ln2uzEBB_dO-7hLc5MUcRb_AhaAUm_i0v_gU0,6768
2
+ wrfrun-0.3.1.dist-info/WHEEL,sha256=5J4neoE7k6LMgx4Fz1FHgBiO3YevhJGtNQ3muDrdLQM,75
3
+ wrfrun-0.3.1.dist-info/entry_points.txt,sha256=G3358n6wW1qZF3hSH9umxrWHJewN-6N1BUloacN2tks,50
4
+ wrfrun/__init__.py,sha256=0y__w7lEwOeVtfR3DRKEtPPz-2NTju2MbG76lAH_ZxU,218
5
+ wrfrun/cli.py,sha256=FGiYLGmXJs6DkWZnNOfW0gcN2RK-dTF2onVcM1xTD0c,5946
6
+ wrfrun/data.py,sha256=AS6Rb2-878mIqfyybGp1LlWypjtqUY1s3q5ahtR1nIo,17330
7
+ wrfrun/log.py,sha256=IlWsuAJH80obrHmq0JKk3JgnQxge5Bgp_P6kRctAlDw,3583
8
+ wrfrun/run.py,sha256=IAwdZKO0oMGh-2IE-SCofelf_DIIByjFM2g8r45Yt-k,10472
9
+ wrfrun/utils.py,sha256=Zl7arm-rR7EQMOHI2jXY7GGOvoWtq0pXG7ItJBisD7Q,4272
10
+ wrfrun/core/__init__.py,sha256=-UOeMRnazLbY2Y_dtISRTrRew0r7wiG_X5689BMDAUA,2166
11
+ wrfrun/core/_config.py,sha256=nRnSp0_UWGjPW6sqTFcrlVm5wzi2lpFTjgzleHwzMSo,9922
12
+ wrfrun/core/_constant.py,sha256=bSw9ztEzSDlMShzhS4V_lkjd6s89lQz9L5hwyAjS7bo,7239
13
+ wrfrun/core/_exec_db.py,sha256=XBm6IRrvz1GonZpl8wEROKfAPDZFHuIi2AJ-gR2mREg,3038
14
+ wrfrun/core/_namelist.py,sha256=WVgtY7X-Aua127XhhELROi-X5bKVMszgmBrwBWIc9nk,9805
15
+ wrfrun/core/_record.py,sha256=RH__TfQTuD9bI-rUtwTD32cLSW6c3NC2XKntYQNQxHI,5649
16
+ wrfrun/core/_resource.py,sha256=ndM_GNM9Q_RlND4nhtoKqD9ZkJIaDpnps4goJWQaJMM,6051
17
+ wrfrun/core/base.py,sha256=VWpy9uPpuDHoiU11kIXvL8-m5tTlb8FvygQX5OcoIp8,22682
18
+ wrfrun/core/core.py,sha256=8ZxKDbxLt-G7Wi2biT1bhCGAMpJXFX_GPqY4QVLJ4sg,6305
19
+ wrfrun/core/error.py,sha256=8afwIAf-OCRrqLCAaeo-cqAosdBcJPEJUV3WB_HrgaE,2580
20
+ wrfrun/core/replay.py,sha256=QYwSBiqEn0DVMa7XLfFO2j-Favl1Oj2dBnj_mWR7Kv8,2144
21
+ wrfrun/core/server.py,sha256=7wjk3W7OzKZcSegssUumL2sMtZAONe9d5kyZSg2dQqQ,9806
22
+ wrfrun/core/type.py,sha256=Eg-r8Rd3U965MsfPqZqzevYVPEgWeN6ze0B0S9nIYgI,4040
23
+ wrfrun/extension/__init__.py,sha256=YDYCS0KD3e-uLvf1K08ktNfP2sUSKpbgkHrvXj21EPQ,913
24
+ wrfrun/extension/utils.py,sha256=N67dDq5yQBvbZDB0GyMoa1n18NCfo5htvzTIQlGKs9U,2506
25
+ wrfrun/extension/goos_sst/__init__.py,sha256=qXFWgB-N3eBX9WFmH8ZEvDlU0s8laHkoDeJmm8qN0fU,2085
26
+ wrfrun/extension/goos_sst/core.py,sha256=OTIO6vMy926mJ3gVTXa8lgaeV5wAMt_RcttpA-TgPGY,3791
27
+ wrfrun/extension/goos_sst/utils.py,sha256=4eZB3nbsNLvAnq6l0OKAooa4K9X7qGlH0Vlc9L4tVFk,3682
28
+ wrfrun/extension/goos_sst/res/__init__.py,sha256=qaZXyTKUxSUDlA94MFPiLlrMR_FJkhPvktevZ2WcB30,510
29
+ wrfrun/extension/goos_sst/res/Vtable.ERA_GOOS_SST,sha256=UfbzWKEE2pnQO4Q2mkMmkl7pv_bDSxVGaN2jEYfMVzE,534
30
+ wrfrun/extension/littler/__init__.py,sha256=bLiGIpB_FpTyio44CjIzwwcahyFWxGW-gECfBOIG9Y8,2032
31
+ wrfrun/extension/littler/core.py,sha256=nXyIlM4JzLjfmtB16LQa_KzuEZh7PXUfuUMEAwCetLw,34189
32
+ wrfrun/model/__init__.py,sha256=v2zFYzUcRq6Tt5aXtEsshSAEwmk1pr1Ua5ffMVDPxmE,949
33
+ wrfrun/model/constants.py,sha256=xsM-xWLrjOBg3tOcwsovpPfZxxDW7zAS1ZpdOiWmcYs,840
34
+ wrfrun/model/plot.py,sha256=4hBpDkOSncd73sFTv-ZLZ8IOVV4qVq2HjyD6hR1uBEo,9446
35
+ wrfrun/model/type.py,sha256=wnXvBJuQGg1KT-6pBg1YJj4gyHyWODgWLsptlV42Cyo,3158
36
+ wrfrun/model/utils.py,sha256=ER6cO0Kq_uvzXYR0ja4XPcaLSk5jczB6I_Qu2nS-BcU,658
37
+ wrfrun/model/palm/__init__.py,sha256=twPTXNurPFDAo5VAwpdbmChbCAMf5kgQXcFVNYf-TYk,879
38
+ wrfrun/model/palm/core.py,sha256=Tb-6aVAR3kPO05SAXycxskOSkD9PKAOWMEAQRChBB-M,4378
39
+ wrfrun/model/palm/namelist.py,sha256=2B8I0HKPB_FS4l5ByGaxE7c95whsuSO35elMy6Jf42g,789
40
+ wrfrun/model/wrf/__init__.py,sha256=aja8ZTGLf-CC3k46jKhkxFdPA6Go5Q4ohz2AJ_dWiSw,1652
41
+ wrfrun/model/wrf/core.py,sha256=JAWvsF3hpPVyjilBE88PWfmDsRo7cp2u6RnlE-hWuLI,37540
42
+ wrfrun/model/wrf/exec_wrap.py,sha256=NetLqQaYK4Xmk20Cx1IdVd2Zy1Ui8gxXItrmlie9E9A,4414
43
+ wrfrun/model/wrf/geodata.py,sha256=Da7Zwdg1anjAsAtl7c2syvuMUfJuDyqwdaLbE2qTi14,10217
44
+ wrfrun/model/wrf/log.py,sha256=zQLrvqfKxKZHM4kPjOiZdLPbCNw-15r9v2Jd50jB4Jc,3410
45
+ wrfrun/model/wrf/namelist.py,sha256=b6TFL4msGt_FgtKghEXv8eMsY0H87gPjVsrdXMDEOtI,17380
46
+ wrfrun/model/wrf/plot.py,sha256=QPPkPUoQajLt9iqNFr2VJplP8pxhh6hUVrPf4Jgn1WM,3536
47
+ wrfrun/model/wrf/scheme.py,sha256=lFpFvJRpG9KV3EcMgxjUG77WOCkpMMwffhTbf5V6bBE,12983
48
+ wrfrun/model/wrf/utils.py,sha256=2n-aVRIy3_CWsggnEU3yYPbg4eohCwIYDPeUfXTFVIo,4041
49
+ wrfrun/model/wrf/vtable.py,sha256=nqhDydM7FYxI2tNuU2PSaDP-asnPdBxm1cpdO4K_KuE,3221
50
+ wrfrun/plot/__init__.py,sha256=fLZRqGQK9dVP88TKD_pdutHlUUuM43c_q8OGUT3cjbU,415
51
+ wrfrun/plot/wps.py,sha256=FyJ9Yd4E9WSMIYmVFTiC7c1z9StaVMej7DmTy89X9Zo,5977
52
+ wrfrun/res/__init__.py,sha256=KxfzI3HcxAkjmMh6gyhJDNAs5KKtLfhDMQhYKFIPkk8,3670
53
+ wrfrun/res/run.template.sh,sha256=k-r4lOOarscmSdiBXGHPnv3oeiRe-qW-VhOBia27ZGU,101
54
+ wrfrun/res/config/config.template.toml,sha256=S5a01oxNSqAN2_nE29wQPOdplG_NmXGfa-WdTCigMgs,1863
55
+ wrfrun/res/config/palm.template.toml,sha256=_1vDjdnzb9vJPx5RXa0czevU5jQPdgLOJkGc-KVThoI,718
56
+ wrfrun/res/config/wrf.template.toml,sha256=qQS3OHAXBMaKWgj2qT7jLeDu6tyngPgin7Q-XcE3ZkQ,3189
57
+ wrfrun/res/extension/plotgrids.ncl,sha256=B0mvH1H1j_w7EEana9HmU1XJZtG0w9IccQ54zXpbQG0,7546
58
+ wrfrun/res/namelist/namelist.input.da_wrfvar.template,sha256=Cwc-XPu_spJeQte4duWrulPBOLRMEBtn0mIn0pgMmKY,4912
59
+ wrfrun/res/namelist/namelist.input.dfi.template,sha256=E7MVbIvMopkAM7xGUC4vniC1WOUVbIbdLfkTKHqzX_o,6591
60
+ wrfrun/res/namelist/namelist.input.real.template,sha256=DDUiArtBFmzBwVjkZW4NOrBR34eIOk1vV0VsyL0stsk,6214
61
+ wrfrun/res/namelist/namelist.input.wrf.template,sha256=myrKi79sQ8ABBsmQJkcgN0WLbWJdtMVPIjuAC1MTMuM,6213
62
+ wrfrun/res/namelist/namelist.wps.template,sha256=HlA7-SHs4C-cKRb3h6D0Kl1Y-5VSJ1Lw9hLiXWGAN0Q,1017
63
+ wrfrun/res/namelist/parame.in.template,sha256=vR8JSix20FAKGqj6jK8QuEAeWkGvg8_iptdVlzjPX6o,259
64
+ wrfrun/res/scheduler/lsf.template,sha256=KorLfqTFTqTTctDE9Edgkixi7JLWrcDNRpZknXuxbEQ,111
65
+ wrfrun/res/scheduler/pbs.template,sha256=kP4pGMAq2uz0OZUAWii7dO4ECLC924c8SnciFeBL5QY,155
66
+ wrfrun/res/scheduler/slurm.template,sha256=sQNjkKzOftipDD4kYmzhZkh8fg0M9uaQsdLjDakCVwA,336
67
+ wrfrun/scheduler/__init__.py,sha256=Np6wLwxJ_tk84modbjZ42oZnrHIRoOYAk3L4CfQ7B4Q,1160
68
+ wrfrun/scheduler/env.py,sha256=N_K5yZFRXMEXvW3yjSideEDPWZzoWpbRhFS9LJoZ3R8,1262
69
+ wrfrun/scheduler/lsf.py,sha256=KGFArdhN9SWkaEDtRge_Xoam-1tp494cWwOHV4AC6g8,1187
70
+ wrfrun/scheduler/pbs.py,sha256=iz16WkYV3SGnR0cULqtU-Sp_WN-JWvdUOkUWi7TG6vM,1203
71
+ wrfrun/scheduler/script.py,sha256=eLhj9mZP4JiPVT2hdUDyLtCxcMDf1Qr-vN_ryWBdHNE,2625
72
+ wrfrun/scheduler/slurm.py,sha256=NkvBweYhQYN09Uv8D80goMiGA5h5TggGyZ15CUxe5yk,1225
73
+ wrfrun/scheduler/utils.py,sha256=6SOUp_TYFFNEeHaQrnJ1GGekUtRocFs1kkWvuw8X3u4,376
74
+ wrfrun/workspace/__init__.py,sha256=qEgg8esqTWZpsYFy0ZlZP1cFZldjvpHTf0iVaiZ_vAs,1645
75
+ wrfrun/workspace/core.py,sha256=q8M_al7zJ5awd8yMc43Ocmi4uy77fLS2YFUXkpXJpVg,3090
76
+ wrfrun/workspace/palm.py,sha256=ZfDRKomcPredDmQwTpo--inm2ecvja32ZM9zis6cwsU,4133
77
+ wrfrun/workspace/wrf.py,sha256=BtIRwAQ-9PF8hBYJiNUaqfaqQoX2Wyz96EZWEhlLihg,5124
78
+ wrfrun-0.3.1.dist-info/RECORD,,