SURFEX v7.3
General documentation of Surfex
|
00001 ! ######################### 00002 SUBROUTINE READ_BLD_DESCRIPTION(HPROGRAM) 00003 ! ######################### 00004 ! 00005 !! 00006 !! PURPOSE 00007 !! ------- 00008 !! 00009 !! METHOD 00010 !! ------ 00011 !! 00012 !! 00013 !! EXTERNAL 00014 !! -------- 00015 !! 00016 !! IMPLICIT ARGUMENTS 00017 !! ------------------ 00018 !! 00019 !! REFERENCE 00020 !! --------- 00021 !! 00022 !! AUTHOR 00023 !! ------ 00024 !! 00025 !! V. Masson Meteo-France 00026 !! 00027 !! MODIFICATION 00028 !! ------------ 00029 !! 00030 !! Original 05/2012 00031 ! 00032 !---------------------------------------------------------------------------- 00033 ! 00034 !* 0. DECLARATION 00035 ! ----------- 00036 ! 00037 USE MODD_BLD_DESCRIPTION 00038 ! 00039 USE MODI_READ_SURF 00040 USE MODI_ABOR1_SFX 00041 ! 00042 ! 00043 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00044 USE PARKIND1 ,ONLY : JPRB 00045 ! 00046 IMPLICIT NONE 00047 ! 00048 !* 0.1 Declaration of arguments 00049 ! ------------------------ 00050 ! 00051 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM 00052 ! 00053 ! 00054 !* 0.2 Declaration of local variables 00055 ! ------------------------------ 00056 ! 00057 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00058 ! 00059 REAL, DIMENSION(:), ALLOCATABLE :: ZWORK 00060 INTEGER :: IRESP 00061 INTEGER :: I1, I2 00062 INTEGER :: JL 00063 INTEGER :: ITOT 00064 !------------------------------------------------------------------------------- 00065 !------------------------------------------------------------------------------- 00066 ! 00067 IF (LHOOK) CALL DR_HOOK('READ_BLD_DESCRIPTION',0,ZHOOK_HANDLE) 00068 ! 00069 !------------------------------------------------------------------------------- 00070 ! 00071 !* 1. Read configuration variables of the descriptive data 00072 ! ---------------------------------------------------- 00073 ! 00074 ALLOCATE(ZWORK(7)) 00075 CALL READ_SURF(HPROGRAM,'BLD_DESC_CONF',ZWORK,IRESP,HDIR='-') 00076 ! 00077 NDESC_BLD = NINT(ZWORK(1)) 00078 NDESC_AGE = NINT(ZWORK(2)) 00079 NDESC_USE = NINT(ZWORK(3)) 00080 NDESC_WALL_LAYER = NINT(ZWORK(4)) 00081 NDESC_ROOF_LAYER = NINT(ZWORK(5)) 00082 NDESC_ROAD_LAYER = NINT(ZWORK(6)) 00083 NDESC_FLOOR_LAYER = NINT(ZWORK(7)) 00084 ! 00085 DEALLOCATE(ZWORK) 00086 ! 00087 NDESC_CODE = NDESC_BLD * NDESC_AGE 00088 !------------------------------------------------------------------------------- 00089 ! 00090 !* 2. Allocates descriptive data 00091 ! -------------------------- 00092 ! 00093 ! 00094 ALLOCATE(NDESC_BLD_LIST(NDESC_BLD)) 00095 ALLOCATE(NDESC_CODE_LIST(NDESC_CODE)) 00096 ALLOCATE(XDESC_ALB_ROOF(NDESC_CODE)) 00097 ALLOCATE(XDESC_ALB_ROAD(NDESC_CODE)) 00098 ALLOCATE(XDESC_ALB_WALL(NDESC_CODE)) 00099 ALLOCATE(XDESC_EMIS_ROOF(NDESC_CODE)) 00100 ALLOCATE(XDESC_EMIS_ROAD(NDESC_CODE)) 00101 ALLOCATE(XDESC_EMIS_WALL(NDESC_CODE)) 00102 ALLOCATE(XDESC_HC_ROOF(NDESC_CODE,NDESC_ROOF_LAYER)) 00103 ALLOCATE(XDESC_TC_ROOF(NDESC_CODE,NDESC_ROOF_LAYER)) 00104 ALLOCATE(XDESC_D_ROOF (NDESC_CODE,NDESC_ROOF_LAYER)) 00105 ALLOCATE(XDESC_HC_ROAD(NDESC_CODE,NDESC_ROAD_LAYER)) 00106 ALLOCATE(XDESC_TC_ROAD(NDESC_CODE,NDESC_ROAD_LAYER)) 00107 ALLOCATE(XDESC_D_ROAD (NDESC_CODE,NDESC_ROAD_LAYER)) 00108 ALLOCATE(XDESC_HC_WALL(NDESC_CODE,NDESC_WALL_LAYER)) 00109 ALLOCATE(XDESC_TC_WALL(NDESC_CODE,NDESC_WALL_LAYER)) 00110 ALLOCATE(XDESC_D_WALL (NDESC_CODE,NDESC_WALL_LAYER)) 00111 ALLOCATE(XDESC_HC_FLOOR(NDESC_CODE,NDESC_FLOOR_LAYER)) 00112 ALLOCATE(XDESC_TC_FLOOR(NDESC_CODE,NDESC_FLOOR_LAYER)) 00113 ALLOCATE(XDESC_D_FLOOR (NDESC_CODE,NDESC_FLOOR_LAYER)) 00114 ALLOCATE(XDESC_SHGC(NDESC_CODE)) 00115 ALLOCATE(XDESC_U_WIN(NDESC_CODE)) 00116 ALLOCATE(XDESC_GR(NDESC_CODE)) 00117 ! 00118 ALLOCATE(XDESC_F_WASTE_CAN(NDESC_CODE)) 00119 ALLOCATE(XDESC_F_WATER_COND(NDESC_CODE)) 00120 ALLOCATE(XDESC_COP_RAT(NDESC_CODE)) 00121 ALLOCATE(XDESC_EFF_HEAT(NDESC_CODE)) 00122 ALLOCATE(XDESC_INF(NDESC_CODE)) 00123 ALLOCATE(XDESC_V_VENT(NDESC_CODE)) 00124 ALLOCATE(XDESC_GREENROOF(NDESC_CODE)) 00125 ! 00126 ! 00127 ALLOCATE(NDESC_USE_LIST(NDESC_USE)) 00128 ALLOCATE(XDESC_TCOOL_TARGET(NDESC_USE)) 00129 ALLOCATE(XDESC_THEAT_TARGET(NDESC_USE)) 00130 ALLOCATE(XDESC_QIN(NDESC_USE)) 00131 ALLOCATE(XDESC_QIN_FLAT(NDESC_USE)) 00132 ALLOCATE(XDESC_SHGC_SH(NDESC_USE)) 00133 ALLOCATE(XDESC_SHADE(NDESC_USE)) 00134 ALLOCATE(XDESC_NATVENT(NDESC_USE)) 00135 ! 00136 ALLOCATE(NDESC_AGE_LIST(NDESC_AGE)) 00137 ALLOCATE(NDESC_AGE_DATE(NDESC_AGE)) 00138 !------------------------------------------------------------------------------- 00139 ! 00140 !* 3. Read descriptive data 00141 ! --------------------- 00142 ! 00143 ITOT=(17+3*NDESC_ROOF_LAYER+3*NDESC_ROAD_LAYER+3*NDESC_WALL_LAYER+3*NDESC_FLOOR_LAYER)*NDESC_CODE & 00144 + 8*NDESC_USE + 2*NDESC_AGE + NDESC_BLD 00145 ALLOCATE(ZWORK(ITOT)) 00146 ! 00147 CALL READ_SURF(HPROGRAM,'BLD_DESC_DATA',ZWORK,IRESP,HDIR='-') 00148 ! 00149 ! 00150 I1=0 ; I2=0 00151 CALL UP_DESC_IND(NDESC_BLD) ; NDESC_BLD_LIST(:) = NINT(ZWORK(I1:I2)) 00152 CALL UP_DESC_IND(NDESC_CODE) ; NDESC_CODE_LIST(:) = NINT(ZWORK(I1:I2)) 00153 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_ALB_ROOF(:) = ZWORK(I1:I2) 00154 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_ALB_ROAD(:) = ZWORK(I1:I2) 00155 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_ALB_WALL(:) = ZWORK(I1:I2) 00156 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_EMIS_ROOF(:) = ZWORK(I1:I2) 00157 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_EMIS_ROAD(:) = ZWORK(I1:I2) 00158 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_EMIS_WALL(:) = ZWORK(I1:I2) 00159 DO JL=1,NDESC_ROOF_LAYER 00160 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_HC_ROOF(:,JL) = ZWORK(I1:I2) 00161 END DO 00162 DO JL=1,NDESC_ROOF_LAYER 00163 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_TC_ROOF(:,JL) = ZWORK(I1:I2) 00164 END DO 00165 DO JL=1,NDESC_ROOF_LAYER 00166 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_D_ROOF (:,JL) = ZWORK(I1:I2) 00167 END DO 00168 DO JL=1,NDESC_ROAD_LAYER 00169 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_HC_ROAD(:,JL) = ZWORK(I1:I2) 00170 END DO 00171 DO JL=1,NDESC_ROAD_LAYER 00172 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_TC_ROAD(:,JL) = ZWORK(I1:I2) 00173 END DO 00174 DO JL=1,NDESC_ROAD_LAYER 00175 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_D_ROAD (:,JL) = ZWORK(I1:I2) 00176 END DO 00177 DO JL=1,NDESC_WALL_LAYER 00178 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_HC_WALL(:,JL) = ZWORK(I1:I2) 00179 END DO 00180 DO JL=1,NDESC_WALL_LAYER 00181 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_TC_WALL(:,JL) = ZWORK(I1:I2) 00182 END DO 00183 DO JL=1,NDESC_WALL_LAYER 00184 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_D_WALL (:,JL) = ZWORK(I1:I2) 00185 END DO 00186 DO JL=1,NDESC_FLOOR_LAYER 00187 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_HC_FLOOR(:,JL) = ZWORK(I1:I2) 00188 END DO 00189 DO JL=1,NDESC_FLOOR_LAYER 00190 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_TC_FLOOR(:,JL) = ZWORK(I1:I2) 00191 END DO 00192 DO JL=1,NDESC_FLOOR_LAYER 00193 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_D_FLOOR (:,JL) = ZWORK(I1:I2) 00194 END DO 00195 ! 00196 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_SHGC(:) = ZWORK(I1:I2) 00197 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_U_WIN(:) = ZWORK(I1:I2) 00198 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_GR(:) = ZWORK(I1:I2) 00199 ! 00200 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_F_WASTE_CAN(:) = ZWORK(I1:I2) 00201 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_F_WATER_COND(:) = ZWORK(I1:I2) 00202 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_COP_RAT(:) = ZWORK(I1:I2) 00203 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_EFF_HEAT(:) = ZWORK(I1:I2) 00204 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_INF(:) = ZWORK(I1:I2) 00205 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_V_VENT(:) = ZWORK(I1:I2) 00206 CALL UP_DESC_IND(NDESC_CODE) ; XDESC_GREENROOF(:) = ZWORK(I1:I2) 00207 ! 00208 CALL UP_DESC_IND(NDESC_USE) ; NDESC_USE_LIST(:) = NINT(ZWORK(I1:I2)) 00209 CALL UP_DESC_IND(NDESC_USE) ; XDESC_TCOOL_TARGET(:) = ZWORK(I1:I2) 00210 CALL UP_DESC_IND(NDESC_USE) ; XDESC_THEAT_TARGET(:) = ZWORK(I1:I2) 00211 CALL UP_DESC_IND(NDESC_USE) ; XDESC_QIN(:) = ZWORK(I1:I2) 00212 CALL UP_DESC_IND(NDESC_USE) ; XDESC_QIN_FLAT(:) = ZWORK(I1:I2) 00213 CALL UP_DESC_IND(NDESC_USE) ; XDESC_SHGC_SH(:) = ZWORK(I1:I2) 00214 CALL UP_DESC_IND(NDESC_USE) ; XDESC_SHADE(:) = ZWORK(I1:I2) 00215 CALL UP_DESC_IND(NDESC_USE) ; XDESC_NATVENT(:) = ZWORK(I1:I2) 00216 ! 00217 CALL UP_DESC_IND(NDESC_AGE) ; NDESC_AGE_LIST(:) = NINT(ZWORK(I1:I2)) 00218 CALL UP_DESC_IND(NDESC_AGE) ; NDESC_AGE_DATE(:) = NINT(ZWORK(I1:I2)) 00219 ! 00220 DEALLOCATE(ZWORK) 00221 ! 00222 IF (LHOOK) CALL DR_HOOK('READ_BLD_DESCRIPTION',1,ZHOOK_HANDLE) 00223 !------------------------------------------------------------------------------- 00224 CONTAINS 00225 SUBROUTINE UP_DESC_IND(K) 00226 INTEGER, INTENT(IN) :: K 00227 I1=I2+1 00228 I2=I2+K 00229 END SUBROUTINE UP_DESC_IND 00230 !------------------------------------------------------------------------------- 00231 ! 00232 END SUBROUTINE READ_BLD_DESCRIPTION