- Timestamp:
- 2021-01-28T18:15:06+01:00 (3 years ago)
- Location:
- NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/cfgs/SHARED/namelist_ref
r13511 r14360 536 536 rn_test_box = 108.0, 116.0, -66.0, -58.0 537 537 ln_use_calving = .false. ! Use calving data even when nn_test_icebergs > 0 538 rn_speed_limit = 0. ! CFL speed limit for a berg 538 rn_speed_limit = 0. ! CFL speed limit for a berg (safe value is 0.4, see #2581) 539 539 540 540 cn_dir = './' ! root directory for the calving data location -
NEMO/branches/2021/ticket2581_NEMO4.0-HEAD_icb_speeding_ticket/src/OCE/ICB/icbdyn.F90
r13263 r14360 14 14 USE dom_oce ! NEMO ocean domain 15 15 USE phycst ! NEMO physical constants 16 USE in_out_manager ! IO parameters 16 17 ! 17 18 USE icb_oce ! define iceberg arrays … … 85 86 ! !** A1 = A(X1,V1) 86 87 CALL icb_accel( berg , zxi1, ze1, zuvel1, zuvel1, zax1, & 87 & zyj1, ze2, zvvel1, zvvel1, zay1, zdt_2 )88 & zyj1, ze2, zvvel1, zvvel1, zay1, zdt_2, 1./2. ) 88 89 ! 89 90 zu1 = zuvel1 / ze1 !** V1 in d(i,j)/dt … … 102 103 ! !** A2 = A(X2,V2) 103 104 CALL icb_accel( berg , zxi2, ze1, zuvel2, zuvel1, zax2, & 104 & zyj2, ze2, zvvel2, zvvel1, zay2, zdt_2 )105 & zyj2, ze2, zvvel2, zvvel1, zay2, zdt_2, 1./2. ) 105 106 ! 106 107 zu2 = zuvel2 / ze1 !** V2 in d(i,j)/dt … … 113 114 zyj3 = zyj1 + zdt_2 * zv2 ; zvvel3 = zvvel1 + zdt_2 * zay2 114 115 ! 115 CALL icb_ground( zxi3, zxi1, zu 3, &116 & zyj3, zyj1, zv3, ll_bounced )116 CALL icb_ground( zxi3, zxi1, zu2, & 117 & zyj3, zyj1, zv2, ll_bounced ) 117 118 118 119 ! !** A3 = A(X3,V3) 119 120 CALL icb_accel( berg , zxi3, ze1, zuvel3, zuvel1, zax3, & 120 & zyj3, ze2, zvvel3, zvvel1, zay3, zdt )121 & zyj3, ze2, zvvel3, zvvel1, zay3, zdt, 1. ) 121 122 ! 122 123 zu3 = zuvel3 / ze1 !** V3 in d(i,j)/dt … … 129 130 zyj4 = zyj1 + zdt * zv3 ; zvvel4 = zvvel1 + zdt * zay3 130 131 131 CALL icb_ground( zxi4, zxi1, zu 4, &132 & zyj4, zyj1, zv 4, ll_bounced )132 CALL icb_ground( zxi4, zxi1, zu3, & 133 & zyj4, zyj1, zv3, ll_bounced ) 133 134 134 135 ! !** A4 = A(X4,V4) 135 136 CALL icb_accel( berg , zxi4, ze1, zuvel4, zuvel1, zax4, & 136 & zyj4, ze2, zvvel4, zvvel1, zay4, zdt )137 & zyj4, ze2, zvvel4, zvvel1, zay4, zdt, 1. ) 137 138 138 139 zu4 = zuvel4 / ze1 !** V4 in d(i,j)/dt … … 235 236 236 237 SUBROUTINE icb_accel( berg , pxi, pe1, puvel, puvel0, pax, & 237 & pyj, pe2, pvvel, pvvel0, pay, pdt )238 & pyj, pe2, pvvel, pvvel0, pay, pdt, pcfl_scale ) 238 239 !!---------------------------------------------------------------------- 239 240 !! *** ROUTINE icb_accel *** … … 244 245 !!---------------------------------------------------------------------- 245 246 TYPE(iceberg ), POINTER, INTENT(in ) :: berg ! berg 247 REAL(wp) , INTENT(in ) :: pcfl_scale 246 248 REAL(wp) , INTENT(in ) :: pxi , pyj ! berg position in (i,j) referential 247 249 REAL(wp) , INTENT(in ) :: puvel , pvvel ! berg velocity [m/s] … … 361 363 zspeed = SQRT( zuveln*zuveln + zvveln*zvveln ) ! Speed of berg 362 364 IF( zspeed > 0._wp ) THEN 363 zloc_dx = MIN( pe1, pe2 ) ! minimum grid spacing 364 zspeed_new = zloc_dx / pdt * rn_speed_limit ! Speed limit as a factor of dx / dt 365 zloc_dx = MIN( pe1, pe2 ) ! minimum grid spacing 366 ! cfl scale is function of the RK4 step 367 zspeed_new = zloc_dx / pdt * rn_speed_limit * pcfl_scale ! Speed limit as a factor of dx / dt 365 368 IF( zspeed_new < zspeed ) THEN 366 zuveln = zuveln * ( zspeed_new / zspeed ) ! Scale velocity to reduce speed 367 zvveln = zvveln * ( zspeed_new / zspeed ) ! without changing the direction 369 zuveln = zuveln * ( zspeed_new / zspeed ) ! Scale velocity to reduce speed 370 zvveln = zvveln * ( zspeed_new / zspeed ) ! without changing the direction 371 pax = (zuveln - puvel0)/pdt 372 pay = (zvveln - pvvel0)/pdt 373 WRITE(numout,*) 'speeding ticket (zspeed_new, zspeed): ',zspeed_new, zspeed, pdt, pcfl_scale 374 CALL FLUSH(numout) 368 375 CALL icb_dia_speed() 369 376 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.