SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_teb_canopyn.F90
Go to the documentation of this file.
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