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 9567 for branches/2015/nemo_v3_6_STABLE – NEMO

Ignore:
Timestamp:
2018-05-10T16:26:43+02:00 (6 years ago)
Author:
mathiot
Message:

apply tmask(:,:,1) to erp, qrp, precip, snow, rnf, qns to fix #2083

Location:
branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_clio.F90

    r8529 r9567  
    311311            ztaevbk = ztatm * ztatm3 * zcldeff * ( 0.39 - 0.05 * zevsqr )  
    312312            ! 
    313             zqlw(ji,jj) = - emic * stefan * ( ztaevbk + 4. * ztatm3 * ( zsst - ztatm ) )  
     313            zqlw(ji,jj) = - emic * stefan * ( ztaevbk + 4. * ztatm3 * ( zsst - ztatm ) ) * tmask(ji,jj,1)  
    314314 
    315315            !-------------------------------------------------- 
     
    365365 
    366366            ! sensible heat flux 
    367             zqsb(ji,jj) = zrhova * zcsho * 1004.0  * ( zsst - ztatm )  
     367            zqsb(ji,jj) = zrhova * zcsho * 1004.0  * ( zsst - ztatm ) * tmask(ji,jj,1)  
    368368          
    369369            ! latent heat flux (bounded by zero) 
    370             zqla(ji,jj) = MAX(  0.e0, zrhova * zcleo * 2.5e+06 * ( zqsato - zqatm )  ) 
     370            zqla(ji,jj) = MAX(  0.e0, zrhova * zcleo * 2.5e+06 * ( zqsato - zqatm )  ) * tmask(ji,jj,1) 
    371371            !                
    372372         END DO 
     
    550550            zmt2  = ( 272.0 - ztatm(ji,jj) ) / 38.0   ;   zind2 = MAX( 0.e0, SIGN( 1.e0, zmt2 ) ) 
    551551            zmt3  = ( 281.0 - ztatm(ji,jj) ) / 18.0   ;   zind3 = MAX( 0.e0, SIGN( 1.e0, zmt3 ) ) 
    552             sprecip(ji,jj) = sf(jp_prec)%fnow(ji,jj,1) / rday   &      ! rday = converte mm/day to kg/m2/s 
    553                &         * (          zind1      &                   ! solid  (snow) precipitation [kg/m2/s] 
     552            sprecip(ji,jj) = sf(jp_prec)%fnow(ji,jj,1) / rday * tmask(ji,jj,1)  &      ! rday = converte mm/day to kg/m2/s 
     553               &         * (          zind1      &                                     ! solid  (snow) precipitation [kg/m2/s] 
    554554               &            + ( 1.0 - zind1 ) * (          zind2   * ( 0.5 + zmt2 )   & 
    555555               &                                 + ( 1.0 - zind2 ) *  zind3 * zmt3  )   )  
     
    591591               ztaevbk = ztatm3 * ztatm(ji,jj) * zcldeff * ( 0.39 - 0.05 * zevsqr(ji,jj) )  
    592592               ! 
    593                z_qlw(ji,jj,jl) = - emic * stefan * ( ztaevbk + 4. * ztatm3 * ( ptsu(ji,jj,jl) - ztatm(ji,jj) ) )  
     593               z_qlw(ji,jj,jl) = - emic * stefan * ( ztaevbk + 4. * ztatm3 * ( ptsu(ji,jj,jl) - ztatm(ji,jj) ) ) * tmask(ji,jj,1) 
    594594 
    595595               !---------------------------------------- 
     
    618618             
    619619               !  sensible heat flux 
    620                z_qsb(ji,jj,jl) = zrhovacshi * ( ptsu(ji,jj,jl) - ztatm(ji,jj) ) 
     620               z_qsb(ji,jj,jl) = zrhovacshi * ( ptsu(ji,jj,jl) - ztatm(ji,jj) ) * tmask(ji,jj,1) 
    621621             
    622622               !  latent heat flux  
    623                qla_ice(ji,jj,jl) = MAX(  0.e0, zrhovaclei * ( zqsati - zqatm(ji,jj) )  ) 
     623               qla_ice(ji,jj,jl) = MAX(  0.e0, zrhovaclei * ( zqsati - zqatm(ji,jj) )  ) * tmask(ji,jj,1) 
    624624               
    625625               !  sensitivity of non solar fluxes (dQ/dT) (long-wave, sensible and latent fluxes) 
     
    643643      qns_ice(:,:,:) = z_qlw (:,:,:) - z_qsb (:,:,:) - qla_ice (:,:,:)      ! Downward Non Solar flux 
    644644!CDIR COLLAPSE 
    645       tprecip(:,:)   = sf(jp_prec)%fnow(:,:,1) / rday                     ! total precipitation [kg/m2/s] 
     645      tprecip(:,:)   = sf(jp_prec)%fnow(:,:,1) / rday * tmask(:,:,1)        ! total precipitation [kg/m2/s] 
    646646      ! 
    647647      ! ----------------------------------------------------------------------------- ! 
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r8529 r9567  
    394394         &     * ( sf(jp_tair)%fnow(:,:,1) - rt0 ) * rcp                          & 
    395395         &     + sf(jp_snow)%fnow(:,:,1) * rn_pfac                                &   ! add solid  precip heat content at min(Tair,Tsnow) 
    396          &     * ( MIN( sf(jp_tair)%fnow(:,:,1), rt0_snow ) - rt0 ) * cpic * tmask(:,:,1) 
     396         &     * ( MIN( sf(jp_tair)%fnow(:,:,1), rt0_snow ) - rt0 ) * cpic 
     397      qns(:,:) = qns(:,:) * tmask(:,:,1) 
    397398      ! 
    398399#if defined key_lim3 
     
    409410         CALL iom_put( "qsr_oce" ,   qsr  )                 ! output downward solar heat over the ocean 
    410411         CALL iom_put( "qt_oce"  ,   qns+qsr )              ! output total downward heat over the ocean 
    411          tprecip(:,:) = sf(jp_prec)%fnow(:,:,1) * rn_pfac   ! output total precipitation [kg/m2/s] 
    412          sprecip(:,:) = sf(jp_snow)%fnow(:,:,1) * rn_pfac   ! output solid precipitation [kg/m2/s] 
     412         tprecip(:,:) = sf(jp_prec)%fnow(:,:,1) * rn_pfac * tmask(:,:,1) ! output total precipitation [kg/m2/s] 
     413         sprecip(:,:) = sf(jp_snow)%fnow(:,:,1) * rn_pfac * tmask(:,:,1) ! output solid precipitation [kg/m2/s] 
    413414         CALL iom_put( 'snowpre', sprecip * 86400. )        ! Snow 
    414415         CALL iom_put( 'precip' , tprecip * 86400. )        ! Total precipitation 
     
    608609      END DO 
    609610      ! 
    610       tprecip(:,:) = sf(jp_prec)%fnow(:,:,1) * rn_pfac      ! total precipitation [kg/m2/s] 
    611       sprecip(:,:) = sf(jp_snow)%fnow(:,:,1) * rn_pfac      ! solid precipitation [kg/m2/s] 
     611      tprecip(:,:) = sf(jp_prec)%fnow(:,:,1) * rn_pfac * tmask(:,:,1)  ! total precipitation [kg/m2/s] 
     612      sprecip(:,:) = sf(jp_snow)%fnow(:,:,1) * rn_pfac * tmask(:,:,1)  ! solid precipitation [kg/m2/s] 
    612613      CALL iom_put( 'snowpre', sprecip * 86400. )                  ! Snow precipitation 
    613614      CALL iom_put( 'precip' , tprecip * 86400. )                  ! Total precipitation 
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_mfs.F90

    r8145 r9567  
    461461      !!---------------------------------------------------------------------- 
    462462 
    463             esre  = shms(ji,jj) - shnow(ji,jj)   ! --- calculates the term : qs(Ta)-qa(t2d) 
    464  
    465             cseep = ce(ji,jj) * wndm(ji,jj) * esre     ! --- calculates the term : Ce*|V|*[qs(Ts)-qa(t2d)] 
    466  
    467             evap(ji,jj) = (cseep * rhom(ji,jj)) ! in [kg/m2/sec] !! --- calculates the EVAPORATION RATE [m/yr] 
    468  
    469             elat(ji,jj) = rhom(ji,jj) * cseep * heatlat(sst(ji,jj)) 
     463            esre  = shms(ji,jj) - shnow(ji,jj) * tmask(ji,jj,1)   ! --- calculates the term : qs(Ta)-qa(t2d) 
     464 
     465            cseep = ce(ji,jj) * wndm(ji,jj) * esre * tmask(ji,jj,1)     ! --- calculates the term : Ce*|V|*[qs(Ts)-qa(t2d)] 
     466 
     467            evap(ji,jj) = (cseep * rhom(ji,jj)) * tmask(ji,jj,1) ! in [kg/m2/sec] !! --- calculates the EVAPORATION RATE [m/yr] 
     468 
     469            elat(ji,jj) = rhom(ji,jj) * cseep * heatlat(sst(ji,jj)) * tmask(ji,jj,1) 
    470470 
    471471      !!---------------------------------------------------------------------- 
     
    635635 
    636636          IF(cldnow(ji,jj).LT.0.3) THEN 
    637              qsw(ji,jj) = qtot * (1.-albedo) 
     637             qsw(ji,jj) = qtot * (1.-albedo) * tmask(ji,jj,1) 
    638638          ELSE 
    639639             qsw(ji,jj) = qtot*(1.-0.62*cldnow(ji,jj)              & 
    640                                 + .0019*sunbet)*(1.-albedo) 
     640                                + .0019*sunbet)*(1.-albedo) * tmask(ji,jj,1) 
    641641          ENDIF 
    642642 
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90

    r7963 r9567  
    120120      IF( MOD( kt - 1, nn_fsbc ) == 0 ) THEN 
    121121         ! 
    122          IF( .NOT. l_rnfcpl )   rnf(:,:) = rn_rfact * ( sf_rnf(1)%fnow(:,:,1) )       ! updated runoff value at time step kt 
     122         IF( .NOT. l_rnfcpl )   rnf(:,:) = rn_rfact * ( sf_rnf(1)%fnow(:,:,1) ) * tmask(:,:,1)  ! updated runoff value at time step kt 
    123123         ! 
    124124         !                                                     ! set temperature & salinity content of runoffs 
  • branches/2015/nemo_v3_6_STABLE/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssr.F90

    r4990 r9567  
    9797               DO jj = 1, jpj 
    9898                  DO ji = 1, jpi 
    99                      zqrp = rn_dqdt * ( sst_m(ji,jj) - sf_sst(1)%fnow(ji,jj,1) ) 
     99                     zqrp = rn_dqdt * ( sst_m(ji,jj) - sf_sst(1)%fnow(ji,jj,1) ) * tmask(ji,jj,1) 
    100100                     qns(ji,jj) = qns(ji,jj) + zqrp 
    101101                     qrp(ji,jj) = zqrp 
     
    111111                  DO ji = 1, jpi 
    112112                     zerp = zsrp * ( 1. - 2.*rnfmsk(ji,jj) )   &      ! No damping in vicinity of river mouths 
    113                         &        * ( sss_m(ji,jj) - sf_sss(1)%fnow(ji,jj,1) )  
     113                        &        * ( sss_m(ji,jj) - sf_sss(1)%fnow(ji,jj,1) ) * tmask(ji,jj,1) 
    114114                     sfx(ji,jj) = sfx(ji,jj) + zerp                 ! salt flux 
    115115                     erp(ji,jj) = zerp / MAX( sss_m(ji,jj), 1.e-20 ) ! converted into an equivalent volume flux (diagnostic only) 
     
    126126                     zerp = zsrp * ( 1. - 2.*rnfmsk(ji,jj) )   &      ! No damping in vicinity of river mouths 
    127127                        &        * ( sss_m(ji,jj) - sf_sss(1)%fnow(ji,jj,1) )   & 
    128                         &        / MAX(  sss_m(ji,jj), 1.e-20   ) 
     128                        &        / MAX(  sss_m(ji,jj), 1.e-20   ) * tmask(ji,jj,1) 
    129129                     IF( ln_sssr_bnd )   zerp = SIGN( 1., zerp ) * MIN( zerp_bnd, ABS(zerp) ) 
    130130                     emp(ji,jj) = emp (ji,jj) + zerp 
Note: See TracChangeset for help on using the changeset viewer.