Changeset 1438 for trunk/NEMO/OPA_SRC/DOM
- Timestamp:
- 2009-05-11T16:34:47+02:00 (15 years ago)
- Location:
- trunk/NEMO/OPA_SRC/DOM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OPA_SRC/DOM/dom_oce.F90
r1241 r1438 114 114 #if defined key_vvl 115 115 LOGICAL, PUBLIC, PARAMETER :: lk_vvl = .TRUE. !: variable grid flag 116 117 116 !! All coordinates 118 117 !! --------------- 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) 126 124 #else 127 125 LOGICAL, PUBLIC, PARAMETER :: lk_vvl = .FALSE. !: fixed grid flag … … 129 127 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: 130 128 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) 132 131 133 132 !! z-coordinate with full steps (also used in the other cases as reference z-coordinate) -
trunk/NEMO/OPA_SRC/DOM/domain.F90
r1335 r1438 4 4 !! Ocean initialization : domain initialization 5 5 !!============================================================================== 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 7 16 !!---------------------------------------------------------------------- 8 17 !! dom_init : initialize the space and time domain … … 10 19 !! dom_ctl : control print for the ocean domain 11 20 !!---------------------------------------------------------------------- 12 !! * Modules used13 21 USE oce ! 14 22 USE dom_oce ! ocean space and time domain … … 30 38 PRIVATE 31 39 32 !! * Routine accessibility 33 PUBLIC dom_init ! called by opa.F90 40 PUBLIC dom_init ! called by opa.F90 34 41 35 42 !! * Substitutions 36 43 # include "domzgr_substitute.h90" 37 !!---------------------------------------------------------------------- 38 !! OPA 9.0 , LOCEAN-IPSL (2005)44 !!------------------------------------------------------------------------- 45 !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009) 39 46 !! $Id$ 40 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt41 !!---------------------------------------------------------------------- 47 !! Software is governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 48 !!------------------------------------------------------------------------- 42 49 43 50 CONTAINS … … 58 65 !! - dom_stp: defined the model time step 59 66 !! - 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 !!---------------------------------------------------------------------- 72 68 INTEGER :: jk ! dummy loop argument 73 69 INTEGER :: iconf = 0 ! temporary integers … … 90 86 CALL dom_msk ! Masks 91 87 92 IF( lk_vvl ) CALL dom_vvl _ini! Vertical variable mesh88 IF( lk_vvl ) CALL dom_vvl ! Vertical variable mesh 93 89 94 90 ! Local depth or Inverse of the local depth of the water column at u- and v-points 95 91 ! ------------------------------ 96 92 ! Ocean depth at U- and V-points 97 hu(:,:) = 0. 98 hv(:,:) = 0. 99 93 hu(:,:) = 0.e0 94 hv(:,:) = 0.e0 100 95 DO jk = 1, jpk 101 96 hu(:,:) = hu(:,:) + fse3u(:,:,jk) * umask(:,:,jk) … … 105 100 hur(:,:) = fse3u(:,:,1) ! Lower bound : thickness of the first model level 106 101 hvr(:,:) = fse3v(:,:,1) 107 108 102 DO jk = 2, jpk ! Sum of the vertical scale factors 109 103 hur(:,:) = hur(:,:) + fse3u(:,:,jk) * umask(:,:,jk) 110 104 hvr(:,:) = hvr(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) 111 105 END DO 112 113 106 ! Compute and mask the inverse of the local depth 114 107 hur(:,:) = 1. / hur(:,:) * umask(:,:,1) 115 108 hvr(:,:) = 1. / hvr(:,:) * vmask(:,:,1) 116 109 117 118 110 CALL dom_stp ! Time step 119 111 … … 121 113 122 114 IF( .NOT.ln_rstart ) CALL dom_ctl ! Domain control 123 115 ! 124 116 END SUBROUTINE dom_init 125 117 … … 134 126 !! - namdom namelist 135 127 !! - namcla namelist 136 !! 137 !! History : 138 !! 9.0 ! 03-08 (G. Madec) Original code 139 !!---------------------------------------------------------------------- 140 !! * Modules used 128 !!---------------------------------------------------------------------- 141 129 USE ioipsl 142 130 NAMELIST/namrun/ no , cexper, cn_ocerst_in, cn_ocerst_out, ln_rstart, nrstdt, & … … 156 144 ENDIF 157 145 158 ! Namelist namrun : parameters of the run 159 REWIND( numnam ) 146 REWIND( numnam ) ! Namelist namrun : parameters of the run 160 147 READ ( numnam, namrun ) 161 162 148 IF(lwp) THEN 163 149 WRITE(numout,*) ' Namelist namrun' … … 228 214 ENDIF 229 215 230 ! Namelist namdom : space/time domain (bathymetry, mesh, timestep) 231 REWIND( numnam ) 216 REWIND( numnam ) ! Namelist namdom : space/time domain (bathymetry, mesh, timestep) 232 217 READ ( numnam, namdom ) 233 218 … … 252 237 ENDIF 253 238 254 ! Default values255 239 n_cla = 0 256 257 ! Namelist cross land advection 258 REWIND( numnam ) 240 REWIND( numnam ) ! Namelist cross land advection 259 241 READ ( numnam, namcla ) 260 242 IF(lwp) THEN … … 264 246 ENDIF 265 247 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 ! 270 250 END SUBROUTINE dom_nam 271 251 … … 278 258 !! 279 259 !! ** 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 !!---------------------------------------------------------------------- 285 261 INTEGER :: iimi1, ijmi1, iimi2, ijmi2, iima1, ijma1, iima2, ijma2 286 262 INTEGER, DIMENSION(2) :: iloc ! 287 263 REAL(wp) :: ze1min, ze1max, ze2min, ze2max 288 264 !!---------------------------------------------------------------------- 289 290 ! Extrema of the scale factors291 265 292 266 IF(lwp)WRITE(numout,*) … … 325 299 WRITE(numout,"(14x,'e2t mini: ',1f10.2,' at i = ',i5,' j= ',i5)") ze2min, iimi2, ijmi2 326 300 ENDIF 327 301 ! 328 302 END SUBROUTINE dom_ctl 329 303 -
trunk/NEMO/OPA_SRC/DOM/domvvl.F90
r1146 r1438 4 4 !! Ocean : 5 5 !!====================================================================== 6 !! History : 9.0 !06-06 (B. Levier, L. Marie) original code7 !! " ! 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 8 8 !!---------------------------------------------------------------------- 9 9 #if defined key_vvl 10 10 !!---------------------------------------------------------------------- 11 11 !! 'key_vvl' variable volume 12 12 !!---------------------------------------------------------------------- 13 !! dom_vvl : defined coefficients to distribute ssh on each layers 13 14 !!---------------------------------------------------------------------- 14 !! dom_vvl : defined scale factors & depths at each time step15 !! dom_vvl_ini : defined coefficients to distribute ssh on each layers16 !! dom_vvl_ssh : defined the ocean sea level at each time step17 !!----------------------------------------------------------------------18 !! * Modules used19 15 USE oce ! ocean dynamics and tracers 20 16 USE dom_oce ! ocean space and time domain 21 17 USE sbc_oce ! surface boundary condition: ocean 22 USE dynspg_oce ! surface pressure gradient variables23 18 USE phycst ! physical constants 24 19 USE in_out_manager ! I/O manager 25 20 USE lib_mpp ! distributed memory computing library 26 21 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 27 USE bdy_oce ! unstructured open boundary conditions28 22 29 23 IMPLICIT NONE 30 24 PRIVATE 31 25 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 38 27 39 !! * Module variables40 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 !: ??? 42 31 43 32 REAL(wp), DIMENSION(jpk) :: r2dt ! vertical profile time-step, = 2 rdttra … … 48 37 # include "vectopt_loop_substitute.h90" 49 38 !!---------------------------------------------------------------------- 50 !! OPA 9.0 , LOCEAN-IPSL (2005)39 !! NEMO/OPA 3.2 , LOCEAN-IPSL (2009) 51 40 !! $Id$ 52 41 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) … … 55 44 CONTAINS 56 45 57 #if defined key_vvl 58 59 SUBROUTINE dom_vvl_ini 46 SUBROUTINE dom_vvl 60 47 !!---------------------------------------------------------------------- 61 !! *** ROUTINE dom_vvl _ini***48 !! *** ROUTINE dom_vvl *** 62 49 !! 63 50 !! ** Purpose : compute coefficients muX at T-U-V-F points to spread … … 65 52 !! 66 53 !!---------------------------------------------------------------------- 67 INTEGER :: ji, jj, jk , zpk68 REAL(wp) , DIMENSION(jpi,jpj) :: zmut, zmuu, zmuv, zmuf ! 2D workspace54 INTEGER :: ji, jj, jk 55 REAL(wp) :: zcoefu, zcoefv, zcoeff 69 56 !!---------------------------------------------------------------------- 70 57 71 58 IF(lwp) THEN 72 59 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' 75 62 ENDIF 76 77 IF( ln_zps ) CALL ctl_stop( 'dom_vvl_ini : option ln_zps is incompatible with variable volume option key_vvl')78 63 79 64 #if defined key_zco || defined key_dynspg_rl … … 81 66 #endif 82 67 83 fs vdept(:,:,:) = gdept (:,:,:)84 fs vdepw(:,:,:) = gdepw (:,:,:)85 fs vde3w(:,:,:) = gdep3w(:,:,:)86 fs ve3t(:,:,:) = e3t (:,:,:)87 fs ve3u(:,:,:) = e3u (:,:,:)88 fs ve3v(:,:,:) = e3v (:,:,:)89 fs ve3f(:,:,:) = e3f (:,:,:)90 fs ve3w(:,:,:) = e3w (:,:,:)91 fs ve3uw(:,:,:) = e3uw (:,:,:)92 fs ve3vw(:,:,:) = 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 (:,:,:) 93 78 94 79 ! 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 103 115 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) ) 113 143 END DO 114 144 END DO 115 116 DO jj = 1, jpj117 DO ji = 1, jpi118 zpk = mbathy(ji,jj) - 1119 DO jk = 1, zpk120 #if defined key_sigma_vvl121 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 #else126 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 #endif131 END DO132 END DO133 END DO134 135 136 END SUBROUTINE dom_vvl_ini137 138 139 140 SUBROUTINE dom_vvl141 !!----------------------------------------------------------------------142 !! *** ROUTINE dom_vvl ***143 !!144 !! ** Purpose : compute ssh at U-V-F points, T-W scale factors and local145 !! depths at each time step.146 !!----------------------------------------------------------------------147 !! * Local declarations148 INTEGER :: ji, jj, jk ! dummy loop indices149 REAL(wp), DIMENSION(jpi,jpj) :: zsshf ! 2D workspace150 !!----------------------------------------------------------------------151 152 ! Sea Surface Height at u-v-fpoints153 DO jj = 1, jpjm1154 DO ji = 1,jpim1155 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 DO167 END DO168 169 145 ! 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 ! 232 150 END SUBROUTINE dom_vvl 233 151 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, tranxt241 !! and dynspg routines242 !!----------------------------------------------------------------------243 !! * Arguments244 INTEGER, INTENT( in ) :: kt ! time step245 246 !! * Local declarations247 INTEGER :: ji, jj, jk ! dummy loop indices248 REAL(wp) :: z2dt, zraur ! temporary scalars249 REAL(wp), DIMENSION(jpi,jpj) :: zun, zvn, zhdiv ! 2D workspace250 !!----------------------------------------------------------------------251 252 !! Sea surface height after (ssha) in variable volume case253 !! --------------------------====-----===============-----254 !! ssha is needed for the tracer time-stepping (trazdf_imp or255 !! tra_nxt), for the ssh time-stepping (dynspg_*) and for the256 !! 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 be258 !! done after the call of oce_sbc.259 260 IF( neuler == 0 .AND. kt == nit000 ) THEN ! at nit000261 r2dt(:) = rdttra(:) ! = rdtra (restarting with Euler time stepping)262 ELSEIF( kt <= nit000 + 1) THEN ! at nit000 or nit000+1263 r2dt(:) = 2. * rdttra(:) ! = 2 rdttra (leapfrog)264 ENDIF265 266 z2dt = r2dt(1)267 zraur = 1. / rauw268 269 ! Vertically integrated quantities270 ! --------------------------------271 IF( .NOT. lk_dynspg_ts .OR. (neuler == 0 .AND. kt == nit000) ) THEN272 zun(:,:) = 0.e0 ; zvn(:,:) = 0.e0273 !274 DO jk = 1, jpkm1275 ! ! Vertically integrated transports (now)276 zun(:,:) = zun(:,:) + fse3u(:,:,jk) * un(:,:,jk)277 zvn(:,:) = zvn(:,:) + fse3v(:,:,jk) * vn(:,:,jk)278 END DO279 ELSE ! lk_dynspg_ts is true280 zun (:,:) = un_b(:,:) ; zvn (:,:) = vn_b(:,:)281 ENDIF282 283 ! Horizontal divergence of barotropic transports284 !--------------------------------------------------285 DO jj = 2, jpjm1286 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 DO293 END DO294 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/column298 IF( lp_obc_east ) zhdiv(nie0p1:nie1p1,nje0 :nje1) = 0.e0 ! east299 IF( lp_obc_west ) zhdiv(niw0 :niw1 ,njw0 :njw1) = 0.e0 ! west300 IF( lp_obc_north ) zhdiv(nin0 :nin1 ,njn0p1:njn1p1) = 0.e0 ! north301 IF( lp_obc_south ) zhdiv(nis0 :nis1 ,njs0 :njs1) = 0.e0 ! south302 #endif303 304 #if defined key_bdy305 zhdiv(:,:) = zhdiv(:,:) * bdytmask(:,:)306 #endif307 308 CALL lbc_lnk( zhdiv, 'T', 1. )309 310 ! Sea surface elevation time stepping311 ! -----------------------------------312 IF( .NOT. lk_dynspg_ts .OR. (neuler == 0 .AND. kt == nit000) ) THEN313 ssha(:,:) = sshb(:,:) - z2dt * ( zraur * emp(:,:) + zhdiv(:,:) ) * tmask(:,:,1)314 ELSE ! lk_dynspg_ts is true315 ssha(:,:) = ( sshb_b(:,:) - z2dt * ( zraur * emp(:,:) + zhdiv(:,:) ) ) * tmask(:,:,1)316 ENDIF317 318 319 END SUBROUTINE dom_vvl_ssh320 321 SUBROUTINE dom_vvl_sf( zssh, gridp, sfe3 )322 !!----------------------------------------------------------------------323 !! *** ROUTINE dom_vvl_sf ***324 !!325 !! ** Purpose : compute vertical scale factor at each time step326 !!----------------------------------------------------------------------327 !! * Arguments328 CHARACTER(LEN=1) , INTENT( in ) :: gridp ! grid point type329 REAL(wp), DIMENSION(jpi,jpj) , INTENT( in ) :: zssh ! 2D workspace330 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( out) :: sfe3 ! 3D workspace331 332 !! * Local declarations333 INTEGER :: jk ! dummy loop indices334 !!----------------------------------------------------------------------335 336 SELECT CASE (gridp)337 338 CASE ('U')339 !340 DO jk = 1, jpk341 sfe3(:,:,jk) = fsve3u(:,:,jk) * ( 1 + zssh(:,:) * muu(:,:,jk) )342 ENDDO343 344 CASE ('V')345 !346 DO jk = 1, jpk347 sfe3(:,:,jk) = fsve3v(:,:,jk) * ( 1 + zssh(:,:) * muv(:,:,jk) )348 ENDDO349 350 CASE ('T')351 !352 DO jk = 1, jpk353 sfe3(:,:,jk) = fsve3t(:,:,jk) * ( 1 + zssh(:,:) * mut(:,:,jk) )354 ENDDO355 356 END SELECT357 358 END SUBROUTINE dom_vvl_sf359 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 done365 !! to avoid compiling error when using key_zco cpp key366 !!----------------------------------------------------------------------367 !! * Arguments368 CHARACTER(LEN=1) , INTENT( in ) :: gridp ! grid point type369 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT (out) :: sfe3ini ! 3D workspace370 !!----------------------------------------------------------------------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 SELECT387 388 END SUBROUTINE dom_vvl_sf_ini389 152 #else 390 153 !!---------------------------------------------------------------------- 391 154 !! Default option : Empty routine 392 155 !!---------------------------------------------------------------------- 393 SUBROUTINE dom_vvl_ini 394 END SUBROUTINE dom_vvl_ini 156 CONTAINS 395 157 SUBROUTINE dom_vvl 396 158 END SUBROUTINE dom_vvl 397 SUBROUTINE dom_vvl_ssh( kt )398 !! * Arguments399 INTEGER, INTENT( in ) :: kt ! time step400 WRITE(*,*) 'dom_vvl_ssh: You should not have seen this print! error?', kt401 END SUBROUTINE dom_vvl_ssh402 SUBROUTINE dom_vvl_sf( zssh, gridp, sfe3 )403 !! * Arguments404 CHARACTER(LEN=1) , INTENT( in ) :: gridp ! grid point type405 REAL(wp), DIMENSION(jpi,jpj) , INTENT( in ) :: zssh ! 2D workspace406 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT (out) :: sfe3 ! 3D workspace407 sfe3(:,:,:) = 0.e0408 WRITE(*,*) 'sfe3: You should not have seen this print! error?', gridp409 WRITE(*,*) 'sfe3: You should not have seen this print! error?', zssh(1,1)410 END SUBROUTINE dom_vvl_sf411 SUBROUTINE dom_vvl_sf_ini( gridp, sfe3ini )412 !! * Arguments413 CHARACTER(LEN=1) , INTENT( in ) :: gridp ! grid point type414 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT (out) :: sfe3ini ! 3D workspace415 sfe3ini(:,:,:) = 0.e0416 WRITE(*,*) 'sfe3ini: You should not have seen this print! error?', gridp417 END SUBROUTINE dom_vvl_sf_ini418 159 #endif 419 160 -
trunk/NEMO/OPA_SRC/DOM/domzgr_substitute.h90
r1156 r1438 5 5 !! factors depending on the vertical coord. used, using CPP macro. 6 6 !!---------------------------------------------------------------------- 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 7 9 !!---------------------------------------------------------------------- 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) 9 129 !! $Id$ 10 130 !! 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.14 131 !!---------------------------------------------------------------------- 15 #if defined key_zco16 # 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 #else30 # 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 #endif44 45 #if defined key_vvl46 # 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 #else60 # 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 #endif74
Note: See TracChangeset
for help on using the changeset viewer.