SURFEX v7.3
General documentation of Surfex
|
00001 ! ########################################################### 00002 SUBROUTINE ZOOM_PGD_ISBA_FULL(HPROGRAM,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 !! B. Decharme 2008 XWDRAIN 00034 !! M.Tomasini 17/04/12 All COVER physiographic fields are now 00035 !! interpolated for spawning => 00036 !! ABOR1_SFX if (.NOT.OECOCLIMAP) in comment 00037 !---------------------------------------------------------------------------- 00038 ! 00039 !* 0. DECLARATION 00040 ! ----------- 00041 ! 00042 USE MODD_ISBA_n, ONLY : XCLAY, XSAND, XRUNOFFB, XWDRAIN, & 00043 NGROUND_LAYER 00044 USE MODD_ISBA_GRID_n, ONLY : XLAT, XLON, CGRID, XGRID_PAR, NDIM 00045 USE MODD_PREP, ONLY : CINGRID_TYPE, CINTERP_TYPE, LINTERP 00046 ! 00047 USE MODI_GET_LUOUT 00048 USE MODI_OPEN_AUX_IO_SURF 00049 USE MODI_PREP_GRID_EXTERN 00050 USE MODI_PREP_OUTPUT_GRID 00051 USE MODI_READ_SURF 00052 USE MODI_CLOSE_AUX_IO_SURF 00053 USE MODI_HOR_INTERPOL 00054 USE MODI_GET_TYPE_DIM_n 00055 USE MODI_READ_PGD_ISBA_PAR_n 00056 USE MODI_CLEAN_PREP_OUTPUT_GRID 00057 ! 00058 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00059 USE PARKIND1 ,ONLY : JPRB 00060 ! 00061 IMPLICIT NONE 00062 ! 00063 !* 0.1 Declaration of dummy arguments 00064 ! ------------------------------ 00065 ! 00066 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling 00067 CHARACTER(LEN=28), INTENT(IN) :: HINIFILE ! input atmospheric file name 00068 CHARACTER(LEN=6), INTENT(IN) :: HINIFILETYPE ! input atmospheric file type 00069 ! 00070 !* 0.2 Declaration of local variables 00071 ! ------------------------------ 00072 ! 00073 INTEGER :: IRESP 00074 INTEGER :: ILUOUT 00075 INTEGER :: INI ! total 1D dimension (input grid) 00076 INTEGER :: JLAYER ! loop counter 00077 REAL, DIMENSION(:), ALLOCATABLE :: ZFIELD ! field read 00078 REAL, DIMENSION(:,:), POINTER :: ZSAND ! sand on all surface points 00079 REAL, DIMENSION(:,:), POINTER :: ZCLAY ! clay on all surface points 00080 REAL, DIMENSION(:,:), POINTER :: ZRUNOFFB! runoff coef. on all surface points 00081 REAL, DIMENSION(:,:), POINTER :: ZWDRAIN ! drainage coef. on all surface points 00082 REAL, DIMENSION(:,:), ALLOCATABLE :: ZOUTB ! runoff coef. on all surface points 00083 REAL, DIMENSION(:,:), ALLOCATABLE :: ZOUTW ! drainage coef. on all surface points 00084 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00085 !------------------------------------------------------------------------------ 00086 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_ISBA_FULL',0,ZHOOK_HANDLE) 00087 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00088 ! 00089 !* 1. Preparation of IO for reading in the file 00090 ! ----------------------------------------- 00091 ! 00092 !* Note that all points are read, even those without physical meaning. 00093 ! These points will not be used during the horizontal interpolation step. 00094 ! Their value must be defined as XUNDEF. 00095 ! 00096 CALL OPEN_AUX_IO_SURF(HINIFILE,HINIFILETYPE,'FULL ') 00097 ! 00098 !------------------------------------------------------------------------------ 00099 ! 00100 !* 2. Reading of grid 00101 ! --------------- 00102 ! 00103 CALL PREP_GRID_EXTERN(HINIFILETYPE,ILUOUT,CINGRID_TYPE,CINTERP_TYPE,INI) 00104 ! 00105 CALL PREP_OUTPUT_GRID(ILUOUT,CGRID,XGRID_PAR,XLAT,XLON) 00106 ! 00107 !------------------------------------------------------------------------------ 00108 ! 00109 !* 3. Reading of fields 00110 ! ----------------- 00111 ! 00112 ! 00113 ALLOCATE(ZFIELD(INI)) 00114 ! 00115 ALLOCATE(ZSAND(INI,NGROUND_LAYER)) 00116 CALL READ_SURF(HPROGRAM,'SAND',ZFIELD,IRESP,HDIR='A') 00117 DO JLAYER=1,NGROUND_LAYER 00118 ZSAND(:,JLAYER) = ZFIELD(:) 00119 END DO 00120 ! 00121 ALLOCATE(ZCLAY(INI,NGROUND_LAYER)) 00122 CALL READ_SURF(HPROGRAM,'CLAY',ZFIELD,IRESP,HDIR='A') 00123 DO JLAYER=1,NGROUND_LAYER 00124 ZCLAY(:,JLAYER) = ZFIELD(:) 00125 END DO 00126 ! 00127 ALLOCATE(ZRUNOFFB(INI,1)) 00128 CALL READ_SURF(HPROGRAM,'RUNOFFB',ZFIELD,IRESP,HDIR='A') 00129 ZRUNOFFB(:,1) = ZFIELD(:) 00130 ! 00131 ALLOCATE(ZWDRAIN(INI,1)) 00132 CALL READ_SURF(HPROGRAM,'WDRAIN',ZFIELD,IRESP,HDIR='A') 00133 ZWDRAIN(:,1) = ZFIELD(:) 00134 ! 00135 DEALLOCATE(ZFIELD) 00136 ! 00137 !------------------------------------------------------------------------------ 00138 ! 00139 !* 4. Interpolations 00140 ! -------------- 00141 ! 00142 !* mask where interpolations must be done 00143 ! 00144 LINTERP(:) = .TRUE. 00145 ! 00146 !* interpolations 00147 ! 00148 CALL HOR_INTERPOL(ILUOUT,ZSAND,XSAND) 00149 CALL HOR_INTERPOL(ILUOUT,ZCLAY,XCLAY) 00150 ALLOCATE(ZOUTB(SIZE(XRUNOFFB),1)) 00151 CALL HOR_INTERPOL(ILUOUT,ZRUNOFFB,ZOUTB) 00152 XRUNOFFB(:) = ZOUTB(:,1) 00153 DEALLOCATE(ZOUTB) 00154 ALLOCATE(ZOUTW(SIZE(XWDRAIN),1)) 00155 CALL HOR_INTERPOL(ILUOUT,ZWDRAIN,ZOUTW) 00156 XWDRAIN(:) = ZOUTW(:,1) 00157 DEALLOCATE(ZOUTW) 00158 ! 00159 CALL GET_TYPE_DIM_n('NATURE',NDIM) 00160 CALL READ_PGD_ISBA_PAR_n(HPROGRAM,INI,.FALSE.,HDIR='A') 00161 ! 00162 CALL CLOSE_AUX_IO_SURF(HINIFILE,HINIFILETYPE) 00163 ! 00164 CALL CLEAN_PREP_OUTPUT_GRID 00165 IF (LHOOK) CALL DR_HOOK('ZOOM_PGD_ISBA_FULL',1,ZHOOK_HANDLE) 00166 !------------------------------------------------------------------------------ 00167 ! 00168 END SUBROUTINE ZOOM_PGD_ISBA_FULL