Changeset 12384


Ignore:
Timestamp:
2020-02-13T17:21:21+01:00 (11 days ago)
Author:
agn
Message:

corrections to tramle & zdfosm to avoid division by 0

Location:
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/TRA/tramle.F90

    r12310 r12384  
    254254    DO jj = 1, jpjm1 
    255255       DO ji = 1, fs_jpim1   ! vector opt. 
    256           zhu(ji,jj) = 1._wp / zhu(ji,jj)                   ! hu --> 1/hu 
    257           zhv(ji,jj) = 1._wp / zhv(ji,jj) 
     256          zhu(ji,jj) = 1._wp / MAX(zhu(ji,jj), rsmall)                   ! hu --> 1/hu 
     257          zhv(ji,jj) = 1._wp / MAX(zhv(ji,jj), rsmall)  
    258258       END DO 
    259259    END DO 
  • NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/OCE/ZDF/zdfosm.F90

    r12319 r12384  
    13581358     REAL(wp) :: ztgrad, zsgrad, zbgrad 
    13591359     REAL(wp) :: zgamma_b_nd, zgamma_c, znd 
    1360      REAL(wp) :: zzeta_s=0.3 
     1360     REAL(wp) :: zzeta_s=0.3, ztmp 
    13611361 
    13621362     DO jj = 2, jpjm1 
     
    13671367                         & (zdhdt(ji,jj) > 0._wp .AND. ln_osm_mle .AND. zdb_bl(ji,jj) > rn_osm_mle_thresh & 
    13681368                         &  .OR.  zdb_bl(ji,jj) > 0._wp)) THEN  ! zdhdt could be <0 due to FK, hence check zdhdt>0 
    1369                        ztgrad = 0.5 * zdt_ml(ji,jj) / zdh(ji,jj) + zdtdz_ext(ji,jj) 
    1370                        zsgrad = 0.5 * zds_ml(ji,jj) / zdh(ji,jj) + zdsdz_ext(ji,jj) 
    1371                        zbgrad = 0.5 * zdb_ml(ji,jj) / zdh(ji,jj) + zdbdz_ext(ji,jj) 
    1372                        zgamma_b_nd = zdbdz_ext(ji,jj) * zdh(ji,jj) / zdb_ml(ji,jj) 
     1369                       ztmp = 1._wp/MAX(zdh(ji,jj), epsln) 
     1370                       ztgrad = 0.5 * zdt_ml(ji,jj) * ztmp + zdtdz_ext(ji,jj) 
     1371                       zsgrad = 0.5 * zds_ml(ji,jj) * ztmp + zdsdz_ext(ji,jj) 
     1372                       zbgrad = 0.5 * zdb_ml(ji,jj) * ztmp + zdbdz_ext(ji,jj) 
     1373                       zgamma_b_nd = zdbdz_ext(ji,jj) * zdh(ji,jj) / MAX(zdb_ml(ji,jj), epsln) 
    13731374                       zgamma_c = ( 3.14159 / 4.0 ) * ( 0.5 + zgamma_b_nd ) /& 
    13741375                            & ( 1.0 - 0.25 * SQRT( 3.14159 / 6.0 ) - 2.0 * zgamma_b_nd * zzeta_s )**2 ! check 
    13751376                       DO jk = 2, ibld(ji,jj)+ibld_ext 
    1376                           znd = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) / zdh(ji,jj) 
     1377                          znd = -( gdepw_n(ji,jj,jk) - zhbl(ji,jj) ) * ztmp 
    13771378                          IF ( znd <= zzeta_s ) THEN 
    1378                              zdtdz(ji,jj,jk) = zdtdz_ext(ji,jj) + 0.5 * zdt_ml(ji,jj) / zdh(ji,jj) * & 
     1379                             zdtdz(ji,jj,jk) = zdtdz_ext(ji,jj) + 0.5 * zdt_ml(ji,jj) * ztmp * & 
    13791380                                  & EXP( -6.0 * ( znd -zzeta_s )**2 ) 
    1380                              zdsdz(ji,jj,jk) = zdsdz_ext(ji,jj) + 0.5 * zds_ml(ji,jj) / zdh(ji,jj) * & 
     1381                             zdsdz(ji,jj,jk) = zdsdz_ext(ji,jj) + 0.5 * zds_ml(ji,jj) * ztmp * & 
    13811382                                  & EXP( -6.0 * ( znd -zzeta_s )**2 ) 
    1382                              zdbdz(ji,jj,jk) = zdbdz_ext(ji,jj) + 0.5 * zdb_ml(ji,jj) / zdh(ji,jj) * & 
     1383                             zdbdz(ji,jj,jk) = zdbdz_ext(ji,jj) + 0.5 * zdb_ml(ji,jj) * ztmp * & 
    13831384                                  & EXP( -6.0 * ( znd -zzeta_s )**2 ) 
    13841385                          ELSE 
     
    13951396                    IF ( zdb_bl(ji,jj) > 0._wp ) THEN 
    13961397                       IF ( zhol(ji,jj) >= 0.5 ) THEN      ! Very stable - 'thick' pycnocline 
    1397                           ztgrad = zdt_bl(ji,jj) / zhbl(ji,jj) 
    1398                           zsgrad = zds_bl(ji,jj) / zhbl(ji,jj) 
    1399                           zbgrad = zdb_bl(ji,jj) / zhbl(ji,jj) 
     1398                          ztmp = 1._wp/MAX(zhbl(ji,jj), epsln) 
     1399                          ztgrad = zdt_bl(ji,jj) * ztmp 
     1400                          zsgrad = zds_bl(ji,jj) * ztmp 
     1401                          zbgrad = zdb_bl(ji,jj) * ztmp 
    14001402                          DO jk = 2, ibld(ji,jj) 
    1401                              znd = gdepw_n(ji,jj,jk) / zhbl(ji,jj) 
     1403                             znd = gdepw_n(ji,jj,jk) * ztmp 
    14021404                             zdtdz(ji,jj,jk) =  ztgrad * EXP( -15.0 * ( znd - 0.9 )**2 ) 
    14031405                             zdbdz(ji,jj,jk) =  zbgrad * EXP( -15.0 * ( znd - 0.9 )**2 ) 
     
    14051407                          END DO 
    14061408                       ELSE                                   ! Slightly stable - 'thin' pycnoline - needed when stable layer begins to form. 
    1407                           ztgrad = zdt_bl(ji,jj) / zdh(ji,jj) 
    1408                           zsgrad = zds_bl(ji,jj) / zdh(ji,jj) 
    1409                           zbgrad = zdb_bl(ji,jj) / zdh(ji,jj) 
     1409                          ztmp = 1._wp/MAX(zdh(ji,jj), epsln) 
     1410                          ztgrad = zdt_bl(ji,jj) * ztmp 
     1411                          zsgrad = zds_bl(ji,jj) * ztmp 
     1412                          zbgrad = zdb_bl(ji,jj) * ztmp 
    14101413                          DO jk = 2, ibld(ji,jj) 
    1411                              znd = -( gdepw_n(ji,jj,jk) - zhml(ji,jj) ) / zdh(ji,jj) 
     1414                             znd = -( gdepw_n(ji,jj,jk) - zhml(ji,jj) ) * ztmp 
    14121415                             zdtdz(ji,jj,jk) =  ztgrad * EXP( -1.75 * ( znd + 0.75 )**2 ) 
    14131416                             zdbdz(ji,jj,jk) =  zbgrad * EXP( -1.75 * ( znd + 0.75 )**2 ) 
Note: See TracChangeset for help on using the changeset viewer.