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