SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE READ_TEB_CANOPY_n(HPROGRAM) 00003 ! ######################################### 00004 ! 00005 !!**** *READ_TEB_CANOPY_n* - reads TEB fields 00006 !! 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 !! 00011 !!** METHOD 00012 !! ------ 00013 !! 00014 !! EXTERNAL 00015 !! -------- 00016 !! 00017 !! 00018 !! IMPLICIT ARGUMENTS 00019 !! ------------------ 00020 !! 00021 !! REFERENCE 00022 !! --------- 00023 !! 00024 !! 00025 !! AUTHOR 00026 !! ------ 00027 !! V. Masson *Meteo France* 00028 !! 00029 !! MODIFICATIONS 00030 !! ------------- 00031 !! Original 01/2003 00032 !! E. Martin 01/2012 Add LSBL_COLD_START 00033 !------------------------------------------------------------------------------- 00034 ! 00035 !* 0. DECLARATIONS 00036 ! ------------ 00037 ! 00038 USE MODD_SURF_PAR, ONLY : XUNDEF 00039 USE MODD_TEB_n, ONLY : LCANOPY 00040 USE MODD_TEB_CANOPY_n, ONLY : NLVL, XZ, XU, XT, XQ, XTKE, XLMO, XLM,XLEPS, XDZ, XZF, XDZF, XP 00041 ! 00042 USE MODI_READ_SURF 00043 USE MODI_CANOPY_GRID 00044 USE MODI_GET_TYPE_DIM_n 00045 ! 00046 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00047 USE PARKIND1 ,ONLY : JPRB 00048 ! 00049 IMPLICIT NONE 00050 ! 00051 !* 0.1 Declarations of arguments 00052 ! ------------------------- 00053 ! 00054 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program 00055 ! 00056 ! 00057 !* 0.2 Declarations of local variables 00058 ! ------------------------------- 00059 ! 00060 ! 00061 CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read 00062 CHARACTER(LEN=3) :: YREAD 00063 INTEGER :: JLAYER ! loop counter on layers 00064 INTEGER :: ILU ! 1D physical dimension 00065 INTEGER :: IRESP ! Error code after redding 00066 INTEGER :: IVERSION, IBUGFIX ! surface version 00067 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00068 !------------------------------------------------------------------------------- 00069 ! 00070 !* 1D physical dimension 00071 ! 00072 IF (LHOOK) CALL DR_HOOK('READ_TEB_CANOPY_N',0,ZHOOK_HANDLE) 00073 YRECFM='SIZE_TOWN' 00074 CALL GET_TYPE_DIM_n('TOWN ',ILU) 00075 ! 00076 !* flag to use or not canopy levels 00077 ! 00078 YRECFM='VERSION' 00079 CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP) 00080 ! 00081 YRECFM='BUG' 00082 CALL READ_SURF(HPROGRAM,YRECFM,IBUGFIX,IRESP) 00083 ! 00084 IF (IVERSION<3) THEN 00085 LCANOPY = .FALSE. 00086 ELSE 00087 YRECFM='TEB_CANOPY' 00088 CALL READ_SURF(HPROGRAM,YRECFM,LCANOPY,IRESP) 00089 END IF 00090 ! 00091 IF (.NOT.LCANOPY) THEN 00092 ALLOCATE(XZ (0,0)) 00093 ALLOCATE(XU (0,0)) 00094 ALLOCATE(XT (0,0)) 00095 ALLOCATE(XQ (0,0)) 00096 ALLOCATE(XTKE(0,0)) 00097 ALLOCATE(XLMO(0,0)) 00098 ALLOCATE(XP (0,0)) 00099 ALLOCATE(XLM (0,0)) 00100 ALLOCATE(XLEPS(0,0)) 00101 ALLOCATE(XDZ (0,0)) 00102 ALLOCATE(XZF (0,0)) 00103 ALLOCATE(XDZF(0,0)) 00104 IF (LHOOK) CALL DR_HOOK('READ_TEB_CANOPY_N',1,ZHOOK_HANDLE) 00105 RETURN 00106 ENDIF 00107 ! 00108 !* number of vertical levels 00109 ! 00110 YRECFM='TEB_CAN_LVL' 00111 CALL READ_SURF(HPROGRAM,YRECFM,NLVL,IRESP) 00112 ! 00113 !* 2. Prognostic fields: 00114 ! ----------------- 00115 ! 00116 !* altitudes 00117 ! 00118 ALLOCATE(XZ(ILU,NLVL)) 00119 ! 00120 DO JLAYER=1,NLVL 00121 WRITE(YRECFM,'(A9,I2.2,A1)') 'TEB_CAN_Z',JLAYER,' ' 00122 CALL READ_SURF(HPROGRAM,YRECFM,XZ(:,JLAYER),IRESP) 00123 END DO 00124 ! 00125 ALLOCATE(XU (ILU,NLVL)) 00126 ALLOCATE(XT (ILU,NLVL)) 00127 ALLOCATE(XQ (ILU,NLVL)) 00128 ALLOCATE(XTKE(ILU,NLVL)) 00129 ALLOCATE(XLMO(ILU,NLVL)) 00130 ALLOCATE(XP (ILU,NLVL)) 00131 ! 00132 IF (IVERSION>7 .OR. IVERSION==7 .AND.IBUGFIX>=2) THEN 00133 YRECFM='STORAGETYPE' 00134 CALL READ_SURF(HPROGRAM,YRECFM,YREAD,IRESP) 00135 ELSE 00136 YREAD = 'ALL' 00137 ENDIF 00138 ! 00139 IF(YREAD=='ALL') THEN 00140 ! 00141 !* wind in SBL 00142 DO JLAYER=1,NLVL 00143 WRITE(YRECFM,'(A9,I2.2,A1)') 'TEB_CAN_U',JLAYER,' ' 00144 CALL READ_SURF(HPROGRAM,YRECFM,XU(:,JLAYER),IRESP) 00145 END DO 00146 ! 00147 !* theta in SBL 00148 DO JLAYER=1,NLVL 00149 WRITE(YRECFM,'(A9,I2.2,A1)') 'TEB_CAN_T',JLAYER,' ' 00150 CALL READ_SURF(HPROGRAM,YRECFM,XT(:,JLAYER),IRESP) 00151 END DO 00152 ! 00153 !* humidity in SBL 00154 DO JLAYER=1,NLVL 00155 WRITE(YRECFM,'(A9,I2.2,A1)') 'TEB_CAN_Q',JLAYER,' ' 00156 CALL READ_SURF(HPROGRAM,YRECFM,XQ(:,JLAYER),IRESP) 00157 END DO 00158 ! 00159 !* Tke in SBL 00160 DO JLAYER=1,NLVL 00161 WRITE(YRECFM,'(A9,I2.2,A1)') 'TEB_CAN_E',JLAYER,' ' 00162 CALL READ_SURF(HPROGRAM,YRECFM,XTKE(:,JLAYER),IRESP) 00163 END DO 00164 ! 00165 !* Monin-Obhukov length 00166 IF (IVERSION<7) THEN 00167 YRECFM='TEB_CAN_LMO ' 00168 CALL READ_SURF(HPROGRAM,YRECFM,XLMO(:,1),IRESP) 00169 DO JLAYER = 2,NLVL 00170 XLMO(:,JLAYER) = XLMO(:,1) 00171 ENDDO 00172 ELSE 00173 DO JLAYER=1,NLVL 00174 WRITE(YRECFM,'(A10,I2.2)') 'TEB_CAN_MO',JLAYER 00175 CALL READ_SURF(HPROGRAM,YRECFM,XLMO(:,JLAYER),IRESP) 00176 ENDDO 00177 ENDIF 00178 ! 00179 !* Pressure 00180 DO JLAYER=1,NLVL 00181 WRITE(YRECFM,'(A9,I2.2,A1)') 'TEB_CAN_P',JLAYER,' ' 00182 CALL READ_SURF(HPROGRAM,YRECFM,XP(:,JLAYER),IRESP) 00183 END DO 00184 ! 00185 ELSE 00186 XU (:,:) = XUNDEF 00187 XT (:,:) = XUNDEF 00188 XQ (:,:) = XUNDEF 00189 XTKE(:,:) = XUNDEF 00190 XLMO(:,:) = XUNDEF 00191 XP (:,:) = XUNDEF 00192 ENDIF 00193 ! 00194 !* mixing length 00195 ! 00196 ALLOCATE(XLM(ILU,NLVL)) 00197 ! 00198 !* dissipative length 00199 ! 00200 ALLOCATE(XLEPS(ILU,NLVL)) 00201 ! 00202 ! 00203 !* Grid characteristics 00204 ! 00205 ! 00206 ! --------------------------------- XZ(k+1) XDZ(k+1) 00207 ! ^ 00208 ! | 00209 ! | 00210 ! - - - - - - - - - - - - - - - - - XZf(k+1) | XDZf(k+1) 00211 ! ^ | 00212 ! | | 00213 ! --------------------------------- XZ(k), XU, XT, XQ, XTKE | XDZ(k) V 00214 ! | ^ 00215 ! - - - - - - - - - - - - - - - - - XZf(k) V | XDZf(k) 00216 ! --------------------------------- XZ(k-1) XDZ(k-1) V 00217 ! - - - - - - - - - - - - - - - - - XZf(k-1) 00218 ! 00219 ALLOCATE(XDZ (ILU,NLVL)) 00220 ALLOCATE(XZF (ILU,NLVL)) 00221 ALLOCATE(XDZF(ILU,NLVL)) 00222 CALL CANOPY_GRID(ILU,NLVL,XZ,XZF,XDZ,XDZF) 00223 ! 00224 IF (LHOOK) CALL DR_HOOK('READ_TEB_CANOPY_N',1,ZHOOK_HANDLE) 00225 !------------------------------------------------------------------------------- 00226 ! 00227 END SUBROUTINE READ_TEB_CANOPY_n