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

Ignore:
Timestamp:
2009-05-11T16:34:47+02:00 (15 years ago)
Author:
rblod
Message:

Merge VVL branch with the trunk (act II), see ticket #429

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

Legend:

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

    r1241 r1438  
    114114#if defined key_vvl 
    115115   LOGICAL, PUBLIC, PARAMETER ::   lk_vvl = .TRUE.    !: variable grid flag 
    116  
    117116   !! All coordinates 
    118117   !! --------------- 
    119    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   &  !: 
    120       gdep3w_1        ,  &  !: depth of T-points (sum of e3w) (m) 
    121       gdept_1, gdepw_1,  &  !: analytical depth at T-W  points (m) 
    122       e3v_1  , e3f_1  ,  &  !: analytical vertical scale factors at  V--F 
    123       e3t_1  , e3u_1  ,  &  !:                                       T--U  points (m) 
    124       e3vw_1          ,  &  !: analytical vertical scale factors at  VW-- 
    125       e3w_1  , e3uw_1       !:                                       W--UW  points (m) 
     118   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   gdep3w_1           !: depth of T-points (sum of e3w) (m) 
     119   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   gdept_1, gdepw_1   !: analytical depth at T-W  points (m) 
     120   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   e3v_1  , e3f_1     !: analytical vertical scale factors at  V--F 
     121   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   e3t_1  , e3u_1     !:                                       T--U  points (m) 
     122   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   e3vw_1             !: analytical vertical scale factors at  VW-- 
     123   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   e3w_1  , e3uw_1    !:                                       W--UW  points (m) 
    126124#else 
    127125   LOGICAL, PUBLIC, PARAMETER ::   lk_vvl = .FALSE.   !: fixed grid flag 
     
    129127   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   &   !: 
    130128      hur, hvr,          &  !: inverse of u and v-points ocean depth (1/m) 
    131       hu , hv               !: depth at u- and v-points (meters) 
     129      hu , hv,           &  !: depth at u- and v-points (meters) 
     130      hu_0 , hv_0           !: refernce depth at u- and v-points (meters) 
    132131 
    133132   !! z-coordinate with full steps (also used in the other cases as reference z-coordinate) 
  • trunk/NEMO/OPA_SRC/DOM/domain.F90

    r1335 r1438  
    44   !! Ocean initialization : domain initialization 
    55   !!============================================================================== 
    6  
     6   !! History :  OPA  !  1990-10  (C. Levy - G. Madec)  Original code 
     7   !!                 !  1991-11  (G. Madec) 
     8   !!                 !  1992-01  (M. Imbard) insert time step initialization 
     9   !!                 !  1996-06  (G. Madec) generalized vertical coordinate  
     10   !!                 !  1997-02  (G. Madec) creation of domwri.F 
     11   !!                 !  2001-05  (E.Durand - G. Madec) insert closed sea 
     12   !!   NEMO     1.0  !  2002-08  (G. Madec)  F90: Free form and module 
     13   !!            2.0  !  2005-11  (V. Garnier) Surface pressure gradient organization 
     14   !!---------------------------------------------------------------------- 
     15    
    716   !!---------------------------------------------------------------------- 
    817   !!   dom_init       : initialize the space and time domain 
     
    1019   !!   dom_ctl        : control print for the ocean domain 
    1120   !!---------------------------------------------------------------------- 
    12    !! * Modules used 
    1321   USE oce             !  
    1422   USE dom_oce         ! ocean space and time domain 
     
    3038   PRIVATE 
    3139 
    32    !! * Routine accessibility 
    33    PUBLIC dom_init       ! called by opa.F90 
     40   PUBLIC   dom_init   ! called by opa.F90 
    3441 
    3542   !! * Substitutions 
    3643#  include "domzgr_substitute.h90" 
    37    !!---------------------------------------------------------------------- 
    38    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     44   !!------------------------------------------------------------------------- 
     45   !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009)  
    3946   !! $Id$ 
    40    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
    41    !!---------------------------------------------------------------------- 
     47   !! Software is governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     48   !!------------------------------------------------------------------------- 
    4249 
    4350CONTAINS 
     
    5865      !!      - dom_stp: defined the model time step 
    5966      !!      - dom_wri: create the meshmask file if nmsh=1 
    60       !! 
    61       !! History : 
    62       !!        !  90-10  (C. Levy - G. Madec)  Original code 
    63       !!        !  91-11  (G. Madec) 
    64       !!        !  92-01  (M. Imbard) insert time step initialization 
    65       !!        !  96-06  (G. Madec) generalized vertical coordinate  
    66       !!        !  97-02  (G. Madec) creation of domwri.F 
    67       !!        !  01-05  (E.Durand - G. Madec) insert closed sea 
    68       !!   8.5  !  02-08  (G. Madec)  F90: Free form and module 
    69       !!   9.0  !  05-11  (V. Garnier) Surface pressure gradient organization 
    70       !!---------------------------------------------------------------------- 
    71       !! * Local declarations 
     67      !!---------------------------------------------------------------------- 
    7268      INTEGER ::   jk                ! dummy loop argument 
    7369      INTEGER ::   iconf = 0         ! temporary integers 
     
    9086      CALL dom_msk                        ! Masks 
    9187 
    92       IF( lk_vvl )   CALL dom_vvl_ini     ! Vertical variable mesh 
     88      IF( lk_vvl )   CALL dom_vvl         ! Vertical variable mesh 
    9389 
    9490      ! Local depth or Inverse of the local depth of the water column at u- and v-points 
    9591      ! ------------------------------ 
    9692      ! Ocean depth at U- and V-points 
    97       hu(:,:) = 0. 
    98       hv(:,:) = 0. 
    99  
     93      hu(:,:) = 0.e0 
     94      hv(:,:) = 0.e0 
    10095      DO jk = 1, jpk 
    10196         hu(:,:) = hu(:,:) + fse3u(:,:,jk) * umask(:,:,jk) 
     
    105100      hur(:,:) = fse3u(:,:,1)             ! Lower bound : thickness of the first model level 
    106101      hvr(:,:) = fse3v(:,:,1) 
    107  
    108102      DO jk = 2, jpk                      ! Sum of the vertical scale factors 
    109103         hur(:,:) = hur(:,:) + fse3u(:,:,jk) * umask(:,:,jk) 
    110104         hvr(:,:) = hvr(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) 
    111105      END DO 
    112  
    113106      ! Compute and mask the inverse of the local depth 
    114107      hur(:,:) = 1. / hur(:,:) * umask(:,:,1) 
    115108      hvr(:,:) = 1. / hvr(:,:) * vmask(:,:,1) 
    116109 
    117  
    118110      CALL dom_stp                        ! Time step 
    119111 
     
    121113 
    122114      IF( .NOT.ln_rstart )   CALL dom_ctl    ! Domain control 
    123  
     115      ! 
    124116   END SUBROUTINE dom_init 
    125117 
     
    134126      !!              - namdom namelist 
    135127      !!              - namcla namelist 
    136       !! 
    137       !! History : 
    138       !!   9.0  !  03-08  (G. Madec)  Original code 
    139       !!---------------------------------------------------------------------- 
    140       !! * Modules used 
     128      !!---------------------------------------------------------------------- 
    141129      USE ioipsl 
    142130      NAMELIST/namrun/ no    , cexper, cn_ocerst_in, cn_ocerst_out, ln_rstart, nrstdt,   & 
     
    156144      ENDIF 
    157145 
    158       ! Namelist namrun : parameters of the run 
    159       REWIND( numnam ) 
     146      REWIND( numnam )              ! Namelist namrun : parameters of the run 
    160147      READ  ( numnam, namrun ) 
    161  
    162148      IF(lwp) THEN 
    163149         WRITE(numout,*) '        Namelist namrun' 
     
    228214      ENDIF 
    229215 
    230       ! Namelist namdom : space/time domain (bathymetry, mesh, timestep) 
    231       REWIND( numnam ) 
     216      REWIND( numnam )              ! Namelist namdom : space/time domain (bathymetry, mesh, timestep) 
    232217      READ  ( numnam, namdom ) 
    233218 
     
    252237      ENDIF 
    253238 
    254       ! Default values 
    255239      n_cla = 0 
    256  
    257       ! Namelist cross land advection 
    258       REWIND( numnam ) 
     240      REWIND( numnam )              ! Namelist cross land advection 
    259241      READ  ( numnam, namcla ) 
    260242      IF(lwp) THEN 
     
    264246      ENDIF 
    265247 
    266       IF( nbit_cmp == 1 .AND. n_cla /= 0 ) THEN 
    267          CALL ctl_stop( ' Reproductibility tests (nbit_cmp=1) require n_cla = 0' ) 
    268       END IF 
    269  
     248      IF( nbit_cmp == 1 .AND. n_cla /= 0 )   CALL ctl_stop( ' Reproductibility tests (nbit_cmp=1) require n_cla = 0' ) 
     249      ! 
    270250   END SUBROUTINE dom_nam 
    271251 
     
    278258      !! 
    279259      !! ** Method  :   compute and print extrema of masked scale factors 
    280       !! 
    281       !! History : 
    282       !!   8.5  !  02-08  (G. Madec)    Original code 
    283       !!---------------------------------------------------------------------- 
    284       !! * Local declarations 
     260      !!---------------------------------------------------------------------- 
    285261      INTEGER ::   iimi1, ijmi1, iimi2, ijmi2, iima1, ijma1, iima2, ijma2 
    286262      INTEGER, DIMENSION(2) ::   iloc      !  
    287263      REAL(wp) ::   ze1min, ze1max, ze2min, ze2max 
    288264      !!---------------------------------------------------------------------- 
    289  
    290       ! Extrema of the scale factors 
    291265 
    292266      IF(lwp)WRITE(numout,*) 
     
    325299         WRITE(numout,"(14x,'e2t mini: ',1f10.2,' at i = ',i5,' j= ',i5)") ze2min, iimi2, ijmi2 
    326300      ENDIF 
    327  
     301      ! 
    328302   END SUBROUTINE dom_ctl 
    329303 
  • trunk/NEMO/OPA_SRC/DOM/domvvl.F90

    r1146 r1438  
    44   !! Ocean :  
    55   !!====================================================================== 
    6    !! History :   9.0  !  06-06  (B. Levier, L. Marie)  original code 
    7    !!              "   !  07-07  (D. Storkey) Bug fixes and code for BDY option. 
     6   !! History :  2.0  !  2006-06  (B. Levier, L. Marie)  original code 
     7   !!            3.1  !  2009-02  (G. Madec, M. Leclair, R. Benshila)  pure z* coordinate 
    88   !!---------------------------------------------------------------------- 
    9  
     9#if defined key_vvl 
    1010   !!---------------------------------------------------------------------- 
    1111   !!   'key_vvl'                              variable volume 
    1212   !!---------------------------------------------------------------------- 
     13   !!   dom_vvl     : defined coefficients to distribute ssh on each layers 
    1314   !!---------------------------------------------------------------------- 
    14    !!   dom_vvl         : defined scale factors & depths at each time step 
    15    !!   dom_vvl_ini     : defined coefficients to distribute ssh on each layers 
    16    !!   dom_vvl_ssh     : defined the ocean sea level at each time step 
    17    !!---------------------------------------------------------------------- 
    18    !! * Modules used 
    1915   USE oce             ! ocean dynamics and tracers 
    2016   USE dom_oce         ! ocean space and time domain 
    2117   USE sbc_oce         ! surface boundary condition: ocean 
    22    USE dynspg_oce      ! surface pressure gradient variables 
    2318   USE phycst          ! physical constants 
    2419   USE in_out_manager  ! I/O manager 
    2520   USE lib_mpp         ! distributed memory computing library 
    2621   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    27    USE bdy_oce         ! unstructured open boundary conditions 
    2822 
    2923   IMPLICIT NONE 
    3024   PRIVATE 
    3125 
    32    !! * Routine accessibility 
    33    PUBLIC dom_vvl_ini    ! called by dom_init.F90 
    34    PUBLIC dom_vvl_ssh    ! called by trazdf.F90 
    35    PUBLIC dom_vvl        ! called by istate.F90 and step.F90 
    36    PUBLIC dom_vvl_sf_ini !  
    37    PUBLIC dom_vvl_sf     !  
     26   PUBLIC dom_vvl        ! called by domain.F90 
    3827 
    39    !! * Module variables 
    40    REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   &  !: 
    41       mut, muu, muv, muf                            !: 
     28   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   ee_t, ee_u, ee_v, ee_f   !: ??? 
     29 
     30   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   mut, muu, muv, muf   !: ???  
    4231 
    4332   REAL(wp), DIMENSION(jpk) ::   r2dt               ! vertical profile time-step, = 2 rdttra  
     
    4837#  include "vectopt_loop_substitute.h90" 
    4938   !!---------------------------------------------------------------------- 
    50    !!   OPA 9.0 , LOCEAN-IPSL (2005)  
     39   !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009)  
    5140   !! $Id$ 
    5241   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     
    5544CONTAINS        
    5645 
    57 #if defined key_vvl 
    58  
    59    SUBROUTINE dom_vvl_ini 
     46   SUBROUTINE dom_vvl 
    6047      !!---------------------------------------------------------------------- 
    61       !!                ***  ROUTINE dom_vvl_ini  *** 
     48      !!                ***  ROUTINE dom_vvl  *** 
    6249      !!                    
    6350      !! ** Purpose :  compute coefficients muX at T-U-V-F points to spread 
     
    6552      !! 
    6653      !!---------------------------------------------------------------------- 
    67       INTEGER  ::   ji, jj, jk, zpk 
    68       REAL(wp), DIMENSION(jpi,jpj) ::   zmut, zmuu, zmuv, zmuf   ! 2D workspace 
     54      INTEGER  ::   ji, jj, jk 
     55      REAL(wp) ::   zcoefu, zcoefv, zcoeff 
    6956      !!---------------------------------------------------------------------- 
    7057 
    7158      IF(lwp)   THEN 
    7259         WRITE(numout,*) 
    73          WRITE(numout,*) 'dom_vvl_ini : Variable volume activated' 
    74          WRITE(numout,*) '~~~~~~~~~~~   compute coef. used to spread ssh over each layers' 
     60         WRITE(numout,*) 'dom_vvl : Variable volume activated' 
     61         WRITE(numout,*) '~~~~~~~~  compute coef. used to spread ssh over each layers' 
    7562      ENDIF 
    76  
    77       IF( ln_zps )  CALL ctl_stop( 'dom_vvl_ini : option ln_zps is incompatible with variable volume option key_vvl') 
    7863 
    7964#if defined key_zco  ||  defined key_dynspg_rl 
     
    8166#endif 
    8267 
    83       fsvdept (:,:,:) = gdept (:,:,:) 
    84       fsvdepw (:,:,:) = gdepw (:,:,:) 
    85       fsvde3w (:,:,:) = gdep3w(:,:,:) 
    86       fsve3t (:,:,:) = e3t   (:,:,:) 
    87       fsve3u (:,:,:) = e3u   (:,:,:) 
    88       fsve3v (:,:,:) = e3v   (:,:,:) 
    89       fsve3f (:,:,:) = e3f   (:,:,:) 
    90       fsve3w (:,:,:) = e3w   (:,:,:) 
    91       fsve3uw (:,:,:) = e3uw  (:,:,:) 
    92       fsve3vw (:,:,:) = e3vw  (:,:,:) 
     68      fsdept(:,:,:) = gdept (:,:,:) 
     69      fsdepw(:,:,:) = gdepw (:,:,:) 
     70      fsde3w(:,:,:) = gdep3w(:,:,:) 
     71      fse3t (:,:,:) = e3t   (:,:,:) 
     72      fse3u (:,:,:) = e3u   (:,:,:) 
     73      fse3v (:,:,:) = e3v   (:,:,:) 
     74      fse3f (:,:,:) = e3f   (:,:,:) 
     75      fse3w (:,:,:) = e3w   (:,:,:) 
     76      fse3uw(:,:,:) = e3uw  (:,:,:) 
     77      fse3vw(:,:,:) = e3vw  (:,:,:) 
    9378 
    9479      ! mu computation 
    95       zmut(:,:)   = 0.e0 
    96       zmuu(:,:)   = 0.e0 
    97       zmuv(:,:)   = 0.e0 
    98       zmuf(:,:)   = 0.e0 
    99       mut (:,:,:) = 0.e0 
    100       muu (:,:,:) = 0.e0 
    101       muv (:,:,:) = 0.e0 
    102       muf (:,:,:) = 0.e0 
     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 
     83      ee_u(:,:) = fse3u_0(:,:,1) 
     84      ee_v(:,:) = fse3v_0(:,:,1) 
     85      ee_f(:,:) = fse3f_0(:,:,1) 
     86      DO jk = 2, jpkm1                   ! Sum of the masked vertical scale factors 
     87         ee_t(:,:) = ee_t(:,:) + fse3t_0(:,:,jk) * tmask(:,:,jk) 
     88         ee_u(:,:) = ee_u(:,:) + fse3u_0(:,:,jk) * umask(:,:,jk) 
     89         ee_v(:,:) = ee_v(:,:) + fse3v_0(:,:,jk) * vmask(:,:,jk) 
     90         DO jj = 1, jpjm1                      ! f-point : fmask=shlat at coasts, use the product of umask 
     91            ee_f(:,jj) = ee_f(:,jj) + fse3f_0(:,jj,jk) *  umask(:,jj,jk) * umask(:,jj+1,jk) 
     92         END DO 
     93      END DO   
     94      !                                  ! Compute and mask the inverse of the local depth at T, U, V and F points 
     95      ee_t(:,:) = 1. / ee_t(:,:) * tmask(:,:,1) 
     96      ee_u(:,:) = 1. / ee_u(:,:) * umask(:,:,1) 
     97      ee_v(:,:) = 1. / ee_v(:,:) * vmask(:,:,1) 
     98      DO jj = 1, jpjm1                         ! f-point case fmask cannot be used  
     99         ee_f(:,jj) = 1. / ee_f(:,jj) * umask(:,jj,1) * umask(:,jj+1,1) 
     100      END DO 
     101      CALL lbc_lnk( ee_f, 'F', 1. )       ! lateral boundary condition on ee_f 
     102      ! 
     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 
     107      END DO 
     108      DO jk = 1, jpk 
     109         DO jj = 1, jpjm1                      ! f-point : fmask=shlat at coasts, use the product of umask 
     110               muf(:,jj,jk) = ee_f(:,jj) * umask(:,jj,jk) * umask(:,jj+1,jk)   ! at T levels 
     111         END DO 
     112         muf(:,jpj,jk) = 0.e0 
     113      END DO 
     114      CALL lbc_lnk( muf, 'F', 1. )       ! lateral boundary condition on ee_f 
    103115 
    104       DO jj = 1, jpj 
    105          DO ji = 1, jpi 
    106             zpk = mbathy(ji,jj) - 1 
    107             DO jk = 1, zpk 
    108                zmut(ji,jj) = zmut(ji,jj) + fsve3t(ji,jj,jk) * SUM( fsve3t(ji,jj,jk:zpk) ) 
    109                zmuu(ji,jj) = zmuu(ji,jj) + fsve3u(ji,jj,jk) * SUM( fsve3u(ji,jj,jk:zpk) ) 
    110                zmuv(ji,jj) = zmuv(ji,jj) + fsve3v(ji,jj,jk) * SUM( fsve3v(ji,jj,jk:zpk) ) 
    111                zmuf(ji,jj) = zmuf(ji,jj) + fsve3f(ji,jj,jk) * SUM( fsve3f(ji,jj,jk:zpk) ) 
    112             END DO 
     116 
     117      ! Reference ocean depth at U- and V-points 
     118      hu_0(:,:) = 0.e0     
     119      hv_0(:,:) = 0.e0 
     120      DO jk = 1, jpk 
     121         hu_0(:,:) = hu_0(:,:) + fse3u_0(:,:,jk) * umask(:,:,jk) 
     122         hv_0(:,:) = hv_0(:,:) + fse3v_0(:,:,jk) * vmask(:,:,jk) 
     123      END DO 
     124 
     125      ! before and now Sea Surface Height at u-, v-, f-points 
     126      DO jj = 1, jpjm1 
     127         DO ji = 1, jpim1 
     128            zcoefu = 0.5  * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) ) 
     129            zcoefv = 0.5  * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) ) 
     130            zcoeff = 0.25 * umask(ji,jj,1) * umask(ji,jj+1,1) 
     131            sshu_b(ji,jj) = zcoefu * ( e1t(ji  ,jj) * e2t(ji  ,jj) * sshb(ji  ,jj)     & 
     132               &                     + e1t(ji+1,jj) * e2t(ji+1,jj) * sshb(ji+1,jj) )    
     133            sshv_b(ji,jj) = zcoefv * ( e1t(ji,jj  ) * e2t(ji,jj  ) * sshb(ji,jj  )     & 
     134               &                     + e1t(ji,jj+1) * e2t(ji,jj+1) * sshb(ji,jj+1) )    
     135            sshf_b(ji,jj) = zcoeff * ( sshb(ji  ,jj) + sshb(ji  ,jj+1)                 & 
     136               &                     + sshb(ji+1,jj) + sshb(ji+1,jj+1) )                
     137            sshu_n(ji,jj) = zcoefu * ( e1t(ji  ,jj) * e2t(ji  ,jj) * sshn(ji  ,jj)     & 
     138               &                     + e1t(ji+1,jj) * e2t(ji+1,jj) * sshn(ji+1,jj) )    
     139            sshv_n(ji,jj) = zcoefv * ( e1t(ji,jj  ) * e2t(ji,jj  ) * sshn(ji,jj  )     &  
     140               &                     + e1t(ji,jj+1) * e2t(ji,jj+1) * sshn(ji,jj+1) )      
     141            sshf_n(ji,jj) = zcoeff * ( sshn(ji  ,jj) + sshn(ji  ,jj+1)                 & 
     142               &                     + sshn(ji+1,jj) + sshn(ji+1,jj+1) )                
    113143         END DO 
    114144      END DO 
    115  
    116       DO jj = 1, jpj 
    117          DO ji = 1, jpi 
    118             zpk = mbathy(ji,jj) - 1 
    119             DO jk = 1, zpk 
    120 #if defined key_sigma_vvl 
    121                mut(ji,jj,jk) = 1./SUM( fsve3t(ji,jj,1:zpk) )  
    122                muu(ji,jj,jk) = 1./SUM( fsve3u(ji,jj,1:zpk) )  
    123                muv(ji,jj,jk) = 1./SUM( fsve3v(ji,jj,1:zpk) )  
    124                muf(ji,jj,jk) = 1./SUM( fsve3f(ji,jj,1:zpk) )  
    125 #else 
    126                mut(ji,jj,jk) = SUM( fsve3t(ji,jj,jk:zpk) ) / zmut(ji,jj) 
    127                muu(ji,jj,jk) = SUM( fsve3u(ji,jj,jk:zpk) ) / zmuu(ji,jj) 
    128                muv(ji,jj,jk) = SUM( fsve3v(ji,jj,jk:zpk) ) / zmuv(ji,jj) 
    129                muf(ji,jj,jk) = SUM( fsve3f(ji,jj,jk:zpk) ) / zmuf(ji,jj) 
    130 #endif 
    131             END DO 
    132          END DO 
    133       END DO 
    134  
    135  
    136    END SUBROUTINE dom_vvl_ini 
    137  
    138  
    139  
    140    SUBROUTINE dom_vvl 
    141       !!---------------------------------------------------------------------- 
    142       !!                ***  ROUTINE dom_vvl  *** 
    143       !!                    
    144       !! ** Purpose :  compute ssh at U-V-F points, T-W scale factors and local 
    145       !!               depths at each time step. 
    146       !!---------------------------------------------------------------------- 
    147       !! * Local declarations 
    148       INTEGER  ::   ji, jj, jk                 ! dummy loop indices 
    149       REAL(wp), DIMENSION(jpi,jpj) :: zsshf    ! 2D workspace 
    150       !!---------------------------------------------------------------------- 
    151  
    152       ! Sea Surface Height at u-v-fpoints 
    153       DO jj = 1, jpjm1 
    154          DO ji = 1,jpim1 
    155             sshu(ji,jj) = 0.5 * umask(ji,jj,1) / ( e1u(ji,jj) * e2u(ji,jj) )  & 
    156                &          * ( e1t(ji  ,jj) * e2t(ji  ,jj) * sshn(ji  ,jj)     & 
    157                &            + e1t(ji+1,jj) * e2t(ji+1,jj) * sshn(ji+1,jj) ) 
    158             ! 
    159             sshv(ji,jj) = 0.5 * vmask(ji,jj,1) / ( e1v(ji,jj) * e2v(ji,jj) )  & 
    160                &          * ( e1t(ji,jj  ) * e2t(ji,jj  ) * sshn(ji,jj  )     & 
    161                &            + e1t(ji,jj+1) * e2t(ji,jj+1) * sshn(ji,jj+1) ) 
    162             ! 
    163             zsshf(ji,jj) = 0.25 * fmask(ji,jj,1)                 & 
    164                &           * ( sshn(ji  ,jj) + sshn(ji  ,jj+1)   & 
    165                &             + sshn(ji+1,jj) + sshn(ji+1,jj+1) ) 
    166          END DO 
    167       END DO 
    168  
    169145      ! Boundaries conditions 
    170       CALL lbc_lnk( sshu,  'U', 1. ) 
    171       CALL lbc_lnk( sshv,  'V', 1. ) 
    172       CALL lbc_lnk( zsshf, 'F', 1. ) 
    173  
    174       ! Scale factors at T levels 
    175       DO jk = 1, jpkm1 
    176          fse3t(:,:,jk) = fsve3t(:,:,jk) * ( 1 + sshn(:,:)  * mut(:,:,jk) ) 
    177          fse3u(:,:,jk) = fsve3u(:,:,jk) * ( 1 + sshu(:,:)  * muu(:,:,jk) ) 
    178          fse3v(:,:,jk) = fsve3v(:,:,jk) * ( 1 + sshv(:,:)  * muv(:,:,jk) ) 
    179          fse3f(:,:,jk) = fsve3f(:,:,jk) * ( 1 + zsshf(:,:) * muf(:,:,jk) ) 
    180       END DO 
    181  
    182       ! Scale factors at W levels 
    183       fse3w (:,:,1) = fse3t(:,:,1) 
    184       fse3uw(:,:,1) = fse3u(:,:,1) 
    185       fse3vw(:,:,1) = fse3v(:,:,1) 
    186       DO jk = 2, jpk 
    187          fse3w (:,:,jk) = 0.5 * ( fse3t(:,:,jk-1) + fse3t(:,:,jk) ) 
    188          fse3uw(:,:,jk) = 0.5 * ( fse3u(:,:,jk-1) + fse3u(:,:,jk) ) 
    189          fse3vw(:,:,jk) = 0.5 * ( fse3v(:,:,jk-1) + fse3v(:,:,jk) ) 
    190       END DO 
    191  
    192       ! T and W points depth 
    193       fsdept(:,:,1) = 0.5 * fse3w(:,:,1) 
    194       fsdepw(:,:,1) = 0.e0 
    195       fsde3w(:,:,1) = fsdept(:,:,1) - sshn(:,:) 
    196       DO jk = 2, jpk 
    197          fsdept(:,:,jk) = fsdept(:,:,jk-1) + fse3w(:,:,jk) 
    198          fsdepw(:,:,jk) = fsdepw(:,:,jk-1) + fse3t(:,:,jk-1) 
    199          fsde3w(:,:,jk) = fsdept(:,:,jk  ) - sshn(:,:) 
    200       END DO 
    201  
    202       IF( MINVAL(fse3t(:,:,:)) < 0.0 ) THEN 
    203          CALL ctl_stop('E R R O R : dom_vvl','Level thickness fse3t less than zero.') 
    204          nstop = nstop+1 
    205       ENDIF 
    206  
    207       ! Local depth or Inverse of the local depth of the water column at u- and v-points 
    208       ! ------------------------------ 
    209  
    210       ! Ocean depth at U- and V-points 
    211       hu(:,:) = 0.e0    ;    hv(:,:) = 0.e0 
    212  
    213       DO jk = 1, jpk 
    214          hu(:,:) = hu(:,:) + fse3u(:,:,jk) * umask(:,:,jk) 
    215          hv(:,:) = hv(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) 
    216       END DO 
    217  
    218  
    219       ! Inverse of the local depth 
    220       hur(:,:) = fse3u(:,:,1)             ! Lower bound : thickness of the first model level 
    221       hvr(:,:) = fse3v(:,:,1) 
    222        
    223       DO jk = 2, jpk                      ! Sum of the vertical scale factors 
    224          hur(:,:) = hur(:,:) + fse3u(:,:,jk) * umask(:,:,jk) 
    225          hvr(:,:) = hvr(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) 
    226       END DO 
    227  
    228       ! Compute and mask the inverse of the local depth 
    229       hur(:,:) = 1. / hur(:,:) * umask(:,:,1) 
    230       hvr(:,:) = 1. / hvr(:,:) * vmask(:,:,1) 
    231  
     146      CALL lbc_lnk( sshu_b, 'U', 1. )   ;   CALL lbc_lnk( sshu_n, 'U', 1. ) 
     147      CALL lbc_lnk( sshv_b, 'V', 1. )   ;   CALL lbc_lnk( sshv_n, 'V', 1. ) 
     148      CALL lbc_lnk( sshf_b, 'F', 1. )   ;   CALL lbc_lnk( sshf_n, 'F', 1. ) 
     149      ! 
    232150   END SUBROUTINE dom_vvl 
    233151 
    234  
    235  
    236    SUBROUTINE dom_vvl_ssh( kt )  
    237       !!---------------------------------------------------------------------- 
    238       !!                ***  ROUTINE dom_vvl_ssh  *** 
    239       !!                    
    240       !! ** Purpose :  compute the ssha field used in tra_zdf, dynnxt, tranxt  
    241       !!               and dynspg routines 
    242       !!---------------------------------------------------------------------- 
    243       !! * Arguments 
    244       INTEGER, INTENT( in )  ::    kt                         ! time step 
    245  
    246       !! * Local declarations 
    247       INTEGER  ::   ji, jj, jk                                ! dummy loop indices 
    248       REAL(wp) ::   z2dt, zraur                               ! temporary scalars 
    249       REAL(wp), DIMENSION(jpi,jpj) ::   zun, zvn, zhdiv       ! 2D workspace 
    250       !!---------------------------------------------------------------------- 
    251  
    252       !! Sea surface height after (ssha) in variable volume case 
    253       !! --------------------------====-----===============----- 
    254       !! ssha is needed for the tracer time-stepping (trazdf_imp or 
    255       !! tra_nxt), for the ssh time-stepping (dynspg_*) and for the 
    256       !! dynamics time-stepping (dynspg_flt or dyn_nxt, and wzv). 
    257       !! un, vn (or un_b and vn_b) and emp are needed, so it must be 
    258       !! done after the call of oce_sbc. 
    259  
    260       IF( neuler == 0 .AND. kt == nit000 ) THEN     ! at nit000 
    261          r2dt(:) =  rdttra(:)                       ! = rdtra (restarting with Euler time stepping) 
    262       ELSEIF( kt <= nit000 + 1) THEN                ! at nit000 or nit000+1 
    263          r2dt(:) = 2. * rdttra(:)                   ! = 2 rdttra (leapfrog) 
    264       ENDIF 
    265  
    266       z2dt  = r2dt(1) 
    267       zraur = 1. / rauw 
    268  
    269       ! Vertically integrated quantities 
    270       ! -------------------------------- 
    271       IF( .NOT. lk_dynspg_ts .OR. (neuler == 0 .AND. kt == nit000) ) THEN 
    272          zun(:,:) = 0.e0    ;    zvn(:,:) = 0.e0 
    273          ! 
    274          DO jk = 1, jpkm1 
    275             !                                               ! Vertically integrated transports (now) 
    276             zun(:,:) = zun(:,:) + fse3u(:,:,jk) * un(:,:,jk) 
    277             zvn(:,:) = zvn(:,:) + fse3v(:,:,jk) * vn(:,:,jk) 
    278          END DO 
    279       ELSE ! lk_dynspg_ts is true 
    280          zun (:,:) = un_b(:,:)    ;    zvn (:,:) = vn_b(:,:) 
    281       ENDIF 
    282  
    283       ! Horizontal divergence of barotropic transports 
    284       !-------------------------------------------------- 
    285       DO jj = 2, jpjm1 
    286          DO ji = 2, jpim1   ! vector opt. 
    287             zhdiv(ji,jj) = (  e2u(ji  ,jj  ) * zun(ji  ,jj  )    & 
    288                &            - e2u(ji-1,jj  ) * zun(ji-1,jj  )    & 
    289                &            + e1v(ji  ,jj  ) * zvn(ji  ,jj  )    & 
    290                &            - e1v(ji  ,jj-1) * zvn(ji  ,jj-1) )  & 
    291                &           / ( e1t(ji,jj) * e2t(ji,jj) ) 
    292          END DO 
    293       END DO 
    294  
    295 #if defined key_obc && ( defined key_dynspg_exp || defined key_dynspg_ts ) 
    296       ! open boundaries (div must be zero behind the open boundary) 
    297       !  mpp remark: The zeroing of hdiv can probably be extended to 1->jpi/jpj for the correct row/column 
    298       IF( lp_obc_east  )   zhdiv(nie0p1:nie1p1,nje0  :nje1)   = 0.e0    ! east 
    299       IF( lp_obc_west  )   zhdiv(niw0  :niw1  ,njw0  :njw1)   = 0.e0    ! west 
    300       IF( lp_obc_north )   zhdiv(nin0  :nin1  ,njn0p1:njn1p1) = 0.e0    ! north 
    301       IF( lp_obc_south )   zhdiv(nis0  :nis1  ,njs0  :njs1)   = 0.e0    ! south 
    302 #endif 
    303  
    304 #if defined key_bdy 
    305       zhdiv(:,:) = zhdiv(:,:) * bdytmask(:,:) 
    306 #endif 
    307  
    308       CALL lbc_lnk( zhdiv, 'T', 1. ) 
    309  
    310       ! Sea surface elevation time stepping 
    311       ! ----------------------------------- 
    312       IF( .NOT. lk_dynspg_ts .OR. (neuler == 0 .AND. kt == nit000) ) THEN 
    313          ssha(:,:) = sshb(:,:) - z2dt * ( zraur * emp(:,:) + zhdiv(:,:) ) * tmask(:,:,1) 
    314       ELSE ! lk_dynspg_ts is true 
    315          ssha(:,:) = (  sshb_b(:,:) - z2dt * ( zraur * emp(:,:) + zhdiv(:,:) )  ) * tmask(:,:,1) 
    316       ENDIF 
    317  
    318  
    319    END SUBROUTINE dom_vvl_ssh 
    320  
    321    SUBROUTINE  dom_vvl_sf( zssh, gridp, sfe3 ) 
    322       !!---------------------------------------------------------------------- 
    323       !!                ***  ROUTINE dom_vvl_sf  *** 
    324       !!                    
    325       !! ** Purpose :  compute vertical scale factor at each time step 
    326       !!---------------------------------------------------------------------- 
    327       !! * Arguments 
    328       CHARACTER(LEN=1)                , INTENT( in ) :: gridp   ! grid point type 
    329       REAL(wp), DIMENSION(jpi,jpj)    , INTENT( in ) :: zssh    ! 2D workspace 
    330       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( out) :: sfe3    ! 3D workspace 
    331  
    332       !! * Local declarations 
    333       INTEGER  ::   jk                                      ! dummy loop indices 
    334       !!---------------------------------------------------------------------- 
    335  
    336       SELECT CASE (gridp) 
    337  
    338       CASE ('U') 
    339          ! 
    340          DO jk = 1, jpk 
    341             sfe3(:,:,jk)  = fsve3u(:,:,jk) * ( 1 + zssh(:,:) * muu(:,:,jk) ) 
    342          ENDDO 
    343  
    344       CASE ('V') 
    345          ! 
    346          DO jk = 1, jpk 
    347             sfe3(:,:,jk)  = fsve3v(:,:,jk) * ( 1 + zssh(:,:) * muv(:,:,jk) ) 
    348          ENDDO 
    349  
    350       CASE ('T') 
    351          ! 
    352          DO jk = 1, jpk 
    353             sfe3(:,:,jk)  = fsve3t(:,:,jk) * ( 1 + zssh(:,:) * mut(:,:,jk) ) 
    354          ENDDO 
    355  
    356       END SELECT 
    357  
    358    END SUBROUTINE dom_vvl_sf 
    359  
    360    SUBROUTINE dom_vvl_sf_ini( gridp, sfe3ini ) 
    361       !!---------------------------------------------------------------------- 
    362       !!                ***  ROUTINE dom_vvl_sf_ini  *** 
    363       !!                    
    364       !! ** Purpose :  affect the appropriate vertical scale factor. It is done 
    365       !!               to avoid compiling error when using key_zco cpp key 
    366       !!---------------------------------------------------------------------- 
    367       !! * Arguments 
    368       CHARACTER(LEN=1)                , INTENT( in ) :: gridp      ! grid point type 
    369       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT (out) :: sfe3ini    ! 3D workspace 
    370       !!---------------------------------------------------------------------- 
    371  
    372       SELECT CASE (gridp) 
    373  
    374       CASE ('U') 
    375          ! 
    376          sfe3ini(:,:,:)  = fse3u(:,:,:) 
    377  
    378       CASE ('V') 
    379          ! 
    380          sfe3ini(:,:,:)  = fse3v(:,:,:) 
    381  
    382       CASE ('T') 
    383          ! 
    384          sfe3ini(:,:,:)  = fse3t(:,:,:) 
    385  
    386       END SELECT 
    387  
    388    END SUBROUTINE dom_vvl_sf_ini 
    389152#else 
    390153   !!---------------------------------------------------------------------- 
    391154   !!   Default option :                                      Empty routine 
    392155   !!---------------------------------------------------------------------- 
    393    SUBROUTINE dom_vvl_ini 
    394    END SUBROUTINE dom_vvl_ini 
     156CONTAINS 
    395157   SUBROUTINE dom_vvl 
    396158   END SUBROUTINE dom_vvl 
    397    SUBROUTINE dom_vvl_ssh( kt )  
    398       !! * Arguments 
    399       INTEGER, INTENT( in )  ::    kt        ! time step 
    400       WRITE(*,*) 'dom_vvl_ssh: You should not have seen this print! error?', kt 
    401    END SUBROUTINE dom_vvl_ssh 
    402    SUBROUTINE dom_vvl_sf( zssh, gridp, sfe3 )  
    403       !! * Arguments 
    404       CHARACTER(LEN=1)                , INTENT( in ) :: gridp   ! grid point type 
    405       REAL(wp), DIMENSION(jpi,jpj)    , INTENT( in ) :: zssh    ! 2D workspace 
    406       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT (out) :: sfe3    ! 3D workspace 
    407       sfe3(:,:,:) = 0.e0 
    408       WRITE(*,*) 'sfe3: You should not have seen this print! error?', gridp 
    409       WRITE(*,*) 'sfe3: You should not have seen this print! error?', zssh(1,1) 
    410    END SUBROUTINE dom_vvl_sf 
    411    SUBROUTINE dom_vvl_sf_ini( gridp, sfe3ini )  
    412       !! * Arguments 
    413       CHARACTER(LEN=1)                , INTENT( in ) :: gridp    ! grid point type 
    414       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT (out) :: sfe3ini  ! 3D workspace 
    415       sfe3ini(:,:,:) = 0.e0 
    416       WRITE(*,*) 'sfe3ini: You should not have seen this print! error?', gridp 
    417    END SUBROUTINE dom_vvl_sf_ini 
    418159#endif 
    419160 
  • trunk/NEMO/OPA_SRC/DOM/domzgr_substitute.h90

    r1156 r1438  
    55   !!      factors depending on the vertical coord. used, using CPP macro. 
    66   !!---------------------------------------------------------------------- 
     7   !! History :  1.0  !  2005-10  (A. Beckmann, G. Madec) generalisation to all coord. 
     8   !!            3.1  !  2009-02  (G. Madec, M. Leclair)  pure z* coordinate 
    79   !!---------------------------------------------------------------------- 
    8    !!  OPA 9.0 , LOCEAN-IPSL (2005)  
     10#if defined key_zco 
     11! reference for pure z-coordinate (1D - no i,j and time dependency) 
     12#   define  fsdept_0(i,j,k)  gdept_0(k) 
     13#   define  fsdepw_0(i,j,k)  gdepw_0(k) 
     14#   define  fsde3w_0(i,j,k)  gdepw_0(k) 
     15#   define  fse3t_0(i,j,k)   e3t_0(k) 
     16#   define  fse3u_0(i,j,k)   e3t_0(k) 
     17#   define  fse3v_0(i,j,k)   e3t_0(k) 
     18#   define  fse3f_0(i,j,k)   e3t_0(k) 
     19#   define  fse3w_0(i,j,k)   e3w_0(k) 
     20#   define  fse3uw_0(i,j,k)  e3w_0(k) 
     21#   define  fse3vw_0(i,j,k)  e3w_0(k) 
     22#else 
     23! reference for s- or zps-coordinate (3D no time dependency) 
     24#   define  fsdept_0(i,j,k)  gdept(i,j,k) 
     25#   define  fsdepw_0(i,j,k)  gdepw(i,j,k) 
     26#   define  fsde3w_0(i,j,k)  gdep3w(i,j,k) 
     27#   define  fse3t_0(i,j,k)   e3t(i,j,k) 
     28#   define  fse3u_0(i,j,k)   e3u(i,j,k) 
     29#   define  fse3v_0(i,j,k)   e3v(i,j,k) 
     30#   define  fse3f_0(i,j,k)   e3f(i,j,k) 
     31#   define  fse3w_0(i,j,k)   e3w(i,j,k) 
     32#   define  fse3uw_0(i,j,k)  e3uw(i,j,k) 
     33#   define  fse3vw_0(i,j,k)  e3vw(i,j,k) 
     34#endif 
     35#if defined key_vvl 
     36! s* or z*-coordinate (3D + time dependency) + use of additional now arrays (..._1) 
     37#   define  fsdept(i,j,k)  gdept_1(i,j,k) 
     38#   define  fsdepw(i,j,k)  gdepw_1(i,j,k) 
     39#   define  fsde3w(i,j,k)  gdep3w_1(i,j,k) 
     40#   define  fse3t(i,j,k)   e3t_1(i,j,k) 
     41#   define  fse3u(i,j,k)   e3u_1(i,j,k) 
     42#   define  fse3v(i,j,k)   e3v_1(i,j,k) 
     43#   define  fse3f(i,j,k)   e3f_1(i,j,k) 
     44#   define  fse3w(i,j,k)   e3w_1(i,j,k) 
     45#   define  fse3uw(i,j,k)  e3uw_1(i,j,k) 
     46#   define  fse3vw(i,j,k)  e3vw_1(i,j,k) 
     47 
     48#   define  fsdept_b(i,j,k)  (fsdept_0(i,j,k)*(1+sshb(i,j)*mut(i,j,k))) 
     49#   define  fsdepw_b(i,j,k)  (fsdepw_0(i,j,k)*(1+sshb(i,j)*mut(i,j,k))) 
     50#   define  fsde3w_b(i,j,k)  (fsde3w_0(i,j,k)*(1+sshb(i,j)*mut(i,j,k))-sshb(i,j)) 
     51#   define  fse3t_b(i,j,k)   (fse3t_0(i,j,k)*(1+sshb(i,j)*mut(i,j,k))) 
     52#   define  fse3u_b(i,j,k)   (fse3u_0(i,j,k)*(1+sshu_b(i,j)*muu(i,j,k))) 
     53#   define  fse3v_b(i,j,k)   (fse3v_0(i,j,k)*(1+sshv_b(i,j)*muv(i,j,k))) 
     54#   define  fse3f_b(i,j,k)   (fse3f_0(i,j,k)*(1+sshf_b(i,j)*muf(i,j,k))) 
     55#   define  fse3w_b(i,j,k)   (fse3w_0(i,j,k)*(1+sshb(i,j)*mut(i,j,k))) 
     56#   define  fse3uw_b(i,j,k)  (fse3uw_0(i,j,k)*(1+sshu_b(i,j)*muu(i,j,k))) 
     57#   define  fse3vw_b(i,j,k)  (fse3vw_0(i,j,k)*(1+sshv_b(i,j)*muv(i,j,k))) 
     58 
     59#   define  fsdept_n(i,j,k)  (fsdept_0(i,j,k)*(1+sshn(i,j)*mut(i,j,k))) 
     60#   define  fsdepw_n(i,j,k)  (fsdepw_0(i,j,k)*(1+sshn(i,j)*mut(i,j,k))) 
     61#   define  fsde3w_n(i,j,k)  (fsde3w_0(i,j,k)*(1+sshn(i,j)*mut(i,j,k))-sshn(i,j)) 
     62#   define  fse3t_n(i,j,k)   (fse3t_0(i,j,k)*(1+sshn(i,j)*mut(i,j,k))) 
     63#   define  fse3u_n(i,j,k)   (fse3u_0(i,j,k)*(1+sshu_n(i,j)*muu(i,j,k))) 
     64#   define  fse3v_n(i,j,k)   (fse3v_0(i,j,k)*(1+sshv_n(i,j)*muv(i,j,k))) 
     65#   define  fse3f_n(i,j,k)   (fse3f_0(i,j,k)*(1+sshf_n(i,j)*muf(i,j,k))) 
     66#   define  fse3w_n(i,j,k)   (fse3w_0(i,j,k)*(1+sshn(i,j)*mut(i,j,k))) 
     67#   define  fse3uw_n(i,j,k)  (fse3uw_0(i,j,k)*(1+sshu_n(i,j)*muu(i,j,k))) 
     68#   define  fse3vw_n(i,j,k)  (fse3vw_0(i,j,k)*(1+sshv_n(i,j)*muv(i,j,k))) 
     69 
     70#   define  fsdept_a(i,j,k)  (fsdept_0(i,j,k)*(1+ssha(i,j)*mut(i,j,k))) 
     71#   define  fsdepw_a(i,j,k)  (fsdepw_0(i,j,k)*(1+ssha(i,j)*mut(i,j,k))) 
     72#   define  fsde3w_a(i,j,k)  (fsde3w_0(i,j,k)*(1+ssha(i,j)*mut(i,j,k))-ssha(i,j)) 
     73#   define  fse3t_a(i,j,k)   (fse3t_0(i,j,k)*(1+ssha(i,j)*mut(i,j,k))) 
     74#   define  fse3u_a(i,j,k)   (fse3u_0(i,j,k)*(1+sshu_a(i,j)*muu(i,j,k))) 
     75#   define  fse3v_a(i,j,k)   (fse3v_0(i,j,k)*(1+sshv_a(i,j)*muv(i,j,k))) 
     76#   define  fse3f_a(i,j,k)   (fse3f_0(i,j,k)*(1+sshf_a(i,j)*muf(i,j,k))) 
     77#   define  fse3w_a(i,j,k)   (fse3w_0(i,j,k)*(1+ssha(i,j)*mut(i,j,k))) 
     78#   define  fse3uw_a(i,j,k)  (fse3uw_0(i,j,k)*(1+sshu_a(i,j)*muu(i,j,k))) 
     79#   define  fse3vw_a(i,j,k)  (fse3vw_0(i,j,k)*(1+sshv_a(i,j)*muv(i,j,k))) 
     80 
     81#else 
     82! z- or s-coordinate (1D or 3D + no time dependency) use reference in all cases 
     83#   define  fsdept(i,j,k)  fsdept_0(i,j,k) 
     84#   define  fsdepw(i,j,k)  fsdepw_0(i,j,k) 
     85#   define  fsde3w(i,j,k)  fsde3w_0(i,j,k) 
     86#   define  fse3t(i,j,k)   fse3t_0(i,j,k) 
     87#   define  fse3u(i,j,k)   fse3u_0(i,j,k) 
     88#   define  fse3v(i,j,k)   fse3v_0(i,j,k) 
     89#   define  fse3f(i,j,k)   fse3f_0(i,j,k) 
     90#   define  fse3w(i,j,k)   fse3w_0(i,j,k) 
     91#   define  fse3uw(i,j,k)  fse3uw_0(i,j,k) 
     92#   define  fse3vw(i,j,k)  fse3vw_0(i,j,k) 
     93 
     94#   define  fsdept_b(i,j,k)  fsdept_0(i,j,k) 
     95#   define  fsdepw_b(i,j,k)  fsdepw_0(i,j,k) 
     96#   define  fsde3w_b(i,j,k)  fsde3w_0(i,j,k) 
     97#   define  fse3t_b(i,j,k)   fse3t_0(i,j,k) 
     98#   define  fse3u_b(i,j,k)   fse3u_0(i,j,k) 
     99#   define  fse3v_b(i,j,k)   fse3v_0(i,j,k) 
     100#   define  fse3f_b(i,j,k)   fse3f_0(i,j,k) 
     101#   define  fse3w_b(i,j,k)   fse3w_0(i,j,k) 
     102#   define  fse3uw_b(i,j,k)  fse3uw_0(i,j,k) 
     103#   define  fse3vw_b(i,j,k)  fse3vw_0(i,j,k) 
     104 
     105#   define  fsdept_n(i,j,k)  fsdept_0(i,j,k) 
     106#   define  fsdepw_n(i,j,k)  fsdepw_0(i,j,k) 
     107#   define  fsde3w_n(i,j,k)  fsde3w_0(i,j,k) 
     108#   define  fse3t_n(i,j,k)   fse3t_0(i,j,k) 
     109#   define  fse3u_n(i,j,k)   fse3u_0(i,j,k) 
     110#   define  fse3v_n(i,j,k)   fse3v_0(i,j,k) 
     111#   define  fse3f_n(i,j,k)   fse3f_0(i,j,k) 
     112#   define  fse3w_n(i,j,k)   fse3w_0(i,j,k) 
     113#   define  fse3uw_n(i,j,k)  fse3uw_0(i,j,k) 
     114#   define  fse3vw_n(i,j,k)  fse3vw_0(i,j,k) 
     115 
     116#   define  fsdept_a(i,j,k)  fsdept_0(i,j,k) 
     117#   define  fsdepw_a(i,j,k)  fsdepw_0(i,j,k) 
     118#   define  fsde3w_a(i,j,k)  fsde3w_0(i,j,k) 
     119#   define  fse3t_a(i,j,k)   fse3t_0(i,j,k) 
     120#   define  fse3u_a(i,j,k)   fse3u_0(i,j,k) 
     121#   define  fse3v_a(i,j,k)   fse3v_0(i,j,k) 
     122#   define  fse3f_a(i,j,k)   fse3f_0(i,j,k) 
     123#   define  fse3w_a(i,j,k)   fse3w_0(i,j,k) 
     124#   define  fse3uw_a(i,j,k)  fse3uw_0(i,j,k) 
     125#   define  fse3vw_a(i,j,k)  fse3vw_0(i,j,k) 
     126#endif 
     127   !!---------------------------------------------------------------------- 
     128   !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009)  
    9129   !! $Id$ 
    10130   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    11    !! 
    12    !! History : 
    13    !!   9.0  !  05-10  (A. Beckmann, G. Madec) generalisation to all coord. 
    14131   !!---------------------------------------------------------------------- 
    15 #if defined key_zco 
    16 #   define  fsdept(i,j,k)  gdept_0(k) 
    17  
    18 #   define  fsdepw(i,j,k)  gdepw_0(k) 
    19 #   define  fsde3w(i,j,k)  gdepw_0(k) 
    20  
    21 #   define  fse3t(i,j,k)   e3t_0(k) 
    22 #   define  fse3u(i,j,k)   e3t_0(k) 
    23 #   define  fse3v(i,j,k)   e3t_0(k) 
    24 #   define  fse3f(i,j,k)   e3t_0(k) 
    25  
    26 #   define  fse3w(i,j,k)   e3w_0(k) 
    27 #   define  fse3uw(i,j,k)  e3w_0(k) 
    28 #   define  fse3vw(i,j,k)  e3w_0(k) 
    29 #else 
    30 #   define  fsdept(i,j,k)  gdept(i,j,k) 
    31  
    32 #   define  fsdepw(i,j,k)  gdepw(i,j,k) 
    33 #   define  fsde3w(i,j,k)  gdep3w(i,j,k) 
    34   
    35 #   define  fse3t(i,j,k)   e3t(i,j,k) 
    36 #   define  fse3u(i,j,k)   e3u(i,j,k) 
    37 #   define  fse3v(i,j,k)   e3v(i,j,k) 
    38 #   define  fse3f(i,j,k)   e3f(i,j,k) 
    39  
    40 #   define  fse3w(i,j,k)   e3w(i,j,k) 
    41 #   define  fse3uw(i,j,k)  e3uw(i,j,k) 
    42 #   define  fse3vw(i,j,k)  e3vw(i,j,k) 
    43 #endif 
    44  
    45 #if defined key_vvl 
    46 #   define  fsvdept(i,j,k)  gdept_1(i,j,k) 
    47  
    48 #   define  fsvdepw(i,j,k)  gdepw_1(i,j,k) 
    49 #   define  fsvde3w(i,j,k)  gdep3w_1(i,j,k) 
    50  
    51 #   define  fsve3t(i,j,k)   e3t_1(i,j,k) 
    52 #   define  fsve3u(i,j,k)   e3u_1(i,j,k) 
    53 #   define  fsve3v(i,j,k)   e3v_1(i,j,k) 
    54 #   define  fsve3f(i,j,k)   e3f_1(i,j,k) 
    55  
    56 #   define  fsve3w(i,j,k)   e3w_1(i,j,k) 
    57 #   define  fsve3uw(i,j,k)  e3uw_1(i,j,k) 
    58 #   define  fsve3vw(i,j,k)  e3vw_1(i,j,k) 
    59 #else 
    60 #   define  fsvdept(i,j,k)  fsdept(i,j,k) 
    61  
    62 #   define  fsvdepw(i,j,k)  fsdepw(i,j,k) 
    63 #   define  fsvde3w(i,j,k)  fsde3w(i,j,k) 
    64  
    65 #   define  fsve3t(i,j,k)   fse3t(i,j,k) 
    66 #   define  fsve3u(i,j,k)   fse3u(i,j,k) 
    67 #   define  fsve3v(i,j,k)   fse3v(i,j,k) 
    68 #   define  fsve3f(i,j,k)   fse3f(i,j,k) 
    69  
    70 #   define  fsve3w(i,j,k)   fse3w(i,j,k) 
    71 #   define  fsve3uw(i,j,k)  fse3uw(i,j,k) 
    72 #   define  fsve3vw(i,j,k)  fse3vw(i,j,k) 
    73 #endif 
    74  
Note: See TracChangeset for help on using the changeset viewer.