HWRF  trunk@4391
exhwrf_ensda.py
1 #! /usr/bin/env python
2 
3 ##@namespace scripts.exhwrf_ensda
4 # Runs one member of the HWRF data assimilation ensemble. This job
5 # must be run after the ensda_pre and exhwrf_init jobs. There is one
6 # mandatory environment variable that must be set before executing this
7 # script: $ENSDA_MEMB, which must be set to the integer ENSDA member
8 # number (generally a number from 1 to 40)
9 
10 import logging, os, sys, produtil.log, produtil.setup
11 from produtil.log import jlogger
12 import hwrf_wcoss
13 
14 def fail(msg):
15  """!Write an error message to produtil.log.jlogger and exit with status 2.
16  @param msg the message to write"""
17  jlogger.error(msg)
18  sys.exit(2)
19 
20 def set_vars(logger=None):
21  """!Sets MPI tuning variables for the local machine."""
22  if produtil.cluster.name() in ['gyre','tide']:
24  else:
25  logger.info('Not on WCOSS, so not setting WCOSS-specific vars.')
26 
27 def main():
28  """!Runs one ENSDA member. The member to run is specified by the
29  ENSDA_MEMB environment variable."""
30  logger=logging.getLogger('exhwrf_ensda')
31  ENV=os.environ
32  memb=ENV.get('ENSDA_MEMB','NOPE').lower()
33  if memb=='nope':
34  fail('Aborting: you must specify ENSDA_MEMB')
35  imemb=int(memb,10)
36  jlogger.info('HWRF ensda member %03d starting'%imemb)
37 
38  set_vars(logger)
39 
40  import hwrf_expt
41  hwrf_expt.init_module(make_ensemble_da=True)
42  omemb=hwrf_expt.ensda.member(hwrf_expt.conf.cycle,imemb)
43  omemb.run()
44  for prod in omemb.products():
45  if not prod.location:
46  logger.error('No product: %s'%(prod.did,))
47  elif not prod.available:
48  logger.error('Product %s not available (location %s)'%(
49  repr(prod.did),repr(prod.location)))
50  else:
51  dest='%s/%s.ensda_%03d.%s'%(
52  hwrf_expt.conf.getdir('com'),
53  hwrf_expt.conf.getstr('config','out_prefix'),
54  imemb,os.path.basename(prod.location))
55  logger.info('%s %s: send to %s'%(
56  str(prod.did),repr(imemb),str(dest)))
57  assert(os.path.isabs(dest))
58  copier=hwrf_expt.wrfcopier.compression_copier(prod.location)
59  if copier is None:
60  logger.error('%s %s: not a NetCDF 3 file.'%(
61  str(prod.did),str(prod.location)))
62  sys.exit(1)
64  prod.location,dest,logger=logger,
65  copier=copier)
66 
67  jlogger.info('HWRF ensda member %03d has completed'%imemb)
68 
69 if __name__=='__main__':
70  try:
72  main()
73  except Exception as e:
74  jlogger.critical('HWRF ensda is aborting: '+str(e),exc_info=True)
75  sys.exit(2)
def deliver_file
This moves or copies the file "infile" to "outfile" in a unit operation; outfile will never be seen i...
Definition: fileop.py:359
Contains setup(), which initializes the produtil package.
Definition: setup.py:1
def init_module
Initializes the HWRF object structure.
Definition: hwrf_expt.py:384
def set_vars
Sets MPI tuning variables for the local machine.
Definition: exhwrf_ensda.py:20
def setup(ignore_hup=False, dbnalert_logger=None, jobname=None, cluster=None, send_dbn=None, thread_logger=False, thread_stack=2 **24, kwargs)
Initializes the produtil package.
Definition: setup.py:15
def set_vars_for_ensda_hwrf(logger)
Sets variables that seem to speed up the H15B (2015 pre-baseline) version of HWRF on Phase 2 WCOSS wh...
Definition: hwrf_wcoss.py:101
def fail(msg)
Write an error message to produtil.log.jlogger and exit with status 2.
Definition: exhwrf_ensda.py:14
Configures logging.
Definition: log.py:1
def name()
Synonym for here.name.
Definition: cluster.py:109
def main()
Runs one ENSDA member.
Definition: exhwrf_ensda.py:27