SURFEX v7.3
General documentation of Surfex
|
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