wrfrun 0.1.9__py3-none-any.whl → 0.3.0__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 +74 -31
  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 +136 -380
  11. wrfrun/core/core.py +196 -0
  12. wrfrun/core/error.py +35 -2
  13. wrfrun/core/replay.py +10 -96
  14. wrfrun/core/server.py +74 -32
  15. wrfrun/core/type.py +171 -0
  16. wrfrun/data.py +312 -149
  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 +5 -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 -114
  30. wrfrun/model/type.py +116 -0
  31. wrfrun/model/utils.py +9 -19
  32. wrfrun/model/wrf/__init__.py +4 -9
  33. wrfrun/model/wrf/core.py +262 -165
  34. wrfrun/model/wrf/exec_wrap.py +13 -12
  35. wrfrun/model/wrf/geodata.py +116 -99
  36. wrfrun/model/wrf/log.py +103 -0
  37. wrfrun/model/wrf/namelist.py +92 -76
  38. wrfrun/model/wrf/plot.py +102 -0
  39. wrfrun/model/wrf/scheme.py +108 -52
  40. wrfrun/model/wrf/utils.py +39 -24
  41. wrfrun/model/wrf/vtable.py +42 -7
  42. wrfrun/plot/__init__.py +20 -0
  43. wrfrun/plot/wps.py +90 -73
  44. wrfrun/res/__init__.py +115 -5
  45. wrfrun/res/config/config.template.toml +15 -0
  46. wrfrun/res/config/palm.template.toml +23 -0
  47. wrfrun/run.py +121 -77
  48. wrfrun/scheduler/__init__.py +1 -0
  49. wrfrun/scheduler/lsf.py +4 -1
  50. wrfrun/scheduler/pbs.py +4 -1
  51. wrfrun/scheduler/script.py +19 -5
  52. wrfrun/scheduler/slurm.py +4 -1
  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 +21 -11
  57. wrfrun/workspace/palm.py +137 -0
  58. wrfrun/workspace/wrf.py +59 -14
  59. wrfrun-0.3.0.dist-info/METADATA +240 -0
  60. wrfrun-0.3.0.dist-info/RECORD +78 -0
  61. wrfrun/core/config.py +0 -767
  62. wrfrun/model/base.py +0 -14
  63. wrfrun-0.1.9.dist-info/METADATA +0 -68
  64. wrfrun-0.1.9.dist-info/RECORD +0 -62
  65. {wrfrun-0.1.9.dist-info → wrfrun-0.3.0.dist-info}/WHEEL +0 -0
  66. {wrfrun-0.1.9.dist-info → wrfrun-0.3.0.dist-info}/entry_points.txt +0 -0
wrfrun/workspace/wrf.py CHANGED
@@ -7,20 +7,61 @@ Functions to prepare workspace for WPS/WRF model.
7
7
  .. autosummary::
8
8
  :toctree: generated/
9
9
 
10
+ get_wrf_workspace_path
10
11
  prepare_wrf_workspace
11
12
  check_wrf_workspace
12
13
  """
13
14
 
14
15
  from os import listdir, makedirs, symlink
15
16
  from os.path import exists
17
+ from typing import Literal
16
18
 
17
- from wrfrun.core import WRFRUNConfig
18
- from wrfrun.utils import logger, check_path
19
+ from wrfrun.core import WRFRUN, WRFRunConfig
20
+ from wrfrun.log import logger
21
+ from wrfrun.utils import check_path
19
22
 
23
+ WORKSPACE_MODEL_WPS = ""
24
+ WORKSPACE_MODEL_WRF = ""
25
+ WORKSPACE_MODEL_WRFDA = ""
20
26
 
21
- WORKSPACE_MODEL_WPS = f"{WRFRUNConfig.WRFRUN_WORKSPACE_MODEL}/WPS"
22
- WORKSPACE_MODEL_WRF = f"{WRFRUNConfig.WRFRUN_WORKSPACE_MODEL}/WRF"
23
- WORKSPACE_MODEL_WRFDA = f"{WRFRUNConfig.WRFRUN_WORKSPACE_MODEL}/WRFDA"
27
+
28
+ def _register_wrf_workspace_uri(wrfrun_config: WRFRunConfig):
29
+ """
30
+ This function doesn't register any URI.
31
+
32
+ This is a hook to initializes some global strings.
33
+
34
+ :param wrfrun_config: ``WRFRUNProxy`` instance.
35
+ :type wrfrun_config: WRFRUNProxy
36
+ """
37
+ global WORKSPACE_MODEL_WPS, WORKSPACE_MODEL_WRF, WORKSPACE_MODEL_WRFDA
38
+
39
+ WORKSPACE_MODEL_WPS = f"{wrfrun_config.WRFRUN_WORKSPACE_MODEL}/WPS"
40
+ WORKSPACE_MODEL_WRF = f"{wrfrun_config.WRFRUN_WORKSPACE_MODEL}/WRF"
41
+ WORKSPACE_MODEL_WRFDA = f"{wrfrun_config.WRFRUN_WORKSPACE_MODEL}/WRFDA"
42
+
43
+
44
+ WRFRUN.set_config_register_func(_register_wrf_workspace_uri)
45
+
46
+
47
+ def get_wrf_workspace_path(name: Literal["wps", "wrf", "wrfda"]) -> str:
48
+ """
49
+ Get workspace path of WRF model.
50
+
51
+ :param name: Model part name.
52
+ :type name: str
53
+ :return: Workspace path.
54
+ :rtype: str
55
+ """
56
+ match name:
57
+ case "wps":
58
+ return WORKSPACE_MODEL_WPS
59
+
60
+ case "wrf":
61
+ return WORKSPACE_MODEL_WRF
62
+
63
+ case "wrfda":
64
+ return WORKSPACE_MODEL_WRFDA
24
65
 
25
66
 
26
67
  def prepare_wrf_workspace(model_config: dict):
@@ -37,20 +78,22 @@ def prepare_wrf_workspace(model_config: dict):
37
78
  :param model_config: Model config.
38
79
  :type model_config: dict
39
80
  """
