SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_watflux_sbln.F90
Go to the documentation of this file.
00001 !     ################
00002       MODULE MODD_WATFLUX_SBL_n
00003 !     ################
00004 !
00005 !!****  *MODD_WATFLUX_SBL_n - declaration of surface parameters for SBL
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !     Declaration of surface parameters
00010 !
00011 !!
00012 !!**  IMPLICIT ARGUMENTS
00013 !!    ------------------
00014 !!      None 
00015 !!
00016 !!    REFERENCE
00017 !!    ---------
00018 !!
00019 !!    AUTHOR
00020 !!    ------
00021 !!      V. Masson   *Meteo France*
00022 !!
00023 !!    MODIFICATIONS
00024 !!    -------------
00025 !!      Original       07/2006
00026 !
00027 !*       0.   DECLARATIONS
00028 !             ------------
00029 !
00030 !
00031 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00032 USE PARKIND1  ,ONLY : JPRB
00033 !
00034 IMPLICIT NONE
00035 
00036 TYPE WATFLUX_SBL_t
00037 !
00038   INTEGER                       :: NLVL ! number      of levels in SBL
00039   REAL, POINTER, DIMENSION(:,:) :: XZ   ! height of middle of each level grid(m)
00040   REAL, POINTER, DIMENSION(:,:) :: XU   ! wind        at each level in SBL   (m/s)
00041   REAL, POINTER, DIMENSION(:,:) :: XT   ! temperature at each level in SBL   (m/s)
00042   REAL, POINTER, DIMENSION(:,:) :: XQ   ! humidity    at each level in SBL   (kg/m3)
00043   REAL, POINTER, DIMENSION(:,:) :: XTKE ! Tke         at each level in SBL   (m2/s2)
00044   REAL, POINTER, DIMENSION(:)   :: XLMO ! Monin-Obhukov length               (m)
00045   REAL, POINTER, DIMENSION(:,:) :: XP   ! pressure    at each level in SBL   (kg/m3)
00046 !
00047   REAL, POINTER, DIMENSION(:,:) :: XDZ  ! depth       of each level in SBL   (m)
00048   REAL, POINTER, DIMENSION(:,:) :: XZF  ! height of bottom of each level grid(m)
00049   REAL, POINTER, DIMENSION(:,:) :: XDZF ! depth between  each level in SBL   (m)
00050 !
00051 END TYPE WATFLUX_SBL_t
00052 
00053 TYPE(WATFLUX_SBL_t), ALLOCATABLE, TARGET, SAVE :: WATFLUX_SBL_MODEL(:)
00054 
00055 INTEGER, POINTER :: NLVL=>NULL()
00056 !$OMP THREADPRIVATE(NLVL)
00057 REAL, POINTER, DIMENSION(:,:) :: XZ=>NULL()
00058 !$OMP THREADPRIVATE(XZ)
00059 REAL, POINTER, DIMENSION(:,:) :: XU=>NULL()
00060 !$OMP THREADPRIVATE(XU)
00061 REAL, POINTER, DIMENSION(:,:) :: XT=>NULL()
00062 !$OMP THREADPRIVATE(XT)
00063 REAL, POINTER, DIMENSION(:,:) :: XQ=>NULL()
00064 !$OMP THREADPRIVATE(XQ)
00065 REAL, POINTER, DIMENSION(:,:) :: XTKE=>NULL()
00066 !$OMP THREADPRIVATE(XTKE)
00067 REAL, POINTER, DIMENSION(:)   :: XLMO=>NULL()
00068 !$OMP THREADPRIVATE(XLMO)
00069 REAL, POINTER, DIMENSION(:,:) :: XP=>NULL()
00070 !$OMP THREADPRIVATE(XP)
00071 REAL, POINTER, DIMENSION(:,:) :: XDZ=>NULL()
00072 !$OMP THREADPRIVATE(XDZ)
00073 REAL, POINTER, DIMENSION(:,:) :: XZF=>NULL()
00074 !$OMP THREADPRIVATE(XZF)
00075 REAL, POINTER, DIMENSION(:,:) :: XDZF=>NULL()
00076 !$OMP THREADPRIVATE(XDZF)
00077 
00078 CONTAINS
00079 
00080 SUBROUTINE WATFLUX_SBL_GOTO_MODEL(KFROM, KTO, LKFROM)
00081 LOGICAL, INTENT(IN) :: LKFROM
00082 INTEGER, INTENT(IN) :: KFROM, KTO
00083 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00084 !
00085 ! Save current state for allocated arrays
00086 IF (LKFROM) THEN
00087 WATFLUX_SBL_MODEL(KFROM)%XZ=>XZ
00088 WATFLUX_SBL_MODEL(KFROM)%XU=>XU
00089 WATFLUX_SBL_MODEL(KFROM)%XT=>XT
00090 WATFLUX_SBL_MODEL(KFROM)%XQ=>XQ
00091 WATFLUX_SBL_MODEL(KFROM)%XTKE=>XTKE
00092 WATFLUX_SBL_MODEL(KFROM)%XLMO=>XLMO
00093 WATFLUX_SBL_MODEL(KFROM)%XP=>XP
00094 WATFLUX_SBL_MODEL(KFROM)%XDZ=>XDZ
00095 WATFLUX_SBL_MODEL(KFROM)%XZF=>XZF
00096 WATFLUX_SBL_MODEL(KFROM)%XDZF=>XDZF
00097 ENDIF
00098 !
00099 ! Current model is set to model KTO
00100 IF (LHOOK) CALL DR_HOOK('MODD_WATFLUX_SBL_N:WATFLUX_SBL_GOTO_MODEL',0,ZHOOK_HANDLE)
00101 NLVL=>WATFLUX_SBL_MODEL(KTO)%NLVL
00102 XZ=>WATFLUX_SBL_MODEL(KTO)%XZ
00103 XU=>WATFLUX_SBL_MODEL(KTO)%XU
00104 XT=>WATFLUX_SBL_MODEL(KTO)%XT
00105 XQ=>WATFLUX_SBL_MODEL(KTO)%XQ
00106 XTKE=>WATFLUX_SBL_MODEL(KTO)%XTKE
00107 XLMO=>WATFLUX_SBL_MODEL(KTO)%XLMO
00108 XP=>WATFLUX_SBL_MODEL(KTO)%XP
00109 XDZ=>WATFLUX_SBL_MODEL(KTO)%XDZ
00110 XZF=>WATFLUX_SBL_MODEL(KTO)%XZF
00111 XDZF=>WATFLUX_SBL_MODEL(KTO)%XDZF
00112 IF (LHOOK) CALL DR_HOOK('MODD_WATFLUX_SBL_N:WATFLUX_SBL_GOTO_MODEL',1,ZHOOK_HANDLE)
00113 
00114 END SUBROUTINE WATFLUX_SBL_GOTO_MODEL
00115 
00116 SUBROUTINE WATFLUX_SBL_ALLOC(KMODEL)
00117 INTEGER, INTENT(IN) :: KMODEL
00118 INTEGER :: J
00119 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00120 IF (LHOOK) CALL DR_HOOK("MODD_WATFLUX_SBL_N:WATFLUX_SBL_ALLOC",0,ZHOOK_HANDLE)
00121 ALLOCATE(WATFLUX_SBL_MODEL(KMODEL))
00122 DO J=1,KMODEL
00123   NULLIFY(WATFLUX_SBL_MODEL(J)%XZ)
00124   NULLIFY(WATFLUX_SBL_MODEL(J)%XU)
00125   NULLIFY(WATFLUX_SBL_MODEL(J)%XT)
00126   NULLIFY(WATFLUX_SBL_MODEL(J)%XQ)
00127   NULLIFY(WATFLUX_SBL_MODEL(J)%XTKE)
00128   NULLIFY(WATFLUX_SBL_MODEL(J)%XLMO)
00129   NULLIFY(WATFLUX_SBL_MODEL(J)%XP)
00130   NULLIFY(WATFLUX_SBL_MODEL(J)%XDZ)
00131   NULLIFY(WATFLUX_SBL_MODEL(J)%XZF)
00132   NULLIFY(WATFLUX_SBL_MODEL(J)%XDZF)
00133 ENDDO
00134 WATFLUX_SBL_MODEL(:)%NLVL=0
00135 IF (LHOOK) CALL DR_HOOK("MODD_WATFLUX_SBL_N:WATFLUX_SBL_ALLOC",1,ZHOOK_HANDLE)
00136 END SUBROUTINE WATFLUX_SBL_ALLOC
00137 
00138 SUBROUTINE WATFLUX_SBL_DEALLO
00139 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00140 IF (LHOOK) CALL DR_HOOK("MODD_WATFLUX_SBL_N:WATFLUX_SBL_DEALLO",0,ZHOOK_HANDLE)
00141 IF (ALLOCATED(WATFLUX_SBL_MODEL)) DEALLOCATE(WATFLUX_SBL_MODEL)
00142 IF (LHOOK) CALL DR_HOOK("MODD_WATFLUX_SBL_N:WATFLUX_SBL_DEALLO",1,ZHOOK_HANDLE)
00143 END SUBROUTINE WATFLUX_SBL_DEALLO
00144 
00145 END MODULE MODD_WATFLUX_SBL_n