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 14742 for NEMO – NEMO

Changeset 14742 for NEMO


Ignore:
Timestamp:
2021-04-23T13:12:15+02:00 (3 years ago)
Author:
davestorkey
Message:

2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends : sort out top and bottom friction trends.

Location:
NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/cfgs/SHARED/field_def_nemo-oce.xml

    r14701 r14742  
    10611061     <field id="utrd_pvo"       long_name="i-trend: planetary vorticity: 3D component"      unit="m/s^2"                        /> 
    10621062     <field id="utrd_pvo2d"     long_name="i-trend: planetary vorticity: 2D component"      unit="m/s^2"    grid_ref="grid_U_2D" /> 
    1063      <field id="utrd_pvo_corr"     long_name="i-trend: planetary vorticity: correction"      unit="m/s^2"    grid_ref="grid_U_2D" /> 
     1063     <field id="utrd_pvo_corr"     long_name="i-trend: planetary vorticity: correction"     unit="m/s^2"    grid_ref="grid_U_2D" /> 
    10641064     <field id="utrd_zad"       long_name="i-trend: vertical  advection"                    unit="m/s^2"                        /> 
    10651065     <field id="utrd_udx"       long_name="i-trend: U.dx[U]"                                unit="m/s^2"                        /> 
     
    10671067     <field id="utrd_zdf"       long_name="i-trend: vertical  diffusion"                    unit="m/s^2"                        /> 
    10681068     <field id="utrd_tau"       long_name="i-trend: wind stress "                           unit="m/s^2"   grid_ref="grid_U_2D" /> 
    1069      <field id="utrd_bfr"       long_name="i-trend: bottom friction (explicit)"             unit="m/s^2"                        />    
    1070      <field id="utrd_bfri"      long_name="i-trend: bottom friction (implicit)"             unit="m/s^2"                        />    
    1071      <field id="utrd_bfr2d"     long_name="i-trend: bottom friction: 2D component"      unit="m/s^2"    grid_ref="grid_U_2D" /> 
     1069     <field id="utrd_tfr"       long_name="i-trend: total top friction excluding wind stress"   unit="m/s^2"                        />    
     1070     <field id="utrd_bfr"       long_name="i-trend: total bottom friction (explicit and implicit)"   unit="m/s^2"                        />    
     1071     <field id="utrd_tfr2d"     long_name="i-trend: top friction: 2D component"             unit="m/s^2"    grid_ref="grid_U_2D" /> 
     1072     <field id="utrd_bfr2d"     long_name="i-trend: bottom friction: 2D component"          unit="m/s^2"    grid_ref="grid_U_2D" /> 
    10721073     <field id="utrd_tot"       long_name="i-trend: total momentum trend before atf"        unit="m/s^2"                        />    
    10731074     <field id="utrd_atf"       long_name="i-trend: asselin time filter trend"              unit="m/s^2"                        />    
     
    10851086     <field id="utrd_atf_e3u"       unit="m2/s^2" > utrd_atf * e3u </field> 
    10861087     <field id="utrd_bta_e3u"       unit="m2/s^2" > utrd_bta * e3u </field>   
     1088     <field id="utrd_tfr_e3u"       unit="m2/s^2" > utrd_tfr * e3u </field>   
    10871089     <field id="utrd_bfr_e3u"       unit="m2/s^2" > utrd_bfr * e3u </field>   
    1088      <field id="utrd_bfri_e3u"      unit="m2/s^2" > utrd_bfri * e3u </field>   
    10891090   </field_group> 
    10901091 
     
    11041105     <field id="vtrd_zdf"       long_name="j-trend: vertical  diffusion"                    unit="m/s^2"                        /> 
    11051106     <field id="vtrd_tau"       long_name="j-trend: wind stress "                           unit="m/s^2"   grid_ref="grid_V_2D" /> 
    1106      <field id="vtrd_bfr"       long_name="j-trend: bottom friction (explicit)"             unit="m/s^2"                        />    
    1107      <field id="vtrd_bfri"      long_name="j-trend: bottom friction (implicit)"             unit="m/s^2"                        />    
    1108      <field id="vtrd_bfr2d"     long_name="j-trend: bottom friction: 2D component"      unit="m/s^2"    grid_ref="grid_V_2D" /> 
     1107     <field id="vtrd_tfr"       long_name="j-trend: total top friction excluding wind stress"           unit="m/s^2"            />    
     1108     <field id="vtrd_bfr"       long_name="j-trend: total bottom friction (explicit and implicit)"      unit="m/s^2"            />    
     1109     <field id="vtrd_tfr2d"     long_name="j-trend: top friction: 2D component"      unit="m/s^2"    grid_ref="grid_V_2D"       /> 
     1110     <field id="vtrd_bfr2d"     long_name="j-trend: bottom friction: 2D component"      unit="m/s^2"    grid_ref="grid_V_2D"    /> 
    11091111     <field id="vtrd_tot"       long_name="j-trend: total momentum trend before atf"        unit="m/s^2"                        />    
    11101112     <field id="vtrd_atf"       long_name="j-trend: asselin time filter trend"              unit="m/s^2"                        />    
     
    11221124     <field id="vtrd_atf_e3v"       unit="m2/s^2" > vtrd_atf * e3v </field> 
    11231125     <field id="vtrd_bta_e3v"       unit="m2/s^2" > vtrd_bta * e3v </field>   
     1126     <field id="vtrd_tfr_e3v"       unit="m2/s^2" > vtrd_tfr * e3v </field>   
    11241127     <field id="vtrd_bfr_e3v"       unit="m2/s^2" > vtrd_bfr * e3v </field>   
    1125      <field id="vtrd_bfri_e3v"      unit="m2/s^2" > vtrd_bfri * e3v </field>   
    11261128   </field_group> 
    11271129 
  • NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE/DYN/dynspg_ts.F90

    r14716 r14742  
    178178      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zuwdav2, zvwdav2    ! averages over the sub-steps of zuwdmask and zvwdmask 
    179179      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zspgtrdu, zspgtrdv, zpvotrdu, zpvotrdv  ! SPG and PVO trends (if l_trddyn) 
    180       REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ztautrdu, ztautrdv, zbfrtrdu, zbfrtrdv  ! TAU and BFR trends (if l_trddyn) 
     180      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ztautrdu, ztautrdv, ztfrtrdu, ztfrtrdv  ! TAU and TFR trends (if l_trddyn) 
     181      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zbfrtrdu, zbfrtrdv  ! BFR trends (if l_trddyn) 
    181182      REAL(wp) ::   zt0substep !   Time of day at the beginning of the time substep 
    182183      !!---------------------------------------------------------------------- 
     
    188189      IF( l_trddyn ) THEN 
    189190          ALLOCATE( zspgtrdu(jpi,jpj), zspgtrdv(jpi,jpj), zpvotrdu(jpi,jpj), zpvotrdv(jpi,jpj), & 
    190          &          ztautrdu(jpi,jpj), ztautrdv(jpi,jpj), zbfrtrdu(jpi,jpj), zbfrtrdv(jpi,jpj) ) 
     191         &          ztautrdu(jpi,jpj), ztautrdv(jpi,jpj), ztfrtrdu(jpi,jpj), ztfrtrdv(jpi,jpj), & 
     192         &          zbfrtrdu(jpi,jpj), zbfrtrdv(jpi,jpj) ) 
    191193          zspgtrdu(:,:) = 0._wp 
    192194          zspgtrdv(:,:) = 0._wp 
     
    195197          ztautrdu(:,:) = 0._wp 
    196198          ztautrdv(:,:) = 0._wp 
     199          ztfrtrdu(:,:) = 0._wp 
     200          ztfrtrdv(:,:) = 0._wp 
    197201          zbfrtrdu(:,:) = 0._wp 
    198202          zbfrtrdv(:,:) = 0._wp 
     
    303307            zCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) 
    304308         END_2D 
    305       ELSE                !* remove baroclinic drag AND provide the barotropic drag coefficients 
     309      ELSE             !* add baroclinic drag AND provide the barotropic drag coefficients 
    306310         IF( l_trddyn ) THEN 
    307             zbfrtrdu(:,:) = zu_frc(:,:) 
    308             zbfrtrdv(:,:) = zv_frc(:,:) 
    309          ENDIF 
    310          ! 
    311          CALL dyn_drg_init( Kbb, Kmm, puu, pvv, puu_b, pvv_b, zu_frc, zv_frc, zCdU_u, zCdU_v ) 
    312          ! 
    313          IF( l_trddyn ) THEN 
    314             ! bottom friction trend diagnostic: bottom friction due to baroclinic currents 
    315             zbfrtrdu(:,:) = zu_frc(:,:) - zbfrtrdu(:,:) 
    316             zbfrtrdv(:,:) = zv_frc(:,:) - zbfrtrdv(:,:)  
     311            ! 
     312            CALL dyn_drg_init( Kbb, Kmm, puu, pvv, puu_b, pvv_b, zu_frc, zv_frc, zCdU_u, zCdU_v,  & 
     313                 &             ztfrtrdu, ztfrtrdv, zbfrtrdu, zbfrtrdv ) 
     314            ! 
     315         ELSE 
     316            ! 
     317            CALL dyn_drg_init( Kbb, Kmm, puu, pvv, puu_b, pvv_b, zu_frc, zv_frc, zCdU_u, zCdU_v ) 
     318            ! 
    317319         ENDIF 
    318320      ENDIF 
     
    667669            IF( l_trddyn ) THEN 
    668670               za2 = wgtbtp2(jn) 
    669                zbfrtrdu(:,:) = zbfrtrdu(:,:) + za2 * zCdU_u(:,:) * un_e(:,:) * hur_e(:,:) 
    670                zbfrtrdv(:,:) = zbfrtrdv(:,:) + za2 * zCdU_v(:,:) * vn_e(:,:) * hvr_e(:,:) 
     671               IF( ln_isfcav.OR.ln_drgice_imp ) THEN          ! top+bottom friction (ocean cavities) 
     672                  DO_2D( 0, 0, 0, 0 ) 
     673                     ztfrtrdu(ji,jj) = ztfrtrdu(ji,jj) + za2 * 0.5_wp*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj)) * un_e(ji,jj) * hur_e(ji,jj) 
     674                     ztfrtrdv(ji,jj) = ztfrtrdv(ji,jj) + za2 * 0.5_wp*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj)) * vn_e(ji,jj) * hvr_e(ji,jj) 
     675                  END_2D 
     676               ENDIF 
     677               DO_2D( 0, 0, 0, 0 ) 
     678                  zbfrtrdu(ji,jj) = zbfrtrdu(ji,jj) + za2 * 0.5_wp*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj)) * un_e(ji,jj) * hur_e(ji,jj) 
     679                  zbfrtrdv(ji,jj) = zbfrtrdv(ji,jj) + za2 * 0.5_wp*( rCdU_bot(ji+1,jj)+rCdU_bot(ji,jj)) * vn_e(ji,jj) * hvr_e(ji,jj) 
     680               END_2D 
    671681            ENDIF 
    672682         ENDIF 
     
    899909         CALL trd_dyn( zpvotrdu, zpvotrdv, jpdyn_pvo, kt, Kmm ) 
    900910         CALL trd_dyn( ztautrdu, ztautrdv, jpdyn_tau, kt, Kmm ) 
     911         IF( ln_isfcav.OR.ln_drgice_imp ) CALL trd_dyn( ztfrtrdu, ztfrtrdv, jpdyn_tfr, kt, Kmm ) 
    901912         CALL trd_dyn( zbfrtrdu, zbfrtrdv, jpdyn_bfr, kt, Kmm ) 
    902          DEALLOCATE( zspgtrdu, zspgtrdv, zpvotrdu, zpvotrdv, ztautrdu, ztautrdv, zbfrtrdu, zbfrtrdv ) 
     913         DEALLOCATE( zspgtrdu, zspgtrdv, zpvotrdu, zpvotrdv, ztautrdu, ztautrdv, & 
     914        &            ztfrtrdu, ztfrtrdv, zbfrtrdu, zbfrtrdv ) 
    903915      ENDIF 
    904916      ! 
     
    14081420      
    14091421 
    1410    SUBROUTINE dyn_drg_init( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, pu_RHSi, pv_RHSi, pCdU_u, pCdU_v ) 
     1422   SUBROUTINE dyn_drg_init( Kbb, Kmm, puu, pvv, puu_b ,pvv_b, pu_RHSi, pv_RHSi, pCdU_u, pCdU_v, & 
     1423              &             ptfrtrdu, ptfrtrdv, pbfrtrdu, pbfrtrdv ) 
    14111424      !!---------------------------------------------------------------------- 
    14121425      !!                  ***  ROUTINE dyn_drg_init  *** 
     
    14181431      !! ** Method  :   computation done over the INNER domain only  
    14191432      !!---------------------------------------------------------------------- 
    1420       INTEGER                             , INTENT(in   ) ::  Kbb, Kmm           ! ocean time level indices 
    1421       REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(in   ) ::  puu, pvv           ! ocean velocities and RHS of momentum equation 
    1422       REAL(wp), DIMENSION(jpi,jpj,jpt)    , INTENT(in   ) ::  puu_b, pvv_b       ! barotropic velocities at main time levels 
    1423       REAL(wp), DIMENSION(jpi,jpj)        , INTENT(inout) ::  pu_RHSi, pv_RHSi   ! baroclinic part of the barotropic RHS 
    1424       REAL(wp), DIMENSION(jpi,jpj)        , INTENT(  out) ::  pCdU_u , pCdU_v    ! barotropic drag coefficients 
     1433      INTEGER                             , INTENT(in   ) ::  Kbb, Kmm            ! ocean time level indices 
     1434      REAL(wp), DIMENSION(jpi,jpj,jpk,jpt), INTENT(in   ) ::  puu, pvv            ! ocean velocities and RHS of momentum equation 
     1435      REAL(wp), DIMENSION(jpi,jpj,jpt)    , INTENT(in   ) ::  puu_b, pvv_b        ! barotropic velocities at main time levels 
     1436      REAL(wp), DIMENSION(jpi,jpj)        , INTENT(inout) ::  pu_RHSi, pv_RHSi    ! baroclinic part of the barotropic RHS 
     1437      REAL(wp), DIMENSION(jpi,jpj)        , INTENT(  out) ::  pCdU_u , pCdU_v     ! barotropic drag coefficients 
     1438      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout), OPTIONAL :: ptfrtrdu, ptfrtrdv ! top friction trends 
     1439      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout), OPTIONAL :: pbfrtrdu, pbfrtrdv ! bottom friction trends 
    14251440      ! 
    14261441      INTEGER  ::   ji, jj   ! dummy loop indices 
     
    14431458            pCdU_v(ji,jj) = r1_2*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) 
    14441459         END_2D 
     1460      ENDIF 
     1461      ! 
     1462      IF( l_trddyn ) THEN 
     1463           pbfrtrdu(:,:) = pu_RHSi(:,:) 
     1464           pbfrtrdv(:,:) = pv_RHSi(:,:) 
    14451465      ENDIF 
    14461466      ! 
     
    14811501      END IF 
    14821502      ! 
     1503      IF( l_trddyn ) THEN 
     1504         pbfrtrdu(:,:) = pu_RHSi(:,:) - pbfrtrdu(:,:)  
     1505         pbfrtrdv(:,:) = pv_RHSi(:,:) - pbfrtrdv(:,:)  
     1506      ENDIF 
     1507      ! 
    14831508      !                    !==  TOP stress contribution from baroclinic velocities  ==!   (no W/D case) 
    14841509      ! 
    14851510      IF( ln_isfcav.OR.ln_drgice_imp ) THEN 
     1511         ! 
     1512         IF( l_trddyn ) THEN 
     1513            ptfrtrdu(:,:) = pu_RHSi(:,:) 
     1514            ptfrtrdv(:,:) = pv_RHSi(:,:) 
     1515         ENDIF 
    14861516         ! 
    14871517         IF( ln_bt_fw ) THEN                ! FORWARD integration: use NOW top baroclinic velocity 
     
    15091539            pv_RHSi(ji,jj) = pv_RHSi(ji,jj) + r1_hv(ji,jj,Kmm) * r1_2*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * zv_i(ji,jj) 
    15101540         END_2D 
     1541         ! 
     1542         IF( l_trddyn ) THEN 
     1543            ptfrtrdu(:,:) = pu_RHSi(:,:) - ptfrtrdu(:,:)  
     1544            ptfrtrdv(:,:) = pv_RHSi(:,:) - ptfrtrdv(:,:) 
     1545         ENDIF 
    15111546         ! 
    15121547      ENDIF 
  • NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE/DYN/dynzdf.F90

    r14725 r14742  
    8080      REAL(wp) ::   zWus, zWvs         !   -      - 
    8181      REAL(wp), DIMENSION(jpi,jpj,jpk)        ::  zwi, zwd, zws   ! 3D workspace  
    82       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdu, ztrdv   !  -      - 
     82      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdu, ztrdv, ztrdu_fr, ztrdv_fr   !  -      - 
    8383      !!--------------------------------------------------------------------- 
    8484      ! 
     
    115115         END_3D 
    116116      ENDIF 
     117      ! 
     118      IF( l_trddyn )   THEN         !* temporary save of provisional "after" velocities 
     119         ALLOCATE( ztrdu(jpi,jpj,jpk), ztrdv(jpi,jpj,jpk) )  
     120         ztrdu(:,:,:) = puu(:,:,:,Kaa) 
     121         ztrdv(:,:,:) = pvv(:,:,:,Kaa) 
     122      ENDIF 
     123      ! 
    117124      !                    ! add top/bottom friction  
    118125      !     With split-explicit free surface, barotropic stress is treated explicitly Update velocities at the bottom. 
     
    126133         END_3D 
    127134         IF( l_trddyn )   THEN         !* temporary save of ta and sa trends 
    128             ALLOCATE( ztrdu(jpi,jpj,jpk), ztrdv(jpi,jpj,jpk) )  
    129             ztrdu(:,:,:) = puu(:,:,:,Kaa) 
    130             ztrdv(:,:,:) = pvv(:,:,:,Kaa) 
     135            ALLOCATE( ztrdu_fr(jpi,jpj,jpk), ztrdv_fr(jpi,jpj,jpk) )  
     136            ztrdu_fr(:,:,:) = puu(:,:,:,Kaa) 
     137            ztrdv_fr(:,:,:) = pvv(:,:,:,Kaa) 
    131138         ENDIF 
    132139         DO_2D( 0, 0, 0, 0 )      ! Add bottom/top stress due to barotropic component only 
     
    140147            pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + rDt * 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va 
    141148         END_2D 
    142          IF( l_trddyn )   THEN                      ! save explicit part of bottom friction trends 
    143             ztrdu(:,:,:) = ( puu(:,:,:,Kaa) - ztrdu(:,:,:) ) / rDt  
    144             ztrdv(:,:,:) = ( pvv(:,:,:,Kaa) - ztrdv(:,:,:) ) / rDt  
    145             CALL trd_dyn( ztrdu, ztrdv, jpdyn_bfr, kt, Kmm, Kaa ) 
     149         IF( l_trddyn )   THEN                      ! save baroclinic bottom friction trends due to barotropic currents 
     150            ztrdu_fr(:,:,:) = ( puu(:,:,:,Kaa) - ztrdu_fr(:,:,:) ) / rDt  
     151            ztrdv_fr(:,:,:) = ( pvv(:,:,:,Kaa) - ztrdv_fr(:,:,:) ) / rDt  
     152            CALL trd_dyn( ztrdu_fr, ztrdv_fr, jpdyn_bfre_bt, kt, Kmm, Kaa ) 
    146153         ENDIF 
    147154         IF( ln_isfcav.OR.ln_drgice_imp ) THEN    ! Ocean cavities (ISF) 
     155            IF( l_trddyn )   THEN         !* temporary save of ta and sa trends 
     156               ztrdu_fr(:,:,:) = puu(:,:,:,Kaa) 
     157               ztrdv_fr(:,:,:) = pvv(:,:,:,Kaa) 
     158            ENDIF 
    148159            DO_2D( 0, 0, 0, 0 ) 
    149160               iku = miku(ji,jj)         ! top ocean level at u- and v-points  
     
    156167               pvv(ji,jj,ikv,Kaa) = pvv(ji,jj,ikv,Kaa) + rDt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * vv_b(ji,jj,Kaa) / ze3va 
    157168            END_2D 
     169            IF( l_trddyn )   THEN                      ! save baroclinic top friction trends due to barotropic currents 
     170               ztrdu_fr(:,:,:) = ( puu(:,:,:,Kaa) - ztrdu_fr(:,:,:) ) / rDt  
     171               ztrdv_fr(:,:,:) = ( pvv(:,:,:,Kaa) - ztrdv_fr(:,:,:) ) / rDt  
     172               CALL trd_dyn( ztrdu_fr, ztrdv_fr, jpdyn_tfre_bt, kt, Kmm, Kaa ) 
     173            ENDIF 
    158174         END IF 
    159       ENDIF 
    160       ! 
    161       IF( l_trddyn )   THEN         !* temporary save of ta and sa trends 
    162          IF( .NOT. ALLOCATED(ztrdu) ) ALLOCATE( ztrdu(jpi,jpj,jpk), ztrdv(jpi,jpj,jpk) )  
    163          ztrdu(:,:,:) = puu(:,:,:,Kaa) 
    164          ztrdv(:,:,:) = pvv(:,:,:,Kaa) 
    165175      ENDIF 
    166176      ! 
     
    442452      ! 
    443453      IF( l_trddyn )   THEN                      ! save the vertical diffusive trends for further diagnostics 
     454         ! 
     455         IF( ln_drgimp ) THEN 
     456            ztrdu_fr(:,:,:) = 0._wp    ;   ztrdv_fr(:,:,:) = 0._wp 
     457            DO_2D( 0, 0, 0, 0 ) 
     458               iku = mbku(ji,jj)          ! deepest ocean u- & v-levels 
     459               ikv = mbkv(ji,jj) 
     460               ztrdu_fr(ji,jj,iku) = 0.5 * ( rCdU_bot(ji+1,jj) + rCdU_bot(ji,jj) )  &  
     461     &                         * puu(ji,jj,iku,Kmm) / e3u(ji,jj,iku,Kmm) 
     462               ztrdv_fr(ji,jj,ikv) = 0.5 * ( rCdU_bot(ji,jj+1) + rCdU_bot(ji,jj) )  & 
     463     &                         * pvv(ji,jj,ikv,Kmm) / e3v(ji,jj,ikv,Kmm) 
     464            END_2D 
     465            CALL trd_dyn( ztrdu_fr, ztrdv_fr, jpdyn_bfri, kt, Kmm ) 
     466            IF( ln_isfcav.OR.ln_drgice_imp ) THEN    ! Ocean cavities (ISF) or implicit ice-ocean drag 
     467               ztrdu_fr(:,:,:) = 0._wp    ;   ztrdv_fr(:,:,:) = 0._wp 
     468               DO_2D( 0, 0, 0, 0 ) 
     469                  iku = miku(ji,jj)       ! ocean top level at u-points  
     470                  ikv = mikv(ji,jj)       ! ocean top level at v-points  
     471                  ztrdu_fr(ji,jj,iku) = 0.5 * ( rCdU_top(ji+1,jj) + rCdU_top(ji,jj) )  &  
     472                    &                         * puu(ji,jj,iku,Kmm) / e3u(ji,jj,iku,Kmm) 
     473                  ztrdv_fr(ji,jj,ikv) = 0.5 * ( rCdU_top(ji,jj+1) + rCdU_top(ji,jj) )  & 
     474                    &                         * pvv(ji,jj,ikv,Kmm) / e3v(ji,jj,ikv,Kmm) 
     475               END_2D 
     476               CALL trd_dyn( ztrdu_fr, ztrdv_fr, jpdyn_tfri, kt, Kmm ) 
     477            ENDIF 
     478         ENDIF 
     479         ! 
    444480         ztrdu(:,:,:) = ( puu(:,:,:,Kaa) - ztrdu(:,:,:) ) / rDt  
    445481         ztrdv(:,:,:) = ( pvv(:,:,:,Kaa) - ztrdv(:,:,:) ) / rDt 
    446482         CALL trd_dyn( ztrdu, ztrdv, jpdyn_zdf, kt, Kmm, Kaa ) 
    447483         ! 
    448          IF( ln_drgimp ) THEN 
    449             ztrdu(:,:,:) = 0._wp    ;   ztrdv(:,:,:) = 0._wp 
    450             DO_2D( 0, 0, 0, 0 ) 
    451                ikbu = mbku(ji,jj)          ! deepest ocean u- & v-levels 
    452                ikbv = mbkv(ji,jj) 
    453                ztrdu(ji,jj,ikbu) = 0.5 * ( rCdU_bot(ji+1,jj) + rCdU_bot(ji,jj) )  &  
    454      &                         * puu(ji,jj,ikbu,Kmm) / e3u(ji,jj,ikbu,Kmm) 
    455                ztrdv(ji,jj,ikbv) = 0.5 * ( rCdU_bot(ji,jj+1) + rCdU_bot(ji,jj) )  & 
    456      &                         * pvv(ji,jj,ikbv,Kmm) / e3v(ji,jj,ikbv,Kmm) 
    457             END_2D 
    458             CALL trd_dyn( ztrdu, ztrdv, jpdyn_bfri, kt, Kmm ) 
    459          ENDIF 
    460          ! 
    461          DEALLOCATE( ztrdu, ztrdv )  
     484         DEALLOCATE( ztrdu, ztrdv, ztrdu_fr, ztrdv_fr )  
    462485      ENDIF 
    463486      !                                          ! print mean trends (used for debugging) 
  • NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE/TRD/trd_oce.F90

    r14701 r14742  
    6060   ! 
    6161   !                                                  !!!* Momentum trends indices 
    62    INTEGER, PUBLIC, PARAMETER ::   jptot_dyn  = 17     !: Total trend nb: change it when adding/removing one indice below 
     62   INTEGER, PUBLIC, PARAMETER ::   jptot_dyn  = 21     !: Total trend nb: change it when adding/removing one indice below 
    6363   !                               ===============     !   
    6464   INTEGER, PUBLIC, PARAMETER ::   jpdyn_hpg   =  1     !: hydrostatic pressure gradient  
    6565   INTEGER, PUBLIC, PARAMETER ::   jpdyn_hpg_save =  2  !: hydrostatic pressure gradient (saved value) 
    66    INTEGER, PUBLIC, PARAMETER ::   jpdyn_hpg_corr =  3  !: hydrostatic pressure gradient (initial correction) 
    67    INTEGER, PUBLIC, PARAMETER ::   jpdyn_spg   =  4     !: surface     pressure gradient 
    68    INTEGER, PUBLIC, PARAMETER ::   jpdyn_keg   =  5     !: kinetic energy gradient  or horizontal advection 
    69    INTEGER, PUBLIC, PARAMETER ::   jpdyn_rvo   =  6     !: relative  vorticity      or metric term 
    70    INTEGER, PUBLIC, PARAMETER ::   jpdyn_pvo   =  7     !: planetary vorticity 
    71    INTEGER, PUBLIC, PARAMETER ::   jpdyn_pvo_save =  8  !: planetary vorticity (saved value) 
    72    INTEGER, PUBLIC, PARAMETER ::   jpdyn_pvo_corr =  9  !: planetary vorticity (initial correction) 
    73    INTEGER, PUBLIC, PARAMETER ::   jpdyn_zad   = 10     !: vertical advection 
    74    INTEGER, PUBLIC, PARAMETER ::   jpdyn_ldf   = 11     !: horizontal diffusion    
    75    INTEGER, PUBLIC, PARAMETER ::   jpdyn_zdf   = 12     !: vertical   diffusion 
    76    INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfr   = 13     !: bottom  stress  
     66   INTEGER, PUBLIC, PARAMETER ::   jpdyn_spg   =  3     !: surface     pressure gradient 
     67   INTEGER, PUBLIC, PARAMETER ::   jpdyn_keg   =  4     !: kinetic energy gradient  or horizontal advection 
     68   INTEGER, PUBLIC, PARAMETER ::   jpdyn_rvo   =  5     !: relative  vorticity      or metric term 
     69   INTEGER, PUBLIC, PARAMETER ::   jpdyn_pvo   =  6     !: planetary vorticity 
     70   INTEGER, PUBLIC, PARAMETER ::   jpdyn_pvo_save =  7  !: planetary vorticity (saved value) 
     71   INTEGER, PUBLIC, PARAMETER ::   jpdyn_pvo_corr =  8  !: planetary vorticity (initial correction) 
     72   INTEGER, PUBLIC, PARAMETER ::   jpdyn_zad   = 9      !: vertical advection 
     73   INTEGER, PUBLIC, PARAMETER ::   jpdyn_ldf   = 10     !: horizontal diffusion    
     74   INTEGER, PUBLIC, PARAMETER ::   jpdyn_zdf   = 11     !: vertical   diffusion 
     75   INTEGER, PUBLIC, PARAMETER ::   jpdyn_tfr   = 12     !: total top friction (cavities and ice-ocean drag if ln_drgice_imp=T)  
     76   INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfr   = 13     !: total bottom  friction  
    7777   INTEGER, PUBLIC, PARAMETER ::   jpdyn_atf   = 14     !: Asselin time filter 
    78    INTEGER, PUBLIC, PARAMETER ::   jpdyn_tau   = 15     !: surface stress 
    79    INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfri  = 16     !: implicit bottom friction (ln_drgimp=.TRUE.) 
    80    INTEGER, PUBLIC, PARAMETER ::   jpdyn_ken   = 17     !: use for calculation of KE 
     78   INTEGER, PUBLIC, PARAMETER ::   jpdyn_tau   = 15     !: wind stress (= ice-ocean drag under ice if ln_drgice_imp=F)  
     79   INTEGER, PUBLIC, PARAMETER ::   jpdyn_tfre_bt  = 16  !: top friction due to barotropic currents for baroclinic trend (ln_dynspg_ts=.TRUE.) 
     80   INTEGER, PUBLIC, PARAMETER ::   jpdyn_tfri  = 17     !: implicit top friction for baroclinic trend  
     81   INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfre  = 18     !: explicit bottom friction for baroclinic trend (ln_drgimp=.FALSE.) 
     82   INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfre_bt  = 19  !: bottom friction due to barotropic currents for baroclinic trend (ln_dynspg_ts=.TRUE.) 
     83   INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfri  = 20     !: implicit bottom friction for baroclinic trend (ln_drgimp=.TRUE.) 
     84   INTEGER, PUBLIC, PARAMETER ::   jpdyn_ken   = 21     !: use for calculation of KE 
    8185   ! 
    8286   !!---------------------------------------------------------------------- 
  • NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE/TRD/trddyn.F90

    r14716 r14742  
    4040   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: zutrd_hpg, zvtrd_hpg 
    4141   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: zutrd_pvo, zvtrd_pvo 
     42   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: zutrd_tfr, zvtrd_tfr 
    4243   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:), SAVE :: zutrd_bfr, zvtrd_bfr 
    4344   REAL(wp), ALLOCATABLE, DIMENSION(:,:)  , SAVE :: zutrd_tau, zvtrd_tau 
     45   REAL(wp), ALLOCATABLE, DIMENSION(:,:)  , SAVE :: zutrd_tfr2d, zvtrd_tfr2d 
     46   REAL(wp), ALLOCATABLE, DIMENSION(:,:)  , SAVE :: zutrd_bfr2d, zvtrd_bfr2d 
    4447 
    4548   !! * Substitutions 
     
    99102         DEALLOCATE( zutrd_hpg, zvtrd_hpg ) 
    100103 
    101       CASE( jpdyn_bfr ) 
    102          ! 
    103          ! Add 3D part of BFR trend minus its depth-mean part to depth-mean trend already saved. 
    104          ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 
    105          zue(:,:) = e3u(:,:,1,Kaa) * putrd(:,:,1) * umask(:,:,1) 
    106          zve(:,:) = e3v(:,:,1,Kaa) * pvtrd(:,:,1) * vmask(:,:,1) 
    107          DO jk = 2, jpkm1 
    108             zue(:,:) = zue(:,:) + e3u(:,:,jk,Kaa) * putrd(:,:,jk) * umask(:,:,jk) 
    109             zve(:,:) = zve(:,:) + e3v(:,:,jk,Kaa) * pvtrd(:,:,jk) * vmask(:,:,jk) 
    110          END DO 
    111          DO jk = 1, jpkm1 
    112             putrd(:,:,jk) = zutrd_bfr(:,:,jk) + putrd(:,:,jk) - zue(:,:) * r1_hu(:,:,Kaa) 
    113             pvtrd(:,:,jk) = zvtrd_bfr(:,:,jk) + pvtrd(:,:,jk) - zve(:,:) * r1_hv(:,:,Kaa) 
    114          END DO 
    115          ! Update locally saved BFR trends to add to ZDF trend. 
    116          zutrd_bfr(:,:,:) = putrd(:,:,:)  
    117          zvtrd_bfr(:,:,:) = pvtrd(:,:,:) 
     104      CASE( jpdyn_tfre_bt, jpdyn_tfri ) 
     105         ! 
     106         ! Add various top friction terms for baroclinic trend to saved quantity. 
     107         ! Any barotropic component removed later when TFR diagnostic finalised (on ZDF call). 
     108         IF( .NOT. ALLOCATED(zutrd_tfr) ) THEN  
     109            ALLOCATE( zutrd_tfr(jpi,jpj,jpk), zvtrd_tfr(jpi,jpj,jpk) ) 
     110            zutrd_tfr(:,:,:) = 0.0 
     111            zvtrd_tfr(:,:,:) = 0.0 
     112         ENDIF 
     113         zutrd_tfr(:,:,:) = zutrd_tfr(:,:,:) + putrd(:,:,:)  
     114         zvtrd_tfr(:,:,:) = zvtrd_tfr(:,:,:) + pvtrd(:,:,:) 
     115 
     116      CASE( jpdyn_bfre, jpdyn_bfre_bt, jpdyn_bfri ) 
     117         ! 
     118         ! Add various bottom friction terms for baroclinic trend to saved quantity. 
     119         ! Any barotropic component removed later when BFR diagnostic finalised (on ZDF call). 
     120         IF( .NOT. ALLOCATED(zutrd_bfr) ) THEN  
     121            ALLOCATE( zutrd_bfr(jpi,jpj,jpk), zvtrd_bfr(jpi,jpj,jpk) ) 
     122            zutrd_bfr(:,:,:) = 0.0 
     123            zvtrd_bfr(:,:,:) = 0.0 
     124         ENDIF 
     125         zutrd_bfr(:,:,:) = zutrd_bfr(:,:,:) + putrd(:,:,:)  
     126         zvtrd_bfr(:,:,:) = zvtrd_bfr(:,:,:) + pvtrd(:,:,:) 
    118127 
    119128      CASE( jpdyn_zdf )  
    120          ! ZDF trend: Remove barotropic component and add wind stress and bottom friction 
    121          !            trends from dynspg_ts. Also adding on the bottom stress for the  
    122          !            baroclinic solution in the case of explicit bottom friction.  
    123          ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 
    124          zue(:,:) = e3u(:,:,1,Kaa) * putrd(:,:,1) * umask(:,:,1) 
    125          zve(:,:) = e3v(:,:,1,Kaa) * pvtrd(:,:,1) * vmask(:,:,1) 
    126          DO jk = 2, jpkm1 
    127             zue(:,:) = zue(:,:) + e3u(:,:,jk,Kaa) * putrd(:,:,jk) * umask(:,:,jk) 
    128             zve(:,:) = zve(:,:) + e3v(:,:,jk,Kaa) * pvtrd(:,:,jk) * vmask(:,:,jk) 
    129          END DO 
    130          DO jk = 1, jpkm1 
    131             putrd(:,:,jk) = zutrd_tau(:,:) + zutrd_bfr(:,:,jk) + putrd(:,:,jk) - zue(:,:) * r1_hu(:,:,Kaa) 
    132             pvtrd(:,:,jk) = zvtrd_tau(:,:) + zvtrd_bfr(:,:,jk) + pvtrd(:,:,jk) - zve(:,:) * r1_hv(:,:,Kaa) 
    133          END DO 
    134          DEALLOCATE( zue, zve, zutrd_tau, zvtrd_tau, zutrd_bfr, zvtrd_bfr ) 
    135  
     129         ! ZDF trend: If ln_dynspg_ts, remove barotropic component and add wind stress, and top and bottom friction 
     130         !            trends from dynspg_ts. Otherwise just output trend in call to trd_dyn_iom_3d below. 
     131         ! Also finalise TFR and BFR trends.  
     132         ! 
     133         IF( ln_dynspg_ts ) THEN 
     134            ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 
     135            zue(:,:) = e3u(:,:,1,Kaa) * putrd(:,:,1) * umask(:,:,1) 
     136            zve(:,:) = e3v(:,:,1,Kaa) * pvtrd(:,:,1) * vmask(:,:,1) 
     137            DO jk = 2, jpkm1 
     138               zue(:,:) = zue(:,:) + e3u(:,:,jk,Kaa) * putrd(:,:,jk) * umask(:,:,jk) 
     139               zve(:,:) = zve(:,:) + e3v(:,:,jk,Kaa) * pvtrd(:,:,jk) * vmask(:,:,jk) 
     140            END DO 
     141            IF( ALLOCATED( zutrd_tfr2d ) ) THEN 
     142               DO jk = 1, jpkm1 
     143                  putrd(:,:,jk) = ( zutrd_tau(:,:) + zutrd_tfr2d(:,:) + zutrd_bfr2d(:,:) + putrd(:,:,jk) - zue(:,:) * r1_hu(:,:,Kaa) ) * umask(:,:,jk) 
     144                  pvtrd(:,:,jk) = ( zvtrd_tau(:,:) + zvtrd_tfr2d(:,:) + zvtrd_bfr2d(:,:) + pvtrd(:,:,jk) - zve(:,:) * r1_hv(:,:,Kaa) ) * vmask(:,:,jk) 
     145               END DO 
     146            ELSE 
     147               DO jk = 1, jpkm1 
     148                  putrd(:,:,jk) = ( zutrd_tau(:,:) + zutrd_bfr2d(:,:) + putrd(:,:,jk) - zue(:,:) * r1_hu(:,:,Kaa) ) * umask(:,:,jk) 
     149                  pvtrd(:,:,jk) = ( zvtrd_tau(:,:) + zvtrd_bfr2d(:,:) + pvtrd(:,:,jk) - zve(:,:) * r1_hv(:,:,Kaa) ) * vmask(:,:,jk) 
     150               END DO 
     151            ENDIF 
     152            ! 
     153            IF( ALLOCATED( zutrd_tfr ) ) THEN 
     154               ! Finalise total top friction trend : remove any barotropic component from baroclinic trends 
     155               ! and add bfr2d trend 
     156               zue(:,:) = e3u(:,:,1,Kaa) * zutrd_tfr(:,:,1) * umask(:,:,1) 
     157               zve(:,:) = e3v(:,:,1,Kaa) * zvtrd_tfr(:,:,1) * vmask(:,:,1) 
     158               DO jk = 2, jpkm1 
     159                  zue(:,:) = zue(:,:) + e3u(:,:,jk,Kaa) * zutrd_tfr(:,:,jk) * umask(:,:,jk) 
     160                  zve(:,:) = zve(:,:) + e3v(:,:,jk,Kaa) * zvtrd_tfr(:,:,jk) * vmask(:,:,jk) 
     161               END DO 
     162               DO jk = 1, jpkm1 
     163                  zutrd_tfr(:,:,jk) = ( zutrd_tfr2d(:,:) + zutrd_tfr(:,:,jk) - zue(:,:) * r1_hu(:,:,Kaa) ) * umask(:,:,jk) 
     164                  zvtrd_tfr(:,:,jk) = ( zvtrd_tfr2d(:,:) + zvtrd_tfr(:,:,jk) - zve(:,:) * r1_hv(:,:,Kaa) ) * vmask(:,:,jk) 
     165               END DO 
     166               DEALLOCATE( zutrd_tfr2d, zvtrd_tfr2d ) 
     167            ENDIF 
     168            ! 
     169            ! Finalise total bottom friction trend : remove any barotropic component from baroclinic trends 
     170            ! and add bfr2d trend 
     171            zue(:,:) = e3u(:,:,1,Kaa) * zutrd_bfr(:,:,1) * umask(:,:,1) 
     172            zve(:,:) = e3v(:,:,1,Kaa) * zvtrd_bfr(:,:,1) * vmask(:,:,1) 
     173            DO jk = 2, jpkm1 
     174               zue(:,:) = zue(:,:) + e3u(:,:,jk,Kaa) * zutrd_bfr(:,:,jk) * umask(:,:,jk) 
     175               zve(:,:) = zve(:,:) + e3v(:,:,jk,Kaa) * zvtrd_bfr(:,:,jk) * vmask(:,:,jk) 
     176            END DO 
     177            DO jk = 1, jpkm1 
     178               zutrd_bfr(:,:,jk) = ( zutrd_bfr2d(:,:) + zutrd_bfr(:,:,jk) - zue(:,:) * r1_hu(:,:,Kaa) ) * umask(:,:,jk) 
     179               zvtrd_bfr(:,:,jk) = ( zvtrd_bfr2d(:,:) + zvtrd_bfr(:,:,jk) - zve(:,:) * r1_hv(:,:,Kaa) ) * vmask(:,:,jk) 
     180            END DO 
     181            !          
     182            DEALLOCATE( zue, zve, zutrd_tau, zvtrd_tau, zutrd_bfr2d, zvtrd_bfr2d ) 
     183         ENDIF 
     184         ! Write out total top and bottom friction trends. 
     185         IF( ALLOCATED( zutrd_tfr ) ) THEN 
     186 
     187            CALL trd_dyn_iom_3d( zutrd_tfr, zvtrd_tfr, jpdyn_tfr, kt, Kmm ) 
     188            DEALLOCATE( zutrd_tfr, zvtrd_tfr ) 
     189         ENDIF 
     190         CALL trd_dyn_iom_3d( zutrd_bfr, zvtrd_bfr, jpdyn_bfr, kt, Kmm ) 
     191         DEALLOCATE( zutrd_bfr, zvtrd_bfr ) 
     192         
    136193      END SELECT 
    137194 
    138       IF ( ktrd /= jpdyn_pvo_save ) THEN 
     195      IF ( ktrd /= jpdyn_pvo_save .and. ktrd /= jpdyn_bfre .and. ktrd /= jpdyn_bfre_bt .and. ktrd /= jpdyn_bfri ) THEN 
    139196         ! 
    140197         !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     
    229286          zvtrd_tau(:,:) = pvtrd(:,:) 
    230287 
     288      CASE( jpdyn_tfr ) 
     289          ! 
     290          ! Save 2D field to add to ZDF trend (and also output 2D field as diagnostic in own right below). 
     291          ALLOCATE( zutrd_tfr2d(jpi,jpj), zvtrd_tfr2d(jpi,jpj) ) 
     292          zutrd_tfr2d(:,:) = putrd(:,:) 
     293          zvtrd_tfr2d(:,:) = pvtrd(:,:) 
     294 
    231295      CASE( jpdyn_bfr ) 
    232296          ! 
    233           ! Create 3D BFR trend from 2D field and also output 2D field as diagnostic in own right. 
    234           ALLOCATE( zutrd_bfr(jpi,jpj,jpk), zvtrd_bfr(jpi,jpj,jpk) ) 
    235           zutrd_bfr(:,:,:) = 0.0 
    236           zvtrd_bfr(:,:,:) = 0.0 
    237           DO jk = 1, jpkm1 
    238              zutrd_bfr(:,:,jk) = putrd(:,:) * umask(:,:,jk) 
    239              zvtrd_bfr(:,:,jk) = pvtrd(:,:) * vmask(:,:,jk) 
    240           ENDDO 
     297          ! Save 2D field to add to ZDF trend (and also output 2D field as diagnostic in own right below). 
     298          ALLOCATE( zutrd_bfr2d(jpi,jpj), zvtrd_bfr2d(jpi,jpj) ) 
     299          zutrd_bfr2d(:,:) = putrd(:,:) 
     300          zvtrd_bfr2d(:,:) = pvtrd(:,:) 
    241301 
    242302      END SELECT 
     
    323383                              CALL iom_put( "vtrd_tau", z2dy ) 
    324384                              DEALLOCATE( z2dx , z2dy ) 
    325       CASE( jpdyn_bfr )   ;   CALL iom_put( "utrd_bfr", putrd )    ! bottom friction (explicit case) 
     385      CASE( jpdyn_bfr )   ;   CALL iom_put( "utrd_bfr", putrd )    ! total bottom friction 
    326386                              CALL iom_put( "vtrd_bfr", pvtrd ) 
    327       CASE( jpdyn_bfri)   ;   CALL iom_put( "utrd_bfri", putrd )    ! bottom friction (implicit case) 
    328                               CALL iom_put( "vtrd_bfri", pvtrd ) 
    329387      CASE( jpdyn_atf )   ;   CALL iom_put( "utrd_atf", putrd )        ! asselin filter trends  
    330388                              CALL iom_put( "vtrd_atf", pvtrd ) 
     
    355413      CASE( jpdyn_pvo )      ;   CALL iom_put( "utrd_pvo2d", putrd )      ! planetary vorticity (barotropic part) 
    356414                                 CALL iom_put( "vtrd_pvo2d", pvtrd ) 
    357       CASE( jpdyn_hpg_corr ) ;   CALL iom_put( "utrd_hpg_corr", putrd )   ! horizontal pressure gradient correction 
    358                                  CALL iom_put( "vtrd_hpg_corr", pvtrd ) 
    359415      CASE( jpdyn_pvo_corr ) ;   CALL iom_put( "utrd_pvo_corr", putrd )   ! planetary vorticity correction 
    360416                                 CALL iom_put( "vtrd_pvo_corr", pvtrd ) 
    361       CASE( jpdyn_bfr )      ;   CALL iom_put( "utrd_bfr2d", putrd )      ! bottom friction due to barotropic currents 
     417      CASE( jpdyn_tfr )      ;   CALL iom_put( "utrd_tfr2d", putrd )      ! top friction trend for barotropic currents 
     418                                 CALL iom_put( "vtrd_tfr2d", pvtrd ) 
     419      CASE( jpdyn_bfr )      ;   CALL iom_put( "utrd_bfr2d", putrd )      ! bottom friction trend for barotropic currents 
    362420                                 CALL iom_put( "vtrd_bfr2d", pvtrd ) 
    363421      END SELECT 
  • NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE/ZDF/zdfdrg.F90

    r14716 r14742  
    205205         ztrdu(:,:,:) = pua(:,:,:) - ztrdu(:,:,:) 
    206206         ztrdv(:,:,:) = pva(:,:,:) - ztrdv(:,:,:) 
    207          CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfr, kt, Kmm, Kaa ) 
     207         CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfre, kt, Kmm, Kaa ) 
    208208         DEALLOCATE( ztrdu, ztrdv ) 
    209209      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.