New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 14102 – NEMO

Changeset 14102


Ignore:
Timestamp:
2020-12-04T16:40:56+01:00 (3 years ago)
Author:
davestorkey
Message:

UKMO/NEMO_4.0.3_icb_speed_limit : bug fix.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.3_icb_speed_limit/src/OCE/ICB/icbdyn.F90

    r13587 r14102  
    4747      REAL(wp) ::   zuvel4 , zvvel4 , zu4, zv4, zax4, zay4, zxi4 , zyj4 
    4848      REAL(wp) ::   zuvel_n, zvvel_n, zxi_n   , zyj_n 
     49      REAL(wp) ::   zspeed, zspeed_new, zloc_dx 
    4950      REAL(wp) ::   zdt, zdt_2, zdt_6, ze1, ze2 
    5051      TYPE(iceberg), POINTER ::   berg 
     
    150151         CALL icb_ground( zxi_n, zxi1, zuvel_n,   & 
    151152            &             zyj_n, zyj1, zvvel_n, ll_bounced ) 
     153 
     154         IF( rn_speed_limit > 0._wp ) THEN       ! Limit speed of bergs based on a CFL criteria (if asked) 
     155            zspeed = SQRT( zuvel_n*zuvel_n + zvvel_n*zvvel_n )    ! Speed of berg 
     156            IF( zspeed > 0._wp ) THEN 
     157               zloc_dx = MIN( ze1, ze2 )                          ! minimum grid spacing 
     158               zspeed_new = zloc_dx / zdt * rn_speed_limit        ! Speed limit as a factor of dx / dt 
     159               IF( zspeed_new < zspeed ) THEN 
     160                  zuvel_n = zuvel_n * ( zspeed_new / zspeed )        ! Scale velocity to reduce speed 
     161                  zvvel_n = zvvel_n * ( zspeed_new / zspeed )        ! without changing the direction 
     162                  CALL icb_dia_speed() 
     163               ENDIF 
     164            ENDIF 
     165         ENDIF 
    152166 
    153167         pt%uvel = zuvel_n                        !** save in berg structure 
     
    265279      REAL(wp) ::   zampl, zwmod, zCr, zLwavelength, zLcutoff, zLtop 
    266280      REAL(wp) ::   zlambda, zdetA, zA11, zA12, zaxe, zaye, zD_hi 
    267       REAL(wp) ::   zuveln, zvveln, zus, zvs, zspeed, zloc_dx, zspeed_new 
     281      REAL(wp) ::   zuveln, zvveln, zus, zvs 
    268282      !!---------------------------------------------------------------------- 
    269283 
     
    357371         ! 
    358372      END DO      ! itloop 
    359  
    360       IF( rn_speed_limit > 0._wp ) THEN       ! Limit speed of bergs based on a CFL criteria (if asked) 
    361          zspeed = SQRT( zuveln*zuveln + zvveln*zvveln )    ! Speed of berg 
    362          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             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 
    368                CALL icb_dia_speed() 
    369             ENDIF 
    370          ENDIF 
    371       ENDIF 
    372373      !                                      ! check the speed and acceleration limits 
    373374      IF (nn_verbose_level > 0) THEN 
    374375         IF( ABS( zuveln ) > pp_vel_lim   .OR. ABS( zvveln ) > pp_vel_lim   )   & 
    375             WRITE(numicb,'("pe=",i3,x,a)') narea,'Dump triggered by excessive velocity' 
     376              WRITE(numicb,'("pe=",i3,x,a)') narea,'Dump triggered by excessive velocity' 
    376377         IF( ABS( pax    ) > pp_accel_lim .OR. ABS( pay    ) > pp_accel_lim )   & 
    377             WRITE(numicb,'("pe=",i3,x,a)') narea,'Dump triggered by excessive acceleration' 
     378              WRITE(numicb,'("pe=",i3,x,a)') narea,'Dump triggered by excessive acceleration' 
    378379      ENDIF 
    379380      ! 
Note: See TracChangeset for help on using the changeset viewer.