Changeset 5903


Ignore:
Timestamp:
2015-11-20T11:22:11+01:00 (5 years ago)
Author:
jcastill
Message:

Made coupled current passed to wave independent of currents passed to atmosphere

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_ww3_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r5900 r5903  
    736736      SELECT CASE( TRIM( sn_snd_crtw%cldes ) ) 
    737737      CASE( 'none'                 )   ;   ssnd(jps_ocxw:jps_ocyw)%laction = .FALSE. 
    738       CASE( 'coupled'              )   ;   ssnd(jps_ocxw:jps_ocyw)%laction = .TRUE. 
     738      CASE( 'oce only'             )   ;   ssnd(jps_ocxw:jps_ocyw)%laction = .TRUE. 
     739      CASE( 'weighted oce and ice' )   !   nothing to do 
     740      CASE( 'mixed oce-ice'        )   ;   ssnd(jps_ivx1:jps_ivz1)%laction = .FALSE. 
    739741      CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_crtw%cldes' ) 
    740742      END SELECT 
     
    19251927      !                                                      !      Surface current      ! 
    19261928      !                                                      ! ------------------------- ! 
    1927       IF( ssnd(jps_ocx1)%laction .OR. ssnd(jps_ocxw)%laction .OR. ssnd(jps_ocyw)%laction ) THEN 
     1929      IF( ssnd(jps_ocx1)%laction ) THEN 
    19281930         !     
    19291931         !                                                  j+1   j     -----V---F 
     
    20562058         IF( ssnd(jps_ivy1)%laction )   CALL cpl_snd( jps_ivy1, isec, RESHAPE ( zity1, (/jpi,jpj,1/) ), info )   ! ice   y current 1st grid 
    20572059         IF( ssnd(jps_ivz1)%laction )   CALL cpl_snd( jps_ivz1, isec, RESHAPE ( zitz1, (/jpi,jpj,1/) ), info )   ! ice   z current 1st grid 
    2058          !  
    2059          !currents to wave model 
     2060      !  
     2061      ENDIF 
     2062      !                                                      ! ------------------------- ! 
     2063      !                                                      !  Surface current to waves ! 
     2064      !                                                      ! ------------------------- ! 
     2065      IF( ssnd(jps_ocxw)%laction .OR. ssnd(jps_ocyw)%laction ) THEN 
     2066         !     
     2067         !                                                  j+1   j     -----V---F 
     2068         ! surface velocity always sent from T point                     !       | 
     2069         !                                                        j      |   T   U 
     2070         !                                                               |       | 
     2071         !                                                   j    j-1   -I-------| 
     2072         !                                               (for I)         |       | 
     2073         !                                                              i-1  i   i 
     2074         !                                                               i      i+1 (for I) 
     2075         SELECT CASE( TRIM( sn_snd_crtw%cldes ) ) 
     2076         CASE( 'oce only'             )      ! C-grid ==> T 
     2077            DO jj = 2, jpjm1 
     2078               DO ji = fs_2, fs_jpim1   ! vector opt. 
     2079                  zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj  ,1) ) 
     2080                  zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji  ,jj-1,1) )  
     2081               END DO 
     2082            END DO 
     2083         CASE( 'weighted oce and ice' )    
     2084            SELECT CASE ( cp_ice_msh ) 
     2085            CASE( 'C' )                      ! Ocean and Ice on C-grid ==> T 
     2086               DO jj = 2, jpjm1 
     2087                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     2088                     zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)   
     2089                     zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj) 
     2090                     zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj) 
     2091                     zity1(ji,jj) = 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj) 
     2092                  END DO 
     2093               END DO 
     2094            CASE( 'I' )                      ! Ocean on C grid, Ice on I-point (B-grid) ==> T 
     2095               DO jj = 2, jpjm1 
     2096                  DO ji = 2, jpim1   ! NO vector opt. 
     2097                     zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   
     2098                     zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   
     2099                     zitx1(ji,jj) = 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1)                     & 
     2100                        &                  + u_ice(ji+1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     2101                     zity1(ji,jj) = 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1)                     & 
     2102                        &                  + v_ice(ji+1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     2103                  END DO 
     2104               END DO 
     2105            CASE( 'F' )                      ! Ocean on C grid, Ice on F-point (B-grid) ==> T 
     2106               DO jj = 2, jpjm1 
     2107                  DO ji = 2, jpim1   ! NO vector opt. 
     2108                     zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   
     2109                     zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   
     2110                     zitx1(ji,jj) = 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1)                     & 
     2111                        &                  + u_ice(ji-1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     2112                     zity1(ji,jj) = 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1)                     & 
     2113                        &                  + v_ice(ji-1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     2114                  END DO 
     2115               END DO 
     2116            END SELECT 
     2117            CALL lbc_lnk( zitx1, 'T', -1. )   ;   CALL lbc_lnk( zity1, 'T', -1. ) 
     2118         CASE( 'mixed oce-ice'        ) 
     2119            SELECT CASE ( cp_ice_msh ) 
     2120            CASE( 'C' )                      ! Ocean and Ice on C-grid ==> T 
     2121               DO jj = 2, jpjm1 
     2122                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     2123                     zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)   & 
     2124                        &         + 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj) 
     2125                     zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj)   & 
     2126                        &         + 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj) 
     2127                  END DO 
     2128               END DO 
     2129            CASE( 'I' )                      ! Ocean on C grid, Ice on I-point (B-grid) ==> T 
     2130               DO jj = 2, jpjm1 
     2131                  DO ji = 2, jpim1   ! NO vector opt. 
     2132                     zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &    
     2133                        &         + 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1)                     & 
     2134                        &                  + u_ice(ji+1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     2135                     zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &  
     2136                        &         + 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1)                     & 
     2137                        &                  + v_ice(ji+1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     2138                  END DO 
     2139               END DO 
     2140            CASE( 'F' )                      ! Ocean on C grid, Ice on F-point (B-grid) ==> T 
     2141               DO jj = 2, jpjm1 
     2142                  DO ji = 2, jpim1   ! NO vector opt. 
     2143                     zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &    
     2144                        &         + 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1)                     & 
     2145                        &                  + u_ice(ji-1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     2146                     zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &  
     2147                        &         + 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1)                     & 
     2148                        &                  + v_ice(ji-1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj) 
     2149                  END DO 
     2150               END DO 
     2151            END SELECT 
     2152         END SELECT 
     2153         CALL lbc_lnk( zotx1, ssnd(jps_ocxw)%clgrid, -1. )   ;   CALL lbc_lnk( zoty1, ssnd(jps_ocyw)%clgrid, -1. ) 
     2154         ! 
     2155         ! 
     2156         IF( TRIM( sn_snd_crtw%clvor ) == 'eastward-northward' ) THEN             ! Rotation of the components 
     2157            !                                                                     ! Ocean component 
     2158            CALL rot_rep( zotx1, zoty1, ssnd(jps_ocxw)%clgrid, 'ij->e', ztmp1 )       ! 1st component  
     2159            CALL rot_rep( zotx1, zoty1, ssnd(jps_ocxw)%clgrid, 'ij->n', ztmp2 )       ! 2nd component  
     2160            zotx1(:,:) = ztmp1(:,:)                                                   ! overwrite the components  
     2161            zoty1(:,:) = ztmp2(:,:) 
     2162            IF( ssnd(jps_ivx1)%laction ) THEN                                     ! Ice component 
     2163               CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->e', ztmp1 )    ! 1st component  
     2164               CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->n', ztmp2 )    ! 2nd component  
     2165               zitx1(:,:) = ztmp1(:,:)                                                ! overwrite the components  
     2166               zity1(:,:) = ztmp2(:,:) 
     2167            ENDIF 
     2168         ENDIF 
     2169         ! 
     2170!         ! spherical coordinates to cartesian -> 2 components to 3 components 
     2171!         IF( TRIM( sn_snd_crtw%clvref ) == 'cartesian' ) THEN 
     2172!            ztmp1(:,:) = zotx1(:,:)                     ! ocean currents 
     2173!            ztmp2(:,:) = zoty1(:,:) 
     2174!            CALL oce2geo ( ztmp1, ztmp2, 'T', zotx1, zoty1, zotz1 ) 
     2175!            ! 
     2176!            IF( ssnd(jps_ivx1)%laction ) THEN           ! ice velocities 
     2177!               ztmp1(:,:) = zitx1(:,:) 
     2178!               ztmp1(:,:) = zity1(:,:) 
     2179!               CALL oce2geo ( ztmp1, ztmp2, 'T', zitx1, zity1, zitz1 ) 
     2180!            ENDIF 
     2181!         ENDIF 
     2182         ! 
    20602183         IF( ssnd(jps_ocxw)%laction )   CALL cpl_snd( jps_ocxw, isec, RESHAPE ( zotx1, (/jpi,jpj,1/) ), info )   ! ocean x current 1st grid 
    20612184         IF( ssnd(jps_ocyw)%laction )   CALL cpl_snd( jps_ocyw, isec, RESHAPE ( zoty1, (/jpi,jpj,1/) ), info )   ! ocean y current 1st grid 
Note: See TracChangeset for help on using the changeset viewer.