New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
ooo.py in branches/2013/dev_r3987_UKMO4_OBS/NEMOGCM/TOOLS/OBSTOOLS/OOO/ooo – NEMO

source: branches/2013/dev_r3987_UKMO4_OBS/NEMOGCM/TOOLS/OBSTOOLS/OOO/ooo/ooo.py @ 4122

Last change on this file since 4122 was 4122, checked in by andrewryan, 11 years ago

Added a quick start utility to OBSTOOLS which manipulates the standard NEMO configuration namelists to allow the offline observation operator to run.

  • Property svn:executable set to *
File size: 2.7 KB
Line 
1#!/usr/bin/env python2.7
2
3import os
4import shutil
5
6# Local imports
7import locator
8import nml
9
10def parse_args():
11    import argparse
12    parser = argparse.ArgumentParser()
13    parser.add_argument("date", metavar="DATE", 
14                        help="Run date.")
15    parser.add_argument("-w", "--work-dir", default=os.getcwd())
16    parser.add_argument("-f", "--forecast-types", default="forecast",
17                        help="Choice of forecast,persistence,climatology")
18    parser.add_argument("-l", "--lead-times", default="12",
19                        help="Forecast lead times")
20    parser.add_argument("-o", "--obs-types", default="profbfiles",
21                        help="Choice of namobs types.")
22    parser.add_argument("--class4", dest="ln_cl4", action="store_true",
23                        help="Flag to choose class 4 file outputs")
24    parser.add_argument("namelist", metavar="NAMELIST", 
25                        help="NEMO namelist to edit.")
26    args = parser.parse_args()
27    args.forecast_types = args.forecast_types.split(',')
28    args.obs_types = args.obs_types.split(',')
29    args.lead_times = map(int, args.lead_times.split(','))
30    return args
31
32def main():
33    args = parse_args()
34    date = args.date
35   
36    # Move to working directory
37    if not os.path.exists(args.work_dir):
38        os.makedirs(args.work_dir)
39    os.chdir(args.work_dir)
40
41    # Collect forecast files
42    types = args.forecast_types
43    lead_times = args.lead_times
44    namoff, namcl4 = locator.forecasts(date=date,
45                                       types=types,
46                                       lead_times=lead_times)
47
48    # Process NEMO namelist
49    text = nml.reader(args.namelist)
50    sublists = nml.namelists(text)
51
52    # namoff
53    if "namoff" not in sublists:
54        # Attach boilerplate
55        text += nml.new("namoff")
56    text = nml.update("namoff", text, data=namoff)
57
58    # namcl4
59    if "namcl4" not in sublists:
60        # Attach boilerplate
61        text += nml.new("namcl4")
62    namcl4["cl4_leadtime"] = lead_times
63    namcl4["cl4_date"] = date
64    namcl4["cl4_match_len"] = len(namcl4["cl4_vars"])
65    namcl4["cl4_fcst_len"] = len(namcl4["cl4_leadtime"])
66    text = nml.update("namcl4", text, data=namcl4)
67
68    # namrun
69    namrun = {"nn_date0": date}
70    text = nml.update("namrun", text, data=namrun)
71
72    # namobs
73    namobs = locator.observations(date=date,
74                                  types=args.obs_types)
75    namobs["ln_cl4"] = args.ln_cl4
76    text = nml.update("namobs", text, data=namobs)
77
78    # pipe text to file
79    tmp = args.namelist+".tmp"
80    nml.writer(tmp, text)
81    shutil.move(tmp, args.namelist)
82
83    # Run job
84    run.submit()
85   
86
87
88if __name__ == '__main__':
89    main()
90
Note: See TracBrowser for help on using the repository browser.