vortex-nwp 2.0.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.
- vortex/__init__.py +159 -0
- vortex/algo/__init__.py +13 -0
- vortex/algo/components.py +2462 -0
- vortex/algo/mpitools.py +1953 -0
- vortex/algo/mpitools_templates/__init__.py +1 -0
- vortex/algo/mpitools_templates/envelope_wrapper_default.tpl +27 -0
- vortex/algo/mpitools_templates/envelope_wrapper_mpiauto.tpl +29 -0
- vortex/algo/mpitools_templates/wrapstd_wrapper_default.tpl +18 -0
- vortex/algo/serversynctools.py +171 -0
- vortex/config.py +112 -0
- vortex/data/__init__.py +19 -0
- vortex/data/abstractstores.py +1510 -0
- vortex/data/containers.py +835 -0
- vortex/data/contents.py +622 -0
- vortex/data/executables.py +275 -0
- vortex/data/flow.py +119 -0
- vortex/data/geometries.ini +2689 -0
- vortex/data/geometries.py +799 -0
- vortex/data/handlers.py +1230 -0
- vortex/data/outflow.py +67 -0
- vortex/data/providers.py +487 -0
- vortex/data/resources.py +207 -0
- vortex/data/stores.py +1390 -0
- vortex/data/sync_templates/__init__.py +0 -0
- vortex/gloves.py +309 -0
- vortex/layout/__init__.py +20 -0
- vortex/layout/contexts.py +577 -0
- vortex/layout/dataflow.py +1220 -0
- vortex/layout/monitor.py +969 -0
- vortex/nwp/__init__.py +14 -0
- vortex/nwp/algo/__init__.py +21 -0
- vortex/nwp/algo/assim.py +537 -0
- vortex/nwp/algo/clim.py +1086 -0
- vortex/nwp/algo/coupling.py +831 -0
- vortex/nwp/algo/eda.py +840 -0
- vortex/nwp/algo/eps.py +785 -0
- vortex/nwp/algo/forecasts.py +886 -0
- vortex/nwp/algo/fpserver.py +1303 -0
- vortex/nwp/algo/ifsnaming.py +463 -0
- vortex/nwp/algo/ifsroot.py +404 -0
- vortex/nwp/algo/monitoring.py +263 -0
- vortex/nwp/algo/mpitools.py +694 -0
- vortex/nwp/algo/odbtools.py +1258 -0
- vortex/nwp/algo/oopsroot.py +916 -0
- vortex/nwp/algo/oopstests.py +220 -0
- vortex/nwp/algo/request.py +660 -0
- vortex/nwp/algo/stdpost.py +1641 -0
- vortex/nwp/data/__init__.py +30 -0
- vortex/nwp/data/assim.py +380 -0
- vortex/nwp/data/boundaries.py +314 -0
- vortex/nwp/data/climfiles.py +521 -0
- vortex/nwp/data/configfiles.py +153 -0
- vortex/nwp/data/consts.py +954 -0
- vortex/nwp/data/ctpini.py +149 -0
- vortex/nwp/data/diagnostics.py +209 -0
- vortex/nwp/data/eda.py +147 -0
- vortex/nwp/data/eps.py +432 -0
- vortex/nwp/data/executables.py +1045 -0
- vortex/nwp/data/fields.py +111 -0
- vortex/nwp/data/gridfiles.py +380 -0
- vortex/nwp/data/logs.py +584 -0
- vortex/nwp/data/modelstates.py +363 -0
- vortex/nwp/data/monitoring.py +193 -0
- vortex/nwp/data/namelists.py +696 -0
- vortex/nwp/data/obs.py +840 -0
- vortex/nwp/data/oopsexec.py +74 -0
- vortex/nwp/data/providers.py +207 -0
- vortex/nwp/data/query.py +206 -0
- vortex/nwp/data/stores.py +160 -0
- vortex/nwp/data/surfex.py +337 -0
- vortex/nwp/syntax/__init__.py +9 -0
- vortex/nwp/syntax/stdattrs.py +437 -0
- vortex/nwp/tools/__init__.py +10 -0
- vortex/nwp/tools/addons.py +40 -0
- vortex/nwp/tools/agt.py +67 -0
- vortex/nwp/tools/bdap.py +59 -0
- vortex/nwp/tools/bdcp.py +41 -0
- vortex/nwp/tools/bdm.py +24 -0
- vortex/nwp/tools/bdmp.py +54 -0
- vortex/nwp/tools/conftools.py +1661 -0
- vortex/nwp/tools/drhook.py +66 -0
- vortex/nwp/tools/grib.py +294 -0
- vortex/nwp/tools/gribdiff.py +104 -0
- vortex/nwp/tools/ifstools.py +203 -0
- vortex/nwp/tools/igastuff.py +273 -0
- vortex/nwp/tools/mars.py +68 -0
- vortex/nwp/tools/odb.py +657 -0
- vortex/nwp/tools/partitioning.py +258 -0
- vortex/nwp/tools/satrad.py +71 -0
- vortex/nwp/util/__init__.py +6 -0
- vortex/nwp/util/async.py +212 -0
- vortex/nwp/util/beacon.py +40 -0
- vortex/nwp/util/diffpygram.py +447 -0
- vortex/nwp/util/ens.py +279 -0
- vortex/nwp/util/hooks.py +139 -0
- vortex/nwp/util/taskdeco.py +85 -0
- vortex/nwp/util/usepygram.py +697 -0
- vortex/nwp/util/usetnt.py +101 -0
- vortex/proxy.py +6 -0
- vortex/sessions.py +374 -0
- vortex/syntax/__init__.py +9 -0
- vortex/syntax/stdattrs.py +867 -0
- vortex/syntax/stddeco.py +185 -0
- vortex/toolbox.py +1117 -0
- vortex/tools/__init__.py +20 -0
- vortex/tools/actions.py +523 -0
- vortex/tools/addons.py +316 -0
- vortex/tools/arm.py +96 -0
- vortex/tools/compression.py +325 -0
- vortex/tools/date.py +27 -0
- vortex/tools/ddhpack.py +10 -0
- vortex/tools/delayedactions.py +782 -0
- vortex/tools/env.py +541 -0
- vortex/tools/folder.py +834 -0
- vortex/tools/grib.py +738 -0
- vortex/tools/lfi.py +953 -0
- vortex/tools/listings.py +423 -0
- vortex/tools/names.py +637 -0
- vortex/tools/net.py +2124 -0
- vortex/tools/odb.py +10 -0
- vortex/tools/parallelism.py +368 -0
- vortex/tools/prestaging.py +210 -0
- vortex/tools/rawfiles.py +10 -0
- vortex/tools/schedulers.py +480 -0
- vortex/tools/services.py +940 -0
- vortex/tools/storage.py +996 -0
- vortex/tools/surfex.py +61 -0
- vortex/tools/systems.py +3976 -0
- vortex/tools/targets.py +440 -0
- vortex/util/__init__.py +9 -0
- vortex/util/config.py +1122 -0
- vortex/util/empty.py +24 -0
- vortex/util/helpers.py +216 -0
- vortex/util/introspection.py +69 -0
- vortex/util/iosponge.py +80 -0
- vortex/util/roles.py +49 -0
- vortex/util/storefunctions.py +129 -0
- vortex/util/structs.py +26 -0
- vortex/util/worker.py +162 -0
- vortex_nwp-2.0.0.dist-info/METADATA +67 -0
- vortex_nwp-2.0.0.dist-info/RECORD +144 -0
- vortex_nwp-2.0.0.dist-info/WHEEL +5 -0
- vortex_nwp-2.0.0.dist-info/licenses/LICENSE +517 -0
- vortex_nwp-2.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Ensemble of classes that deal with input/output filenames for IFS/Arpege related
|
|
3
|
+
binaries (those that inherits from :class:`IFSParallel`).
|
|
4
|
+
|
|
5
|
+
Since input/output names may vary depending on the code's cycle, the configuration
|
|
6
|
+
number, or basically anything that might emerge from the mind of a twisted
|
|
7
|
+
developer... :mod:`footprints` is used to find out the most appropriate name
|
|
8
|
+
depending on various things:
|
|
9
|
+
|
|
10
|
+
* The model name (e.g. Arpege, Arome, Surfex)
|
|
11
|
+
* The file format (e.g. FA, GRIB)
|
|
12
|
+
* The binary cycle number (e.g. cy42_op2)
|
|
13
|
+
* The configuration number (e.g. 1, 701)
|
|
14
|
+
* The experiment name (e.g; FCST, CANS)
|
|
15
|
+
|
|
16
|
+
An additional attribute *kind* is mandatory, it helps to describe which type of
|
|
17
|
+
input/output file is targeted. The developer can also add customised attributes as
|
|
18
|
+
she/he may see fit.
|
|
19
|
+
|
|
20
|
+
The base class for any object dealing with IFS/Arpege file names is
|
|
21
|
+
:class:`IFSNamingConvention`. The "ifsnamingconv" footprints' collector is used.
|
|
22
|
+
|
|
23
|
+
Do not create :class:`IFSNamingConvention` objects directly. Instead, use the
|
|
24
|
+
:meth:`IFSParallel.naming_convention` method.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
import math
|
|
28
|
+
|
|
29
|
+
import footprints
|
|
30
|
+
|
|
31
|
+
from vortex.syntax.stdattrs import model, actualfmt
|
|
32
|
+
from ..syntax.stdattrs import arpifs_cycle
|
|
33
|
+
|
|
34
|
+
#: No automatic export
|
|
35
|
+
__all__ = []
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# Base & Generic classes
|
|
39
|
+
# ##############################################################################
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class IFSNamingConvention(footprints.FootprintBase):
|
|
43
|
+
"""Abstract class for any object representing an IFS/Arpege naming scheme."""
|
|
44
|
+
|
|
45
|
+
_abstract = True
|
|
46
|
+
_collector = ("ifsnamingconv",)
|
|
47
|
+
_footprint = [
|
|
48
|
+
model,
|
|
49
|
+
actualfmt,
|
|
50
|
+
arpifs_cycle,
|
|
51
|
+
dict(
|
|
52
|
+
attr=dict(
|
|
53
|
+
kind=dict(info="The type of targeted input/output file"),
|
|
54
|
+
conf=dict(
|
|
55
|
+
info="IFS/Arpege configuration number",
|
|
56
|
+
type=int,
|
|
57
|
+
),
|
|
58
|
+
xpname=dict(
|
|
59
|
+
info="IFS/Arpege experiment name",
|
|
60
|
+
),
|
|
61
|
+
actualfmt=dict(
|
|
62
|
+
info="The target file format",
|
|
63
|
+
optional=True,
|
|
64
|
+
),
|
|
65
|
+
)
|
|
66
|
+
),
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
def _naming_format_string(self, **kwargs):
|
|
70
|
+
"""Return the format string that will be used to generate the filename."""
|
|
71
|
+
raise NotImplementedError()
|
|
72
|
+
|
|
73
|
+
def __call__(self, **kwargs):
|
|
74
|
+
return self._naming_format_string(**kwargs).format(
|
|
75
|
+
xpname=self.xpname,
|
|
76
|
+
conf=self.conf,
|
|
77
|
+
fmt=self.actualfmt,
|
|
78
|
+
model=self.model,
|
|
79
|
+
**kwargs,
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# Activate the footprint's fasttrack on the ifsnamingconv collector
|
|
84
|
+
ncollect = footprints.collectors.get(tag="ifsnamingconv")
|
|
85
|
+
ncollect.fasttrack = ("kind",)
|
|
86
|
+
del ncollect
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class IFSHardWiredNamingConvention(IFSNamingConvention):
|
|
90
|
+
"""
|
|
91
|
+
A very basic object where the user can provide the format string on its own
|
|
92
|
+
using the *namingformat*. For debugging only...
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
_footprint = dict(
|
|
96
|
+
attr=dict(namingformat=dict()),
|
|
97
|
+
priority=dict(
|
|
98
|
+
level=footprints.priorities.top.TOOLBOX # @UndefinedVariable
|
|
99
|
+
),
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
def _naming_format_string(self, **kwargs):
|
|
103
|
+
return self.namingformat
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
# Climatology files names
|
|
107
|
+
# ##############################################################################
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
class ModelClimName(IFSNamingConvention):
|
|
111
|
+
"""An IFS/Arpege model clim."""
|
|
112
|
+
|
|
113
|
+
_footprint = dict(
|
|
114
|
+
attr=dict(
|
|
115
|
+
kind=dict(
|
|
116
|
+
values=[
|
|
117
|
+
"modelclim",
|
|
118
|
+
],
|
|
119
|
+
),
|
|
120
|
+
conf=dict(
|
|
121
|
+
outcast=[
|
|
122
|
+
701,
|
|
123
|
+
],
|
|
124
|
+
),
|
|
125
|
+
model=dict(
|
|
126
|
+
outcast=[
|
|
127
|
+
"surfex",
|
|
128
|
+
]
|
|
129
|
+
),
|
|
130
|
+
)
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
def _naming_format_string(self, **kwargs):
|
|
134
|
+
return "Const.Clim"
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class SurfexClimName(IFSNamingConvention):
|
|
138
|
+
"""A Surfex model clim."""
|
|
139
|
+
|
|
140
|
+
_footprint = dict(
|
|
141
|
+
attr=dict(
|
|
142
|
+
kind=dict(
|
|
143
|
+
values=[
|
|
144
|
+
"modelclim",
|
|
145
|
+
],
|
|
146
|
+
),
|
|
147
|
+
model=dict(
|
|
148
|
+
values=[
|
|
149
|
+
"surfex",
|
|
150
|
+
]
|
|
151
|
+
),
|
|
152
|
+
)
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
def _naming_format_string(self, **kwargs):
|
|
156
|
+
return "Const.Clim.sfx"
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class TargetClimName(IFSNamingConvention):
|
|
160
|
+
"""A BDAP clim file or a target domain IFS/Arpege clim file."""
|
|
161
|
+
|
|
162
|
+
_footprint = dict(
|
|
163
|
+
attr=dict(
|
|
164
|
+
kind=dict(
|
|
165
|
+
values=[
|
|
166
|
+
"targetclim",
|
|
167
|
+
],
|
|
168
|
+
),
|
|
169
|
+
model=dict(
|
|
170
|
+
outcast=[
|
|
171
|
+
"surfex",
|
|
172
|
+
]
|
|
173
|
+
),
|
|
174
|
+
)
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
def _naming_format_string(self, **kwargs):
|
|
178
|
+
return "const.clim.{area:s}"
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
class SurfexTargetClimName(IFSNamingConvention):
|
|
182
|
+
"""A target domain Surfex clim file."""
|
|
183
|
+
|
|
184
|
+
_footprint = dict(
|
|
185
|
+
attr=dict(
|
|
186
|
+
kind=dict(
|
|
187
|
+
values=[
|
|
188
|
+
"targetclim",
|
|
189
|
+
],
|
|
190
|
+
),
|
|
191
|
+
model=dict(
|
|
192
|
+
values=[
|
|
193
|
+
"surfex",
|
|
194
|
+
]
|
|
195
|
+
),
|
|
196
|
+
)
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
def _naming_format_string(self, **kwargs):
|
|
200
|
+
return "const.clim.sfx.{area:s}"
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
class CanariModelClimName(IFSNamingConvention):
|
|
204
|
+
"""An IFS/Arpege model clim (specific naming for Canari)."""
|
|
205
|
+
|
|
206
|
+
_footprint = dict(
|
|
207
|
+
attr=dict(
|
|
208
|
+
kind=dict(
|
|
209
|
+
values=[
|
|
210
|
+
"modelclim",
|
|
211
|
+
],
|
|
212
|
+
),
|
|
213
|
+
conf=dict(
|
|
214
|
+
values=[
|
|
215
|
+
701,
|
|
216
|
+
],
|
|
217
|
+
),
|
|
218
|
+
model=dict(
|
|
219
|
+
outcast=[
|
|
220
|
+
"surfex",
|
|
221
|
+
]
|
|
222
|
+
),
|
|
223
|
+
)
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
def _naming_format_string(self, **kwargs):
|
|
227
|
+
return "ICMSH{xpname:s}CLIM"
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
class CanariClosestModelClimName(CanariModelClimName):
|
|
231
|
+
"""An IFS/Arpege model clim for the closest month (specific naming for Canari)."""
|
|
232
|
+
|
|
233
|
+
_footprint = dict(
|
|
234
|
+
attr=dict(
|
|
235
|
+
kind=dict(
|
|
236
|
+
values=[
|
|
237
|
+
"closest_modelclim",
|
|
238
|
+
],
|
|
239
|
+
),
|
|
240
|
+
)
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
def _naming_format_string(self, **kwargs):
|
|
244
|
+
return "ICMSH{xpname:s}CLI2"
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
# Initial conditions file names
|
|
248
|
+
# ##############################################################################
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
class InitialContionsName(IFSNamingConvention):
|
|
252
|
+
_footprint = dict(
|
|
253
|
+
attr=dict(
|
|
254
|
+
kind=dict(
|
|
255
|
+
values=[
|
|
256
|
+
"ic",
|
|
257
|
+
],
|
|
258
|
+
),
|
|
259
|
+
model=dict(
|
|
260
|
+
outcast=[
|
|
261
|
+
"surfex",
|
|
262
|
+
]
|
|
263
|
+
),
|
|
264
|
+
)
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
def _naming_format_string(self, **kwargs):
|
|
268
|
+
return "ICMSH{xpname:s}INIT"
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
class SurfexInitialContionsName(IFSNamingConvention):
|
|
272
|
+
_footprint = dict(
|
|
273
|
+
attr=dict(
|
|
274
|
+
kind=dict(
|
|
275
|
+
values=[
|
|
276
|
+
"ic",
|
|
277
|
+
],
|
|
278
|
+
),
|
|
279
|
+
model=dict(
|
|
280
|
+
values=[
|
|
281
|
+
"surfex",
|
|
282
|
+
]
|
|
283
|
+
),
|
|
284
|
+
)
|
|
285
|
+
)
|
|
286
|
+
|
|
287
|
+
def _naming_format_string(self, **kwargs):
|
|
288
|
+
return "ICMSH{xpname:s}INIT.sfx"
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
class IauAnalysisName(IFSNamingConvention):
|
|
292
|
+
_footprint = dict(
|
|
293
|
+
attr=dict(
|
|
294
|
+
kind=dict(
|
|
295
|
+
values=[
|
|
296
|
+
"iau_analysis",
|
|
297
|
+
],
|
|
298
|
+
),
|
|
299
|
+
model=dict(
|
|
300
|
+
outcast=[
|
|
301
|
+
"surfex",
|
|
302
|
+
]
|
|
303
|
+
),
|
|
304
|
+
)
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
def _naming_format_string(self, **kwargs):
|
|
308
|
+
return "ICIAU{xpname:s}IN{number:02d}"
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
class IauBackgroundName(IFSNamingConvention):
|
|
312
|
+
_footprint = dict(
|
|
313
|
+
attr=dict(
|
|
314
|
+
kind=dict(
|
|
315
|
+
values=[
|
|
316
|
+
"iau_background",
|
|
317
|
+
],
|
|
318
|
+
),
|
|
319
|
+
model=dict(
|
|
320
|
+
outcast=[
|
|
321
|
+
"surfex",
|
|
322
|
+
]
|
|
323
|
+
),
|
|
324
|
+
)
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
def _naming_format_string(self, **kwargs):
|
|
328
|
+
return "ICIAU{xpname:s}BK{number:02d}"
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
# Lateral Boundary Conditions Files
|
|
332
|
+
# ##############################################################################
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
class LAMBoundaryConditionsName(IFSNamingConvention):
|
|
336
|
+
_footprint = dict(
|
|
337
|
+
attr=dict(
|
|
338
|
+
kind=dict(
|
|
339
|
+
values=[
|
|
340
|
+
"lbc",
|
|
341
|
+
],
|
|
342
|
+
),
|
|
343
|
+
)
|
|
344
|
+
)
|
|
345
|
+
|
|
346
|
+
def _naming_format_string(self, **kwargs):
|
|
347
|
+
return "ELSCF{xpname:s}ALBC{number:03d}"
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
# Strange files used in the EDA
|
|
351
|
+
# ##############################################################################
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
class IfsEdaInputName(IFSNamingConvention):
|
|
355
|
+
_abstract = True
|
|
356
|
+
_footprint = dict(
|
|
357
|
+
attr=dict(
|
|
358
|
+
kind=dict(
|
|
359
|
+
values=[
|
|
360
|
+
"edainput",
|
|
361
|
+
],
|
|
362
|
+
),
|
|
363
|
+
variant=dict(
|
|
364
|
+
values=[
|
|
365
|
+
"infl",
|
|
366
|
+
"infl_factor",
|
|
367
|
+
"mean",
|
|
368
|
+
"covb",
|
|
369
|
+
],
|
|
370
|
+
),
|
|
371
|
+
totalnumber=dict(
|
|
372
|
+
info="The total number of input files",
|
|
373
|
+
type=int,
|
|
374
|
+
optional=True,
|
|
375
|
+
),
|
|
376
|
+
)
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
@property
|
|
380
|
+
def _number_fmt(self):
|
|
381
|
+
if self.totalnumber:
|
|
382
|
+
ndigits = max(int(math.floor(math.log10(self.totalnumber))) + 1, 3)
|
|
383
|
+
else:
|
|
384
|
+
ndigits = 3
|
|
385
|
+
return "{number:0" + str(ndigits) + "d}"
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
class IfsEdaArpegeFaInputName(IfsEdaInputName):
|
|
389
|
+
_footprint = dict(
|
|
390
|
+
attr=dict(
|
|
391
|
+
model=dict(
|
|
392
|
+
values=[
|
|
393
|
+
"arpege",
|
|
394
|
+
]
|
|
395
|
+
),
|
|
396
|
+
actualfmt=dict(
|
|
397
|
+
values=[
|
|
398
|
+
"fa",
|
|
399
|
+
]
|
|
400
|
+
),
|
|
401
|
+
)
|
|
402
|
+
)
|
|
403
|
+
|
|
404
|
+
def _naming_format_string(self, **kwargs):
|
|
405
|
+
return "FAMEMBER_" + self._number_fmt
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
class IfsEdaArpegeGribInputName(IfsEdaInputName):
|
|
409
|
+
_footprint = dict(
|
|
410
|
+
attr=dict(
|
|
411
|
+
model=dict(
|
|
412
|
+
values=[
|
|
413
|
+
"arpege",
|
|
414
|
+
]
|
|
415
|
+
),
|
|
416
|
+
actualfmt=dict(
|
|
417
|
+
values=[
|
|
418
|
+
"grib",
|
|
419
|
+
]
|
|
420
|
+
),
|
|
421
|
+
)
|
|
422
|
+
)
|
|
423
|
+
|
|
424
|
+
def _naming_format_string(self, **kwargs):
|
|
425
|
+
return "GRIBERm" + self._number_fmt
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
class IfsEdaAromeInputName(IfsEdaInputName):
|
|
429
|
+
_footprint = dict(
|
|
430
|
+
attr=dict(
|
|
431
|
+
model=dict(
|
|
432
|
+
values=[
|
|
433
|
+
"arome",
|
|
434
|
+
]
|
|
435
|
+
),
|
|
436
|
+
)
|
|
437
|
+
)
|
|
438
|
+
|
|
439
|
+
def _naming_format_string(self, **kwargs):
|
|
440
|
+
return "ELSCF{xpname:s}ALBC" + self._number_fmt
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
class IfsEdaOutputName(IFSNamingConvention):
|
|
444
|
+
_footprint = dict(
|
|
445
|
+
attr=dict(
|
|
446
|
+
kind=dict(
|
|
447
|
+
values=[
|
|
448
|
+
"edaoutput",
|
|
449
|
+
],
|
|
450
|
+
),
|
|
451
|
+
variant=dict(
|
|
452
|
+
values=[
|
|
453
|
+
"infl",
|
|
454
|
+
"infl_factor",
|
|
455
|
+
"mean",
|
|
456
|
+
"covb",
|
|
457
|
+
],
|
|
458
|
+
),
|
|
459
|
+
)
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
def _naming_format_string(self, **kwargs):
|
|
463
|
+
return "ICMSH{xpname:s}+{term.fmth}_m{number:03d}"
|