SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/zoom_pgd_isba.F90
Go to the documentation of this file.
00001 !     ###########################################################
00002       SUBROUTINE ZOOM_PGD_ISBA(HPROGRAM,HINIFILE,HINIFILETYPE,HFILE,HFILETYPE,OECOCLIMAP)
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 !!    B. Decharme      2008  XWDRAIN
00034 !!    M.Tomasini    17/04/12  Add interpolation for ISBA variables (MODD_DATA_ISBA_n)
00035 !----------------------------------------------------------------------------
00036 !
00037 !*    0.     DECLARATION
00038 !            -----------
00039 !
00040 USE MODD_SURF_PAR, ONLY : XUNDEF
00041 USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
00042 USE MODD_ISBA_n,         ONLY : NPATCH, NGROUND_LAYER, CISBA,            &
00043                                   CPEDOTF, XCOVER, LCOVER, XZS,          &
00044                                   XZ0EFFJPDIR, CPHOTO,                   &
00045                                   XSAND, XCLAY, XRUNOFFB, XWDRAIN,       &
00046                                   LECOCLIMAP  
00047 USE MODD_ISBA_GRID_n,    ONLY : CGRID, XGRID_PAR, XLAT, XLON, XMESH_SIZE
00048 USE MODD_PREP,           ONLY : CINGRID_TYPE, CINTERP_TYPE
00049 !
00050 USE MODI_GET_LUOUT
00051 USE MODI_OPEN_AUX_IO_SURF
00052 USE MODI_READ_SURF
00053 USE MODI_CLOSE_AUX_IO_SURF
00054 USE MODI_GET_SURF_SIZE_n
00055 USE MODI_PACK_PGD
00056 USE MODI_ZOOM_PGD_ISBA_FULL
00057 USE MODI_GET_AOS_n
00058 USE MODI_GET_SSO_n
00059 USE MODI_PACK_PGD_ISBA
00060 !
00061 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00062 USE PARKIND1  ,ONLY : JPRB
00063 !
00064 IMPLICIT NONE
00065 !
00066 !*    0.1    Declaration of dummy arguments
00067 !            ------------------------------
00068 !
00069  CHARACTER(LEN=6),     INTENT(IN)  :: HPROGRAM    ! program calling
00070  CHARACTER(LEN=28),    INTENT(IN)  :: HINIFILE    ! input atmospheric file name
00071  CHARACTER(LEN=6),     INTENT(IN)  :: HINIFILETYPE! input atmospheric file type
00072  CHARACTER(LEN=28),    INTENT(IN)  :: HFILE       ! output file name
00073  CHARACTER(LEN=6),     INTENT(IN)  :: HFILETYPE   ! output file type
00074 LOGICAL,              INTENT(IN)  :: OECOCLIMAP  ! flag to use ecoclimap
00075 !
00076 !
00077 !*    0.2    Declaration of local variables
00078 !            ------------------------------
00079 !
00080 INTEGER :: IVERSION
00081 INTEGER :: IRESP
00082 INTEGER :: ILUOUT
00083 INTEGER :: IL      ! total 1D dimension (output grid, total surface)
00084 INTEGER :: ILU     ! total 1D dimension (output grid, ISBA points only)
00085 REAL, DIMENSION(:), ALLOCATABLE   :: ZAOSIP    ! A/S i+ on all surface points
00086 REAL, DIMENSION(:), ALLOCATABLE   :: ZAOSIM    ! A/S i- on all surface points
00087 REAL, DIMENSION(:), ALLOCATABLE   :: ZAOSJP    ! A/S j+ on all surface points
00088 REAL, DIMENSION(:), ALLOCATABLE   :: ZAOSJM    ! A/S j- on all surface points
00089 REAL, DIMENSION(:), ALLOCATABLE   :: ZHO2IP    ! h/2 i+ on all surface points
00090 REAL, DIMENSION(:), ALLOCATABLE   :: ZHO2IM    ! h/2 i- on all surface points
00091 REAL, DIMENSION(:), ALLOCATABLE   :: ZHO2JP    ! h/2 j+ on all surface points
00092 REAL, DIMENSION(:), ALLOCATABLE   :: ZHO2JM    ! h/2 j- on all surface points
00093 REAL, DIMENSION(:), ALLOCATABLE   :: ZSSO_SLOPE! subgrid slope on all surface points
00094 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00095 !------------------------------------------------------------------------------
00096 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_ISBA',0,ZHOOK_HANDLE)
00097  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00098 !
00099 !*      1.     Preparation of IO for reading in the file
00100 !              -----------------------------------------
00101 !
00102 !* Note that all points are read, even those without physical meaning.
00103 !  These points will not be used during the horizontal interpolation step.
00104 !  Their value must be defined as XUNDEF.
00105 !
00106  CALL OPEN_AUX_IO_SURF(HINIFILE,HINIFILETYPE,'FULL  ')
00107 !
00108  CALL READ_SURF(HINIFILETYPE,'VERSION',IVERSION,IRESP)
00109  CALL READ_SURF(HINIFILETYPE,'PATCH_NUMBER',NPATCH,IRESP)
00110  CALL READ_SURF(HINIFILETYPE,'GROUND_LAYER',NGROUND_LAYER,IRESP)
00111  CALL READ_SURF(HINIFILETYPE,'ISBA',CISBA,IRESP)
00112 IF (IVERSION >= 7) THEN
00113   CALL READ_SURF(HINIFILETYPE,'PEDOTF',CPEDOTF,IRESP)
00114 ELSE
00115   CPEDOTF = 'CH78'
00116 ENDIF
00117  CALL READ_SURF(HINIFILETYPE,'PHOTO',CPHOTO,IRESP)
00118 !
00119  CALL CLOSE_AUX_IO_SURF(HINIFILE,HINIFILETYPE)
00120 !
00121 !------------------------------------------------------------------------------
00122 LECOCLIMAP = OECOCLIMAP
00123 !
00124 !-------------------------------------------------------------------------------
00125 !
00126 !*    7.      Number of points and packing of general fields
00127 !             ----------------------------------------------
00128 !
00129 !
00130  CALL GET_SURF_SIZE_n('NATURE',ILU)
00131 !
00132 ALLOCATE(LCOVER     (JPCOVER))
00133 ALLOCATE(XCOVER     (ILU,JPCOVER))
00134 ALLOCATE(XZS        (ILU))
00135 ALLOCATE(XLAT       (ILU))
00136 ALLOCATE(XLON       (ILU))
00137 ALLOCATE(XMESH_SIZE (ILU))
00138 ALLOCATE(XZ0EFFJPDIR(ILU))
00139 !
00140  CALL PACK_PGD(HPROGRAM, 'NATURE',                    &
00141                 CGRID,  XGRID_PAR,                     &
00142                 LCOVER, XCOVER, XZS,                   &
00143                 XLAT, XLON, XMESH_SIZE, XZ0EFFJPDIR    )  
00144 !
00145 !------------------------------------------------------------------------------
00146 !
00147 !*      3.     Reading of sand, clay, runoffb, wdrain and interpolations
00148 !              --------------------------------------------------
00149 !
00150 ALLOCATE(XSAND(ILU,NGROUND_LAYER))
00151 ALLOCATE(XCLAY(ILU,NGROUND_LAYER))
00152 ALLOCATE(XRUNOFFB(ILU))
00153 ALLOCATE(XWDRAIN (ILU))
00154  CALL ZOOM_PGD_ISBA_FULL(HPROGRAM,HINIFILE,HINIFILETYPE)
00155 !
00156 !-------------------------------------------------------------------------------
00157 !
00158 !*    8.      Packing of ISBA specific fields
00159 !             -------------------------------
00160 !
00161  CALL GET_SURF_SIZE_n('FULL  ',IL)
00162 !
00163 ALLOCATE(ZAOSIP(IL))
00164 ALLOCATE(ZAOSIM(IL))
00165 ALLOCATE(ZAOSJP(IL))
00166 ALLOCATE(ZAOSJM(IL))
00167 ALLOCATE(ZHO2IP(IL))
00168 ALLOCATE(ZHO2IM(IL))
00169 ALLOCATE(ZHO2JP(IL))
00170 ALLOCATE(ZHO2JM(IL))
00171 ALLOCATE(ZSSO_SLOPE(IL))
00172 
00173  CALL GET_AOS_n(HPROGRAM,IL,ZAOSIP,ZAOSIM,ZAOSJP,ZAOSJM,ZHO2IP,ZHO2IM,ZHO2JP,ZHO2JM)
00174  CALL GET_SSO_n(HPROGRAM,IL,ZSSO_SLOPE)
00175 
00176  CALL PACK_PGD_ISBA(HPROGRAM,                                    &
00177                      ZAOSIP, ZAOSIM, ZAOSJP, ZAOSJM,              &
00178                      ZHO2IP, ZHO2IM, ZHO2JP, ZHO2JM,              &
00179                      ZSSO_SLOPE                                   )  
00180 !
00181 DEALLOCATE(ZAOSIP)
00182 DEALLOCATE(ZAOSIM)
00183 DEALLOCATE(ZAOSJP)
00184 DEALLOCATE(ZAOSJM)
00185 DEALLOCATE(ZHO2IP)
00186 DEALLOCATE(ZHO2IM)
00187 DEALLOCATE(ZHO2JP)
00188 DEALLOCATE(ZHO2JM)
00189 DEALLOCATE(ZSSO_SLOPE)
00190 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_ISBA',1,ZHOOK_HANDLE)
00191 !-------------------------------------------------------------------------------
00192 !
00193 END SUBROUTINE ZOOM_PGD_ISBA