U  gN@sddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddlZ ddl mZmZmZmZmZmZddl mZmZmZddlZedZddZddZd d Zd d Zd dZddZ ddZ!ddZ"ddZ#ddZ$ddZ%ddZ&ddZ'dS)N) remove_file make_symlinkchdirfortlink deliver_filemakedirs)runexeopenmpZhmonc CsVt|dB}t|d,}|D]}t|||r ||q W5QRXW5QRXdS)Nwr)open readlinesresearchwrite)ZrstrinfileZoutfileZ ignorecasefZmyfileliner4/lfs/h1/ops/prod/packages/hmon.v3.2.7/ush/nmmbUsh.py grep_files    rcCst|D] }t|q dS)N)globrfilerrrr delete_filesrcCsHt|D]8}tj|r:tj|gkrBtj|ddq t|q dS)NT ignore_errors)rospathisdirshutilrmtreerrrrr removealls  r#cGsX|D]N}td|t|D]0}tj|r@tj|ddq tj j |tdq qdS)Nzrm Trlogger) r%inforrrr r!r"produtilfileopr)argsZa_globmatchrrrrm_glob"s  r+cCsBg}t|D]}tj|s||qtjj||dtddS)NTr$) rrrislinkappendr'r(Zmake_symlinks_inr%)sourceZ destinationZsourcesrrrr make_symlinks+s   r/cGs8dd|D}|d7}tjjt|d|>|ddS)NcSsg|] }t|qSr)str).0argrrr 3szhmon_pgm..  r$)r'rcheckrunr join)r%Zpgmr)Zstrargsrrrhmon_pgm2sr8c Cs|dt|dt|dt|dt|d|}t|d<}||d||d||d||W5QRXttd|}tt dd d }t j j ||k|k|d dS) Nznems_relocate r5itag%01dr _d%02d z relocate stdout_wrfges%01d./nems_bin_io.exethreadsr$) r&r0r rcloseprintrgetcwdr r r'rr6 r%ZitagIdZhwrfinZgfsZdomainIdZitagfilerZofilecmdrrr nems_relocate7s6   rEc Cs|dt|dt|dt|dt|d|}t|d<}||d||d||d||W5QRXd|}ttdd d |k}||k}tjj ||d dS) Nz nems_update r5r9r r:zupdate r;r<r=r>r$) r&r0r rr@r r r'rr6rCrrr nems_updateFs6  rFcCsP|dt|d}d}tj|dd|d|f}tjj|dk|dd S) zF!Runs the hwrf_diffwrf_3dvar program to update the output domains.z update_3dvar hwrf_3dvar./hwrf_diffwrf_3dvar.exeZ 3dvar_updatezwrfghost_d%02dzdata_merge_g%02dout.hwrf_relocater$Nr&r0r'rr r6r%idZfprogprogrDrrr update_3dvarUs rNcCsR|dt|d}d}tj|dd|dd|f}tjj|dk|d d S) zo!Runs the hwrf_diffwrf_3dvar program on all inputs to create binary file for input to the Fortran programs.zstorm_relocate rGrHZstorm_relocatez wrfout_d%02dZflnm3zold_hwrf_d%02drIr$NrJrKrrrrelocate_stormas  rOc Csn|d|d|tdddddd}tdd0}|d ttj|ttj|fW5QRXdS) Nzcreate limits for time span: z to il rZlimitsZwtz %f %f false false )r&datetimer rfloathwrfhycomZdate_normal2hycom)r%Z spinstartZcycZ hycom_epochZlimitfrrr create_limitsls rVcCs^ttj|}|dd}|dd}|dd}|dd}||||}|||S) Nr )r0rTrUdate_hycom2normalr&)r%dateZyyyyZmmZddZhhrrrr^xs     r^cCstt|}|dkr6tt|d}tj|d}|dS|dkrhtj|d}t|dd}|}d|StddS) z!Convert YYYYMMDD dates to YYYYJJJ or back again. The day of year (JJJ) is one-based: 1 is January 1, 2 is January 2, etc.rYr[z%Y%jz%Y%m%drZz%07dzBdate2jday needs a 7-char or 8-char string like YYYYMMDD or YYYYJJJN)lenr0intrRstrptimestrftime ValueError)r%r_ZstrlenZyyyyjjjZdateobjZyyyydddrrr date2jdays re)(rsysrr! fileinputrRrZ hwrf.hycomrTprodutil.setupr' produtil.runprodutil.fileopZ produtil.cdprodutil.batchsystemrrrrrrrr r logging getLoggerr%rrr#r+r/r8rErFrNrOrVr^rerrrrs&8(