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 12021 – NEMO

Changeset 12021


Ignore:
Timestamp:
2019-12-02T10:02:07+01:00 (4 years ago)
Author:
gsamson
Message:

dev_ASINTER-01-05_merged: update sbcblk, bugfix with latent heat sign and update orca2_ice_abl namelist_cfg (tickets #2159 and #2131)

Location:
NEMO/branches/2019/dev_ASINTER-01-05_merged
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_ASINTER-01-05_merged/cfgs/ORCA2_ICE_ABL/EXPREF/namelist_cfg

    r11945 r12021  
    8989   ln_traqsr   = .true.    !  Light penetration in the ocean            (T => fill namtra_qsr) 
    9090   ln_ssr      = .true.    !  Sea Surface Restoring on T and/or S       (T => fill namsbc_ssr) 
     91   ln_dm2dc    = .true.    !  daily mean to diurnal cycle on short wave 
    9192   ln_rnf      = .true.    !  runoffs                                   (T => fill namsbc_rnf) 
    9293   nn_fwb      = 2         !  FreshWater Budget:  
     
    107108!----------------------------------------------------------------------- 
    108109   !                    !  bulk algorithm : 
    109    ln_NCAR    = .true.     ! "NCAR"      algorithm   (Large and Yeager 2008) 
    110  
     110   ln_NCAR      = .true.    ! "NCAR"      algorithm   (Large and Yeager 2008) 
     111   ln_COARE_3p0 = .false.   ! "COARE 3.0" algorithm   (Fairall et al. 2003) 
     112   ln_COARE_3p6 = .false.   ! "COARE 3.6" algorithm   (Edson et al. 2013) 
     113   ln_ECMWF     = .false.   ! "ECMWF"     algorithm   (IFS cycle 31) 
     114      rn_zqt      = 10.     !  Air temperature & humidity reference height (m) 
     115      rn_zu       = 10.     !  Wind vector reference height (m) 
     116      ! 
     117      ! Skin is ONLY available in ECMWF and COARE algorithms: 
     118      ln_skin_cs = .false.  !  use the cool-skin parameterization => set nn_fsbc=1 and ln_dm2dc=.true.! 
     119      ln_skin_wl = .false.  !  use the warm-layer        "        => set nn_fsbc=1 and ln_dm2dc=.true.! 
     120      ! 
     121      ln_humi_sph = .true.  !  humidity specified below in "sn_humi" is specific humidity     [kg/kg] if .true. 
     122      ln_humi_dpt = .false. !  humidity specified below in "sn_humi" is dew-point temperature   [K]   if .true. 
     123      ln_humi_rlh = .false. !  humidity specified below in "sn_humi" is relative humidity       [%]   if .true. 
     124   ! 
    111125   cn_dir = './'  !  root directory for the bulk data location 
    112126   !___________!_________________________!___________________!___________!_____________!________!___________!______________________________________!__________!_______________! 
     
    404418!!   namdiu       Cool skin and warm layer models                       (default: OFF) 
    405419!!   namdiu       Cool skin and warm layer models                       (default: OFF) 
    406 !!   namflo       float parameters                                      ("key_float") 
    407 !!   nam_diaharm  Harmonic analysis of tidal constituents               ("key_diaharm") 
    408 !!   namdct       transports through some sections                      ("key_diadct") 
     420!!   namflo       float parameters                                      (default: OFF) 
     421!!   nam_diaharm  Harmonic analysis of tidal constituents               (default: OFF) 
     422!!   nam_diadct   transports through some sections                      (default: OFF) 
    409423!!   nam_diatmb   Top Middle Bottom Output                              (default: OFF) 
    410424!!   nam_dia25h   25h Mean Output                                       (default: OFF) 
  • NEMO/branches/2019/dev_ASINTER-01-05_merged/src/ABL/sbcabl.F90

    r12015 r12021  
    2222   USE sbc_oce        ! Surface boundary condition: ocean fields 
    2323   USE sbcblk         ! Surface boundary condition: bulk formulae 
     24   USE sbcblk_phy     ! Surface boundary condition: bulk formulae 
    2425   USE dom_oce, ONLY  : tmask 
    2526   ! 
     
    294295         tke_abl(:,:,:,nt_a     ) = 0._wp 
    295296      ENDIF 
     297 
     298      rhoa(:,:) = rho_air( tq_abl(:,:,2,nt_n,jp_ta), tq_abl(:,:,2,nt_n,jp_qa), sf(jp_slp)%fnow(:,:,1) ) !!GS: rhoa must be (re)computed here here to avoid division by zero in blk_ice_1 (TBI) 
    296299      
    297300   END SUBROUTINE sbc_abl_init 
  • NEMO/branches/2019/dev_ASINTER-01-05_merged/src/OCE/SBC/sbcblk.F90

    r12015 r12021  
    140140      !!             ***  ROUTINE sbc_blk_alloc *** 
    141141      !!------------------------------------------------------------------- 
    142       ALLOCATE( t_zu(jpi,jpj), q_zu(jpi,jpj),                                            & 
     142      ALLOCATE( t_zu(jpi,jpj)   , q_zu(jpi,jpj)   , tsk(jpi,jpj)    ,                    & 
    143143         &      Cdn_oce(jpi,jpj), Chn_oce(jpi,jpj), Cen_oce(jpi,jpj),                    & 
    144144         &      Cd_ice (jpi,jpj), Ch_ice (jpi,jpj), Ce_ice (jpi,jpj), STAT=sbc_blk_alloc ) 
     
    206206 
    207207      !                             !** initialization of the cool-skin / warm-layer parametrization 
    208       IF( ln_NCAR .AND. (ln_skin_cs .OR. ln_skin_wl) ) & 
    209          & CALL ctl_stop( 'sbc_blk_init: Cool-skin/warm-layer param. not compatible with NCAR algorithm!' ) 
    210       ! 
     208      IF( ln_skin_cs .OR. ln_skin_wl ) THEN 
     209         !! Some namelist sanity tests: 
     210         IF( ln_NCAR )      & 
     211            & CALL ctl_stop( 'sbc_blk_init: Cool-skin/warm-layer param. not compatible with NCAR algorithm' )          
     212         IF( nn_fsbc /= 1 ) & 
     213            & CALL ctl_stop( 'sbc_blk_init: Please set "nn_fsbc" to 1 when using cool-skin/warm-layer param.')                   
     214      END IF 
     215       
    211216      ioptio = 0 
    212217      IF( ln_humi_sph ) THEN 
     
    351356      !!              (momentum, heat, freshwater and runoff) 
    352357      !! 
    353       !! ** Method  : (1) READ each fluxes in NetCDF files: 
    354       !!      the 10m wind velocity (i-component) (m/s)    at T-point 
    355       !!      the 10m wind velocity (j-component) (m/s)    at T-point 
    356       !!      the 10m or 2m specific humidity     (kg/kg) 
    357       !!      the solar heat                      (W/m2) 
    358       !!      the Long wave                       (W/m2) 
    359       !!      the 10m or 2m air temperature       (Kelvin) 
    360       !!      the total precipitation (rain+snow) (Kg/m2/s) 
    361       !!      the snow (solid precipitation)      (kg/m2/s) 
     358      !! ** Method  :  
     359      !!              (1) READ each fluxes in NetCDF files: 
     360      !!      the wind velocity (i-component) at z=rn_zu  (m/s) at T-point 
     361      !!      the wind velocity (j-component) at z=rn_zu  (m/s) at T-point 
     362      !!      the specific humidity           at z=rn_zqt (kg/kg) 
     363      !!      the solar heat                  at z=rn_zqt (W/m2) 
     364      !!      the Long wave                               (W/m2) 
     365      !!      the air temperature                         (Kelvin) 
     366      !!      the total precipitation (rain+snow)         (Kg/m2/s) 
     367      !!      the snow (solid precipitation)              (kg/m2/s) 
    362368      !!      ABL dynamical forcing (i/j-components of either hpg or geostrophic winds)  
    363369      !!              (2) CALL blk_oce_1 and blk_oce_2 
     
    556562 
    557563 
    558       IF( ln_skin_cs .OR. ln_skin_wl ) THEN 
    559  
    560          SELECT CASE( nblk )        !==  transfer coefficients  ==!   Cd, Ch, Ce at T-point 
     564      !! Time to call the user-selected bulk parameterization for 
     565      !!  ==  transfer coefficients  ==!   Cd, Ch, Ce at T-point, and more... 
     566      SELECT CASE( nblk )         
     567 
     568         CASE( np_NCAR      ) 
     569            CALL turb_ncar    ( rn_zqt, rn_zu, zst, ztpot, pssq, zqair, wndm,                              & 
     570               &                zcd_oce, zch_oce, zce_oce, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 
    561571 
    562572         CASE( np_COARE_3p0 ) 
     
    576586 
    577587         CASE DEFAULT 
    578             CALL ctl_stop( 'STOP', 'sbc_oce: unsuported bulk formula selection for "ln_skin_*==.true."' ) 
    579          END SELECT 
    580  
     588         CALL ctl_stop( 'STOP', 'sbc_oce: non-existing bulk formula selected' ) 
     589 
     590      END SELECT 
     591 
     592      IF( ln_skin_cs .OR. ln_skin_wl ) THEN 
    581593         !! In the presence of sea-ice we forget about the cool-skin/warm-layer update of zst and pssq: 
    582594         WHERE ( fr_i < 0.001_wp ) 
     
    589601            pssq(:,:) = zztmp2(:,:) !LB:  "   "   " 
    590602         END WHERE 
    591  
    592          !LB: Update of tsk, the "official" array for skin temperature 
    593          tsk(:,:) = zst(:,:) 
    594  
    595       ELSE !IF( ln_skin_cs .OR. ln_skin_wl ) 
    596  
    597          SELECT CASE( nblk )        !==  transfer coefficients  ==!   Cd, Ch, Ce at T-point 
    598             ! 
    599          CASE( np_NCAR      ) 
    600             CALL turb_ncar    ( rn_zqt, rn_zu, zst, ztpot, pssq, zqair, wndm,                                & 
    601                &                zcd_oce, zch_oce, zce_oce, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 
    602  
    603          CASE( np_COARE_3p0 ) 
    604             CALL turb_coare3p0 ( kt, rn_zqt, rn_zu, zst, ztpot, pssq, zqair, wndm, ln_skin_cs, ln_skin_wl,   & 
    605                &                 zcd_oce, zch_oce, zce_oce, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 
    606  
    607          CASE( np_COARE_3p6 ) 
    608             CALL turb_coare3p6 ( kt, rn_zqt, rn_zu, zst, ztpot, pssq, zqair, wndm, ln_skin_cs, ln_skin_wl,   & 
    609                &                 zcd_oce, zch_oce, zce_oce, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 
    610  
    611          CASE( np_ECMWF     ) 
    612             CALL turb_ecmwf   ( kt, rn_zqt, rn_zu, zst, ztpot, pssq, zqair, wndm, ln_skin_cs, ln_skin_wl,    & 
    613                &                zcd_oce, zch_oce, zce_oce, t_zu, q_zu, zU_zu, cdn_oce, chn_oce, cen_oce ) 
    614  
    615          CASE DEFAULT 
    616             CALL ctl_stop( 'STOP', 'sbc_oce: non-existing bulk formula selected' ) 
    617          END SELECT 
    618  
    619       ENDIF ! IF( ln_skin_cs .OR. ln_skin_wl ) 
     603         tsk(:,:) = zst(:,:) !#LB: Update of tsk, the "official" array for skin temperature 
     604      END IF 
    620605 
    621606      !!      CALL iom_put( "Cd_oce", zcd_oce)  ! output value of pure ocean-atm. transfer coef. 
     
    632617      ! ------------------------------------------------------------- 
    633618       
    634       IF (ln_abl) THEN 
    635  
    636          CALL BULK_FORMULA( rn_zu, zst(:,:), pssq(:,:), t_zu(:,:), q_zu(:,:), & 
    637             &               zcd_oce(:,:), zch_oce(:,:), zce_oce(:,:),         & 
    638             &               wndm(:,:), zU_zu(:,:), pslp(:,:),                 & 
    639             &               pcd_du(:,:), psen(:,:), pevp(:,:),                & 
    640             &               prhoa=rhoa(:,:) ) 
    641  
    642       ELSE 
    643  
     619      IF( ln_abl ) THEN         !==  ABL formulation  ==!   multiplication by rho_air and turbulent fluxes computation done in ablstp 
     620!! FL do we need this multiplication by tmask ... ??? 
     621         DO jj = 1, jpj 
     622            DO ji = 1, jpi 
     623               zztmp = zU_zu(ji,jj) !* tmask(ji,jj,1) 
     624               wndm(ji,jj)   = zztmp                   ! Store zU_zu in wndm to compute ustar2 in ablmod  
     625               pcd_du(ji,jj) = zztmp * zcd_oce(ji,jj) 
     626               psen(ji,jj)   = zztmp * zch_oce(ji,jj) 
     627               pevp(ji,jj)   = zztmp * zce_oce(ji,jj)        
     628            END DO 
     629         END DO 
     630      ELSE                      !==  BLK formulation  ==!   turbulent fluxes computation 
    644631         CALL BULK_FORMULA( rn_zu, zst(:,:), pssq(:,:), t_zu(:,:), q_zu(:,:), & 
    645632            &               zcd_oce(:,:), zch_oce(:,:), zce_oce(:,:),         & 
     
    673660         END DO 
    674661         CALL lbc_lnk_multi( 'sbcblk', utau, 'U', -1., vtau, 'V', -1. ) 
     662 
    675663         IF(ln_ctl) THEN 
    676664            CALL prt_ctl( tab2d_1=wndm  , clinfo1=' blk_oce_1: wndm   : ') 
     
    738726      ! ----------------------------- 
    739727 
    740       zqla(:,:) = L_vap( zst(:,:) ) * pevp(:,:)     ! Latent Heat flux !!GS: possibility to add a global qla to avoid recomputation after abl update 
     728      zqla(:,:) = L_vap( zst(:,:) ) * pevp(:,:) * -1._wp    ! Latent Heat flux !!GS: possibility to add a global qla to avoid recomputation after abl update 
    741729 
    742730      IF(ln_ctl) THEN 
     
    866854 
    867855      ! local scalars ( place there for vector optimisation purposes) 
    868       IF (ln_abl) rhoa  (:,:)  = rho_air( ptair(:,:), phumi(:,:), pslp(:,:) ) !!GS: rhoa must be (re)computed here with ABL to avoid division by zero after (TBI) 
     856      !IF (ln_abl) rhoa  (:,:)  = rho_air( ptair(:,:), phumi(:,:), pslp(:,:) ) !!GS: rhoa must be (re)computed here with ABL to avoid division by zero after (TBI) 
    869857      zcd_dui(:,:) = wndm_ice(:,:) * Cd_ice(:,:) 
    870858       
  • NEMO/branches/2019/dev_ASINTER-01-05_merged/src/OCE/SBC/sbcblk_phy.F90

    r12015 r12021  
    2020 
    2121   USE dom_oce        ! ocean space and time domain 
    22    USE sbc_oce, ONLY  : ln_abl !!GS 
    2322   USE phycst         ! physical constants 
    2423 
     
    575574      INTEGER  :: ji, jj, jq     ! dummy loop indices 
    576575      !!---------------------------------------------------------------------------------- 
    577  
    578       !==  ABL formulation  ==!   multiplication by rho_air and turbulent fluxes computation done in ablstp 
    579       IF (ln_abl) THEN 
    580          DO jj = 1, jpj 
    581             DO ji = 1, jpi 
    582     
    583                zUrho = pUb(ji,jj) 
    584     
    585                pTau(ji,jj)  = zUrho * pCd(ji,jj)   !!GS: store cd_du in wind stress 
    586     
    587                zevap        = zUrho * pCe(ji,jj) 
    588                pQsen(ji,jj) = zUrho * pCh(ji,jj) 
    589                pQlat(ji,jj) = zevap                !!GS: store evap in latent 
    590     
    591             END DO 
    592          END DO 
    593       ELSE 
    594576         DO jj = 1, jpj 
    595577            DO ji = 1, jpi 
     
    617599            END DO 
    618600         END DO 
    619       END IF 
    620  
    621601   END SUBROUTINE BULK_FORMULA_VCTR 
    622602 
     
    650630      !!---------------------------------------------------------------------------------- 
    651631 
    652       !==  ABL formulation  ==!   multiplication by rho_air and turbulent fluxes computation done in ablstp 
    653       IF (ln_abl) THEN 
    654     
    655          zUrho = pUb 
    656     
    657          pTau  = zUrho * pCd 
    658     
    659          zevap = zUrho * pCe 
    660          pQsen = zUrho * pCh 
    661          pQlat = zevap 
    662  
    663       ELSE 
    664632         !! Need ztaa, absolute temperature at pzu (formula to estimate rho_air needs absolute temperature, not the potential temperature "pTa") 
    665633         ztaa = pTa ! first guess... 
     
    681649         IF( PRESENT(pEvap) ) pEvap = - zevap 
    682650         IF( PRESENT(prhoa) ) prhoa = zrho 
    683      END IF 
    684651 
    685652   END SUBROUTINE BULK_FORMULA_SCLR 
Note: See TracChangeset for help on using the changeset viewer.