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 13463 for NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/TOP/TRP/trcdmp.F90 – NEMO

Ignore:
Timestamp:
2020-09-14T17:40:34+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2195:update to trunk 13461

Location:
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS

    • 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_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
         8 
         9# SETTE 
         10^/utils/CI/sette@13382        sette 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/TOP/TRP/trcdmp.F90

    r10351 r13463  
    2424   ! 
    2525   USE iom 
    26    USE prtctl_trc      ! Print control for debbuging 
     26   USE prtctl          ! Print control for debbuging 
    2727 
    2828   IMPLICIT NONE 
     
    4444 
    4545   !! * Substitutions 
    46 #  include "vectopt_loop_substitute.h90" 
     46#  include "do_loop_substitute.h90" 
     47#  include "domzgr_substitute.h90" 
    4748   !!---------------------------------------------------------------------- 
    4849   !! NEMO/TOP 4.0 , NEMO Consortium (2018) 
     
    6364 
    6465 
    65    SUBROUTINE trc_dmp( kt ) 
     66   SUBROUTINE trc_dmp( kt, Kbb, Kmm, ptr, Krhs ) 
    6667      !!---------------------------------------------------------------------- 
    6768      !!                   ***  ROUTINE trc_dmp  *** 
     
    7374      !! ** Method  :   Newtonian damping towards trdta computed  
    7475      !!      and add to the general tracer trends: 
    75       !!                     trn = tra + restotr * (trdta - trb) 
     76      !!                     tr(Kmm) = tr(Krhs) + restotr * (trdta - tr(Kbb)) 
    7677      !!         The trend is computed either throughout the water column 
    7778      !!      (nlmdmptr=0) or in area of weak vertical mixing (nlmdmptr=1) or 
    7879      !!      below the well mixed layer (nlmdmptr=2) 
    7980      !! 
    80       !! ** Action  : - update the tracer trends tra with the newtonian  
     81      !! ** Action  : - update the tracer trends tr(:,:,:,:,Krhs) with the newtonian  
    8182      !!                damping trends. 
    8283      !!              - save the trends ('key_trdmxl_trc') 
    8384      !!---------------------------------------------------------------------- 
    84       INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     85      INTEGER,                                    INTENT(in   ) :: kt              ! ocean time-step index 
     86      INTEGER,                                    INTENT(in   ) :: Kbb, Kmm, Krhs  ! time level indices 
     87      REAL(wp), DIMENSION(jpi,jpj,jpk,jptra,jpt), INTENT(inout) :: ptr             ! passive tracers and RHS of tracer equation 
    8588      ! 
    8689      INTEGER ::   ji, jj, jk, jn, jl   ! dummy loop indices 
     
    100103         DO jn = 1, jptra                                           ! tracer loop 
    101104            !                                                       ! =========== 
    102             IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn)    ! save trends  
     105            IF( l_trdtrc ) ztrtrd(:,:,:) = ptr(:,:,:,jn,Krhs)    ! save trends  
    103106            ! 
    104107            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
    105108               ! 
    106109               jl = n_trc_index(jn)  
    107                CALL trc_dta( kt, sf_trcdta(jl), rf_trfac(jl), ztrcdta )   ! read tracer data at nit000 
     110               CALL trc_dta( kt, Kmm, sf_trcdta(jl), rf_trfac(jl), ztrcdta )   ! read tracer data at nit000 
    108111               ! 
    109112               SELECT CASE ( nn_zdmp_tr ) 
    110113               ! 
    111114               CASE( 0 )                !==  newtonian damping throughout the water column  ==! 
    112                   DO jk = 1, jpkm1 
    113                      DO jj = 2, jpjm1 
    114                         DO ji = fs_2, fs_jpim1   ! vector opt. 
    115                            tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
    116                         END DO 
    117                      END DO 
    118                   END DO 
     115                  DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     116                     ptr(ji,jj,jk,jn,Krhs) = ptr(ji,jj,jk,jn,Krhs) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - ptr(ji,jj,jk,jn,Kbb) ) 
     117                  END_3D 
    119118                  ! 
    120119               CASE ( 1 )                !==  no damping in the turbocline (avt > 5 cm2/s)  ==! 
    121                   DO jk = 1, jpkm1 
    122                      DO jj = 2, jpjm1 
    123                         DO ji = fs_2, fs_jpim1   ! vector opt. 
    124                            IF( avt(ji,jj,jk) <= avt_c )  THEN  
    125                               tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
    126                            ENDIF 
    127                         END DO 
    128                      END DO 
    129                   END DO 
     120                  DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     121                     IF( avt(ji,jj,jk) <= avt_c )  THEN  
     122                        ptr(ji,jj,jk,jn,Krhs) = ptr(ji,jj,jk,jn,Krhs) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - ptr(ji,jj,jk,jn,Kbb) ) 
     123                     ENDIF 
     124                  END_3D 
    130125                  ! 
    131126               CASE ( 2 )               !==  no damping in the mixed layer   ==!  
    132                   DO jk = 1, jpkm1 
    133                      DO jj = 2, jpjm1 
    134                         DO ji = fs_2, fs_jpim1   ! vector opt. 
    135                            IF( gdept_n(ji,jj,jk) >= hmlp (ji,jj) ) THEN 
    136                               tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
    137                            END IF 
    138                         END DO 
    139                      END DO 
    140                   END DO 
     127                  DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     128                     IF( gdept(ji,jj,jk,Kmm) >= hmlp (ji,jj) ) THEN 
     129                        ptr(ji,jj,jk,jn,Krhs) = ptr(ji,jj,jk,jn,Krhs) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - ptr(ji,jj,jk,jn,Kbb) ) 
     130                     END IF 
     131                  END_3D 
    141132                  !   
    142133               END SELECT 
     
    145136            ! 
    146137            IF( l_trdtrc ) THEN 
    147                ztrtrd(:,:,:) = tra(:,:,:,jn) -  ztrtrd(:,:,:) 
    148                CALL trd_tra( kt, 'TRC', jn, jptra_dmp, ztrtrd ) 
     138               ztrtrd(:,:,:) = ptr(:,:,:,jn,Krhs) -  ztrtrd(:,:,:) 
     139               CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_dmp, ztrtrd ) 
    149140            END IF 
    150141            !                                                       ! =========== 
     
    156147      IF( l_trdtrc )  DEALLOCATE( ztrtrd ) 
    157148      !                                          ! print mean trends (used for debugging) 
    158       IF( ln_ctl ) THEN 
     149      IF( sn_cfctl%l_prttrc ) THEN 
    159150         WRITE(charout, FMT="('dmp ')") 
    160          CALL prt_ctl_trc_info(charout) 
    161          CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
     151         CALL prt_ctl_info( charout, cdcomp = 'top' ) 
     152         CALL prt_ctl( tab4d_1=ptr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm, clinfo3='trd' ) 
    162153      ENDIF 
    163154      ! 
     
    181172      !!---------------------------------------------------------------------- 
    182173      ! 
    183       REWIND( numnat_ref )              ! Namelist namtrc_dmp in reference namelist : Passive tracers newtonian damping 
    184174      READ  ( numnat_ref, namtrc_dmp, IOSTAT = ios, ERR = 909) 
    185 909   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrc_dmp in reference namelist', lwp ) 
    186       REWIND( numnat_cfg )              ! Namelist namtrc_dmp in configuration namelist : Passive tracers newtonian damping 
     175909   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namtrc_dmp in reference namelist' ) 
    187176      READ  ( numnat_cfg, namtrc_dmp, IOSTAT = ios, ERR = 910) 
    188 910   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrc_dmp in configuration namelist', lwp ) 
     177910   IF( ios >  0 )   CALL ctl_nam ( ios , 'namtrc_dmp in configuration namelist' ) 
    189178      IF(lwm) WRITE ( numont, namtrc_dmp ) 
    190179 
     
    216205         !Read in mask from file 
    217206         CALL iom_open ( cn_resto_tr, imask) 
    218          CALL iom_get  ( imask, jpdom_autoglo, 'resto', restotr) 
     207         CALL iom_get  ( imask, jpdom_auto, 'resto', restotr) 
    219208         CALL iom_close( imask ) 
    220209         ! 
     
    224213 
    225214 
    226    SUBROUTINE trc_dmp_clo( kt ) 
     215   SUBROUTINE trc_dmp_clo( kt, Kbb, Kmm ) 
    227216      !!--------------------------------------------------------------------- 
    228217      !!                  ***  ROUTINE trc_dmp_clo  *** 
     
    236225      !!                nctsi2(), nctsj2() : north-east Closed sea limits (i,j) 
    237226      !!---------------------------------------------------------------------- 
    238       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
     227      INTEGER, INTENT( in ) ::   kt           ! ocean time-step index 
     228      INTEGER, INTENT( in ) ::   Kbb, Kmm     ! time level indices 
    239229      ! 
    240230      INTEGER :: ji , jj, jk, jn, jl, jc                    ! dummy loop indicesa 
     
    256246            !                                           ! ======================= 
    257247            CASE ( 1 )                                  ! eORCA_R1 configuration 
    258             !                                           ! ======================= 
    259             isrow = 332 - jpjglo 
    260             ! 
    261             nctsi1(1)   = 333  ; nctsj1(1)   = 243 - isrow   ! Caspian Sea 
    262             nctsi2(1)   = 342  ; nctsj2(1)   = 274 - isrow 
    263             !                                         
    264             nctsi1(2)   = 198  ; nctsj1(2)   = 258 - isrow   ! Lake Superior 
    265             nctsi2(2)   = 204  ; nctsj2(2)   = 262 - isrow 
    266             !                                          
    267             nctsi1(3)   = 201  ; nctsj1(3)   = 250 - isrow   ! Lake Michigan 
    268             nctsi2(3)   = 203  ; nctsj2(3)   = 256 - isrow 
    269             !                                         
    270             nctsi1(4)   = 204  ; nctsj1(4)   = 252 - isrow   ! Lake Huron 
    271             nctsi2(4)   = 209  ; nctsj2(4)   = 256 - isrow 
    272             !                                         
    273             nctsi1(5)   = 206  ; nctsj1(5)   = 249 - isrow   ! Lake Erie 
    274             nctsi2(5)   = 209  ; nctsj2(5)   = 251 - isrow 
    275             !                                         
    276             nctsi1(6)   = 210  ; nctsj1(6)   = 252 - isrow   ! Lake Ontario 
    277             nctsi2(6)   = 212  ; nctsj2(6)   = 252 - isrow 
    278             !                                         
    279             nctsi1(7)   = 321  ; nctsj1(7)   = 180 - isrow   ! Victoria Lake 
    280             nctsi2(7)   = 322  ; nctsj2(7)   = 189 - isrow 
    281             !                                         
    282             nctsi1(8)   = 297  ; nctsj1(8)   = 270 - isrow   ! Baltic Sea 
    283             nctsi2(8)   = 308  ; nctsj2(8)   = 293 - isrow 
    284             !                                         
    285             !                                           ! ======================= 
     248               !                                        ! ======================= 
     249               ! 
     250               isrow = 332 - (Nj0glo + 1)   ! was 332 - jpjglo -> jpjglo_old_version = Nj0glo + 1 
     251               ! 
     252               nctsi1(1)   = 333  ; nctsj1(1)   = 243 - isrow   ! Caspian Sea 
     253               nctsi2(1)   = 342  ; nctsj2(1)   = 274 - isrow 
     254               !                                         
     255               nctsi1(2)   = 198  ; nctsj1(2)   = 258 - isrow   ! Lake Superior 
     256               nctsi2(2)   = 204  ; nctsj2(2)   = 262 - isrow 
     257               !                                          
     258               nctsi1(3)   = 201  ; nctsj1(3)   = 250 - isrow   ! Lake Michigan 
     259               nctsi2(3)   = 203  ; nctsj2(3)   = 256 - isrow 
     260               !                                         
     261               nctsi1(4)   = 204  ; nctsj1(4)   = 252 - isrow   ! Lake Huron 
     262               nctsi2(4)   = 209  ; nctsj2(4)   = 256 - isrow 
     263               !                                         
     264               nctsi1(5)   = 206  ; nctsj1(5)   = 249 - isrow   ! Lake Erie 
     265               nctsi2(5)   = 209  ; nctsj2(5)   = 251 - isrow 
     266               !                                         
     267               nctsi1(6)   = 210  ; nctsj1(6)   = 252 - isrow   ! Lake Ontario 
     268               nctsi2(6)   = 212  ; nctsj2(6)   = 252 - isrow 
     269               !                                         
     270               nctsi1(7)   = 321  ; nctsj1(7)   = 180 - isrow   ! Victoria Lake 
     271               nctsi2(7)   = 322  ; nctsj2(7)   = 189 - isrow 
     272               !                                         
     273               nctsi1(8)   = 297  ; nctsj1(8)   = 270 - isrow   ! Baltic Sea 
     274               nctsi2(8)   = 308  ; nctsj2(8)   = 293 - isrow 
     275               ! 
     276               !                                        ! ======================= 
    286277            CASE ( 2 )                                  !  ORCA_R2 configuration 
    287278               !                                        ! ======================= 
     
    296287               nctsi2(3)   = 181  ;  nctsj2(3)   = 112 
    297288              !                                       
    298                nctsi1(4)   =   2  ;  nctsj1(4)   = 107      ! Black Sea 2 : est part of the Black Sea 
     289               nctsi1(4)   =   2  ;  nctsj1(4)   = 107       ! Black Sea 2 : est part of the Black Sea 
    299290               nctsi2(4)   =   6  ;  nctsj2(4)   = 112 
    300291               !                                      
    301292               nctsi1(5)   =  145 ;  nctsj1(5)   = 116       ! Baltic Sea 
    302293               nctsi2(5)   =  150 ;  nctsj2(5)   = 126 
     294               ! 
    303295               !                                        ! ======================= 
    304296            CASE ( 4 )                                  !  ORCA_R4 configuration 
     
    316308               nctsi1(4)   = 75  ;  nctsj1(4)   = 59         ! Baltic Sea 
    317309               nctsi2(4)   = 76  ;  nctsj2(4)   = 61 
     310               ! 
    318311               !                                        ! ======================= 
    319312            CASE ( 025 )                                ! ORCA_R025 configuration 
     
    330323         ENDIF 
    331324         ! 
     325         nctsi1(:) = nctsi1(:) + nn_hls - 1   ;   nctsi2(:) = nctsi2(:) + nn_hls - 1   ! -1 as x-perio included in old input files 
     326         nctsj1(:) = nctsj1(:) + nn_hls       ;   nctsj2(:) = nctsj2(:) + nn_hls 
     327         ! 
    332328         ! convert the position in local domain indices 
    333329         ! -------------------------------------------- 
     
    354350            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
    355351                jl = n_trc_index(jn) 
    356                 CALL trc_dta( kt, sf_trcdta(jl), rf_trfac(jl), ztrcdta )   ! read tracer data at nit000 
     352                CALL trc_dta( kt, Kmm, sf_trcdta(jl), rf_trfac(jl), ztrcdta )   ! read tracer data at nit000 
    357353                DO jc = 1, npncts 
    358354                   DO jk = 1, jpkm1 
    359355                      DO jj = nctsj1(jc), nctsj2(jc) 
    360356                         DO ji = nctsi1(jc), nctsi2(jc) 
    361                             trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk) 
    362                             trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 
     357                            tr(ji,jj,jk,jn,Kmm) = ztrcdta(ji,jj,jk) 
     358                            tr(ji,jj,jk,jn,Kbb) = tr(ji,jj,jk,jn,Kmm) 
    363359                         END DO 
    364360                      END DO 
Note: See TracChangeset for help on using the changeset viewer.