40
- logger.info(f"Initialize workspace for WPS/WRF.")
81
+ logger.info("Initialize workspace for WPS/WRF.")
82
+
83
+ WRFRUNConfig = WRFRUN.config
41
84
 
42
85
  wps_path = model_config["wps_path"]
43
86
  wrf_path = model_config["wrf_path"]
44
87
  wrfda_path = model_config["wrfda_path"]
45
88
 
46
89
  if not (wps_path and wrf_path):
47
- logger.warning(f"No WPS/WRF model installation path given, skip initialization.")
90
+ logger.warning("No WPS/WRF model installation path given, skip initialization.")
48
91
  return
49
92
 
50
93
  if wps_path:
51
94
  if not exists(wps_path):
52
- logger.error(f"Your WPS path is wrong.")
53
- raise FileNotFoundError(f"Your WPS path is wrong.")
95
+ logger.error("Your WPS path is wrong.")
96
+ raise FileNotFoundError("Your WPS path is wrong.")
54
97
 
55
98
  wps_work_path = WRFRUNConfig.parse_resource_uri(WORKSPACE_MODEL_WPS)
56
99
  check_path(wps_work_path, f"{wps_work_path}/outputs", force=True)
@@ -62,8 +105,8 @@ def prepare_wrf_workspace(model_config: dict):
62
105
 
63
106
  if wrf_path:
64
107
  if not exists(wrf_path):
65
- logger.error(f"Your WRF path is wrong.")
66
- raise FileNotFoundError(f"Your WRF path is wrong.")
108
+ logger.error("Your WRF path is wrong.")
109
+ raise FileNotFoundError("Your WRF path is wrong.")
67
110
 
68
111
  wrf_work_path = WRFRUNConfig.parse_resource_uri(WORKSPACE_MODEL_WRF)
69
112
  check_path(wrf_work_path, force=True)
@@ -73,8 +116,8 @@ def prepare_wrf_workspace(model_config: dict):
73
116
 
74
117
  if wrfda_path:
75
118
  if not exists(wrfda_path):
76
- logger.error(f"Your WRFDA path is wrong.")
77
- raise FileNotFoundError(f"Your WRFDA path is wrong.")
119
+ logger.error("Your WRFDA path is wrong.")
120
+ raise FileNotFoundError("Your WRFDA path is wrong.")
78
121
 
79
122
  wrfda_work_path = WRFRUNConfig.parse_resource_uri(WORKSPACE_MODEL_WRFDA)
80
123
  check_path(wrfda_work_path, force=True)
@@ -97,6 +140,8 @@ def check_wrf_workspace(model_config: dict) -> bool:
97
140
  :return: ``True`` if WPS/WRF workspace exists, ``False`` otherwise.
98
141
  :rtype: bool
