Changeset 4292 for branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OFF_SRC
- Timestamp:
- 2013-11-20T17:28:04+01:00 (10 years ago)
- Location:
- branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OFF_SRC
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OFF_SRC/domain.F90
r4248 r4292 295 295 !! vertical scale factors. 296 296 !! 297 !! ** Method : - reference 1D vertical coordinate (gdep._ 0, e3._0)297 !! ** Method : - reference 1D vertical coordinate (gdep._1d, e3._1d) 298 298 !! - read/set ocean depth and ocean levels (bathy, mbathy) 299 299 !! - vertical coordinate (gdep., e3.) depending on the -
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OFF_SRC/domrea.F90
r3680 r4292 25 25 26 26 PUBLIC dom_rea ! routine called by inidom.F90 27 !! * Substitutions 28 # include "domzgr_substitute.h90" 27 29 !!---------------------------------------------------------------------- 28 30 !! NEMO/OFF 3.3 , NEMO Consortium (2010) … … 173 175 CALL iom_get( inum4, jpdom_unknown, 'esigw', esigw ) 174 176 175 CALL iom_get( inum4, jpdom_data, 'e3t', e3t) ! scale factors176 CALL iom_get( inum4, jpdom_data, 'e3u', e3u)177 CALL iom_get( inum4, jpdom_data, 'e3v', e3v)178 CALL iom_get( inum4, jpdom_data, 'e3w', e3w)179 180 CALL iom_get( inum4, jpdom_unknown, 'gdept_ 0', gdept_0) ! depth181 CALL iom_get( inum4, jpdom_unknown, 'gdepw_ 0', gdepw_0)177 CALL iom_get( inum4, jpdom_data, 'e3t', fse3t_n(:,:,:) ) ! scale factors 178 CALL iom_get( inum4, jpdom_data, 'e3u', fse3u_n(:,:,:) ) 179 CALL iom_get( inum4, jpdom_data, 'e3v', fse3v_n(:,:,:) ) 180 CALL iom_get( inum4, jpdom_data, 'e3w', fse3w_n(:,:,:) ) 181 182 CALL iom_get( inum4, jpdom_unknown, 'gdept_1d', gdept_1d ) ! depth 183 CALL iom_get( inum4, jpdom_unknown, 'gdepw_1d', gdepw_1d ) 182 184 ENDIF 183 185 184 186 185 187 IF( ln_zps ) THEN ! z-coordinate - partial steps 186 CALL iom_get( inum4, jpdom_unknown, 'gdept_ 0', gdept_0 )! reference depth187 CALL iom_get( inum4, jpdom_unknown, 'gdepw_ 0', gdepw_0)188 CALL iom_get( inum4, jpdom_unknown, 'e3t_ 0' , e3t_0) ! reference scale factors189 CALL iom_get( inum4, jpdom_unknown, 'e3w_ 0' , e3w_0)188 CALL iom_get( inum4, jpdom_unknown, 'gdept_1d', gdept_1d ) ! reference depth 189 CALL iom_get( inum4, jpdom_unknown, 'gdepw_1d', gdepw_1d ) 190 CALL iom_get( inum4, jpdom_unknown, 'e3t_1d' , e3t_1d ) ! reference scale factors 191 CALL iom_get( inum4, jpdom_unknown, 'e3w_1d' , e3w_1d ) 190 192 ! 191 193 IF( nmsh <= 6 ) THEN ! 3D vertical scale factors 192 CALL iom_get( inum4, jpdom_data, 'e3t', e3t)193 CALL iom_get( inum4, jpdom_data, 'e3u', e3u)194 CALL iom_get( inum4, jpdom_data, 'e3v', e3v)195 CALL iom_get( inum4, jpdom_data, 'e3w', e3w)194 CALL iom_get( inum4, jpdom_data, 'e3t', fse3t_n(:,:,:) ) 195 CALL iom_get( inum4, jpdom_data, 'e3u', fse3u_n(:,:,:) ) 196 CALL iom_get( inum4, jpdom_data, 'e3v', fse3v_n(:,:,:) ) 197 CALL iom_get( inum4, jpdom_data, 'e3w', fse3w_n(:,:,:) ) 196 198 ELSE ! 2D bottom scale factors 197 199 CALL iom_get( inum4, jpdom_data, 'e3t_ps', e3tp ) … … 199 201 ! ! deduces the 3D scale factors 200 202 DO jk = 1, jpk 201 e3t(:,:,jk) = e3t_0(jk)! set to the ref. factors202 e3u(:,:,jk) = e3t_0(jk)203 e3v(:,:,jk) = e3t_0(jk)204 e3w(:,:,jk) = e3w_0(jk)203 fse3t_n(:,:,jk) = e3t_1d(jk) ! set to the ref. factors 204 fse3u_n(:,:,jk) = e3t_1d(jk) 205 fse3v_n(:,:,jk) = e3t_1d(jk) 206 fse3w_n(:,:,jk) = e3w_1d(jk) 205 207 END DO 206 208 DO jj = 1,jpj ! adjust the deepest values 207 209 DO ji = 1,jpi 208 210 ik = mbkt(ji,jj) 209 e3t(ji,jj,ik) = e3tp(ji,jj) * tmask(ji,jj,1) + e3t_0(1) * ( 1._wp - tmask(ji,jj,1) )210 e3w(ji,jj,ik) = e3wp(ji,jj) * tmask(ji,jj,1) + e3w_0(1) * ( 1._wp - tmask(ji,jj,1) )211 fse3t_n(ji,jj,ik) = e3tp(ji,jj) * tmask(ji,jj,1) + e3t_1d(1) * ( 1._wp - tmask(ji,jj,1) ) 212 fse3w_n(ji,jj,ik) = e3wp(ji,jj) * tmask(ji,jj,1) + e3w_1d(1) * ( 1._wp - tmask(ji,jj,1) ) 211 213 END DO 212 214 END DO … … 214 216 DO jj = 1, jpjm1 215 217 DO ji = 1, jpim1 216 e3u(ji,jj,jk) = MIN( e3t(ji,jj,jk), e3t(ji+1,jj,jk) )217 e3v(ji,jj,jk) = MIN( e3t(ji,jj,jk), e3t(ji,jj+1,jk) )218 fse3u_n(ji,jj,jk) = MIN( fse3t_n(ji,jj,jk), fse3t_n(ji+1,jj,jk) ) 219 fse3v_n(ji,jj,jk) = MIN( fse3t_n(ji,jj,jk), fse3t_n(ji,jj+1,jk) ) 218 220 END DO 219 221 END DO 220 222 END DO 221 CALL lbc_lnk( e3u , 'U', 1._wp ) ; CALL lbc_lnk( e3uw, 'U', 1._wp ) ! lateral boundary conditions222 CALL lbc_lnk( e3v , 'V', 1._wp ) ; CALL lbc_lnk( e3vw, 'V', 1._wp )223 CALL lbc_lnk( fse3u_n(:,:,:) , 'U', 1._wp ) ; CALL lbc_lnk( fse3uw_n(:,:,:), 'U', 1._wp ) ! lateral boundary conditions 224 CALL lbc_lnk( fse3v_n(:,:,:) , 'V', 1._wp ) ; CALL lbc_lnk( fse3vw_n(:,:,:), 'V', 1._wp ) 223 225 ! 224 226 DO jk = 1, jpk ! set to z-scale factor if zero (i.e. along closed boundaries) 225 WHERE( e3u(:,:,jk) == 0._wp ) e3u(:,:,jk) = e3t_0(jk)226 WHERE( e3v(:,:,jk) == 0._wp ) e3v(:,:,jk) = e3t_0(jk)227 WHERE( fse3u_n(:,:,jk) == 0._wp ) fse3u_n(:,:,jk) = e3t_1d(jk) 228 WHERE( fse3v_n(:,:,jk) == 0._wp ) fse3v_n(:,:,jk) = e3t_1d(jk) 227 229 END DO 228 230 END IF 229 231 230 232 IF( iom_varid( inum4, 'gdept', ldstop = .FALSE. ) > 0 ) THEN ! 3D depth of t- and w-level 231 CALL iom_get( inum4, jpdom_data, 'gdept', gdept)232 CALL iom_get( inum4, jpdom_data, 'gdepw', gdepw)233 CALL iom_get( inum4, jpdom_data, 'gdept', fsdept_n(:,:,:) ) 234 CALL iom_get( inum4, jpdom_data, 'gdepw', fsdepw_n(:,:,:) ) 233 235 ELSE ! 2D bottom depth 234 236 CALL iom_get( inum4, jpdom_data, 'hdept', zprt ) … … 236 238 ! 237 239 DO jk = 1, jpk ! deduces the 3D depth 238 gdept(:,:,jk) = gdept_0(jk)239 gdepw(:,:,jk) = gdepw_0(jk)240 fsdept_n(:,:,jk) = gdept_1d(jk) 241 fsdepw_n(:,:,jk) = gdepw_1d(jk) 240 242 END DO 241 243 DO jj = 1, jpj … … 243 245 ik = mbkt(ji,jj) 244 246 IF( ik > 0 ) THEN 245 gdepw(ji,jj,ik+1) = zprw(ji,jj)246 gdept(ji,jj,ik ) = zprt(ji,jj)247 gdept(ji,jj,ik+1) = gdept(ji,jj,ik) + e3t(ji,jj,ik)247 fsdepw_n(ji,jj,ik+1) = zprw(ji,jj) 248 fsdept_n(ji,jj,ik ) = zprt(ji,jj) 249 fsdept_n(ji,jj,ik+1) = fsdept_n(ji,jj,ik) + fse3t_n(ji,jj,ik) 248 250 ENDIF 249 251 END DO … … 254 256 255 257 IF( ln_zco ) THEN ! Vertical coordinates and scales factors 256 CALL iom_get( inum4, jpdom_unknown, 'gdept_ 0', gdept_0) ! depth257 CALL iom_get( inum4, jpdom_unknown, 'gdepw_ 0', gdepw_0)258 CALL iom_get( inum4, jpdom_unknown, 'e3t_ 0' , e3t_0)259 CALL iom_get( inum4, jpdom_unknown, 'e3w_ 0' , e3w_0)258 CALL iom_get( inum4, jpdom_unknown, 'gdept_1d', gdept_1d ) ! depth 259 CALL iom_get( inum4, jpdom_unknown, 'gdepw_1d', gdepw_1d ) 260 CALL iom_get( inum4, jpdom_unknown, 'e3t_1d' , e3t_1d ) 261 CALL iom_get( inum4, jpdom_unknown, 'e3w_1d' , e3w_1d ) 260 262 DO jk = 1, jpk 261 e3t (:,:,jk) = e3t_0(jk)! set to the ref. factors262 e3u (:,:,jk) = e3t_0(jk)263 e3v (:,:,jk) = e3t_0(jk)264 e3w (:,:,jk) = e3w_0(jk)265 gdept(:,:,jk) = gdept_0(jk)266 gdepw(:,:,jk) = gdepw_0(jk)263 fse3t_n(:,:,jk) = e3t_1d(jk) ! set to the ref. factors 264 fse3u_n(:,:,jk) = e3t_1d(jk) 265 fse3v_n(:,:,jk) = e3t_1d(jk) 266 fse3w_n(:,:,jk) = e3w_1d(jk) 267 fsdept_n(:,:,jk) = gdept_1d(jk) 268 fsdepw_n(:,:,jk) = gdepw_1d(jk) 267 269 END DO 268 270 ENDIF … … 270 272 !!gm BUG in s-coordinate this does not work! 271 273 ! deepest/shallowest W level Above/Below ~10m 272 zrefdep = 10._wp - ( 0.1_wp * MINVAL(e3w_ 0) )! ref. depth with tolerance (10% of minimum layer thickness)273 nlb10 = MINLOC( gdepw_ 0, mask = gdepw_0 > zrefdep, dim = 1 )! shallowest W level Below ~10m274 zrefdep = 10._wp - ( 0.1_wp * MINVAL(e3w_1d) ) ! ref. depth with tolerance (10% of minimum layer thickness) 275 nlb10 = MINLOC( gdepw_1d, mask = gdepw_1d > zrefdep, dim = 1 ) ! shallowest W level Below ~10m 274 276 nla10 = nlb10 - 1 ! deepest W level Above ~10m 275 277 !!gm end bug … … 312 314 WRITE(numout,*) ' Reference z-coordinate depth and scale factors:' 313 315 WRITE(numout, "(9x,' level gdept gdepw e3t e3w ')" ) 314 WRITE(numout, "(10x, i4, 4f9.2)" ) ( jk, gdept_ 0(jk), gdepw_0(jk), e3t_0(jk), e3w_0(jk), jk = 1, jpk )316 WRITE(numout, "(10x, i4, 4f9.2)" ) ( jk, gdept_1d(jk), gdepw_1d(jk), e3t_1d(jk), e3w_1d(jk), jk = 1, jpk ) 315 317 ENDIF 316 318 317 319 DO jk = 1, jpk 318 IF( e3w_ 0 (jk) <= 0._wp .OR. e3t_0 (jk) <= 0._wp ) CALL ctl_stop( ' e3w_0 or e3t_0=< 0 ' )319 IF( gdepw_ 0(jk) < 0._wp .OR. gdept_0(jk) < 0._wp ) CALL ctl_stop( ' gdepw_0 or gdept_0< 0 ' )320 IF( e3w_1d (jk) <= 0._wp .OR. e3t_1d (jk) <= 0._wp ) CALL ctl_stop( ' e3w_1d or e3t_1d =< 0 ' ) 321 IF( gdepw_1d(jk) < 0._wp .OR. gdept_1d(jk) < 0._wp ) CALL ctl_stop( ' gdepw_1d or gdept_1d < 0 ' ) 320 322 END DO 321 323 ! ! ============================
Note: See TracChangeset
for help on using the changeset viewer.