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 9940 for NEMO/trunk/src/OCE/ICB – NEMO

Ignore:
Timestamp:
2018-07-13T12:18:14+02:00 (6 years ago)
Author:
acc
Message:

Changes to restore restartability and reproducibility with ORCA2_ICE_PISCES SETTE tests with active icebergs. Changes to icbthm.F90 are purely cosmetic or improvements to code efficiency. The key change is the reintroduction of an lbc_lnk for emp in sbcmod after icb_stp. Icebergs that advect into haloes during icb_stp can melt and alter emp (if ln_passive_mode is .false.). These changes are lost across restarts without the halo exchange. This solution is not ideal but no alterantive is apparent with the current icb algorithm. This change restores both restartability and reproducibility with a 990 timestep (495 timestep restart) set of tests. See #2113 for details

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/ICB/icbthm.F90

    r9598 r9940  
    5050      REAL(wp) ::   zM, zT, zW, zL, zSST, zVol, zLn, zWn, zTn, znVol, zIC, zDn 
    5151      REAL(wp) ::   zMv, zMe, zMb, zmelt, zdvo, zdva, zdM, zSs, zdMe, zdMb, zdMv 
    52       REAL(wp) ::   zMnew, zMnew1, zMnew2, zheat 
     52      REAL(wp) ::   zMnew, zMnew1, zMnew2, zheat, z1_12 
    5353      REAL(wp) ::   zMbits, znMbits, zdMbitsE, zdMbitsM, zLbits, zAbits, zMbb 
    5454      REAL(wp) ::   zxi, zyj, zff, z1_rday, z1_e1e2, zdt, z1_dt, z1_dt_e1e2 
     
    5858      ! 
    5959      z1_rday = 1._wp / rday 
     60      z1_12   = 1._wp / 12._wp 
     61      zdt     = berg_dt 
     62      z1_dt   = 1._wp / zdt 
    6063      ! 
    6164      ! we're either going to ignore berg fresh water melt flux and associated heat 
     
    9194         ij  = mj1( ij ) 
    9295         zVol = zT * zW * zL 
    93          zdt = berg_dt   ;   z1_dt = 1._wp / zdt 
    9496 
    9597         ! Environment 
    9698         zdvo = SQRT( (pt%uvel-pt%uo)**2 + (pt%vvel-pt%vo)**2 ) 
    9799         zdva = SQRT( (pt%ua  -pt%uo)**2 + (pt%va  -pt%vo)**2 ) 
    98          zSs  = 1.5 * SQRT( zdva ) + 0.1 * zdva                ! Sea state      (eqn M.A9) 
     100         zSs  = 1.5_wp * SQRT( zdva ) + 0.1_wp * zdva                ! Sea state      (eqn M.A9) 
    99101 
    100102         ! Melt rates in m/s (i.e. division by rday) 
    101          zMv = MAX( 7.62e-3*zSST+1.29e-3*(zSST**2)            , 0._wp ) * z1_rday   ! Buoyant convection at sides (eqn M.A10) 
    102          zMb = MAX( 0.58*(zdvo**0.8)*(zSST+4.0)/(zL**0.2)      , 0._wp ) * z1_rday   ! Basal turbulent melting     (eqn M.A7 ) 
    103          zMe = MAX( 1./12.*(zSST+2.)*zSs*(1+COS(rpi*(zIC**3))) , 0._wp ) * z1_rday   ! Wave erosion                (eqn M.A8 ) 
     103         zMv = MAX( 7.62d-3*zSST+1.29d-3*(zSST**2)                    , 0._wp ) * z1_rday   ! Buoyant convection at sides (eqn M.A10) 
     104         zMb = MAX( 0.58_wp*(zdvo**0.8_wp)*(zSST+4.0_wp)/(zL**0.2_wp) , 0._wp ) * z1_rday   ! Basal turbulent melting     (eqn M.A7 ) 
     105         zMe = MAX( z1_12*(zSST+2.)*zSs*(1._wp+COS(rpi*(zIC**3)))    , 0._wp ) * z1_rday   ! Wave erosion                (eqn M.A8 ) 
    104106 
    105107         IF( ln_operator_splitting ) THEN      ! Operator split update of volume/mass 
    106108            zTn    = MAX( zT - zMb*zdt , 0._wp )         ! new total thickness (m) 
    107109            znVol  = zTn * zW * zL                       ! new volume (m^3) 
    108             zMnew1 = (znVol/zVol) * zM                   ! new mass (kg) 
     110            zMnew1 = ( znVol / zVol ) * zM               ! new mass (kg) 
    109111            zdMb   = zM - zMnew1                         ! mass lost to basal melting (>0) (kg) 
    110112            ! 
     
    112114            zWn    = MAX( zW - zMv*zdt , 0._wp )         ! new width (m) 
    113115            znVol  = zTn * zWn * zLn                     ! new volume (m^3) 
    114             zMnew2 = (znVol/zVol) * zM                   ! new mass (kg) 
     116            zMnew2 = ( znVol / zVol ) * zM               ! new mass (kg) 
    115117            zdMv   = zMnew1 - zMnew2                     ! mass lost to buoyant convection (>0) (kg) 
    116118            ! 
     
    142144            zLbits   = MIN( zL, zW, zT, 40._wp )                                     ! assume bergy bits are smallest dimension or 40 meters 
    143145            zAbits   = ( zMbits / rn_rho_bergs ) / zLbits                            ! Effective bottom area (assuming T=Lbits) 
    144             zMbb     = MAX( 0.58*(zdvo**0.8)*(zSST+2.0)/(zLbits**0.2), 0.) * z1_rday ! Basal turbulent melting (for bits) 
     146            zMbb     = MAX( 0.58_wp*(zdvo**0.8_wp)*(zSST+2._wp) /   & 
     147               &                              ( zLbits**0.2_wp ) , 0._wp ) * z1_rday ! Basal turbulent melting (for bits) 
    145148            zMbb     = rn_rho_bergs * zAbits * zMbb                                  ! in kg/s 
    146149            zdMbitsM = MIN( zMbb*zdt , znMbits )                                     ! bergy bits mass lost to melting (kg) 
Note: See TracChangeset for help on using the changeset viewer.