Ejemplo n.º 1
0
def get_sst(config):
    """ Downloads SST fields from an ftp server.
    Whoever is running this must have the http_proxy environment variable set
    correctly to allow them to download files through the proxy.  Example:
    http_proxy = http://slha:[email protected]:8080"""
    logger = shared.get_logger()
    # create an lftpscript in model run dir

    logger.info('*** FETCHING SST ***')
    working_dir = config['working_dir']
    tmp_dir = config['tmp_dir']
    http_proxy = os.environ['http_proxy']
    home = os.environ['HOME']
    sst_server = config['sst_server']
    sst_server_dir = config['sst_server_dir']
    sst_local_dir = config['sst_local_dir']
    sst_time = shared.get_sst_time(config)
    sst_filename = shared.sub_date(shared.get_sst_filename(config),
                                   init_time=config['init_time'])

    if not os.path.exists(sst_local_dir):
        os.makedirs(sst_local_dir)

    if os.path.exists('%s/%s' % (sst_local_dir, sst_filename)):
        logger.info('*** SST ALREADY EXISTS LOCALLY, NOT DOWNLOADED ***')
        return

    lftpfilename = '%s/lftpscript' % working_dir
    logger.debug('Writing lftpscript to %s' % lftpfilename)
    lftpscript = open(lftpfilename, 'w')
    lftpscript.write('lcd %s\n' % sst_local_dir)
    lftpscript.write('set ftp:proxy %s\n' % http_proxy)
    lftpscript.write('set hftp:use-type no\n')
    lftpscript.write('open %s\n' % sst_server)
    lftpscript.write('get %s/%s\n' % (sst_server_dir, sst_filename))
    lftpscript.write('bye')
    lftpscript.close()

    cmd = '/usr/bin/lftp -f %s' % lftpfilename
    shared.run_cmd(cmd, config)
    # check if file downloaded

    if not os.path.exists('%s/%s' % (sst_local_dir, sst_filename)):
        raise IOError('SST file: %s not downloaded' % sst_filename)
    logger.info('*** SUCCESS SST DOWNLOADED ***')
Ejemplo n.º 2
0
def get_sst(config):
    """ Downloads SST fields from an ftp server.
    Whoever is running this must have the http_proxy environment variable set
    correctly to allow them to download files through the proxy.  Example:
    http_proxy = http://slha:[email protected]:8080"""
    logger      = shared.get_logger()
    # create an lftpscript in model run dir
    
    logger.info('*** FETCHING SST ***')
    working_dir    = config['working_dir']
    tmp_dir        = config['tmp_dir']
    http_proxy     = os.environ['http_proxy']
    home           = os.environ['HOME']
    sst_server     = config['sst_server']
    sst_server_dir = config['sst_server_dir']
    sst_local_dir  = config['sst_local_dir']
    sst_time       = shared.get_sst_time(config)
    sst_filename   = shared.sub_date(shared.get_sst_filename(config), init_time=config['init_time'])
   
    if not os.path.exists(sst_local_dir):
        os.makedirs(sst_local_dir)
    
    if os.path.exists('%s/%s' %(sst_local_dir, sst_filename)):
        logger.info('*** SST ALREADY EXISTS LOCALLY, NOT DOWNLOADED ***')
        return
    
    lftpfilename = '%s/lftpscript' % working_dir
    logger.debug('Writing lftpscript to %s' % lftpfilename)
    lftpscript     = open(lftpfilename, 'w')    
    lftpscript.write('lcd %s\n' % sst_local_dir)    
    lftpscript.write('set ftp:proxy %s\n' % http_proxy) 
    lftpscript.write('set hftp:use-type no\n')
    lftpscript.write('open %s\n' % sst_server)
    lftpscript.write('get %s/%s\n' % (sst_server_dir,sst_filename))
    lftpscript.write('bye')
    lftpscript.close()
    
    cmd = '/usr/bin/lftp -f %s' % lftpfilename
    shared.run_cmd(cmd, config)
    # check if file downloaded

    if not os.path.exists('%s/%s' %(sst_local_dir, sst_filename)):
        raise IOError('SST file: %s not downloaded' % sst_filename)
    logger.info('*** SUCCESS SST DOWNLOADED ***')
