-
Notifications
You must be signed in to change notification settings - Fork 1
/
column_writer.py
64 lines (54 loc) · 2.23 KB
/
column_writer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python
"""
Write a single column model input file as would be generated by the
OpenIFS SCMTileRunner class.
"""
# Copyright 2016 Andrew Dawson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from argparse import ArgumentParser
import sys
from scmtiles.config import SCMTilesConfig
from scmtiles.exceptions import ConfigurationError, TileInitializationError
from scmtiles.grid_manager import LinearTile
from openifs_scm import SCMTileRunner
def construct_tile(cell_indices, xsize, ysize):
linear_cell_index = cell_indices[1] * xsize + cell_indices[0]
tile = LinearTile(0, slice(linear_cell_index, linear_cell_index + 1),
[cell_indices[0]], [cell_indices[1]])
return tile
def main(argv=None):
if argv is None:
argv = sys.argv
ap = ArgumentParser(description=__doc__)
ap.add_argument('-c', '--cell', type=int, nargs=2,
help='the x and y index of the required cell')
ap.add_argument('-o', '--output_directory', type=str,
help='directory to write the output in')
ap.add_argument('config_file_path', type=str,
help='path to the program configuration file')
argns = ap.parse_args(argv[1:])
try:
config = SCMTilesConfig.from_file(argns.config_file_path)
cell = argns.cell or [0, 0]
tile = construct_tile(cell, config.xsize, config.ysize)
tr = SCMTileRunner(config, tile)
cell = next(tile.cells())
output_directory = argns.output_directory or '.'
tr.write_scm_input(cell, output_directory)
except (ConfigurationError, TileInitializationError) as e:
print("error: {!s}".format(e), file=sys.stderr)
return 1
return 0
if __name__ == '__main__':
sys.exit(main())