SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_snow_buffer.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_SNOW_BUFFER(HPROGRAM,HSURF,KLUOUT,PFIELD)
00003 !     #################################################################################
00004 !
00005 !!****  *PREP_SNOW_BUFFER* - prepares snow field from operational BUFFER
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    REFERENCE
00014 !!    ---------
00015 !!      
00016 !!
00017 !!    AUTHOR
00018 !!    ------
00019 !!     S. Malardel
00020 !!
00021 !!    MODIFICATIONS
00022 !!    -------------
00023 !!      Original    03/2005
00024 !!------------------------------------------------------------------
00025 !
00026 !
00027 USE MODE_READ_BUFFER
00028 !
00029 USE MODD_TYPE_DATE_SURF
00030 !
00031 USE MODI_PREP_BUFFER_GRID
00032 USE MODI_SNOW_T_WLIQ_TO_HEAT
00033 !
00034 USE MODD_PREP,           ONLY : CINTERP_TYPE
00035 USE MODD_PREP_SNOW,      ONLY : XGRID_SNOW
00036 USE MODD_DATA_COVER_PAR, ONLY : NVEGTYPE
00037 USE MODD_SURF_PAR,       ONLY : XUNDEF
00038 USE MODD_GRID_BUFFER,    ONLY : NNI
00039 USE MODD_SNOW_PAR,       ONLY : XANSMIN, XANSMAX, XRHOSMAX
00040 USE MODD_CSTS,           ONLY : XTT
00041 !
00042 !
00043 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00044 USE PARKIND1  ,ONLY : JPRB
00045 !
00046 IMPLICIT NONE
00047 !
00048 !*      0.1    declarations of arguments
00049 !
00050  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00051  CHARACTER(LEN=10),   INTENT(IN) :: HSURF     ! type of field
00052 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00053 REAL,DIMENSION(:,:,:), POINTER    :: PFIELD    ! field to interpolate horizontally
00054 !
00055 !*      0.2    declarations of local variables
00056 !
00057 TYPE (DATE_TIME)                :: TZTIME_BUFFER    ! current date and time
00058  CHARACTER(LEN=6)                :: YINMODEL       ! model from which GRIB file originates
00059 REAL, DIMENSION(:),   POINTER   :: ZFIELD1D       ! field read
00060 REAL, DIMENSION(:),   POINTER   :: ZHEAT          ! heat in snow
00061 REAL, DIMENSION(:),   POINTER   :: ZRHO           ! density of snow
00062 INTEGER                         :: JVEGTYPE       ! loop counter on vegtypes
00063 INTEGER                         :: JLAYER         ! loop on snow fine grid
00064 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00065 !
00066 !-------------------------------------------------------------------------------------
00067 !
00068 !*      1.     Reading of grid
00069 !              ---------------
00070 !
00071 IF (LHOOK) CALL DR_HOOK('PREP_SNOW_BUFFER',0,ZHOOK_HANDLE)
00072  CALL PREP_BUFFER_GRID(KLUOUT,YINMODEL,TZTIME_BUFFER)
00073 !
00074 !-------------------------------------------------------------------------------------
00075 !
00076 !*      2.     Reading of the physical field for urban areas
00077 !              ---------------------------------------------
00078 !
00079 IF (HSURF(7:8)=='RO') THEN
00080   ! 
00081   SELECT CASE(HSURF(1:3))
00082     CASE('DEP','ALB','WWW')
00083       ALLOCATE(PFIELD(NNI,1,1))
00084     CASE('HEA','RHO')
00085       ALLOCATE(PFIELD(NNI,SIZE(XGRID_SNOW),1))
00086   END SELECT
00087   !
00088   PFIELD(:,:,:) = 0.
00089 !
00090 !-------------------------------------------------------------------------------------
00091 !
00092 !*      3.     Reading of the physical field for vegetated areas
00093 !              -------------------------------------------------
00094 !
00095 ELSE
00096 !
00097   SELECT CASE(HSURF(1:3))
00098 !
00099 !*      3.1    Total snow content (kg/m2)
00100 !
00101   CASE('WWW')
00102      CALL READ_BUFFER_SNOW_VEG(KLUOUT,YINMODEL,ZFIELD1D)
00103      !
00104      ALLOCATE(PFIELD(NNI,1,NVEGTYPE))
00105      DO JVEGTYPE=1,NVEGTYPE
00106        PFIELD(:,1,JVEGTYPE)=ZFIELD1D(:)
00107      END DO
00108      DEALLOCATE(ZFIELD1D)
00109 !
00110 !
00111 !*      3.2    Total snow depth (m)
00112 !
00113   CASE('DEP')
00114      CALL READ_BUFFER_SNOW_VEG_DEPTH(KLUOUT,YINMODEL,ZFIELD1D)
00115      !
00116      ALLOCATE(PFIELD(NNI,1,NVEGTYPE))
00117      DO JVEGTYPE=1,NVEGTYPE
00118        PFIELD(:,1,JVEGTYPE)=ZFIELD1D(:)
00119      END DO
00120      DEALLOCATE(ZFIELD1D)
00121 !
00122 !
00123 !*      3.3    Profile of heat in the snow
00124 !
00125   CASE('HEA')
00126      !* read temperature
00127      CALL READ_BUFFER_TS(KLUOUT,YINMODEL,ZFIELD1D)
00128      WHERE (ZFIELD1D/=XUNDEF) ZFIELD1D(:) = MIN(ZFIELD1D,XTT)
00129      !* assumes no liquid water in the snow
00130      ALLOCATE(ZHEAT(SIZE(ZFIELD1D)))
00131      ALLOCATE(ZRHO (SIZE(ZFIELD1D)))
00132      ZRHO(:) = XRHOSMAX
00133      !
00134      CALL SNOW_T_WLIQ_TO_HEAT(ZHEAT,ZRHO,ZFIELD1D)
00135      !
00136      ALLOCATE(PFIELD(NNI,SIZE(XGRID_SNOW),NVEGTYPE))
00137      DO JVEGTYPE=1,NVEGTYPE
00138        DO JLAYER=1,SIZE(XGRID_SNOW)
00139          PFIELD(:,JLAYER,JVEGTYPE)=ZHEAT(:)
00140        END DO
00141      END DO
00142      DEALLOCATE(ZFIELD1D)
00143      DEALLOCATE(ZHEAT   )
00144      DEALLOCATE(ZRHO    )
00145 !
00146 !*      3.4    Albedo
00147 !
00148   CASE('ALB')    
00149     ALLOCATE(PFIELD(NNI,1,NVEGTYPE))
00150     PFIELD = 0.5 * ( XANSMIN + XANSMAX )
00151 !
00152 !*      3.5    Density
00153 !
00154   CASE('RHO')    
00155     ALLOCATE(PFIELD(NNI,SIZE(XGRID_SNOW),NVEGTYPE))
00156     PFIELD = XRHOSMAX
00157 
00158   END SELECT
00159   !
00160 END IF
00161 !
00162 !-------------------------------------------------------------------------------------
00163 !
00164 !*      4.     Interpolation method
00165 !              --------------------
00166 !
00167 CINTERP_TYPE='BUFFER'
00168 IF (LHOOK) CALL DR_HOOK('PREP_SNOW_BUFFER',1,ZHOOK_HANDLE)
00169 !
00170 !-------------------------------------------------------------------------------------
00171 END SUBROUTINE PREP_SNOW_BUFFER