o
    —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rqeƒ  dS 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 ],}|du s[|dv r\qQ|| }t d |¡¡ tj 	|d| ¡}| 
||   d¡|||¡ qQt d|¡}|dur–| d¡r–dg}| d|¡ |dkr¯dg}| d|¡ |   d¡g}| d|¡ | ¡  |dkrÆtj 	||¡}|jd|d nd|v 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 u r|  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 |
¡ƒ qbt| ||d}tj |  ¡ dd¡}tj |¡rt |¡ td|d ƒD ]ª}d}|dkr£d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 ||¡}|r&||7 }t||ƒ t tj |d¡¡D ]}t||ƒ q5q”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ƒ   sv   



ÿÿ
ÿÿÿ
€ÙrO   c                  C   sD   t tjƒ} t| ƒ}t|| dƒ W d   ƒ d S 1 sw   Y  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[
ÿ