U #gqI @sddlZddlmZmZmZmZmZmZmZm Z m Z m Z ddl m Z mZmZmZddlmZmZddlZddlmZmZmZddlmZddlmZdd lmZmZdd lTddl Z!dd l m"Z"dd l#m$Z$d ddddddddd Z%dddZ&dS)N) Oceaninifbtrg3napgetprunphasepsendrtsst_pert) dateplushours ysplitterlogi2intjn2r)nmlkppnml)existsgetsizesplit) choose_domain) read_pom_conf) get_vitals track_shorten)*)rmall)set_ecflow_label)rZnatrZrttr)Zg3epZnaepZrtep)Zg3wpZnawpZrtwp)Zg3niZnaniZrtni)Zg3siZnasiZrtsi)Zg3swZnaswZrtsw)Zg3seZnaseZrtse)Zrtwn)Zrtcp) transatleastpacwestpacnorthindsouthindswpacsepacwncpacc=Ks`|ddkst| dkr$td} | dkr0d} |dkr}$d?}%d'}&| d$krd.}'t|d}(td+||(t||t||#||||||||| | f|})nd/| }| |t||)\}*}+|},t}-|-|)|*t|d0|}.t|+d1}/t|+d2}0t|/|0| dt |.|&|||/| d}1t!|/|0|}1|1dkrd3|}| "|t#|0d4}2|2$d5d6W5QRXt%}3|3&|)|* sd@}| "|t'|n"|dAk rd&}$d&}%d<}&| d(ks| d)k r,d9}'t|d}(t(d+||(t||t||#||||||||| | f|})n| d,k r|d-}'t|d}(td+||(t||t||#||||||||| | f|})nj| d$k rd.}'t|d }(td+||(t||t||#||||||||| | f|})nd/| }| |t||)\}*}+|},t}-|-|)|*t|d0|}.t|+d1}/t|+d2}0t|/|0| dt |.|&|||/| d}1t!|/|0|}1|1dk rd3|}| "|t#|0d4}2|2$d5d6W5QRXt%}3|3&|)|* sdB}| "|t)|ndC|}| |t)||d dDdE}4|dFdGdH}5|4dk r|4dEk r|4|5k r|dFdI}6|6d#k rt*d+||(t||t|||||||||| | t|4f|}6t}-|-|6|*t%}3|3&|6|* sdJ}| "|t'|t+|$|%d+||(t||t||#||||||||| | f|}7|7dK\}*}+t,}8|8dL||dM|dNdOdM|dP|dP|dQ|dRddSdTdT|d&ddUdV||'|dd| |8-|+|-|7|+|3&|7|+ sdW}| "|t'|t.}9t/dXdY| t+|$|%d+||(t||t||#||||||||| | f|}:t0|,dZ},|:d[\}*};t|,\}}}}}|8dL||dM|dNdOdM|dP|dP|dQ|dRdd\d]d]|dddUd^||'|dd| |8-|;|91|7|+d_|;d`r|91|7|+da|;dat|d0|}.t|;d1}/t|;d2}0t|/|0| dt |.|&|||/| d}1t!|/|0|}1|-|:|;|1d krb| d$krb|3&|:|;r0t/dXdb| |91|:|;d_|*dc|91|:|;da|*dan0t/dXdd| |91|:|;d`|*dc|91|:|;da|*danH| d$krzt/dXde| n t/dXdf| |91|:|;d`|*dc|91|:|;da|*dandg}| "|t'|t,}8t|\}}}}}|8dL||dM|dNdhdM|dP|dP|dQ|dRddid^| dj|dddUd^||'|dd| |8-dkt2}<|<|"|!|<-dkdlS)ma!Run the ocean initialization. This is a wrapper around the pom.init module that selects the right ocean initialization for the chosen basin and delivers the output to the specified location. @param STORMNAME Upper-case storm name for filenames (KATRINA) @param STORMID Three character storm number and basin, upper-case (12L) @param STARTDATE Simulation analysis time as a string, YYYYMMDDHH (2005082918) @param EXEChwrf Directory with HWRF executables. @param PARMhwrf Directory with HWRF parameter files. @param FIXhwrf Directory with HWRF fixed files. @param GFSDIR Directory with input files from GFS. @param LCDIR Directory with loop current files @param CSTREAM Directory to place files for the POM forecast to read. @param COMIN HWRF final output directory. @param init_data The string name of the initialization method to use. If this is unspecified, a suitable default is chosen. Allowed values: GDEM, NCODA. @param logger a logging.Logger for log messages @param fcstlen forecast length in hours @param outstep output frequency in seconds (an integer) @param kwargs Additional keyword arguments are passed to Oceanini subclass constructors.z pom/outputrNpom~iQig@conf/cSsg|]}|dkr|qS)).0xr,r,8/lfs/h1/ops/prod/packages/hwrf.v13.2.9/ush/pom/master.py Hszrun_init..r+z/com/z /storm1.confz%s does not existsz%s Missing or zero size)loggerzDomain selection Failedini_datagdemZgeovflagrZassi_sstZoned_pomkppflagkpp_ricg ףp= ? kpp_lt_logz.false.configrun_multistormnoyesRTOFrNHCGDEMZGDEM3!OCEANZNCODA"(z#%s:OCEAN INIT DATA IS NOT Supportedzsyndat_tcvitals.z track.fullZtrack_1z7Did not find track info for %s. Write an empty message.wtz%s z9000 000 00000 000000 0000 000 0000 000 000 0000 0000zsetrun failed for L domain preprIzsetrun failed for E domain prepr%JTWCr$z7setrun failed for basin scale (EPAC & ATL) domain prep)rr r!r"r#z1setrun failed for W/A/S/P/X/O/B/U/T/Q domain prepz%s : Domain is NOT SupportedENScensembleensizer zsetrun failed for sst_pertZPHASE1z 'MPIPOM-TC:'-- z:00:00 +00:00'z'restart.phase0.nc'g@gffffff6@gzsetrun failed for diagZwakez Starting...iZPHASE2z'restart.phase1.nc'g@g@zrestart.0001.nczrestart.phase1.ncZpom_proc_countzCold wake added successfully.zrestart.phase2.ncz(Cold wake init failed, will run without.zUsing RTOFS cold wake.z$No cold wake (too few vitals times).zsendout failedz'restart.phase2.nc'g8@.T)3findAssertionErrorlogging getLoggerruppergetjoinlistrrrhwrflauncherloaderrorZPOMConfigErrorrcriticalgetstrgetintgetfloatodata_drstrrr ZsetpathrZgetinprrrrwarningopenwriterZsetrunZ POMInitFailedrPOMUnsupportedBasinr r rmaker rr sendoutr)= STORMNAMESTORMID STARTDATEEXEChwrfPARMhwrfFIXhwrfVITDIRGFSDIRLCDIRCSTREAMCOMIN init_datar1fcstlenoutstepkwargsZprintfrqZy4ZmmZmm1ddZhhBASINr)ZWORKDIRCONFhwrfmsgZDOMAINZINDATAZGEOVELZSSTASIMZPHY1Dr4r5r6 multistormZnproc_iZnproc_jCENTERIDNLZODATAprepDATAZDATA1ymdhinfilesvitfileZ trackfileZ trackshortZnvitfoZrunexesensrKZsstpertZdiagZnamelstoutfilesprogZDATA2Zkpplstr,r,r/run_inits                                                                                          "     "          "   r)NNNN)'rVinitrrrrrrr r r r Zutilr rrrrr hwrf.launcherr\os.pathrrrdomainrrtrackrr exceptionsprodutil.fileopprodutilrprodutil.ecflowrrdrr,r,r,r/s40