Ignore:
Timestamp:
2020-07-16T11:12:56+02:00 (4 months ago)
Author:
clem
Message:

zdftke: orca1 crashes after 6 months unless implicit drags is used or the input of energy below sea-ice is increased. We chose here to remove the dependency of ice fraction in the surface condition on tke (back to old formulation). The rest of the changes are just there to prevent roundoff errors.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/ZDF/zdftke.F90

    r13279 r13309  
    233233      DO jj = 2, jpjm1            ! en(1)   = rn_ebb taum / rau0  (min value rn_emin0) 
    234234         DO ji = fs_2, fs_jpim1   ! vector opt. 
    235             en(ji,jj,1) = MAX( rn_emin0, ( ( 1._wp - fr_i(ji,jj) ) * zbbrau + & 
    236                &                                     fr_i(ji,jj)   * zbbirau ) * taum(ji,jj) ) * tmask(ji,jj,1) 
     235!! clem: this should be the right formulation but it makes the model unstable unless drags are calculated implicitly 
     236!!       one way around would be to increase zbbirau  
     237!!          en(ji,jj,1) = MAX( rn_emin0, ( ( 1._wp - fr_i(ji,jj) ) * zbbrau + & 
     238!!             &                                     fr_i(ji,jj)   * zbbirau ) * taum(ji,jj) ) * tmask(ji,jj,1) 
     239            en(ji,jj,1) = MAX( rn_emin0, zbbrau * taum(ji,jj) ) * tmask(ji,jj,1) 
    237240         END DO 
    238241      END DO 
     
    304307            DO ji = fs_2, fs_jpim1   ! vector opt. 
    305308               zus  = zcof * SQRT( taum(ji,jj) )           ! Stokes drift 
    306                zus3(ji,jj) = ( 1._wp - zice_fra(ji,jj) ) * zus * zus * zus * tmask(ji,jj,1) ! zus > 0. ok 
     309               zus3(ji,jj) = MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * zus * zus * zus * tmask(ji,jj,1) ! zus > 0. ok 
    307310            END DO 
    308311         END DO          
     
    310313            DO jj = 2, jpjm1 
    311314               DO ji = fs_2, fs_jpim1   ! vector opt. 
    312                   IF ( zus3(ji,jj) /= 0. ) THEN                
     315                  IF ( zus3(ji,jj) /= 0._wp ) THEN                
    313316                     ! vertical velocity due to LC    
    314317                     IF ( pdepw(ji,jj,jk) - zhlc(ji,jj) < 0 .AND. wmask(ji,jj,jk) /= 0. ) THEN 
     
    420423               DO ji = fs_2, fs_jpim1   ! vector opt. 
    421424                  en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -pdepw(ji,jj,jk) / htau(ji,jj) )   & 
    422                      &                                 * ( 1._wp - zice_fra(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     425                     &                                 * MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    423426               END DO 
    424427            END DO 
     
    429432               jk = nmln(ji,jj) 
    430433               en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -pdepw(ji,jj,jk) / htau(ji,jj) )   & 
    431                   &                                 * ( 1._wp - zice_fra(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     434                  &                                 * MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    432435            END DO 
    433436         END DO 
     
    442445                  zdif = rhftau_scl * MAX( 0._wp, zdif + rhftau_add )  ! apply some modifications... 
    443446                  en(ji,jj,jk) = en(ji,jj,jk) + zbbrau * zdif * EXP( -pdepw(ji,jj,jk) / htau(ji,jj) )   & 
    444                      &                                 * ( 1._wp - zice_fra(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
     447                     &                                 * MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    445448               END DO 
    446449            END DO 
Note: See TracChangeset for help on using the changeset viewer.