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 6607 for trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcdmp.F90 – NEMO

Ignore:
Timestamp:
2016-05-23T17:18:38+02:00 (8 years ago)
Author:
cetlod
Message:

trunk:bugfix on passive tracers restoring ; the previous one was not properly done, see ticket 16677

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/TOP_SRC/TRP/trcdmp.F90

    r6309 r6607  
    3838   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   restotr   ! restoring coeff. on tracers (s-1) 
    3939 
    40    INTEGER, PARAMETER           ::   npncts   = 5        ! number of closed sea 
     40   INTEGER, PARAMETER           ::   npncts   = 8        ! number of closed sea 
    4141   INTEGER, DIMENSION(npncts)   ::   nctsi1, nctsj1      ! south-west closed sea limits (i,j) 
    4242   INTEGER, DIMENSION(npncts)   ::   nctsi2, nctsj2      ! north-east closed sea limits (i,j) 
     
    100100            !                                                       ! =========== 
    101101            IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn)    ! save trends  
     102            CALL trc_dta( kt, ztrcdta )   ! read tracer data at nit000 
    102103            ! 
    103104            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
    104105               ! 
    105106               jl = n_trc_index(jn)  
    106                CALL trc_dta( kt, sf_trcdta(jl) )   ! read tracer data at nit000 
    107                ztrcdta(:,:,:) = sf_trcdta(jl)%fnow(:,:,:) * tmask(:,:,:) * rf_trfac(jl) 
    108107               ! 
    109108               SELECT CASE ( nn_zdmp_tr ) 
     
    113112                     DO jj = 2, jpjm1 
    114113                        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) ) 
     114                           tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) * rf_trfac(jl)  - trb(ji,jj,jk,jn) ) 
    116115                        END DO 
    117116                     END DO 
     
    123122                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    124123                           IF( avt(ji,jj,jk) <= 5.e-4_wp )  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) ) 
     124                              tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) * rf_trfac(jl) - trb(ji,jj,jk,jn) ) 
    126125                           ENDIF 
    127126                        END DO 
     
    134133                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    135134                           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) ) 
     135                              tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) * rf_trfac(jl) - trb(ji,jj,jk,jn) ) 
    137136                           END IF 
    138137                        END DO 
     
    239238      !!                nctsi2(), nctsj2() : north-east Closed sea limits (i,j) 
    240239      !!---------------------------------------------------------------------- 
    241       INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    242       ! 
    243       INTEGER ::   ji , jj, jk, jn, jl, jc   ! dummy loop indicesa 
    244       INTEGER ::   isrow                     ! local index 
    245       !!---------------------------------------------------------------------- 
    246       ! 
     240      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
     241      ! 
     242      INTEGER :: ji , jj, jk, jn, jl, jc                     ! dummy loop indicesa 
     243      INTEGER :: isrow                                      ! local index 
     244      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::  ztrcdta   ! 3D  workspace 
     245 
     246      !!---------------------------------------------------------------------- 
     247 
    247248      IF( kt == nit000 ) THEN 
    248249         ! initial values 
     
    262263            ! 
    263264                                                        ! Caspian Sea 
    264             nctsi1(1)   = 332  ; nctsj1(1)   = 243 - isrow 
    265             nctsi2(1)   = 344  ; nctsj2(1)   = 275 - isrow 
    266             !                                         
     265            nctsi1(1)   = 333  ; nctsj1(1)   = 243 - isrow 
     266            nctsi2(1)   = 342  ; nctsj2(1)   = 274 - isrow 
     267            !                                           ! Lake Superior 
     268            nctsi1(2)   = 198  ; nctsj1(2)   = 258 - isrow 
     269            nctsi2(2)   = 204  ; nctsj2(2)   = 262 - isrow 
     270            !                                           ! Lake Michigan 
     271            nctsi1(3)   = 201  ; nctsj1(3)   = 250 - isrow 
     272            nctsi2(3)   = 203  ; nctsj2(3)   = 256 - isrow 
     273            !                                           ! Lake Huron 
     274            nctsi1(4)   = 204  ; nctsj1(4)   = 252 - isrow 
     275            nctsi2(4)   = 209  ; nctsj2(4)   = 256 - isrow 
     276            !                                           ! Lake Erie 
     277            nctsi1(5)   = 206  ; nctsj1(5)   = 249 - isrow 
     278            nctsi2(5)   = 209  ; nctsj2(5)   = 251 - isrow 
     279            !                                           ! Lake Ontario 
     280            nctsi1(6)   = 210  ; nctsj1(6)   = 252 - isrow 
     281            nctsi2(6)   = 212  ; nctsj2(6)   = 252 - isrow 
     282            !                                           ! Victoria Lake 
     283            nctsi1(7)   = 321  ; nctsj1(7)   = 180 - isrow 
     284            nctsi2(7)   = 322  ; nctsj2(7)   = 189 - isrow 
     285            !                                           ! Baltic Sea 
     286            nctsi1(8)   = 297  ; nctsj1(8)   = 270 - isrow 
     287            nctsi2(8)   = 308  ; nctsj2(8)   = 293 - isrow 
     288                                 
    267289            !                                           ! ======================= 
    268290            CASE ( 2 )                                  !  ORCA_R2 configuration 
     
    332354         IF(lwp)  WRITE(numout,*) 
    333355         ! 
     356         CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )    ! Memory allocation 
     357         CALL trc_dta( kt, ztrcdta )   ! read tracer data at nit000 
     358         ! 
    334359         DO jn = 1, jptra 
    335360            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
    336361                jl = n_trc_index(jn) 
    337                 CALL trc_dta( kt, sf_trcdta(jl) )   ! read tracer data at nit000 
     362                IF(lwp)  WRITE(numout,*) 
    338363                DO jc = 1, npncts 
    339364                   DO jk = 1, jpkm1 
    340365                      DO jj = nctsj1(jc), nctsj2(jc) 
    341366                         DO ji = nctsi1(jc), nctsi2(jc) 
    342                             trn(ji,jj,jk,jn) = sf_trcdta(jl)%fnow(ji,jj,jk) * tmask(ji,jj,jk) * rf_trfac(jl) 
     367                            trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk,jl) * rf_trfac(jl) 
    343368                            trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 
    344369                         ENDDO 
     
    348373             ENDIF 
    349374          ENDDO 
    350          ! 
     375          CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )    ! Memory allocation 
     376          ! 
    351377      ENDIF 
    352378      ! 
    353379   END SUBROUTINE trc_dmp_clo 
    354380 
     381  
    355382#else 
    356383   !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.