SURFEX v7.3
General documentation of Surfex
|
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