Ejemplo n.º 3
0
def ungrib_sst(config):
    """ Runs ungrib.exe for SST fields, makes and modifies a copy of namelist.wps,
    then restores the original namelist.wps"""
    logger = shared.get_logger()

    wps_dir = config['wps_dir']
    wps_run_dir = config['wps_run_dir']
    tmp_dir = config['tmp_dir']
    working_dir = config['working_dir']
    init_time = config['init_time']
    max_dom = config['max_dom']
    sst_local_dir = config['sst_local_dir']
    sst_time = shared.get_sst_time(config)
    sst_filename = shared.get_sst_filename(config)
    vtable_sst = config['sst_vtable']
    vtable = wps_run_dir + '/Vtable'
    queue = config['queue']
    log_file = '%s/ungrib.sst.log' % wps_run_dir
    namelist_wps = config['namelist_wps']
    namelist_sst = '%s/namelist.sst' % working_dir

    namelist = shared.read_namelist(namelist_wps)

    #
    # update one line to point to the new SST field
    # ungrib.exe will name SST field as e.g.
    # SST:2013-04-24_00
    #
    constants_name = '%s/SST:%s' % (wps_run_dir,
                                    sst_time.strftime('%Y-%m-%d_%H'))
    logger.debug('Updating constants_name ----> %s' % constants_name)
    namelist.update('constants_name', constants_name, section='metgrid')

    # Write the changes into the original
    namelist.to_file(namelist_wps)

    #
    # Update start and end time to process SST
    #
    start_str = sst_time.strftime("%Y-%m-%d_%H:%M:%S")
    end_str = sst_time.strftime("%Y-%m-%d_%H:%M:%S")
    logger.debug("Updating namelist.sst")
    logger.debug('PREFIX ------> SST')
    logger.debug('start_date---> ' + start_str)
    logger.debug('end_date-----> ' + end_str)

    namelist.update('prefix', 'SST')
    namelist.update('start_date', [start_str] * max_dom)
    namelist.update('end_date', [end_str] * max_dom)
    logger.debug('writing modified namelist.sst to file -------> %s' %
                 namelist_sst)
    namelist.to_file(namelist_sst)

    #remove any linked namelist.wps
    logger.debug('removing namelist.wps')
    namelist_run = '%s/namelist.wps' % wps_run_dir
    if os.path.exists(namelist_run):
        os.remove(namelist_run)

    # link namelist.sst to namelist.wps in WPS run dir
    logger.debug('linking namelist.sst -----> namelist.wps')
    cmd = 'ln -sf %s %s' % (namelist_sst, namelist_run)
    shared.run_cmd(cmd, config)

    logger.debug('removing Vtable')
    if os.path.exists(vtable):
        os.remove(vtable)
    logger.debug('linking Vtable.SST ----> Vtable')
    cmd = 'ln -sf %s %s' % (vtable_sst, vtable)
    shared.run_cmd(cmd, config)

    # run link_grib to link SST gribs files
    logger.debug('Linking SST GRIB files')
    cmd = '%s/link_grib.csh %s/%s' % (wps_dir, sst_local_dir, sst_filename)
    shared.run_cmd(cmd, config)

    logger.info('\n*** RUNNING UNGRIB FOR SST ***')
    cmd = '%s/ungrib.exe' % wps_run_dir
    shared.run_cmd(cmd, config)

    cmd = 'grep "Successful completion" ./ungrib.log*'  # check for success
    ret = shared.run_cmd(cmd, config)
    if ret != 0:
        raise IOError('Ungrib failed for SST')

    logger.info('*** SUCCESS UNGRIB SST ***\n')
    logger.debug('Removing namelist.wps')
    if os.path.exists(namelist_run):
        os.remove(namelist_run)
    # link in original (unmodified) namelist.wps
    cmd = 'ln -sf %s %s' % (namelist_wps, namelist_run)
    shared.run_cmd(cmd, config)
