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 ***')
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 ***')
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)
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)