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 2460 – NEMO

Changeset 2460


Ignore:
Timestamp:
2010-12-07T17:22:05+01:00 (13 years ago)
Author:
gm
Message:

v3.3beta: #766 share the deepest ocean level indices (end) & #767 bug in dynbrf

Location:
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/DOM/dommsk.F90

    r2392 r2460  
    5555      !!      zontal velocity points (u & v), vorticity points (f) and baro- 
    5656      !!      tropic stream function  points (b). 
    57       !!        Set mbathy to the number of non-zero w-levels of a water column 
    5857      !! 
    5958      !! ** Method  :   The ocean/land mask is computed from the basin bathy- 
     
    7271      !!                   or mbathy(ji+1,jj)  or mbathy(ji+1,jj+1) =< 0 
    7372      !!                1. IF mbathy( ji ,jj) and mbathy( ji ,jj+1) 
    74       !!                and mbathy(ji+1,jj) and mbathy(ji+1,jj+1) >= jk. 
     73      !!                  and mbathy(ji+1,jj) and mbathy(ji+1,jj+1) >= jk. 
    7574      !!      b-point : the same definition as for f-point of the first ocean 
    7675      !!                level (surface level) but with 0 along coastlines. 
     76      !!      tmask_i : interior ocean mask at t-point, i.e. excluding duplicated 
     77      !!                rows/lines due to cyclic or North Fold boundaries as well 
     78      !!                as MPP halos. 
    7779      !! 
    7880      !!        The lateral friction is set through the value of fmask along 
     
    98100      !!        - bmask is  set to 0 on the open boundaries. 
    99101      !! 
    100       !!      Set mbathy to the number of non-zero w-levels of a water column 
    101       !!                  mbathy = min( mbathy, 1 ) + 1 
    102       !!      (note that the minimum value of mbathy is 2). 
    103       !! 
    104102      !! ** Action :   tmask    : land/ocean mask at t-point (=0. or 1.) 
    105103      !!               umask    : land/ocean mask at u-point (=0. or 1.) 
     
    109107      !!               bmask    : land/ocean mask at barotropic stream 
    110108      !!                          function point (=0. or 1.) and set to 0 along lateral boundaries 
    111       !!               mbathy   : number of non-zero w-levels  
     109      !!               tmask_i  : interior ocean mask 
    112110      !!---------------------------------------------------------------------- 
    113111      INTEGER  ::   ji, jj, jk      ! dummy loop indices 
     
    144142      ! N.B. tmask has already the right boundary conditions since mbathy is ok 
    145143      ! 
    146       tmask(:,:,:) = 0.e0 
     144      tmask(:,:,:) = 0._wp 
    147145      DO jk = 1, jpk 
    148146         DO jj = 1, jpj 
    149147            DO ji = 1, jpi 
    150                IF( REAL( mbathy(ji,jj) - jk ) +.1 >= 0.e0 )   tmask(ji,jj,jk) = 1.e0 
     148               IF( REAL( mbathy(ji,jj) - jk, wp ) + 0.1_wp >= 0._wp )   tmask(ji,jj,jk) = 1._wp 
    151149            END DO   
    152150         END DO   
     
    159157            ij0 =  87   ;   ij1 =  88 
    160158            ii0 = 160   ;   ii1 = 161 
    161             tmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 0.e0 
     159            tmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 0._wp 
    162160         ELSE 
    163161            IF(lwp) WRITE(numout,*) 
     
    181179      ijl = nlcj - jprecj + 1 
    182180 
    183       tmask_i( 1 :iif,   :   ) = 0.e0      ! first columns 
    184       tmask_i(iil:jpi,   :   ) = 0.e0      ! last  columns (including mpp extra columns) 
    185       tmask_i(   :   , 1 :ijf) = 0.e0      ! first rows 
    186       tmask_i(   :   ,ijl:jpj) = 0.e0      ! last  rows (including mpp extra rows) 
     181      tmask_i( 1 :iif,   :   ) = 0._wp      ! first columns 
     182      tmask_i(iil:jpi,   :   ) = 0._wp      ! last  columns (including mpp extra columns) 
     183      tmask_i(   :   , 1 :ijf) = 0._wp      ! first rows 
     184      tmask_i(   :   ,ijl:jpj) = 0._wp      ! last  rows (including mpp extra rows) 
    187185 
    188186      ! north fold mask 
    189187      ! --------------- 
    190       tpol(1:jpiglo) = 1.e0  
    191       fpol(1:jpiglo) = 1.e0 
     188      tpol(1:jpiglo) = 1._wp  
     189      fpol(1:jpiglo) = 1._wp 
    192190      IF( jperio == 3 .OR. jperio == 4 ) THEN      ! T-point pivot 
    193          tpol(jpiglo/2+1:jpiglo) = 0.e0 
    194          fpol(     1    :jpiglo) = 0.e0 
     191         tpol(jpiglo/2+1:jpiglo) = 0._wp 
     192         fpol(     1    :jpiglo) = 0._wp 
    195193         IF( mjg(nlej) == jpjglo ) THEN                  ! only half of the nlcj-1 row 
    196194            DO ji = iif+1, iil-1 
     
    200198      ENDIF 
    201199      IF( jperio == 5 .OR. jperio == 6 ) THEN      ! F-point pivot 
    202          tpol(     1    :jpiglo) = 0.e0 
    203          fpol(jpiglo/2+1:jpiglo) = 0.e0 
     200         tpol(     1    :jpiglo) = 0._wp 
     201         fpol(jpiglo/2+1:jpiglo) = 0._wp 
    204202      ENDIF 
    205203 
     
    218216         END DO 
    219217      END DO 
    220       CALL lbc_lnk( umask, 'U', 1. )      ! Lateral boundary conditions 
    221       CALL lbc_lnk( vmask, 'V', 1. ) 
    222       CALL lbc_lnk( fmask, 'F', 1. ) 
     218      CALL lbc_lnk( umask, 'U', 1._wp )      ! Lateral boundary conditions 
     219      CALL lbc_lnk( vmask, 'V', 1._wp ) 
     220      CALL lbc_lnk( fmask, 'F', 1._wp ) 
    223221 
    224222 
     
    230228      !                                    ! cyclic east-west : bmask must be set to 0. on rows 1 and jpi 
    231229      IF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6 ) THEN 
    232          bmask( 1 ,:) = 0.e0 
    233          bmask(jpi,:) = 0.e0 
     230         bmask( 1 ,:) = 0._wp 
     231         bmask(jpi,:) = 0._wp 
    234232      ENDIF 
    235233      IF( nperio == 2 ) THEN               ! south symmetric :  bmask must be set to 0. on row 1 
    236          bmask(:, 1 ) = 0.e0 
     234         bmask(:, 1 ) = 0._wp 
    237235      ENDIF 
    238236      !                                    ! north fold :  
     
    241239            ii = ji + nimpp - 1 
    242240            bmask(ji,jpj-1) = bmask(ji,jpj-1) * tpol(ii) 
    243             bmask(ji,jpj  ) = 0.e0 
     241            bmask(ji,jpj  ) = 0._wp 
    244242         END DO 
    245243      ENDIF 
    246244      IF( nperio == 5 .OR. nperio == 6 ) THEN   ! F-pt pivot and T-pt elliptic eq. : bmask set to 0. on row jpj 
    247          bmask(:,jpj) = 0.e0 
     245         bmask(:,jpj) = 0._wp 
    248246      ENDIF 
    249247      ! 
    250248      IF( lk_mpp ) THEN                    ! mpp specificities 
    251249         !                                      ! bmask is set to zero on the overlap region 
    252          IF( nbondi /= -1 .AND. nbondi /= 2 )   bmask(  1 :jpreci,:) = 0.e0 
    253          IF( nbondi /=  1 .AND. nbondi /= 2 )   bmask(nlci:jpi   ,:) = 0.e0 
    254          IF( nbondj /= -1 .AND. nbondj /= 2 )   bmask(:,  1 :jprecj) = 0.e0 
    255          IF( nbondj /=  1 .AND. nbondj /= 2 )   bmask(:,nlcj:jpj   ) = 0.e0 
     250         IF( nbondi /= -1 .AND. nbondi /= 2 )   bmask(  1 :jpreci,:) = 0._wp 
     251         IF( nbondi /=  1 .AND. nbondi /= 2 )   bmask(nlci:jpi   ,:) = 0._wp 
     252         IF( nbondj /= -1 .AND. nbondj /= 2 )   bmask(:,  1 :jprecj) = 0._wp 
     253         IF( nbondj /=  1 .AND. nbondj /= 2 )   bmask(:,nlcj:jpj   ) = 0._wp 
    256254         ! 
    257255         IF( npolj == 3 .OR. npolj == 4 ) THEN  ! north fold : bmask must be set to 0. on rows jpj-1 and jpj 
     
    259257               ii = ji + nimpp - 1 
    260258               bmask(ji,nlcj-1) = bmask(ji,nlcj-1) * tpol(ii) 
    261                bmask(ji,nlcj  ) = 0.e0 
     259               bmask(ji,nlcj  ) = 0._wp 
    262260            END DO 
    263261         ENDIF 
    264262         IF( npolj == 5 .OR. npolj == 6 ) THEN  ! F-pt pivot and T-pt elliptic eq. : bmask set to 0. on row jpj 
    265263            DO ji = 1, nlci 
    266                bmask(ji,nlcj  ) = 0.e0 
     264               bmask(ji,nlcj  ) = 0._wp 
    267265            END DO 
    268266         ENDIF 
     
    281279         DO jj = 2, jpjm1 
    282280            DO ji = fs_2, fs_jpim1   ! vector opt. 
    283                IF( fmask(ji,jj,jk) == 0. ) THEN 
    284                   fmask(ji,jj,jk) = rn_shlat * MIN( 1., MAX( zwf(ji+1,jj), zwf(ji,jj+1),   & 
    285                      &                                       zwf(ji-1,jj), zwf(ji,jj-1)  )  ) 
     281               IF( fmask(ji,jj,jk) == 0._wp ) THEN 
     282                  fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jj), zwf(ji,jj+1),   & 
     283                     &                                           zwf(ji-1,jj), zwf(ji,jj-1)  )  ) 
    286284               ENDIF 
    287285            END DO 
    288286         END DO 
    289287         DO jj = 2, jpjm1 
    290             IF( fmask(1,jj,jk) == 0. ) THEN 
    291                fmask(1  ,jj,jk) = rn_shlat * MIN( 1., MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) ) 
    292             ENDIF 
    293             IF( fmask(jpi,jj,jk) == 0. ) THEN 
    294                fmask(jpi,jj,jk) = rn_shlat * MIN( 1., MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) ) 
     288            IF( fmask(1,jj,jk) == 0._wp ) THEN 
     289               fmask(1  ,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(2,jj), zwf(1,jj+1), zwf(1,jj-1) ) ) 
     290            ENDIF 
     291            IF( fmask(jpi,jj,jk) == 0._wp ) THEN 
     292               fmask(jpi,jj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) ) 
    295293            ENDIF 
    296294         END DO          
    297295         DO ji = 2, jpim1 
    298             IF( fmask(ji,1,jk) == 0. ) THEN 
    299                fmask(ji, 1 ,jk) = rn_shlat * MIN( 1., MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) ) 
    300             ENDIF 
    301             IF( fmask(ji,jpj,jk) == 0. ) THEN 
    302                fmask(ji,jpj,jk) = rn_shlat * MIN( 1., MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) ) 
     296            IF( fmask(ji,1,jk) == 0._wp ) THEN 
     297               fmask(ji, 1 ,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,1), zwf(ji,2), zwf(ji-1,1) ) ) 
     298            ENDIF 
     299            IF( fmask(ji,jpj,jk) == 0._wp ) THEN 
     300               fmask(ji,jpj,jk) = rn_shlat * MIN( 1._wp , MAX( zwf(ji+1,jpj), zwf(ji-1,jpj), zwf(ji,jpjm1) ) ) 
    303301            ENDIF 
    304302         END DO 
     
    310308            !                                ! Gibraltar strait  : partial slip (fmask=0.5) 
    311309            ij0 = 101   ;   ij1 = 101 
    312             ii0 = 139   ;   ii1 = 140   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  0.5e0 
     310            ii0 = 139   ;   ii1 = 140   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  0.5_wp 
    313311            ij0 = 102   ;   ij1 = 102 
    314             ii0 = 139   ;   ii1 = 140   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  0.5e0 
     312            ii0 = 139   ;   ii1 = 140   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  0.5_wp 
    315313            ! 
    316314            !                                ! Bab el Mandeb : partial slip (fmask=1) 
    317315            ij0 =  87   ;   ij1 =  88 
    318             ii0 = 160   ;   ii1 = 160   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  1.e0 
     316            ii0 = 160   ;   ii1 = 160   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  1._wp 
    319317            ij0 =  88   ;   ij1 =  88 
    320             ii0 = 159   ;   ii1 = 159   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  1.e0 
     318            ii0 = 159   ;   ii1 = 159   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  1._wp 
    321319            ! 
    322320         ENDIF 
     
    324322! We keep this as an example but it is instable in this case  
    325323!         ij0 = 115   ;   ij1 = 115 
    326 !         ii0 = 145   ;   ii1 = 146   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4.0e0 
     324!         ii0 = 145   ;   ii1 = 146   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4._wp 
    327325!         ij0 = 116   ;   ij1 = 116 
    328 !         ii0 = 145   ;   ii1 = 146   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4.0e0 
     326!         ii0 = 145   ;   ii1 = 146   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4._wp 
    329327         ! 
    330328      ENDIF 
     
    336334         IF(lwp) WRITE(numout,*) '      Gibraltar ' 
    337335         ii0 = 283   ;   ii1 = 284        ! Gibraltar Strait  
    338          ij0 = 200   ;   ij1 = 200   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  2.0   
     336         ij0 = 200   ;   ij1 = 200   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  2._wp   
    339337 
    340338         IF(lwp) WRITE(numout,*) '      Bhosporus ' 
    341339         ii0 = 314   ;   ii1 = 315        ! Bhosporus Strait  
    342          ij0 = 208   ;   ij1 = 208   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  2.0   
     340         ij0 = 208   ;   ij1 = 208   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  2._wp   
    343341 
    344342         IF(lwp) WRITE(numout,*) '      Makassar (Top) ' 
    345343         ii0 =  48   ;   ii1 =  48        ! Makassar Strait (Top)  
    346          ij0 = 149   ;   ij1 = 150   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  3.0   
     344         ij0 = 149   ;   ij1 = 150   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  3._wp   
    347345 
    348346         IF(lwp) WRITE(numout,*) '      Lombok ' 
    349347         ii0 =  44   ;   ii1 =  44        ! Lombok Strait  
    350          ij0 = 124   ;   ij1 = 125   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  2.0   
     348         ij0 = 124   ;   ij1 = 125   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) =  2._wp   
    351349 
    352350         IF(lwp) WRITE(numout,*) '      Ombai ' 
    353351         ii0 =  53   ;   ii1 =  53        ! Ombai Strait  
    354          ij0 = 124   ;   ij1 = 125   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 2.0   
     352         ij0 = 124   ;   ij1 = 125   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 2._wp   
    355353 
    356354         IF(lwp) WRITE(numout,*) '      Timor Passage ' 
    357355         ii0 =  56   ;   ii1 =  56        ! Timor Passage  
    358          ij0 = 124   ;   ij1 = 125   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 2.0   
     356         ij0 = 124   ;   ij1 = 125   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 2._wp   
    359357 
    360358         IF(lwp) WRITE(numout,*) '      West Halmahera ' 
    361359         ii0 =  58   ;   ii1 =  58        ! West Halmahera Strait  
    362          ij0 = 141   ;   ij1 = 142   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 3.0   
     360         ij0 = 141   ;   ij1 = 142   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 3._wp   
    363361 
    364362         IF(lwp) WRITE(numout,*) '      East Halmahera ' 
    365363         ii0 =  55   ;   ii1 =  55        ! East Halmahera Strait  
    366          ij0 = 141   ;   ij1 = 142   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 3.0   
     364         ij0 = 141   ;   ij1 = 142   ;   fmask( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1), 1:jpk ) = 3._wp   
    367365         ! 
    368366      ENDIF 
    369367      ! 
    370       CALL lbc_lnk( fmask, 'F', 1. )      ! Lateral boundary conditions on fmask 
    371  
    372        
    373       ! Mbathy set to the number of w-level (minimum value 2) 
    374       ! ----------------------------------- 
    375       DO jj = 1, jpj 
    376          DO ji = 1, jpi 
    377             mbathy(ji,jj) = MAX( 1, mbathy(ji,jj) ) + 1 
    378          END DO 
    379       END DO 
    380        
     368      CALL lbc_lnk( fmask, 'F', 1._wp )      ! Lateral boundary conditions on fmask 
     369 
     370             
    381371      IF( nprint == 1 .AND. lwp ) THEN      ! Control print 
    382372         imsk(:,:) = INT( tmask_i(:,:) ) 
     
    421411         imsk(:,:) = INT( bmask(:,:) ) 
    422412         CALL prihin( imsk(:,:), jpi, jpj, 1, jpi, 1,   & 
    423                &                           1, jpj, 1, 1, numout ) 
     413            &                              1, jpj, 1, 1, numout ) 
    424414      ENDIF 
    425415      ! 
     
    440430      !! 
    441431      !! ** Action : 
    442       !! 
    443432      !!---------------------------------------------------------------------- 
    444433      INTEGER  :: ji, jj, jk, jl      ! dummy loop indices 
     
    484473               zaa = tmask(ji  ,jj,jk) + tmask(ji  ,jj+1,jk)   & 
    485474                  &+ tmask(ji+1,jj,jk) + tmask(ji+1,jj+1,jk) 
    486                IF( ABS(zaa-3.) <= 0.1 )   fmask(ji,jj,jk) = 1. 
     475               IF( ABS(zaa-3._wp) <= 0.1_wp )   fmask(ji,jj,jk) = 1._wp 
    487476            END DO 
    488477         END DO 
     
    497486            DO ji = 2, jpim1 
    498487               zaa = tmask(ji+1,jj,jk) + tmask(ji+1,jj+1,jk) 
    499                IF( ABS(zaa-2.) <= 0.1 .AND. fmask(ji,jj,jk) == 0 ) THEN 
     488               IF( ABS(zaa-2._wp) <= 0.1_wp .AND. fmask(ji,jj,jk) == 0._wp ) THEN 
    500489                  inw = inw + 1 
    501490                  nicoa(inw,1,jk) = ji 
     
    504493               ENDIF 
    505494               zaa = tmask(ji,jj,jk) + tmask(ji,jj+1,jk) 
    506                IF( ABS(zaa-2.) <= 0.1 .AND. fmask(ji,jj,jk) == 0 ) THEN 
     495               IF( ABS(zaa-2._wp) <= 0.1_wp .AND. fmask(ji,jj,jk) == 0._wp ) THEN 
    507496                  ine = ine + 1 
    508497                  nicoa(ine,2,jk) = ji 
     
    524513            DO ji =2, jpim1 
    525514               zaa = tmask(ji,jj+1,jk) + tmask(ji+1,jj+1,jk) 
    526                IF( ABS(zaa-2.) <= 0.1 .AND. fmask(ji,jj,jk) == 0 ) THEN 
     515               IF( ABS(zaa-2._wp) <= 0.1_wp .AND. fmask(ji,jj,jk) == 0._wp ) THEN 
    527516                  ins = ins + 1 
    528517                  nicoa(ins,3,jk) = ji 
     
    531520               ENDIF 
    532521               zaa = tmask(ji+1,jj,jk) + tmask(ji,jj,jk) 
    533                IF( ABS(zaa-2.) <= 0.1 .AND. fmask(ji,jj,jk) == 0 ) THEN 
     522               IF( ABS(zaa-2._wp) <= 0.1_wp .AND. fmask(ji,jj,jk) == 0._wp ) THEN 
    534523                  inn = inn + 1 
    535524                  nicoa(inn,4,jk) = ji 
     
    560549      iind = 0 
    561550      ijnd = 0 
    562       IF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6 ) iind = 2 
    563       IF( nperio == 3 .OR. nperio == 4 .OR. nperio == 5 .OR. nperio == 6 ) ijnd = 2 
     551      IF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6 )   iind = 2 
     552      IF( nperio == 3 .OR. nperio == 4 .OR. nperio == 5 .OR. nperio == 6 )   ijnd = 2 
    564553      DO jk = 1, jpk 
    565554         DO jl = 1, npcoa(1,jk) 
     
    587576            ENDIF 
    588577         END DO 
    589          DO jl=1,npcoa(4,jk) 
     578         DO jl = 1, npcoa(4,jk) 
    590579            IF( njcoa(jl,4,jk)-2 < 1) THEN 
    591                ierror=ierror+1 
    592                icoord(ierror,1)=nicoa(jl,4,jk) 
    593                icoord(ierror,2)=njcoa(jl,4,jk) 
    594                icoord(ierror,3)=jk 
     580               ierror=ierror + 1 
     581               icoord(ierror,1) = nicoa(jl,4,jk) 
     582               icoord(ierror,2) = njcoa(jl,4,jk) 
     583               icoord(ierror,3) = jk 
    595584            ENDIF 
    596585         END DO 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r2443 r2460  
    300300      !!      ntopo= 1 :   mbathy is read in 'bathy_level.nc' NetCDF file 
    301301      !!                   bathy  is read in 'bathy_meter.nc' NetCDF file 
    302       !!      C A U T I O N : mbathy will be modified during the initializa- 
    303       !!      tion phase to become the number of non-zero w-levels of a water 
    304       !!      column, with a minimum value of 1. 
    305302      !! 
    306303      !! ** Action  : - mbathy: level bathymetry (in level index) 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/DYN/dynbfr.F90

    r2287 r2460  
    44   !! Ocean dynamics :  bottom friction component of the momentum mixing trend 
    55   !!============================================================================== 
    6    !! History :  9.0  ! 2008-11  (A. C. Coward)  Original code 
     6   !! History :  3.2  ! 2008-11  (A. C. Coward)  Original code 
    77   !!---------------------------------------------------------------------- 
    88 
     
    3232   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    3333   !! $Id$ 
    34    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     34   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    3535   !!---------------------------------------------------------------------- 
    36  
    3736CONTAINS 
    3837    
     
    4544      !! ** Action  :   (ua,va)   momentum trend increased by bottom friction trend 
    4645      !!--------------------------------------------------------------------- 
    47       USE oce, ONLY :   ztrdu => ta   ! use ta as 3D workspace 
    48       USE oce, ONLY :   ztrdv => sa   ! use sa as 3D workspace 
     46      USE oce, ONLY :   ztrduv => tsa   ! use tsa as 4D workspace 
    4947      !! 
    5048      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    5149      !!  
    52       INTEGER  ::   ji, jj          ! dummy loop indexes 
    53       INTEGER  ::   ikbu  , ikbv    ! temporary integers 
    54       INTEGER  ::   ikbum1, ikbvm1  !    -          - 
    55       REAL(wp) ::   zinv, zbfru, zbfrv   ! temporary scalar 
     50      INTEGER  ::   ji, jj       ! dummy loop indexes 
     51      INTEGER  ::   ikbu, ikbv   ! local integers 
     52      REAL(wp) ::   zm1_2dt      ! local scalar 
    5653      !!--------------------------------------------------------------------- 
    5754      ! 
    58       zinv = -1. / ( 2.*rdt ) 
     55      zm1_2dt = - 1._wp / ( 2._wp * rdt ) 
    5956 
    6057      IF( l_trddyn )   THEN                      ! temporary save of ua and va trends 
    61          ztrdu(:,:,:) = ua(:,:,:) 
    62          ztrdv(:,:,:) = va(:,:,:) 
     58         ztrduv(:,:,:,1) = ua(:,:,:) 
     59         ztrduv(:,:,:,2) = va(:,:,:) 
    6360      ENDIF 
    6461 
     
    7067         DO ji = 2, jpim1 
    7168# endif 
    72             ikbu = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 
    73             ikbv = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 
    74             ikbum1 = MAX( ikbu-1, 1 ) 
    75             ikbvm1 = MAX( ikbv-1, 1 ) 
     69            ikbu = mbku(ji,jj)          ! deepest ocean u- & v-levels 
     70            ikbv = mbkv(ji,jj) 
    7671            ! 
    77             ! Apply stability criteria on absolute value  : Min abs(bfr) => Max (bfr) 
    78             zbfru = MAX( bfrua(ji,jj), fse3u(ji,jj,ikbu)*zinv ) 
    79             zbfrv = MAX( bfrva(ji,jj), fse3v(ji,jj,ikbv)*zinv ) 
    80             ! 
    81             ua(ji,jj,ikbum1) = ua(ji,jj,ikbum1) + zbfru * ub(ji,jj,ikbum1) / fse3u(ji,jj,ikbu) 
    82             va(ji,jj,ikbvm1) = va(ji,jj,ikbvm1) + zbfrv * vb(ji,jj,ikbvm1) / fse3v(ji,jj,ikbv) 
    83             ! 
     72            ! Apply stability criteria on absolute value  : abs(bfr/e3) < 1/(2dt) => bfr/e3 > -1/(2dt) 
     73            ua(ji,jj,ikbu) = ua(ji,jj,ikbu) + MAX(  bfrua(ji,jj) / fse3u(ji,jj,ikbu) , zm1_2dt  ) * ub(ji,jj,ikbu) 
     74            va(ji,jj,ikbv) = va(ji,jj,ikbv) + MAX(  bfrua(ji,jj) / fse3v(ji,jj,ikbu) , zm1_2dt  ) * vb(ji,jj,ikbv) 
    8475         END DO 
    8576      END DO 
     
    8778      ! 
    8879      IF( l_trddyn )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    89          ztrdu(:,:,:) = ua(:,:,:) - ztrdu(:,:,:) 
    90          ztrdv(:,:,:) = va(:,:,:) - ztrdv(:,:,:) 
    91          CALL trd_mod( ztrdu, ztrdv, jpdyn_trd_bfr, 'DYN', kt ) 
     80         ztrduv(:,:,:,1) = ua(:,:,:) - ztrduv(:,:,:,1) 
     81         ztrduv(:,:,:,2) = va(:,:,:) - ztrduv(:,:,:,2) 
     82         CALL trd_mod( ztrduv(:,:,:,1), ztrduv(:,:,:,2), jpdyn_trd_bfr, 'DYN', kt ) 
    9283      ENDIF 
    9384      !                                          ! print mean trends (used for debugging) 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r2338 r2460  
    9797      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    9898      INTEGER  ::   icycle           ! temporary scalar 
    99       INTEGER  ::   ikbu, ikbv        ! temporary scalar 
    10099 
    101100      REAL(wp) ::   zraur, zcoef, z2dt_e, z2dt_b     ! temporary scalars 
     
    265264         DO ji = 2, jpim1 
    266265# endif 
    267             ikbu = MIN( mbathy(ji+1,jj), mbathy(ji,jj) ) 
    268             ikbv = MIN( mbathy(ji,jj+1), mbathy(ji,jj) ) 
    269             ! 
    270266            ! Apply stability criteria for bottom friction 
    271             !RBbug for vvl and external mode we may need to 
    272             ! use varying fse3 
    273             zbfru  (ji,jj) = MAX( bfrua(ji,jj), fse3u(ji,jj,ikbu)*zcoef ) 
    274             zbfrv  (ji,jj) = MAX( bfrva(ji,jj), fse3v(ji,jj,ikbv)*zcoef ) 
     267            !RBbug for vvl and external mode we may need to use varying fse3 
     268            !!gm  Rq: the bottom e3 present the smallest variation, the use of e3u_0 is not a big approx. 
     269            zbfru(ji,jj) = MAX(  bfrua(ji,jj) , fse3u(ji,jj,mbku(ji,jj)) * zcoef ) 
     270            zbfrv(ji,jj) = MAX(  bfrva(ji,jj) , fse3v(ji,jj,mbkv(ji,jj)) * zcoef ) 
    275271         END DO 
    276272      END DO 
Note: See TracChangeset for help on using the changeset viewer.