U
    —rfÍ$  ã                   @   sâ   d Z ddlZddlZddlZddlZej ej ej e	¡¡d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 dd
lmZ ddlmZmZ ddlmZmZ e e¡Zdd„ Zdd„ Zdd„ ZedkrÞeƒ  dS )z,Namelist creator for CIME's data ocn model.
é    Nz..ÚcimeÚscriptsÚTools)Ú*)ÚCase)ÚFiles)ÚNamelistGenerator)ÚexpectÚ	safe_copy)Úcreate_namelist_infileÚparse_inputc                 C   sâ  |   d¡}|   d¡}|   d¡}|   d¡}	|   d¡}
t|	dkdƒ t|dkd	ƒ t d
 |¡¡ t d |	¡¡ i }|	|d< ||d< |
|d< | ||¡ | ¡ }|D ]X}|dks¢|dkr¸q¢|| }t d |¡¡ tj 	|d| ¡}| 
||   d¡|||¡ q¢t d|¡}|dk	r0| d¡r0dg}| d|¡ |dkrddg}| d|¡ |   d¡g}| d|¡ | ¡  |dkr”tj 	||¡}|jd|d n(d|kr®t|dkdƒ n|jddd tj 	|d¡}|j||d d!gd" dS )#a9  Write out the namelist for this component.

    Most arguments are the same as those for `NamelistGenerator`. The
    `inst_string` argument is used as a suffix to distinguish files for
    different instances. The `confdir` argument is used to specify the directory
    in which output files will be placed.
    ZOCN_DOMAIN_FILEZOCN_DOMAIN_PATHÚ	DOCN_MODEZOCN_GRIDZSSTICE_STREAMÚnullzOCN_GRID cannot be nullÚNULLzDOCN_MODE cannot be NULLzDOCN mode is {}zDOCN grid is {}Úocn_gridÚ	docn_modeÚsstice_streamN)r   Ú zDOCN stream is {}zdocn.streams.txt.ÚCASEROOTz^sst_aquap\d+r   ÚstreamsZsst_aquap_constantZDOCN_AQPCONST_VALUEZsst_constant_valueÚUNSETZ
domainfile)ÚvalueZaquazMin aquaplanet mode the xml variable OCN_DOMAIN_FILE cannot be equal to UNSET Zdocn_inZdocn_nmlZshr_strdata_nml)Úgroups)Ú	get_valuer	   ÚloggerÚdebugÚformatZinit_defaultsZget_streamsÚosÚpathÚjoinZ-create_stream_file_and_update_shr_strdata_nmlÚreÚmatchÚgroupÚ	set_valueZcreate_shr_strdata_nmlZadd_defaultZwrite_output_file)ÚcaseÚconfdirÚinst_stringÚinfileÚnmlgenÚdata_list_pathZocn_domain_fileZocn_domain_pathr   r   r   Úconfigr   ÚstreamZinst_streamZstream_pathr!   r   Zfull_domain_pathZnamelist_file© r,   úX/global/u1/q/qinyi/eagles_code/eaglesrrm/components/data_comps/docn/cime_config/buildnmlÚ_create_namelists   s^    




ÿÿ



ÿr.   c                 C   s  |dkrt ‚|  d¡}|  d¡}|d kr2|  d¡}tj |d|d ¡}tj |¡s\t |¡ tj |dd| ¡}ttj |¡d	 |¡ƒ t	ƒ }| d
ddi¡g}tj |d¡}	tj 
|	¡rÀ|	g}|D ]}
ttj 
|
¡d |
¡ƒ qÄt| ||d}tj |  ¡ dd¡}tj |¡rt |¡ td|d ƒD ]^}d}|dkrLdd |¡ }d| }tj 
tj ||¡¡rªtj 
tj ||| ¡¡sªttj ||¡tj ||| ¡ƒ |}|s¸d}tj |d| | ¡}ttj 
|¡d |¡ƒ tj |d¡}t| ||ƒ |g}t| |||||ƒ tj |¡r*|d }tj ||¡}tj ||¡}|rX||7 }t||ƒ t tj |d¡¡D ]}t||ƒ qvq*d S )NÚdocnÚRUNDIRZ	NINST_OCNÚNINSTÚ	BuildconfÚconfÚ
SourceModszsrc.zuser_xml_dir {} does not exist ZNAMELIST_DEFINITION_FILEÚ	componentznamelist_definition_docn.xmlzNamelist XML file {} not found!)Úfileszdocn.input_data_listé   r   Ú_z{:04d}z	rpointer.z""Zuser_nl_z!Missing required user_nl_file {} Únamelist_infileÚ_inz*txt*)ÚAttributeErrorr   r   r   r   ÚisdirÚmakedirsr	   r   r   Úisfiler   Úget_case_rootÚexistsÚremoveÚranger
   r   r.   Úglob)r$   ÚcaserootÚcompnameÚrundirÚninstr%   Zuser_xml_dirr6   Zdefinition_fileZuser_definitionÚfile_r(   r)   Úinst_counterr&   ÚrpointerZinst_string_labelÚuser_nl_filer'   r9   ÚfilenameÚfile_srcÚ	file_destZtxtfiler,   r,   r-   Úbuildnmlƒ   sr    



ÿÿ

ÿÿÿ
rO   c               	   C   s.   t tjƒ} t| ƒ}t|| dƒ W 5 Q R X d S )Nr/   )r   ÚsysÚargvr   rO   )rD   r$   r,   r,   r-   Ú
_main_funcÞ   s    

rR   Ú__main__) Ú__doc__r   rP   rC   r    r   r   ÚdirnameÚabspathÚ__file__Ú	_CIMEROOTÚappendÚstandard_script_setupÚ	CIME.caser   ÚCIME.XML.filesr   ZCIME.nmlgenr   Ú
CIME.utilsr	   r
   ÚCIME.buildnmlr   r   ÚloggingÚ	getLoggerÚ__name__r   r.   rO   rR   r,   r,   r,   r-   Ú<module>   s   	 &
g[