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 15168 – NEMO

Changeset 15168


Ignore:
Timestamp:
2021-08-03T16:15:46+02:00 (3 years ago)
Author:
davestorkey
Message:

UKMO/NEMO_4.0.4_momentum_trends: Introduce top friction trends (ice shelf cavities
and implicit ice-ocean drag) and reorganise bottom friction trend diagnostic.
In this version there are tfr2d, bfr2d diagnostics which are the accelerations of
the barotropic flow due to top and bottom friction, and tfr, bfr diagnostics which
are the acceleration of the baroclinic flow due to top and bottom friction (implicit
or explicit).

Location:
NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends/cfgs/SHARED/field_def_nemo-oce.xml

    r15154 r15168  
    851851     <field id="utrd_ldf"       long_name="i-trend: lateral   diffusion"                    unit="m/s^2"                        /> 
    852852     <field id="utrd_zdf"       long_name="i-trend: vertical  diffusion"                    unit="m/s^2"                        /> 
    853      <field id="utrd_tau"       long_name="i-trend: wind stress "                           unit="m/s^2"   grid_ref="grid_U_2D" /> 
    854      <field id="utrd_bfr"       long_name="i-trend: bottom friction (explicit)"             unit="m/s^2"                        />    
    855      <field id="utrd_bfri"      long_name="i-trend: bottom friction (implicit)"             unit="m/s^2"                        />    
    856      <field id="utrd_bfr2d"     long_name="i-trend: bottom friction: 2D component"      unit="m/s^2"    grid_ref="grid_U_2D" /> 
     853     <field id="utrd_tau"       long_name="i-trend: wind stress in top layer "              unit="m/s^2"   grid_ref="grid_U_2D" /> 
     854     <field id="utrd_tau2d"     long_name="i-trend: wind stress: 2D component "             unit="m/s^2"   grid_ref="grid_U_2D" /> 
     855     <field id="utrd_bfr"       long_name="i-trend: bottom friction (3D) in bottom layer"   unit="m/s^2"                        />    
     856     <field id="utrd_bfr2d"     long_name="i-trend: bottom friction: 2D component"          unit="m/s^2"    grid_ref="grid_U_2D" /> 
     857     <field id="utrd_tfr"       long_name="i-trend: top friction (3D) in top layer"         unit="m/s^2"                        />    
     858     <field id="utrd_tfr2d"     long_name="i-trend: top friction: 2D component"             unit="m/s^2"    grid_ref="grid_U_2D" /> 
    857859     <field id="utrd_tot"       long_name="i-trend: total momentum trend before atf"        unit="m/s^2"                        />    
    858860     <field id="utrd_atf"       long_name="i-trend: asselin time filter trend"              unit="m/s^2"                        />    
     
    871873     <field id="utrd_bta_e3u"       unit="m2/s^2" > utrd_bta * e3u </field>   
    872874     <field id="utrd_bfr_e3u"       unit="m2/s^2" > utrd_bfr * e3u </field>   
    873      <field id="utrd_bfri_e3u"      unit="m2/s^2" > utrd_bfri * e3u </field>   
     875     <field id="utrd_tfr_e3u"       unit="m2/s^2" > utrd_tfr * e3u </field>   
    874876   </field_group> 
    875877 
     
    891893     <field id="vtrd_ldf"       long_name="j-trend: lateral   diffusion"                    unit="m/s^2"                        /> 
    892894     <field id="vtrd_zdf"       long_name="j-trend: vertical  diffusion"                    unit="m/s^2"                        /> 
    893      <field id="vtrd_tau"       long_name="j-trend: wind stress "                           unit="m/s^2"   grid_ref="grid_V_2D" /> 
    894      <field id="vtrd_bfr"       long_name="j-trend: bottom friction (explicit)"             unit="m/s^2"                        />    
    895      <field id="vtrd_bfri"      long_name="j-trend: bottom friction (implicit)"             unit="m/s^2"                        />    
    896      <field id="vtrd_bfr2d"     long_name="j-trend: bottom friction: 2D component"      unit="m/s^2"    grid_ref="grid_V_2D" /> 
     895     <field id="vtrd_tau"       long_name="j-trend: wind stress in top layer "              unit="m/s^2"   grid_ref="grid_V_2D" /> 
     896     <field id="vtrd_tau2d"     long_name="j-trend: wind stress: 2D component "             unit="m/s^2"   grid_ref="grid_V_2D" /> 
     897     <field id="vtrd_bfr"       long_name="j-trend: bottom friction (3D) in bottom layer"   unit="m/s^2"                        />    
     898     <field id="vtrd_bfr2d"     long_name="j-trend: bottom friction: 2D component"          unit="m/s^2"    grid_ref="grid_V_2D" /> 
     899     <field id="vtrd_tfr"       long_name="j-trend: top friction (3D) in top layer"         unit="m/s^2"                        />    
     900     <field id="vtrd_tfr2d"     long_name="j-trend: top friction: 2D component"             unit="m/s^2"    grid_ref="grid_V_2D" /> 
    897901     <field id="vtrd_tot"       long_name="j-trend: total momentum trend before atf"        unit="m/s^2"                        />    
    898902     <field id="vtrd_atf"       long_name="j-trend: asselin time filter trend"              unit="m/s^2"                        />    
     
    911915     <field id="vtrd_bta_e3v"       unit="m2/s^2" > vtrd_bta * e3v </field>   
    912916     <field id="vtrd_bfr_e3v"       unit="m2/s^2" > vtrd_bfr * e3v </field>   
    913      <field id="vtrd_bfri_e3v"      unit="m2/s^2" > vtrd_bfri * e3v </field>   
     917     <field id="vtrd_tfr_e3v"       unit="m2/s^2" > vtrd_tfr * e3v </field>   
    914918   </field_group> 
    915919 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends/src/OCE/DYN/dynnxt.F90

    r14075 r15168  
    164164            zua(:,:,:) = ( ua(:,:,:) - ub(:,:,:) ) * z1_2dt 
    165165            zva(:,:,:) = ( va(:,:,:) - vb(:,:,:) ) * z1_2dt 
    166             CALL iom_put( "utrd_tot", zua )        ! total momentum trends, except the asselin time filter 
    167             CALL iom_put( "vtrd_tot", zva ) 
     166            CALL trd_dyn( zua, zva, jpdyn_tot, kt )  ! total momentum trends, except the asselin time filter 
     167!!$            CALL iom_put( "utrd_tot", zua )        ! total momentum trends, except the asselin time filter 
     168!!$            CALL iom_put( "vtrd_tot", zva ) 
    168169         ENDIF 
    169170         ! 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends/src/OCE/DYN/dynspg_ts.F90

    r15154 r15168  
    172172      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zspgtrdu, zspgtrdv, zpvotrdu, zpvotrdv  ! SPG and PVO trends (if l_trddyn) 
    173173      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ztautrdu, ztautrdv, zbfrtrdu, zbfrtrdv  ! TAU and BFR trends (if l_trddyn) 
     174      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ztfrtrdu, ztfrtrdv  ! TFR trends (if l_trddyn) 
    174175      !!---------------------------------------------------------------------- 
    175176      ! 
     
    189190          zbfrtrdu(:,:) = 0._wp 
    190191          zbfrtrdv(:,:) = 0._wp 
     192          IF( ln_isfcav.OR.ln_drgice_imp ) THEN          ! top+bottom friction (ocean cavities) 
     193             ALLOCATE( ztfrtrdu(jpi,jpj), ztfrtrdv(jpi,jpj) ) 
     194             ztfrtrdu(:,:) = 0._wp 
     195             ztfrtrdv(:,:) = 0._wp 
     196          ENDIF             
    191197      ENDIF 
    192198      ! 
     
    323329      END DO  
    324330      ! 
    325       IF( l_trddyn ) THEN 
    326          zbfrtrdu(:,:) = zu_frc(:,:) 
    327          zbfrtrdv(:,:) = zv_frc(:,:) 
    328       ENDIF 
    329331      !                                   !=  Add bottom stress contribution from baroclinic velocities  =! 
    330332      !                                   !  -----------------------------------------------------------  ! 
    331       CALL dyn_drg_init( zu_frc, zv_frc,  zCdU_u, zCdU_v )      ! also provide the barotropic drag coefficients 
    332       ! 
    333333      IF( l_trddyn ) THEN 
    334          ! bottom friction trend diagnostic: bottom friction due to baroclinic currents 
    335          zbfrtrdu(:,:) = zu_frc(:,:) - zbfrtrdu(:,:) 
    336          zbfrtrdv(:,:) = zv_frc(:,:) - zbfrtrdv(:,:)  
     334         ! 
     335         CALL dyn_drg_init( zu_frc, zv_frc, zCdU_u, zCdU_v, &     ! also provide the barotropic drag coefficients 
     336              &             ztfrtrdu, ztfrtrdv, zbfrtrdu, zbfrtrdv ) 
     337         ! 
     338      ELSE 
     339         ! 
     340         CALL dyn_drg_init( zu_frc, zv_frc, zCdU_u, zCdU_v )      ! also provide the barotropic drag coefficients 
     341         ! 
    337342      ENDIF 
    338343      ! 
     
    690695            IF( l_trddyn ) THEN 
    691696               za2 = wgtbtp2(jn) 
    692                zbfrtrdu(:,:) = zbfrtrdu(:,:) + za2 * zCdU_u(:,:) * un_e(:,:) * hur_e(:,:) 
    693                zbfrtrdv(:,:) = zbfrtrdv(:,:) + za2 * zCdU_v(:,:) * vn_e(:,:) * hvr_e(:,:) 
     697               IF( ln_isfcav.OR.ln_drgice_imp ) THEN          ! top+bottom friction (ocean cavities) 
     698                  DO jj = 2, jpjm1 
     699                     DO ji = fs_2, fs_jpim1   ! vector opt. 
     700                        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) 
     701                        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) 
     702                     END DO 
     703                  END DO 
     704               ENDIF 
     705               DO jj = 2, jpjm1 
     706                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     707                     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) 
     708                     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) 
     709                  END DO 
     710               END DO 
    694711            ENDIF 
    695712         ENDIF 
     
    921938         CALL trd_dyn( zbfrtrdu, zbfrtrdv, jpdyn_bfr, kt ) 
    922939         DEALLOCATE( zspgtrdu, zspgtrdv, zpvotrdu, zpvotrdv, ztautrdu, ztautrdv, zbfrtrdu, zbfrtrdv ) 
     940         IF( ln_isfcav.OR.ln_drgice_imp ) THEN          ! top+bottom friction (ocean cavities) 
     941            CALL trd_dyn( ztfrtrdu, ztfrtrdv, jpdyn_tfr, kt ) 
     942            DEALLOCATE( ztfrtrdu, ztfrtrdv ) 
     943         ENDIF 
    923944      ENDIF 
    924945      ! 
     
    15331554 
    15341555 
    1535    SUBROUTINE dyn_drg_init( pu_RHSi, pv_RHSi, pCdU_u, pCdU_v ) 
     1556   SUBROUTINE dyn_drg_init( pu_RHSi, pv_RHSi, pCdU_u, pCdU_v, & 
     1557              &             ptfrtrdu, ptfrtrdv, pbfrtrdu, pbfrtrdv ) 
    15361558      !!---------------------------------------------------------------------- 
    15371559      !!                  ***  ROUTINE dyn_drg_init  *** 
     
    15451567      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   pu_RHSi, pv_RHSi   ! baroclinic part of the barotropic RHS 
    15461568      REAL(wp), DIMENSION(jpi,jpj), INTENT(  out) ::   pCdU_u , pCdU_v    ! barotropic drag coefficients 
     1569      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout), OPTIONAL :: ptfrtrdu, ptfrtrdv ! top friction trends 
     1570      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout), OPTIONAL :: pbfrtrdu, pbfrtrdv ! bottom friction trends 
    15471571      ! 
    15481572      INTEGER  ::   ji, jj   ! dummy loop indices 
     
    15721596      ! 
    15731597      !                    !==  BOTTOM stress contribution from baroclinic velocities  ==! 
     1598      ! 
     1599      IF( l_trddyn ) THEN 
     1600           pbfrtrdu(:,:) = pu_RHSi(:,:) 
     1601           pbfrtrdv(:,:) = pv_RHSi(:,:) 
     1602      ENDIF 
    15741603      ! 
    15751604      IF( ln_bt_fw ) THEN                 ! FORWARD integration: use NOW bottom baroclinic velocities 
     
    16151644      END IF 
    16161645      ! 
     1646      IF( l_trddyn ) THEN 
     1647         pbfrtrdu(:,:) = pu_RHSi(:,:) - pbfrtrdu(:,:)  
     1648         pbfrtrdv(:,:) = pv_RHSi(:,:) - pbfrtrdv(:,:)  
     1649      ENDIF 
     1650      ! 
    16171651      !                    !==  TOP stress contribution from baroclinic velocities  ==!   (no W/D case) 
    16181652      ! 
    16191653      IF( ln_isfcav.OR.ln_drgice_imp ) THEN 
     1654         ! 
     1655         IF( l_trddyn ) THEN 
     1656            ptfrtrdu(:,:) = pu_RHSi(:,:) 
     1657            ptfrtrdv(:,:) = pv_RHSi(:,:) 
     1658         ENDIF 
    16201659         ! 
    16211660         IF( ln_bt_fw ) THEN                ! FORWARD integration: use NOW top baroclinic velocity 
     
    16491688            END DO 
    16501689         END DO 
     1690         ! 
     1691         IF( l_trddyn ) THEN 
     1692            ptfrtrdu(:,:) = pu_RHSi(:,:) - ptfrtrdu(:,:)  
     1693            ptfrtrdv(:,:) = pv_RHSi(:,:) - ptfrtrdv(:,:) 
     1694         ENDIF 
    16511695         ! 
    16521696      ENDIF 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends/src/OCE/DYN/dynzdf.F90

    r15154 r15168  
    7070      INTEGER  ::   ji, jj, jk         ! dummy loop indices 
    7171      INTEGER  ::   iku, ikv           ! local integers 
    72       INTEGER  ::   ikbu, ikbv         ! local integers 
    7372      REAL(wp) ::   zzwi, ze3ua, zdt   ! local scalars 
    7473      REAL(wp) ::   zzws, ze3va        !   -      - 
     
    7877      REAL(wp) ::   zWus, zWvs         !   -      - 
    7978      REAL(wp), DIMENSION(jpi,jpj,jpk)        ::  zwi, zwd, zws   ! 3D workspace  
    80       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdu, ztrdv   !  -      - 
     79      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdu, ztrdv         !  -      - 
     80      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::   ztrdu_fr, ztrdv_fr   !  -      - 
    8181      !!--------------------------------------------------------------------- 
    8282      ! 
     
    117117         END DO 
    118118      ENDIF 
     119      ! 
     120      IF( l_trddyn )   THEN         !* temporary save of ta and sa trends 
     121         ALLOCATE( ztrdu(jpi,jpj,jpk), ztrdv(jpi,jpj,jpk) )  
     122         ztrdu(:,:,:) = ua(:,:,:) 
     123         ztrdv(:,:,:) = va(:,:,:) 
     124      ENDIF 
     125      ! 
    119126      !                    ! add top/bottom friction  
    120127      !     With split-explicit free surface, barotropic stress is treated explicitly Update velocities at the bottom. 
     
    128135         END DO 
    129136         IF( l_trddyn )   THEN         !* temporary save of ta and sa trends 
    130             ALLOCATE( ztrdu(jpi,jpj,jpk), ztrdv(jpi,jpj,jpk) )  
    131             ztrdu(:,:,:) = ua(:,:,:) 
    132             ztrdv(:,:,:) = va(:,:,:) 
     137            ALLOCATE( ztrdu_fr(jpi,jpj,jpk), ztrdv_fr(jpi,jpj,jpk) )  
     138            ztrdu_fr(:,:,:) = ua(:,:,:) 
     139            ztrdv_fr(:,:,:) = va(:,:,:) 
    133140         ENDIF 
    134141         DO jj = 2, jpjm1        ! Add bottom/top stress due to barotropic component only 
     
    142149            END DO 
    143150         END DO 
     151         IF( l_trddyn )   THEN    ! save baroclinic bottom friction trends due to barotropic currents   
     152            ztrdu_fr(:,:,:) = ( ua(:,:,:) - ztrdu_fr(:,:,:) ) / r2dt  
     153            ztrdv_fr(:,:,:) = ( va(:,:,:) - ztrdv_fr(:,:,:) ) / r2dt  
     154            CALL trd_dyn( ztrdu_fr, ztrdv_fr, jpdyn_bfre_bt, kt ) 
     155         ENDIF 
    144156         IF( ln_isfcav.OR.ln_drgice_imp ) THEN    ! Ocean cavities (ISF) 
     157            IF( l_trddyn )   THEN         !* temporary save of ta and sa trends 
     158               ztrdu_fr(:,:,:) = ua(:,:,:) 
     159               ztrdv_fr(:,:,:) = va(:,:,:) 
     160            ENDIF 
    145161            DO jj = 2, jpjm1         
    146162               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    153169               END DO 
    154170            END DO 
     171            IF( l_trddyn )   THEN   ! save baroclinic top friction trends due to barotropic currents 
     172               ztrdu_fr(:,:,:) = ( ua(:,:,:) - ztrdu_fr(:,:,:) ) / r2dt 
     173               ztrdv_fr(:,:,:) = ( va(:,:,:) - ztrdv_fr(:,:,:) ) / r2dt  
     174               CALL trd_dyn( ztrdu_fr, ztrdv_fr, jpdyn_tfre_bt, kt ) 
     175            ENDIF 
    155176         END IF 
    156          IF( l_trddyn )   THEN                      ! save explicit part of bottom friction trends 
    157             ztrdu(:,:,:) = ( ua(:,:,:) - ztrdu(:,:,:) ) / r2dt  
    158             ztrdv(:,:,:) = ( va(:,:,:) - ztrdv(:,:,:) ) / r2dt  
    159             CALL trd_dyn( ztrdu, ztrdv, jpdyn_bfr, kt ) 
    160          ENDIF 
    161       ENDIF 
    162       ! 
    163       IF( l_trddyn )   THEN         !* temporary save of ta and sa trends 
    164          IF( .NOT. ALLOCATED(ztrdu) ) ALLOCATE( ztrdu(jpi,jpj,jpk), ztrdv(jpi,jpj,jpk) )  
    165          ztrdu(:,:,:) = ua(:,:,:) 
    166          ztrdv(:,:,:) = va(:,:,:) 
    167       ENDIF 
     177     ENDIF 
    168178      ! 
    169179      !              !==  Vertical diffusion on u  ==! 
     
    497507      END DO 
    498508      ! 
    499       IF( l_trddyn )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    500  
     509      IF( l_trddyn )   THEN       
     510         ! Save the vertical diffusive trends for further diagnostics 
     511         ! and calculate implicit drag trends 
     512         ! (The order of operation is important here).  
     513         ! 
    501514         ztrdu(:,:,:) = ( ua(:,:,:) - ztrdu(:,:,:) ) / r2dt  
    502515         ztrdv(:,:,:) = ( va(:,:,:) - ztrdv(:,:,:) ) / r2dt  
     
    504517         ! 
    505518         IF( ln_drgimp ) THEN 
    506             ztrdu(:,:,:) = 0._wp    ;   ztrdv(:,:,:) = 0._wp 
    507             DO jk = 1, jpkm1 
     519            ztrdu_fr(:,:,:) = 0._wp    ;   ztrdv_fr(:,:,:) = 0._wp 
     520            DO jj = 2, jpjm1 
     521               DO ji = 2, jpim1 
     522                  iku = mbku(ji,jj)          ! deepest ocean u- & v-levels 
     523                  ikv = mbkv(ji,jj) 
     524                  ztrdu_fr(ji,jj,iku) = 0.5 * ( rCdU_bot(ji+1,jj) + rCdU_bot(ji,jj) )  &  
     525     &                                 * un(ji,jj,iku) / e3u_n(ji,jj,iku) 
     526                  ztrdv_fr(ji,jj,ikv) = 0.5 * ( rCdU_bot(ji,jj+1) + rCdU_bot(ji,jj) )  & 
     527     &                                 * vn(ji,jj,ikv) / e3v_n(ji,jj,ikv) 
     528               END DO 
     529            END DO 
     530            CALL trd_dyn( ztrdu_fr, ztrdv_fr, jpdyn_bfri, kt ) 
     531            IF( ln_isfcav.OR.ln_drgice_imp ) THEN    ! Ocean cavities (ISF) or implicit ice-ocean drag 
     532               ztrdu_fr(:,:,:) = 0._wp    ;   ztrdv_fr(:,:,:) = 0._wp 
    508533               DO jj = 2, jpjm1 
    509534                  DO ji = 2, jpim1 
    510                      ikbu = mbku(ji,jj)          ! deepest ocean u- & v-levels 
    511                      ikbv = mbkv(ji,jj) 
    512                      ztrdu(ji,jj,jk) = 0.5 * ( rCdU_bot(ji+1,jj) + rCdU_bot(ji,jj) )  &  
    513      &                               * un(ji,jj,ikbu) / e3u_n(ji,jj,ikbu) 
    514                      ztrdv(ji,jj,jk) = 0.5 * ( rCdU_bot(ji,jj+1) + rCdU_bot(ji,jj) )  & 
    515      &                               * vn(ji,jj,ikbv) / e3v_n(ji,jj,ikbv) 
    516                   END DO 
    517                END DO 
    518             END DO 
    519             CALL trd_dyn( ztrdu, ztrdv, jpdyn_bfri, kt ) 
     535                     iku = miku(ji,jj)       ! ocean top level at u-points  
     536                     ikv = mikv(ji,jj)       ! ocean top level at v-points  
     537                     ztrdu_fr(ji,jj,iku) = 0.5 * ( rCdU_top(ji+1,jj) + rCdU_top(ji,jj) )  &  
     538     &                                      * un(ji,jj,iku) / e3u_n(ji,jj,iku) 
     539                     ztrdv_fr(ji,jj,ikv) = 0.5 * ( rCdU_top(ji,jj+1) + rCdU_top(ji,jj) )  & 
     540     &                                      * vn(ji,jj,ikv) / e3v_n(ji,jj,ikv) 
     541                  END DO 
     542               END DO 
     543               CALL trd_dyn( ztrdu_fr, ztrdv_fr, jpdyn_tfri, kt ) 
     544            ENDIF 
    520545         ENDIF 
    521546         ! 
     547         IF( ALLOCATED(ztrdu_fr) ) DEALLOCATE( ztrdu_fr, ztrdv_fr )  
    522548         DEALLOCATE( ztrdu, ztrdv )  
    523549      ENDIF 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends/src/OCE/TRD/trd_oce.F90

    r15154 r15168  
    5959   ! 
    6060   !                                                  !!!* Momentum trends indices 
    61    INTEGER, PUBLIC, PARAMETER ::   jptot_dyn  = 17     !: Total trend nb: change it when adding/removing one indice below 
     61   INTEGER, PUBLIC, PARAMETER ::   jptot_dyn  = 24     !: Total trend nb: change it when adding/removing one indice below 
    6262   !                               ===============     !   
    6363   INTEGER, PUBLIC, PARAMETER ::   jpdyn_hpg   =  1     !: hydrostatic pressure gradient  
     
    7373   INTEGER, PUBLIC, PARAMETER ::   jpdyn_ldf   = 11     !: horizontal diffusion    
    7474   INTEGER, PUBLIC, PARAMETER ::   jpdyn_zdf   = 12     !: vertical   diffusion 
    75    INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfr   = 13     !: bottom  stress  
    76    INTEGER, PUBLIC, PARAMETER ::   jpdyn_atf   = 14     !: Asselin time filter 
    77    INTEGER, PUBLIC, PARAMETER ::   jpdyn_tau   = 15     !: surface stress 
    78    INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfri  = 16     !: implicit bottom friction (ln_drgimp=.TRUE.) 
    79    INTEGER, PUBLIC, PARAMETER ::   jpdyn_ken   = 17     !: use for calculation of KE 
     75   INTEGER, PUBLIC, PARAMETER ::   jpdyn_tau   = 13     !: wind stress (= ice-ocean drag under ice if ln_drgice_imp=F) 
     76   INTEGER, PUBLIC, PARAMETER ::   jpdyn_tfr   = 14     !: top friction (cavities and ice-ocean drag if ln_drgice_imp=T)  
     77   INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfr   = 15     !: bottom friction  
     78   INTEGER, PUBLIC, PARAMETER ::   jpdyn_tfre  = 16     !: explicit top friction for baroclinic trend (ln_drgimp=.FALSE.) 
     79   INTEGER, PUBLIC, PARAMETER ::   jpdyn_tfre_bt  = 17  !: top friction due to barotropic currents for baroclinic trend (ln_dynspg_ts=.TRUE.) 
     80   INTEGER, PUBLIC, PARAMETER ::   jpdyn_tfri  = 18     !: implicit top friction for baroclinic trend  
     81   INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfre  = 19     !: explicit bottom friction for baroclinic trend (ln_drgimp=.FALSE.) 
     82   INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfre_bt  = 20  !: bottom friction due to barotropic currents for baroclinic trend (ln_dynspg_ts=.TRUE.) 
     83   INTEGER, PUBLIC, PARAMETER ::   jpdyn_bfri  = 21     !: implicit bottom friction for baroclinic trend (ln_drgimp=.TRUE.) 
     84   INTEGER, PUBLIC, PARAMETER ::   jpdyn_tot   = 22     !: Total trend excluding Asselin time filter 
     85   INTEGER, PUBLIC, PARAMETER ::   jpdyn_atf   = 23     !: Asselin time filter 
     86   INTEGER, PUBLIC, PARAMETER ::   jpdyn_ken   = 24     !: use for calculation of KE 
    8087   ! 
    8188   !!---------------------------------------------------------------------- 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends/src/OCE/TRD/trddyn.F90

    r15154 r15168  
    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 
    43    REAL(wp), ALLOCATABLE, DIMENSION(:,:)  , SAVE :: zutrd_tau, zvtrd_tau 
     44   REAL(wp), ALLOCATABLE, DIMENSION(:,:)  , SAVE :: zutrd_tau2d, zvtrd_tau2d 
     45   REAL(wp), ALLOCATABLE, DIMENSION(:,:)  , SAVE :: zutrd_tfr2d, zvtrd_tfr2d 
     46   REAL(wp), ALLOCATABLE, DIMENSION(:,:)  , SAVE :: zutrd_bfr2d, zvtrd_bfr2d 
    4447 
    4548   !! * Substitutions 
     
    6568      REAL(wp), ALLOCATABLE, DIMENSION(:,:)     ::   zue, zve       ! temporary 2D arrays 
    6669      INTEGER                                   ::   jk 
     70      LOGICAL, SAVE                             ::   l_drgexp       ! local logical to flag explicit friction 
    6771      !!---------------------------------------------------------------------- 
    6872      ! 
     
    96100         DEALLOCATE( zutrd_hpg, zvtrd_hpg ) 
    97101 
    98       CASE( jpdyn_bfr ) 
    99          ! 
    100          ! Add 3D part of BFR trend minus its depth-mean part to depth-mean trend already saved. 
    101          ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 
    102          zue(:,:) = e3u_a(:,:,1) * putrd(:,:,1) * umask(:,:,1) 
    103          zve(:,:) = e3v_a(:,:,1) * pvtrd(:,:,1) * vmask(:,:,1) 
    104          DO jk = 2, jpkm1 
    105             zue(:,:) = zue(:,:) + e3u_a(:,:,jk) * putrd(:,:,jk) * umask(:,:,jk) 
    106             zve(:,:) = zve(:,:) + e3v_a(:,:,jk) * pvtrd(:,:,jk) * vmask(:,:,jk) 
    107          END DO 
    108          DO jk = 1, jpkm1 
    109             putrd(:,:,jk) = zutrd_bfr(:,:,jk) + putrd(:,:,jk) - zue(:,:) * r1_hu_a(:,:) 
    110             pvtrd(:,:,jk) = zvtrd_bfr(:,:,jk) + pvtrd(:,:,jk) - zve(:,:) * r1_hv_a(:,:) 
    111          END DO 
    112          ! Update locally saved BFR trends to add to ZDF trend. 
    113          zutrd_bfr(:,:,:) = putrd(:,:,:)  
    114          zvtrd_bfr(:,:,:) = pvtrd(:,:,:) 
     102      CASE( jpdyn_tfre, jpdyn_tfre_bt, jpdyn_tfri ) 
     103         ! 
     104         ! Add various top friction terms for baroclinic trend to saved quantity. 
     105         ! Any depth-mean component removed later when TFR trend written out.  
     106         IF( .NOT. ALLOCATED(zutrd_tfr) ) THEN  
     107            ALLOCATE( zutrd_tfr(jpi,jpj,jpk), zvtrd_tfr(jpi,jpj,jpk) ) 
     108            zutrd_tfr(:,:,:) = 0.0 
     109            zvtrd_tfr(:,:,:) = 0.0 
     110         ENDIF 
     111         zutrd_tfr(:,:,:) = zutrd_tfr(:,:,:) + putrd(:,:,:)  
     112         zvtrd_tfr(:,:,:) = zvtrd_tfr(:,:,:) + pvtrd(:,:,:) 
     113 
     114      CASE( jpdyn_bfre, jpdyn_bfre_bt, jpdyn_bfri ) 
     115         ! 
     116         ! Add various bottom friction terms for baroclinic trend to saved quantity. 
     117         ! Any depth-mean component removed later when TFR trend written out.  
     118         l_drgexp = .false. 
     119         IF( .NOT. ALLOCATED(zutrd_bfr) ) THEN  
     120            ALLOCATE( zutrd_bfr(jpi,jpj,jpk), zvtrd_bfr(jpi,jpj,jpk) ) 
     121            zutrd_bfr(:,:,:) = 0.0 
     122            zvtrd_bfr(:,:,:) = 0.0 
     123         ENDIF 
     124         zutrd_bfr(:,:,:) = zutrd_bfr(:,:,:) + putrd(:,:,:)  
     125         zvtrd_bfr(:,:,:) = zvtrd_bfr(:,:,:) + pvtrd(:,:,:) 
    115126 
    116127      CASE( jpdyn_zdf )  
    117          ! ZDF trend: Remove barotropic component and add wind stress and bottom friction 
    118          !            trends from dynspg_ts. Also adding on the bottom stress for the  
    119          !            baroclinic solution in the case of explicit bottom friction.  
    120          ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 
    121          zue(:,:) = e3u_a(:,:,1) * putrd(:,:,1) * umask(:,:,1) 
    122          zve(:,:) = e3v_a(:,:,1) * pvtrd(:,:,1) * vmask(:,:,1) 
    123          DO jk = 2, jpkm1 
    124             zue(:,:) = zue(:,:) + e3u_a(:,:,jk) * putrd(:,:,jk) * umask(:,:,jk) 
    125             zve(:,:) = zve(:,:) + e3v_a(:,:,jk) * pvtrd(:,:,jk) * vmask(:,:,jk) 
    126          END DO 
    127          DO jk = 1, jpkm1 
    128             putrd(:,:,jk) = zutrd_tau(:,:) + zutrd_bfr(:,:,jk) + putrd(:,:,jk) - zue(:,:) * r1_hu_a(:,:) 
    129             pvtrd(:,:,jk) = zvtrd_tau(:,:) + zvtrd_bfr(:,:,jk) + pvtrd(:,:,jk) - zve(:,:) * r1_hv_a(:,:) 
    130          END DO 
    131          DEALLOCATE( zue, zve, zutrd_tau, zvtrd_tau, zutrd_bfr, zvtrd_bfr ) 
     128         ! ZDF trend: Add explicit bottom friction if necessary. If ln_dynspg_ts, remove barotropic component  
     129         !            and add wind stress, and top and bottom friction trends from dynspg_ts. 
     130         ! 
     131         ! If TFR or BFR arrays allocated at this stage then they will contain trends due 
     132         ! to explicit top or bottom drag components which need to be added to the ZDF trend.  
     133         IF( ALLOCATED( zutrd_tfr ) )THEN 
     134            DO jk = 1, jpkm1 
     135               putrd(:,:,jk) = ( putrd(:,:,jk) + zutrd_tfr(:,:,jk) ) * umask(:,:,jk) 
     136               pvtrd(:,:,jk) = ( pvtrd(:,:,jk) + zvtrd_tfr(:,:,jk) ) * vmask(:,:,jk) 
     137            END DO 
     138         ENDIF 
     139         IF( ALLOCATED( zutrd_bfr ) )THEN 
     140            DO jk = 1, jpkm1 
     141               putrd(:,:,jk) = ( putrd(:,:,jk) + zutrd_bfr(:,:,jk) ) * umask(:,:,jk) 
     142               pvtrd(:,:,jk) = ( pvtrd(:,:,jk) + zvtrd_bfr(:,:,jk) ) * vmask(:,:,jk) 
     143            END DO 
     144         ENDIF 
     145         IF( ln_dynspg_ts ) THEN 
     146            ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 
     147            zue(:,:) = e3u_a(:,:,1) * putrd(:,:,1) * umask(:,:,1) 
     148            zve(:,:) = e3v_a(:,:,1) * pvtrd(:,:,1) * vmask(:,:,1) 
     149            DO jk = 2, jpkm1 
     150               zue(:,:) = zue(:,:) + e3u_a(:,:,jk) * putrd(:,:,jk) * umask(:,:,jk) 
     151               zve(:,:) = zve(:,:) + e3v_a(:,:,jk) * pvtrd(:,:,jk) * vmask(:,:,jk) 
     152            END DO 
     153            DO jk = 1, jpkm1 
     154               putrd(:,:,jk) = ( zutrd_tau2d(:,:) + zutrd_bfr2d(:,:) + putrd(:,:,jk) - zue(:,:) * r1_hu_a(:,:) ) * umask(:,:,jk) 
     155               pvtrd(:,:,jk) = ( zvtrd_tau2d(:,:) + zvtrd_bfr2d(:,:) + pvtrd(:,:,jk) - zve(:,:) * r1_hv_a(:,:) ) * vmask(:,:,jk) 
     156            END DO 
     157            DEALLOCATE( zue, zve, zutrd_tau2d, zvtrd_tau2d, zutrd_bfr2d, zvtrd_bfr2d) 
     158            IF( ALLOCATED( zutrd_tfr2d ) ) THEN 
     159               DO jk = 1, jpkm1 
     160                  putrd(:,:,jk) = ( putrd(:,:,jk) + zutrd_tfr2d(:,:) ) * umask(:,:,jk) 
     161                  pvtrd(:,:,jk) = ( pvtrd(:,:,jk) + zvtrd_tfr2d(:,:) ) * vmask(:,:,jk) 
     162               END DO 
     163               DEALLOCATE( zutrd_tfr2d, zvtrd_tfr2d ) 
     164            ENDIF 
     165            ! 
     166         ENDIF 
     167         ! 
     168      CASE( jpdyn_tot )  
     169         ! Don't need to do anything special for TOT trends, but we are at the end of the timestep, so 
     170         ! write out total top and bottom friction "trends" for the surface / bottom layers after  
     171         ! removing any depth-mean component. 
     172         IF( ALLOCATED( zutrd_tfr ) ) THEN 
     173            ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 
     174            zue(:,:) = e3u_a(:,:,1) * zutrd_tfr(:,:,1) * umask(:,:,1) 
     175            zve(:,:) = e3v_a(:,:,1) * zvtrd_tfr(:,:,1) * vmask(:,:,1) 
     176            DO jk = 2, jpkm1 
     177               zue(:,:) = zue(:,:) + e3u_a(:,:,jk) * zutrd_tfr(:,:,jk) * umask(:,:,jk) 
     178               zve(:,:) = zve(:,:) + e3v_a(:,:,jk) * zvtrd_tfr(:,:,jk) * vmask(:,:,jk) 
     179            END DO 
     180            DO jk = 1, jpkm1 
     181               zutrd_tfr(:,:,jk) = ( zutrd_tfr(:,:,jk) - zue(:,:) * r1_hu_a(:,:) ) * umask(:,:,jk) 
     182               zvtrd_tfr(:,:,jk) = ( zvtrd_tfr(:,:,jk) - zve(:,:) * r1_hv_a(:,:) ) * vmask(:,:,jk) 
     183            END DO 
     184            CALL trd_dyn_iom_3d( zutrd_tfr, zvtrd_tfr, jpdyn_tfr, kt ) 
     185            DEALLOCATE( zue, zve, zutrd_tfr, zvtrd_tfr ) 
     186         ENDIF 
     187         IF( ALLOCATED( zutrd_bfr ) ) THEN 
     188            ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 
     189            zue(:,:) = e3u_a(:,:,1) * zutrd_bfr(:,:,1) * umask(:,:,1) 
     190            zve(:,:) = e3v_a(:,:,1) * zvtrd_bfr(:,:,1) * vmask(:,:,1) 
     191            DO jk = 2, jpkm1 
     192               zue(:,:) = zue(:,:) + e3u_a(:,:,jk) * zutrd_bfr(:,:,jk) * umask(:,:,jk) 
     193               zve(:,:) = zve(:,:) + e3v_a(:,:,jk) * zvtrd_bfr(:,:,jk) * vmask(:,:,jk) 
     194            END DO 
     195            DO jk = 1, jpkm1 
     196               zutrd_bfr(:,:,jk) = ( zutrd_bfr(:,:,jk) - zue(:,:) * r1_hu_a(:,:) ) * umask(:,:,jk) 
     197               zvtrd_bfr(:,:,jk) = ( zvtrd_bfr(:,:,jk) - zve(:,:) * r1_hv_a(:,:) ) * vmask(:,:,jk) 
     198            END DO 
     199            CALL trd_dyn_iom_3d( zutrd_bfr, zvtrd_bfr, jpdyn_bfr, kt ) 
     200            DEALLOCATE( zue, zve, zutrd_bfr, zvtrd_bfr ) 
     201         ENDIF 
    132202 
    133203      END SELECT 
    134204 
    135       IF ( ktrd /= jpdyn_hpg_save .AND. ktrd /= jpdyn_pvo_save ) THEN 
     205      IF ( ktrd /= jpdyn_hpg_save .AND. ktrd /= jpdyn_pvo_save .AND. & 
     206     &     ktrd /= jpdyn_tfre     .AND. ktrd /= jpdyn_tfre_bt  .AND. & 
     207     &     ktrd /= jpdyn_tfri     .AND. ktrd /= jpdyn_bfre     .AND. & 
     208     &     ktrd /= jpdyn_bfre_bt  .AND. ktrd /= jpdyn_bfri ) THEN 
    136209         ! 
    137210         !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     
    228301          ! Save 2D wind forcing trend locally (to be added to ZDF trend) 
    229302          ! and output as a trend in its own right. 
    230           ALLOCATE( zutrd_tau(jpi,jpj), zvtrd_tau(jpi,jpj) ) 
    231           zutrd_tau(:,:) = putrd(:,:) 
    232           zvtrd_tau(:,:) = pvtrd(:,:) 
     303          ALLOCATE( zutrd_tau2d(jpi,jpj), zvtrd_tau2d(jpi,jpj) ) 
     304          zutrd_tau2d(:,:) = putrd(:,:) 
     305          zvtrd_tau2d(:,:) = pvtrd(:,:) 
     306 
     307      CASE( jpdyn_tfr ) 
     308          ! 
     309          ! Save 2D field to add to ZDF trend (and also output 2D field as diagnostic in own right below). 
     310          ALLOCATE( zutrd_tfr2d(jpi,jpj), zvtrd_tfr2d(jpi,jpj) ) 
     311          zutrd_tfr2d(:,:) = putrd(:,:) 
     312          zvtrd_tfr2d(:,:) = pvtrd(:,:) 
    233313 
    234314      CASE( jpdyn_bfr ) 
    235315          ! 
    236316          ! Create 3D BFR trend from 2D field and also output 2D field as diagnostic in own right. 
    237           ALLOCATE( zutrd_bfr(jpi,jpj,jpk), zvtrd_bfr(jpi,jpj,jpk) ) 
    238           zutrd_bfr(:,:,:) = 0.0 
    239           zvtrd_bfr(:,:,:) = 0.0 
    240           DO jk = 1, jpkm1 
    241              zutrd_bfr(:,:,jk) = putrd(:,:) * umask(:,:,jk) 
    242              zvtrd_bfr(:,:,jk) = pvtrd(:,:) * vmask(:,:,jk) 
    243           ENDDO 
     317          ALLOCATE( zutrd_bfr2d(jpi,jpj), zvtrd_bfr2d(jpi,jpj) ) 
     318          zutrd_bfr2d(:,:) = putrd(:,:) 
     319          zvtrd_bfr2d(:,:) = pvtrd(:,:) 
    244320 
    245321      END SELECT 
     
    322398                              CALL iom_put( "vtrd_zdf", pvtrd ) 
    323399                              ! 
    324                               !                                    ! wind stress trends 
     400                              !                                    ! wind stress trends in surface layer 
    325401                              ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) ) 
    326402                              z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u_n(:,:,1) * rau0 ) 
     
    329405                              CALL iom_put( "vtrd_tau", z2dy ) 
    330406                              DEALLOCATE( z2dx , z2dy ) 
    331       CASE( jpdyn_bfr )   ;   CALL iom_put( "utrd_bfr", putrd )    ! bottom friction (explicit case) 
     407      CASE( jpdyn_bfr )   ;   CALL iom_put( "utrd_bfr", putrd )    ! bottom friction for bottom layer 
    332408                              CALL iom_put( "vtrd_bfr", pvtrd ) 
    333       CASE( jpdyn_bfri)   ;   CALL iom_put( "utrd_bfri", putrd )    ! bottom friction (implicit case) 
    334                               CALL iom_put( "vtrd_bfri", pvtrd ) 
    335       CASE( jpdyn_atf )   ;   CALL iom_put( "utrd_atf", putrd )        ! asselin filter trends  
     409      CASE( jpdyn_tfr )   ;   CALL iom_put( "utrd_tfr", putrd )    ! total top friction for top layer 
     410                              CALL iom_put( "vtrd_tfr", pvtrd ) 
     411      CASE( jpdyn_tot )   ;   CALL iom_put( "utrd_tot", putrd )    ! total trends excluding asselin filter 
     412                              CALL iom_put( "vtrd_tot", pvtrd ) 
     413      CASE( jpdyn_atf )   ;   CALL iom_put( "utrd_atf", putrd )    ! asselin filter trends  
    336414                              CALL iom_put( "vtrd_atf", pvtrd ) 
    337415      END SELECT 
     
    365443      CASE( jpdyn_pvo_corr ) ;   CALL iom_put( "utrd_pvo_corr", putrd )   ! planetary vorticity correction 
    366444                                 CALL iom_put( "vtrd_pvo_corr", pvtrd ) 
    367       CASE( jpdyn_bfr )      ;   CALL iom_put( "utrd_bfr2d", putrd )      ! bottom friction due to barotropic currents 
     445      CASE( jpdyn_tau )      ;   CALL iom_put( "utrd_tau2d", putrd )      ! wind stress depth-mean trend 
     446                                 CALL iom_put( "vtrd_tau2d", pvtrd ) 
     447      CASE( jpdyn_bfr )      ;   CALL iom_put( "utrd_bfr2d", putrd )      ! bottom friction depth-mean trend 
    368448                                 CALL iom_put( "vtrd_bfr2d", pvtrd ) 
     449      CASE( jpdyn_tfr )      ;   CALL iom_put( "utrd_tfr2d", putrd )      ! top friction depth-mean trend 
     450                                 CALL iom_put( "vtrd_tfr2d", pvtrd ) 
    369451      END SELECT 
    370452      ! 
  • NEMO/branches/UKMO/NEMO_4.0.4_momentum_trends/src/OCE/ZDF/zdfdrg.F90

    r14075 r15168  
    191191      END DO 
    192192      ! 
     193      IF( l_trddyn ) THEN      ! trends: send trends to trddyn for further diagnostics 
     194         ztrdu(:,:,:) = pua(:,:,:) - ztrdu(:,:,:) 
     195         ztrdv(:,:,:) = pva(:,:,:) - ztrdv(:,:,:) 
     196         CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfre, kt ) 
     197         DEALLOCATE( ztrdu, ztrdv ) 
     198      ENDIF 
     199      ! 
    193200      IF( ln_isfcav ) THEN        ! ocean cavities 
     201         IF( l_trddyn ) THEN      ! trends: store the input trends 
     202            ztrdu(:,:,:) = pua(:,:,:) 
     203            ztrdv(:,:,:) = pva(:,:,:) 
     204         ENDIF 
    194205         DO jj = 2, jpjm1 
    195206            DO ji = 2, jpim1 
     
    205216           END DO 
    206217         END DO 
    207       ENDIF 
    208       ! 
    209       IF( l_trddyn ) THEN      ! trends: send trends to trddyn for further diagnostics 
    210          ztrdu(:,:,:) = pua(:,:,:) - ztrdu(:,:,:) 
    211          ztrdv(:,:,:) = pva(:,:,:) - ztrdv(:,:,:) 
    212          CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfr, kt ) 
    213          DEALLOCATE( ztrdu, ztrdv ) 
    214       ENDIF 
     218         IF( l_trddyn ) THEN      ! trends: send trends to trddyn for further diagnostics 
     219            ztrdu(:,:,:) = pua(:,:,:) - ztrdu(:,:,:) 
     220            ztrdv(:,:,:) = pva(:,:,:) - ztrdv(:,:,:) 
     221            CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_tfre, kt ) 
     222         ENDIF 
     223      ENDIF 
     224      ! 
    215225      !                                          ! print mean trends (used for debugging) 
    216226      IF(ln_ctl)   CALL prt_ctl( tab3d_1=pua, clinfo1=' bfr  - Ua: ', mask1=umask,               & 
Note: See TracChangeset for help on using the changeset viewer.