SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/coupling_flake_orographyn.F90
Go to the documentation of this file.
00001 !     ###############################################################################
00002 SUBROUTINE COUPLING_FLAKE_OROGRAPHY_n(HPROGRAM, HCOUPLING,                               &
00003                  PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW, PTSUN, PZENITH, PAZIM,    &
00004                  PZREF, PUREF, PZS, PU, PV, PQA, PTA, PRHOA, PSV, PCO2, HSV,                 &
00005                  PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA,                   &
00006                  PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV,                                    &
00007                  PTRAD, PDIR_ALB, PSCA_ALB, PEMIS,                                           &
00008                  PPEW_A_COEF, PPEW_B_COEF,                                                   &
00009                  PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF,                         &
00010                  HTEST                                                                       )  
00011 !     ###############################################################################
00012 !
00013 !!****  *COUPLING_FLAKE_OROGRAPHY_n * - Modifies the input forcing if not
00014 !!           initially at lake level
00015 !!
00016 !!    PURPOSE
00017 !!    -------
00018 !!
00019 !!**  METHOD
00020 !!    ------
00021 !!
00022 !!    REFERENCE
00023 !!    ---------
00024 !!      
00025 !!
00026 !!    AUTHOR
00027 !!    ------
00028 !!     V. Masson 
00029 !!
00030 !!    MODIFICATIONS
00031 !!    -------------
00032 !!      Original    01/2004
00033 !!      B. Decharme   2008   reset the subgrid topographic effect on the forcing
00034 !!      Modified    09/2012  : J. Escobar , SIZE(PTA) not allowed without-interface , replace by KI
00035 !!-------------------------------------------------------------
00036 !
00037 USE MODD_CSTS,   ONLY : XCPD, XRD, XP00
00038 USE MODD_FLAKE_n,          ONLY : LSBL, XTS, XZ0, XZS
00039 USE MODD_FLAKE_SBL_n,      ONLY : XZ, XU, NLVL, XTKE, XT, XQ, XLMO, XZF, XDZ, XDZF, XP
00040 USE MODD_DIAG_FLAKE_n,     ONLY : N2M, XT2M, XQ2M, XHU2M, XZON10M, XMER10M
00041 !
00042 USE MODD_SURF_ATM, ONLY : LVERTSHIFT
00043 !
00044 USE MODI_FORCING_VERT_SHIFT
00045 !
00046 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00047 USE PARKIND1  ,ONLY : JPRB
00048 !
00049 USE MODI_COUPLING_SEAWAT_SBL_n
00050 !
00051 IMPLICIT NONE
00052 !
00053 !*      0.1    declarations of arguments
00054 !
00055  CHARACTER(LEN=6),    INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00056  CHARACTER(LEN=1),    INTENT(IN)  :: HCOUPLING ! type of coupling
00057                                               ! 'E' : explicit
00058                                               ! 'I' : implicit
00059 INTEGER,             INTENT(IN)  :: KYEAR     ! current year (UTC)
00060 INTEGER,             INTENT(IN)  :: KMONTH    ! current month (UTC)
00061 INTEGER,             INTENT(IN)  :: KDAY      ! current day (UTC)
00062 REAL,                INTENT(IN)  :: PTIME     ! current time since midnight (UTC, s)
00063 INTEGER,             INTENT(IN)  :: KI        ! number of points
00064 INTEGER,             INTENT(IN)  :: KSV       ! number of scalars
00065 INTEGER,             INTENT(IN)  :: KSW       ! number of short-wave spectral bands
00066 REAL, DIMENSION(KI), INTENT(IN)  :: PTSUN     ! solar time                    (s from midnight)
00067 REAL,                INTENT(IN)  :: PTSTEP    ! atmospheric time-step                 (s)
00068 REAL, DIMENSION(KI), INTENT(IN)  :: PZREF     ! height of T,q forcing                 (m)
00069 REAL, DIMENSION(KI), INTENT(IN)  :: PUREF     ! height of wind forcing                (m)
00070 !
00071 REAL, DIMENSION(KI), INTENT(IN)  :: PTA       ! air temperature forcing               (K)
00072 REAL, DIMENSION(KI), INTENT(IN)  :: PQA       ! air humidity forcing                  (kg/m3)
00073 REAL, DIMENSION(KI), INTENT(IN)  :: PRHOA     ! air density                           (kg/m3)
00074 REAL, DIMENSION(KI,KSV),INTENT(IN) :: PSV     ! scalar variables
00075 !                                             ! chemistry:   first char. in HSV: '#'  (molecule/m3)
00076 !                                             !
00077  CHARACTER(LEN=6), DIMENSION(KSV),INTENT(IN):: HSV  ! name of all scalar variables
00078 REAL, DIMENSION(KI), INTENT(IN)  :: PU        ! zonal wind                            (m/s)
00079 REAL, DIMENSION(KI), INTENT(IN)  :: PV        ! meridian wind                         (m/s)
00080 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PDIR_SW ! direct  solar radiation (on horizontal surf.)
00081 !                                             !                                       (W/m2)
00082 REAL, DIMENSION(KI,KSW),INTENT(IN) :: PSCA_SW ! diffuse solar radiation (on horizontal surf.)
00083 !                                             !                                       (W/m2)
00084 REAL, DIMENSION(KSW),INTENT(IN)  :: PSW_BANDS ! mean wavelength of each shortwave band (m)
00085 REAL, DIMENSION(KI), INTENT(IN)  :: PZENITH   ! zenithal angle       (radian from the vertical)
00086 REAL, DIMENSION(KI), INTENT(IN)  :: PAZIM     ! azimuthal angle      (radian from North, clockwise)
00087 REAL, DIMENSION(KI), INTENT(IN)  :: PLW       ! longwave radiation (on horizontal surf.)
00088 !                                             !                                       (W/m2)
00089 REAL, DIMENSION(KI), INTENT(IN)  :: PPS       ! pressure at atmospheric model surface (Pa)
00090 REAL, DIMENSION(KI), INTENT(IN)  :: PPA       ! pressure at forcing level             (Pa)
00091 REAL, DIMENSION(KI), INTENT(IN)  :: PZS       ! atmospheric model orography           (m)
00092 REAL, DIMENSION(KI), INTENT(IN)  :: PCO2      ! CO2 concentration in the air          (kg/m3)
00093 REAL, DIMENSION(KI), INTENT(IN)  :: PSNOW     ! snow precipitation                    (kg/m2/s)
00094 REAL, DIMENSION(KI), INTENT(IN)  :: PRAIN     ! liquid precipitation                  (kg/m2/s)
00095 !
00096 !
00097 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTH     ! flux of heat                          (W/m2)
00098 REAL, DIMENSION(KI), INTENT(OUT) :: PSFTQ     ! flux of water vapor                   (kg/m2/s)
00099 REAL, DIMENSION(KI), INTENT(OUT) :: PSFU      ! zonal momentum flux                   (Pa)
00100 REAL, DIMENSION(KI), INTENT(OUT) :: PSFV      ! meridian momentum flux                (Pa)
00101 REAL, DIMENSION(KI), INTENT(OUT) :: PSFCO2    ! flux of CO2                           (kg/m2/s)
00102 REAL, DIMENSION(KI,KSV),INTENT(OUT):: PSFTS   ! flux of scalar var.                   (kg/m2/s)
00103 !
00104 REAL, DIMENSION(KI), INTENT(OUT) :: PTRAD     ! radiative temperature                 (K)
00105 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PDIR_ALB! direct albedo for each spectral band  (-)
00106 REAL, DIMENSION(KI,KSW),INTENT(OUT):: PSCA_ALB! diffuse albedo for each spectral band (-)
00107 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS     ! emissivity                            (-)
00108 !
00109 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_A_COEF! implicit coefficients
00110 REAL, DIMENSION(KI), INTENT(IN) :: PPEW_B_COEF! needed if HCOUPLING='I'
00111 REAL, DIMENSION(KI), INTENT(IN) :: PPET_A_COEF
00112 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_A_COEF
00113 REAL, DIMENSION(KI), INTENT(IN) :: PPET_B_COEF
00114 REAL, DIMENSION(KI), INTENT(IN) :: PPEQ_B_COEF
00115  CHARACTER(LEN=2),    INTENT(IN) :: HTEST ! must be equal to 'OK'
00116 
00117 !
00118 !*      0.2    declarations of local variables
00119 !
00120 REAL, DIMENSION(KI)  ::  ZPEQ_B_COEF   ! 1st explicit coefficient
00121 REAL, DIMENSION(KI)  ::  ZPET_B_COEF   ! 2nd explicit coefficient
00122 !
00123 REAL, DIMENSION(KI)  :: ZTA    ! Temperature at forcing height above surface orography
00124 REAL, DIMENSION(KI)  :: ZPA    ! Pressure    at forcing height above surface orography
00125 REAL, DIMENSION(KI)  :: ZPS    ! Pressure    at surface orography
00126 REAL, DIMENSION(KI)  :: ZQA    ! Humidity    at forcing height above surface orography
00127 REAL, DIMENSION(KI)  :: ZRHOA  ! Density     at forcing height above surface orography
00128 !
00129 REAL, DIMENSION(KI)  :: ZWIND10M
00130 REAL, DIMENSION(KI)  :: ZWIND10M_MAX
00131 REAL, DIMENSION(KI)  :: ZT2M_MIN
00132 REAL, DIMENSION(KI)  :: ZT2M_MAX
00133 REAL, DIMENSION(KI)  :: ZHU2M_MIN
00134 REAL, DIMENSION(KI)  :: ZHU2M_MAX
00135 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00136 !-------------------------------------------------------------------------------------
00137 ! Preliminaries:
00138 !-------------------------------------------------------------------------------------
00139 !
00140 IF (LHOOK) CALL DR_HOOK('COUPLING_FLAKE_OROGRAPHY_N',0,ZHOOK_HANDLE)
00141 !
00142 ZPEQ_B_COEF = PPEQ_B_COEF
00143 ZPET_B_COEF = PPET_B_COEF
00144 !
00145 IF(LVERTSHIFT)THEN
00146 !        
00147    CALL FORCING_VERT_SHIFT(PZS,XZS,PTA,PQA,PPA,PRHOA,ZTA,ZQA,ZPA,ZRHOA)
00148 !
00149    ZPS = ZPA + (PPS - PPA)
00150 !
00151   IF (HCOUPLING=='I') THEN
00152     ZPEQ_B_COEF = PPEQ_B_COEF + ZQA - PQA
00153     ZPET_B_COEF = PPET_B_COEF + ZTA/(ZPA/XP00)**(XRD/XCPD) - PTA/(PPA/XP00)**(XRD/XCPD)
00154   ENDIF
00155 !
00156 ELSE
00157 !
00158   ZTA     = PTA
00159   ZQA     = PQA
00160   ZPS     = PPS
00161   ZPA     = PPS
00162   ZRHOA   = PRHOA
00163 !
00164 ENDIF
00165 !
00166  CALL COUPLING_SEAWAT_SBL_n(HPROGRAM, HCOUPLING, 'F',                                       &
00167                PTSTEP, KYEAR, KMONTH, KDAY, PTIME,                                         &
00168                KI, KSV, KSW,                                                               &
00169                PTSUN, PZENITH, PZENITH, PAZIM,                                             &
00170                PZREF, PUREF, XZS, PU, PV, ZQA, ZTA, ZRHOA, PSV, PCO2, HSV,                 &
00171                PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, ZPS, ZPA,                   &
00172                PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, LSBL, XTS, XZ0,                    &
00173                XZ, XU, NLVL, XTKE, XT, XQ, XLMO, XZF, XDZ, XDZF, XP,                       &
00174                N2M, XT2M, XQ2M, XHU2M, XZON10M, XMER10M, ZWIND10M, ZWIND10M_MAX,           &
00175                ZT2M_MIN, ZT2M_MAX, ZHU2M_MIN, ZHU2M_MAX,                                   &
00176                PTRAD, PDIR_ALB, PSCA_ALB, PEMIS,                                           &
00177                PPEW_A_COEF, PPEW_B_COEF,                                                   &
00178                PPET_A_COEF, PPEQ_A_COEF, ZPET_B_COEF, ZPEQ_B_COEF,                         &
00179                'OK'                                                                        )
00180 !
00181 IF (LHOOK) CALL DR_HOOK('COUPLING_FLAKE_OROGRAPHY_N',1,ZHOOK_HANDLE)
00182 !
00183 !-------------------------------------------------------------------------------------
00184 !
00185 END SUBROUTINE COUPLING_FLAKE_OROGRAPHY_n