SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_diag_tebn.F90
Go to the documentation of this file.
00001 !     ######################
00002       MODULE MODD_DIAG_TEB_n
00003 !     ######################
00004 !
00005 !!****  *MODD_DIAG_TEB - declaration of diagnostics for TEB scheme
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!
00011 !!**  IMPLICIT ARGUMENTS
00012 !!    ------------------
00013 !!      None 
00014 !!
00015 !!    REFERENCE
00016 !!    ---------
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!      V. Masson   *Meteo France*
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!      Original       01/2004
00025 !!      Modified    01/2006 : sea flux parameterization.
00026 !
00027 !*       0.   DECLARATIONS
00028 !             ------------
00029 !
00030 !
00031 !
00032 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00033 USE PARKIND1  ,ONLY : JPRB
00034 !
00035 IMPLICIT NONE
00036 
00037 TYPE DIAG_TEB_t
00038 !------------------------------------------------------------------------------
00039 !
00040   REAL    :: XDIAG_TSTEP  ! time step for diagnostics writing
00041 !
00042   INTEGER :: N2M          ! flag for 2 meters (and 10 meters) quantities
00043   LOGICAL :: L2M_MIN_ZS   ! flag for 2 meters quantities evaluated on
00044 !                         ! the minimum orographyy of the grid      
00045   LOGICAL :: LSURF_BUDGET ! flag for surface energy budget
00046   LOGICAL :: LRAD_BUDGET  ! flag for radiative energy budget
00047   LOGICAL :: LCOEF        ! flag for transfer coefficients
00048   LOGICAL :: LSURF_VARS   ! flag for surface variables
00049 !
00050   LOGICAL :: LPGD         ! flag for writing of PGD files
00051   LOGICAL :: LPGD_FIX     ! flag for writing of PGD files for time
00052 !                           invariant field
00053 !
00054 !* averaged variables
00055 !
00056   REAL, POINTER, DIMENSION(:)   :: XRI      ! Bulk-Richardson number           (-)
00057   REAL, POINTER, DIMENSION(:)   :: XCD      ! drag coefficient for wind        (W/s2)
00058   REAL, POINTER, DIMENSION(:)   :: XCH      ! drag coefficient for heat        (W/s)
00059   REAL, POINTER, DIMENSION(:)   :: XCE      ! drag coefficient for vapor       (W/s/K)
00060   REAL, POINTER, DIMENSION(:)   :: XZ0      ! roughness length for momentum    (m)
00061   REAL, POINTER, DIMENSION(:)   :: XZ0H     ! roughness length for heat        (m)
00062   REAL, POINTER, DIMENSION(:)   :: XRN      ! net radiation at surface         (W/m2)
00063   REAL, POINTER, DIMENSION(:)   :: XH       ! sensible heat flux               (W/m2)
00064   REAL, POINTER, DIMENSION(:)   :: XLE      ! latent heat flux                 (W/m2) 
00065   REAL, POINTER, DIMENSION(:)   :: XGFLUX   ! net soil-vegetation flux         (W/m2)
00066   REAL, POINTER, DIMENSION(:)   :: XT2M     ! air temperature at 2 meters      (K)
00067   REAL, POINTER, DIMENSION(:)   :: XQ2M     ! air humidity at 2 meters         (kg/kg)
00068   REAL, POINTER, DIMENSION(:)   :: XHU2M    ! air relative humidity at 2 meters(-)
00069   REAL, POINTER, DIMENSION(:)   :: XQS      ! air humidity at surface          (kg/kg)
00070   REAL, POINTER, DIMENSION(:)   :: XZON10M  ! zonal wind at 10 meters          (m/s)
00071   REAL, POINTER, DIMENSION(:)   :: XMER10M  ! meridian wind at 10 meters       (m/s)
00072   REAL, POINTER, DIMENSION(:)   :: XSFCO2   ! CO2 flux                         (kg/m2/s)
00073   REAL, POINTER, DIMENSION(:)   :: XLWD     ! downward long wave radiation     (W/m2)
00074   REAL, POINTER, DIMENSION(:)   :: XLWU     ! upward long wave radiation       (W/m2)
00075   REAL, POINTER, DIMENSION(:)   :: XSWD     ! downward short wave radiation    (W/m2)
00076   REAL, POINTER, DIMENSION(:)   :: XSWU     ! upward short wave radiation      (W/m2)
00077   REAL, POINTER, DIMENSION(:,:) :: XSWBD    ! downward short wave radiation by spectral band   (W/m2)
00078   REAL, POINTER, DIMENSION(:,:) :: XSWBU    ! upward short wave radiation by spectral band (W/m2)
00079   REAL, POINTER, DIMENSION(:)   :: XFMU     ! horizontal momentum flux zonal   (m2/s2)
00080   REAL, POINTER, DIMENSION(:)   :: XFMV     ! horizontal momentum flux meridian (m2/s2)             
00081 !------------------------------------------------------------------------------
00082 !
00083 
00084 END TYPE DIAG_TEB_t
00085 
00086 TYPE(DIAG_TEB_t), ALLOCATABLE, TARGET, SAVE :: DIAG_TEB_MODEL(:)
00087 
00088 REAL, POINTER :: XDIAG_TSTEP=>NULL()
00089 !$OMP THREADPRIVATE(XDIAG_TSTEP)
00090 INTEGER, POINTER :: N2M=>NULL()
00091 !$OMP THREADPRIVATE(N2M)
00092 LOGICAL, POINTER :: L2M_MIN_ZS=>NULL()
00093 !$OMP THREADPRIVATE(L2M_MIN_ZS)
00094 LOGICAL, POINTER :: LSURF_BUDGET=>NULL()
00095 !$OMP THREADPRIVATE(LSURF_BUDGET)
00096 LOGICAL, POINTER :: LRAD_BUDGET=>NULL()
00097 !$OMP THREADPRIVATE(LRAD_BUDGET)
00098 LOGICAL, POINTER :: LCOEF=>NULL()
00099 !$OMP THREADPRIVATE(LCOEF)
00100 LOGICAL, POINTER :: LSURF_VARS=>NULL()
00101 !$OMP THREADPRIVATE(LSURF_VARS)
00102 LOGICAL, POINTER :: LPGD=>NULL()
00103 !$OMP THREADPRIVATE(LPGD)
00104 LOGICAL, POINTER :: LPGD_FIX=>NULL()
00105 !$OMP THREADPRIVATE(LPGD_FIX)
00106 REAL, POINTER, DIMENSION(:)   :: XRI=>NULL()
00107 !$OMP THREADPRIVATE(XRI)
00108 REAL, POINTER, DIMENSION(:)   :: XCD=>NULL()
00109 !$OMP THREADPRIVATE(XCD)
00110 REAL, POINTER, DIMENSION(:)   :: XCH=>NULL()
00111 !$OMP THREADPRIVATE(XCH)
00112 REAL, POINTER, DIMENSION(:)   :: XCE=>NULL()
00113 !$OMP THREADPRIVATE(XCE)
00114 REAL, POINTER, DIMENSION(:)   :: XZ0=>NULL()
00115 !$OMP THREADPRIVATE(XZ0)
00116 REAL, POINTER, DIMENSION(:)   :: XZ0H=>NULL()
00117 !$OMP THREADPRIVATE(XZ0H)
00118 REAL, POINTER, DIMENSION(:)   :: XRN=>NULL()
00119 !$OMP THREADPRIVATE(XRN)
00120 REAL, POINTER, DIMENSION(:)   :: XH=>NULL()
00121 !$OMP THREADPRIVATE(XH)
00122 REAL, POINTER, DIMENSION(:)   :: XLE=>NULL()
00123 !$OMP THREADPRIVATE(XLE)
00124 REAL, POINTER, DIMENSION(:)   :: XGFLUX=>NULL()
00125 !$OMP THREADPRIVATE(XGFLUX)
00126 REAL, POINTER, DIMENSION(:)   :: XT2M=>NULL()
00127 !$OMP THREADPRIVATE(XT2M)
00128 REAL, POINTER, DIMENSION(:)   :: XQ2M=>NULL()
00129 !$OMP THREADPRIVATE(XQ2M)
00130 REAL, POINTER, DIMENSION(:)   :: XHU2M=>NULL()
00131 !$OMP THREADPRIVATE(XHU2M)
00132 REAL, POINTER, DIMENSION(:)   :: XQS=>NULL()
00133 !$OMP THREADPRIVATE(XQS)
00134 REAL, POINTER, DIMENSION(:)   :: XZON10M=>NULL()
00135 !$OMP THREADPRIVATE(XZON10M)
00136 REAL, POINTER, DIMENSION(:)   :: XMER10M=>NULL()
00137 !$OMP THREADPRIVATE(XMER10M)
00138 REAL, POINTER, DIMENSION(:)   :: XSFCO2=>NULL()
00139 !$OMP THREADPRIVATE(XSFCO2)
00140 REAL, POINTER, DIMENSION(:)   :: XLWD=>NULL()
00141 !$OMP THREADPRIVATE(XLWD)
00142 REAL, POINTER, DIMENSION(:)   :: XLWU=>NULL()
00143 !$OMP THREADPRIVATE(XLWU)
00144 REAL, POINTER, DIMENSION(:)   :: XSWD=>NULL()
00145 !$OMP THREADPRIVATE(XSWD)
00146 REAL, POINTER, DIMENSION(:)   :: XSWU=>NULL()
00147 !$OMP THREADPRIVATE(XSWU)
00148 REAL, POINTER, DIMENSION(:,:) :: XSWBD=>NULL()
00149 !$OMP THREADPRIVATE(XSWBD)
00150 REAL, POINTER, DIMENSION(:,:) :: XSWBU=>NULL()
00151 !$OMP THREADPRIVATE(XSWBU)
00152 REAL, POINTER, DIMENSION(:)   :: XFMU=>NULL()
00153 !$OMP THREADPRIVATE(XFMU)
00154 REAL, POINTER, DIMENSION(:)   :: XFMV=>NULL()
00155 !$OMP THREADPRIVATE(XFMV)
00156 
00157 CONTAINS
00158 
00159 SUBROUTINE DIAG_TEB_GOTO_MODEL(KFROM, KTO, LKFROM)
00160 LOGICAL, INTENT(IN) :: LKFROM
00161 INTEGER, INTENT(IN) :: KFROM, KTO
00162 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00163 !
00164 ! Save current state for allocated arrays
00165 IF (LKFROM) THEN
00166 DIAG_TEB_MODEL(KFROM)%XRI=>XRI
00167 DIAG_TEB_MODEL(KFROM)%XCD=>XCD
00168 DIAG_TEB_MODEL(KFROM)%XCH=>XCH
00169 DIAG_TEB_MODEL(KFROM)%XCE=>XCE
00170 DIAG_TEB_MODEL(KFROM)%XZ0=>XZ0
00171 DIAG_TEB_MODEL(KFROM)%XZ0H=>XZ0H
00172 DIAG_TEB_MODEL(KFROM)%XRN=>XRN
00173 DIAG_TEB_MODEL(KFROM)%XH=>XH
00174 DIAG_TEB_MODEL(KFROM)%XLE=>XLE
00175 DIAG_TEB_MODEL(KFROM)%XGFLUX=>XGFLUX
00176 DIAG_TEB_MODEL(KFROM)%XT2M=>XT2M
00177 DIAG_TEB_MODEL(KFROM)%XQ2M=>XQ2M
00178 DIAG_TEB_MODEL(KFROM)%XHU2M=>XHU2M
00179 DIAG_TEB_MODEL(KFROM)%XQS=>XQS
00180 DIAG_TEB_MODEL(KFROM)%XZON10M=>XZON10M
00181 DIAG_TEB_MODEL(KFROM)%XMER10M=>XMER10M
00182 DIAG_TEB_MODEL(KFROM)%XSFCO2=>XSFCO2
00183 DIAG_TEB_MODEL(KFROM)%XLWD=>XLWD
00184 DIAG_TEB_MODEL(KFROM)%XLWU=>XLWU
00185 DIAG_TEB_MODEL(KFROM)%XSWD=>XSWD
00186 DIAG_TEB_MODEL(KFROM)%XSWU=>XSWU
00187 DIAG_TEB_MODEL(KFROM)%XSWBD=>XSWBD
00188 DIAG_TEB_MODEL(KFROM)%XSWBU=>XSWBU
00189 DIAG_TEB_MODEL(KFROM)%XFMU=>XFMU
00190 DIAG_TEB_MODEL(KFROM)%XFMV=>XFMV
00191 ENDIF
00192 !
00193 ! Current model is set to model KTO
00194 IF (LHOOK) CALL DR_HOOK('MODD_DIAG_TEB_N:DIAG_TEB_GOTO_MODEL',0,ZHOOK_HANDLE)
00195 XDIAG_TSTEP=>DIAG_TEB_MODEL(KTO)%XDIAG_TSTEP
00196 N2M=>DIAG_TEB_MODEL(KTO)%N2M
00197 L2M_MIN_ZS=>DIAG_TEB_MODEL(KTO)%L2M_MIN_ZS
00198 LSURF_BUDGET=>DIAG_TEB_MODEL(KTO)%LSURF_BUDGET
00199 LRAD_BUDGET=>DIAG_TEB_MODEL(KTO)%LRAD_BUDGET
00200 LCOEF=>DIAG_TEB_MODEL(KTO)%LCOEF
00201 LSURF_VARS=>DIAG_TEB_MODEL(KTO)%LSURF_VARS
00202 LPGD=>DIAG_TEB_MODEL(KTO)%LPGD
00203 LPGD_FIX=>DIAG_TEB_MODEL(KTO)%LPGD_FIX
00204 XRI=>DIAG_TEB_MODEL(KTO)%XRI
00205 XCD=>DIAG_TEB_MODEL(KTO)%XCD
00206 XCH=>DIAG_TEB_MODEL(KTO)%XCH
00207 XCE=>DIAG_TEB_MODEL(KTO)%XCE
00208 XZ0=>DIAG_TEB_MODEL(KTO)%XZ0
00209 XZ0H=>DIAG_TEB_MODEL(KTO)%XZ0H
00210 XRN=>DIAG_TEB_MODEL(KTO)%XRN
00211 XH=>DIAG_TEB_MODEL(KTO)%XH
00212 XLE=>DIAG_TEB_MODEL(KTO)%XLE
00213 XGFLUX=>DIAG_TEB_MODEL(KTO)%XGFLUX
00214 XT2M=>DIAG_TEB_MODEL(KTO)%XT2M
00215 XQ2M=>DIAG_TEB_MODEL(KTO)%XQ2M
00216 XHU2M=>DIAG_TEB_MODEL(KTO)%XHU2M
00217 XQS=>DIAG_TEB_MODEL(KTO)%XQS
00218 XZON10M=>DIAG_TEB_MODEL(KTO)%XZON10M
00219 XMER10M=>DIAG_TEB_MODEL(KTO)%XMER10M
00220 XSFCO2=>DIAG_TEB_MODEL(KTO)%XSFCO2
00221 XLWD=>DIAG_TEB_MODEL(KTO)%XLWD
00222 XLWU=>DIAG_TEB_MODEL(KTO)%XLWU
00223 XSWD=>DIAG_TEB_MODEL(KTO)%XSWD
00224 XSWU=>DIAG_TEB_MODEL(KTO)%XSWU
00225 XSWBD=>DIAG_TEB_MODEL(KTO)%XSWBD
00226 XSWBU=>DIAG_TEB_MODEL(KTO)%XSWBU
00227 XFMU=>DIAG_TEB_MODEL(KTO)%XFMU
00228 XFMV=>DIAG_TEB_MODEL(KTO)%XFMV
00229 IF (LHOOK) CALL DR_HOOK('MODD_DIAG_TEB_N:DIAG_TEB_GOTO_MODEL',1,ZHOOK_HANDLE)
00230 
00231 END SUBROUTINE DIAG_TEB_GOTO_MODEL
00232 
00233 SUBROUTINE DIAG_TEB_ALLOC(KMODEL)
00234 INTEGER, INTENT(IN) :: KMODEL
00235 INTEGER :: J
00236 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00237 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_TEB_N:DIAG_TEB_ALLOC",0,ZHOOK_HANDLE)
00238 ALLOCATE(DIAG_TEB_MODEL(KMODEL))
00239 DO J=1,KMODEL
00240   NULLIFY(DIAG_TEB_MODEL(J)%XRI)
00241   NULLIFY(DIAG_TEB_MODEL(J)%XCD)
00242   NULLIFY(DIAG_TEB_MODEL(J)%XCH)
00243   NULLIFY(DIAG_TEB_MODEL(J)%XCE)
00244   NULLIFY(DIAG_TEB_MODEL(J)%XZ0)
00245   NULLIFY(DIAG_TEB_MODEL(J)%XZ0H)
00246   NULLIFY(DIAG_TEB_MODEL(J)%XRN)
00247   NULLIFY(DIAG_TEB_MODEL(J)%XH)
00248   NULLIFY(DIAG_TEB_MODEL(J)%XLE)
00249   NULLIFY(DIAG_TEB_MODEL(J)%XGFLUX)
00250   NULLIFY(DIAG_TEB_MODEL(J)%XT2M)
00251   NULLIFY(DIAG_TEB_MODEL(J)%XQ2M)
00252   NULLIFY(DIAG_TEB_MODEL(J)%XHU2M)
00253   NULLIFY(DIAG_TEB_MODEL(J)%XQS)
00254   NULLIFY(DIAG_TEB_MODEL(J)%XZON10M)
00255   NULLIFY(DIAG_TEB_MODEL(J)%XMER10M)
00256   NULLIFY(DIAG_TEB_MODEL(J)%XSFCO2)
00257   NULLIFY(DIAG_TEB_MODEL(J)%XLWD)
00258   NULLIFY(DIAG_TEB_MODEL(J)%XLWU)
00259   NULLIFY(DIAG_TEB_MODEL(J)%XSWD)
00260   NULLIFY(DIAG_TEB_MODEL(J)%XSWU)
00261   NULLIFY(DIAG_TEB_MODEL(J)%XSWBD)
00262   NULLIFY(DIAG_TEB_MODEL(J)%XSWBU)
00263   NULLIFY(DIAG_TEB_MODEL(J)%XFMU)
00264   NULLIFY(DIAG_TEB_MODEL(J)%XFMV)
00265 ENDDO
00266 DIAG_TEB_MODEL(:)%XDIAG_TSTEP=0.
00267 DIAG_TEB_MODEL(:)%N2M=0
00268 DIAG_TEB_MODEL(:)%L2M_MIN_ZS=.FALSE.
00269 DIAG_TEB_MODEL(:)%LSURF_BUDGET=.FALSE.
00270 DIAG_TEB_MODEL(:)%LRAD_BUDGET=.FALSE.
00271 DIAG_TEB_MODEL(:)%LCOEF=.FALSE.
00272 DIAG_TEB_MODEL(:)%LSURF_VARS=.FALSE.
00273 DIAG_TEB_MODEL(:)%LPGD=.FALSE.
00274 DIAG_TEB_MODEL(:)%LPGD_FIX=.FALSE.
00275 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_TEB_N:DIAG_TEB_ALLOC",1,ZHOOK_HANDLE)
00276 END SUBROUTINE DIAG_TEB_ALLOC
00277 
00278 SUBROUTINE DIAG_TEB_DEALLO
00279 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00280 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_TEB_N:DIAG_TEB_DEALLO",0,ZHOOK_HANDLE)
00281 IF (ALLOCATED(DIAG_TEB_MODEL)) DEALLOCATE(DIAG_TEB_MODEL)
00282 IF (LHOOK) CALL DR_HOOK("MODD_DIAG_TEB_N:DIAG_TEB_DEALLO",1,ZHOOK_HANDLE)
00283 END SUBROUTINE DIAG_TEB_DEALLO
00284 
00285 END MODULE MODD_DIAG_TEB_n