o
    —rfÃ  ã                   @   s¸   d Z ddlZddlZej ej ej e¡¡dddd¡Zej 	ej edd¡¡ ddl
T ddlmZ dd	lmZmZmZ dd
lmZmZ e e¡Zdd„ Zdd„ ZedkrZeƒ  dS dS )z,
Namelist creator for E3SM's CICE component
é    Nz..ÚcimeÚscriptsÚTools)Ú*)ÚCase)ÚexpectÚrun_cmd_no_failÚ	safe_copy)Úcreate_namelist_infileÚparse_inputc              	   C   sX  t |dk|ƒ t |¡ |tjd< |  d¡}|  d¡}|  d¡}|  d¡}|  d¡}|  d¡}|  d	¡}	|  d
¡}
|  d¡}|  d¡}|  d¡}|  d¡}|  d¡}|  d¡}|  d¡}|  d¡}|  d¡}|  d¡}|  d¡}tj |d¡}tj |¡s‚t |¡ tj |d¡}|d 	|||¡7 }|d 	|||¡7 }t
||d |rt|| ƒ}|}|dkr²d}|dkr¸d}t
d 	||||||¡tj |d ¡d ¡ }t|d! ƒd!kr|d"d#… \}	}
}|  d	|	¡ |  d
|
¡ |  d|¡ |  d$|d# ¡ |  d%|d& ¡ n
t d'd( 	|||¡ƒ tj tj |d)¡¡r'ttj |d)¡d*ƒ ¡  ¡ }ntj tj |d+¡¡rAttj |d+¡d*ƒ ¡  ¡ }|d, 	|	|
|¡7 }|  d-d. 	|¡¡ |  ¡  |d/kr~ttj |d0¡d1ƒ}| |d2 ¡ W d   ƒ n	1 syw   Y  d3}td4|d4 ƒD ]¢}|d4krÀd5 	|¡}tj tj |d6 	|¡¡¡sÀtj tj |d7¡¡rÀttj |d7¡tj |d6 	|¡¡ƒ t| d8 	||¡d9 	|¡ƒ tj |d:¡}|d; 	|¡7 }|d< 	|¡7 }|d= 	|¡7 }|d> 	|¡7 }|d? 	t¡7 }|d@ 	|¡7 }|dA 	|¡7 }|dB7 }t
||d tj |¡r(ttj |dC¡tj |dD 	|¡¡ƒ q‡d S )ENÚciceÚCASEROOTÚSRCROOTZOBJROOTZCICE_AUTO_DECOMPZCICE_NAMELIST_OPTSZCICE_CONFIG_OPTSZ	CICE_MODEZ
CICE_BLCKXZ
CICE_BLCKYZCICE_MXBLCKSÚCOMP_INTERFACEZICE_GRIDZICE_NXZICE_NYZ
NTHRDS_ICEZ
NTASKS_ICEZ	NINST_ICEÚRUNDIRÚTESTCASEÚ	CASEBUILDZciceconfzcomponents/cice/bld/configurez -hgrid {} -nx {} -ny {} z) -comp_intf {} -cice_mode {} -nodecomp {})Úfrom_dirZar9v2Zar9v1Zar9v4Zar9v3z\./generate_cice_decomp.pl -ccsmroot {} -res {} -nx {} -ny {} -nproc {} -thrds {} -output allzcomponents/cice/bldr   é   é   ZCICE_DECOMPTYPEZCICE_DECOMPSETTINGé   Fz@ERROR cice.buildnml: cice decomp not set for {} on {} x {} procsZCIME_cppdefsÚrZCCSM_cppdefsz# -DBLCKX={} -DBLCKY={} -DMXBLCKS={}ZCICE_CPPDEFSz{}ÚSBNzice/obj/CIME_cppdefs.newÚwÚ
Ú é   z_{0:04d}zrpointer.ice{}zrpointer.icez{}/user_nl_cice{}z{}/namelistz"components/cice/bld/build-namelistz' -infile {}/Buildconf/ciceconf/namelistz- -inputdata {}/Buildconf/cice.input_data_listz -rundir {}z -caseroot {}z -cimeroot {}z -inst_string "{}"z -namelist "&cice {}/" z -config config_cache.xmlZice_inzice_in{})r   ÚosÚchdirÚenvironÚ	get_valueÚpathÚjoinÚisdirÚmkdirÚformatr   ÚintÚsplitÚ	set_valueÚisfileÚopenÚreadÚstripÚflushÚwriteÚrangeÚexistsr	   r
   Ú	_CIMEROOT)ÚcaseÚcaserootÚcompnameÚsrcrootZobjrootZcice_auto_decompZcice_namelist_optsZcice_config_optsZ	cice_modeZ
cice_blckxZ
cice_blckyZcice_mxblcksÚcomp_interfaceZice_gridZice_nxZice_nyZ
nthrds_iceZ
ntasks_iceZ	ninst_iceÚrundirÚtestcaseÚ	casebuildZciceconf_dirÚsysmodÚntasksZhgridÚconfigZcppdefsÚfdÚinst_stringÚinst_counter© r@   úM/global/u1/q/qinyi/eagles_code/eaglesrrm/components/cice/cime_config/buildnmlÚbuildnml   sª   




















ÿÿ
ÿ

ÿÿ
þ$€ÔrB   c                  C   sD   t tjƒ} t| ƒ}t|| dƒ W d   ƒ d S 1 sw   Y  d S )Nr   )r   ÚsysÚargvr   rB   )r3   r2   r@   r@   rA   Ú
_main_funcŸ   s   

"ÿrE   Ú__main__)Ú__doc__r   rC   r!   r"   ÚdirnameÚabspathÚ__file__r1   ÚappendÚstandard_script_setupÚ	CIME.caser   Ú
CIME.utilsr   r   r	   ÚCIME.buildnmlr
   r   ÚloggingÚ	getLoggerÚ__name__ÚloggerrB   rE   r@   r@   r@   rA   Ú<module>   s   $
 
ÿ