- Timestamp:
- 2020-07-30T13:20:57+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/tickets_icb_1900/src/OCE/ICB/icbdyn.F90
r13265 r13357 197 197 ij = mj1( ij ) 198 198 ! 199 ! assume icb is grounded if tmask(ii,ij,1) or tmask(ii,ij,ikb), depending of the option is not 0 200 !IF ( ln_icb_ground ) THEN 201 ! ! interpol needed data 202 ! CALL icb_utl_interp( pxi, pyj, pe3t=ze3t ) ! 3d velocities 203 ! 204 ! !compute bottom level 205 ! CALL icb_utl_getkb( ikb, ze3t, zD ) 206 ! 207 ! IF( tmask(ii,ij,ikb) /= 0._wp ) RETURN ! berg reach a new t-cell, but an ocean one 208 !ELSE 199 209 IF( tmask(ii,ij,1) /= 0._wp ) RETURN ! berg reach a new t-cell, but an ocean one 210 !END IF 200 211 ! 201 212 ! From here, berg have reach land: treat grounding/bouncing … … 254 265 REAL(wp), PARAMETER :: pp_Cr0 = 0.06_wp ! 255 266 ! 256 INTEGER :: itloop 257 REAL(wp) :: zuo, z ui, zua, zuwave, zssh_x, zsst, zcn, zhi258 REAL(wp) :: zvo, z vi, zva, zvwave, zssh_y267 INTEGER :: itloop, ikb, jk 268 REAL(wp) :: zuo, zssu, zui, zua, zuwave, zssh_x, zcn, zhi 269 REAL(wp) :: zvo, zssv, zvi, zva, zvwave, zssh_y 259 270 REAL(wp) :: zff, zT, zD, zW, zL, zM, zF 260 271 REAL(wp) :: zdrag_ocn, zdrag_atm, zdrag_ice, zwave_rad 261 REAL(wp) :: z_ocn, z_atm, z_ice 272 REAL(wp) :: z_ocn, z_atm, z_ice, zdep 262 273 REAL(wp) :: zampl, zwmod, zCr, zLwavelength, zLcutoff, zLtop 263 274 REAL(wp) :: zlambda, zdetA, zA11, zA12, zaxe, zaye, zD_hi 264 275 REAL(wp) :: zuveln, zvveln, zus, zvs, zspeed, zloc_dx, zspeed_new 276 REAL(wp), DIMENSION(jpk) :: zuoce, zvoce, ze3t, zdepw 265 277 !!---------------------------------------------------------------------- 266 278 267 279 ! Interpolate gridded fields to berg 268 280 nknberg = berg%number(1) 269 CALL icb_utl_interp( pxi, pyj, pe1=pe1, pe2=pe2, & ! scale factor 270 & puo=zuo, pui=zui, pua=zua, & ! oce/ice/atm velocities 271 & pvo=zvo, pvi=zvi, pva=zva, & ! oce/ice/atm velocities 272 & pssh_i=zssh_x, pssh_j=zssh_y, & ! ssh gradient 273 & phi=zhi, pff=zff ) ! ice thickness and coriolis 274 275 IF (lwp) THEN 276 WRITE(numout,*) 'icbdyn ', pxi, pyj 277 WRITE(numout,*) pe1, zuo, zui, zua, zssh_x 278 WRITE(numout,*) pe2, zvo, zvi, zva, zssh_y 279 WRITE(numout,*) zhi, zff 280 WRITE(numout,*) '' 281 END IF 282 281 CALL icb_utl_interp( pxi, pyj, pe1=pe1, pe2=pe2, & ! scale factor 282 & pssu=zssu, pui=zui, pua=zua, & ! oce/ice/atm velocities 283 & pssv=zssv, pvi=zvi, pva=zva, & ! oce/ice/atm velocities 284 & pssh_i=zssh_x, pssh_j=zssh_y, & ! ssh gradient 285 & phi=zhi, pff=zff) ! ice thickness and coriolis 283 286 284 287 zM = berg%current_point%mass 285 288 zT = berg%current_point%thickness ! total thickness 286 zD = ( rn_rho_bergs / pp_rho_seawater ) * zT! draught (keel depth)289 zD = rho_berg_1_oce * zT ! draught (keel depth) 287 290 zF = zT - zD ! freeboard 288 291 zW = berg%current_point%width … … 291 294 zhi = MIN( zhi , zD ) 292 295 zD_hi = MAX( 0._wp, zD-zhi ) 293 294 295 zuwave = zua - z uo ; zvwave = zva - zvo! Use wind speed rel. to ocean for wave model296 297 ! Wave radiation 298 zuwave = zua - zssu ; zvwave = zva - zssv ! Use wind speed rel. to ocean for wave model 296 299 zwmod = zuwave*zuwave + zvwave*zvwave ! The wave amplitude and length depend on the current; 297 300 ! ! wind speed relative to the ocean. Actually wmod is wmod**2 here. … … 318 321 IF( abs(zui) + abs(zvi) == 0._wp ) z_ice = 0._wp 319 322 323 ! lateral velocities 324 ! default ssu and ssv 325 ! ln_M2016: mean velocity along the profile 326 IF ( ln_M2016 ) THEN 327 ! interpol needed data 328 CALL icb_utl_interp( pxi, pyj, puoce=zuoce, pvoce=zvoce, pe3t=ze3t ) ! 3d velocities 329 330 !compute bottom level 331 CALL icb_utl_getkb( ikb, ze3t, zD ) 332 333 ! compute mean velocity 334 zuo = 0.0 ; zvo = 0.0; zdep = 0.0 335 DO jk = 1, ikb-1 336 zuo = zuo + zuoce(jk) * ze3t(jk) 337 zvo = zvo + zvoce(jk) * ze3t(jk) 338 zdep = zdep + ze3t(jk) 339 END DO 340 zuo = (zuo + zuoce(ikb) * (zD - zdep)) / zD 341 zvo = (zvo + zvoce(ikb) * (zD - zdep)) / zD 342 ELSE 343 zuo = zssu 344 zvo = zssv 345 END IF 346 320 347 zuveln = puvel ; zvveln = pvvel ! Copy starting uvel, vvel 321 348 ! … … 330 357 ! Explicit accelerations 331 358 !zaxe= zff*pvvel -grav*zssh_x +zwave_rad*zuwave & 332 ! -zdrag_ocn*(puvel-z uo) -zdrag_atm*(puvel-zua) -zdrag_ice*(puvel-zui)359 ! -zdrag_ocn*(puvel-zssu) -zdrag_atm*(puvel-zua) -zdrag_ice*(puvel-zui) 333 360 !zaye=-zff*puvel -grav*zssh_y +zwave_rad*zvwave & 334 ! -zdrag_ocn*(pvvel-z vo) -zdrag_atm*(pvvel-zva) -zdrag_ice*(pvvel-zvi)361 ! -zdrag_ocn*(pvvel-zssv) -zdrag_atm*(pvvel-zva) -zdrag_ice*(pvvel-zvi) 335 362 zaxe = -grav * zssh_x + zwave_rad * zuwave 336 363 zaye = -grav * zssh_y + zwave_rad * zvwave
Note: See TracChangeset
for help on using the changeset viewer.