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

Changeset 606


Ignore:
Timestamp:
2007-02-20T17:48:56+01:00 (17 years ago)
Author:
opalod
Message:

nemo_v2_update_002 : CT : when using CORE forcing:

  • add a the possibility to use 2m air temperature and specific humidity with 10m wind speed via ln_2m logical
  • add possibility to use Katabatic winds enhancement via ln_kata logical
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/SBC/flx_core.h90

    r472 r606  
    2222   CHARACTER (LEN=32), DIMENSION (jpfile) ::  clvarname   
    2323   CHARACTER (LEN=50), DIMENSION (jpfile) ::  clname  
     24   CHARACTER (LEN=32)  :: clvarkatax , clvarkatay  ! variable name for katabatic masks 
     25   CHARACTER (LEN=256) :: clnamekata               ! filename for katabatic masks 
     26 
    2427   INTEGER   ::      isnap 
    2528   INTEGER, DIMENSION(jpfile) ::   & 
     
    2932      freqh                 ! Frequency for each forcing file (hours) 
    3033      !                     ! a negative value of -12 corresponds to monthly 
     34   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::  &    ! used for modif wind stress in the first sea points 
     35      &    rmskkatax, rmskkatay                  !: mask ocean to increase wind stress in first sea points 
    3136   REAL(wp), DIMENSION(jpi,jpj,jpfile,2) ::   & 
    3237      flxdta                !:  set of NCAR 6hourly/daily/monthly fluxes 
     38   LOGICAL  :: & 
     39        &   ln_2m   = .FALSE.,  & !: logical flag for height of air temp. and hum. 
     40        &   ln_kata = .FALSE.     !: logical flag for Katabatic winds enhancement. 
    3341   !!---------------------------------------------------------------------- 
    3442   !! History : 
     
    4048   !!        !         - Implement reading of 6-hourly fields    
    4149   !!        !  06-02  (S. Masson, G. Madec)  IOM read + NEMO "style" 
     50   !!        !  07-06  (P. Mathiot, J-M Molines) Katabatic winds enhancement 
     51   !!        !  12-06  (L. Brodeau) handle both 2m and 10m input fields 
    4252   !!---------------------------------------------------------------------- 
    4353   !!   OPA 9.0 , LOCEAN-IPSL (2006) 
     
    111121      INTEGER ::  ihour                ! current hour of the day at which we read the forcings 
    112122      INTEGER ::   & 
    113          imois, imois2, itime,      &  ! temporary integers 
    114          i15  , iman  ,             &  !    "          " 
     123         imois, imois2,             &  ! temporary integers 
     124         i15  , iman  , inum ,      &  !    "          " 
    115125         ifpr , jfpr  ,             &  ! frequency of index for print in prihre 
    116          jj   ,   ji                   !  Loop indices  
     126         jj   , ji                     !  Loop indices  
    117127      REAL(wp) ::   & 
    118128         zadatrjb,                  &  ! date (noninteger day) at which we read the forcings 
    119          zsecond,                   &  ! temporary scalars 
    120129         zxy    ,                   &  ! scalar for temporal interpolation 
    121130         zcof                          ! scalar  
    122       REAL(wp) ::   em , aa 
    123       REAL(wp) ::   zind1, zind2, zind3 
    124131      REAL(wp), DIMENSION(jpi,jpj, jpfile) ::   & 
    125132         flxnow             ! input flux values at current time step  
    126133      REAL(wp), DIMENSION(jpi,jpj) ::   & 
    127          sstk  ,   t04   
    128       REAL(wp), DIMENSION(jpi,jpj) ::   & 
    129          qtune    ,      &  ! artifical field for tuning q 
    130134         dqlw_ice ,      &  ! long wave heat flx sensitivity over ice 
    131135         dqsb_ice ,      &  ! sensible heat flx sensitivity over ice 
    132          alb_ice  ,      &  ! albedo of ice 
    133136         alb_oce_os,     &  ! albedo of the ocean under overcast sky 
    134137         alb_ice_os,     &  ! albedo of the ice under overcast sky 
    135138         alb_ice_cs,     &  ! albedo of ice under clear sky 
    136139         alb_oce_cs,     &  ! albedo of the ocean under clear sky 
    137          zsstlev,        &  ! SST from Levitus in K 
    138140         zsst,           &  ! nfbulk : mean SST 
    139141         zsss,           &  ! nfbulk : mean tn_ice(:,:,1) 
     
    146148         Ch,             &  ! coefficient for sensible heat flux 
    147149         Ce,             &  ! coefficient for latent heat flux 
    148          Cd                 ! coefficient for wind stress 
     150         Cd,             &  ! coefficient for wind stress 
     151         zt_zu,          &  !: air temperature at wind speed height 
     152         zq_zu              !: air spec. hum.  at wind speed height 
    149153      REAL(wp), PARAMETER ::   & 
    150154         rhoa  = 1.22,    &  ! air density 
     
    157161         catm1               !  
    158162 
    159       NAMELIST /namcore/  clname,  clvarname, freqh 
     163      NAMELIST /namcore/  clname, clvarname, freqh, ln_2m, ln_kata 
    160164      !!--------------------------------------------------------------------- 
    161165 
     
    200204            WRITE(numout,*)' flxmod/flx_core : global CORE fields in NetCDF format' 
    201205            WRITE(numout,*)' ~~~~~~~~~~~~~~~ ' 
     206            WRITE(numout,*) '      ln_2m        = ', ln_2m 
     207            WRITE(numout,*) '      ln_kata      = ', ln_kata 
    202208            WRITE(numout,*) '      list of files and frequency (hour), or monthly (-12) ' 
    203209            DO ji = 1, jpfile 
     
    450456         qsat(:,:)  = 11637800*exp(-5897.8/zsss(:,:))/rhoa 
    451457         ! 
    452          !--- NCAR Bulk formulae, computation of Cd, Ch, Ce at T-point (NCAR Bulk formulae) 
    453          CALL TURB_CORE( 10., zsst(:,:), flxnow(:,:,7), qsatw(:,:), flxnow(:,:,4),   & 
    454             &                              dUnormt(:,:), Cd(:,:), Ch(:,:), Ce(:,:) ) 
    455    
     458 
     459         ! CORE iterartive algo for computation of Cd, Ch, Ce at T-point : 
     460         ! =============================================================== 
     461         IF( ln_2m ) THEN 
     462            IF( kt == nit000 .AND. lwp )   THEN 
     463               WRITE(numout,*)  
     464               WRITE(numout,*)' flx_core : global CORE fields in NetCDF format' 
     465               WRITE(numout,*)' ~~~~~~~~~ ' 
     466               WRITE(numout,*) '           Calling TURB_CORE_2Z for bulk transfert coefficients' 
     467               WRITE(numout,*)  
     468            ENDIF 
     469            !! If air temp. and spec. hum. are given at different height (2m) than wind (10m) : 
     470            CALL TURB_CORE_2Z(2.,10.,zsst(:,:), flxnow(:,:,7), qsatw(:,:), flxnow(:,:,4), & 
     471               &              dUnormt(:,:), Cd(:,:), Ch(:,:), Ce(:,:), zt_zu(:,:), zq_zu(:,:)) 
     472         ELSE 
     473            IF( kt == nit000 .AND. lwp )    THEN 
     474               WRITE(numout,*)  
     475               WRITE(numout,*)' flx_core : global CORE fields in NetCDF format' 
     476               WRITE(numout,*)' ~~~~~~~~~~ ' 
     477               WRITE(numout,*) '           Calling TURB_CORE_1Z for bulk transfert coefficients' 
     478               WRITE(numout,*)  
     479            ENDIF 
     480            !! If air temp. and spec. hum. are given at same height than wind (10m) : 
     481            CALL TURB_CORE_1Z(10., zsst(:,:), flxnow(:,:,7), qsatw(:,:), flxnow(:,:,4),  & 
     482               &              dUnormt(:,:), Cd(:,:), Ch(:,:), Ce(:,:) ) 
     483         ENDIF 
     484 
    456485         !   II.1) Momentum over ocean and ice 
    457486         !   --------------------------------- 
     
    466495         CALL lbc_lnk( tauyt(:,:), 'T', -1. ) 
    467496         ! 
     497 
     498         ! Katabatic winds parametrization 
     499         ! ------------------------------- 
     500         IF( ln_kata ) THEN  
     501            ! 
     502            IF( kt == nit000 ) THEN 
     503               IF (lwp ) WRITE(numout,*) '           Katabatic winds parametrization is active' 
     504               clnamekata = 'katamask.nc' 
     505               clvarkatax = 'katamaskx' 
     506               clvarkatay = 'katamasky' 
     507 
     508#if defined key_agrif 
     509               IF ( .NOT. Agrif_Root() ) THEN 
     510                  clnamekata = TRIM(Agrif_CFixed())//'_'//TRIM(clnamekata) 
     511               ENDIF 
     512#endif   
     513               CALL iom_open( TRIM(clnamekata), inum ) 
     514               CALL iom_get ( inum, jpdom_data, TRIM(clvarkatax), rmskkatax ) 
     515               CALL iom_get ( inum, jpdom_data, TRIM(clvarkatay), rmskkatay ) 
     516               CALL iom_close ( inum ) 
     517 
     518               WHERE( (rmskkatax < 0.000001) .AND. (rmskkatax > -0.000001) ) 
     519                  rmskkatax=1 
     520                  rmskkatay=1 
     521               END WHERE 
     522 
     523               CALL lbc_lnk( rmskkatax(:,:), 'T', 1. )    ;    CALL lbc_lnk( rmskkatay(:,:), 'T', 1. ) 
     524 
     525               IF(MAXVAL(rmskkatax) > 6.00001)   THEN 
     526                  WRITE(ctmp1,*) 'Problem in the data mask : maxval = ',MAXVAL(rmskkatax),' ( it is GT 6)' 
     527                  CALL ctl_stop( ctmp1 ) 
     528               ENDIF 
     529            ENDIF 
     530 
     531            ! apply katabatic wind enhancement on grid T (before projection) 
     532            tauxt(:,:) = rmskkatax(:,:) * tauxt(:,:)  
     533            tauyt(:,:) = rmskkatay(:,:) * tauyt(:,:)  
     534            ! 
     535         ENDIF 
     536         ! 
    468537         !Tau_x at U-point 
    469538         DO ji = 1, jpim1 
     
    486555         !   --------------------------------- 
    487556         ! 
    488          ! Sensible Heat : 
    489          qsb_oce(:,:) = rhoa * cp * Ch(:,:) * ( zsst(:,:) - flxnow(:,:,7) ) * dUnormt(:,:) 
    490          ! 
    491          ! Latent Heat : 
    492          evap(:,:)    = rhoa * Ce(:,:) * ( qsatw(:,:) - flxnow(:,:,4) ) * dUnormt(:,:) 
    493          qla_oce(:,:) = Lv * evap(:,:) 
    494          ! 
     557         IF ( ln_2m ) THEN 
     558            !! 
     559            !! Values of temp. and hum. adjusted to 10m must be used instead of 2m values 
     560            !! Sensible Heat :    ! right sign for ocean 
     561            qsb_oce(:,:) = rhoa*cp*Ch(:,:)*(zt_zu(:,:) - zsst(:,:))*dUnormt(:,:) 
     562            !! 
     563            !! Latent Heat :      ! wrong sign for ocean 
     564            evap(:,:)    = rhoa*Ce(:,:)*(qsatw(:,:) - zq_zu(:,:))*dUnormt(:,:) 
     565            !! 
     566         ELSE 
     567            !! 
     568            !! Sensible Heat :    ! right sign for ocean 
     569            qsb_oce(:,:) = rhoa*cp*Ch(:,:)*(flxnow(:,:,7) - zsst(:,:))*dUnormt(:,:) 
     570            !! 
     571            !! Latent Heat :      ! wrong sign for ocean 
     572            evap(:,:)    = rhoa*Ce(:,:)*(qsatw(:,:) - flxnow(:,:,4))*dUnormt(:,:) 
     573            !! 
     574         END IF 
     575         !! 
     576         qla_oce(:,:) =  Lv * evap(:,:) ! right sign for ocean 
     577          
    495578         !  
    496579         !   II.3) Turbulent fluxes over ice 
     
    620703   
    621704   
    622    SUBROUTINE TURB_CORE( zzu, T_0, T_a, q_sat, q_a,   & 
    623       &                       dU , C_d, C_h  , C_e  ) 
     705   SUBROUTINE TURB_CORE_1Z( zzu, T_0, T_a, q_sat, q_a,   & 
     706      &                     dU , C_d, C_h  , C_e  ) 
    624707      !!---------------------------------------------------------------------- 
    625708      !!                      ***  ROUTINE  turb_core  *** 
    626709      !! 
    627710      !! ** Purpose :   Computes turbulent transfert coefficients of surface  
    628       !!      fluxes according to Large & Yeager (2004) 
     711      !!                fluxes according to Large & Yeager (2004). 
    629712      !! 
    630713      !! ** Method  :   I N E R T I A L   D I S S I P A T I O N   M E T H O D 
     
    679762         xlogt 
    680763  
    681       INTEGER                    :: jkk,ji,jj,ii,ij,ilocu(2),  jk          ! doomy loop for iterations 
    682       INTEGER, PARAMETER         :: nit = 3       ! number of iterations 
    683       REAL(wp), DIMENSION(jpi,jpj) :: dbg1,dbg2,dbg3,dbg4 
    684       REAL :: zXmax 
     764      INTEGER            :: jk          ! doomy loop for iterations 
     765      INTEGER, PARAMETER :: nit = 3     ! number of iterations 
    685766 
    686767      INTEGER, DIMENSION(jpi,jpj)  ::   & 
    687          &                  stab,        &      ! stability test integer 
    688          &                  stabit               ! stability within iterative loop 
    689  
    690       REAL(wp), PARAMETER ::                        & 
    691          &                     pi     = 3.14159,      & ! Pi 
    692          &                     grav   = 9.8,          & ! gravity 
    693          &                     kappa  = 0.4              ! von Karman's constant 
     768         stab,                 & ! stability test integer 
     769         stabit                  ! stability within iterative loop 
     770 
     771      REAL(wp), PARAMETER ::   & 
     772         pi    = 3.14159,      & ! Pi 
     773         grav  = 9.8,          & ! gravity 
     774         kappa = 0.4             ! von Karman's constant 
    694775      !!---------------------------------------------------------------------- 
    695776      !! 
     
    807888    C_e = Ce 
    808889    !! 
    809   END SUBROUTINE TURB_CORE 
     890  END SUBROUTINE TURB_CORE_1Z 
    810891   
    811892     
     893  SUBROUTINE TURB_CORE_2Z(zt, zu, sst, T_zt, q_sat, q_zt, dU, Cd, Ch, Ce, T_zu, q_zu) 
     894      !!---------------------------------------------------------------------- 
     895      !!                      ***  ROUTINE  turb_core  *** 
     896      !! 
     897      !! ** Purpose :   Computes turbulent transfert coefficients of surface  
     898      !!                fluxes according to Large & Yeager (2004). 
     899      !! 
     900      !! ** Method  :   I N E R T I A L   D I S S I P A T I O N   M E T H O D 
     901      !!      Momentum, Latent and sensible heat exchange coefficients 
     902      !!      Caution: this procedure should only be used in cases when air 
     903      !!      temperature (T_air) and air specific humidity (q_air) are at 2m 
     904      !!      whereas wind (dU) is at 10m. 
     905      !! 
     906      !! References : 
     907      !!      Large & Yeager, 2004 : ??? 
     908      !! History : 
     909      !!        !  XX-XX  (???     )  Original code 
     910      !!   9.0  !  05-08  (L. Brodeau)  Optimisation 
     911      !!---------------------------------------------------------------------- 
     912      !! * Arguments 
     913      REAL(wp), INTENT( in  ) ::   & 
     914         zt,            & ! height for T_zt and q_zt        [m] 
     915         zu               ! height for dU                   [m] 
     916      !! 
     917      REAL(wp), INTENT(in), DIMENSION(jpi,jpj) ::  & 
     918         sst,           & ! sea surface temperature         [Kelvin] 
     919         T_zt,          & ! potential air temperature       [Kelvin] 
     920         q_sat,         & ! sea surface specific humidity   [kg/kg] 
     921         q_zt,          & ! specific air humidity           [kg/kg] 
     922         dU               ! wind module |U(zu)-U(0)|        [m/s] 
     923      !! 
     924      REAL(wp), INTENT(out), DIMENSION(jpi,jpj)  ::  & 
     925         Cd, Ch, Ce,    &  
     926         T_zu,          & ! air temp. shifted at zu          [K] 
     927         q_zu             ! spec. hum.  shifted at zu    [kg/kg] 
     928 
     929      !! * Local declarations 
     930      REAL(wp), DIMENSION(jpi,jpj)  ::   & 
     931         dU10,          & ! dU                                [m/s] 
     932         dT,            & ! air/sea temperature differeence   [K] 
     933         dq,            & ! air/sea humidity difference       [K] 
     934         Cd_n10,        & ! 10m neutral drag coefficient 
     935         Ce_n10,        & ! 10m neutral latent coefficient 
     936         Ch_n10,        & ! 10m neutral sensible coefficient 
     937         sqrt_Cd_n10,   & ! root square of Cd_n10 
     938         sqrt_Cd,       & ! root square of Cd 
     939         T_vpot_u,      & ! virtual potential temperature        [K] 
     940         T_star,        & ! turbulent scale of tem. fluct. 
     941         q_star,        & ! turbulent humidity of temp. fluct. 
     942         U_star,        & ! turb. scale of velocity fluct. 
     943         L,             & ! Monin-Obukov length                  [m] 
     944         zeta_u,        & ! stability parameter at height zu 
     945         zeta_t,        & ! stability parameter at height zt 
     946         U_n10,         & ! neutral wind velocity at 10m        [m] 
     947         xlogt, xct 
     948      !! 
     949      INTEGER, PARAMETER :: nb_itt = 3   ! number of itterations 
     950      !! 
     951      !! Some physical constants :                                        
     952      REAL(wp), PARAMETER ::                        & 
     953         grav   = 9.8,  & ! gravity                        
     954         kappa  = 0.4     ! von Karman's constant 
     955      !! 
     956      INTEGER :: j_itt 
     957      INTEGER, DIMENSION(jpi,jpj) :: & 
     958         stab             ! 1st stability test integer 
     959      !!---------------------------------------------------------------------- 
     960      !! 
     961      !!                  ------------- 
     962      !!                    S T A R T 
     963      !!                  ------------- 
     964      !!  
     965      !! I.1 ) Preliminary stuffs 
     966      !! ------------------------ 
     967      !! 
     968      !! Initial air/sea differences 
     969      dU10 = max(0.5, dU) ;  dT = T_zt - sst ;  dq = q_zt - q_sat 
     970      !!     
     971      !! Neutral Drag Coefficient : 
     972      stab = 0.5 + sign(0.5,dT)    ! stab = 1  if dT > 0  -> STABLE 
     973      Cd_n10  = 1E-3*( 2.7/dU10 + 0.142 + dU10/13.09 )  
     974      sqrt_Cd_n10 = sqrt(Cd_n10) 
     975      Ce_n10  = 1E-3*( 34.6 * sqrt_Cd_n10 ) 
     976      Ch_n10  = 1E-3*sqrt_Cd_n10*(18*stab + 32.7*(1 - stab)) 
     977      !! 
     978      !! I.2 ) Computing Neutral Drag Coefficient 
     979      !! ---------------------------------------- 
     980      !! Initializing transf. coeff. with their first guess neutral equivalents : 
     981      Cd = Cd_n10 ;  Ce = Ce_n10 ;  Ch = Ch_n10 ;  sqrt_Cd = sqrt(Cd) 
     982      !! 
     983      !! Initializing z_u values with z_t values : 
     984      T_zu = T_zt ;  q_zu = q_zt 
     985      !! 
     986      !! II ) Now starting iteration loop (IDM) 
     987      !! ---------------------------------------- 
     988      !! 
     989      DO j_itt=1, nb_itt 
     990         !! 
     991         !! Updating air/sea differences : 
     992         dT = T_zu - sst ;  dq = q_zu - q_sat 
     993         !! 
     994         !! Updating virtual potential temperature at zu : 
     995         T_vpot_u = T_zu*(1. + 0.608*q_zu) 
     996         !! 
     997         !! Updating turbulent scales :   (L & Y eq. (7)) 
     998         U_star = sqrt_Cd*dU10 ;  T_star  = Ch/sqrt_Cd*dT ;  q_star  = Ce/sqrt_Cd*dq 
     999         !! 
     1000         !! Estimate the Monin-Obukov length at height zu : 
     1001         L = (U_star*U_star) & 
     1002              & / (kappa*grav/T_vpot_u*(T_star*(1.+0.608*q_zu) + 0.608*T_zu*q_star)) 
     1003         !! 
     1004         !! Stability parameters : 
     1005         zeta_u  = zu/L  ;  zeta_u = sign( min(abs(zeta_u),10.0), zeta_u ) 
     1006         zeta_t  = zt/L  ;  zeta_t = sign( min(abs(zeta_t),10.0), zeta_t ) 
     1007         !! 
     1008         !! Shifting the wind speed to 10m and neutral stability : (L & Y eq.(9a)) 
     1009         U_n10 = dU10/(1. + sqrt_Cd_n10/kappa*(log(zu/10.) - psi_m(zeta_u))) 
     1010         !! 
     1011         !! Shifting temperature and humidity at zu :          (L & Y eq. (9b-9c)) 
     1012         T_zu = T_zt - T_star/kappa*(log(zt/zu) + psi_h(zeta_u) - psi_h(zeta_t)) 
     1013         q_zu = q_zt - q_star/kappa*(log(zt/zu) + psi_h(zeta_u) - psi_h(zeta_t)) 
     1014         !! 
     1015         !! q_zu cannot have a negative value : forcing 0 
     1016         stab = 0.5 + sign(0.5,q_zu) ;  q_zu = stab*q_zu 
     1017         !! 
     1018         !! Updating the neutral 10m transfer coefficients : 
     1019         Cd_n10  = 1E-3 * (2.7/U_n10 + 0.142 + U_n10/13.09)    ! L & Y eq. (6a) 
     1020         sqrt_Cd_n10 = sqrt(Cd_n10) 
     1021         Ce_n10  = 1E-3 * (34.6 * sqrt_Cd_n10)                 ! L & Y eq. (6b) 
     1022         stab    = 0.5 + sign(0.5,zeta_u) 
     1023         Ch_n10  = 1E-3*sqrt_Cd_n10*(18.*stab + 32.7*(1-stab)) ! L & Y eq. (6c-6d) 
     1024         !! 
     1025         !! 
     1026         !! Shifting the neutral 10m transfer coefficients to (zu,zeta_u) : 
     1027         xct = 1. + sqrt_Cd_n10/kappa*(log(zu/10.) - psi_m(zeta_u)) 
     1028         Cd = Cd_n10/(xct*xct) ; sqrt_Cd = sqrt(Cd) 
     1029         !! 
     1030         xlogt = log(zu/10.) - psi_h(zeta_u) 
     1031         !! 
     1032         xct = 1. + Ch_n10*xlogt/kappa/sqrt_Cd_n10 
     1033         Ch  = Ch_n10*sqrt_Cd/sqrt_Cd_n10/xct 
     1034         !! 
     1035         xct = 1. + Ce_n10*xlogt/kappa/sqrt_Cd_n10 
     1036         Ce  = Ce_n10*sqrt_Cd/sqrt_Cd_n10/xct 
     1037         !! 
     1038         !! 
     1039      END DO 
     1040      !! 
     1041  END SUBROUTINE TURB_CORE_2Z 
     1042 
     1043  FUNCTION psi_m(zta)   !! Psis, L & Y eq. (8c), (8d), (8e) 
     1044    REAL(wp), PARAMETER :: pi = 3.14159 
     1045    REAL(wp), DIMENSION(jpi,jpj)             :: psi_m 
     1046    REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: zta 
     1047    REAL(wp), DIMENSION(jpi,jpj)             :: X2, X, stabit 
     1048    X2 = sqrt(abs(1. - 16.*zta))  ;  X2 = max(X2 , 1.0) ;  X  = sqrt(X2) 
     1049    stabit    = 0.5 + sign(0.5,zta) 
     1050    psi_m = -5.*zta*stabit  &                                                  ! Stable 
     1051         & + (1. - stabit)*(2*log((1. + X)/2) + log((1. + X2)/2) - 2*atan(X) + pi/2)  ! Unstable  
     1052  END FUNCTION psi_m 
     1053 
     1054  FUNCTION psi_h(zta)    !! Psis, L & Y eq. (8c), (8d), (8e) 
     1055    REAL(wp), DIMENSION(jpi,jpj)             :: psi_h 
     1056    REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: zta 
     1057    REAL(wp), DIMENSION(jpi,jpj)             :: X2, X, stabit 
     1058    X2 = sqrt(abs(1. - 16.*zta))  ;  X2 = max(X2 , 1.) ;  X  = sqrt(X2) 
     1059    stabit    = 0.5 + sign(0.5,zta) 
     1060    psi_h = -5.*zta*stabit  &                                       ! Stable 
     1061         & + (1. - stabit)*(2.*log( (1. + X2)/2. ))                 ! Unstable 
     1062  END FUNCTION psi_h 
     1063 
     1064 
    8121065  SUBROUTINE flx_blk_albedo( palb , palcn , palbp , palcnp ) 
    8131066    !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.