Changeset 12387


Ignore:
Timestamp:
2020-02-14T14:55:00+01:00 (11 days ago)
Author:
cguiavarch
Message:

corrections to tramle & zdfosm to avoid division by 0 and restored OSMOSIS variables in output.abort

Location:
NEMO/branches/UKMO/NEMO_4.0_FKOSM/src/OCE
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0_FKOSM/src/OCE/DIA/diawri.F90

    r10888 r12387  
    4343   USE zdfdrg         ! ocean vertical physics: top/bottom friction 
    4444   USE zdfmxl         ! mixed layer 
     45   USE zdfosm         ! mixed layer 
    4546   ! 
    4647   USE lbclnk         ! ocean lateral boundary conditions (or mpp link) 
     
    927928         CALL iom_rstput( 0, 0, inum, 'sdvecrtz', wsd            )    ! now StokesDrift k-velocity 
    928929      ENDIF 
     930 
     931      IF( ln_zdfosm ) THEN 
     932         CALL iom_rstput( 0, 0, inum, 'hbl', hbl*tmask(:,:,1)   )    ! now boundary-layer depth 
     933         CALL iom_rstput( 0, 0, inum, 'hml', hml*tmask(:,:,1)    )    ! now mixed-layer depth 
     934         CALL iom_rstput( 0, 0, inum, 'avt_k', avt_k*wmask       )    ! w-level diffusion 
     935         CALL iom_rstput( 0, 0, inum, 'avm_k', avm_k*wmask       )    ! now w-level viscosity 
     936         CALL iom_rstput( 0, 0, inum, 'ghamt', ghamt*wmask       )    ! non-local t forcing 
     937         CALL iom_rstput( 0, 0, inum, 'ghams', ghams*wmask       )    ! non-local s forcing 
     938         CALL iom_rstput( 0, 0, inum, 'ghamu', ghamu*wmask       )    ! non-local u forcing 
     939         CALL iom_rstput( 0, 0, inum, 'ghamv', ghamu*wmask       )    ! non-local v forcing 
     940         IF( ln_osm_mle ) THEN 
     941            CALL iom_rstput( 0, 0, inum, 'hmle', hmle*tmask(:,:,1)   )    ! now transition-layer depth 
     942         END IF 
     943      ENDIF 
    929944  
    930945#if defined key_si3 
  • NEMO/branches/UKMO/NEMO_4.0_FKOSM/src/OCE/TRA/tramle.F90

    r12311 r12387  
    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/UKMO/NEMO_4.0_FKOSM/src/OCE/ZDF/zdfosm.F90

    r12322 r12387  
    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.