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 4666 for branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/ZDF – NEMO

Ignore:
Timestamp:
2014-06-11T14:52:23+02:00 (10 years ago)
Author:
mathiot
Message:

#1331 : add ISOMIP config files + ice shelf code

Location:
branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/ZDF
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/ZDF/zdf_oce.F90

    r4147 r4666  
    4040   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   avtb_2d        !: horizontal shape of background Kz profile 
    4141   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   bfrua, bfrva   !: Bottom friction coefficients set in zdfbfr 
     42   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   tfrua, tfrva   !: top friction coefficients set in zdfbfr 
    4243   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avmu , avmv    !: vertical viscosity coef at uw- & vw-pts       [m2/s] 
    4344   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   avm  , avt     !: vertical viscosity & diffusivity coef at w-pt [m2/s] 
     
    5758      ALLOCATE(avmb(jpk) , bfrua(jpi,jpj) ,                         & 
    5859         &     avtb(jpk) , bfrva(jpi,jpj) , avtb_2d(jpi,jpj) ,      & 
     60         &     tfrua(jpi, jpj), tfrva(jpi, jpj)              ,      & 
    5961         &     avmu(jpi,jpj,jpk), avm(jpi,jpj,jpk)           ,      & 
    6062         &     avmv(jpi,jpj,jpk), avt(jpi,jpj,jpk)           , STAT = zdf_oce_alloc ) 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfbfr.F90

    r4624 r4666  
    4141   REAL(wp), PUBLIC ::   rn_bfrien    ! local factor to enhance coefficient bfri (PUBLIC for TAM) 
    4242   LOGICAL , PUBLIC ::   ln_bfr2d     ! logical switch for 2D enhancement (PUBLIC for TAM) 
     43   REAL(wp), PUBLIC ::   rn_tfri1     ! top drag coefficient (linear case)  (PUBLIC for TAM) 
     44   REAL(wp), PUBLIC ::   rn_tfri2     ! top drag coefficient (non linear case) (PUBLIC for TAM) 
     45   REAL(wp), PUBLIC ::   rn_tfri2_max ! Maximum top drag coefficient (non linear case and ln_loglayer=T) (PUBLIC for TAM) 
     46   REAL(wp), PUBLIC ::   rn_tfeb2     ! background top turbulent kinetic energy  [m2/s2] (PUBLIC for TAM) 
     47   REAL(wp), PUBLIC ::   rn_tfrien    ! local factor to enhance coefficient tfri (PUBLIC for TAM) 
     48   LOGICAL , PUBLIC ::   ln_tfr2d     ! logical switch for 2D enhancement (PUBLIC for TAM) 
     49 
    4350   LOGICAL , PUBLIC ::   ln_loglayer  ! switch for log layer bfr coeff. (PUBLIC for TAM) 
    4451   REAL(wp), PUBLIC ::   rn_bfrz0     ! bottom roughness for loglayer bfr coeff (PUBLIC for TAM) 
     52   REAL(wp), PUBLIC ::   rn_tfrz0     ! bottom roughness for loglayer bfr coeff (PUBLIC for TAM) 
    4553   LOGICAL , PUBLIC ::   ln_bfrimp    ! logical switch for implicit bottom friction 
    46    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::  bfrcoef2d            ! 2D bottom drag coefficient (PUBLIC for TAM) 
     54   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:), PUBLIC ::  bfrcoef2d, tfrcoef2d   ! 2D bottom/top drag coefficient (PUBLIC for TAM) 
    4755 
    4856   !! * Substitutions 
     
    6068      !!                ***  FUNCTION zdf_bfr_alloc  *** 
    6169      !!---------------------------------------------------------------------- 
    62       ALLOCATE( bfrcoef2d(jpi,jpj), STAT=zdf_bfr_alloc ) 
     70      ALLOCATE( bfrcoef2d(jpi,jpj), tfrcoef2d(jpi,jpj), STAT=zdf_bfr_alloc ) 
    6371      ! 
    6472      IF( lk_mpp             )   CALL mpp_sum ( zdf_bfr_alloc ) 
     
    8896      INTEGER  ::   ikbt, ikbu, ikbv             ! local integers 
    8997      REAL(wp) ::   zvu, zuv, zecu, zecv, ztmp   ! temporary scalars 
    90       REAL(wp), POINTER, DIMENSION(:,:) ::  zbfrt 
     98      REAL(wp), POINTER, DIMENSION(:,:) ::  zbfrt, ztfrt 
    9199      !!---------------------------------------------------------------------- 
    92100      ! 
     
    101109      IF( nn_bfr == 2 ) THEN                 ! quadratic bottom friction only 
    102110         ! 
    103          CALL wrk_alloc( jpi, jpj, zbfrt ) 
     111         CALL wrk_alloc( jpi, jpj, zbfrt, ztfrt ) 
    104112 
    105113         IF ( ln_loglayer.AND.lk_vvl ) THEN ! "log layer" bottom friction coefficient 
     
    120128                  zbfrt(ji,jj) = MAX(bfrcoef2d(ji,jj), ztmp) 
    121129                  zbfrt(ji,jj) = MIN(zbfrt(ji,jj), rn_bfri2_max) 
     130! (ISF) 
     131                  ikbt = mikt(ji,jj) 
     132! JC: possible WAD implementation should modify line below if layers vanish 
     133                  ztmp = tmask(ji,jj,ikbt) * ( vkarmn / LOG( 0.5_wp * fse3t_n(ji,jj,ikbt) / rn_bfrz0 ))**2._wp 
     134                  ztfrt(ji,jj) = MAX(tfrcoef2d(ji,jj), ztmp) 
     135                  ztfrt(ji,jj) = MIN(ztfrt(ji,jj), rn_tfri2_max) 
     136 
    122137               END DO 
    123138            END DO 
     
    125140         ELSE 
    126141            zbfrt(:,:) = bfrcoef2d(:,:) 
     142            ztfrt(:,:) = tfrcoef2d(:,:) 
    127143         ENDIF 
    128144 
     
    150166               bfrua(ji,jj) = - 0.5_wp * ( zbfrt(ji,jj) + zbfrt(ji+1,jj  ) ) * zecu 
    151167               bfrva(ji,jj) = - 0.5_wp * ( zbfrt(ji,jj) + zbfrt(ji  ,jj+1) ) * zecv 
     168               ! 
     169               ! (ISF) ======================================================================== 
     170               ikbu = miku(ji,jj)         ! ocean bottom level at u- and v-points  
     171               ikbv = mikv(ji,jj)         ! (deepest ocean u- and v-points) 
     172               ! 
     173               zvu  = 0.25 * (  vn(ji,jj  ,ikbu) + vn(ji+1,jj  ,ikbu)     & 
     174                  &           + vn(ji,jj-1,ikbu) + vn(ji+1,jj-1,ikbu)  ) 
     175               zuv  = 0.25 * (  un(ji,jj  ,ikbv) + un(ji-1,jj  ,ikbv)     & 
     176                  &           + un(ji,jj+1,ikbv) + un(ji-1,jj+1,ikbv)  ) 
     177               ! 
     178               zecu = SQRT(  un(ji,jj,ikbu) * un(ji,jj,ikbu) + zvu*zvu + rn_bfeb2 ) 
     179               zecv = SQRT(  vn(ji,jj,ikbv) * vn(ji,jj,ikbv) + zuv*zuv + rn_bfeb2 ) 
     180               ! 
     181               tfrua(ji,jj) = - 0.5_wp * ( ztfrt(ji,jj) + ztfrt(ji+1,jj  ) ) * zecu  
     182               tfrva(ji,jj) = - 0.5_wp * ( ztfrt(ji,jj) + ztfrt(ji  ,jj+1) ) * zecv 
     183               ! (ISF) END ==================================================================== 
     184 
    152185            END DO 
    153186         END DO 
     
    158191         IF(ln_ctl)   CALL prt_ctl( tab2d_1=bfrua, clinfo1=' bfr  - u: ', mask1=umask,        & 
    159192            &                       tab2d_2=bfrva, clinfo2=       ' v: ', mask2=vmask,ovlap=1 ) 
    160          CALL wrk_dealloc( jpi,jpj,zbfrt ) 
     193         CALL wrk_dealloc( jpi,jpj,zbfrt, ztfrt ) 
    161194      ENDIF 
    162195      ! 
     
    183216      INTEGER   ::   ios 
    184217      REAL(wp)  ::   zminbfr, zmaxbfr   ! temporary scalars 
     218      REAL(wp)  ::   zmintfr, zmaxtfr   ! temporary scalars 
    185219      REAL(wp)  ::   ztmp, zfru, zfrv   !    -         - 
    186220      !! 
    187221      NAMELIST/nambfr/ nn_bfr, rn_bfri1, rn_bfri2, rn_bfri2_max, rn_bfeb2, rn_bfrz0, ln_bfr2d, & 
    188                     &  rn_bfrien, ln_bfrimp, ln_loglayer 
     222                    &          rn_tfri1, rn_tfri2, rn_tfri2_max, rn_tfeb2, rn_tfrz0, ln_tfr2d, & 
     223                    &  rn_bfrien, rn_tfrien, ln_bfrimp, ln_loglayer 
    189224      !!---------------------------------------------------------------------- 
    190225      ! 
     
    215250         bfrua(:,:) = 0.e0 
    216251         bfrva(:,:) = 0.e0 
     252         tfrua(:,:) = 0.e0 
     253         tfrva(:,:) = 0.e0 
    217254         ! 
    218255      CASE( 1 ) 
    219256         IF(lwp) WRITE(numout,*) '      linear botton friction' 
    220          IF(lwp) WRITE(numout,*) '      friction coef.   rn_bfri1  = ', rn_bfri1 
     257         IF(lwp) WRITE(numout,*) '      bottom friction coef.   rn_bfri1  = ', rn_bfri1 
    221258         IF( ln_bfr2d ) THEN 
    222259            IF(lwp) WRITE(numout,*) '      read coef. enhancement distribution from file   ln_bfr2d  = ', ln_bfr2d 
    223260            IF(lwp) WRITE(numout,*) '      coef rn_bfri2 enhancement factor                rn_bfrien  = ',rn_bfrien 
     261         ENDIF 
     262         IF(lwp) WRITE(numout,*) '      top    friction coef.   rn_bfri1  = ', rn_bfri1 
     263         IF( ln_tfr2d ) THEN 
     264            IF(lwp) WRITE(numout,*) '      read coef. enhancement distribution from file   ln_tfr2d  = ', ln_tfr2d 
     265            IF(lwp) WRITE(numout,*) '      coef rn_tfri2 enhancement factor                rn_tfrien  = ',rn_tfrien 
    224266         ENDIF 
    225267         ! 
     
    236278         bfrua(:,:) = - bfrcoef2d(:,:) 
    237279         bfrva(:,:) = - bfrcoef2d(:,:) 
     280         ! 
     281         IF(ln_tfr2d) THEN 
     282            ! tfr_coef is a coefficient in [0,1] giving the mask where to apply the bfr enhancement 
     283            CALL iom_open('tfr_coef.nc',inum) 
     284            CALL iom_get (inum, jpdom_data, 'tfr_coef',tfrcoef2d,1) ! tfrcoef2d is used as tmp array 
     285            CALL iom_close(inum) 
     286            tfrcoef2d(:,:) = rn_tfri1 * ( 1 + rn_tfrien * tfrcoef2d(:,:) ) 
     287         ELSE 
     288            tfrcoef2d(:,:) = rn_tfri1  ! initialize tfrcoef2d to the namelist variable 
     289         ENDIF 
     290         ! 
     291         tfrua(:,:) = - tfrcoef2d(:,:) 
     292         tfrva(:,:) = - tfrcoef2d(:,:) 
    238293         ! 
    239294      CASE( 2 ) 
     
    252307            IF(lwp) WRITE(numout,*) '      coef rn_bfri2 enhancement factor                rn_bfrien  = ',rn_bfrien 
    253308         ENDIF 
     309         IF(lwp) WRITE(numout,*) '      quadratic top    friction' 
     310         IF(lwp) WRITE(numout,*) '      friction coef.   rn_bfri2  = ', rn_tfri2 
     311         IF(lwp) WRITE(numout,*) '      Max. coef. (log case)   rn_tfri2_max  = ', rn_tfri2_max 
     312         IF(lwp) WRITE(numout,*) '      background tke   rn_tfeb2  = ', rn_tfeb2 
     313         IF(lwp) WRITE(numout,*) '      log formulation   ln_tfr2d = ', ln_loglayer 
     314         IF(lwp) WRITE(numout,*) '      bottom roughness  rn_tfrz0 [m] = ', rn_tfrz0 
     315         IF( rn_tfrz0<=0.e0 ) THEN 
     316            WRITE(ctmp1,*) '      bottom roughness must be strictly positive' 
     317            CALL ctl_stop( ctmp1 ) 
     318         ENDIF 
     319         IF( ln_tfr2d ) THEN 
     320            IF(lwp) WRITE(numout,*) '      read coef. enhancement distribution from file   ln_tfr2d  = ', ln_tfr2d 
     321            IF(lwp) WRITE(numout,*) '      coef rn_tfri2 enhancement factor                rn_tfrien  = ',rn_tfrien 
     322         ENDIF 
    254323         ! 
    255324         IF(ln_bfr2d) THEN 
     
    263332            bfrcoef2d(:,:) = rn_bfri2  ! initialize bfrcoef2d to the namelist variable 
    264333         ENDIF 
     334 
     335         IF(ln_tfr2d) THEN 
     336            ! tfr_coef is a coefficient in [0,1] giving the mask where to apply the bfr enhancement 
     337            CALL iom_open('tfr_coef.nc',inum) 
     338            CALL iom_get (inum, jpdom_data, 'tfr_coef',tfrcoef2d,1) ! bfrcoef2d is used as tmp array 
     339            CALL iom_close(inum) 
     340            ! 
     341            tfrcoef2d(:,:) = rn_tfri2 * ( 1 + rn_tfrien * tfrcoef2d(:,:) ) 
     342         ELSE 
     343            tfrcoef2d(:,:) = rn_tfri2  ! initialize tfrcoef2d to the namelist variable 
     344         ENDIF 
    265345         ! 
    266346         IF ( ln_loglayer.AND.(.NOT.lk_vvl) ) THEN ! set "log layer" bottom friction once for all 
     
    279359                  bfrcoef2d(ji,jj) = MAX(bfrcoef2d(ji,jj), ztmp) 
    280360                  bfrcoef2d(ji,jj) = MIN(bfrcoef2d(ji,jj), rn_bfri2_max) 
     361                  ikbt = mikt(ji,jj) 
     362                  ztmp = tmask(ji,jj,ikbt) * ( vkarmn / LOG( 0.5_wp * fse3t_n(ji,jj,ikbt) / rn_tfrz0 ))**2._wp 
     363                  tfrcoef2d(ji,jj) = MAX(tfrcoef2d(ji,jj), ztmp) 
     364                  tfrcoef2d(ji,jj) = MIN(tfrcoef2d(ji,jj), rn_tfri2_max) 
    281365               END DO 
    282366            END DO 
     
    308392      zminbfr =  1.e10_wp    ! initialise tracker for minimum of bottom friction coefficient 
    309393      zmaxbfr = -1.e10_wp    ! initialise tracker for maximum of bottom friction coefficient 
     394      zmintfr =  1.e10_wp    ! initialise tracker for minimum of bottom friction coefficient 
     395      zmaxtfr = -1.e10_wp    ! initialise tracker for maximum of bottom friction coefficient 
    310396      ! 
    311397#  if defined key_vectopt_loop 
     
    339425             zminbfr = MIN(  zminbfr, MIN( zfru, ABS( bfrcoef2d(ji,jj) ) )  ) 
    340426             zmaxbfr = MAX(  zmaxbfr, MIN( zfrv, ABS( bfrcoef2d(ji,jj) ) )  ) 
     427! (ISF) 
     428             ikbu = miku(ji,jj)       ! deepest ocean level at u- and v-points 
     429             ikbv = mikv(ji,jj) 
     430             zfru = 0.5 * fse3u(ji,jj,ikbu) / rdt 
     431             zfrv = 0.5 * fse3v(ji,jj,ikbv) / rdt 
     432             IF( ABS( tfrcoef2d(ji,jj) ) > zfru ) THEN 
     433                IF( ln_ctl ) THEN 
     434                   WRITE(numout,*) 'BFR ', narea, nimpp+ji, njmpp+jj, ikbu 
     435                   WRITE(numout,*) 'BFR ', ABS( tfrcoef2d(ji,jj) ), zfru 
     436                ENDIF 
     437                ictu = ictu + 1 
     438             ENDIF 
     439             IF( ABS( tfrcoef2d(ji,jj) ) > zfrv ) THEN 
     440                 IF( ln_ctl ) THEN 
     441                     WRITE(numout,*) 'BFR ', narea, nimpp+ji, njmpp+jj, ikbv 
     442                     WRITE(numout,*) 'BFR ', tfrcoef2d(ji,jj), zfrv 
     443                 ENDIF 
     444                 ictv = ictv + 1 
     445             ENDIF 
     446             zmintfr = MIN(  zmintfr, MIN( zfru, ABS( tfrcoef2d(ji,jj) ) )  ) 
     447             zmaxtfr = MAX(  zmaxtfr, MIN( zfrv, ABS( tfrcoef2d(ji,jj) ) )  ) 
     448 
    341449         END DO 
    342450      END DO 
     
    346454         CALL mpp_min( zminbfr ) 
    347455         CALL mpp_max( zmaxbfr ) 
     456         CALL mpp_min( zmintfr ) 
     457         CALL mpp_max( zmaxtfr ) 
    348458      ENDIF 
    349459      IF( .NOT.ln_bfrimp) THEN 
     
    352462         WRITE(numout,*) ' Bottom friction stability check failed at ', ictv, ' V-points ' 
    353463         WRITE(numout,*) ' Bottom friction coefficient now ranges from: ', zminbfr, ' to ', zmaxbfr 
     464         WRITE(numout,*) ' Bottom friction coefficient now ranges from: ', zmintfr, ' to ', zmaxtfr 
    354465         WRITE(numout,*) ' Bottom friction coefficient will be reduced where necessary' 
    355466      ENDIF 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfddm.F90

    r4624 r4666  
    107107 
    108108      !                                                ! =============== 
    109       DO jk = 2, jpkm1                                 ! Horizontal slab 
     109      !                                                ! Horizontal slab 
    110110         !                                             ! =============== 
     111      DO jj = 1, jpj                                     ! indicators: 
     112         DO ji = 1, jpi 
     113            DO jk = mikt(ji,jj)+1, jpkm1                                 ! Horizontal slab 
    111114         ! Define the mask  
    112115         ! --------------- 
    113          rrau(:,:,jk) = MAX( 1.e-20, rrau(:,:,jk) )         ! only retains positive value of rrau 
    114  
    115          DO jj = 1, jpj                                     ! indicators: 
    116             DO ji = 1, jpi 
     116               rrau(ji,jj,jk) = MAX( 1.e-20, rrau(ji,jj,jk) )         ! only retains positive value of rrau 
     117 
    117118               ! stability indicator: msks=1 if rn2>0; 0 elsewhere 
    118119               IF( rn2(ji,jj,jk) + 1.e-12  <= 0. ) THEN   ;   zmsks(ji,jj) = 0._wp 
     
    136137               ELSE                                                         ;   zmskd3(ji,jj) = 1._wp 
    137138               ENDIF 
    138             END DO 
    139          END DO 
    140139         ! mask zmsk in order to have avt and avs masked 
    141          zmsks(:,:) = zmsks(:,:) * tmask(:,:,jk) 
     140               zmsks(:,:) = zmsks(:,:) * tmask(:,:,jk) 
    142141 
    143142 
     
    145144         ! ------------------ 
    146145         ! Constant eddy coefficient: reset to the background value 
    147 !CDIR NOVERRCHK 
    148          DO jj = 1, jpj 
    149 !CDIR NOVERRCHK 
    150             DO ji = 1, jpi 
    151146               zinr = 1./rrau(ji,jj,jk) 
    152147               ! salt fingering 
     
    165160            END DO 
    166161         END DO 
    167  
    168  
     162      END DO 
    169163         ! Increase avmu, avmv if necessary 
    170164         ! -------------------------------- 
    171165!!gm to be changed following the definition of avm. 
    172          DO jj = 1, jpjm1 
    173             DO ji = 1, fs_jpim1   ! vector opt. 
     166      DO jj = 1, jpjm1 
     167         DO ji = 1, fs_jpim1   ! vector opt. 
     168            DO jk = miku(ji,jj)+1, jpkm1                                 ! Horizontal slab 
    174169               avmu(ji,jj,jk) = MAX( avmu(ji,jj,jk),    & 
    175170                  &                  avt(ji,jj,jk), avt(ji+1,jj,jk),   & 
    176171                  &                  avs(ji,jj,jk), avs(ji+1,jj,jk) )  * umask(ji,jj,jk) 
     172            END DO 
     173            DO jk = mikv(ji,jj)+1, jpkm1 
    177174               avmv(ji,jj,jk) = MAX( avmv(ji,jj,jk),    & 
    178175                  &                  avt(ji,jj,jk), avt(ji,jj+1,jk),   & 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r4624 r4666  
    241241      DO jj = 2, jpjm1            ! en(1)   = rn_ebb taum / rau0  (min value rn_emin0) 
    242242         DO ji = fs_2, fs_jpim1   ! vector opt. 
    243             en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) * tmask(ji,jj,1) 
     243            IF (mikt(ji,jj) .GT. 1) THEN 
     244               en(ji,jj,mikt(ji,jj))=rn_emin 
     245            ELSE 
     246               en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) * tmask(ji,jj,1) 
     247            END IF 
    244248         END DO 
    245249      END DO 
     
    342346      END DO 
    343347      ! 
    344       DO jk = 2, jpkm1           !* Matrix and right hand side in en 
    345          DO jj = 2, jpjm1 
    346             DO ji = fs_2, fs_jpim1   ! vector opt. 
     348      DO jj = 2, jpjm1 
     349         DO ji = fs_2, fs_jpim1   ! vector opt. 
     350            DO jk = mikt(ji,jj)+1, jpkm1           !* Matrix and right hand side in en 
    347351               zcof   = zfact1 * tmask(ji,jj,jk) 
    348352               zzd_up = zcof * ( avm  (ji,jj,jk+1) + avm  (ji,jj,jk  ) )   &  ! upper diagonal 
     
    360364               !                                   ! right hand side in en 
    361365               en(ji,jj,jk) = en(ji,jj,jk) + rdt * (  zesh2  -   avt(ji,jj,jk) * rn2(ji,jj,jk)    & 
    362                   &                                 + zfact3 * dissl(ji,jj,jk) * en (ji,jj,jk)  ) * tmask(ji,jj,jk) 
    363             END DO 
    364          END DO 
    365       END DO 
    366       !                          !* Matrix inversion from level 2 (tke prescribed at level 1) 
    367       DO jk = 3, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    368          DO jj = 2, jpjm1 
    369             DO ji = fs_2, fs_jpim1    ! vector opt. 
     366                  &                                 + zfact3 * dissl(ji,jj,jk) * en (ji,jj,jk)  ) & 
     367                  &                                 * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) 
     368            END DO 
     369            !                          !* Matrix inversion from level 2 (tke prescribed at level 1) 
     370            DO jk = mikt(ji,jj)+2, jpkm1                             ! First recurrence : Dk = Dk - Lk * Uk-1 / Dk-1 
    370371               zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 
    371372            END DO 
    372          END DO 
    373       END DO 
    374       DO jj = 2, jpjm1                             ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
    375          DO ji = fs_2, fs_jpim1    ! vector opt. 
    376             zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1)    ! Surface boudary conditions on tke 
    377          END DO 
    378       END DO 
    379       DO jk = 3, jpkm1 
    380          DO jj = 2, jpjm1 
    381             DO ji = fs_2, fs_jpim1    ! vector opt. 
     373            ! Second recurrence : Lk = RHSk - Lk / Dk-1 * Lk-1 
     374            zd_lw(ji,jj,mikt(ji,jj)+1) = en(ji,jj,mikt(ji,jj)+1) - zd_lw(ji,jj,mikt(ji,jj)+1) * en(ji,jj,mikt(ji,jj))    ! Surface boudary conditions on tke 
     375            ! 
     376            DO jk = mikt(ji,jj)+2, jpkm1 
    382377               zd_lw(ji,jj,jk) = en(ji,jj,jk) - zd_lw(ji,jj,jk) / zdiag(ji,jj,jk-1) *zd_lw(ji,jj,jk-1) 
    383378            END DO 
    384          END DO 
    385       END DO 
    386       DO jj = 2, jpjm1                             ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    387          DO ji = fs_2, fs_jpim1    ! vector opt. 
     379            ! 
     380            ! thrid recurrence : Ek = ( Lk - Uk * Ek+1 ) / Dk 
    388381            en(ji,jj,jpkm1) = zd_lw(ji,jj,jpkm1) / zdiag(ji,jj,jpkm1) 
    389          END DO 
    390       END DO 
    391       DO jk = jpk-2, 2, -1 
    392          DO jj = 2, jpjm1 
    393             DO ji = fs_2, fs_jpim1    ! vector opt. 
     382            ! 
     383            DO jk = jpk-2, mikt(ji,jj)+1, -1 
    394384               en(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * en(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 
    395385            END DO 
    396          END DO 
    397       END DO 
    398       DO jk = 2, jpkm1                             ! set the minimum value of tke 
    399          DO jj = 2, jpjm1 
    400             DO ji = fs_2, fs_jpim1   ! vector opt. 
     386            ! 
     387            DO jk = mikt(ji,jj), jpkm1                             ! set the minimum value of tke 
    401388               en(ji,jj,jk) = MAX( en(ji,jj,jk), rn_emin ) * tmask(ji,jj,jk) 
    402389            END DO 
     
    412399               DO ji = fs_2, fs_jpim1   ! vector opt. 
    413400                  en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -fsdepw(ji,jj,jk) / htau(ji,jj) )   & 
    414                      &                                               * ( 1._wp - fr_i(ji,jj) )  * tmask(ji,jj,jk) 
     401                     &                                               * ( 1._wp - fr_i(ji,jj) )  * tmask(ji,jj,jk) * tmask(ji,jj,1) 
    415402               END DO 
    416403            END DO 
     
    421408               jk = nmln(ji,jj) 
    422409               en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -fsdepw(ji,jj,jk) / htau(ji,jj) )   & 
    423                   &                                               * ( 1._wp - fr_i(ji,jj) )  * tmask(ji,jj,jk) 
     410                  &                                               * ( 1._wp - fr_i(ji,jj) )  * tmask(ji,jj,jk) * tmask(ji,jj,1) 
    424411            END DO 
    425412         END DO 
     
    433420                  ztx2 = utau(ji-1,jj  ) + utau(ji,jj) 
    434421                  zty2 = vtau(ji  ,jj-1) + vtau(ji,jj) 
    435                   ztau = 0.5_wp * SQRT( ztx2 * ztx2 + zty2 * zty2 )    ! module of the mean stress  
     422                  ztau = 0.5_wp * SQRT( ztx2 * ztx2 + zty2 * zty2 ) * tmask(ji,jj,1)    ! module of the mean stress  
    436423                  zdif = taum(ji,jj) - ztau                            ! mean of modulus - modulus of the mean  
    437424                  zdif = rhftau_scl * MAX( 0._wp, zdif + rhftau_add )  ! apply some modifications... 
    438425                  en(ji,jj,jk) = en(ji,jj,jk) + zbbrau * zdif * EXP( -fsdepw(ji,jj,jk) / htau(ji,jj) )   & 
    439                      &                                        * ( 1._wp - fr_i(ji,jj) ) * tmask(ji,jj,jk) 
     426                     &                                        * ( 1._wp - fr_i(ji,jj) ) * tmask(ji,jj,jk) * tmask(ji,jj,jk-1) * tmask(ji,jj,1) 
    440427               END DO 
    441428            END DO 
     
    506493      ! 
    507494      IF( ln_mxl0 ) THEN            ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rau0*g) 
    508          zraug = vkarmn * 2.e5_wp / ( rau0 * grav ) 
    509          zmxlm(:,:,1) = MAX(  rn_mxl0,  zraug * taum(:,:)  ) 
    510       ELSE                          ! surface set to the minimum value 
    511          zmxlm(:,:,1) = rn_mxl0 
     495         DO jj = 2, jpjm1 
     496            DO ji = fs_2, fs_jpim1 
     497               IF (mikt(ji,jj) .GT. 1) THEN 
     498                  zmxlm(ji,jj,mikt(ji,jj)) = rmxl_min 
     499               ELSE 
     500                  zraug = vkarmn * 2.e5_wp / ( rau0 * grav ) 
     501                  zmxlm(ji,jj,mikt(ji,jj)) = MAX( rn_mxl0, zraug * taum(ji,jj) ) 
     502               END IF 
     503            END DO 
     504         END DO 
     505      ELSE  
     506         DO jj = 2, jpjm1 
     507            DO ji = fs_2, fs_jpim1                         ! surface set to the minimum value 
     508               zmxlm(ji,jj,mikt(ji,jj)) = MAX( tmask(ji,jj,1) * rn_mxl0, rmxl_min) 
     509            END DO 
     510         END DO 
    512511      ENDIF 
    513512      zmxlm(:,:,jpk)  = rmxl_min     ! last level set to the interior minium value 
    514513      ! 
    515514!CDIR NOVERRCHK 
    516       DO jk = 2, jpkm1              ! interior value : l=sqrt(2*e/n^2) 
    517 !CDIR NOVERRCHK 
    518          DO jj = 2, jpjm1 
    519 !CDIR NOVERRCHK 
    520             DO ji = fs_2, fs_jpim1   ! vector opt. 
     515      DO jj = 2, jpjm1 
     516!CDIR NOVERRCHK 
     517         DO ji = fs_2, fs_jpim1   ! vector opt. 
     518            !CDIR NOVERRCHK 
     519            DO jk = mikt(ji,jj)+1, jpkm1              ! interior value : l=sqrt(2*e/n^2) 
    521520               zrn2 = MAX( rn2(ji,jj,jk), rsmall ) 
    522521               zmxlm(ji,jj,jk) = MAX(  rmxl_min,  SQRT( 2._wp * en(ji,jj,jk) / zrn2 )  ) 
    523522            END DO 
     523            zmxld(ji,jj,mikt(ji,jj)) = zmxlm(ji,jj,mikt(ji,jj))   ! surface set to the minimum value  
    524524         END DO 
    525525      END DO 
     
    533533      ! 
    534534      CASE ( 0 )           ! bounded by the distance to surface and bottom 
    535          DO jk = 2, jpkm1 
    536             DO jj = 2, jpjm1 
    537                DO ji = fs_2, fs_jpim1   ! vector opt. 
    538                   zemxl = MIN( fsdepw(ji,jj,jk), zmxlm(ji,jj,jk),   & 
     535         DO jj = 2, jpjm1 
     536            DO ji = fs_2, fs_jpim1   ! vector opt. 
     537               DO jk = mikt(ji,jj)+1, jpkm1 
     538                  zemxl = MIN( fsdepw(ji,jj,jk) - fsdepw(ji,jj,mikt(ji,jj)), zmxlm(ji,jj,jk),   & 
    539539                  &            fsdepw(ji,jj,mbkt(ji,jj)+1) - fsdepw(ji,jj,jk) ) 
    540540                  zmxlm(ji,jj,jk) = zemxl 
     
    545545         ! 
    546546      CASE ( 1 )           ! bounded by the vertical scale factor 
    547          DO jk = 2, jpkm1 
    548             DO jj = 2, jpjm1 
    549                DO ji = fs_2, fs_jpim1   ! vector opt. 
     547         DO jj = 2, jpjm1 
     548            DO ji = fs_2, fs_jpim1   ! vector opt. 
     549               DO jk = mikt(ji,jj)+1, jpkm1 
    550550                  zemxl = MIN( fse3w(ji,jj,jk), zmxlm(ji,jj,jk) ) 
    551551                  zmxlm(ji,jj,jk) = zemxl 
     
    556556         ! 
    557557      CASE ( 2 )           ! |dk[xml]| bounded by e3t : 
    558          DO jk = 2, jpkm1         ! from the surface to the bottom : 
    559             DO jj = 2, jpjm1 
    560                DO ji = fs_2, fs_jpim1   ! vector opt. 
     558         DO jj = 2, jpjm1 
     559            DO ji = fs_2, fs_jpim1   ! vector opt. 
     560               DO jk = mikt(ji,jj)+1, jpkm1         ! from the surface to the bottom : 
    561561                  zmxlm(ji,jj,jk) = MIN( zmxlm(ji,jj,jk-1) + fse3t(ji,jj,jk-1), zmxlm(ji,jj,jk) ) 
    562562               END DO 
    563             END DO 
    564          END DO 
    565          DO jk = jpkm1, 2, -1     ! from the bottom to the surface : 
    566             DO jj = 2, jpjm1 
    567                DO ji = fs_2, fs_jpim1   ! vector opt. 
     563               DO jk = jpkm1, mikt(ji,jj)+1, -1     ! from the bottom to the surface : 
    568564                  zemxl = MIN( zmxlm(ji,jj,jk+1) + fse3t(ji,jj,jk+1), zmxlm(ji,jj,jk) ) 
    569565                  zmxlm(ji,jj,jk) = zemxl 
     
    574570         ! 
    575571      CASE ( 3 )           ! lup and ldown, |dk[xml]| bounded by e3t : 
    576          DO jk = 2, jpkm1         ! from the surface to the bottom : lup 
    577             DO jj = 2, jpjm1 
    578                DO ji = fs_2, fs_jpim1   ! vector opt. 
     572         DO jj = 2, jpjm1 
     573            DO ji = fs_2, fs_jpim1   ! vector opt. 
     574               DO jk = mikt(ji,jj)+1, jpkm1         ! from the surface to the bottom : lup 
    579575                  zmxld(ji,jj,jk) = MIN( zmxld(ji,jj,jk-1) + fse3t(ji,jj,jk-1), zmxlm(ji,jj,jk) ) 
    580576               END DO 
    581             END DO 
    582          END DO 
    583          DO jk = jpkm1, 2, -1     ! from the bottom to the surface : ldown 
    584             DO jj = 2, jpjm1 
    585                DO ji = fs_2, fs_jpim1   ! vector opt. 
     577               DO jk = jpkm1, mikt(ji,jj)+1, -1     ! from the bottom to the surface : ldown 
    586578                  zmxlm(ji,jj,jk) = MIN( zmxlm(ji,jj,jk+1) + fse3t(ji,jj,jk+1), zmxlm(ji,jj,jk) ) 
    587579               END DO 
     
    628620      CALL lbc_lnk( avm, 'W', 1. )      ! Lateral boundary conditions (sign unchanged) 
    629621      ! 
    630       DO jk = 2, jpkm1            !* vertical eddy viscosity at u- and v-points 
     622      DO jj = 2, jpjm1 
     623         DO ji = fs_2, fs_jpim1   ! vector opt. 
     624            DO jk = miku(ji,jj)+1, jpkm1            !* vertical eddy viscosity at u- and v-points 
     625               avmu(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk) + avm(ji+1,jj  ,jk) ) * umask(ji,jj,jk) 
     626            END DO 
     627            DO jk = mikv(ji,jj)+1, jpkm1 
     628               avmv(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk) + avm(ji  ,jj+1,jk) ) * vmask(ji,jj,jk) 
     629            END DO 
     630         END DO 
     631      END DO 
     632      CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. )      ! Lateral boundary conditions 
     633      ! 
     634      IF( nn_pdl == 1 ) THEN      !* Prandtl number case: update avt 
    631635         DO jj = 2, jpjm1 
    632636            DO ji = fs_2, fs_jpim1   ! vector opt. 
    633                avmu(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk) + avm(ji+1,jj  ,jk) ) * umask(ji,jj,jk) 
    634                avmv(ji,jj,jk) = 0.5 * ( avm(ji,jj,jk) + avm(ji  ,jj+1,jk) ) * vmask(ji,jj,jk) 
    635             END DO 
    636          END DO 
    637       END DO 
    638       CALL lbc_lnk( avmu, 'U', 1. )   ;   CALL lbc_lnk( avmv, 'V', 1. )      ! Lateral boundary conditions 
    639       ! 
    640       IF( nn_pdl == 1 ) THEN      !* Prandtl number case: update avt 
    641          DO jk = 2, jpkm1 
    642             DO jj = 2, jpjm1 
    643                DO ji = fs_2, fs_jpim1   ! vector opt. 
     637               DO jk = mikt(ji,jj)+1, jpkm1 
    644638                  zcoef = avm(ji,jj,jk) * 2._wp * fse3w(ji,jj,jk) * fse3w(ji,jj,jk) 
    645639                  !                                          ! shear 
     
    655649                  avt(ji,jj,jk)   = MAX( zpdlr * avt(ji,jj,jk), avtb_2d(ji,jj) * avtb(jk) ) * tmask(ji,jj,jk) 
    656650# if defined key_c1d 
    657                   e_pdl(ji,jj,jk) = zpdlr * tmask(ji,jj,jk)    ! c1d configuration : save masked Prandlt number 
    658                   e_ric(ji,jj,jk) = zri * tmask(ji,jj,jk)                            ! c1d config. : save Ri 
     651                  e_pdl(ji,jj,jk) = zpdlr * tmask(ji,jj,jk)  ! c1d configuration : save masked Prandlt number 
     652                  e_ric(ji,jj,jk) = zri   * tmask(ji,jj,jk)  ! c1d config. : save Ri 
    659653# endif 
    660654              END DO 
  • branches/2014/dev_r4650_UKMO2_ice_shelves/NEMOGCM/NEMO/OPA_SRC/ZDF/zdftmx.F90

    r4624 r4666  
    126126      zkz(:,:) = 0.e0               !* Associated potential energy consummed over the whole water column 
    127127      DO jk = 2, jpkm1 
    128          zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zav_tide(:,:,jk)* tmask(:,:,jk) 
     128         zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zav_tide(:,:,jk)* tmask(:,:,jk) * tmask(:,:,jk-1) 
    129129      END DO 
    130130 
     
    135135      END DO 
    136136 
    137       DO jk = 2, jpkm1              !* Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zav_tide bound by 300 cm2/s 
    138          zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. )   !kz max = 300 cm2/s 
     137      DO jj = 1, jpj                !* Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz to recover en_tmx 
     138         DO ji = 1, jpi 
     139            DO jk = mikt(ji,jj)+1, jpkm1     !* Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zav_tide bound by 300 cm2/s 
     140               zav_tide(ji,jj,jk) = zav_tide(ji,jj,jk) * MIN( zkz(ji,jj), 30./6. )   !kz max = 300 cm2/s 
     141            END DO 
     142         END DO 
    139143      END DO 
    140144 
     
    162166      !                          !   Update  mixing coefs  !                           
    163167      !                          ! ----------------------- ! 
    164       DO jk = 2, jpkm1              !* update momentum & tracer diffusivity with tidal mixing 
    165          avt(:,:,jk) = avt(:,:,jk) + zav_tide(:,:,jk) 
    166          avm(:,:,jk) = avm(:,:,jk) + zav_tide(:,:,jk) 
    167          DO jj = 2, jpjm1 
    168             DO ji = fs_2, fs_jpim1  ! vector opt. 
     168      DO jj = 1, jpj                !* Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz to recover en_tmx 
     169         DO ji = 1, jpi 
     170            DO jk = mikt(ji,jj)+1, jpkm1              !* update momentum & tracer diffusivity with tidal mixing 
     171               avt(ji,jj,jk) = avt(ji,jj,jk) + zav_tide(ji,jj,jk) 
     172               avm(ji,jj,jk) = avm(ji,jj,jk) + zav_tide(ji,jj,jk) 
     173            END DO 
     174         END DO 
     175      END DO 
     176       
     177      DO jj = 2, jpjm1 
     178         DO ji = fs_2, fs_jpim1  ! vector opt. 
     179            DO jk = mikt(ji,jj)+1, jpkm1              !* update momentum & tracer diffusivity with tidal mixing 
    169180               avmu(ji,jj,jk) = avmu(ji,jj,jk) + 0.5 * ( zav_tide(ji,jj,jk) + zav_tide(ji+1,jj  ,jk) ) * umask(ji,jj,jk) 
    170181               avmv(ji,jj,jk) = avmv(ji,jj,jk) + 0.5 * ( zav_tide(ji,jj,jk) + zav_tide(ji  ,jj+1,jk) ) * vmask(ji,jj,jk) 
     
    237248      zsum2(:,:) = 0.e0 
    238249      DO jk= 2, jpk 
    239          zsum1(:,:) = zsum1(:,:) + zempba_3d_1(:,:,jk) * fse3w(:,:,jk) 
    240          zsum2(:,:) = zsum2(:,:) + zempba_3d_2(:,:,jk) * fse3w(:,:,jk)                 
     250         zsum1(:,:) = zsum1(:,:) + zempba_3d_1(:,:,jk) * fse3w(:,:,jk) * tmask(:,:,jk) * tmask(:,:,jk-1) 
     251         zsum2(:,:) = zsum2(:,:) + zempba_3d_2(:,:,jk) * fse3w(:,:,jk) * tmask(:,:,jk) * tmask(:,:,jk-1)                
    241252      END DO 
    242253      DO jj = 1, jpj 
     
    274285      zkz(:,:) = 0.e0               ! Associated potential energy consummed over the whole water column 
    275286      DO jk = 2, jpkm1 
    276          zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zavt_itf(:,:,jk) * tmask(:,:,jk) 
     287         zkz(:,:) = zkz(:,:) + fse3w(:,:,jk) * MAX( 0.e0, rn2(:,:,jk) ) * rau0 * zavt_itf(:,:,jk) * tmask(:,:,jk) * tmask(:,:,jk-1) 
    277288      END DO 
    278289 
     
    284295 
    285296      DO jk = 2, jpkm1              ! Mutiply by zkz to recover en_tmx, BUT bound by 30/6 ==> zavt_itf bound by 300 cm2/s 
    286          zavt_itf(:,:,jk) = zavt_itf(:,:,jk) * MIN( zkz(:,:), 120./10. )   ! kz max = 120 cm2/s 
     297         zavt_itf(:,:,jk) = zavt_itf(:,:,jk) * MIN( zkz(:,:), 120./10. ) * tmask(:,:,jk) * tmask(:,:,jk-1)   ! kz max = 120 cm2/s 
    287298      END DO 
    288299 
     
    377388      READ  ( numnam_cfg, namzdf_tmx, IOSTAT = ios, ERR = 902 ) 
    378389902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_tmx in configuration namelist', lwp ) 
    379       IF(lwm) WRITE ( numond, namzdf_tmx ) 
     390      WRITE ( numond, namzdf_tmx ) 
    380391 
    381392      IF(lwp) THEN                   ! Control print 
     
    414425      ! only the energy available for mixing is taken into account, 
    415426      ! (mixing efficiency tidal dissipation efficiency) 
    416       en_tmx(:,:) = - rn_tfe * rn_me * ( zem2(:,:) * 1.25 + zek1(:,:) ) * tmask(:,:,1) 
     427      en_tmx(:,:) = - rn_tfe * rn_me * ( zem2(:,:) * 1.25 + zek1(:,:) ) * lmask(:,:) 
    417428 
    418429      ! Vertical structure (az_tmx) 
     
    443454         ztpc = 0.e0 
    444455         zpc(:,:,:) = MAX(rn_n2min,rn2(:,:,:)) * zav_tide(:,:,:) 
    445          DO jk= 2, jpkm1 
    446             DO jj = 1, jpj 
    447                DO ji = 1, jpi 
     456         DO jj = 1, jpj 
     457            DO ji = 1, jpi 
     458               DO jk= mikt(ji,jj)+1, jpkm1 
    448459                  ztpc = ztpc + fse3w(ji,jj,jk) * e1t(ji,jj) * e2t(ji,jj) * zpc(ji,jj,jk) * tmask(ji,jj,jk) * tmask_i(ji,jj) 
    449460               END DO 
     
    459470         zav_tide(:,:,:) = MIN( zav_tide(:,:,:), 60.e-4 )    
    460471         zkz(:,:) = 0.e0 
    461          DO jk = 2, jpkm1 
    462          DO jj = 1, jpj 
    463             DO ji = 1, jpi 
     472         DO jj = 1, jpj 
     473            DO ji = 1, jpi 
     474               DO jk = mikt(ji,jj)+1, jpkm1 
    464475               zkz(ji,jj) = zkz(ji,jj) + fse3w(ji,jj,jk) * MAX( 0.e0, rn2(ji,jj,jk) ) * rau0 * zav_tide(ji,jj,jk)* tmask(ji,jj,jk) 
    465             END DO 
    466          END DO 
     476               END DO 
     477            END DO 
    467478         END DO 
    468479         ! Here zkz should be equal to en_tmx ==> multiply by en_tmx/zkz 
     
    484495         WRITE(numout,*) '          Min de zkz ', ztpc, ' Max = ', maxval(zkz(:,:) ) 
    485496 
    486          DO jk = 2, jpkm1 
    487             zav_tide(:,:,jk) = zav_tide(:,:,jk) * MIN( zkz(:,:), 30./6. )   !kz max = 300 cm2/s 
     497         DO jj = 1, jpj 
     498            DO ji = 1, jpi 
     499               DO jk = mikt(ji,jj)+1, jpkm1 
     500                  zav_tide(ji,jj,jk) = zav_tide(ji,jj,jk) * MIN( zkz(ji,jj), 30./6. )   !kz max = 300 cm2/s 
     501               END DO 
     502            END DO 
    488503         END DO 
    489504         ztpc = 0.e0 
Note: See TracChangeset for help on using the changeset viewer.