U g@sPddlZz ddlZWn epek r4ddlZYnXddlZGdddZdS)Nc@seZdZdZdddZdS) obc_segmentz6 A class describing an open boundary condtion segment MOM6cKs$||_||_g|_|jd|jdd|_|dk rb|j||D]\}}|j|qL|j|jkr|j|_ |j|_ d|_ n4|j|jkr|j|_ |j|_ d|_ n|j|_ |j|_ |j |j kr|j |_|j |_d|_ n6|j |j kr|j |_|j |_d|_ n|j |_|j |_|j |j d|_|j|jd|_t|j|jf|_t|j|jf|_t|jD],}t|j|jdd |jdd|f<qlt|jD],}t|j |j dd |j|ddf<q|d krd d g} t|d |_t|d } t|d } | j\} } tt| | g|_|jjtj j!gd|jj"tj j!| j#|jj"tj j!ddd<| j#|jj"tj j!ddd<nh|dkrddg} t|d|_tj|tj$j%| d|_n0|dkrddg} d|_tj|tj$j%| dd|_tj&|j|jtj'j(d|_)|jj"dd|j |j d|j|jdf*|j)d<|jj"dd|j |j d|j|jdf*|j)d<|jj"dd|j |j d|j|jdf|_+|j+,-|_+|jj"dd|j |j d|j|jdf|_.|j.,-|_.d|jd|jf|_/dS)a{ read target grid and create associated ESMF grid and locstream objects. Args: segment_name (string): name of the segment target_grid_file (netcdf file): grid file of the ocean model target_model: name of the ocean model (default MOM6) Examples: south = obc_segment('segment_001','./ocean_hgrid.nc', imin=0,imax=360,jmin=0,jmax=0) north = obc_segment('segment_002','./ocean_hgrid.nc', imin=0,imax=360,jmin=960,jmax=960) south = obc_segment('south','./roms_grd.nc',target_model='ROMS', imin=0,imax=180,jmin=0,jmax=0) north = obc_segment('north','./roms_grd.nc',target_model='ROMS', imin=0,imax=180,jmin=480,jmax=480) segment_nameZ target_gridFNrg@rxyangle_dx) staggerlocZROMSZlon_rhoZlat_rhoangle)filenamefiletype coord_namesregularlonlatgT)r rradd_corner_stagger) coord_syszESMF:LonzESMF:LatZny_Znx_)0rtarget_grid_fileitemsappenddebug__dict__updateistartiendiminimaxZ orientationjstartjendZjminZjmaxnxnynpemptyZilistZjlistarangencdfZ read_fieldr shapeESMFGridarrayZ grid_target add_coords StaggerLocCENTERcoordsT FileFormatGRIDSPEC LocStreamCoordSysSPH_DEGZlocstream_targetflattenr transposesqueezerZhdimensions_name)selfrrZ target_modelkwargskeyvaluekxkyrZ lon_targetZ lat_targetZ ny_targetZ nx_targetr>F/lfs/h1/ops/prod/packages/hafs.v2.0.7/ush/mom6_obc/lib_obc_segments.py__init__s!      **           zobc_segment.__init__N)r)__name__ __module__ __qualname____doc__r@r>r>r>r?r sr) numpyr#esmpyr( ImportErrorModuleNotFoundError lib_ioncdfr&rr>r>r>r?s