SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE PREP_ISBA_EXTERN(HPROGRAM,HSURF,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,KLUOUT,PFIELD) 00003 ! ################################################################################# 00004 ! 00005 !!**** *PREP_ISBA_EXTERN* - 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 !!------------------------------------------------------------------ 00025 ! 00026 00027 ! 00028 USE MODE_READ_EXTERN 00029 ! 00030 USE MODD_TYPE_DATE_SURF 00031 ! 00032 USE MODI_PREP_GRID_EXTERN 00033 USE MODI_READ_SURF 00034 USE MODI_INTERP_GRID 00035 USE MODI_OPEN_AUX_IO_SURF 00036 USE MODI_CLOSE_AUX_IO_SURF 00037 ! 00038 USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE 00039 USE MODD_PREP_ISBA, ONLY : XGRID_SOIL, XWR_DEF 00040 USE MODD_DATA_COVER_PAR, ONLY : NVEGTYPE 00041 USE MODD_SURF_PAR, ONLY : XUNDEF 00042 ! 00043 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00044 USE PARKIND1 ,ONLY : JPRB 00045 ! 00046 USE MODI_PUT_ON_ALL_VEGTYPES 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 CHARACTER(LEN=6), INTENT(IN) :: HFILETYPE ! type of input file 00056 CHARACTER(LEN=28), INTENT(IN) :: HFILEPGD ! name of file 00057 CHARACTER(LEN=6), INTENT(IN) :: HFILEPGDTYPE ! type of input file 00058 INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing 00059 REAL,DIMENSION(:,:,:), POINTER :: PFIELD ! field to interpolate horizontally (on final soil grid) 00060 ! 00061 !* 0.2 declarations of local variables 00062 ! 00063 CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read 00064 INTEGER :: IRESP ! reading return code 00065 INTEGER :: INI ! total 1D dimension 00066 INTEGER :: IPATCH ! number of patch 00067 ! 00068 REAL, DIMENSION(:,:,:), POINTER :: ZFIELD ! field read on initial MNH vertical soil grid, all patches 00069 REAL, DIMENSION(:,:), POINTER :: ZFIELD1 ! field read on initial MNH vertical soil grid, one patch 00070 REAL, DIMENSION(:,:,:), POINTER :: ZD ! depth of field in the soil 00071 REAL, DIMENSION(:,:), POINTER :: ZD1 ! depth of field in the soil, one patch 00072 REAL, DIMENSION(:,:), ALLOCATABLE :: ZOUT ! 00073 INTEGER :: JPATCH, JVEGTYPE ! loop counter for patch 00074 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00075 ! 00076 !------------------------------------------------------------------------------ 00077 ! 00078 !* 1. Preparation of IO for reading in the file 00079 ! ----------------------------------------- 00080 ! 00081 !* Note that all points are read, even those without physical meaning. 00082 ! These points will not be used during the horizontal interpolation step. 00083 ! Their value must be defined as XUNDEF. 00084 ! 00085 IF (LHOOK) CALL DR_HOOK('PREP_ISBA_EXTERN',0,ZHOOK_HANDLE) 00086 ! 00087 !------------------------------------------------------------------------------ 00088 ! 00089 !* 2. Reading of grid 00090 ! --------------- 00091 ! 00092 CALL OPEN_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE,'NATURE') 00093 ! 00094 CALL PREP_GRID_EXTERN(HFILEPGDTYPE,KLUOUT,CINGRID_TYPE,CINTERP_TYPE,INI) 00095 ! 00096 !--------------------------------------------------------------------------------------- 00097 ! 00098 !* 3. Transformation into physical quantity to be interpolated 00099 ! -------------------------------------------------------- 00100 ! 00101 SELECT CASE(HSURF) 00102 ! 00103 !* 3. Orography 00104 ! --------- 00105 ! 00106 CASE('ZS ') 00107 ALLOCATE(PFIELD(INI,1,1)) 00108 YRECFM='ZS' 00109 CALL READ_SURF(HFILEPGDTYPE,YRECFM,PFIELD(:,1,1),IRESP,HDIR='A') 00110 CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE) 00111 ! 00112 !-------------------------------------------------------------------------- 00113 ! 00114 ! 00115 !* 3.1 Profile of temperature, water or ice in the soil 00116 ! 00117 CASE('TG ','WG ','WGI ') 00118 CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE) 00119 !* reading of the profile and its depth definition 00120 CALL READ_EXTERN_ISBA(HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,& 00121 KLUOUT,INI,HSURF,HSURF,ZFIELD,ZD) 00122 ! 00123 ALLOCATE(ZFIELD1(SIZE(ZFIELD,1),SIZE(ZFIELD,2))) 00124 ALLOCATE(ZD1(SIZE(ZFIELD,1),SIZE(ZFIELD,2))) 00125 ALLOCATE(ZOUT(SIZE(ZFIELD,1),SIZE(XGRID_SOIL))) 00126 ALLOCATE(PFIELD(SIZE(ZFIELD,1),SIZE(XGRID_SOIL),SIZE(ZFIELD,3))) 00127 ! 00128 DO JVEGTYPE=1,SIZE(ZFIELD,3) 00129 ZFIELD1(:,:)=ZFIELD(:,:,JVEGTYPE) 00130 ZD1(:,:)=ZD(:,:,JVEGTYPE) 00131 CALL INTERP_GRID(ZD1,ZFIELD1,XGRID_SOIL,ZOUT) 00132 PFIELD(:,:,JVEGTYPE)=ZOUT(:,:) 00133 END DO 00134 00135 ! 00136 DEALLOCATE(ZFIELD) 00137 DEALLOCATE(ZOUT) 00138 DEALLOCATE(ZFIELD1) 00139 DEALLOCATE(ZD) 00140 ! 00141 !-------------------------------------------------------------------------- 00142 ! 00143 !* 3.4 Water content intercepted on leaves, LAI 00144 ! 00145 CASE('WR ') 00146 ALLOCATE(PFIELD(INI,1,NVEGTYPE)) 00147 !* number of tiles 00148 YRECFM='PATCH_NUMBER' 00149 CALL READ_SURF(HFILEPGDTYPE,YRECFM,IPATCH,IRESP) 00150 CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE) 00151 ALLOCATE(ZFIELD(INI,1,IPATCH)) 00152 YRECFM = 'WR' 00153 CALL OPEN_AUX_IO_SURF(HFILE,HFILETYPE,'NATURE') 00154 CALL READ_SURF(HFILETYPE,YRECFM,ZFIELD(:,1,:),IRESP,HDIR='A') 00155 CALL CLOSE_AUX_IO_SURF(HFILE,HFILETYPE) 00156 CALL PUT_ON_ALL_VEGTYPES(INI,1,IPATCH,NVEGTYPE,ZFIELD,PFIELD) 00157 DEALLOCATE(ZFIELD) 00158 ! 00159 CASE('LAI ') 00160 CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE) 00161 ALLOCATE(PFIELD(INI,1,NVEGTYPE)) 00162 PFIELD(:,:,:) = XUNDEF 00163 ! 00164 END SELECT 00165 ! 00166 ! 00167 !--------------------------------------------------------------------------- 00168 ! 00169 !* 6. End of IO 00170 ! --------- 00171 ! 00172 IF (LHOOK) CALL DR_HOOK('PREP_ISBA_EXTERN',1,ZHOOK_HANDLE) 00173 ! 00174 !--------------------------------------------------------------------------- 00175 !--------------------------------------------------------------------------- 00176 END SUBROUTINE PREP_ISBA_EXTERN