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 12377 for NEMO/trunk/src/OCE/ZDF/zdfddm.F90 – NEMO

Ignore:
Timestamp:
2020-02-12T15:39:06+01:00 (4 years ago)
Author:
acc
Message:

The big one. Merging all 2019 developments from the option 1 branch back onto the trunk.

This changeset reproduces 2019/dev_r11943_MERGE_2019 on the trunk using a 2-URL merge
onto a working copy of the trunk. I.e.:

svn merge --ignore-ancestry \

svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/trunk \
svn+ssh://acc@forge.ipsl.jussieu.fr/ipsl/forge/projets/nemo/svn/NEMO/branches/2019/dev_r11943_MERGE_2019 ./

The --ignore-ancestry flag avoids problems that may otherwise arise from the fact that
the merge history been trunk and branch may have been applied in a different order but
care has been taken before this step to ensure that all applicable fixes and updates
are present in the merge branch.

The trunk state just before this step has been branched to releases/release-4.0-HEAD
and that branch has been immediately tagged as releases/release-4.0.2. Any fixes
or additions in response to tickets on 4.0, 4.0.1 or 4.0.2 should be done on
releases/release-4.0-HEAD. From now on future 'point' releases (e.g. 4.0.2) will
remain unchanged with periodic releases as needs demand. Note release-4.0-HEAD is a
transitional naming convention. Future full releases, say 4.2, will have a release-4.2
branch which fulfills this role and the first point release (e.g. 4.2.0) will be made
immediately following the release branch creation.

2020 developments can be started from any trunk revision later than this one.

