U ge@s$ddlZddZddZddZdS)Nc Csvtjd}d||}d||}||}||}t|t|t||t|t|} t| } | S)z> compute the distance on the sphere between points (or arrays)gf@gV@)nppisincosarccos) Zlat1Zlong1Zlat2Zlong2Zdegrees_to_radiansZphi1Zphi2Ztheta1Ztheta2rdistr@/lfs/h1/ops/prod/packages/hafs.v2.0.7/ush/mom6_obc/lib_common.pydistance_on_unit_spheres     r c Cs|j\}}|jddd}|jddd}|jddd}|jddd}|jddd} |jddd} |jddd} |jddd} t||||} t| | j\}}t||||}t||j\}}t| | ||}t||j\}}t| | ||}t||j\}}t||}t||}t||}t||}t|dd}t|dd}t|d|}t|d|}td||d ||||||||fS) z for a given regional target grid, find the subset of the source grid (usually global) containing the target grid to reduce compute time r)rr)r)rr )r r z'Subset source grid : full dimension is z subset is ) shapecoordsr r unravel_indexargminminmaxprint) target_gridZlon_srcZlat_srcnynxZ lon_bl_tgtZ lat_bl_tgtZ lon_br_tgtZ lat_br_tgtZ lon_ul_tgtZ lat_ul_tgtZ lon_ur_tgtZ lat_ur_tgtZdist_2_bottom_left_cornerZj_bl_srcZi_bl_srcZdist_2_bottom_right_cornerZj_br_srcZi_br_srcZdist_2_upper_left_cornerZj_ul_srcZi_ul_srcZdist_2_upper_right_cornerZj_ur_srcZi_ur_srciminimaxjminjmaxrrr find_subset!sj          rcCs |dkr^t|jdkr0|ddddddf}n,t|jdkr\|ddddddddf}n|dkrt|jdkr|ddddddf}n,t|jdkr|ddddddddf}n`|dkrt|jdkr|ddddddf}n.t|jdkr|ddddddddf}|S) zZ extract field from supergrid on its staggered location, given by pointtype T,U,V Tr r NUrV)lenr)fieldZ pointtypeZfieldoutrrr supergrid_to_staggeredTs    r#)numpyrr rr#rrrr s3