SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/mode_coare30_psi.F90
Go to the documentation of this file.
00001 MODULE MODE_COARE30_PSI
00002 !
00003 !
00004 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00005 USE PARKIND1  ,ONLY : JPRB
00006 !
00007  INTERFACE PSIFCTU
00008   MODULE PROCEDURE PSIFUNCTU
00009  END INTERFACE
00010  INTERFACE PSIFCTT
00011   MODULE PROCEDURE PSIFUNCTT
00012  END INTERFACE
00013 !
00014 CONTAINS
00015 !
00016 !---------------------------------------------------------------------------------------
00017 !
00018 !#######################################################################################
00019 FUNCTION PSIFUNCTU(PZL) RESULT(PSIFCTU)
00020 !#######################################################################################
00021 !
00022 !****  *PSIFUNCTU*
00023 !
00024 !       PURPOSE
00025 !       -------
00026 !       To evaluate the stability function psi for wind speed (if KID=1) or
00027 !       for temperature or humidity profiles (if KID.ne.1) from stability parameter
00028 !       z/L. 
00029 !
00030 !       EXTERNAL
00031 !       --------
00032 !
00033 !       IMPLICIT ARGUMENTS
00034 !       ------------------
00035 !
00036 !       REFERENCE
00037 !       ---------
00038 !       Lik79 : Liu, W. T., K. B. Katsaros, and J. A. Businger, 1979: 
00039 !       Bulk parameterization of air-sea exchanges of heat and water vapor including 
00040 !       the molecular constraints at the interface. J. Atm. Sci., 36, 1722--1735.
00041 !       DyH70 : Dyer, A. J., and B. B. Hicks, 1970: Flux-gradient relationship 
00042 !       in the constant flux layer. Quart. J. Roy. Meteor. Soc., 96, 715--721.
00043 !
00044 !       AUTHOR
00045 !       ------
00046 !
00047 !       MODIFICATIONS
00048 !       -------------
00049 !-------------------------------------------------------------------------------
00050 IMPLICIT NONE
00051 !
00052 !        0.  Declaration
00053 !
00054 !        0.1 declaration of arguments
00055 !
00056 REAL, DIMENSION(:), INTENT(IN)    :: PZL  !Obukhovs stability parameter
00057 REAL, DIMENSION(SIZE(PZL))        :: PSIFCTU !function psi value
00058 !        0.2 declaration of local variables
00059 REAL, DIMENSION(SIZE(PZL)) :: ZY,ZX,ZC,ZPSIC,ZPSIK,ZF
00060 INTEGER :: JJ
00061 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00062 !
00063 IF (LHOOK) CALL DR_HOOK('MODE_COARE30_PSI:PSIFUNCTU',0,ZHOOK_HANDLE)
00064 DO JJ=1,SIZE(PZL)
00065   IF(PZL(JJ)<0.) THEN
00066     ZX(JJ)   = (1.0 - 15. * PZL(JJ))**0.25         ! Kansas unstable
00067     ZPSIK(JJ)= 2.0 * LOG((1.0+ZX(JJ)       )/2.0) &
00068              +       LOG((1.0+ZX(JJ)*ZX(JJ))/2.0) &
00069              - 2.0 * atan(ZX(JJ)) &
00070              + 2.0 * atan(1.0)  
00071     !
00072     ZY(JJ)   = (1.0 - 10.15 * PZL(JJ))**0.3333     ! Convective
00073     ZPSIC(JJ)= 1.5 * LOG((ZY(JJ)*ZY(JJ)+ZY(JJ)+1.)/3.) &
00074              - (3.0**0.5) * atan((2.0*ZY(JJ)+1.0)/(3.0**0.5)) &
00075              + 4.0        * atan(1.0)/(3.0**0.5) 
00076     !
00077     ZF(JJ)   =PZL(JJ) * PZL(JJ) / (1.0+PZL(JJ)*PZL(JJ)) 
00078     !
00079     PSIFCTU(JJ)=(1.-ZF(JJ)) * ZPSIK(JJ) + ZF(JJ) * ZPSIC(JJ)
00080   ELSE
00081     ZC(JJ)=MIN(50.,0.35*PZL(JJ))           ! Stable
00082     PSIFCTU(JJ)=-((1.+1.*PZL(JJ))**1. + 0.6667*(PZL(JJ)-14.28)/EXP(ZC(JJ)) + 8.525)
00083   ENDIF
00084 ENDDO
00085 IF (LHOOK) CALL DR_HOOK('MODE_COARE30_PSI:PSIFUNCTU',1,ZHOOK_HANDLE)
00086 
00087 END FUNCTION PSIFUNCTU
00088 !---------------------------------------------------------------------------------------
00089 !
00090 !#######################################################################################
00091 FUNCTION PSIFUNCTT(PZL) RESULT(PSIFCTT)
00092 !#######################################################################################
00093 !
00094 !****  *PSIFUNCTU*
00095 !
00096 !       PURPOSE
00097 !       -------
00098 !       To evaluate the stability function psi for wind speed (if KID=1) or
00099 !       for temperature or humidity profiles (if KID.ne.1) from stability parameter
00100 !       z/L. 
00101 !
00102 !       EXTERNAL
00103 !       --------
00104 !
00105 !       IMPLICIT ARGUMENTS
00106 !       ------------------
00107 !
00108 !       REFERENCE
00109 !       ---------
00110 !       Lik79 : Liu, W. T., K. B. Katsaros, and J. A. Businger, 1979: 
00111 !       Bulk parameterization of air-sea exchanges of heat and water vapor including 
00112 !       the molecular constraints at the interface. J. Atm. Sci., 36, 1722--1735.
00113 !       DyH70 : Dyer, A. J., and B. B. Hicks, 1970: Flux-gradient relationship 
00114 !       in the constant flux layer. Quart. J. Roy. Meteor. Soc., 96, 715--721.
00115 !
00116 !       AUTHOR
00117 !       ------
00118 !
00119 !       MODIFICATIONS
00120 !       -------------
00121 !-------------------------------------------------------------------------------
00122 IMPLICIT NONE
00123 !
00124 !        0.  Declaration
00125 !
00126 !        0.1 declaration of arguments
00127 !
00128 REAL, DIMENSION(:), INTENT(IN)    :: PZL  !Obukhovs stability parameter
00129 REAL, DIMENSION(SIZE(PZL))        :: PSIFCTT !function psi value
00130 !        0.2 declaration of local variables
00131 REAL, DIMENSION(SIZE(PZL)) :: ZX,ZY,ZC,ZPSIC,ZPSIK,ZF
00132 INTEGER :: JJ
00133 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00134 !
00135 IF (LHOOK) CALL DR_HOOK('MODE_COARE30_PSI:PSIFUNCTT',0,ZHOOK_HANDLE)
00136 DO JJ=1,SIZE(PZL)
00137   IF(PZL(JJ)<0.) THEN
00138     ZX(JJ)   = (1. - 15. * PZL(JJ))**.5         ! Kansas unstable
00139     ZPSIK(JJ)= 2.0 * LOG((1.0+ZX(JJ)       )/2.0)
00140     !
00141     ZY(JJ)   = (1.0 - 34.15 * PZL(JJ))**0.3333  ! Convective
00142     ZPSIC(JJ)= 1.5 * LOG((ZY(JJ)*ZY(JJ)+ZY(JJ)+1.0)/3.) &
00143              - (3.0**0.5) * atan((2.0*ZY(JJ)+1.0)/(3.0**0.5)) &
00144              + 4.0        * atan(1.0)/(3.0**0.5)  
00145     !
00146     ZF(JJ)   = PZL(JJ) * PZL(JJ) / (1.0+PZL(JJ)*PZL(JJ)) 
00147     !
00148     PSIFCTT(JJ)= (1.-ZF(JJ)) * ZPSIK(JJ) + ZF(JJ) * ZPSIC(JJ)
00149   ELSE
00150     ZC(JJ)=MIN(50.,0.35*PZL(JJ))           ! Stable
00151     PSIFCTT(JJ)=-((1.+2.*PZL(JJ)/3.)**1.5 + 0.6667*(PZL(JJ)-14.28)/EXP(ZC(JJ)) + 8.525)
00152   ENDIF
00153 ENDDO
00154 IF (LHOOK) CALL DR_HOOK('MODE_COARE30_PSI:PSIFUNCTT',1,ZHOOK_HANDLE)
00155 
00156 END FUNCTION PSIFUNCTT
00157 !
00158 END MODULE MODE_COARE30_PSI