Location:
NEMO/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
  • NEMO/trunk/src/OCE/ZDF/zdfddm.F90

    r10068 r12377  
    3030 
    3131   !! * Substitutions 
    32 #  include "vectopt_loop_substitute.h90" 
     32#  include "do_loop_substitute.h90" 
    3333   !!---------------------------------------------------------------------- 
    3434   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    3838CONTAINS 
    3939 
    40    SUBROUTINE zdf_ddm( kt, p_avm, p_avt, p_avs ) 
     40   SUBROUTINE zdf_ddm( kt, Kmm, p_avm, p_avt, p_avs ) 
    4141      !!---------------------------------------------------------------------- 
    4242      !!                  ***  ROUTINE zdf_ddm  *** 
     
    6868      !! References :   Merryfield et al., JPO, 29, 1124-1142, 1999. 
    6969      !!---------------------------------------------------------------------- 
    70       INTEGER, INTENT(in   ) ::   kt       ! ocean time-step indexocean time step 
     70      INTEGER, INTENT(in   ) ::   kt       ! ocean time-step index 
     71      INTEGER, INTENT(in   ) ::   Kmm      ! ocean time level index 
    7172      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   p_avm   !  Kz on momentum    (w-points) 
    7273      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   p_avt   !  Kz on temperature (w-points) 
     
    9192!!gm                            and many acces in memory 
    9293          
    93          DO jj = 1, jpj                !==  R=zrau = (alpha / beta) (dk[t] / dk[s])  ==! 
    94             DO ji = 1, jpi 
    95                zrw =   ( gdepw_n(ji,jj,jk  ) - gdept_n(ji,jj,jk) )   & 
    96 !!gm please, use e3w_n below  
    97                   &  / ( gdept_n(ji,jj,jk-1) - gdept_n(ji,jj,jk) )  
    98                ! 
    99                zaw = (  rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem) * zrw  )  & 
    100                    &    * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 
    101                zbw = (  rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal) * zrw  )  & 
    102                    &    * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 
    103                ! 
    104                zdt = zaw * ( tsn(ji,jj,jk-1,jp_tem) - tsn(ji,jj,jk,jp_tem) ) 
    105                zds = zbw * ( tsn(ji,jj,jk-1,jp_sal) - tsn(ji,jj,jk,jp_sal) )  
    106                IF( ABS( zds) <= 1.e-20_wp )   zds = 1.e-20_wp 
    107                zrau(ji,jj) = MAX(  1.e-20, zdt / zds  )    ! only retains positive value of zrau 
    108             END DO 
    109          END DO 
     94         DO_2D_11_11 
     95            zrw =   ( gdepw(ji,jj,jk  ,Kmm) - gdept(ji,jj,jk,Kmm) )   & 
     96!!gm please, use e3w(:,:,:,Kmm) below  
     97               &  / ( gdept(ji,jj,jk-1,Kmm) - gdept(ji,jj,jk,Kmm) )  
     98            ! 
     99            zaw = (  rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem) * zrw  )  & 
     100                &    * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 
     101            zbw = (  rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal) * zrw  )  & 
     102                &    * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 
     103            ! 
     104            zdt = zaw * ( ts(ji,jj,jk-1,jp_tem,Kmm) - ts(ji,jj,jk,jp_tem,Kmm) ) 
     105            zds = zbw * ( ts(ji,jj,jk-1,jp_sal,Kmm) - ts(ji,jj,jk,jp_sal,Kmm) )  
     106            IF( ABS( zds) <= 1.e-20_wp )   zds = 1.e-20_wp 
     107            zrau(ji,jj) = MAX(  1.e-20, zdt / zds  )    ! only retains positive value of zrau 
     108         END_2D 
    110109 
    111          DO jj = 1, jpj                !==  indicators  ==! 
    112             DO ji = 1, jpi 
    113                ! stability indicator: msks=1 if rn2>0; 0 elsewhere 
    114                IF( rn2(ji,jj,jk) + 1.e-12  <= 0. ) THEN   ;   zmsks(ji,jj) = 0._wp 
    115                ELSE                                       ;   zmsks(ji,jj) = 1._wp 
    116                ENDIF 
    117                ! salt fingering indicator: msksf=1 if R>1; 0 elsewhere             
    118                IF( zrau(ji,jj) <= 1.             ) THEN   ;   zmskf(ji,jj) = 0._wp 
    119                ELSE                                       ;   zmskf(ji,jj) = 1._wp 
    120                ENDIF 
    121                ! diffusive layering indicators:  
    122                !     ! mskdl1=1 if 0< R <1; 0 elsewhere 
    123                IF( zrau(ji,jj) >= 1.             ) THEN   ;   zmskd1(ji,jj) = 0._wp 
    124                ELSE                                       ;   zmskd1(ji,jj) = 1._wp 
    125                ENDIF 
    126                !     ! mskdl2=1 if 0< R <0.5; 0 elsewhere 
    127                IF( zrau(ji,jj) >= 0.5            ) THEN   ;   zmskd2(ji,jj) = 0._wp 
    128                ELSE                                       ;   zmskd2(ji,jj) = 1._wp 
    129                ENDIF 
    130                !   mskdl3=1 if 0.5< R <1; 0 elsewhere 
    131                IF( zrau(ji,jj) <= 0.5 .OR. zrau(ji,jj) >= 1. ) THEN   ;   zmskd3(ji,jj) = 0._wp 
    132                ELSE                                                   ;   zmskd3(ji,jj) = 1._wp 
    133                ENDIF 
    134             END DO 
    135          END DO 
     110         DO_2D_11_11 
     111            ! stability indicator: msks=1 if rn2>0; 0 elsewhere 
     112            IF( rn2(ji,jj,jk) + 1.e-12  <= 0. ) THEN   ;   zmsks(ji,jj) = 0._wp 
     113            ELSE                                       ;   zmsks(ji,jj) = 1._wp 
     114            ENDIF 
     115            ! salt fingering indicator: msksf=1 if R>1; 0 elsewhere             
     116            IF( zrau(ji,jj) <= 1.             ) THEN   ;   zmskf(ji,jj) = 0._wp 
     117            ELSE                                       ;   zmskf(ji,jj) = 1._wp 
     118            ENDIF 
     119            ! diffusive layering indicators:  
     120            !     ! mskdl1=1 if 0< R <1; 0 elsewhere 
     121            IF( zrau(ji,jj) >= 1.             ) THEN   ;   zmskd1(ji,jj) = 0._wp 
     122            ELSE                                       ;   zmskd1(ji,jj) = 1._wp 
     123            ENDIF 
     124            !     ! mskdl2=1 if 0< R <0.5; 0 elsewhere 
     125            IF( zrau(ji,jj) >= 0.5            ) THEN   ;   zmskd2(ji,jj) = 0._wp 
     126            ELSE                                       ;   zmskd2(ji,jj) = 1._wp 
     127            ENDIF 
     128            !   mskdl3=1 if 0.5< R <1; 0 elsewhere 
     129            IF( zrau(ji,jj) <= 0.5 .OR. zrau(ji,jj) >= 1. ) THEN   ;   zmskd3(ji,jj) = 0._wp 
     130            ELSE                                                   ;   zmskd3(ji,jj) = 1._wp 
     131            ENDIF 
     132         END_2D 
    136133         ! mask zmsk in order to have avt and avs masked 
    137134         zmsks(:,:) = zmsks(:,:) * wmask(:,:,jk) 
     
    141138         ! ------------------ 
    142139         ! Constant eddy coefficient: reset to the background value 
    143          DO jj = 1, jpj 
    144             DO ji = 1, jpi 
    145                zinr = 1._wp / zrau(ji,jj) 
    146                ! salt fingering 
    147                zrr = zrau(ji,jj) / rn_hsbfr 
    148                zrr = zrr * zrr 
    149                zavfs = rn_avts / ( 1 + zrr*zrr*zrr ) * zmsks(ji,jj) * zmskf(ji,jj) 
    150                zavft = 0.7 * zavfs * zinr 
    151                ! diffusive layering 
    152                zavdt = 1.3635e-6 * EXP(  4.6 * EXP( -0.54*(zinr-1.) )  ) * zmsks(ji,jj) * zmskd1(ji,jj) 
    153                zavds = zavdt * zmsks(ji,jj) * (  ( 1.85 * zrau(ji,jj) - 0.85 ) * zmskd3(ji,jj)   & 
    154                   &                             +  0.15 * zrau(ji,jj)          * zmskd2(ji,jj)  ) 
    155                ! add to the eddy viscosity coef. previously computed 
    156                p_avs(ji,jj,jk) = p_avt(ji,jj,jk) + zavfs + zavds 
    157                p_avt(ji,jj,jk) = p_avt(ji,jj,jk) + zavft + zavdt 
    158                p_avm(ji,jj,jk) = p_avm(ji,jj,jk) + MAX( zavft + zavdt, zavfs + zavds ) 
    159             END DO 
    160          END DO 
     140         DO_2D_11_11 
     141            zinr = 1._wp / zrau(ji,jj) 
     142            ! salt fingering 
     143            zrr = zrau(ji,jj) / rn_hsbfr 
     144            zrr = zrr * zrr 
     145            zavfs = rn_avts / ( 1 + zrr*zrr*zrr ) * zmsks(ji,jj) * zmskf(ji,jj) 
     146            zavft = 0.7 * zavfs * zinr 
     147            ! diffusive layering 
     148            zavdt = 1.3635e-6 * EXP(  4.6 * EXP( -0.54*(zinr-1.) )  ) * zmsks(ji,jj) * zmskd1(ji,jj) 
     149            zavds = zavdt * zmsks(ji,jj) * (  ( 1.85 * zrau(ji,jj) - 0.85 ) * zmskd3(ji,jj)   & 
     150               &                             +  0.15 * zrau(ji,jj)          * zmskd2(ji,jj)  ) 
     151            ! add to the eddy viscosity coef. previously computed 
     152            p_avs(ji,jj,jk) = p_avt(ji,jj,jk) + zavfs + zavds 
     153            p_avt(ji,jj,jk) = p_avt(ji,jj,jk) + zavft + zavdt 
     154            p_avm(ji,jj,jk) = p_avm(ji,jj,jk) + MAX( zavft + zavdt, zavfs + zavds ) 
     155         END_2D 
    161156         !                                                ! =============== 
    162157      END DO                                              !   End of slab 
    163158      !                                                   ! =============== 
    164159      ! 
    165       IF(ln_ctl) THEN 
     160      IF(sn_cfctl%l_prtctl) THEN 
    166161         CALL prt_ctl(tab3d_1=avt , clinfo1=' ddm  - t: ', tab3d_2=avs , clinfo2=' s: ', kdim=jpk) 
    167162      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.