New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 12926 for NEMO/releases/r4.0/r4.0-HEAD/src/OCE – NEMO

Ignore:
Timestamp:
2020-05-14T16:10:40+02:00 (4 years ago)
Author:
smasson
Message:

r4.0-HEAD: avoid pollution of atm-ice stress at coastal points, see #2465

Location:
NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbcblk.F90

    r12901 r12926  
    706706      REAL(wp) ::   zwndi_f , zwndj_f, zwnorm_f   ! relative wind module and components at F-point 
    707707      REAL(wp) ::   zwndi_t , zwndj_t             ! relative wind components at T-point 
     708      REAL(wp) ::   zztmp1  , zztmp2              ! temporary values 
    708709      REAL(wp), DIMENSION(jpi,jpj) ::   zrhoa     ! transfer coefficient for momentum      (tau) 
    709710      !!--------------------------------------------------------------------- 
     
    744745      zrhoa (:,:) =  rho_air(sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1)) 
    745746 
    746       !!gm brutal.... 
    747       utau_ice  (:,:) = 0._wp 
    748       vtau_ice  (:,:) = 0._wp 
    749       !!gm end 
    750  
    751747      ! ------------------------------------------------------------ ! 
    752748      !    Wind stress relative to the moving ice ( U10m - U_ice )   ! 
    753749      ! ------------------------------------------------------------ ! 
    754       ! C-grid ice dynamics :   U & V-points (same as ocean) 
    755       DO jj = 2, jpjm1 
     750      zztmp1 = rn_vfac * 0.5_wp 
     751      DO jj = 2, jpj    ! at T point 
     752         DO ji = 2, jpi 
     753            zztmp2 = zrhoa(ji,jj) * Cd_atm(ji,jj) * wndm_ice(ji,jj) 
     754            utau_ice(ji,jj) = zztmp2 * ( sf(jp_wndi)%fnow(ji,jj,1) - zztmp1 * ( u_ice(ji-1,jj  ) + u_ice(ji,jj) ) ) 
     755            vtau_ice(ji,jj) = zztmp2 * ( sf(jp_wndj)%fnow(ji,jj,1) - zztmp1 * ( v_ice(ji  ,jj-1) + v_ice(ji,jj) ) ) 
     756         END DO 
     757      END DO 
     758      ! 
     759      DO jj = 2, jpjm1  ! U & V-points (same as ocean). 
    756760         DO ji = fs_2, fs_jpim1   ! vect. opt. 
    757             utau_ice(ji,jj) = 0.5 * zrhoa(ji,jj) * Cd_atm(ji,jj) * ( wndm_ice(ji+1,jj  ) + wndm_ice(ji,jj) )            & 
    758                &          * ( 0.5 * (sf(jp_wndi)%fnow(ji+1,jj,1) + sf(jp_wndi)%fnow(ji,jj,1) ) - rn_vfac * u_ice(ji,jj) ) 
    759             vtau_ice(ji,jj) = 0.5 * zrhoa(ji,jj) * Cd_atm(ji,jj) * ( wndm_ice(ji,jj+1  ) + wndm_ice(ji,jj) )            & 
    760                &          * ( 0.5 * (sf(jp_wndj)%fnow(ji,jj+1,1) + sf(jp_wndj)%fnow(ji,jj,1) ) - rn_vfac * v_ice(ji,jj) ) 
     761            ! take care of the land-sea mask to avoid "pollution" of coastal stress. p[uv]taui used in frazil and  rheology  
     762            zztmp1 = 0.5_wp * ( 2. - umask(ji,jj,1) ) * MAX( tmask(ji,jj,1),tmask(ji+1,jj  ,1) ) 
     763            zztmp2 = 0.5_wp * ( 2. - vmask(ji,jj,1) ) * MAX( tmask(ji,jj,1),tmask(ji  ,jj+1,1) ) 
     764            utau_ice(ji,jj) = zztmp1 * ( utau_ice(ji,jj) + utau_ice(ji+1,jj  ) ) 
     765            vtau_ice(ji,jj) = zztmp2 * ( vtau_ice(ji,jj) + vtau_ice(ji  ,jj+1) ) 
    761766         END DO 
    762767      END DO 
  • NEMO/releases/r4.0/r4.0-HEAD/src/OCE/SBC/sbccpl.F90

    r12288 r12926  
    14821482      INTEGER ::   ji, jj   ! dummy loop indices 
    14831483      INTEGER ::   itx      ! index of taux over ice 
     1484      REAL(wp)                     ::   zztmp1, zztmp2 
    14841485      REAL(wp), DIMENSION(jpi,jpj) ::   ztx, zty  
    14851486      !!---------------------------------------------------------------------- 
     
    15451546            p_taui(:,:) = frcv(jpr_itx1)%z3(:,:,1)                   ! (U,V) ==> (U,V) 
    15461547            p_tauj(:,:) = frcv(jpr_ity1)%z3(:,:,1) 
    1547          CASE( 'F' ) 
    1548             DO jj = 2, jpjm1                                   ! F ==> (U,V) 
    1549                DO ji = fs_2, fs_jpim1   ! vector opt. 
    1550                   p_taui(ji,jj) = 0.5 * ( frcv(jpr_itx1)%z3(ji,jj,1) + frcv(jpr_itx1)%z3(ji  ,jj-1,1) ) 
    1551                   p_tauj(ji,jj) = 0.5 * ( frcv(jpr_ity1)%z3(ji,jj,1) + frcv(jpr_ity1)%z3(ji-1,jj  ,1) ) 
    1552                END DO 
    1553             END DO 
    15541548         CASE( 'T' ) 
    15551549            DO jj = 2, jpjm1                                   ! T ==> (U,V) 
    15561550               DO ji = fs_2, fs_jpim1   ! vector opt. 
    1557                   p_taui(ji,jj) = 0.5 * ( frcv(jpr_itx1)%z3(ji+1,jj  ,1) + frcv(jpr_itx1)%z3(ji,jj,1) ) 
    1558                   p_tauj(ji,jj) = 0.5 * ( frcv(jpr_ity1)%z3(ji  ,jj+1,1) + frcv(jpr_ity1)%z3(ji,jj,1) ) 
     1551                  ! take care of the land-sea mask to avoid "pollution" of coastal stress. p[uv]taui used in frazil and  rheology  
     1552                  zztmp1 = 0.5_wp * ( 2. - umask(ji,jj,1) ) * MAX( tmask(ji,jj,1),tmask(ji+1,jj  ,1) ) 
     1553                  zztmp2 = 0.5_wp * ( 2. - vmask(ji,jj,1) ) * MAX( tmask(ji,jj,1),tmask(ji  ,jj+1,1) ) 
     1554                  p_taui(ji,jj) = zztmp1 * ( frcv(jpr_itx1)%z3(ji+1,jj  ,1) + frcv(jpr_itx1)%z3(ji,jj,1) ) 
     1555                  p_tauj(ji,jj) = zztmp2 * ( frcv(jpr_ity1)%z3(ji  ,jj+1,1) + frcv(jpr_ity1)%z3(ji,jj,1) ) 
    15591556               END DO 
    15601557            END DO 
    1561          CASE( 'I' ) 
    1562             DO jj = 2, jpjm1                                   ! I ==> (U,V) 
    1563                DO ji = 2, jpim1   ! NO vector opt. 
    1564                   p_taui(ji,jj) = 0.5 * ( frcv(jpr_itx1)%z3(ji+1,jj+1,1) + frcv(jpr_itx1)%z3(ji+1,jj  ,1) ) 
    1565                   p_tauj(ji,jj) = 0.5 * ( frcv(jpr_ity1)%z3(ji+1,jj+1,1) + frcv(jpr_ity1)%z3(ji  ,jj+1,1) ) 
    1566                END DO 
    1567             END DO 
     1558            CALL lbc_lnk_multi( 'sbccpl', p_taui, 'U',  -1., p_tauj, 'V',  -1. ) 
    15681559         END SELECT 
    1569          IF( srcv(jpr_itx1)%clgrid /= 'U' ) THEN  
    1570             CALL lbc_lnk_multi( 'sbccpl', p_taui, 'U',  -1., p_tauj, 'V',  -1. ) 
    1571          ENDIF 
    15721560          
    15731561      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.