U
    —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r°eƒ  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   sJ  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rhd}|dkrvd}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)¡¡rTttj |d)¡d*ƒ ¡  ¡ }n4tj tj |d+¡¡rˆttj |d+¡d*ƒ ¡  ¡ }|d, 	|	|
|¡7 }|  d-d. 	|¡¡ |  ¡  |d/krìttj |d0¡d1ƒ}| |d2 ¡ W 5 Q R X d3}td4|d4 ƒD ]D}|d4krrd5 	|¡}tj tj |d6 	|¡¡¡srtj tj |d7¡¡rrt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   s.   t tjƒ} t| ƒ}t|| dƒ W 5 Q R X 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   $
 