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 12192 for NEMO/branches/2019 – NEMO

Changeset 12192 for NEMO/branches/2019


Ignore:
Timestamp:
2019-12-11T17:00:27+01:00 (4 years ago)
Author:
laurent
Message:

Skin temperature is back to Celsius (formerly Kelvin)!

Location:
NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/SBC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/SBC/sbc_oce.F90

    r12179 r12192  
    154154   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sss_m     !: mean (nn_fsbc time-step) surface sea salinity            [psu] 
    155155   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ssh_m     !: mean (nn_fsbc time-step) sea surface height                [m] 
    156    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   tsk_m     !: mean (nn_fsbc time-step) SKIN surface sea temperature      [K] 
     156   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   tsk_m     !: mean (nn_fsbc time-step) SKIN surface sea temp.      [Celsius] 
    157157   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   e3t_m     !: mean (nn_fsbc time-step) sea surface layer thickness       [m] 
    158158   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   frq_m     !: mean (nn_fsbc time-step) fraction of solar net radiation absorbed in the 1st T level [-] 
  • NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/SBC/sbcblk.F90

    r12183 r12192  
    496496      REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   ptair  ! potential temperature at T-points        [Kelvin] 
    497497      REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   pslp   ! sea-level pressure                       [Pa] 
    498       REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   pst    ! surface temperature                      [Celcius] 
     498      REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   pst    ! surface temperature                      [Celsius] 
    499499      REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   pu     ! surface current at U-point (i-component) [m/s] 
    500500      REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   pv     ! surface current at V-point (j-component) [m/s] 
    501501      REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   pqsr   ! 
    502502      REAL(wp), INTENT(in   ), DIMENSION(:,:) ::   pqlw   ! 
    503       REAL(wp), INTENT(  out), DIMENSION(:,:) ::   ptsk   ! skin temp. (or SST if CS & WL not used)  [K] 
     503      REAL(wp), INTENT(  out), DIMENSION(:,:) ::   ptsk   ! skin temp. (or SST if CS & WL not used)  [Celsius] 
    504504      REAL(wp), INTENT(  out), DIMENSION(:,:) ::   pssq   ! specific humidity at pst                 [kg/kg] 
    505505      REAL(wp), INTENT(  out), DIMENSION(:,:) ::   pcd_du ! Cd x |dU| at T-points                    [m/s] 
     
    521521      ! 
    522522      ! local scalars ( place there for vector optimisation purposes) 
    523       !                            ! convert "bulk SST" from Celcius to Kelvin (and set minimum value far above 0 K) 
    524       ptsk(:,:) = pst(:,:) + rt0    ! by default, skin temperature = "bulk SST" (will remain this way if NCAR algorithm used!) 
     523      !                           ! Temporary conversion from Celcius to Kelvin (and set minimum value far above 0 K) 
     524      ptsk(:,:) = pst(:,:) + rt0  ! by default: skin temperature = "bulk SST" (will remain this way if NCAR algorithm used!) 
    525525 
    526526      ! ----------------------------------------------------------------------------- ! 
     
    643643            ptsk(:,:) = zztmp1(:,:) 
    644644            pssq(:,:) = zztmp2(:,:) 
    645          ELSEWHERE 
    646             ! no sea-ice! 
    647             ! ptsk and zsq have been updated by cool-skin/warm-layer scheme and we keep them !!! 
    648             ptsk(:,:) = ptsk(:,:)*tmask(:,:,1) 
    649             pssq(:,:) = pssq(:,:)*tmask(:,:,1) 
     645         !ELSEWHERE 
     646         !   ! no sea-ice! 
     647         !   ! ptsk and zsq have been updated by cool-skin/warm-layer scheme and we keep them !!! 
     648         !   ptsk(:,:) = ptsk(:,:)*tmask(:,:,1) 
     649         !   pssq(:,:) = pssq(:,:)*tmask(:,:,1) 
    650650         END WHERE 
    651651      END IF 
     
    715715         ! 
    716716      ENDIF !IF( ln_abl ) 
    717  
     717       
     718      ptsk(:,:) = ( ptsk(:,:) - rt0 ) * tmask(:,:,1)  ! Back to Celsius 
     719             
    718720      IF( ln_skin_cs .OR. ln_skin_wl ) THEN 
    719          CALL iom_put( "t_skin" ,  (ptsk -  rt0)      * tmask(:,:,1) )  ! T_skin in Celsius 
    720          CALL iom_put( "dt_skin" , (ptsk - pst - rt0) * tmask(:,:,1) )  ! T_skin - SST temperature difference... 
     721         CALL iom_put( "t_skin" ,  ptsk        )  ! T_skin in Celsius 
     722         CALL iom_put( "dt_skin" , ptsk - pst )  ! T_skin - SST temperature difference... 
    721723      ENDIF 
    722724 
     
    731733 
    732734   SUBROUTINE blk_oce_2( ptair, pqsr, pqlw, pprec,   &   ! <<= in 
    733       &                  psnow, ptsk , psen, pevp     )  ! <<= in 
     735      &                  psnow, ptsk, psen, pevp     )  ! <<= in 
    734736      !!--------------------------------------------------------------------- 
    735737      !!                     ***  ROUTINE blk_oce_2  *** 
     
    752754      REAL(wp), INTENT(in), DIMENSION(:,:) ::   pprec 
    753755      REAL(wp), INTENT(in), DIMENSION(:,:) ::   psnow 
    754       REAL(wp), INTENT(in), DIMENSION(:,:) ::   ptsk   ! SKIN surface temperature   [K] 
     756      REAL(wp), INTENT(in), DIMENSION(:,:) ::   ptsk   ! SKIN surface temperature   [Celsius] 
    755757      REAL(wp), INTENT(in), DIMENSION(:,:) ::   psen 
    756758      REAL(wp), INTENT(in), DIMENSION(:,:) ::   pevp 
     
    758760      INTEGER  ::   ji, jj               ! dummy loop indices 
    759761      REAL(wp) ::   zztmp,zz1,zz2,zz3    ! local variable 
    760       REAL(wp), DIMENSION(jpi,jpj) ::   zqlw              ! long wave and sensible heat fluxes 
     762      REAL(wp), DIMENSION(jpi,jpj) ::   ztskk             ! skin temp. in Kelvin  
     763      REAL(wp), DIMENSION(jpi,jpj) ::   zqlw              ! long wave and sensible heat fluxes       
    761764      REAL(wp), DIMENSION(jpi,jpj) ::   zqla              ! latent heat fluxes and evaporation 
    762765      !!--------------------------------------------------------------------- 
     
    765768 
    766769 
     770      ztskk(:,:) = ptsk(:,:) + rt0  ! => ptsk in Kelvin rather than Celsius 
     771       
    767772      ! ----------------------------------------------------------------------------- ! 
    768773      !     III    Net longwave radiative FLUX                                        ! 
     
    770775 
    771776      !! LB: now moved after Turbulent fluxes because must use the skin temperature rather that the SST 
    772       !! (ptsk is skin temperature if ln_skin_cs==.TRUE. .OR. ln_skin_wl==.TRUE.) 
    773       zqlw(:,:) = emiss_w * ( pqlw(:,:) - stefan*ptsk(:,:)*ptsk(:,:)*ptsk(:,:)*ptsk(:,:) ) * tmask(:,:,1)   ! Net radiative longwave flux 
     777      !! (ztskk is skin temperature if ln_skin_cs==.TRUE. .OR. ln_skin_wl==.TRUE.) 
     778      zqlw(:,:) = emiss_w * ( pqlw(:,:) - stefan*ztskk(:,:)*ztskk(:,:)*ztskk(:,:)*ztskk(:,:) ) * tmask(:,:,1)   ! Net radiative longwave flux 
    774779 
    775780      !  Latent flux over ocean 
     
    779784      DO jj = 1, jpj 
    780785         DO ji = 1, jpi 
    781             zqla(ji,jj) = - L_vap( ptsk(ji,jj) ) * pevp(ji,jj)    ! Latent Heat flux !!GS: possibility to add a global qla to avoid recomputation after abl update 
     786            zqla(ji,jj) = - L_vap( ztskk(ji,jj) ) * pevp(ji,jj)    ! Latent Heat flux !!GS: possibility to add a global qla to avoid recomputation after abl update 
    782787         ENDDO 
    783788      ENDDO 
     
    798803      qns(:,:) = zqlw(:,:) + psen(:,:) + zqla(:,:)                   &   ! Downward Non Solar 
    799804         &     - psnow(:,:) * rn_pfac * rLfus                        &   ! remove latent melting heat for solid precip 
    800          &     - pevp(:,:) * (ptsk(:,:) -rt0) * rcp                          &   ! remove evap heat content at SST !LB??? ptsk is Celsius !? 
     805         &     - pevp(:,:) * ptsk(:,:) * rcp                         &   ! remove evap heat content at SST 
    801806         &     + ( pprec(:,:) - psnow(:,:) ) * rn_pfac               &   ! add liquid precip heat content at Tair 
    802807         &     * ( ptair(:,:) - rt0 ) * rcp                          & 
Note: See TracChangeset for help on using the changeset viewer.