SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_seaflux_sbln.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE READ_SEAFLUX_SBL_n(HPROGRAM)
00003 !     #########################################
00004 !
00005 !!****  *READ_SEAFLUX_SBL_n* - reads SEAFLUX 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_SEAFLUX_n,       ONLY : LSBL
00040 USE MODD_SEAFLUX_SBL_n,   ONLY : NLVL, XZ, XU, XT, XQ, XTKE, XLMO, 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 :: ILU     ! 1D physical dimension
00064 INTEGER :: IRESP   ! Error code after redding
00065 INTEGER :: JLAYER  ! loop counter on layers
00066 INTEGER :: IVERSION, IBUGFIX
00067 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00068 !
00069 !-------------------------------------------------------------------------------
00070 !
00071 !* 1D physical dimension
00072 !
00073 IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_SBL_N',0,ZHOOK_HANDLE)
00074  CALL GET_TYPE_DIM_n('SEA   ',ILU)
00075 !
00076 YRECFM='VERSION'
00077  CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP)
00078 !
00079 YRECFM='BUG'
00080  CALL READ_SURF(HPROGRAM,YRECFM,IBUGFIX,IRESP)
00081 !
00082 !* flag to use or not SBL levels
00083 !
00084 YRECFM='SEA_SBL'
00085  CALL READ_SURF(HPROGRAM,YRECFM,LSBL,IRESP)
00086 !
00087 IF (.NOT.LSBL) THEN
00088   ALLOCATE(XZ  (0,0))
00089   ALLOCATE(XU  (0,0))
00090   ALLOCATE(XT  (0,0))
00091   ALLOCATE(XQ  (0,0))
00092   ALLOCATE(XTKE(0,0))
00093   ALLOCATE(XLMO(0)  )
00094   ALLOCATE(XP  (0,0))
00095   ALLOCATE(XDZ (0,0))
00096   ALLOCATE(XZF (0,0))
00097   ALLOCATE(XDZF(0,0))
00098   IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_SBL_N',1,ZHOOK_HANDLE)
00099   RETURN
00100 ENDIF
00101 !
00102 !* number of vertical levels
00103 !
00104 YRECFM='SEA_SBL_LVL'
00105  CALL READ_SURF(HPROGRAM,YRECFM,NLVL,IRESP)
00106 !
00107 !*       2.     Prognostic fields:
00108 !               -----------------
00109 !
00110 !* altitudes
00111 !
00112 ALLOCATE(XZ(ILU,NLVL))
00113 !
00114 DO JLAYER=1,NLVL
00115   WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_Z',JLAYER,'  '
00116   CALL READ_SURF(HPROGRAM,YRECFM,XZ(:,JLAYER),IRESP)
00117 END DO
00118 !
00119 ALLOCATE(XU  (ILU,NLVL))
00120 ALLOCATE(XT  (ILU,NLVL))
00121 ALLOCATE(XQ  (ILU,NLVL))
00122 ALLOCATE(XTKE(ILU,NLVL))
00123 ALLOCATE(XLMO(ILU)     )
00124 ALLOCATE(XP  (ILU,NLVL))
00125 !
00126 IF (IVERSION>7 .OR. IVERSION==7 .AND.IBUGFIX>=2) THEN
00127   YRECFM='STORAGETYPE'
00128   CALL READ_SURF(HPROGRAM,YRECFM,YREAD,IRESP)
00129 ELSE
00130   YREAD = 'ALL'
00131 ENDIF
00132 !
00133 IF(YREAD=='ALL') THEN
00134   !
00135   !* wind in SBL
00136   DO JLAYER=1,NLVL
00137     WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_U',JLAYER,' '
00138     CALL READ_SURF(HPROGRAM,YRECFM,XU(:,JLAYER),IRESP)
00139   END DO
00140   !
00141   !* theta in SBL
00142   DO JLAYER=1,NLVL
00143     WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_T',JLAYER,' '
00144     CALL READ_SURF(HPROGRAM,YRECFM,XT(:,JLAYER),IRESP)
00145   END DO
00146   !
00147   !* humidity in SBL
00148   DO JLAYER=1,NLVL
00149     WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_Q',JLAYER,' '
00150     CALL READ_SURF(HPROGRAM,YRECFM,XQ(:,JLAYER),IRESP)
00151   END DO
00152   !
00153   !* Tke in SBL
00154   DO JLAYER=1,NLVL
00155     WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_E',JLAYER,' '
00156     CALL READ_SURF(HPROGRAM,YRECFM,XTKE(:,JLAYER),IRESP)
00157   END DO
00158   !
00159   !* Monin-Obhukov length
00160   YRECFM='SEA_SBL_LMO '
00161   CALL READ_SURF(HPROGRAM,YRECFM,XLMO(:),IRESP)
00162   !
00163   !* Pressure
00164   DO JLAYER=1,NLVL
00165     WRITE(YRECFM,'(A9,I2.2,A1)') 'SEA_SBL_P',JLAYER,' '
00166     CALL READ_SURF(HPROGRAM,YRECFM,XP(:,JLAYER),IRESP)
00167   END DO
00168   !
00169 ELSE
00170   XU  (:,:) = XUNDEF
00171   XT  (:,:) = XUNDEF
00172   XQ  (:,:) = XUNDEF
00173   XTKE(:,:) = XUNDEF
00174   XLMO(:)   = XUNDEF
00175   XP  (:,:) = XUNDEF
00176 ENDIF
00177 !
00178 !
00179 !* Grid characteristics
00180 !
00181 !
00182 !  --------------------------------- XZ(k+1)                     XDZ(k+1)
00183 !                                                                           ^
00184 !                                                                           |
00185 !                                                                           |
00186 !  - - - - - - - - - - - - - - - - - XZf(k+1)                               | XDZf(k+1)
00187 !                                                              ^            |
00188 !                                                              |            |
00189 !  --------------------------------- XZ(k), XU, XT, XQ, XTKE   | XDZ(k)     V
00190 !                                                              |            ^
00191 !  - - - - - - - - - - - - - - - - - XZf(k)                    V            | XDZf(k)
00192 !  --------------------------------- XZ(k-1)                     XDZ(k-1)   V
00193 !  - - - - - - - - - - - - - - - - - XZf(k-1)
00194 !
00195 ALLOCATE(XDZ (ILU,NLVL))
00196 ALLOCATE(XZF (ILU,NLVL))
00197 ALLOCATE(XDZF(ILU,NLVL))
00198  CALL CANOPY_GRID(ILU,NLVL,XZ,XZF,XDZ,XDZF)
00199 !
00200 IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_SBL_N',1,ZHOOK_HANDLE)
00201 !
00202 !-------------------------------------------------------------------------------
00203 !
00204 END SUBROUTINE READ_SEAFLUX_SBL_n