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

Changeset 2464


Ignore:
Timestamp:
2010-12-08T14:26:24+01:00 (13 years ago)
Author:
cetlod
Message:

Improve TOP & OFF components in v3.3beta ; continuation , see ticket #774

Location:
branches/nemo_v3_3_beta/NEMOGCM/NEMO
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/OFF_SRC/domrea.F90

    r2457 r2464  
    44   !! Ocean initialization : read the ocean domain meshmask file(s) 
    55   !!====================================================================== 
     6   !! History :  3.3  ! 2010-05  (C. Ethe)  Full reorganization of the off-line 
     7   !!---------------------------------------------------------------------- 
    68 
    79   !!---------------------------------------------------------------------- 
     
    1315   USE dom_oce         ! ocean space and time domain 
    1416   USE dommsk          ! domain: masks 
    15    USE lbclnk          !  
     17   USE lbclnk          ! lateral boundary condition - MPP exchanges 
    1618   USE in_out_manager  ! I/O manager 
    1719 
     
    2325   !! NEMO/OFF 3.3 , NEMO Consortium (2010) 
    2426   !! $Id$ 
    25    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    26    !!---------------------------------------------------------------------- 
    27  
     27   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     28   !!---------------------------------------------------------------------- 
    2829CONTAINS 
    29  
    30 #if   defined key_mpp_mpi   &&   defined key_dimgout 
    31    !!---------------------------------------------------------------------- 
    32    !!   'key_mpp_mpi'     OR 
    33    !!   'key_dimgout' :         each processor makes its own direct access file  
    34    !!                      use build_nc_meshmask off line to retrieve  
    35    !!                      a ioipsl compliant meshmask file 
    36    !!---------------------------------------------------------------------- 
    37 #  include "domrea_dimg.h90" 
    38  
    39 #else 
    40    !!---------------------------------------------------------------------- 
    41    !!   Default option :                                        NetCDF file 
    42    !!---------------------------------------------------------------------- 
    4330 
    4431   SUBROUTINE dom_rea 
     
    157144         CALL iom_get( inum3, jpdom_data, 'ff', ff ) 
    158145 
    159          CALL iom_get( inum4, jpdom_data, 'mbathy', zmbk ) 
    160       
    161          ! 
    162          mbkt(:,:) = MAX( zmbk(:,:) * tmask(:,:,1), 1._wp )    ! bottom k-index of T-level (=1 over land) 
    163          !   
    164          DO jj = 1, jpjm1                      ! bottom k-index of u- (v-) level 
    165             DO ji = 1, jpim1 
    166                mbku(ji,jj) = MIN(  mbkt(ji+1,jj  ) , mbkt(ji,jj)  ) 
    167                mbkv(ji,jj) = MIN(  mbkt(ji  ,jj+1) , mbkt(ji,jj)  ) 
    168             END DO 
    169          END DO 
    170          ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk  
    171          zmbk(:,:) = REAL( mbku(:,:), wp )   ;   CALL lbc_lnk(zmbk,'U',1.)   ;   mbku  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
    172          zmbk(:,:) = REAL( mbkv(:,:), wp )   ;   CALL lbc_lnk(zmbk,'V',1.)   ;   mbkv  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
    173          !                                                     ! bottom k-index of W-level = mbkt+1 
     146         CALL iom_get( inum4, jpdom_data, 'mbathy', zmbk )              ! number of ocean t-points 
     147         mbathy(:,:) = INT( zmbk(:,:) ) 
     148          
     149         CALL zgr_bot_level                                             ! mbk. arrays (deepest ocean t-, u- & v-points 
    174150         ! 
    175151         IF( ln_sco ) THEN                                         ! s-coordinate 
     
    195171 
    196172  
    197          IF( ln_zps ) THEN    
    198             ! Vertical coordinates and scales factors 
     173         IF( ln_zps ) THEN                                           ! z-coordinate - partial steps 
     174            CALL iom_get( inum4, jpdom_unknown, 'gdept_0', gdept_0 )    ! reference depth 
     175            CALL iom_get( inum4, jpdom_unknown, 'gdepw_0', gdepw_0 ) 
     176            CALL iom_get( inum4, jpdom_unknown, 'e3t_0'  , e3t_0   )    ! reference scale factors 
     177            CALL iom_get( inum4, jpdom_unknown, 'e3w_0'  , e3w_0   ) 
     178            ! 
     179            IF( nmsh <= 6 ) THEN                                        ! 3D vertical scale factors 
     180               CALL iom_get( inum4, jpdom_data, 'e3t', e3t ) 
     181               CALL iom_get( inum4, jpdom_data, 'e3u', e3u ) 
     182               CALL iom_get( inum4, jpdom_data, 'e3v', e3v ) 
     183               CALL iom_get( inum4, jpdom_data, 'e3w', e3w ) 
     184            ELSE                                                        ! 2D bottom scale factors 
     185               CALL iom_get( inum4, jpdom_data, 'e3t_ps', e3tp ) 
     186               CALL iom_get( inum4, jpdom_data, 'e3w_ps', e3wp ) 
     187               !                                                        ! deduces the 3D scale factors 
     188               DO jk = 1, jpk 
     189                  e3t(:,:,jk) = e3t_0(jk)                                     ! set to the ref. factors 
     190                  e3u(:,:,jk) = e3t_0(jk) 
     191                  e3v(:,:,jk) = e3t_0(jk) 
     192                  e3w(:,:,jk) = e3w_0(jk) 
     193               END DO 
     194               DO jj = 1,jpj                                                  ! adjust the deepest values 
     195                  DO ji = 1,jpi 
     196                     ik = mbkt(ji,jj) 
     197                     e3t(ji,jj,ik) = e3tp(ji,jj) * tmask(ji,jj,1) + e3t_0(1) * ( 1._wp - tmask(ji,jj,1) ) 
     198                     e3w(ji,jj,ik) = e3wp(ji,jj) * tmask(ji,jj,1) + e3w_0(1) * ( 1._wp - tmask(ji,jj,1) ) 
     199                  END DO 
     200               END DO 
     201               DO jk = 1,jpk                         ! Computed as the minimum of neighbooring scale factors 
     202                  DO jj = 1, jpjm1 
     203                     DO ji = 1, jpim1 
     204                        e3u(ji,jj,jk) = MIN( e3t(ji,jj,jk), e3t(ji+1,jj,jk) ) 
     205                        e3v(ji,jj,jk) = MIN( e3t(ji,jj,jk), e3t(ji,jj+1,jk) ) 
     206                     END DO 
     207                  END DO 
     208               END DO 
     209               CALL lbc_lnk( e3u , 'U', 1._wp )   ;   CALL lbc_lnk( e3uw, 'U', 1._wp )   ! lateral boundary conditions 
     210               CALL lbc_lnk( e3v , 'V', 1._wp )   ;   CALL lbc_lnk( e3vw, 'V', 1._wp ) 
     211               ! 
     212               DO jk = 1, jpk                        ! set to z-scale factor if zero (i.e. along closed boundaries) 
     213                  WHERE( e3u(:,:,jk) == 0._wp )   e3u(:,:,jk) = e3t_0(jk) 
     214                  WHERE( e3v(:,:,jk) == 0._wp )   e3v(:,:,jk) = e3t_0(jk) 
     215               END DO 
     216            END IF 
     217 
     218            IF( iom_varid( inum4, 'gdept', ldstop = .FALSE. ) > 0 ) THEN   ! 3D depth of t- and w-level 
     219               CALL iom_get( inum4, jpdom_data, 'gdept', gdept ) 
     220               CALL iom_get( inum4, jpdom_data, 'gdepw', gdepw ) 
     221            ELSE                                                           ! 2D bottom depth 
     222               CALL iom_get( inum4, jpdom_data, 'hdept', hdept ) 
     223               CALL iom_get( inum4, jpdom_data, 'hdepw', hdepw ) 
     224               ! 
     225               DO jk = 1, jpk                                              ! deduces the 3D depth 
     226                  gdept(:,:,jk) = gdept_0(jk) 
     227                  gdepw(:,:,jk) = gdepw_0(jk) 
     228               END DO 
     229               DO jj = 1, jpj 
     230                  DO ji = 1, jpi 
     231                     ik = mbkt(ji,jj) 
     232                     IF( ik > 0 ) THEN 
     233                        gdepw(ji,jj,ik+1) = hdepw(ji,jj) 
     234                        gdept(ji,jj,ik  ) = hdept(ji,jj) 
     235                        gdept(ji,jj,ik+1) = gdept(ji,jj,ik) + e3t(ji,jj,ik) 
     236                     ENDIF 
     237                  END DO 
     238               END DO 
     239            ENDIF 
     240            ! 
     241         ENDIF 
     242 
     243         IF( ln_zco ) THEN           ! Vertical coordinates and scales factors 
    199244            CALL iom_get( inum4, jpdom_unknown, 'gdept_0', gdept_0 ) ! depth 
    200245            CALL iom_get( inum4, jpdom_unknown, 'gdepw_0', gdepw_0 ) 
    201246            CALL iom_get( inum4, jpdom_unknown, 'e3t_0'  , e3t_0   ) 
    202247            CALL iom_get( inum4, jpdom_unknown, 'e3w_0'  , e3w_0   ) 
    203                                       ! z-coordinate - partial steps 
    204             IF( nmsh <= 6 ) THEN                                   !    ! 3D vertical scale factors 
    205               CALL iom_get( inum4, jpdom_data, 'e3t', e3t ) ! scale factors 
    206               CALL iom_get( inum4, jpdom_data, 'e3u', e3u ) 
    207               CALL iom_get( inum4, jpdom_data, 'e3v', e3v ) 
    208               CALL iom_get( inum4, jpdom_data, 'e3w', e3w ) 
    209             ELSE                                                   !    ! 2D bottom scale factors 
    210               CALL iom_get( inum4, jpdom_data, 'e3t_ps', e3tp ) 
    211               CALL iom_get( inum4, jpdom_data, 'e3w_ps', e3wp ) 
    212             END IF 
    213  
    214             IF( iom_varid( inum4, 'gdept', ldstop = .FALSE. ) > 0 ) THEN 
    215               CALL iom_get( inum4, jpdom_data, 'gdept', gdept ) ! scale factors 
    216               CALL iom_get( inum4, jpdom_data, 'gdepw', gdepw ) 
    217             ELSE                                                   !    ! 2D bottom depth 
    218               CALL iom_get( inum4, jpdom_data, 'hdept', hdept )   ! depth 
    219               CALL iom_get( inum4, jpdom_data, 'hdepw', hdepw ) 
    220           
    221               DO jk = 1,jpk 
    222                 gdept(:,:,jk) = gdept_0(jk) 
    223                 gdepw(:,:,jk) = gdepw_0(jk) 
    224               ENDDO 
    225  
    226               DO jj = 1, jpj 
    227                 DO ji = 1, jpi 
    228                   ik = mbkt(ji,jj) 
    229                   ! ocean point only  
    230                   IF( ik > 0 ) THEN 
    231                      ! max ocean level case 
    232                      gdepw(ji,jj,ik+1) = hdepw(ji,jj) 
    233                      gdept(ji,jj,ik  ) = hdept(ji,jj) 
    234                      gdept(ji,jj,ik+1) = gdept(ji,jj,ik) + e3t(ji,jj,ik) 
    235                   ENDIF 
    236                 END DO 
    237               END DO 
    238  
    239             ENDIF 
    240  
    241          ENDIF 
    242  
    243          IF( ln_zco ) THEN 
    244            ! Vertical coordinates and scales factors 
    245            CALL iom_get( inum4, jpdom_unknown, 'gdept_0', gdept_0 ) ! depth 
    246            CALL iom_get( inum4, jpdom_unknown, 'gdepw_0', gdepw_0 ) 
    247            CALL iom_get( inum4, jpdom_unknown, 'e3t_0'  , e3t_0   ) 
    248            CALL iom_get( inum4, jpdom_unknown, 'e3w_0'  , e3w_0   ) 
    249248         ENDIF 
    250249 
     
    317316   END SUBROUTINE dom_rea 
    318317 
    319 #endif 
     318 
     319   SUBROUTINE zgr_bot_level 
     320      !!---------------------------------------------------------------------- 
     321      !!                    ***  ROUTINE zgr_bot_level  *** 
     322      !! 
     323      !! ** Purpose :   defines the vertical index of ocean bottom (mbk. arrays) 
     324      !! 
     325      !! ** Method  :   computes from mbathy with a minimum value of 1 over land 
     326      !! 
     327      !! ** Action  : - update mbathy: level bathymetry (in level index) 
     328      !!---------------------------------------------------------------------- 
     329      INTEGER ::   ji, jj   ! dummy loop indices 
     330      REAL(wp), DIMENSION(jpi,jpj) ::   zmbk   ! 2D workspace  
     331      !!---------------------------------------------------------------------- 
     332      ! 
     333      IF(lwp) WRITE(numout,*) 
     334      IF(lwp) WRITE(numout,*) '    zgr_bot_level : ocean bottom k-index of T-, U-, V- and W-levels ' 
     335      IF(lwp) WRITE(numout,*) '    ~~~~~~~~~~~~~' 
     336      ! 
     337      mbkt(:,:) = MAX( mbathy(:,:) , 1 )    ! bottom k-index of T-level (=1 over land) 
     338      ! 
     339      DO jj = 1, jpjm1                      ! bottom k-index of u- (v-) level 
     340         DO ji = 1, jpim1 
     341            mbku(ji,jj) = MIN(  mbkt(ji+1,jj  ) , mbkt(ji,jj)  ) 
     342            mbkv(ji,jj) = MIN(  mbkt(ji  ,jj+1) , mbkt(ji,jj)  ) 
     343         END DO 
     344      END DO 
     345      ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk  
     346      zmbk(:,:) = REAL( mbku(:,:), wp )   ;   CALL lbc_lnk(zmbk,'U',1.)   ;   mbku  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
     347      zmbk(:,:) = REAL( mbkv(:,:), wp )   ;   CALL lbc_lnk(zmbk,'V',1.)   ;   mbkv  (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 
     348      ! 
     349   END SUBROUTINE zgr_bot_level 
    320350 
    321351   !!====================================================================== 
  • branches/nemo_v3_3_beta/NEMOGCM/NEMO/TOP_SRC/SED/sedini.F90

    r2457 r2464  
    123123      DO jj = 1, jpj 
    124124         DO ji = 1, jpi 
    125             ikt = MAX( INT( sbathy(ji,jj) )  - 1, 1 ) 
     125            ikt = MAX( INT( sbathy(ji,jj) ), 1 ) 
    126126            IF( tmask(ji,jj,ikt) == 1 ) epkbot(ji,jj) = zdta(ji,jj) 
    127127         ENDDO 
Note: See TracChangeset for help on using the changeset viewer.