Ejemplo n.º 4
0
def ungrib_sst(config):
    """ Runs ungrib.exe for SST fields, makes and modifies a copy of namelist.wps,
    then restores the original namelist.wps"""
    logger = shared.get_logger()
    
    wps_dir      = config['wps_dir']
    wps_run_dir  = config['wps_run_dir']
    tmp_dir      = config['tmp_dir']
    working_dir  = config['working_dir']
    init_time    = config['init_time']
    max_dom      = config['max_dom']
    sst_local_dir = config['sst_local_dir']
    sst_time     = shared.get_sst_time(config)
    sst_filename = shared.get_sst_filename(config)
    vtable_sst   = config['sst_vtable']
    vtable       = wps_run_dir+'/Vtable'
    queue        = config['queue']
    log_file     = '%s/ungrib.sst.log' % wps_run_dir
    namelist_wps  = config['namelist_wps']
    namelist_sst  = '%s/namelist.sst' % working_dir

    namelist      = shared.read_namelist(namelist_wps)

    #
    # update one line to point to the new SST field
    # ungrib.exe will name SST field as e.g.
    # SST:2013-04-24_00
    #
    constants_name = '%s/SST:%s' %(wps_run_dir, sst_time.strftime('%Y-%m-%d_%H'))
    logger.debug('Updating constants_name ----> %s' % constants_name)
    namelist.update('constants_name', constants_name, section='metgrid')

    # Write the changes into the original
    namelist.to_file(namelist_wps)

    #
    # Update start and end time to process SST
    #
    start_str  = sst_time.strftime("%Y-%m-%d_%H:%M:%S")
    end_str    = sst_time.strftime("%Y-%m-%d_%H:%M:%S")
    logger.debug("Updating namelist.sst")
    logger.debug('PREFIX ------> SST')
    logger.debug('start_date---> ' +start_str)
    logger.debug('end_date-----> '+ end_str)

    namelist.update('prefix', 'SST')
    namelist.update('start_date', [start_str]*max_dom)
    namelist.update('end_date',   [end_str]*max_dom)
    logger.debug('writing modified namelist.sst to file -------> %s' % namelist_sst)
    namelist.to_file(namelist_sst)

    #remove any linked namelist.wps 
    logger.debug('removing namelist.wps')
    namelist_run = '%s/namelist.wps' % wps_run_dir
    if os.path.exists(namelist_run):
        os.remove(namelist_run)

    # link namelist.sst to namelist.wps in WPS run dir
    logger.debug('linking namelist.sst -----> namelist.wps')
    cmd = 'ln -sf %s %s' %(namelist_sst, namelist_run)
    shared.run_cmd(cmd, config)

    logger.debug('removing Vtable')
    if os.path.exists(vtable):
        os.remove(vtable)
    logger.debug('linking Vtable.SST ----> Vtable')
    cmd = 'ln -sf %s %s' %(vtable_sst, vtable)
    shared.run_cmd(cmd, config)

    # run link_grib to link SST gribs files
    logger.debug('Linking SST GRIB files')
    cmd = '%s/link_grib.csh %s/%s' %(wps_dir, sst_local_dir, sst_filename)
    shared.run_cmd(cmd, config)


    logger.info('\n*** RUNNING UNGRIB FOR SST ***')
    cmd     =  '%s/ungrib.exe' % wps_run_dir
    shared.run_cmd(cmd, config)

    cmd = 'grep "Successful completion" ./ungrib.log*' # check for success
    ret = shared.run_cmd(cmd, config)
    if ret!=0:
        raise IOError('Ungrib failed for SST')
    
    logger.info('*** SUCCESS UNGRIB SST ***\n')
    logger.debug('Removing namelist.wps')
    if os.path.exists(namelist_run): 
        os.remove(namelist_run)
    # link in original (unmodified) namelist.wps
    cmd = 'ln -sf %s %s' %(namelist_wps, namelist_run)    
    shared.run_cmd(cmd, config)