SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/zoom_pgd_orography.F90
Go to the documentation of this file.
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