SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/surface_aero_cond.F90
Go to the documentation of this file.
00001 !   ######################################################################
00002     SUBROUTINE SURFACE_AERO_COND(PRI, PZREF, PUREF, PVMOD, PZ0,&
00003                                      PZ0H, PAC, PRA, PCH           ) 
00004 !   ######################################################################
00005 !
00006 !!****  *SURFACE_AERO_COND*  
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !
00011 !     Computes the drag coefficients for heat and momentum near the ground
00012 !         
00013 !     
00014 !!**  METHOD
00015 !!    ------
00016 !
00017 !
00018 !
00019 !    1 and 2 : computation of relative humidity near the ground
00020 !
00021 !    3 : richardson number
00022 !
00023 !    4 : the aerodynamical resistance for heat transfers is deduced
00024 !
00025 !    5 : the drag coefficient for momentum ZCD is computed
00026 !
00027 !
00028 !!    EXTERNAL
00029 !!    --------
00030 !!
00031 !!
00032 !!    IMPLICIT ARGUMENTS
00033 !!    ------------------
00034 !!
00035 !!    MODD_CST
00036 !!
00037 !!      
00038 !!    REFERENCE
00039 !!    ---------
00040 !!
00041 !!      
00042 !!    AUTHOR
00043 !!    ------
00044 !!
00045 !!      V. Masson           * Meteo-France *
00046 !!
00047 !!    MODIFICATIONS
00048 !!    -------------
00049 !!      Original    20/01/98 
00050 !!                  02/04/01 (P Jabouille) limitation of Z0 with 0.5 PUREF
00051 !-------------------------------------------------------------------------------
00052 !
00053 !*       0.     DECLARATIONS
00054 !               ------------
00055 !
00056 USE MODD_CSTS,ONLY : XKARMAN
00057 USE MODI_WIND_THRESHOLD
00058 !
00059 USE MODE_THERMOS
00060 !
00061 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00062 USE PARKIND1  ,ONLY : JPRB
00063 !
00064 IMPLICIT NONE
00065 !
00066 !*      0.1    declarations of arguments
00067 !
00068 !
00069 REAL, DIMENSION(:), INTENT(IN)    :: PRI      ! Richardson number
00070 REAL, DIMENSION(:), INTENT(IN)    :: PVMOD    ! module of the horizontal wind
00071 REAL, DIMENSION(:), INTENT(IN)    :: PZREF    ! reference height of the first
00072                                               ! atmospheric level
00073 REAL, DIMENSION(:), INTENT(IN)    :: PUREF    ! reference height of the wind
00074                                               ! NOTE this is different from ZZREF
00075                                               ! ONLY in stand-alone/forced mode,
00076                                               ! NOT when coupled to a model (MesoNH)
00077 REAL, DIMENSION(:), INTENT(IN)    :: PZ0      ! roughness length for momentum
00078 REAL, DIMENSION(:), INTENT(IN)    :: PZ0H     ! roughness length for heat
00079 !
00080 REAL, DIMENSION(:), INTENT(OUT)   :: PAC      ! aerodynamical conductance
00081 REAL, DIMENSION(:), INTENT(OUT)   :: PRA      ! aerodynamical resistance
00082 REAL, DIMENSION(:), INTENT(OUT)   :: PCH      ! drag coefficient for heat
00083 !
00084 !*      0.2    declarations of local variables
00085 !
00086 !
00087 REAL, DIMENSION(SIZE(PRI)) :: ZZ0, ZZ0H, ZMU,          
00088                                ZFH, ZCHSTAR, ZPH, ZCDN, 
00089                                ZSTA, ZDI, ZWORK1, ZWORK2, ZWORK3 
00090 REAL, DIMENSION(SIZE(PRI)) :: ZVMOD
00091 !
00092 INTEGER                    :: JJ
00093 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00094 !
00095 ! Functions:
00096 REAL :: X, CHSTAR, PH
00097 CHSTAR(X) = 3.2165 + 4.3431*X + 0.5360*X*X - 0.0781*X*X*X
00098 PH    (X) = 0.5802 - 0.1571*X + 0.0327*X*X - 0.0026*X*X*X
00099 !
00100 !-------------------------------------------------------------------------------
00101 !
00102 !*       4.     Surface aerodynamic resistance for heat transfers
00103 !               -------------------------------------------------
00104 !
00105 IF (LHOOK) CALL DR_HOOK('SURFACE_AERO_COND',0,ZHOOK_HANDLE)
00106 ZVMOD(:) = WIND_THRESHOLD(PVMOD(:),PUREF(:))
00107 !
00108 DO JJ=1,SIZE(PRI)
00109 
00110   ZZ0(JJ)  = MIN(PZ0(JJ),PUREF(JJ)*0.5)
00111   ZZ0H(JJ) = MIN(ZZ0(JJ),PZ0H(JJ))
00112   ZZ0H(JJ) = MIN(ZZ0H(JJ),PZREF(JJ)*0.5)
00113 !
00114   ZWORK1(JJ)=LOG( PUREF(JJ)/ZZ0(JJ) )
00115   ZWORK2(JJ)=PZREF(JJ)/ZZ0H(JJ)
00116   ZWORK3(JJ)=ZVMOD(JJ)*ZVMOD(JJ)
00117 
00118   ZMU(JJ) = MAX( LOG( ZZ0(JJ)/ZZ0H(JJ) ), 0.0 )
00119   ZFH(JJ) = ZWORK1(JJ) / LOG(ZWORK2(JJ))
00120 !
00121   ZCHSTAR(JJ) = CHSTAR(ZMU(JJ))
00122   ZPH(JJ)     = PH(ZMU(JJ))
00123 !
00124 ! 
00125   ZCDN(JJ) = (XKARMAN/ZWORK1(JJ))**2.
00126 !
00127 !
00128   ZSTA(JJ) = PRI(JJ)*ZWORK3(JJ)
00129 !
00130 !
00131   IF ( PRI(JJ) < 0.0 ) THEN
00132     ZDI(JJ) = 1. / ( ZVMOD(JJ)                                  &
00133                    +ZCHSTAR(JJ)*ZCDN(JJ)*15.                         &
00134                                 *ZWORK2(JJ)**ZPH(JJ)  &
00135                                 *ZFH(JJ) * SQRT(-ZSTA(JJ))           &
00136                   ) 
00137     PAC(JJ) = ZCDN(JJ)*(ZVMOD(JJ)-15.* ZSTA(JJ)*ZDI(JJ))*ZFH(JJ)
00138 
00139   ELSE
00140     ZDI(JJ) = SQRT(ZWORK3(JJ) + 5. * ZSTA(JJ) )
00141     PAC(JJ) = ZCDN(JJ)*ZVMOD(JJ)/(1.+15.*ZSTA(JJ)*ZDI(JJ)  &
00142              / ZWORK3(JJ) /ZVMOD(JJ) )*ZFH(JJ)    
00143   ENDIF
00144 !
00145   PRA(JJ) = 1. / PAC(JJ)
00146 !
00147   PCH(JJ) = 1. / (PRA(JJ) * ZVMOD(JJ))
00148 !
00149 ENDDO
00150 IF (LHOOK) CALL DR_HOOK('SURFACE_AERO_COND',1,ZHOOK_HANDLE)
00151 !
00152 !-------------------------------------------------------------------------------
00153 !
00154 END SUBROUTINE SURFACE_AERO_COND