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 2068 for branches/DEV_r1837_MLF/NEMO/OPA_SRC/TRA/tranxt.F90 – NEMO

Ignore:
Timestamp:
2010-09-06T17:56:51+02:00 (14 years ago)
Author:
mlelod
Message:

ticket: #663 ensuring restartability and conservation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DEV_r1837_MLF/NEMO/OPA_SRC/TRA/tranxt.F90

    r2005 r2068  
    178178      !! 
    179179      INTEGER  ::   ji, jj, jk      ! dummy loop indices 
    180       REAL(wp) ::   zt_m, zs_m      ! temporary scalars 
     180      REAL(wp) ::   zt_d, zs_d      ! temporary scalars 
    181181      REAL(wp) ::   ztn, zsn        !    -         - 
    182182      !!---------------------------------------------------------------------- 
     
    203203                  !                                         ! time laplacian on tracers 
    204204                  !                                         ! used for both Asselin and Brown & Campana filters 
    205                   zt_m = ta(ji,jj,jk) - 2. * tn(ji,jj,jk) + tb(ji,jj,jk) 
    206                   zs_m = sa(ji,jj,jk) - 2. * sn(ji,jj,jk) + sb(ji,jj,jk) 
     205                  zt_d = ta(ji,jj,jk) - 2. * tn(ji,jj,jk) + tb(ji,jj,jk) 
     206                  zs_d = sa(ji,jj,jk) - 2. * sn(ji,jj,jk) + sb(ji,jj,jk) 
    207207                  ! 
    208208                  !                                         ! swap of arrays 
    209                   tb(ji,jj,jk) = tn(ji,jj,jk) + atfp * zt_m               ! tb <-- tn filtered 
    210                   sb(ji,jj,jk) = sn(ji,jj,jk) + atfp * zs_m               ! sb <-- sn filtered 
     209                  tb(ji,jj,jk) = tn(ji,jj,jk) + atfp * zt_d               ! tb <-- tn filtered 
     210                  sb(ji,jj,jk) = sn(ji,jj,jk) + atfp * zs_d               ! sb <-- sn filtered 
    211211                  tn(ji,jj,jk) = ta(ji,jj,jk)                             ! tn <-- ta 
    212212                  sn(ji,jj,jk) = sa(ji,jj,jk)                             ! sn <-- sa 
    213213                  !                                         ! semi imlicit hpg computation (Brown & Campana) 
    214214                  IF( ln_dynhpg_imp ) THEN 
    215                      ta(ji,jj,jk) = ztn + rbcp * zt_m                     ! ta <-- Brown & Campana average 
    216                      sa(ji,jj,jk) = zsn + rbcp * zs_m                     ! sa <-- Brown & Campana average 
     215                     ta(ji,jj,jk) = ztn + rbcp * zt_d                     ! ta <-- Brown & Campana average 
     216                     sa(ji,jj,jk) = zsn + rbcp * zs_d                     ! sa <-- Brown & Campana average 
    217217                  ENDIF 
    218218               END DO 
     
    254254      REAL     ::   ztc_a, ztc_n, ztc_b            !    -         - 
    255255      REAL     ::   zsc_a, zsc_n, zsc_b            !    -         - 
    256       REAL     ::   ztc_f, zsc_f, ztc_m, zsc_m     !    -         - 
    257       REAL     ::   ze3t_f, ze3t_m                 !    -         - 
     256      REAL     ::   ztc_f, zsc_f, ztc_d, zsc_d     !    -         - 
     257      REAL     ::   ze3t_f, ze3t_d                 !    -         - 
    258258      REAL     ::   zfact1, zfact2                 !    -         - 
    259259      !!---------------------------------------------------------------------- 
     
    274274      ELSE                                             ! apply filter on thickness weighted tracer and swap 
    275275         DO jk = 1, jpkm1 
    276             zfact1 = atfp * r2dt_t(jk) 
     276            zfact1 = atfp * rdttra(jk) 
    277277            zfact2 = zfact1 / rau0 
    278278            DO jj = 1, jpj 
     
    282282                  ze3t_n = fse3t_n(ji,jj,jk) 
    283283                  ze3t_a = fse3t_a(ji,jj,jk) 
    284                   ze3t_m = fse3t_m(ji,jj,jk) 
     284                  ze3t_d = fse3t_d(ji,jj,jk) 
    285285                  !                                         ! tracer content at Before, now and after 
    286286                  ztc_b  = tb(ji,jj,jk) * ze3t_b   ;   zsc_b = sb(ji,jj,jk) * ze3t_b 
     
    290290                  !                                         ! Time laplacian on tracer contents 
    291291                  !                                         ! used for both Asselin and Brown & Campana filters 
    292                   ztc_m  = ztc_a  - 2. * ztc_n + ztc_b 
    293                   zsc_m  = zsc_a  - 2. * zsc_n + zsc_b 
     292                  ztc_d  = ztc_a - 2. * ztc_n + ztc_b 
     293                  zsc_d  = zsc_a - 2. * zsc_n + zsc_b 
    294294                  !                                         ! Asselin Filter on thicknesses and tracer contents 
    295                   ze3t_f = ze3t_n + atfp * ze3t_m 
    296                   ztc_f  = ztc_n  + atfp * ztc_m 
    297                   zsc_f  = zsc_n  + atfp * zsc_m 
     295                  ze3t_f = ze3t_n + atfp * ze3t_d 
     296                  ztc_f  = ztc_n  + atfp * ztc_d 
     297                  zsc_f  = zsc_n  + atfp * zsc_d 
    298298                  !                                         ! Filter correction 
    299299                  IF( jk == 1 ) THEN 
    300                      ze3t_f = ze3t_f - zfact2 * ( emp_b       (ji,jj)    - emp         (ji,jj)    ) 
    301                      ztc_f  = ztc_f  - zfact1 * ( sbc_trd_hc_n(ji,jj)    - sbc_trd_hc_b(ji,jj)    ) 
     300                     ! WRITE(numout,*) 'filter correction: sbc_trd_hc_n' 
     301                     ze3t_f = ze3t_f - zfact2 * ( emp_b       (ji,jj) - emp         (ji,jj) ) 
     302                     ztc_f  = ztc_f  - zfact1 * ( sbc_trd_hc_n(ji,jj) - sbc_trd_hc_b(ji,jj) ) 
    302303                  ENDIF 
    303304                  IF( ln_traqsr .AND. ( jk .LE. nksr ) ) THEN 
     305                     ! WRITE(numout,*) 'jk =', jk 
     306                     ! WRITE(numout,*) 'filter correction: qsr_trd_hc_n' 
    304307                     ztc_f  = ztc_f  - zfact1 * ( qsr_trd_hc_n(ji,jj,jk) - qsr_trd_hc_b(ji,jj,jk) ) 
    305308                  ENDIF 
    306                   !                                         ! swap of arrays 
     309                                                          ! swap of arrays 
    307310                  ze3t_f = 1.e0 / ze3t_f 
    308311                  tb(ji,jj,jk) = ztc_f * ze3t_f                           ! tb <-- tn filtered 
     
    312315                  !                                         ! semi imlicit hpg computation (Brown & Campana) 
    313316                  IF( ln_dynhpg_imp ) THEN 
    314                      ze3t_m       = 1.e0   / ( ze3t_n + rbcp * ze3t_m ) 
    315                      ta(ji,jj,jk) = ze3t_m * ( ztc_n  + rbcp * ztc_m  )   ! ta <-- Brown & Campana average 
    316                      sa(ji,jj,jk) = ze3t_m * ( zsc_n  + rbcp * zsc_m  )   ! sa <-- Brown & Campana average 
     317                     ze3t_d       = 1.e0   / ( ze3t_n + rbcp * ze3t_d ) 
     318                     ta(ji,jj,jk) = ze3t_d * ( ztc_n  + rbcp * ztc_d  )   ! ta <-- Brown & Campana average 
     319                     sa(ji,jj,jk) = ze3t_d * ( zsc_n  + rbcp * zsc_d  )   ! sa <-- Brown & Campana average 
    317320                  ENDIF 
    318321               END DO 
Note: See TracChangeset for help on using the changeset viewer.