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 6606 for branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/TRP/trcdmp.F90 – NEMO

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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/TOP_SRC/TRP/trcdmp.F90

    r6308 r6606  
    3535   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   restotr   ! restoring coeff. on tracers (s-1) 
    3636 
    37    INTEGER, PARAMETER           ::   npncts   = 5        ! number of closed sea 
     37   INTEGER, PARAMETER           ::   npncts   = 8        ! number of closed sea 
    3838   INTEGER, DIMENSION(npncts)   ::   nctsi1, nctsj1      ! south-west closed sea limits (i,j) 
    3939   INTEGER, DIMENSION(npncts)   ::   nctsi2, nctsj2      ! north-east closed sea limits (i,j) 
     
    8585      CHARACTER (len=22) :: charout 
    8686      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrtrd 
    87       REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrcdta   ! 3D  workspace 
     87      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::  ztrcdta   ! 3D  workspace 
    8888      !!---------------------------------------------------------------------- 
    8989      ! 
     
    9898      IF( nb_trcdta > 0 ) THEN  ! Initialisation of tracer from a file that may also be used for damping 
    9999         ! 
    100          CALL wrk_alloc( jpi, jpj, jpk, ztrcdta )    ! Memory allocation 
     100         CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )    ! Memory allocation 
     101         CALL trc_dta( kt, ztrcdta )   ! read tracer data at nit000 
    101102         !                                                          ! =========== 
    102103         DO jn = 1, jptra                                           ! tracer loop 
     
    105106            ! 
    106107            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
    107                 
    108108               jl = n_trc_index(jn)  
    109                CALL trc_dta( kt, sf_trcdta(jl) )   ! read tracer data at nit000 
    110                ztrcdta(:,:,:) = sf_trcdta(jl)%fnow(:,:,:) * tmask(:,:,:) * rf_trfac(jl) 
    111  
    112109               SELECT CASE ( nn_zdmp_tr ) 
    113110               ! 
     
    116113                     DO jj = 2, jpjm1 
    117114                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    118                            ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
     115                           ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) * rf_trfac(jl) - trb(ji,jj,jk,jn) ) 
    119116                           tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
    120117                        END DO 
     
    127124                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    128125                           IF( avt(ji,jj,jk) <= 5.e-4_wp )  THEN  
    129                               ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
     126                              ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) * rf_trfac(jl) - trb(ji,jj,jk,jn) ) 
    130127                              tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
    131128                           ENDIF 
     
    139136                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    140137                           IF( fsdept(ji,jj,jk) >= hmlp (ji,jj) ) THEN 
    141                               ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
     138                              ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) * rf_trfac(jl) - trb(ji,jj,jk,jn) ) 
    142139                              tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 
    143140                           END IF 
     
    157154         END DO                                                     ! tracer loop 
    158155         !                                                          ! =========== 
    159          CALL wrk_dealloc( jpi, jpj, jpk, ztrcdta ) 
     156         CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) 
    160157      ENDIF 
    161158      ! 
     
    187184      INTEGER :: ji , jj, jk, jn, jl, jc                     ! dummy loop indicesa 
    188185      INTEGER :: isrow                                      ! local index 
     186      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::  ztrcdta   ! 3D  workspace 
    189187 
    190188      !!---------------------------------------------------------------------- 
     
    207205            ! 
    208206                                                        ! Caspian Sea 
    209             nctsi1(1)   = 332  ; nctsj1(1)   = 243 - isrow 
    210             nctsi2(1)   = 344  ; nctsj2(1)   = 275 - isrow 
    211             !                                         
     207            nctsi1(1)   = 333  ; nctsj1(1)   = 243 - isrow 
     208            nctsi2(1)   = 342  ; nctsj2(1)   = 274 - isrow 
     209            !                                           ! Lake Superior 
     210            nctsi1(2)   = 198  ; nctsj1(2)   = 258 - isrow 
     211            nctsi2(2)   = 204  ; nctsj2(2)   = 262 - isrow 
     212            !                                           ! Lake Michigan 
     213            nctsi1(3)   = 201  ; nctsj1(3)   = 250 - isrow 
     214            nctsi2(3)   = 203  ; nctsj2(3)   = 256 - isrow 
     215            !                                           ! Lake Huron 
     216            nctsi1(4)   = 204  ; nctsj1(4)   = 252 - isrow 
     217            nctsi2(4)   = 209  ; nctsj2(4)   = 256 - isrow 
     218            !                                           ! Lake Erie 
     219            nctsi1(5)   = 206  ; nctsj1(5)   = 249 - isrow 
     220            nctsi2(5)   = 209  ; nctsj2(5)   = 251 - isrow 
     221            !                                           ! Lake Ontario 
     222            nctsi1(6)   = 210  ; nctsj1(6)   = 252 - isrow 
     223            nctsi2(6)   = 212  ; nctsj2(6)   = 252 - isrow 
     224            !                                           ! Victoria Lake 
     225            nctsi1(7)   = 321  ; nctsj1(7)   = 180 - isrow 
     226            nctsi2(7)   = 322  ; nctsj2(7)   = 189 - isrow 
     227            !                                           ! Baltic Sea 
     228            nctsi1(8)   = 297  ; nctsj1(8)   = 270 - isrow 
     229            nctsi2(8)   = 308  ; nctsj2(8)   = 293 - isrow 
     230                                 
    212231            !                                           ! ======================= 
    213232            CASE ( 2 )                                  !  ORCA_R2 configuration 
     
    277296         IF(lwp)  WRITE(numout,*) 
    278297         ! 
     298         CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )    ! Memory allocation 
     299         CALL trc_dta( kt, ztrcdta )   ! read tracer data at nit000 
     300         ! 
    279301         DO jn = 1, jptra 
    280302            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
    281303                jl = n_trc_index(jn) 
    282                 CALL trc_dta( kt, sf_trcdta(jl) )   ! read tracer data at nit000 
     304                IF(lwp)  WRITE(numout,*) 
    283305                DO jc = 1, npncts 
    284306                   DO jk = 1, jpkm1 
    285307                      DO jj = nctsj1(jc), nctsj2(jc) 
    286308                         DO ji = nctsi1(jc), nctsi2(jc) 
    287                             trn(ji,jj,jk,jn) = sf_trcdta(jl)%fnow(ji,jj,jk) * tmask(ji,jj,jk) * rf_trfac(jl) 
     309                            trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk,jl) * rf_trfac(jl) 
    288310                            trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 
    289311                         ENDDO 
     
    293315             ENDIF 
    294316          ENDDO 
     317          CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )    ! Memory allocation 
    295318          ! 
    296319      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.