vortex-nwp 2.0.0b1__py3-none-any.whl → 2.0.0b2__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 +59 -45
- vortex/algo/__init__.py +3 -2
- vortex/algo/components.py +940 -614
- vortex/algo/mpitools.py +802 -497
- vortex/algo/serversynctools.py +34 -33
- vortex/config.py +19 -22
- vortex/data/__init__.py +9 -3
- vortex/data/abstractstores.py +593 -655
- vortex/data/containers.py +217 -162
- vortex/data/contents.py +65 -39
- vortex/data/executables.py +93 -102
- vortex/data/flow.py +40 -34
- vortex/data/geometries.py +228 -132
- vortex/data/handlers.py +428 -225
- vortex/data/outflow.py +15 -15
- vortex/data/providers.py +185 -163
- vortex/data/resources.py +48 -42
- vortex/data/stores.py +544 -413
- vortex/gloves.py +114 -87
- vortex/layout/__init__.py +1 -8
- vortex/layout/contexts.py +150 -84
- vortex/layout/dataflow.py +353 -202
- vortex/layout/monitor.py +264 -128
- vortex/nwp/__init__.py +5 -2
- vortex/nwp/algo/__init__.py +14 -5
- vortex/nwp/algo/assim.py +205 -151
- vortex/nwp/algo/clim.py +683 -517
- vortex/nwp/algo/coupling.py +447 -225
- vortex/nwp/algo/eda.py +437 -229
- vortex/nwp/algo/eps.py +403 -231
- vortex/nwp/algo/forecasts.py +420 -271
- vortex/nwp/algo/fpserver.py +683 -307
- vortex/nwp/algo/ifsnaming.py +205 -145
- vortex/nwp/algo/ifsroot.py +210 -122
- vortex/nwp/algo/monitoring.py +132 -76
- vortex/nwp/algo/mpitools.py +321 -191
- vortex/nwp/algo/odbtools.py +617 -353
- vortex/nwp/algo/oopsroot.py +449 -273
- vortex/nwp/algo/oopstests.py +90 -56
- vortex/nwp/algo/request.py +287 -206
- vortex/nwp/algo/stdpost.py +878 -522
- vortex/nwp/data/__init__.py +22 -4
- vortex/nwp/data/assim.py +125 -137
- vortex/nwp/data/boundaries.py +121 -68
- vortex/nwp/data/climfiles.py +193 -211
- vortex/nwp/data/configfiles.py +73 -69
- vortex/nwp/data/consts.py +426 -401
- vortex/nwp/data/ctpini.py +59 -43
- vortex/nwp/data/diagnostics.py +94 -66
- vortex/nwp/data/eda.py +50 -51
- vortex/nwp/data/eps.py +195 -146
- vortex/nwp/data/executables.py +440 -434
- vortex/nwp/data/fields.py +63 -48
- vortex/nwp/data/gridfiles.py +183 -111
- vortex/nwp/data/logs.py +250 -217
- vortex/nwp/data/modelstates.py +180 -151
- vortex/nwp/data/monitoring.py +72 -99
- vortex/nwp/data/namelists.py +254 -202
- vortex/nwp/data/obs.py +400 -308
- vortex/nwp/data/oopsexec.py +22 -20
- vortex/nwp/data/providers.py +90 -65
- vortex/nwp/data/query.py +71 -82
- vortex/nwp/data/stores.py +49 -36
- vortex/nwp/data/surfex.py +136 -137
- vortex/nwp/syntax/__init__.py +1 -1
- vortex/nwp/syntax/stdattrs.py +173 -111
- vortex/nwp/tools/__init__.py +2 -2
- vortex/nwp/tools/addons.py +22 -17
- vortex/nwp/tools/agt.py +24 -12
- vortex/nwp/tools/bdap.py +16 -5
- vortex/nwp/tools/bdcp.py +4 -1
- vortex/nwp/tools/bdm.py +3 -0
- vortex/nwp/tools/bdmp.py +14 -9
- vortex/nwp/tools/conftools.py +728 -378
- vortex/nwp/tools/drhook.py +12 -8
- vortex/nwp/tools/grib.py +65 -39
- vortex/nwp/tools/gribdiff.py +22 -17
- vortex/nwp/tools/ifstools.py +82 -42
- vortex/nwp/tools/igastuff.py +167 -143
- vortex/nwp/tools/mars.py +14 -2
- vortex/nwp/tools/odb.py +234 -125
- vortex/nwp/tools/partitioning.py +61 -37
- vortex/nwp/tools/satrad.py +27 -12
- vortex/nwp/util/async.py +83 -55
- vortex/nwp/util/beacon.py +10 -10
- vortex/nwp/util/diffpygram.py +174 -86
- vortex/nwp/util/ens.py +144 -63
- vortex/nwp/util/hooks.py +30 -19
- vortex/nwp/util/taskdeco.py +28 -24
- vortex/nwp/util/usepygram.py +278 -172
- vortex/nwp/util/usetnt.py +31 -17
- vortex/sessions.py +72 -39
- vortex/syntax/__init__.py +1 -1
- vortex/syntax/stdattrs.py +410 -171
- vortex/syntax/stddeco.py +31 -22
- vortex/toolbox.py +327 -192
- vortex/tools/__init__.py +11 -2
- vortex/tools/actions.py +125 -59
- vortex/tools/addons.py +111 -92
- vortex/tools/arm.py +42 -22
- vortex/tools/compression.py +72 -69
- vortex/tools/date.py +11 -4
- vortex/tools/delayedactions.py +242 -132
- vortex/tools/env.py +75 -47
- vortex/tools/folder.py +342 -171
- vortex/tools/grib.py +311 -149
- vortex/tools/lfi.py +423 -216
- vortex/tools/listings.py +109 -40
- vortex/tools/names.py +218 -156
- vortex/tools/net.py +632 -298
- vortex/tools/parallelism.py +93 -61
- vortex/tools/prestaging.py +55 -31
- vortex/tools/schedulers.py +172 -105
- vortex/tools/services.py +402 -333
- vortex/tools/storage.py +293 -358
- vortex/tools/surfex.py +24 -24
- vortex/tools/systems.py +1211 -631
- vortex/tools/targets.py +156 -100
- vortex/util/__init__.py +1 -1
- vortex/util/config.py +377 -327
- vortex/util/empty.py +2 -2
- vortex/util/helpers.py +56 -24
- vortex/util/introspection.py +18 -12
- vortex/util/iosponge.py +8 -4
- vortex/util/roles.py +4 -6
- vortex/util/storefunctions.py +39 -13
- vortex/util/structs.py +3 -3
- vortex/util/worker.py +29 -17
- vortex_nwp-2.0.0b2.dist-info/METADATA +66 -0
- vortex_nwp-2.0.0b2.dist-info/RECORD +142 -0
- {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.0.0b2.dist-info}/WHEEL +1 -1
- vortex/layout/appconf.py +0 -109
- vortex/layout/jobs.py +0 -1276
- vortex/layout/nodes.py +0 -1424
- vortex/layout/subjobs.py +0 -464
- vortex_nwp-2.0.0b1.dist-info/METADATA +0 -50
- vortex_nwp-2.0.0b1.dist-info/RECORD +0 -146
- {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.0.0b2.dist-info}/LICENSE +0 -0
- {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.0.0b2.dist-info}/top_level.txt +0 -0
vortex/nwp/algo/ifsnaming.py
CHANGED
|
@@ -38,33 +38,32 @@ __all__ = []
|
|
|
38
38
|
# Base & Generic classes
|
|
39
39
|
# ##############################################################################
|
|
40
40
|
|
|
41
|
+
|
|
41
42
|
class IFSNamingConvention(footprints.FootprintBase):
|
|
42
43
|
"""Abstract class for any object representing an IFS/Arpege naming scheme."""
|
|
43
44
|
|
|
44
45
|
_abstract = True
|
|
45
|
-
_collector = (
|
|
46
|
+
_collector = ("ifsnamingconv",)
|
|
46
47
|
_footprint = [
|
|
47
48
|
model,
|
|
48
49
|
actualfmt,
|
|
49
50
|
arpifs_cycle,
|
|
50
51
|
dict(
|
|
51
|
-
attr
|
|
52
|
-
kind
|
|
53
|
-
|
|
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,
|
|
54
57
|
),
|
|
55
|
-
|
|
56
|
-
info
|
|
57
|
-
type = int,
|
|
58
|
+
xpname=dict(
|
|
59
|
+
info="IFS/Arpege experiment name",
|
|
58
60
|
),
|
|
59
|
-
|
|
60
|
-
info
|
|
61
|
+
actualfmt=dict(
|
|
62
|
+
info="The target file format",
|
|
63
|
+
optional=True,
|
|
61
64
|
),
|
|
62
|
-
actualfmt = dict(
|
|
63
|
-
info = 'The target file format',
|
|
64
|
-
optional = True,
|
|
65
|
-
)
|
|
66
65
|
)
|
|
67
|
-
)
|
|
66
|
+
),
|
|
68
67
|
]
|
|
69
68
|
|
|
70
69
|
def _naming_format_string(self, **kwargs):
|
|
@@ -72,16 +71,18 @@ class IFSNamingConvention(footprints.FootprintBase):
|
|
|
72
71
|
raise NotImplementedError()
|
|
73
72
|
|
|
74
73
|
def __call__(self, **kwargs):
|
|
75
|
-
return self._naming_format_string(**
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
+
)
|
|
80
81
|
|
|
81
82
|
|
|
82
83
|
# Activate the footprint's fasttrack on the ifsnamingconv collector
|
|
83
|
-
ncollect = footprints.collectors.get(tag=
|
|
84
|
-
ncollect.fasttrack = (
|
|
84
|
+
ncollect = footprints.collectors.get(tag="ifsnamingconv")
|
|
85
|
+
ncollect.fasttrack = ("kind",)
|
|
85
86
|
del ncollect
|
|
86
87
|
|
|
87
88
|
|
|
@@ -92,12 +93,10 @@ class IFSHardWiredNamingConvention(IFSNamingConvention):
|
|
|
92
93
|
"""
|
|
93
94
|
|
|
94
95
|
_footprint = dict(
|
|
95
|
-
attr
|
|
96
|
-
|
|
96
|
+
attr=dict(namingformat=dict()),
|
|
97
|
+
priority=dict(
|
|
98
|
+
level=footprints.priorities.top.TOOLBOX # @UndefinedVariable
|
|
97
99
|
),
|
|
98
|
-
priority = dict(
|
|
99
|
-
level = footprints.priorities.top.TOOLBOX # @UndefinedVariable
|
|
100
|
-
)
|
|
101
100
|
)
|
|
102
101
|
|
|
103
102
|
def _naming_format_string(self, **kwargs):
|
|
@@ -107,203 +106,245 @@ class IFSHardWiredNamingConvention(IFSNamingConvention):
|
|
|
107
106
|
# Climatology files names
|
|
108
107
|
# ##############################################################################
|
|
109
108
|
|
|
109
|
+
|
|
110
110
|
class ModelClimName(IFSNamingConvention):
|
|
111
111
|
"""An IFS/Arpege model clim."""
|
|
112
112
|
|
|
113
113
|
_footprint = dict(
|
|
114
|
-
attr
|
|
115
|
-
kind
|
|
116
|
-
values
|
|
114
|
+
attr=dict(
|
|
115
|
+
kind=dict(
|
|
116
|
+
values=[
|
|
117
|
+
"modelclim",
|
|
118
|
+
],
|
|
117
119
|
),
|
|
118
|
-
conf
|
|
119
|
-
outcast
|
|
120
|
+
conf=dict(
|
|
121
|
+
outcast=[
|
|
122
|
+
701,
|
|
123
|
+
],
|
|
124
|
+
),
|
|
125
|
+
model=dict(
|
|
126
|
+
outcast=[
|
|
127
|
+
"surfex",
|
|
128
|
+
]
|
|
120
129
|
),
|
|
121
|
-
model = dict(
|
|
122
|
-
outcast = ['surfex', ]
|
|
123
|
-
)
|
|
124
130
|
)
|
|
125
131
|
)
|
|
126
132
|
|
|
127
133
|
def _naming_format_string(self, **kwargs):
|
|
128
|
-
return
|
|
134
|
+
return "Const.Clim"
|
|
129
135
|
|
|
130
136
|
|
|
131
137
|
class SurfexClimName(IFSNamingConvention):
|
|
132
138
|
"""A Surfex model clim."""
|
|
133
139
|
|
|
134
140
|
_footprint = dict(
|
|
135
|
-
attr
|
|
136
|
-
kind
|
|
137
|
-
values
|
|
141
|
+
attr=dict(
|
|
142
|
+
kind=dict(
|
|
143
|
+
values=[
|
|
144
|
+
"modelclim",
|
|
145
|
+
],
|
|
146
|
+
),
|
|
147
|
+
model=dict(
|
|
148
|
+
values=[
|
|
149
|
+
"surfex",
|
|
150
|
+
]
|
|
138
151
|
),
|
|
139
|
-
model = dict(
|
|
140
|
-
values = ['surfex', ]
|
|
141
|
-
)
|
|
142
152
|
)
|
|
143
153
|
)
|
|
144
154
|
|
|
145
155
|
def _naming_format_string(self, **kwargs):
|
|
146
|
-
return
|
|
156
|
+
return "Const.Clim.sfx"
|
|
147
157
|
|
|
148
158
|
|
|
149
159
|
class TargetClimName(IFSNamingConvention):
|
|
150
160
|
"""A BDAP clim file or a target domain IFS/Arpege clim file."""
|
|
151
161
|
|
|
152
162
|
_footprint = dict(
|
|
153
|
-
attr
|
|
154
|
-
kind
|
|
155
|
-
values
|
|
163
|
+
attr=dict(
|
|
164
|
+
kind=dict(
|
|
165
|
+
values=[
|
|
166
|
+
"targetclim",
|
|
167
|
+
],
|
|
168
|
+
),
|
|
169
|
+
model=dict(
|
|
170
|
+
outcast=[
|
|
171
|
+
"surfex",
|
|
172
|
+
]
|
|
156
173
|
),
|
|
157
|
-
model = dict(
|
|
158
|
-
outcast = ['surfex', ]
|
|
159
|
-
)
|
|
160
174
|
)
|
|
161
175
|
)
|
|
162
176
|
|
|
163
177
|
def _naming_format_string(self, **kwargs):
|
|
164
|
-
return
|
|
178
|
+
return "const.clim.{area:s}"
|
|
165
179
|
|
|
166
180
|
|
|
167
181
|
class SurfexTargetClimName(IFSNamingConvention):
|
|
168
182
|
"""A target domain Surfex clim file."""
|
|
169
183
|
|
|
170
184
|
_footprint = dict(
|
|
171
|
-
attr
|
|
172
|
-
kind
|
|
173
|
-
values
|
|
185
|
+
attr=dict(
|
|
186
|
+
kind=dict(
|
|
187
|
+
values=[
|
|
188
|
+
"targetclim",
|
|
189
|
+
],
|
|
190
|
+
),
|
|
191
|
+
model=dict(
|
|
192
|
+
values=[
|
|
193
|
+
"surfex",
|
|
194
|
+
]
|
|
174
195
|
),
|
|
175
|
-
model = dict(
|
|
176
|
-
values = ['surfex', ]
|
|
177
|
-
)
|
|
178
196
|
)
|
|
179
197
|
)
|
|
180
198
|
|
|
181
199
|
def _naming_format_string(self, **kwargs):
|
|
182
|
-
return
|
|
200
|
+
return "const.clim.sfx.{area:s}"
|
|
183
201
|
|
|
184
202
|
|
|
185
203
|
class CanariModelClimName(IFSNamingConvention):
|
|
186
204
|
"""An IFS/Arpege model clim (specific naming for Canari)."""
|
|
187
205
|
|
|
188
206
|
_footprint = dict(
|
|
189
|
-
attr
|
|
190
|
-
kind
|
|
191
|
-
values
|
|
207
|
+
attr=dict(
|
|
208
|
+
kind=dict(
|
|
209
|
+
values=[
|
|
210
|
+
"modelclim",
|
|
211
|
+
],
|
|
192
212
|
),
|
|
193
|
-
conf
|
|
194
|
-
values
|
|
213
|
+
conf=dict(
|
|
214
|
+
values=[
|
|
215
|
+
701,
|
|
216
|
+
],
|
|
217
|
+
),
|
|
218
|
+
model=dict(
|
|
219
|
+
outcast=[
|
|
220
|
+
"surfex",
|
|
221
|
+
]
|
|
195
222
|
),
|
|
196
|
-
model = dict(
|
|
197
|
-
outcast = ['surfex', ]
|
|
198
|
-
)
|
|
199
223
|
)
|
|
200
224
|
)
|
|
201
225
|
|
|
202
226
|
def _naming_format_string(self, **kwargs):
|
|
203
|
-
return
|
|
227
|
+
return "ICMSH{xpname:s}CLIM"
|
|
204
228
|
|
|
205
229
|
|
|
206
230
|
class CanariClosestModelClimName(CanariModelClimName):
|
|
207
231
|
"""An IFS/Arpege model clim for the closest month (specific naming for Canari)."""
|
|
208
232
|
|
|
209
233
|
_footprint = dict(
|
|
210
|
-
attr
|
|
211
|
-
kind
|
|
212
|
-
values
|
|
234
|
+
attr=dict(
|
|
235
|
+
kind=dict(
|
|
236
|
+
values=[
|
|
237
|
+
"closest_modelclim",
|
|
238
|
+
],
|
|
213
239
|
),
|
|
214
240
|
)
|
|
215
241
|
)
|
|
216
242
|
|
|
217
243
|
def _naming_format_string(self, **kwargs):
|
|
218
|
-
return
|
|
244
|
+
return "ICMSH{xpname:s}CLI2"
|
|
219
245
|
|
|
220
246
|
|
|
221
247
|
# Initial conditions file names
|
|
222
248
|
# ##############################################################################
|
|
223
249
|
|
|
224
|
-
class InitialContionsName(IFSNamingConvention):
|
|
225
250
|
|
|
251
|
+
class InitialContionsName(IFSNamingConvention):
|
|
226
252
|
_footprint = dict(
|
|
227
|
-
attr
|
|
228
|
-
kind
|
|
229
|
-
values
|
|
253
|
+
attr=dict(
|
|
254
|
+
kind=dict(
|
|
255
|
+
values=[
|
|
256
|
+
"ic",
|
|
257
|
+
],
|
|
258
|
+
),
|
|
259
|
+
model=dict(
|
|
260
|
+
outcast=[
|
|
261
|
+
"surfex",
|
|
262
|
+
]
|
|
230
263
|
),
|
|
231
|
-
model = dict(
|
|
232
|
-
outcast = ['surfex', ]
|
|
233
|
-
)
|
|
234
264
|
)
|
|
235
265
|
)
|
|
236
266
|
|
|
237
267
|
def _naming_format_string(self, **kwargs):
|
|
238
|
-
return
|
|
268
|
+
return "ICMSH{xpname:s}INIT"
|
|
239
269
|
|
|
240
270
|
|
|
241
271
|
class SurfexInitialContionsName(IFSNamingConvention):
|
|
242
|
-
|
|
243
272
|
_footprint = dict(
|
|
244
|
-
attr
|
|
245
|
-
kind
|
|
246
|
-
values
|
|
273
|
+
attr=dict(
|
|
274
|
+
kind=dict(
|
|
275
|
+
values=[
|
|
276
|
+
"ic",
|
|
277
|
+
],
|
|
278
|
+
),
|
|
279
|
+
model=dict(
|
|
280
|
+
values=[
|
|
281
|
+
"surfex",
|
|
282
|
+
]
|
|
247
283
|
),
|
|
248
|
-
model = dict(
|
|
249
|
-
values = ['surfex', ]
|
|
250
|
-
)
|
|
251
284
|
)
|
|
252
285
|
)
|
|
253
286
|
|
|
254
287
|
def _naming_format_string(self, **kwargs):
|
|
255
|
-
return
|
|
288
|
+
return "ICMSH{xpname:s}INIT.sfx"
|
|
256
289
|
|
|
257
290
|
|
|
258
291
|
class IauAnalysisName(IFSNamingConvention):
|
|
259
|
-
|
|
260
292
|
_footprint = dict(
|
|
261
|
-
attr
|
|
262
|
-
kind
|
|
263
|
-
values
|
|
293
|
+
attr=dict(
|
|
294
|
+
kind=dict(
|
|
295
|
+
values=[
|
|
296
|
+
"iau_analysis",
|
|
297
|
+
],
|
|
298
|
+
),
|
|
299
|
+
model=dict(
|
|
300
|
+
outcast=[
|
|
301
|
+
"surfex",
|
|
302
|
+
]
|
|
264
303
|
),
|
|
265
|
-
model = dict(
|
|
266
|
-
outcast = ['surfex', ]
|
|
267
|
-
)
|
|
268
304
|
)
|
|
269
305
|
)
|
|
270
306
|
|
|
271
307
|
def _naming_format_string(self, **kwargs):
|
|
272
|
-
return
|
|
308
|
+
return "ICIAU{xpname:s}IN{number:02d}"
|
|
273
309
|
|
|
274
310
|
|
|
275
311
|
class IauBackgroundName(IFSNamingConvention):
|
|
276
|
-
|
|
277
312
|
_footprint = dict(
|
|
278
|
-
attr
|
|
279
|
-
kind
|
|
280
|
-
values
|
|
313
|
+
attr=dict(
|
|
314
|
+
kind=dict(
|
|
315
|
+
values=[
|
|
316
|
+
"iau_background",
|
|
317
|
+
],
|
|
318
|
+
),
|
|
319
|
+
model=dict(
|
|
320
|
+
outcast=[
|
|
321
|
+
"surfex",
|
|
322
|
+
]
|
|
281
323
|
),
|
|
282
|
-
model = dict(
|
|
283
|
-
outcast = ['surfex', ]
|
|
284
|
-
)
|
|
285
324
|
)
|
|
286
325
|
)
|
|
287
326
|
|
|
288
327
|
def _naming_format_string(self, **kwargs):
|
|
289
|
-
return
|
|
328
|
+
return "ICIAU{xpname:s}BK{number:02d}"
|
|
290
329
|
|
|
291
330
|
|
|
292
331
|
# Lateral Boundary Conditions Files
|
|
293
332
|
# ##############################################################################
|
|
294
333
|
|
|
295
|
-
class LAMBoundaryConditionsName(IFSNamingConvention):
|
|
296
334
|
|
|
335
|
+
class LAMBoundaryConditionsName(IFSNamingConvention):
|
|
297
336
|
_footprint = dict(
|
|
298
|
-
attr
|
|
299
|
-
kind
|
|
300
|
-
values
|
|
337
|
+
attr=dict(
|
|
338
|
+
kind=dict(
|
|
339
|
+
values=[
|
|
340
|
+
"lbc",
|
|
341
|
+
],
|
|
301
342
|
),
|
|
302
343
|
)
|
|
303
344
|
)
|
|
304
345
|
|
|
305
346
|
def _naming_format_string(self, **kwargs):
|
|
306
|
-
return
|
|
347
|
+
return "ELSCF{xpname:s}ALBC{number:03d}"
|
|
307
348
|
|
|
308
349
|
|
|
309
350
|
# Strange files used in the EDA
|
|
@@ -311,20 +352,26 @@ class LAMBoundaryConditionsName(IFSNamingConvention):
|
|
|
311
352
|
|
|
312
353
|
|
|
313
354
|
class IfsEdaInputName(IFSNamingConvention):
|
|
314
|
-
|
|
315
355
|
_abstract = True
|
|
316
356
|
_footprint = dict(
|
|
317
|
-
attr
|
|
318
|
-
kind
|
|
319
|
-
values
|
|
357
|
+
attr=dict(
|
|
358
|
+
kind=dict(
|
|
359
|
+
values=[
|
|
360
|
+
"edainput",
|
|
361
|
+
],
|
|
320
362
|
),
|
|
321
|
-
variant
|
|
322
|
-
values
|
|
363
|
+
variant=dict(
|
|
364
|
+
values=[
|
|
365
|
+
"infl",
|
|
366
|
+
"infl_factor",
|
|
367
|
+
"mean",
|
|
368
|
+
"covb",
|
|
369
|
+
],
|
|
323
370
|
),
|
|
324
|
-
totalnumber
|
|
325
|
-
info
|
|
326
|
-
type
|
|
327
|
-
optional
|
|
371
|
+
totalnumber=dict(
|
|
372
|
+
info="The total number of input files",
|
|
373
|
+
type=int,
|
|
374
|
+
optional=True,
|
|
328
375
|
),
|
|
329
376
|
)
|
|
330
377
|
)
|
|
@@ -335,69 +382,82 @@ class IfsEdaInputName(IFSNamingConvention):
|
|
|
335
382
|
ndigits = max(int(math.floor(math.log10(self.totalnumber))) + 1, 3)
|
|
336
383
|
else:
|
|
337
384
|
ndigits = 3
|
|
338
|
-
return
|
|
385
|
+
return "{number:0" + str(ndigits) + "d}"
|
|
339
386
|
|
|
340
387
|
|
|
341
388
|
class IfsEdaArpegeFaInputName(IfsEdaInputName):
|
|
342
|
-
|
|
343
389
|
_footprint = dict(
|
|
344
|
-
attr
|
|
345
|
-
model
|
|
346
|
-
values
|
|
390
|
+
attr=dict(
|
|
391
|
+
model=dict(
|
|
392
|
+
values=[
|
|
393
|
+
"arpege",
|
|
394
|
+
]
|
|
395
|
+
),
|
|
396
|
+
actualfmt=dict(
|
|
397
|
+
values=[
|
|
398
|
+
"fa",
|
|
399
|
+
]
|
|
347
400
|
),
|
|
348
|
-
actualfmt = dict(
|
|
349
|
-
values = ['fa', ]
|
|
350
|
-
)
|
|
351
401
|
)
|
|
352
402
|
)
|
|
353
403
|
|
|
354
404
|
def _naming_format_string(self, **kwargs):
|
|
355
|
-
return
|
|
405
|
+
return "FAMEMBER_" + self._number_fmt
|
|
356
406
|
|
|
357
407
|
|
|
358
408
|
class IfsEdaArpegeGribInputName(IfsEdaInputName):
|
|
359
|
-
|
|
360
409
|
_footprint = dict(
|
|
361
|
-
attr
|
|
362
|
-
model
|
|
363
|
-
values
|
|
410
|
+
attr=dict(
|
|
411
|
+
model=dict(
|
|
412
|
+
values=[
|
|
413
|
+
"arpege",
|
|
414
|
+
]
|
|
415
|
+
),
|
|
416
|
+
actualfmt=dict(
|
|
417
|
+
values=[
|
|
418
|
+
"grib",
|
|
419
|
+
]
|
|
364
420
|
),
|
|
365
|
-
actualfmt = dict(
|
|
366
|
-
values = ['grib', ]
|
|
367
|
-
)
|
|
368
421
|
)
|
|
369
422
|
)
|
|
370
423
|
|
|
371
424
|
def _naming_format_string(self, **kwargs):
|
|
372
|
-
return
|
|
425
|
+
return "GRIBERm" + self._number_fmt
|
|
373
426
|
|
|
374
427
|
|
|
375
428
|
class IfsEdaAromeInputName(IfsEdaInputName):
|
|
376
|
-
|
|
377
429
|
_footprint = dict(
|
|
378
|
-
attr
|
|
379
|
-
model
|
|
380
|
-
values
|
|
430
|
+
attr=dict(
|
|
431
|
+
model=dict(
|
|
432
|
+
values=[
|
|
433
|
+
"arome",
|
|
434
|
+
]
|
|
381
435
|
),
|
|
382
436
|
)
|
|
383
437
|
)
|
|
384
438
|
|
|
385
439
|
def _naming_format_string(self, **kwargs):
|
|
386
|
-
return
|
|
440
|
+
return "ELSCF{xpname:s}ALBC" + self._number_fmt
|
|
387
441
|
|
|
388
442
|
|
|
389
443
|
class IfsEdaOutputName(IFSNamingConvention):
|
|
390
|
-
|
|
391
444
|
_footprint = dict(
|
|
392
|
-
attr
|
|
393
|
-
kind
|
|
394
|
-
values
|
|
445
|
+
attr=dict(
|
|
446
|
+
kind=dict(
|
|
447
|
+
values=[
|
|
448
|
+
"edaoutput",
|
|
449
|
+
],
|
|
395
450
|
),
|
|
396
|
-
variant
|
|
397
|
-
values
|
|
451
|
+
variant=dict(
|
|
452
|
+
values=[
|
|
453
|
+
"infl",
|
|
454
|
+
"infl_factor",
|
|
455
|
+
"mean",
|
|
456
|
+
"covb",
|
|
457
|
+
],
|
|
398
458
|
),
|
|
399
459
|
)
|
|
400
460
|
)
|
|
401
461
|
|
|
402
462
|
def _naming_format_string(self, **kwargs):
|
|
403
|
-
return
|
|
463
|
+
return "ICMSH{xpname:s}+{term.fmth}_m{number:03d}"
|