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 1566 for trunk/NEMO/OPA_SRC/DOM – NEMO

Ignore:
Timestamp:
2009-07-31T16:34:08+02:00 (15 years ago)
Author:
rblod
Message:

Cosmetic changes: suppress useless variables and code review of the code changed when suppressing rigid-lid, see ticket #508

Location:
trunk/NEMO/OPA_SRC/DOM
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DOM/domcfg.F90

    r1528 r1566  
    44   !! Ocean initialization : domain configuration initialization 
    55   !!============================================================================== 
     6   !! History :  1.0  ! 2003-09  (G. Madec)  Original code 
     7   !!            3.2  ! 2009-07  (R. Benshila) Suppression of rigid-lid option 
     8   !!---------------------------------------------------------------------- 
    69 
    710   !!---------------------------------------------------------------------- 
    811   !!   dom_cfg        : initialize the domain configuration 
    912   !!---------------------------------------------------------------------- 
    10    !! * Modules used 
    1113   USE dom_oce         ! ocean space and time domain 
    1214   USE phycst          ! physical constants 
     
    1719   PRIVATE 
    1820 
    19    !! * Routine accessibility 
    20    PUBLIC dom_cfg        ! called by opa.F90 
     21   PUBLIC   dom_cfg    ! called by opa.F90 
     22 
    2123   !!---------------------------------------------------------------------- 
    22    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     24   !! NEMO/OPA 3.2 , LODYC-IPSL  (2009) 
    2325   !! $Id$  
    24    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     26   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)  
    2527   !!---------------------------------------------------------------------- 
    2628 
     
    3335      !! ** Purpose :   set the domain configuration 
    3436      !! 
    35       !! ** Method  : 
    36       !! 
    37       !! History : 
    38       !!   9.0  !  03-09  (G. Madec)  Original code 
    39       !!---------------------------------------------------------------------- 
    40       !! * Local declarations 
    4137      !!---------------------------------------------------------------------- 
    4238 
    43       IF(lwp) THEN 
     39      IF(lwp) THEN                   ! Control print 
    4440         WRITE(numout,*) 
    4541         WRITE(numout,*) 'dom_cfg : set the ocean configuration' 
    46          WRITE(numout,*) '~~~~~~~      ocean model configuration used :',   & 
    47             &                             ' cp_cfg = ', cp_cfg, ' jp_cfg = ', jp_cfg 
     42         WRITE(numout,*) '~~~~~~~ ' 
     43         WRITE(numout,*) '   ocean model configuration used :   cp_cfg = ', cp_cfg, ' jp_cfg = ', jp_cfg 
     44         ! 
     45         WRITE(numout,*) '   global domain lateral boundaries' 
     46         ! 
     47         IF( jperio == 0 )   WRITE(numout,*) '      jperio= 0, closed' 
     48         IF( jperio == 1 )   WRITE(numout,*) '      jperio= 1, cyclic east-west' 
     49         IF( jperio == 2 )   WRITE(numout,*) '      jperio= 2, equatorial symmetric' 
     50         IF( jperio == 3 )   WRITE(numout,*) '      jperio= 3, north fold with T-point pivot' 
     51         IF( jperio == 4 )   WRITE(numout,*) '      jperio= 4, cyclic east-west and north fold with T-point pivot' 
     52         IF( jperio == 5 )   WRITE(numout,*) '      jperio= 5, north fold with F-point pivot' 
     53         IF( jperio == 6 )   WRITE(numout,*) '      jperio= 6, cyclic east-west and north fold with F-point pivot' 
    4854      ENDIF 
    49  
    50       ! Global domain boundary conditions 
    51       ! --------------------------------- 
    52       IF(lwp) THEN 
    53          WRITE(numout,*) '          global domain lateral boundaries' 
    54  
    55          IF( jperio == 0 ) WRITE(numout,*) '             jperio= 0, closed' 
    56          IF( jperio == 1 ) WRITE(numout,*) '             jperio= 1, cyclic east-west' 
    57          IF( jperio == 2 ) WRITE(numout,*) '             jperio= 2, equatorial symmetric' 
    58          IF( jperio == 3 ) WRITE(numout,*) '             jperio= 3, north fold with T-point pivot' 
    59          IF( jperio == 4 ) WRITE(numout,*) '             jperio= 4, cyclic east-west and',   & 
    60                                                                   ' north fold with T-point pivot' 
    61          IF( jperio == 5 ) WRITE(numout,*) '             jperio= 5, north fold with F-point pivot' 
    62          IF( jperio == 6 ) WRITE(numout,*) '             jperio= 6, cyclic east-west and',   & 
    63                                                                   ' north fold with F-point pivot' 
    64       ENDIF 
    65       IF( jperio <  0 .OR. jperio > 6 ) CALL ctl_stop( 'jperio is out of range' ) 
    66  
    67       ! global domain versus zoom and/or local domain 
    68       ! --------------------------------------------- 
    69  
    70       CALL dom_glo  
    71  
     55      ! 
     56      IF( jperio <  0 .OR. jperio > 6 )   CALL ctl_stop( 'jperio is out of range' ) 
     57      ! 
     58      CALL dom_glo                   ! global domain versus zoom and/or local domain 
     59      ! 
    7260   END SUBROUTINE dom_cfg 
    7361 
     
    8472      !!              - mi0  , mi1   : 
    8573      !!              - mj0, , mj1   : 
    86       !! 
    87       !! History : 
    88       !!   8.5  !  02-08  (G. Madec)    Original code 
    8974      !!---------------------------------------------------------------------- 
    90       !! * Local declarations 
    91       INTEGER ::   ji, jj            ! dummy loop argument 
     75      INTEGER ::   ji, jj   ! dummy loop argument 
    9276      !!---------------------------------------------------------------------- 
    9377 
    94       ! Local domain  
    95       ! ============ 
    96  
    97       ! local domain indices ==> data domain indices 
    98       DO ji = 1, jpi 
     78      !                        ! ============== ! 
     79      !                        !  Local domain  !  
     80      !                        ! ============== ! 
     81      DO ji = 1, jpi                 ! local domain indices ==> data domain indices 
    9982        mig(ji) = ji + jpizoom - 1 + nimpp - 1 
    10083      END DO 
     
    10285        mjg(jj) = jj + jpjzoom - 1 + njmpp - 1 
    10386      END DO 
    104  
    105       ! data domain indices ==> local domain indices 
    106       ! (return (m.0,m.1)=(1,0) if data domain gridpoint is to the west/south of the  
    107       ! local domain, or (m.0,m.1)=(jp.+1,jp.) to the east/north of local domain.  
     87      ! 
     88      !                              ! data domain indices ==> local domain indices 
     89      !                                   ! (return (m.0,m.1)=(1,0) if data domain gridpoint is to the west/south of the  
     90      !                                   !local domain, or (m.0,m.1)=(jp.+1,jp.) to the east/north of local domain.  
    10891      DO ji = 1, jpidta 
    10992        mi0(ji) = MAX( 1, MIN( ji - jpizoom + 1 - nimpp + 1, jpi+1 ) ) 
     
    11598      END DO 
    11699 
    117       IF(lwp) THEN 
     100      IF(lwp) THEN                   ! control print 
    118101         WRITE(numout,*) 
    119102         WRITE(numout,*) 'dom_glo : domain: data / local ' 
     
    149132 25   FORMAT( 100(10x,19i4,/) ) 
    150133 
    151       ! Zoom domain 
    152       ! =========== 
    153  
    154       ! zoom control 
     134      !                        ! ============== ! 
     135      !                        !  Zoom domain   ! 
     136      !                        ! ============== ! 
     137      !                              ! zoom control 
    155138      IF( jpiglo + jpizoom - 1  >  jpidta .OR.   & 
    156139          jpjglo + jpjzoom - 1  >  jpjdta      ) & 
    157140          &   CALL ctl_stop( ' global or zoom domain exceed the data domain ! ' ) 
    158141 
    159       ! set zoom flag 
    160       IF ( jpiglo < jpidta .OR. jpjglo < jpjdta )   lzoom = .TRUE. 
     142      !                              ! set zoom flag 
     143      IF( jpiglo < jpidta .OR. jpjglo < jpjdta )   lzoom = .TRUE. 
    161144 
    162       ! set zoom type flags 
     145      !                              ! set zoom type flags 
    163146      IF( lzoom .AND. jpizoom /= 1 )   lzoom_w = .TRUE.                     !  
    164147      IF( lzoom .AND. jpjzoom /= 1 )   lzoom_s = .TRUE. 
     
    180163           &   CALL ctl_stop( ' Your zoom choice is inconsistent with North fold boundary condition' ) 
    181164 
    182       ! Pre-defined arctic/antarctic zoom of ORCA configuration flag 
     165      !                              ! Pre-defined arctic/antarctic zoom of ORCA configuration flag 
    183166      IF( cp_cfg == "orca" ) THEN 
    184167         SELECT CASE ( jp_cfg ) 
    185          !                                        ! ======================= 
    186168         CASE ( 2 )                               !  ORCA_R2 configuration 
    187             !                                     ! ======================= 
    188169            IF(  jpiglo  == 142    .AND. jpjglo  ==  53 .AND.   & 
    189170               & jpizoom ==  21    .AND. jpjzoom ==  97         )   lzoom_arct = .TRUE. 
    190171            IF(  jpiglo  == jpidta .AND. jpjglo  ==  50 .AND.   & 
    191172               & jpizoom ==   1    .AND. jpjzoom ==   1         )   lzoom_anta = .TRUE. 
    192             !                                     ! ======================= 
     173            !                              
    193174         CASE ( 05 )                              !  ORCA_R05 configuration 
    194             !                                     ! ======================= 
    195175            IF(  jpiglo  == 562    .AND. jpjglo  == 202 .AND.   & 
    196176               & jpizoom ==  81    .AND. jpjzoom == 301         )   lzoom_arct = .TRUE. 
     
    204184         ! 
    205185      ENDIF 
    206           
     186      ! 
    207187   END SUBROUTINE dom_glo 
    208188 
  • trunk/NEMO/OPA_SRC/DOM/dommsk.F90

    r1528 r1566  
    11MODULE dommsk 
    2    !!============================================================================== 
     2   !!====================================================================== 
    33   !!                       ***  MODULE dommsk   *** 
    44   !! Ocean initialization : domain land/sea mask  
    5    !!============================================================================== 
     5   !!====================================================================== 
     6   !! History :  OPA  ! 1987-07  (G. Madec)  Original code 
     7   !!             -   ! 1993-03  (M. Guyon)  symetrical conditions (M. Guyon) 
     8   !!             -   ! 1996-01  (G. Madec)  suppression of common work arrays 
     9   !!             -   ! 1996-05  (G. Madec)  mask computed from tmask and sup- 
     10   !!                 !                      pression of the double computation of bmask 
     11   !!             -   ! 1997-02  (G. Madec)  mesh information put in domhgr.F 
     12   !!             -   ! 1997-07  (G. Madec)  modification of mbathy and fmask 
     13   !!             -   ! 1998-05  (G. Roullet)  free surface 
     14   !!             -   ! 2000-03  (G. Madec)  no slip accurate 
     15   !!             -   ! 2001-09  (J.-M. Molines)  Open boundaries 
     16   !!   NEMO     1.0  ! 2002-08  (G. Madec)  F90: Free form and module 
     17   !!             -   ! 2005-11  (V. Garnier) Surface pressure gradient organization 
     18   !!            3.2  ! 2009-07  (R. Benshila) Suppression of rigid-lid option 
     19   !!---------------------------------------------------------------------- 
    620 
    721   !!---------------------------------------------------------------------- 
    822   !!   dom_msk        : compute land/ocean mask 
    9    !!   dom_msk_nsa    : update land/ocean mask when no-slip accurate 
    10    !!                    option is used. 
    11    !!---------------------------------------------------------------------- 
    12    !! * Modules used 
     23   !!   dom_msk_nsa    : update land/ocean mask when no-slip accurate option is used. 
     24   !!---------------------------------------------------------------------- 
    1325   USE oce             ! ocean dynamics and tracers 
    1426   USE dom_oce         ! ocean space and time domain 
     
    2234   PRIVATE 
    2335 
    24    !! * Routine accessibility 
    25    PUBLIC dom_msk        ! routine called by inidom.F90 
    26  
    27    !! * Module variables 
    28    REAL(wp) ::   & 
    29       shlat = 2.   ! type of lateral boundary condition on velocity (namelist namlbc) 
     36   PUBLIC   dom_msk    ! routine called by inidom.F90 
     37 
     38   REAL(wp) ::   shlat = 2.   ! type of lateral boundary condition on velocity (namelist namlbc) 
    3039    
    3140   !! * Substitutions 
    3241#  include "vectopt_loop_substitute.h90" 
    33    !!--------------------------------------------------------------------------------- 
    34    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     42   !!---------------------------------------------------------------------- 
     43   !! NEMO/OPA 3.2 , LODYC-IPSL  (2009) 
    3544   !! $Id$  
    36    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    37    !!--------------------------------------------------------------------------------- 
     45   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)  
     46   !!---------------------------------------------------------------------- 
    3847 
    3948CONTAINS 
     
    93102      !!      (note that the minimum value of mbathy is 2). 
    94103      !! 
    95       !! ** Action : 
    96       !!                     tmask    : land/ocean mask at t-point (=0. or 1.) 
    97       !!                     umask    : land/ocean mask at u-point (=0. or 1.) 
    98       !!                     vmask    : land/ocean mask at v-point (=0. or 1.) 
    99       !!                     fmask    : land/ocean mask at f-point (=0. or 1.) 
     104      !! ** Action :   tmask    : land/ocean mask at t-point (=0. or 1.) 
     105      !!               umask    : land/ocean mask at u-point (=0. or 1.) 
     106      !!               vmask    : land/ocean mask at v-point (=0. or 1.) 
     107      !!               fmask    : land/ocean mask at f-point (=0. or 1.) 
    100108      !!                          =shlat along lateral boundaries 
    101       !!                     bmask    : land/ocean mask at barotropic stream 
    102       !!                          function point (=0. or 1.) and set to 
    103       !!                          0 along lateral boundaries 
    104       !!                   mbathy   : number of non-zero w-levels  
    105       !! 
    106       !! History : 
    107       !!        !  87-07  (G. Madec)  Original code 
    108       !!        !  91-12  (G. Madec) 
    109       !!        !  92-06  (M. Imbard) 
    110       !!        !  93-03  (M. Guyon)  symetrical conditions (M. Guyon) 
    111       !!        !  96-01  (G. Madec)  suppression of common work arrays 
    112       !!        !  96-05  (G. Madec)  mask computed from tmask and sup- 
    113       !!                 pression of the double computation of bmask 
    114       !!        !  97-02  (G. Madec)  mesh information put in domhgr.F 
    115       !!        !  97-07  (G. Madec)  modification of mbathy and fmask 
    116       !!        !  98-05  (G. Roullet)  free surface 
    117       !!        !  00-03  (G. Madec)  no slip accurate 
    118       !!        !  01-09  (J.-M. Molines)  Open boundaries 
    119       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    120       !!   9.0  !  05-11  (V. Garnier) Surface pressure gradient organization 
     109      !!               bmask    : land/ocean mask at barotropic stream 
     110      !!                          function point (=0. or 1.) and set to 0 along lateral boundaries 
     111      !!               mbathy   : number of non-zero w-levels  
    121112      !!---------------------------------------------------------------------- 
    122113      INTEGER  ::   ji, jj, jk      ! dummy loop indices 
     
    129120      !!--------------------------------------------------------------------- 
    130121       
    131       ! Namelist namlbc : lateral momentum boundary condition 
    132       REWIND( numnam ) 
     122      REWIND( numnam )              ! Namelist namlbc : lateral momentum boundary condition 
    133123      READ  ( numnam, namlbc ) 
    134       IF(lwp) THEN 
     124       
     125      IF(lwp) THEN                  ! control print 
    135126         WRITE(numout,*) 
    136127         WRITE(numout,*) 'dommsk : ocean mask ' 
    137128         WRITE(numout,*) '~~~~~~' 
    138          WRITE(numout,*) '         Namelist namlbc' 
    139          WRITE(numout,*) '            lateral momentum boundary cond. shlat = ',shlat 
    140       ENDIF 
    141  
    142       IF ( shlat == 0. ) THEN 
    143           IF(lwp) WRITE(numout,*) '         ocean lateral free-slip ' 
    144         ELSEIF ( shlat  ==  2. ) THEN 
    145           IF(lwp) WRITE(numout,*) '         ocean lateral  no-slip ' 
    146         ELSEIF ( 0. < shlat .AND. shlat < 2. ) THEN 
    147           IF(lwp) WRITE(numout,*) '         ocean lateral  partial-slip ' 
    148         ELSEIF ( 2. < shlat ) THEN 
    149           IF(lwp) WRITE(numout,*) '         ocean lateral  strong-slip ' 
     129         WRITE(numout,*) '   Namelist namlbc' 
     130         WRITE(numout,*) '      lateral momentum boundary cond. shlat = ',shlat 
     131      ENDIF 
     132 
     133      IF(             shlat == 0.            ) THEN   ;   IF(lwp) WRITE(numout,*) '         ocean lateral free-slip ' 
     134        ELSEIF (      shlat == 2.            ) THEN   ;   IF(lwp) WRITE(numout,*) '         ocean lateral  no-slip ' 
     135        ELSEIF ( 0. < shlat .AND. shlat < 2. ) THEN   ;   IF(lwp) WRITE(numout,*) '         ocean lateral  partial-slip ' 
     136        ELSEIF ( 2. < shlat                  ) THEN   ;   IF(lwp) WRITE(numout,*) '         ocean lateral  strong-slip ' 
    150137        ELSE 
    151138          WRITE(ctmp1,*) ' shlat is negative = ', shlat 
     
    155142      ! 1. Ocean/land mask at t-point (computed from mbathy) 
    156143      ! ----------------------------- 
    157       ! Tmask has already the right boundary conditions since mbathy is ok 
    158  
     144      ! N.B. tmask has already the right boundary conditions since mbathy is ok 
     145      ! 
    159146      tmask(:,:,:) = 0.e0 
    160147      DO jk = 1, jpk 
    161148         DO jj = 1, jpj 
    162149            DO ji = 1, jpi 
    163                IF( FLOAT( mbathy(ji,jj)-jk )+.1 >= 0.e0 ) tmask(ji,jj,jk) = 1.e0 
     150               IF( REAL( mbathy(ji,jj) - jk ) +.1 >= 0.e0 ) tmask(ji,jj,jk) = 1.e0 
    164151            END DO   
    165152         END DO   
    166153      END DO   
    167154 
     155!!gm  ???? 
    168156#if defined key_zdfkpp 
    169157      IF( cp_cfg == 'orca' )   THEN 
     
    184172      ENDIF 
    185173#endif 
     174!!gm end 
    186175 
    187176      ! Interior domain mask (used for global sum) 
    188177      ! -------------------- 
    189  
    190178      tmask_i(:,:) = tmask(:,:,1) 
    191179      iif = jpreci                         ! ??? 
     
    200188 
    201189      ! north fold mask 
     190      ! --------------- 
    202191      tpol(1:jpiglo) = 1.e0  
    203192      fpol(1:jpiglo) = 1.e0 
     
    205194         tpol(jpiglo/2+1:jpiglo) = 0.e0 
    206195         fpol(     1    :jpiglo) = 0.e0 
    207          ! T-point pivot: only half of the nlcj-1 row 
    208          IF( mjg(nlej) == jpjglo )   THEN 
     196         IF( mjg(nlej) == jpjglo ) THEN                  ! only half of the nlcj-1 row 
    209197            DO ji = iif+1, iil-1 
    210198               tmask_i(ji,nlej-1) = tmask_i(ji,nlej-1) * tpol(mig(ji)) 
     
    219207      ! 2. Ocean/land mask at u-,  v-, and z-points (computed from tmask) 
    220208      ! ------------------------------------------- 
    221        
    222       ! Computation 
    223209      DO jk = 1, jpk 
    224210         DO jj = 1, jpjm1 
     
    233219         END DO 
    234220      END DO 
    235  
    236       ! Lateral boundary conditions 
    237       CALL lbc_lnk( umask, 'U', 1. ) 
     221      CALL lbc_lnk( umask, 'U', 1. )      ! Lateral boundary conditions 
    238222      CALL lbc_lnk( vmask, 'V', 1. ) 
    239223      CALL lbc_lnk( fmask, 'F', 1. ) 
     
    242226      ! 4. ocean/land mask for the elliptic equation 
    243227      ! -------------------------------------------- 
    244        
    245       ! Computation 
    246228      bmask(:,:) = tmask(:,:,1)       ! elliptic equation is written at t-point 
    247        
    248       ! Boundary conditions 
    249       !   cyclic east-west : bmask must be set to 0. on rows 1 and jpi 
     229      ! 
     230      !                               ! Boundary conditions 
     231      !                                    ! cyclic east-west : bmask must be set to 0. on rows 1 and jpi 
    250232      IF( nperio == 1 .OR. nperio == 4 .OR. nperio == 6 ) THEN 
    251233         bmask( 1 ,:) = 0.e0 
    252234         bmask(jpi,:) = 0.e0 
    253235      ENDIF 
    254        
    255       !   south symmetric :  bmask must be set to 0. on row 1 
    256       IF( nperio == 2 ) THEN 
     236      IF( nperio == 2 ) THEN               ! south symmetric :  bmask must be set to 0. on row 1 
    257237         bmask(:, 1 ) = 0.e0 
    258238      ENDIF 
    259        
    260       !   north fold :  
    261       IF( nperio == 3 .OR. nperio == 4 ) THEN 
    262          ! T-pt pivot and T-pt elliptic eq. : bmask set to 0. on row jpj and on half jpjglo-1 row 
    263          DO ji = 1, jpi 
     239      !                                    ! north fold :  
     240      IF( nperio == 3 .OR. nperio == 4 ) THEN   ! T-pt pivot : bmask set to 0. on row jpj and on half jpjglo-1 row 
     241         DO ji = 1, jpi                       
    264242            ii = ji + nimpp - 1 
    265243            bmask(ji,jpj-1) = bmask(ji,jpj-1) * tpol(ii) 
     
    267245         END DO 
    268246      ENDIF 
    269       IF( nperio == 5 .OR. nperio == 6 ) THEN 
    270          ! F-pt pivot and T-pt elliptic eq. : bmask set to 0. on row jpj 
     247      IF( nperio == 5 .OR. nperio == 6 ) THEN   ! F-pt pivot and T-pt elliptic eq. : bmask set to 0. on row jpj 
    271248         bmask(:,jpj) = 0.e0 
    272249      ENDIF 
    273  
    274       ! Mpp boundary conditions: bmask is set to zero on the overlap 
    275       ! region for all elliptic solvers 
    276  
    277       IF( lk_mpp ) THEN 
     250      ! 
     251      IF( lk_mpp ) THEN                    ! mpp specificities 
     252         !                                      ! bmask is set to zero on the overlap region 
    278253         IF( nbondi /= -1 .AND. nbondi /= 2 )   bmask(  1 :jpreci,:) = 0.e0 
    279254         IF( nbondi /=  1 .AND. nbondi /= 2 )   bmask(nlci:jpi   ,:) = 0.e0 
    280255         IF( nbondj /= -1 .AND. nbondj /= 2 )   bmask(:,  1 :jprecj) = 0.e0 
    281256         IF( nbondj /=  1 .AND. nbondj /= 2 )   bmask(:,nlcj:jpj   ) = 0.e0 
    282        
    283          ! north fold : bmask must be set to 0. on rows jpj-1 and jpj  
    284          IF( npolj == 3 .OR. npolj == 4 ) THEN 
     257         ! 
     258         IF( npolj == 3 .OR. npolj == 4 ) THEN  ! north fold : bmask must be set to 0. on rows jpj-1 and jpj 
    285259            DO ji = 1, nlci 
    286260               ii = ji + nimpp - 1 
     
    289263            END DO 
    290264         ENDIF 
    291          IF( npolj == 5 .OR. npolj == 6 ) THEN 
     265         IF( npolj == 5 .OR. npolj == 6 ) THEN  ! F-pt pivot and T-pt elliptic eq. : bmask set to 0. on row jpj 
    292266            DO ji = 1, nlci 
    293267               bmask(ji,nlcj  ) = 0.e0 
     
    299273      ! mask for second order calculation of vorticity 
    300274      ! ---------------------------------------------- 
    301        
    302275      CALL dom_msk_nsa 
    303276 
    304277       
    305278      ! Lateral boundary conditions on velocity (modify fmask) 
    306       ! --------------------------------------- 
    307        
     279      ! ---------------------------------------      
    308280      DO jk = 1, jpk 
    309  
    310          zwf(:,:) = fmask(:,:,jk) 
    311           
     281         zwf(:,:) = fmask(:,:,jk)          
    312282         DO jj = 2, jpjm1 
    313283            DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    318288            END DO 
    319289         END DO 
    320           
    321290         DO jj = 2, jpjm1 
    322291            IF( fmask(1,jj,jk) == 0. ) THEN 
     
    326295               fmask(jpi,jj,jk) = shlat * MIN( 1., MAX( zwf(jpi,jj+1), zwf(jpim1,jj), zwf(jpi,jj-1) ) ) 
    327296            ENDIF 
    328          END DO 
    329           
     297         END DO          
    330298         DO ji = 2, jpim1 
    331299            IF( fmask(ji,1,jk) == 0. ) THEN 
     
    337305         END DO 
    338306      END DO 
    339        
    340  
    341       IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN 
    342          !                                           ! ======================= 
    343          ! Increased lateral friction in             !  ORCA_R2 configuration 
    344          ! the vicinity of some straits              ! ======================= 
    345          ! 
     307      ! 
     308      IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN   ! ORCA_R2 configuration 
     309         !                                                 ! Increased lateral friction near of some straits 
    346310         IF( n_cla == 0 ) THEN 
    347311            !                                ! Gibraltar strait  : partial slip (fmask=0.5) 
     
    365329         ! 
    366330      ENDIF 
    367        
    368       ! Lateral boundary conditions on fmask 
    369       CALL lbc_lnk( fmask, 'F', 1. ) 
     331      ! 
     332      CALL lbc_lnk( fmask, 'F', 1. )      ! Lateral boundary conditions on fmask 
     333 
    370334       
    371335      ! Mbathy set to the number of w-level (minimum value 2) 
     
    377341      END DO 
    378342       
    379       ! Control print 
    380       ! ------------- 
    381       IF( nprint == 1 .AND. lwp ) THEN 
     343      IF( nprint == 1 .AND. lwp ) THEN      ! Control print 
    382344         imsk(:,:) = INT( tmask_i(:,:) ) 
    383345         WRITE(numout,*) ' tmask_i : ' 
     
    423385               &                           1, jpj, 1, 1, numout ) 
    424386      ENDIF 
    425  
     387      ! 
    426388   END SUBROUTINE dom_msk 
    427389 
     
    441403      !! ** Action : 
    442404      !! 
    443       !! History : 
    444       !!        !  00-03  (G. Madec)  no slip accurate 
    445405      !!---------------------------------------------------------------------- 
    446406      INTEGER  :: ji, jj, jk, jl      ! dummy loop indices 
    447       INTEGER ::   ine, inw, ins, inn, itest, ierror, iind, ijnd 
     407      INTEGER  ::   ine, inw, ins, inn, itest, ierror, iind, ijnd 
     408      REAL(wp) ::   zaa 
    448409      INTEGER, DIMENSION(jpi*jpj*jpk,3) ::  icoord 
    449       REAL(wp) ::   zaa 
    450410      !!--------------------------------------------------------------------- 
    451411       
  • trunk/NEMO/OPA_SRC/DOM/domvvl.F90

    r1528 r1566  
    2424   PRIVATE 
    2525 
    26    PUBLIC dom_vvl        ! called by domain.F90 
     26   PUBLIC   dom_vvl    ! called by domain.F90 
    2727 
    28    REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   ee_t, ee_u, ee_v, ee_f   !: ??? 
     28   REAL(wp), PUBLIC, DIMENSION(jpi,jpj)     ::   ee_t, ee_u, ee_v, ee_f   !: ??? 
     29   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   mut, muu, muv, muf       !: ???  
    2930 
    30    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   mut, muu, muv, muf   !: ???  
    31  
    32    REAL(wp), DIMENSION(jpk) ::   r2dt               ! vertical profile time-step, = 2 rdttra  
    33       !                                             ! except at nit000 (=rdttra) if neuler=0 
     31   REAL(wp), DIMENSION(jpk) ::   r2dt   ! vertical profile time-step, = 2 rdttra  
     32      !                                 ! except at nit000 (=rdttra) if neuler=0 
    3433 
    3534   !! * Substitutions 
     
    5049      !! ** Purpose :  compute coefficients muX at T-U-V-F points to spread 
    5150      !!               ssh over the whole water column (scale factors) 
    52       !! 
    5351      !!---------------------------------------------------------------------- 
    5452      INTEGER  ::   ji, jj, jk 
     
    6260      ENDIF 
    6361 
    64 #if defined key_zco 
    65       CALL ctl_stop( 'dom_vvl_ini : options key_zco is incompatible with variable volume option key_vvl') 
    66 #endif 
     62      IF( lk_zco )   CALL ctl_stop( 'dom_vvl : key_zco is incompatible with variable volume option key_vvl') 
    6763 
    6864      fsdept(:,:,:) = gdept (:,:,:) 
     
    7773      fse3vw(:,:,:) = e3vw  (:,:,:) 
    7874 
    79       ! mu computation 
    80       ! -------------- 
    81       ! define ee_t, u, v and f as in sigma coordinate (ee_t = 1/ht, ...) 
    82       ee_t(:,:) = fse3t_0(:,:,1)        ! Lower bound : thickness of the first model level 
     75      !                                 !==  mu computation  ==! 
     76      ee_t(:,:) = fse3t_0(:,:,1)                ! Lower bound : thickness of the first model level 
    8377      ee_u(:,:) = fse3u_0(:,:,1) 
    8478      ee_v(:,:) = fse3v_0(:,:,1) 
    8579      ee_f(:,:) = fse3f_0(:,:,1) 
    86       DO jk = 2, jpkm1                   ! Sum of the masked vertical scale factors 
     80      DO jk = 2, jpkm1                          ! Sum of the masked vertical scale factors 
    8781         ee_t(:,:) = ee_t(:,:) + fse3t_0(:,:,jk) * tmask(:,:,jk) 
    8882         ee_u(:,:) = ee_u(:,:) + fse3u_0(:,:,jk) * umask(:,:,jk) 
     
    9286         END DO 
    9387      END DO   
    94       !                                  ! Compute and mask the inverse of the local depth at T, U, V and F points 
     88      !                                         ! Compute and mask the inverse of the local depth at T, U, V and F points 
    9589      ee_t(:,:) = 1. / ee_t(:,:) * tmask(:,:,1) 
    9690      ee_u(:,:) = 1. / ee_u(:,:) * umask(:,:,1) 
    9791      ee_v(:,:) = 1. / ee_v(:,:) * vmask(:,:,1) 
    98       DO jj = 1, jpjm1                         ! f-point case fmask cannot be used  
     92      DO jj = 1, jpjm1                               ! f-point case fmask cannot be used  
    9993         ee_f(:,jj) = 1. / ee_f(:,jj) * umask(:,jj,1) * umask(:,jj+1,1) 
    10094      END DO 
    101       CALL lbc_lnk( ee_f, 'F', 1. )       ! lateral boundary condition on ee_f 
     95      CALL lbc_lnk( ee_f, 'F', 1. )                  ! lateral boundary condition on ee_f 
    10296      ! 
    103       DO jk = 1, jpk 
    104          mut(:,:,jk) = ee_t(:,:) * tmask(:,:,jk)   ! at T levels 
    105          muu(:,:,jk) = ee_u(:,:) * umask(:,:,jk)   ! at T levels 
    106          muv(:,:,jk) = ee_v(:,:) * vmask(:,:,jk)   ! at T levels 
     97      DO jk = 1, jpk                            ! mu coefficients 
     98         mut(:,:,jk) = ee_t(:,:) * tmask(:,:,jk)     ! T-point at T levels 
     99         muu(:,:,jk) = ee_u(:,:) * umask(:,:,jk)     ! U-point at T levels 
     100         muv(:,:,jk) = ee_v(:,:) * vmask(:,:,jk)     ! V-point at T levels 
    107101      END DO 
    108       DO jk = 1, jpk 
    109          DO jj = 1, jpjm1                      ! f-point : fmask=shlat at coasts, use the product of umask 
     102      DO jk = 1, jpk                                 ! F-point : fmask=shlat at coasts, use the product of umask 
     103         DO jj = 1, jpjm1 
    110104               muf(:,jj,jk) = ee_f(:,jj) * umask(:,jj,jk) * umask(:,jj+1,jk)   ! at T levels 
    111105         END DO 
    112106         muf(:,jpj,jk) = 0.e0 
    113107      END DO 
    114       CALL lbc_lnk( muf, 'F', 1. )       ! lateral boundary condition on ee_f 
     108      CALL lbc_lnk( muf, 'F', 1. )                   ! lateral boundary condition 
    115109 
    116110 
    117       ! Reference ocean depth at U- and V-points 
    118       hu_0(:,:) = 0.e0     
     111      hu_0(:,:) = 0.e0                          ! Reference ocean depth at U- and V-points 
    119112      hv_0(:,:) = 0.e0 
    120113      DO jk = 1, jpk 
     
    123116      END DO 
    124117 
    125       ! before and now Sea Surface Height at u-, v-, f-points 
    126       DO jj = 1, jpjm1 
     118      DO jj = 1, jpjm1                          ! initialise before and now Sea Surface Height at u-, v-, f-points 
    127119         DO ji = 1, jpim1 
    128120            zcoefu = 0.5  * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) ) 
     
    143135         END DO 
    144136      END DO 
    145       ! Boundaries conditions 
    146       CALL lbc_lnk( sshu_b, 'U', 1. )   ;   CALL lbc_lnk( sshu_n, 'U', 1. ) 
     137      CALL lbc_lnk( sshu_b, 'U', 1. )   ;   CALL lbc_lnk( sshu_n, 'U', 1. )      ! lateral boundary conditions 
    147138      CALL lbc_lnk( sshv_b, 'V', 1. )   ;   CALL lbc_lnk( sshv_n, 'V', 1. ) 
    148139      CALL lbc_lnk( sshf_b, 'F', 1. )   ;   CALL lbc_lnk( sshf_n, 'F', 1. ) 
  • trunk/NEMO/OPA_SRC/DOM/domzgr.F90

    r1528 r1566  
    44   !! Ocean initialization : domain initialization 
    55   !!============================================================================== 
    6    !! History :  OPA  !  1995-12  (G. Madec)  Original code : s vertical coordinate 
    7    !!                 !  1997-07  (G. Madec)  lbc_lnk call 
    8    !!                 !  1997-04  (J.-O. Beismann)  
    9    !!            8.5  !  2002-09 (A. Bozec, G. Madec)  F90: Free form and module 
    10    !!             -   !  2002-09 (A. de Miranda)  rigid-lid + islands 
    11    !!  NEMO      1.0  !  2003-08  (G. Madec)  F90: Free form and module 
    12    !!             -   !  2005-10  (A. Beckmann)  modifications for hybrid s-ccordinates & new stretching function 
    13    !!            2.0  !  2006-04  (R. Benshila, G. Madec)  add zgr_zco 
    14    !!            3.0  !  2008-06  (G. Madec)  insertion of domzgr_zps.h90 & conding style 
     6   !! History :  OPA  ! 1995-12  (G. Madec)  Original code : s vertical coordinate 
     7   !!                 ! 1997-07  (G. Madec)  lbc_lnk call 
     8   !!                 ! 1997-04  (J.-O. Beismann)  
     9   !!            8.5  ! 2002-09 (A. Bozec, G. Madec)  F90: Free form and module 
     10   !!             -   ! 2002-09 (A. de Miranda)  rigid-lid + islands 
     11   !!  NEMO      1.0  ! 2003-08  (G. Madec)  F90: Free form and module 
     12   !!             -   ! 2005-10  (A. Beckmann)  modifications for hybrid s-ccordinates & new stretching function 
     13   !!            2.0  ! 2006-04  (R. Benshila, G. Madec)  add zgr_zco 
     14   !!            3.0  ! 2008-06  (G. Madec)  insertion of domzgr_zps.h90 & conding style 
     15   !!            3.2  ! 2009-07  (R. Benshila) Suppression of rigid-lid option 
    1516   !!---------------------------------------------------------------------- 
    1617 
     
    623624      ENDIF 
    624625 
    625       ! Set to zero mbathy over islands if necessary 
    626       IF(lwp) WRITE(numout,*) 
    627       IF(lwp) WRITE(numout,*) '         mbathy set to 0 over islands' 
    628       IF(lwp) WRITE(numout,*) '         ----------------------------' 
    629       ! 
    630       mbathy(:,:) = MAX( 0, mbathy(:,:) ) 
    631       ! 
    632626      !  Boundary condition on mbathy 
    633627      IF( .NOT.lk_mpp ) THEN  
     
    655649      ENDIF 
    656650 
    657       ! control print 
    658       IF( lwp .AND. nprint == 1 ) THEN 
     651      IF( lwp .AND. nprint == 1 ) THEN      ! control print 
    659652         WRITE(numout,*) 
    660653         WRITE(numout,*) ' bathymetric field :   number of non-zero T-levels ' 
     
    10271020      REAL(wp), INTENT(in   ) ::   bb    ! Stretching coefficient 
    10281021      REAL(wp)                ::   pf1   ! sigma value 
    1029  
    1030       !!---------------------------------------------------------------------- 
    1031       ! 
    1032       IF ( theta == 0 ) then   !uniform sigma 
    1033          pf1 = -(pk1-0.5)/REAL(jpkm1) 
    1034       ELSE    ! stretched sigma 
     1022      !!---------------------------------------------------------------------- 
     1023      ! 
     1024      IF ( theta == 0 ) then      ! uniform sigma 
     1025         pf1 = -(pk1-0.5) / REAL( jpkm1 ) 
     1026      ELSE                        ! stretched sigma 
    10351027         pf1 =   (1.0-bb) * (sinh( theta*(-(pk1-0.5)/REAL(jpkm1)) ) ) / sinh(theta) + & 
    1036                  bb * ( (tanh( theta*( (-(pk1-0.5)/REAL(jpkm1)) + 0.5) ) - tanh(0.5*theta) ) / & 
    1037                  (2*tanh(0.5*theta) ) ) 
    1038       ENDIF 
    1039  
     1028            &    bb * ( (tanh( theta*( (-(pk1-0.5)/REAL(jpkm1)) + 0.5) ) - tanh(0.5*theta) ) / & 
     1029            &    (2*tanh(0.5*theta) ) ) 
     1030      ENDIF 
     1031      ! 
    10401032   END FUNCTION fssig1 
    10411033 
     
    10781070      REAL(wp), DIMENSION(jpi,jpj) ::   zenv, ztmp, zmsk    ! 2D workspace 
    10791071      REAL(wp), DIMENSION(jpi,jpj) ::   zri , zrj , zhbat   !  -     - 
    1080  
    1081       LOGICAL :: ln_s_sigma = .false. !use hybrid s_sigma coordinates & stretching function fssig1,used with ln_sco = .true. 
     1072      !! 
     1073      LOGICAL  :: ln_s_sigma = .false. !use hybrid s_sigma coordinates & stretching function fssig1,used with ln_sco = .true. 
    10821074      REAL(wp) :: bb = 0.8   ! stretching parameter for song and haidvogel stretching, bb=0; top only, bb =1; top and bottom 
    10831075      REAL(wp) :: hc = 150   ! Critical depth for s-sigma coordinates 
    1084  
     1076!!gm never do that !!!!   ==> Pb at compilation phase on several computer 
    10851077      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   gsigw3 = 0.0d0 
    10861078      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   gsigt3 = 0.0d0 
     
    10931085      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   esigwu3 = 0.0d0 
    10941086      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   esigwv3 = 0.0d0 
     1087!!gm end 
    10951088      !! 
    10961089      NAMELIST/nam_zgr_sco/ sbot_max, sbot_min, theta, thetb, r_max, ln_s_sigma, bb, hc 
Note: See TracChangeset for help on using the changeset viewer.