SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE PREP_TEB_GARDEN_GRIB(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD) 00003 ! ################################################################################# 00004 ! 00005 !!**** *PREP_TEB_GARDEN_GRIB* - initializes ISBA fields from operational GRIB 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 ! 00010 !!** METHOD 00011 !! ------ 00012 !! 00013 !! REFERENCE 00014 !! --------- 00015 !! 00016 !! 00017 !! AUTHOR 00018 !! ------ 00019 !! V. Masson 00020 !! 00021 !! MODIFICATIONS 00022 !! ------------- 00023 !! Original 01/2004 00024 !! S. Riette 05/2010 READ_GRIB_WGI_ECMWF's interface modified 00025 !!------------------------------------------------------------------ 00026 ! 00027 00028 ! 00029 USE MODE_READ_GRIB 00030 ! 00031 USE MODD_TYPE_DATE_SURF 00032 ! 00033 USE MODI_PREP_GRIB_GRID 00034 USE MODI_INTERP_GRID 00035 ! 00036 USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE 00037 USE MODD_PREP_TEB_GARDEN,ONLY : XGRID_SOIL, XWR_DEF 00038 USE MODD_DATA_COVER_PAR, ONLY : NVEGTYPE 00039 USE MODD_SURF_PAR, ONLY : XUNDEF 00040 USE MODD_GRID_GRIB, ONLY : CGRIB_FILE, NNI 00041 ! 00042 ! 00043 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00044 USE PARKIND1 ,ONLY : JPRB 00045 ! 00046 USE MODI_ABOR1_SFX 00047 ! 00048 IMPLICIT NONE 00049 ! 00050 !* 0.1 declarations of arguments 00051 ! 00052 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes 00053 CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field 00054 CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of file 00055 INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing 00056 REAL,DIMENSION(:,:,:), POINTER :: PFIELD ! field to interpolate horizontally 00057 ! 00058 !* 0.2 declarations of local variables 00059 ! 00060 TYPE (DATE_TIME) :: TZTIME_GRIB ! current date and time 00061 CHARACTER(LEN=6) :: YINMODEL ! model from which GRIB file originates 00062 REAL, DIMENSION(:) , POINTER :: ZMASK => NULL() ! Land mask 00063 REAL, DIMENSION(:,:), POINTER :: ZFIELD => NULL() ! field read 00064 REAL, DIMENSION(:), POINTER :: ZFIELD1D => NULL() ! field read 00065 REAL, DIMENSION(:,:), POINTER :: ZD => NULL() ! depth of field in the soil 00066 INTEGER :: JVEGTYPE ! loop counter on vegtypes 00067 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00068 ! 00069 !------------------------------------------------------------------------------------- 00070 ! 00071 !* 1. Reading of grid 00072 ! --------------- 00073 ! 00074 IF (LHOOK) CALL DR_HOOK('PREP_TEB_GARDEN_GRIB',0,ZHOOK_HANDLE) 00075 ! 00076 IF (TRIM(HFILE).NE.CGRIB_FILE) CGRIB_FILE="" 00077 ! 00078 CALL PREP_GRIB_GRID(HFILE,KLUOUT,YINMODEL,CINGRID_TYPE,TZTIME_GRIB) 00079 ! 00080 CALL READ_GRIB_LAND_MASK(HFILE,KLUOUT,YINMODEL,ZMASK) 00081 ! 00082 !* 2. Reading of field 00083 ! ---------------- 00084 ! 00085 !* 3. Transformation into physical quantity to be interpolated 00086 ! -------------------------------------------------------- 00087 ! 00088 SELECT CASE(HSURF) 00089 ! 00090 !* 3.1 Profile of temperature in the soil 00091 ! 00092 CASE('TG ') 00093 !* reading of the profile and its depth definition 00094 SELECT CASE(YINMODEL) 00095 CASE('ECMWF ') 00096 CALL READ_GRIB_TG_ECMWF(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD) 00097 CASE('ARPEGE','ALADIN','MOCAGE') 00098 CALL READ_GRIB_TG_METEO_FRANCE(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD) 00099 CASE('HIRLAM') 00100 CALL READ_GRIB_TG_HIRLAM(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD) 00101 END SELECT 00102 CALL SOIL_PROFILE_GRIB 00103 00104 CASE('WG ') 00105 !* reading of the profile and its depth definition 00106 SELECT CASE(YINMODEL) 00107 CASE('ECMWF ') 00108 CALL READ_GRIB_WG_ECMWF(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD) 00109 CASE('ARPEGE','ALADIN','MOCAGE') 00110 CALL READ_GRIB_WG_METEO_FRANCE(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD) 00111 CASE('HIRLAM') 00112 CALL READ_GRIB_WG_HIRLAM(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD) 00113 END SELECT 00114 CALL SOIL_PROFILE_GRIB 00115 00116 00117 !* 3.3 Profile of soil ice content 00118 00119 CASE('WGI ') 00120 !* reading of the profile and its depth definition 00121 SELECT CASE(YINMODEL) 00122 CASE('ECMWF ') 00123 CALL READ_GRIB_WGI_ECMWF(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD) 00124 CASE('ARPEGE','ALADIN','MOCAGE') 00125 CALL READ_GRIB_WGI_METEO_FRANCE(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD) 00126 CASE('HIRLAM') 00127 CALL READ_GRIB_WGI_HIRLAM(HFILE,KLUOUT,ZFIELD,ZD) 00128 END SELECT 00129 CALL SOIL_PROFILE_GRIB 00130 ! 00131 !* 3.4 Water content intercepted on leaves, LAI 00132 ! 00133 CASE('WR ') 00134 ALLOCATE(PFIELD(NNI,1,NVEGTYPE)) 00135 PFIELD(:,:,:) = XWR_DEF 00136 ! 00137 CASE('LAI ') 00138 ALLOCATE(PFIELD(NNI,1,NVEGTYPE)) 00139 PFIELD(:,:,:) = XUNDEF 00140 ! 00141 ! 00142 !* 3.5 Other fields 00143 ! 00144 CASE('ZS ') 00145 CALL READ_GRIB_ZS_LAND(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD1D) 00146 ALLOCATE(PFIELD(SIZE(ZFIELD1D,1),1,1)) 00147 PFIELD(:,1,1)=ZFIELD1D(:) 00148 DEALLOCATE(ZFIELD1D) 00149 00150 CASE DEFAULT 00151 CALL ABOR1_SFX('PREP_TEB_GARDEN_GRIB: OPTION NOT SUPPORTED - '//HSURF) 00152 00153 END SELECT 00154 ! 00155 DEALLOCATE(ZMASK) 00156 ! 00157 !* 4. Interpolation method 00158 ! -------------------- 00159 ! 00160 CINTERP_TYPE='HORIBL' 00161 ! 00162 !------------------------------------------------------------------------------------- 00163 !------------------------------------------------------------------------------------- 00164 ! 00165 IF (LHOOK) CALL DR_HOOK('PREP_TEB_GARDEN_GRIB',1,ZHOOK_HANDLE) 00166 CONTAINS 00167 ! 00168 !------------------------------------------------------------------------------------- 00169 !------------------------------------------------------------------------------------- 00170 SUBROUTINE SOIL_PROFILE_GRIB 00171 !------------------------------------------------------------------------------------- 00172 ! 00173 REAL, DIMENSION(:,:), ALLOCATABLE :: ZOUT ! work array 00174 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00175 ! 00176 !------------------------------------------------------------------------------------- 00177 ! 00178 ! 00179 !* interpolation on fine vertical grid 00180 IF (LHOOK) CALL DR_HOOK('SOIL_PROFILE_GRIB',0,ZHOOK_HANDLE) 00181 ALLOCATE(ZOUT (SIZE(ZFIELD,1),SIZE(XGRID_SOIL))) 00182 CALL INTERP_GRID(ZD,ZFIELD,XGRID_SOIL,ZOUT) 00183 ! 00184 !* extends definition to all vegtypes. 00185 ALLOCATE(PFIELD(SIZE(ZFIELD,1),SIZE(XGRID_SOIL),NVEGTYPE)) 00186 DO JVEGTYPE=1,NVEGTYPE 00187 PFIELD(:,:,JVEGTYPE)=ZOUT(:,:) 00188 END DO 00189 !* end 00190 DEALLOCATE(ZOUT) 00191 DEALLOCATE(ZFIELD) 00192 DEALLOCATE(ZD) 00193 IF (LHOOK) CALL DR_HOOK('SOIL_PROFILE_GRIB',1,ZHOOK_HANDLE) 00194 00195 END SUBROUTINE SOIL_PROFILE_GRIB 00196 ! 00197 !------------------------------------------------------------------------------------- 00198 END SUBROUTINE PREP_TEB_GARDEN_GRIB