Changeset 2464
- Timestamp:
- 2010-12-08T14:26:24+01:00 (14 years ago)
- Location:
- branches/nemo_v3_3_beta/NEMOGCM/NEMO
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OFF_SRC/domrea.F90
r2457 r2464 4 4 !! Ocean initialization : read the ocean domain meshmask file(s) 5 5 !!====================================================================== 6 !! History : 3.3 ! 2010-05 (C. Ethe) Full reorganization of the off-line 7 !!---------------------------------------------------------------------- 6 8 7 9 !!---------------------------------------------------------------------- … … 13 15 USE dom_oce ! ocean space and time domain 14 16 USE dommsk ! domain: masks 15 USE lbclnk ! 17 USE lbclnk ! lateral boundary condition - MPP exchanges 16 18 USE in_out_manager ! I/O manager 17 19 … … 23 25 !! NEMO/OFF 3.3 , NEMO Consortium (2010) 24 26 !! $Id$ 25 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 26 !!---------------------------------------------------------------------- 27 27 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 28 !!---------------------------------------------------------------------- 28 29 CONTAINS 29 30 #if defined key_mpp_mpi && defined key_dimgout31 !!----------------------------------------------------------------------32 !! 'key_mpp_mpi' OR33 !! 'key_dimgout' : each processor makes its own direct access file34 !! use build_nc_meshmask off line to retrieve35 !! a ioipsl compliant meshmask file36 !!----------------------------------------------------------------------37 # include "domrea_dimg.h90"38 39 #else40 !!----------------------------------------------------------------------41 !! Default option : NetCDF file42 !!----------------------------------------------------------------------43 30 44 31 SUBROUTINE dom_rea … … 157 144 CALL iom_get( inum3, jpdom_data, 'ff', ff ) 158 145 159 CALL iom_get( inum4, jpdom_data, 'mbathy', zmbk ) 160 161 ! 162 mbkt(:,:) = MAX( zmbk(:,:) * tmask(:,:,1), 1._wp ) ! bottom k-index of T-level (=1 over land) 163 ! 164 DO jj = 1, jpjm1 ! bottom k-index of u- (v-) level 165 DO ji = 1, jpim1 166 mbku(ji,jj) = MIN( mbkt(ji+1,jj ) , mbkt(ji,jj) ) 167 mbkv(ji,jj) = MIN( mbkt(ji ,jj+1) , mbkt(ji,jj) ) 168 END DO 169 END DO 170 ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk 171 zmbk(:,:) = REAL( mbku(:,:), wp ) ; CALL lbc_lnk(zmbk,'U',1.) ; mbku (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 172 zmbk(:,:) = REAL( mbkv(:,:), wp ) ; CALL lbc_lnk(zmbk,'V',1.) ; mbkv (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 173 ! ! bottom k-index of W-level = mbkt+1 146 CALL iom_get( inum4, jpdom_data, 'mbathy', zmbk ) ! number of ocean t-points 147 mbathy(:,:) = INT( zmbk(:,:) ) 148 149 CALL zgr_bot_level ! mbk. arrays (deepest ocean t-, u- & v-points 174 150 ! 175 151 IF( ln_sco ) THEN ! s-coordinate … … 195 171 196 172 197 IF( ln_zps ) THEN 198 ! Vertical coordinates and scales factors 173 IF( ln_zps ) THEN ! z-coordinate - partial steps 174 CALL iom_get( inum4, jpdom_unknown, 'gdept_0', gdept_0 ) ! reference depth 175 CALL iom_get( inum4, jpdom_unknown, 'gdepw_0', gdepw_0 ) 176 CALL iom_get( inum4, jpdom_unknown, 'e3t_0' , e3t_0 ) ! reference scale factors 177 CALL iom_get( inum4, jpdom_unknown, 'e3w_0' , e3w_0 ) 178 ! 179 IF( nmsh <= 6 ) THEN ! 3D vertical scale factors 180 CALL iom_get( inum4, jpdom_data, 'e3t', e3t ) 181 CALL iom_get( inum4, jpdom_data, 'e3u', e3u ) 182 CALL iom_get( inum4, jpdom_data, 'e3v', e3v ) 183 CALL iom_get( inum4, jpdom_data, 'e3w', e3w ) 184 ELSE ! 2D bottom scale factors 185 CALL iom_get( inum4, jpdom_data, 'e3t_ps', e3tp ) 186 CALL iom_get( inum4, jpdom_data, 'e3w_ps', e3wp ) 187 ! ! deduces the 3D scale factors 188 DO jk = 1, jpk 189 e3t(:,:,jk) = e3t_0(jk) ! set to the ref. factors 190 e3u(:,:,jk) = e3t_0(jk) 191 e3v(:,:,jk) = e3t_0(jk) 192 e3w(:,:,jk) = e3w_0(jk) 193 END DO 194 DO jj = 1,jpj ! adjust the deepest values 195 DO ji = 1,jpi 196 ik = mbkt(ji,jj) 197 e3t(ji,jj,ik) = e3tp(ji,jj) * tmask(ji,jj,1) + e3t_0(1) * ( 1._wp - tmask(ji,jj,1) ) 198 e3w(ji,jj,ik) = e3wp(ji,jj) * tmask(ji,jj,1) + e3w_0(1) * ( 1._wp - tmask(ji,jj,1) ) 199 END DO 200 END DO 201 DO jk = 1,jpk ! Computed as the minimum of neighbooring scale factors 202 DO jj = 1, jpjm1 203 DO ji = 1, jpim1 204 e3u(ji,jj,jk) = MIN( e3t(ji,jj,jk), e3t(ji+1,jj,jk) ) 205 e3v(ji,jj,jk) = MIN( e3t(ji,jj,jk), e3t(ji,jj+1,jk) ) 206 END DO 207 END DO 208 END DO 209 CALL lbc_lnk( e3u , 'U', 1._wp ) ; CALL lbc_lnk( e3uw, 'U', 1._wp ) ! lateral boundary conditions 210 CALL lbc_lnk( e3v , 'V', 1._wp ) ; CALL lbc_lnk( e3vw, 'V', 1._wp ) 211 ! 212 DO jk = 1, jpk ! set to z-scale factor if zero (i.e. along closed boundaries) 213 WHERE( e3u(:,:,jk) == 0._wp ) e3u(:,:,jk) = e3t_0(jk) 214 WHERE( e3v(:,:,jk) == 0._wp ) e3v(:,:,jk) = e3t_0(jk) 215 END DO 216 END IF 217 218 IF( iom_varid( inum4, 'gdept', ldstop = .FALSE. ) > 0 ) THEN ! 3D depth of t- and w-level 219 CALL iom_get( inum4, jpdom_data, 'gdept', gdept ) 220 CALL iom_get( inum4, jpdom_data, 'gdepw', gdepw ) 221 ELSE ! 2D bottom depth 222 CALL iom_get( inum4, jpdom_data, 'hdept', hdept ) 223 CALL iom_get( inum4, jpdom_data, 'hdepw', hdepw ) 224 ! 225 DO jk = 1, jpk ! deduces the 3D depth 226 gdept(:,:,jk) = gdept_0(jk) 227 gdepw(:,:,jk) = gdepw_0(jk) 228 END DO 229 DO jj = 1, jpj 230 DO ji = 1, jpi 231 ik = mbkt(ji,jj) 232 IF( ik > 0 ) THEN 233 gdepw(ji,jj,ik+1) = hdepw(ji,jj) 234 gdept(ji,jj,ik ) = hdept(ji,jj) 235 gdept(ji,jj,ik+1) = gdept(ji,jj,ik) + e3t(ji,jj,ik) 236 ENDIF 237 END DO 238 END DO 239 ENDIF 240 ! 241 ENDIF 242 243 IF( ln_zco ) THEN ! Vertical coordinates and scales factors 199 244 CALL iom_get( inum4, jpdom_unknown, 'gdept_0', gdept_0 ) ! depth 200 245 CALL iom_get( inum4, jpdom_unknown, 'gdepw_0', gdepw_0 ) 201 246 CALL iom_get( inum4, jpdom_unknown, 'e3t_0' , e3t_0 ) 202 247 CALL iom_get( inum4, jpdom_unknown, 'e3w_0' , e3w_0 ) 203 ! z-coordinate - partial steps204 IF( nmsh <= 6 ) THEN ! ! 3D vertical scale factors205 CALL iom_get( inum4, jpdom_data, 'e3t', e3t ) ! scale factors206 CALL iom_get( inum4, jpdom_data, 'e3u', e3u )207 CALL iom_get( inum4, jpdom_data, 'e3v', e3v )208 CALL iom_get( inum4, jpdom_data, 'e3w', e3w )209 ELSE ! ! 2D bottom scale factors210 CALL iom_get( inum4, jpdom_data, 'e3t_ps', e3tp )211 CALL iom_get( inum4, jpdom_data, 'e3w_ps', e3wp )212 END IF213 214 IF( iom_varid( inum4, 'gdept', ldstop = .FALSE. ) > 0 ) THEN215 CALL iom_get( inum4, jpdom_data, 'gdept', gdept ) ! scale factors216 CALL iom_get( inum4, jpdom_data, 'gdepw', gdepw )217 ELSE ! ! 2D bottom depth218 CALL iom_get( inum4, jpdom_data, 'hdept', hdept ) ! depth219 CALL iom_get( inum4, jpdom_data, 'hdepw', hdepw )220 221 DO jk = 1,jpk222 gdept(:,:,jk) = gdept_0(jk)223 gdepw(:,:,jk) = gdepw_0(jk)224 ENDDO225 226 DO jj = 1, jpj227 DO ji = 1, jpi228 ik = mbkt(ji,jj)229 ! ocean point only230 IF( ik > 0 ) THEN231 ! max ocean level case232 gdepw(ji,jj,ik+1) = hdepw(ji,jj)233 gdept(ji,jj,ik ) = hdept(ji,jj)234 gdept(ji,jj,ik+1) = gdept(ji,jj,ik) + e3t(ji,jj,ik)235 ENDIF236 END DO237 END DO238 239 ENDIF240 241 ENDIF242 243 IF( ln_zco ) THEN244 ! Vertical coordinates and scales factors245 CALL iom_get( inum4, jpdom_unknown, 'gdept_0', gdept_0 ) ! depth246 CALL iom_get( inum4, jpdom_unknown, 'gdepw_0', gdepw_0 )247 CALL iom_get( inum4, jpdom_unknown, 'e3t_0' , e3t_0 )248 CALL iom_get( inum4, jpdom_unknown, 'e3w_0' , e3w_0 )249 248 ENDIF 250 249 … … 317 316 END SUBROUTINE dom_rea 318 317 319 #endif 318 319 SUBROUTINE zgr_bot_level 320 !!---------------------------------------------------------------------- 321 !! *** ROUTINE zgr_bot_level *** 322 !! 323 !! ** Purpose : defines the vertical index of ocean bottom (mbk. arrays) 324 !! 325 !! ** Method : computes from mbathy with a minimum value of 1 over land 326 !! 327 !! ** Action : - update mbathy: level bathymetry (in level index) 328 !!---------------------------------------------------------------------- 329 INTEGER :: ji, jj ! dummy loop indices 330 REAL(wp), DIMENSION(jpi,jpj) :: zmbk ! 2D workspace 331 !!---------------------------------------------------------------------- 332 ! 333 IF(lwp) WRITE(numout,*) 334 IF(lwp) WRITE(numout,*) ' zgr_bot_level : ocean bottom k-index of T-, U-, V- and W-levels ' 335 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~' 336 ! 337 mbkt(:,:) = MAX( mbathy(:,:) , 1 ) ! bottom k-index of T-level (=1 over land) 338 ! 339 DO jj = 1, jpjm1 ! bottom k-index of u- (v-) level 340 DO ji = 1, jpim1 341 mbku(ji,jj) = MIN( mbkt(ji+1,jj ) , mbkt(ji,jj) ) 342 mbkv(ji,jj) = MIN( mbkt(ji ,jj+1) , mbkt(ji,jj) ) 343 END DO 344 END DO 345 ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk 346 zmbk(:,:) = REAL( mbku(:,:), wp ) ; CALL lbc_lnk(zmbk,'U',1.) ; mbku (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 347 zmbk(:,:) = REAL( mbkv(:,:), wp ) ; CALL lbc_lnk(zmbk,'V',1.) ; mbkv (:,:) = MAX( INT( zmbk(:,:) ), 1 ) 348 ! 349 END SUBROUTINE zgr_bot_level 320 350 321 351 !!====================================================================== -
branches/nemo_v3_3_beta/NEMOGCM/NEMO/TOP_SRC/SED/sedini.F90
r2457 r2464 123 123 DO jj = 1, jpj 124 124 DO ji = 1, jpi 125 ikt = MAX( INT( sbathy(ji,jj) ) - 1, 1 )125 ikt = MAX( INT( sbathy(ji,jj) ), 1 ) 126 126 IF( tmask(ji,jj,ikt) == 1 ) epkbot(ji,jj) = zdta(ji,jj) 127 127 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.