SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE ZOOM_PGD_OROGRAPHY(HPROGRAM,PSEA,PWATER,HINIFILE,HINIFILETYPE) 00003 ! ########################################################### 00004 00005 !! 00006 !! PURPOSE 00007 !! ------- 00008 !! This program prepares the physiographic data fields. 00009 !! 00010 !! METHOD 00011 !! ------ 00012 !! 00013 !! EXTERNAL 00014 !! -------- 00015 !! 00016 !! 00017 !! IMPLICIT ARGUMENTS 00018 !! ------------------ 00019 !! 00020 !! 00021 !! REFERENCE 00022 !! --------- 00023 !! 00024 !! AUTHOR 00025 !! ------ 00026 !! 00027 !! V. Masson Meteo-France 00028 !! 00029 !! MODIFICATION 00030 !! ------------ 00031 !! 00032 !! Original 13/10/03 00033 !---------------------------------------------------------------------------- 00034 ! 00035 !* 0. DECLARATION 00036 ! ----------- 00037 ! 00038 USE MODD_DATA_COVER_PAR, ONLY : JPCOVER 00039 USE MODD_SURF_ATM_n, ONLY : XZS 00040 USE MODD_SURF_ATM_GRID_n, ONLY : XLAT, XLON, CGRID, XGRID_PAR 00041 USE MODD_SURF_ATM_SSO_n, ONLY : XSSO_STDEV, XAVG_ZS, XSIL_ZS, XMIN_ZS, XMAX_ZS,& 00042 XSSO_ANIS, XSSO_DIR, XSSO_SLOPE, & 00043 XAOSIP, XAOSIM, XAOSJP, XAOSJM, & 00044 XHO2IP, XHO2IM, XHO2JP, XHO2JM 00045 USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE, LINTERP 00046 USE MODD_SURF_PAR, ONLY : XUNDEF 00047 ! 00048 USE MODI_OPEN_AUX_IO_SURF 00049 USE MODI_READ_SURF 00050 USE MODI_CLOSE_AUX_IO_SURF 00051 USE MODI_PREP_GRID_EXTERN 00052 USE MODI_HOR_INTERPOL 00053 USE MODI_PREP_OUTPUT_GRID 00054 ! 00055 ! 00056 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00057 USE PARKIND1 ,ONLY : JPRB 00058 ! 00059 USE MODI_CLEAN_PREP_OUTPUT_GRID 00060 ! 00061 USE MODI_GET_LUOUT 00062 IMPLICIT NONE 00063 ! 00064 !* 0.1 Declaration of dummy arguments 00065 ! ------------------------------ 00066 ! 00067 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling 00068 REAL, DIMENSION(:), INTENT(IN) :: PSEA ! sea fraction 00069 REAL, DIMENSION(:), INTENT(IN) :: PWATER ! inland water fraction 00070 CHARACTER(LEN=28), INTENT(IN) :: HINIFILE ! input atmospheric file name 00071 CHARACTER(LEN=6), INTENT(IN) :: HINIFILETYPE! input atmospheric file type 00072 ! 00073 ! 00074 !* 0.2 Declaration of local variables 00075 ! ------------------------------ 00076 ! 00077 INTEGER :: IRESP 00078 INTEGER :: ILUOUT 00079 INTEGER :: INI ! total 1D dimension (input field) 00080 INTEGER :: IL ! total 1D dimension (output field) 00081 REAL, DIMENSION(:), POINTER :: ZZS 00082 REAL, DIMENSION(:), POINTER :: ZAVG_ZS 00083 REAL, DIMENSION(:), POINTER :: ZSIL_ZS 00084 REAL, DIMENSION(:), POINTER :: ZSSO_STDEV 00085 REAL, DIMENSION(:), POINTER :: ZMIN_ZS 00086 REAL, DIMENSION(:), POINTER :: ZMAX_ZS 00087 REAL, DIMENSION(:), POINTER :: ZSSO_ANIS 00088 REAL, DIMENSION(:), POINTER :: ZSSO_DIR 00089 REAL, DIMENSION(:), POINTER :: ZSSO_SLOPE 00090 REAL, DIMENSION(:), POINTER :: ZAOSIP 00091 REAL, DIMENSION(:), POINTER :: ZAOSIM 00092 REAL, DIMENSION(:), POINTER :: ZAOSJP 00093 REAL, DIMENSION(:), POINTER :: ZAOSJM 00094 REAL, DIMENSION(:), POINTER :: ZHO2IP 00095 REAL, DIMENSION(:), POINTER :: ZHO2IM 00096 REAL, DIMENSION(:), POINTER :: ZHO2JP 00097 REAL, DIMENSION(:), POINTER :: ZHO2JM 00098 CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read 00099 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00100 !------------------------------------------------------------------------------ 00101 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_OROGRAPHY',0,ZHOOK_HANDLE) 00102 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00103 ! 00104 !* 1. Preparation of IO for reading in the file 00105 ! ----------------------------------------- 00106 ! 00107 !* Note that all points are read, even those without physical meaning. 00108 ! These points will not be used during the horizontal interpolation step. 00109 ! Their value must be defined as XUNDEF. 00110 ! 00111 CALL OPEN_AUX_IO_SURF(HINIFILE,HINIFILETYPE,'FULL ') 00112 ! 00113 !------------------------------------------------------------------------------ 00114 ! 00115 !* 2. Reading of grid 00116 ! --------------- 00117 ! 00118 CALL PREP_GRID_EXTERN(HINIFILETYPE,ILUOUT,CINGRID_TYPE,CINTERP_TYPE,INI) 00119 ! 00120 CALL PREP_OUTPUT_GRID(ILUOUT,CGRID,XGRID_PAR,XLAT,XLON) 00121 ! 00122 !------------------------------------------------------------------------------ 00123 ! 00124 !* 3. Reading of orographic parameters 00125 ! -------------------------------- 00126 ! 00127 ALLOCATE(ZZS (INI)) 00128 ! 00129 ALLOCATE(ZAVG_ZS (INI)) 00130 ALLOCATE(ZSIL_ZS (INI)) 00131 ALLOCATE(ZSSO_STDEV (INI)) 00132 ALLOCATE(ZMIN_ZS (INI)) 00133 ALLOCATE(ZMAX_ZS (INI)) 00134 ! 00135 ALLOCATE(ZSSO_ANIS (INI)) 00136 ALLOCATE(ZSSO_DIR (INI)) 00137 ALLOCATE(ZSSO_SLOPE (INI)) 00138 ! 00139 ALLOCATE(ZAOSIP (INI)) 00140 ALLOCATE(ZAOSIM (INI)) 00141 ALLOCATE(ZAOSJP (INI)) 00142 ALLOCATE(ZAOSJM (INI)) 00143 ALLOCATE(ZHO2IP (INI)) 00144 ALLOCATE(ZHO2IM (INI)) 00145 ALLOCATE(ZHO2JP (INI)) 00146 ALLOCATE(ZHO2JM (INI)) 00147 ! 00148 YRECFM='ZS' 00149 CALL READ_SURF(HPROGRAM,YRECFM,ZZS,IRESP,HDIR='A') 00150 ! 00151 YRECFM='AVG_ZS' 00152 CALL READ_SURF(HPROGRAM,YRECFM,ZAVG_ZS,IRESP,HDIR='A') 00153 YRECFM='SIL_ZS' 00154 CALL READ_SURF(HPROGRAM,YRECFM,ZSIL_ZS,IRESP,HDIR='A') 00155 YRECFM='SSO_STDEV' 00156 CALL READ_SURF(HPROGRAM,YRECFM,ZSSO_STDEV,IRESP,HDIR='A') 00157 YRECFM='MIN_ZS' 00158 CALL READ_SURF(HPROGRAM,YRECFM,ZMIN_ZS,IRESP,HDIR='A') 00159 YRECFM='MAX_ZS' 00160 CALL READ_SURF(HPROGRAM,YRECFM,ZMAX_ZS,IRESP,HDIR='A') 00161 ! 00162 YRECFM='SSO_ANIS' 00163 CALL READ_SURF(HPROGRAM,YRECFM,ZSSO_ANIS,IRESP,HDIR='A') 00164 YRECFM='SSO_DIR' 00165 CALL READ_SURF(HPROGRAM,YRECFM,ZSSO_DIR,IRESP,HDIR='A') 00166 YRECFM='SSO_SLOPE' 00167 CALL READ_SURF(HPROGRAM,YRECFM,ZSSO_SLOPE,IRESP,HDIR='A') 00168 ! 00169 YRECFM='AOSIP' 00170 CALL READ_SURF(HPROGRAM,YRECFM,ZAOSIP,IRESP,HDIR='A') 00171 YRECFM='AOSIM' 00172 CALL READ_SURF(HPROGRAM,YRECFM,ZAOSIM,IRESP,HDIR='A') 00173 YRECFM='AOSJP' 00174 CALL READ_SURF(HPROGRAM,YRECFM,ZAOSJP,IRESP,HDIR='A') 00175 YRECFM='AOSJM' 00176 CALL READ_SURF(HPROGRAM,YRECFM,ZAOSJM,IRESP,HDIR='A') 00177 YRECFM='HO2IP' 00178 CALL READ_SURF(HPROGRAM,YRECFM,ZHO2IP,IRESP,HDIR='A') 00179 YRECFM='HO2IM' 00180 CALL READ_SURF(HPROGRAM,YRECFM,ZHO2IM,IRESP,HDIR='A') 00181 YRECFM='HO2JP' 00182 CALL READ_SURF(HPROGRAM,YRECFM,ZHO2JP,IRESP,HDIR='A') 00183 YRECFM='HO2JM' 00184 CALL READ_SURF(HPROGRAM,YRECFM,ZHO2JM,IRESP,HDIR='A') 00185 ! 00186 CALL CLOSE_AUX_IO_SURF(HINIFILE,HINIFILETYPE) 00187 !------------------------------------------------------------------------------ 00188 ! 00189 !* 4. Interpolations 00190 ! -------------- 00191 ! 00192 IL = SIZE(XLAT) 00193 ! 00194 ALLOCATE(XZS (IL)) 00195 ! 00196 ALLOCATE(XAVG_ZS (IL)) 00197 ALLOCATE(XSIL_ZS (IL)) 00198 ALLOCATE(XSSO_STDEV (IL)) 00199 ALLOCATE(XMIN_ZS (IL)) 00200 ALLOCATE(XMAX_ZS (IL)) 00201 ! 00202 ALLOCATE(XSSO_ANIS (IL)) 00203 ALLOCATE(XSSO_DIR (IL)) 00204 ALLOCATE(XSSO_SLOPE (IL)) 00205 ! 00206 ALLOCATE(XAOSIP (IL)) 00207 ALLOCATE(XAOSIM (IL)) 00208 ALLOCATE(XAOSJP (IL)) 00209 ALLOCATE(XAOSJM (IL)) 00210 ALLOCATE(XHO2IP (IL)) 00211 ALLOCATE(XHO2IM (IL)) 00212 ALLOCATE(XHO2JP (IL)) 00213 ALLOCATE(XHO2JM (IL)) 00214 ! 00215 CALL ZOOM(ILUOUT,ZZS,XZS) 00216 CALL ZOOM(ILUOUT,ZAVG_ZS,XAVG_ZS) 00217 CALL ZOOM(ILUOUT,ZSIL_ZS,XSIL_ZS) 00218 CALL ZOOM(ILUOUT,ZMIN_ZS,XMIN_ZS) 00219 CALL ZOOM(ILUOUT,ZMAX_ZS,XMAX_ZS) 00220 ! 00221 LINTERP(:)=(PSEA(:)<1.) 00222 CALL ZOOM(ILUOUT,ZSSO_STDEV,XSSO_STDEV) 00223 CALL ZOOM(ILUOUT,ZSSO_ANIS,XSSO_ANIS) 00224 CALL ZOOM(ILUOUT,ZSSO_DIR,XSSO_DIR) 00225 CALL ZOOM(ILUOUT,ZSSO_SLOPE,XSSO_SLOPE) 00226 CALL ZOOM(ILUOUT,ZAOSIP,XAOSIP) 00227 CALL ZOOM(ILUOUT,ZAOSIM,XAOSIM) 00228 CALL ZOOM(ILUOUT,ZAOSJP,XAOSJP) 00229 CALL ZOOM(ILUOUT,ZAOSJM,XAOSJM) 00230 CALL ZOOM(ILUOUT,ZHO2IP,XHO2IP) 00231 CALL ZOOM(ILUOUT,ZHO2IM,XHO2IM) 00232 CALL ZOOM(ILUOUT,ZHO2JP,XHO2JP) 00233 CALL ZOOM(ILUOUT,ZHO2JM,XHO2JM) 00234 ! 00235 !* coherence with land sea mask 00236 ! 00237 WHERE(PSEA==1.) XZS=0. 00238 WHERE(PSEA(:)==1.) XSSO_STDEV(:) = XUNDEF 00239 WHERE(PWATER(:)==1.) XSSO_STDEV(:) = 0. 00240 WHERE(PSEA(:)>0.) XMIN_ZS(:) = 0. 00241 WHERE(PSEA(:)==1.) XMAX_ZS(:) = 0. 00242 ! 00243 WHERE (PSEA(:)==1.) 00244 XSSO_ANIS (:) = XUNDEF 00245 XSSO_DIR (:) = XUNDEF 00246 XSSO_SLOPE(:) = XUNDEF 00247 END WHERE 00248 ! 00249 WHERE (PWATER(:)==1.) 00250 XSSO_ANIS (:) = 1. 00251 XSSO_DIR (:) = 0. 00252 XSSO_SLOPE(:) = 0. 00253 END WHERE 00254 ! 00255 WHERE (PSEA(:)==1.) 00256 XHO2IP(:) = XUNDEF 00257 XHO2IM(:) = XUNDEF 00258 XHO2JP(:) = XUNDEF 00259 XHO2JM(:) = XUNDEF 00260 XAOSIP(:) = XUNDEF 00261 XAOSIM(:) = XUNDEF 00262 XAOSJP(:) = XUNDEF 00263 XAOSJM(:) = XUNDEF 00264 END WHERE 00265 ! 00266 WHERE (PWATER(:)==1.) 00267 XHO2IP(:) = 0. 00268 XHO2IM(:) = 0. 00269 XHO2JP(:) = 0. 00270 XHO2JM(:) = 0. 00271 XAOSIP(:) = 0. 00272 XAOSIM(:) = 0. 00273 XAOSJP(:) = 0. 00274 XAOSJM(:) = 0. 00275 END WHERE 00276 !_______________________________________________________________________________ 00277 DEALLOCATE(ZZS ) 00278 ! 00279 DEALLOCATE(ZAVG_ZS ) 00280 DEALLOCATE(ZSIL_ZS ) 00281 DEALLOCATE(ZSSO_STDEV ) 00282 DEALLOCATE(ZMIN_ZS ) 00283 DEALLOCATE(ZMAX_ZS ) 00284 ! 00285 DEALLOCATE(ZSSO_ANIS ) 00286 DEALLOCATE(ZSSO_DIR ) 00287 DEALLOCATE(ZSSO_SLOPE ) 00288 ! 00289 DEALLOCATE(ZAOSIP ) 00290 DEALLOCATE(ZAOSIM ) 00291 DEALLOCATE(ZAOSJP ) 00292 DEALLOCATE(ZAOSJM ) 00293 DEALLOCATE(ZHO2IP ) 00294 DEALLOCATE(ZHO2IM ) 00295 DEALLOCATE(ZHO2JP ) 00296 DEALLOCATE(ZHO2JM ) 00297 !_______________________________________________________________________________ 00298 CALL CLEAN_PREP_OUTPUT_GRID 00299 !_______________________________________________________________________________ 00300 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_OROGRAPHY',1,ZHOOK_HANDLE) 00301 CONTAINS 00302 ! 00303 SUBROUTINE ZOOM(KLUOUT,PFIELDIN,PFIELDOUT) 00304 INTEGER, INTENT(IN) :: KLUOUT 00305 REAL, DIMENSION(:), POINTER :: PFIELDIN 00306 REAL, DIMENSION(:), INTENT(OUT) :: PFIELDOUT 00307 REAL, DIMENSION(:,:), POINTER :: ZFIELDIN 00308 REAL, DIMENSION(:,:), POINTER :: ZFIELDOUT 00309 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00310 IF (LHOOK) CALL DR_HOOK('ZOOM',0,ZHOOK_HANDLE) 00311 ALLOCATE(ZFIELDIN (SIZE(PFIELDIN, 1),1)) 00312 ALLOCATE(ZFIELDOUT(SIZE(PFIELDOUT,1),1)) 00313 ZFIELDIN(:,1) = PFIELDIN(:) 00314 CALL HOR_INTERPOL(KLUOUT,ZFIELDIN,ZFIELDOUT) 00315 PFIELDOUT(:) = ZFIELDOUT(:,1) 00316 DEALLOCATE(ZFIELDIN ) 00317 DEALLOCATE(ZFIELDOUT) 00318 IF (LHOOK) CALL DR_HOOK('ZOOM',1,ZHOOK_HANDLE) 00319 00320 END SUBROUTINE ZOOM 00321 ! 00322 END SUBROUTINE ZOOM_PGD_OROGRAPHY