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 457 for trunk/NEMO/OPA_SRC/TRA/traldf_bilap.F90 – NEMO

Ignore:
Timestamp:
2006-05-10T19:01:19+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_049:RB: reorganization of tracers part, remove traadv_cen2_atsk.h90 traldf_iso_zps.F90 trazdf_iso.F90 trazdf_iso_vopt.F90, change atsk routines to jki

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/TRA/traldf_bilap.F90

    r258 r457  
    5050      !!      evaluated using before fields (forward time scheme). The hor. 
    5151      !!      diffusive trends of temperature (idem for salinity) is given by: 
    52       !!       * s-coordinate ('key_s_coord' defined), the vertical scale  
    53       !!      factors e3. are inside the derivatives: 
    5452      !!      Laplacian of tb: 
    5553      !!         zlt   = 1/(e1t*e2t*e3t) {  di-1[ e2u*e3u/e1u di(tb) ] 
     
    6159      !!         difft = 1/(e1t*e2t*e3t) {  di-1[ e2u*e3u/e1u di(zlt) ] 
    6260      !!                                  + dj-1[ e1v*e3v/e2v dj(zlt) ]  } 
    63       !!       * z-coordinate (default key), e3t=e3u=e3v, the trend becomes: 
    64       !!      Laplacian of tb: 
    65       !!         zlt   = 1/(e1t*e2t) {  di-1[ e2u/e1u di(tb) ] 
    66       !!                              + dj-1[ e1v/e2v dj(tb) ] } 
    67       !!      Multiply by the eddy diffusivity coef. and insure lateral bc: 
    68       !!        zlt   = ahtt * zlt 
    69       !!        call to lbc_lnk 
    70       !!      Bilaplacian (laplacian of zlt): 
    71       !!         difft = 1/(e1t*e2t) {  di-1[ e2u/e1u di(zlt) ] 
    72       !!                              + dj-1[ e1v/e2v dj(zlt) ]  } 
     61      !!      Note: if key_zco defined, e3t=e3u=e3v, they are simplified. 
    7362      !! 
    7463      !!      Add this trend to the general trend (ta,sa): 
     
    7766      !! ** Action : - Update (ta,sa) arrays with the before iso-level 
    7867      !!               biharmonic mixing trend. 
    79       !!             - Save the trends in (ztdta,ztdsa) ('key_trdtra') 
    8068      !! 
    8169      !! History : 
     
    8876      !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    8977      !!   9.0  !  04-08  (C. Talandier) New trends organization 
     78      !!        !  05-11  (G. Madec)  zps or sco as default option 
    9079      !!---------------------------------------------------------------------- 
    9180      !! * Modules used 
     
    9887      !! * Local declarations 
    9988      INTEGER ::   ji, jj, jk             ! dummy loop indices 
    100 #if defined key_partial_steps 
    10189      INTEGER ::   iku, ikv               ! temporary integers 
    102 #endif 
    10390      REAL(wp) ::   zta, zsa              ! temporary scalars 
    10491      REAL(wp), DIMENSION(jpi,jpj) ::   &  
    105          zeeu, zeev, zbtr,              & ! workspace 
     92         zeeu, zeev, zbtr,              & ! 2D workspace 
    10693         zlt, zls 
    10794      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   &  
    108          zsu, zsv,                          & ! workspace arrays 
    109          ztdta, ztdsa 
     95         zsu, zsv                         ! 3D workspace  
    11096      !!---------------------------------------------------------------------- 
    11197 
     
    116102      ENDIF 
    117103 
    118       ! Save ta and sa trends 
    119       IF( l_trdtra )   THEN 
    120          ztdta(:,:,:) = ta(:,:,:)  
    121          ztdsa(:,:,:) = sa(:,:,:)  
    122       ENDIF 
    123104 
    124105      !                                                ! =============== 
     
    129110         ! ---------------------------------- 
    130111 
    131          DO jj = 1, jpjm1 
    132             DO ji = 1, fs_jpim1   ! vector opt. 
    133 #if defined key_s_coord || defined key_partial_steps 
    134                ! s-coordinates, vertical scale factor are used 
    135                zbtr(ji,jj) = 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 
    136                zeeu(ji,jj) = e2u(ji,jj) * fse3u(ji,jj,jk) / e1u(ji,jj) * umask(ji,jj,jk) 
    137                zeev(ji,jj) = e1v(ji,jj) * fse3v(ji,jj,jk) / e2v(ji,jj) * vmask(ji,jj,jk) 
    138 #else 
    139                ! z-coordinates, no vertical scale factors 
    140                zbtr(ji,jj) = 1. / ( e1t(ji,jj)*e2t(ji,jj) ) 
    141                zeeu(ji,jj) = e2u(ji,jj) / e1u(ji,jj) * umask(ji,jj,jk) 
    142                zeev(ji,jj) = e1v(ji,jj) / e2v(ji,jj) * vmask(ji,jj,jk) 
    143 #endif 
    144             END DO 
    145          END DO 
     112         IF( lk_zco ) THEN      ! z-coordinate (1D arrays): no vertical scale factors 
     113            DO jj = 1, jpjm1 
     114               DO ji = 1, fs_jpim1   ! vector opt. 
     115                  zbtr(ji,jj) = 1. / ( e1t(ji,jj)*e2t(ji,jj) ) 
     116                  zeeu(ji,jj) = e2u(ji,jj) / e1u(ji,jj) * umask(ji,jj,jk) 
     117                  zeev(ji,jj) = e1v(ji,jj) / e2v(ji,jj) * vmask(ji,jj,jk) 
     118               END DO 
     119            END DO 
     120         ELSE                   ! All coordinates (3D arrays): vertical scale factor are used 
     121            DO jj = 1, jpjm1 
     122               DO ji = 1, fs_jpim1   ! vector opt. 
     123                  zbtr(ji,jj) = 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) ) 
     124                  zeeu(ji,jj) = e2u(ji,jj) * fse3u(ji,jj,jk) / e1u(ji,jj) * umask(ji,jj,jk) 
     125                  zeev(ji,jj) = e1v(ji,jj) * fse3v(ji,jj,jk) / e2v(ji,jj) * vmask(ji,jj,jk) 
     126               END DO 
     127            END DO 
     128         ENDIF 
    146129 
    147130 
     
    158141            END DO 
    159142         END DO 
    160 #if defined key_partial_steps 
    161          DO jj = 1, jpj-1 
    162             DO ji = 1, jpi-1 
    163                ! last level 
    164                iku = MIN ( mbathy(ji,jj), mbathy(ji+1,jj  ) ) - 1 
    165                ikv = MIN ( mbathy(ji,jj), mbathy(ji  ,jj+1) ) - 1 
    166                IF( iku == jk ) THEN 
    167                   ztu(ji,jj,jk) = zeeu(ji,jj) * gtu(ji,jj) 
    168                   zsu(ji,jj,jk) = zeeu(ji,jj) * gsu(ji,jj) 
    169                ENDIF 
    170                IF( ikv == jk ) THEN 
    171                   ztv(ji,jj,jk) = zeev(ji,jj) * gtv(ji,jj) 
    172                   zsv(ji,jj,jk) = zeev(ji,jj) * gsv(ji,jj) 
    173                ENDIF 
    174             END DO 
    175          END DO 
    176 #endif 
     143         IF( ln_zps ) THEN      ! set gradient at partial step level 
     144            DO jj = 1, jpjm1 
     145               DO ji = 1, jpim1 
     146                  ! last level 
     147                  iku = MIN ( mbathy(ji,jj), mbathy(ji+1,jj  ) ) - 1 
     148                  ikv = MIN ( mbathy(ji,jj), mbathy(ji  ,jj+1) ) - 1 
     149                  IF( iku == jk ) THEN 
     150                     ztu(ji,jj,jk) = zeeu(ji,jj) * gtu(ji,jj) 
     151                     zsu(ji,jj,jk) = zeeu(ji,jj) * gsu(ji,jj) 
     152                  ENDIF 
     153                  IF( ikv == jk ) THEN 
     154                     ztv(ji,jj,jk) = zeev(ji,jj) * gtv(ji,jj) 
     155                     zsv(ji,jj,jk) = zeev(ji,jj) * gsv(ji,jj) 
     156                  ENDIF 
     157               END DO 
     158            END DO 
     159         ENDIF 
    177160 
    178161         ! Second derivative (divergence) 
     
    223206      !                                                ! =============== 
    224207 
    225       ! save the trends for diagnostic 
    226       ! save the horizontal diffusive trends 
    227       IF( l_trdtra )   THEN 
    228          ztdta(:,:,:) = ta(:,:,:) - ztdta(:,:,:) 
    229          ztdsa(:,:,:) = sa(:,:,:) - ztdsa(:,:,:) 
    230  
    231          CALL trd_mod(ztdta, ztdsa, jpttdldf, 'TRA', kt) 
    232       ENDIF 
    233  
    234       IF(ln_ctl) THEN         ! print mean trends (used for debugging) 
    235          CALL prt_ctl(tab3d_1=ta, clinfo1=' ldf  - Ta: ', mask1=tmask, & 
    236             &         tab3d_2=sa, clinfo2=' Sa: ', mask2=tmask, clinfo3='tra') 
    237       ENDIF 
    238  
    239208      ! "zonal" mean lateral diffusive heat and salt transport 
    240209      IF( ln_diaptr .AND. ( MOD( kt, nf_ptr ) == 0 ) ) THEN 
    241 # if defined key_s_coord || defined key_partial_steps 
     210         IF( lk_zco ) THEN      ! z-coordinate (1D arrays): multiply by the vertical scale factor 
     211            DO jk = 1, jpkm1 
     212               DO jj = 2, jpjm1 
     213                  DO ji = fs_2, fs_jpim1   ! vector opt. 
     214                     ztv(ji,jj,jk) = ztv(ji,jj,jk) * fse3v(ji,jj,jk) 
     215                     zsv(ji,jj,jk) = zsv(ji,jj,jk) * fse3v(ji,jj,jk) 
     216                  END DO 
     217               END DO 
     218            END DO 
     219         ENDIF 
    242220         pht_ldf(:) = ptr_vj( ztv(:,:,:) ) 
    243221         pst_ldf(:) = ptr_vj( zsv(:,:,:) ) 
    244 # else 
    245          DO jk = 1, jpkm1 
    246             DO jj = 2, jpjm1 
    247                DO ji = fs_2, fs_jpim1   ! vector opt. 
    248                   ztv(ji,jj,jk) = ztv(ji,jj,jk) * fse3v(ji,jj,jk) 
    249                   zsv(ji,jj,jk) = zsv(ji,jj,jk) * fse3v(ji,jj,jk) 
    250                END DO 
    251             END DO 
    252          END DO 
    253          pht_ldf(:) = ptr_vj( ztv(:,:,:) ) 
    254          pst_ldf(:) = ptr_vj( zsv(:,:,:) ) 
    255 # endif 
    256222      ENDIF 
    257223 
Note: See TracChangeset for help on using the changeset viewer.