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 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/DYN/dynbfr.F90 – NEMO

Ignore:
Timestamp:
2016-01-08T10:35:19+01:00 (8 years ago)
Author:
jamesharle
Message:

Update MPP_BDY_UPDATE branch to be consistent with head of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/OPA_SRC/DYN/dynbfr.F90

    r3294 r6225  
    1010 
    1111   !!---------------------------------------------------------------------- 
    12    !!   dyn_bfr      : Update the momentum trend with the bottom friction contribution 
     12   !!   dyn_bfr       : Update the momentum trend with the bottom friction contribution 
    1313   !!---------------------------------------------------------------------- 
    14    USE oce             ! ocean dynamics and tracers variables 
    15    USE dom_oce         ! ocean space and time domain variables  
    16    USE zdf_oce         ! ocean vertical physics variables 
    17    USE zdfbfr          ! ocean bottom friction variables 
    18    USE trdmod          ! ocean active dynamics and tracers trends  
    19    USE trdmod_oce      ! ocean variables trends 
    20    USE in_out_manager  ! I/O manager 
    21    USE prtctl          ! Print control 
    22    USE timing          ! Timing 
    23    USE wrk_nemo        ! Memory Allocation 
     14   USE oce            ! ocean dynamics and tracers variables 
     15   USE dom_oce        ! ocean space and time domain variables  
     16   USE zdf_oce        ! ocean vertical physics variables 
     17   USE zdfbfr         ! ocean bottom friction variables 
     18   USE trd_oce        ! trends: ocean variables 
     19   USE trddyn         ! trend manager: dynamics 
     20   USE in_out_manager ! I/O manager 
     21   USE prtctl         ! Print control 
     22   USE timing         ! Timing 
     23   USE wrk_nemo       ! Memory Allocation 
    2424 
    2525   IMPLICIT NONE 
    2626   PRIVATE 
    2727 
    28    PUBLIC   dyn_bfr    !  routine called by step.F90 
     28   PUBLIC   dyn_bfr   !  routine called by step.F90 
    2929 
    3030   !! * Substitutions 
    31 #  include "domzgr_substitute.h90" 
    32 #  include "zdfddm_substitute.h90" 
    3331#  include "vectopt_loop_substitute.h90" 
    3432   !!---------------------------------------------------------------------- 
     
    5755      IF( nn_timing == 1 )  CALL timing_start('dyn_bfr') 
    5856      ! 
     57!!gm issue: better to put the logical in step to control the call of zdf_bfr 
     58!!          ==> change the logical from ln_bfrimp to ln_bfr_exp !! 
    5959      IF( .NOT.ln_bfrimp) THEN     ! only for explicit bottom friction form 
    6060                                    ! implicit bfr is implemented in dynzdf_imp 
    6161 
     62!!gm bug : time step is only rdt (not 2 rdt if euler start !) 
    6263        zm1_2dt = - 1._wp / ( 2._wp * rdt ) 
    6364 
    64         IF( l_trddyn )   THEN                      ! temporary save of ua and va trends 
    65            CALL wrk_alloc( jpi,jpj,jpk, ztrdu, ztrdv ) 
     65        IF( l_trddyn ) THEN      ! trends: store the input trends 
     66           CALL wrk_alloc( jpi,jpj,jpk,   ztrdu, ztrdv ) 
    6667           ztrdu(:,:,:) = ua(:,:,:) 
    6768           ztrdv(:,:,:) = va(:,:,:) 
     
    6970 
    7071 
    71 # if defined key_vectopt_loop 
    72         DO jj = 1, 1 
    73            DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling) 
    74 # else 
    7572        DO jj = 2, jpjm1 
    7673           DO ji = 2, jpim1 
    77 # endif 
    7874              ikbu = mbku(ji,jj)          ! deepest ocean u- & v-levels 
    7975              ikbv = mbkv(ji,jj) 
    8076              ! 
    8177              ! Apply stability criteria on absolute value  : abs(bfr/e3) < 1/(2dt) => bfr/e3 > -1/(2dt) 
    82               ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + MAX(  bfrua(ji,jj) / fse3u(ji,jj,ikbu) , zm1_2dt  ) * ub(ji,jj,ikbu) 
    83               va(ji,jj,ikbv) = va(ji,jj,ikbv) + MAX(  bfrva(ji,jj) / fse3v(ji,jj,ikbv) , zm1_2dt  ) * vb(ji,jj,ikbv) 
     78              ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + MAX(  bfrua(ji,jj) / e3u_n(ji,jj,ikbu) , zm1_2dt  ) * ub(ji,jj,ikbu) 
     79              va(ji,jj,ikbv) = va(ji,jj,ikbv) + MAX(  bfrva(ji,jj) / e3v_n(ji,jj,ikbv) , zm1_2dt  ) * vb(ji,jj,ikbv) 
    8480           END DO 
    8581        END DO 
    86  
    8782        ! 
    88         IF( l_trddyn )   THEN                      ! save the vertical diffusive trends for further diagnostics 
     83        IF( ln_isfcav ) THEN        ! ocean cavities 
     84           DO jj = 2, jpjm1 
     85              DO ji = 2, jpim1 
     86                 ! (ISF) stability criteria for top friction 
     87                 ikbu = miku(ji,jj)          ! first wet ocean u- & v-levels 
     88                 ikbv = mikv(ji,jj) 
     89                 ! 
     90                 ! Apply stability criteria on absolute value  : abs(bfr/e3) < 1/(2dt) => bfr/e3 > -1/(2dt) 
     91                 ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + MAX(  tfrua(ji,jj) / e3u_n(ji,jj,ikbu) , zm1_2dt  ) * ub(ji,jj,ikbu) & 
     92                    &             * (1.-umask(ji,jj,1)) 
     93                 va(ji,jj,ikbv) = va(ji,jj,ikbv) + MAX(  tfrva(ji,jj) / e3v_n(ji,jj,ikbv) , zm1_2dt  ) * vb(ji,jj,ikbv) & 
     94                    &             * (1.-vmask(ji,jj,1)) 
     95                 ! (ISF) 
     96              END DO 
     97           END DO 
     98        END IF 
     99        ! 
     100        IF( l_trddyn ) THEN      ! trends: send trends to trddyn for further diagnostics 
    89101           ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    90102           ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    91            CALL trd_mod( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_trd_bfr, 'DYN', kt ) 
    92            CALL wrk_dealloc( jpi,jpj,jpk, ztrdu, ztrdv ) 
     103           CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfr, kt ) 
     104           CALL wrk_dealloc( jpi,jpj,jpk,   ztrdu, ztrdv ) 
    93105        ENDIF 
    94106        !                                          ! print mean trends (used for debugging) 
Note: See TracChangeset for help on using the changeset viewer.