99
142
  """
143
+ WRFRUNConfig = WRFRUN.config
144
+
100
145
  wps_path = model_config["wps_path"]
101
146
  wrf_path = model_config["wrf_path"]
102
147
  wrfda_path = model_config["wrfda_path"]
@@ -118,4 +163,4 @@ def check_wrf_workspace(model_config: dict) -> bool:
118
163
  return flag
119
164
 
120
165
 
121
- __all__ = ["prepare_wrf_workspace", "WORKSPACE_MODEL_WRF", "WORKSPACE_MODEL_WPS", "WORKSPACE_MODEL_WRFDA", "check_wrf_workspace"]
166
+ __all__ = ["get_wrf_workspace_path", "prepare_wrf_workspace", "check_wrf_workspace"]
@@ -0,0 +1,240 @@
1
+ Metadata-Version: 2.1
2
+ Name: wrfrun
3
+ Version: 0.3.0
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: wrf-python>=1.3.1
27
+ Requires-Dist: cfgrib>=0.9.15.1
28
+ Description-Content-Type: text/markdown
29
+
30
+ # 🌀 wrfrun
31
+
32
+ > A modern, unified framework for running and managing numerical models.
33
+ >
34
+ > Designed for researchers who want to focus on science — not on the details of model execution.
35
+
36
+ ## 📖 Introduction
37
+
38
+ `wrfrun` is a Python package that provides a general-purpose, reproducible, and extensible framework for running numerical models.
39
+
40
+ 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.
41
+
42
+ ## ⚡ Quick Installation
43
+
44
+ ```bash
45
+ pip install wrfrun
46
+ ```
47
+
48
+ ## 📖 Documentation
49
+
50
+ Check [https://wrfrun.syize.cn](https://wrfrun.syize.cn/).
51
+
52
+ ## 🌟 Core Features
53
+
54
+ ### 🧩 Unified Interface Architecture
55
+
56
+ `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.
57
+
58
+ 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.
59
+
60
+ ```python
61
+ from wrfrun import WRFRun
62
+ from wrfrun.model.wrf import geogrid, metgrid, real, ungrib, wrf
63
+
64
+ # wrfrun will prepare input data, generate namelist file,
65
+ # save outputs and logs automatically.
66
+ with WRFRun("./config.toml", init_workspace=True) as wrf_run:
67
+ geogrid()
68
+ ungrib()
69
+ metgrid()
70
+ real()
71
+ wrf()
72
+ ```
73
+
74
+ ### 🪶 Record & Replay
75
+
76
+ Every simulation can be fully recorded and later reproduced from a single `.replay` file — ensuring total reproducibility.
77
+
78
+ ```python
79
+ from wrfrun import WRFRun
80
+ from wrfrun.model.wrf import geogrid, ungrib, metgrid, real, wrf
81
+
82
+
83
+ # 1. Record simulation with method `record_simulation`.
84
+ with WRFRun("./config.toml", init_workspace=True) as wrf_run:
85
+ wrf_run.record_simulation(output_path="./outputs/example.replay")
86
+
87
+ geogrid()
88
+ ungrib()
89
+ metgrid()
90
+ real()
91
+ wrf()
92
+
93
+ # 2. Replay the simulation in a different directory or on a different machine.
94
+ with WRFRun("./config.toml", init_workspace=True) as wrf_run:
95
+ wrf_run.replay_simulation("./example.replay")
96
+ ```
97
+
98
+ ### ⚙️ Simplified Configuration
99
+
100
+ Manage all simulation settings in TOML files: A main config file, and model config files.
101
+
102
+ For more information about the configuration file, check [config](wrfrun/res/config).
103
+
104
+ ```toml
105
+ # main config file: config.toml
106
+ work_dir = "./.wrfrun"
107
+
108
+ input_data_path = ""
109
+ output_path = "./outputs"
110
+ log_path = "./logs"
111
+
112
+ server_host = "localhost"
113
+ server_port = 54321
114
+
115
+ core_num = 36
116
+
117
+ [job_scheduler]
118
+ job_scheduler = "pbs"
119
+
120
+ queue_name = ""
121
+ node_num = 1
122
+ env_settings = {}
123
+ python_interpreter = "/usr/bin/python3" # or just "python3"
124
+
125
+ [model]
126
+ [model.wrf]
127
+ use = false
128
+ include = "./configs/wrf.toml"
129
+ ```
130
+
131
+ `wrfrun` remains compatible with original `namelist` inputs, just set namelist file path in the model config.
132
+
133
+ ```toml
134
+ # WRF model config file: wrf.toml
135
+ wps_path = '/path/to/your/WPS/folder'
136
+ wrf_path = '/path/to/your/WRF/folder'
137
+ wrfda_path = '' # WRFDA is optional.
138
+ geog_data_path = '/path/to/your/geog/data'
139
+ user_wps_namelist = '' # set your own namelist file here
140
+ user_real_namelist = '' # set your own namelist file here
141
+ user_wrf_namelist = '' # set your own namelist file here
142
+ user_wrfda_namelist = '' # set your own namelist file here
143
+ restart_mode = false
144
+ debug_level = 100
145
+
146
+ [time]
147
+ start_date = 2021-03-24T12:00:00Z # or [2021-03-24T12:00:00Z, 2021-03-24T12:00:00Z]
148
+ end_date = 2021-03-26T00:00:00Z # or [2021-03-26T00:00:00Z, 2021-03-24T12:00:00Z]
149
+ input_data_interval = 10800
150
+ output_data_interval = 180
151
+ time_step = 120
152
+ parent_time_step_ratio = [1, 3, 4]
153
+ restart_interval = -1
154
+
155
+
156
+ [domain]
157
+ domain_num = 3
158
+ parent_grid_ratio = [1, 3, 9]
159
+ i_parent_start = [1, 17, 72]
160
+ j_parent_start = [1, 17, 36]
161
+ e_we = [120, 250, 1198]
162
+ e_sn = [120, 220, 1297]
163
+ dx = 9000
164
+ dy = 9000
165
+ map_proj = 'lambert'
166
+ truelat1 = 34.0
167
+ truelat2 = 40.0
168
+ ref_lat = 37.0
169
+ ref_lon = 120.5
170
+ stand_lon = 120.5
171
+
172
+
173
+ [scheme]
174
+ long_wave_scheme = { name = "rrtm", option = {} }
175
+ short_wave_scheme = { name = "rrtmg", option = {} }
176
+ cumulus_scheme = { name = "kf", option = {} }
177
+ pbl_scheme = { name = "ysu", option = { ysu_topdown_pblmix = 1} }
178
+ land_surface_scheme = { name = "noah", option = {} }
179
+ surface_layer_scheme = { name = "mm5", option = {} }
180
+ ```
181
+
182
+ ### 💻 Job Scheduling Integration
183
+
184
+ Automatically submit jobs to supported schedulers:
185
+
186
+ - PBS
187
+ - Slurm
188
+ - LSF
189
+
190
+ `wrfrun` takes care of resource requests and queue management automatically.
191
+
192
+ ```python
193
+ from wrfrun import WRFRun
194
+ from wrfrun.model.wrf import geogrid, metgrid, real, ungrib, wrf
195
+
196
+ # just set submit_job=True
197
+ with WRFRun("./config.toml", init_workspace=True, submit_job=True) as wrf_run:
198
+ geogrid()
199
+ ungrib()
200
+ metgrid()
201
+ real()
202
+ wrf()
203
+ ```
204
+
205
+ ### 📡 Real-time Monitoring
206
+
207
+ `wrfrun` can parse model log files and start a lightweight socket server to report simulation progress.
208
+
209
+ ```python
210
+ from wrfrun import WRFRun
211
+ from wrfrun.model.wrf import geogrid, metgrid, real, ungrib, wrf
212
+
213
+ # just set start_server=True
214
+ with WRFRun("./config.toml", init_workspace=True, start_server=True) as wrf_run:
215
+ geogrid()
216
+ ungrib()
217
+ metgrid()
218
+ real()
219
+ wrf()
220
+ ```
221
+
222
+ ## 🌍 Current Capabilities
223
+
224
+ - Automated ERA5 data download (requires `cdsapi` authentication)
225
+ - Real-time progress reporting via socket interface
226
+ - Partial WRF support:
227
+ - Full support for WPS
228
+ - Wrapped execution for `real` and `wrf`
229
+ - Job submission on PBS, Slurm, and LSF
230
+ - `record` / `replay` reproducibility for all compliant interfaces
231
+
232
+ ## 🧭 TODO
233
+
234
+ - [ ] Full WRF model integration.
235
+ - [ ] Broaden model support.
236
+ - [ ] Enhanced progress visualization dashboard.
237
+
238
+ ## 🤝 Contributing
239
+
240
+ 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.0.dist-info/METADATA,sha256=SlRvhwXdvEzl3srzk-ewDx8X_hyfvseWl2zgB3i_P-8,6801
2
+ wrfrun-0.3.0.dist-info/WHEEL,sha256=5J4neoE7k6LMgx4Fz1FHgBiO3YevhJGtNQ3muDrdLQM,75
3
+ wrfrun-0.3.0.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=YoiBL5XOS6nHKRf9-_h_kz3-lr4rlA3-OElHHhW3dCw,5755
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.0.dist-info/RECORD,,