SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_csvdata_teb.F90
Go to the documentation of this file.
00001 !     #########################
00002       SUBROUTINE READ_CSVDATA_TEB(HPROGRAM,HFILE)
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_CSTS,     ONLY : XTT
00038 USE MODD_SURF_PAR, ONLY : XUNDEF
00039 USE MODD_TEB_n, ONLY : NROOF_LAYER, NWALL_LAYER, NROAD_LAYER
00040 USE MODD_BEM_n, ONLY : NFLOOR_LAYER
00041 !
00042 USE MODD_BLD_DESCRIPTION
00043 !
00044 USE MODI_OPEN_NAMELIST
00045 USE MODI_CLOSE_NAMELIST
00046 !
00047 USE MODI_GET_LUOUT
00048 USE MODI_ABOR1_SFX
00049 !
00050 !
00051 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00052 USE PARKIND1  ,ONLY : JPRB
00053 !
00054 IMPLICIT NONE
00055 !
00056 !*    0.1    Declaration of arguments
00057 !            ------------------------
00058 !
00059  CHARACTER(LEN=6),  INTENT(IN) :: HPROGRAM
00060  CHARACTER(LEN=28), INTENT(IN) :: HFILE    ! file to read
00061 !
00062 !
00063 !*    0.2    Declaration of local variables
00064 !      ------------------------------
00065 !
00066 INTEGER            :: ILUNAM       ! logical unit of the file
00067 INTEGER            :: ILUOUT       ! logical unit of the output listing file
00068  CHARACTER(LEN=400) :: YSTRING
00069  CHARACTER(LEN=80)  :: YSTRING1, YSTRING2, YSTRING3, YSTRING4, 
00070                       YSTRING5, YSTRING6, YSTRING7, YSTRING8, YSTRING9
00071  CHARACTER(LEN=30), DIMENSION(:),   ALLOCATABLE :: YUSE_NAME ! building's use name
00072  CHARACTER(LEN=30), DIMENSION(:),   ALLOCATABLE :: YBLD_NAME ! building name
00073  CHARACTER(LEN=30), DIMENSION(:),   ALLOCATABLE :: YLAYER    ! name of layer
00074 INTEGER            :: I1
00075 INTEGER            :: I2
00076 INTEGER            :: JBLD                ! loop counter on buildings
00077 INTEGER            :: JAGE                ! loop counter on building's ages
00078 INTEGER            :: JLAYER              ! loop counter on layers
00079 INTEGER            :: IINDEX              ! index in descriptive data arrays
00080 !
00081 INTEGER            :: IALL_HYP            ! number of hypotheses for equipment
00082 INTEGER            :: IHYP                ! kept hypothese for equipment
00083  CHARACTER(LEN=10)  :: YTYPE_OF_DATA       ! 'STRUCTURE', 'EQUIPMENT'
00084 !
00085 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00086 !
00087 !-------------------------------------------------------------------------------
00088 !-------------------------------------------------------------------------------
00089 !
00090 IF (LHOOK) CALL DR_HOOK('READ_CSVDATA_TEB',0,ZHOOK_HANDLE)
00091 !
00092 !-------------------------------------------------------------------------------
00093 IF (LEN_TRIM(HFILE)==0) THEN
00094   IF (LHOOK) CALL DR_HOOK('READ_CSVDATA_TEB',1,ZHOOK_HANDLE)
00095   RETURN
00096 END IF
00097 !
00098  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00099 !
00100 !-------------------------------------------------------------------------------
00101 !
00102 !*    1.     Opens the file
00103 !      --------------------
00104 !
00105  CALL OPEN_NAMELIST(HPROGRAM,ILUNAM,HFILE)
00106 !
00107 !-------------------------------------------------------------------------------
00108 !
00109 !*    2.1    Reads the number of building types and of construction dates
00110 !            ------------------------------------------------------------
00111 !
00112  CALL READ_CONF_IN_CSVFILE("Nb de types de batiments",NDESC_BLD)
00113  CALL READ_CONF_IN_CSVFILE("Nb de plages de dates",NDESC_AGE)
00114  CALL READ_CONF_IN_CSVFILE("Nb de types d_usages",NDESC_USE)
00115 !
00116 NDESC_CODE = NDESC_BLD * NDESC_AGE
00117 !
00118 !*    2.2    Reads the number of layers for description of the surfaces
00119 !            ----------------------------------------------------------
00120 !
00121  CALL READ_CONF_IN_CSVFILE("Nb de couches MUR",NDESC_WALL_LAYER)
00122  CALL READ_CONF_IN_CSVFILE("Nb de couches TOITURE",NDESC_ROOF_LAYER)
00123  CALL READ_CONF_IN_CSVFILE("Nb de couches PLANCHER",NDESC_FLOOR_LAYER)
00124 !
00125 !-------------------------------------------------------------------------------
00126 !
00127 !*    3.     Reads the codes of the building construction (or renovation) dates
00128 !            ------------------------------------------------------------------
00129 !
00130 ALLOCATE(NDESC_AGE_LIST(NDESC_AGE))
00131 ALLOCATE(NDESC_AGE_DATE(NDESC_AGE))
00132 !
00133 DO
00134   YSTRING1=' '
00135   YSTRING2=' '
00136   YSTRING3=' '
00137   YSTRING4=' '
00138   YSTRING5=' '
00139   YSTRING6=' '
00140 !* reads the record
00141   READ(ILUNAM,END=98,FMT='(A400)') YSTRING
00142 !* analyses if the record has been written in French convention 
00143   CALL FRENCH_TO_ENGLISH(YSTRING)
00144 !* reads the string
00145   IF (LEN_TRIM(YSTRING)>0) &
00146   READ(YSTRING,FMT=*) YSTRING1, YSTRING2, YSTRING3, YSTRING4, YSTRING5, YSTRING6
00147   IF (YSTRING1=='DATE' .AND. YSTRING2(4:)=='plage de date') THEN
00148     READ(YSTRING,FMT=*) YSTRING1, YSTRING2, NDESC_AGE_LIST(:)
00149   END IF
00150   IF (YSTRING1=='DATE' .AND. YSTRING2(:)=='Date maximum') THEN
00151     READ(YSTRING,FMT=*) YSTRING1, YSTRING2, NDESC_AGE_DATE(:)
00152   END IF
00153 END DO
00154 !
00155 98 REWIND(ILUNAM)
00156 !
00157 !
00158 !
00159 !-------------------------------------------------------------------------------
00160 !
00161 !*    3.     Reads the codes of the building and building's use types
00162 !            --------------------------------------------------------
00163 !
00164 ALLOCATE(YBLD_NAME(NDESC_BLD))
00165 ALLOCATE(YUSE_NAME(NDESC_USE))
00166 !
00167 ALLOCATE(NDESC_BLD_LIST(NDESC_BLD))
00168 ALLOCATE(NDESC_CODE_LIST(NDESC_CODE))
00169 ALLOCATE(NDESC_USE_LIST(NDESC_USE))
00170 !
00171 DO
00172   YSTRING1=' '
00173   YSTRING2=' '
00174   YSTRING3=' '
00175   YSTRING4=' '
00176   YSTRING5=' '
00177   YSTRING6=' '
00178 !* reads the record
00179   READ(ILUNAM,END=99,FMT='(A400)') YSTRING
00180 !* analyses if the record has been written in French convention 
00181   CALL FRENCH_TO_ENGLISH(YSTRING)
00182 !* reads the string
00183   IF (LEN_TRIM(YSTRING)>0) &
00184   READ(YSTRING,FMT=*) YSTRING1, YSTRING2, YSTRING3, YSTRING4, YSTRING5, YSTRING6
00185 
00186   IF (YSTRING1=='TYPES USAGES' .AND. YSTRING4=='TYPES BATIMENTS') THEN
00187     ! reads both use and building types
00188     DO JBLD=1,MAX(NDESC_BLD,NDESC_USE)
00189       READ(ILUNAM,FMT='(A400)') YSTRING
00190       CALL FRENCH_TO_ENGLISH(YSTRING)
00191       READ(YSTRING,FMT=*) YSTRING1, I1, YSTRING3, YSTRING4, I2, YSTRING6
00192     ! updates building types
00193       IF (JBLD<=NDESC_BLD) THEN
00194         YBLD_NAME(JBLD) = YSTRING4
00195         NDESC_BLD_LIST(JBLD) = I2
00196         DO JAGE=1,NDESC_AGE
00197           IINDEX = (JBLD-1)*NDESC_AGE + JAGE
00198           NDESC_CODE_LIST(IINDEX) = BLD_CODE(NDESC_BLD_LIST(JBLD),NDESC_AGE_LIST(JAGE))
00199         END DO
00200       END IF
00201     ! updates building's use types
00202       IF (JBLD<=NDESC_USE) THEN
00203         YUSE_NAME     (JBLD) = YSTRING1
00204         NDESC_USE_LIST(JBLD) = I1
00205       END IF
00206     END DO
00207     EXIT
00208   END IF
00209 END DO
00210 !
00211 99 REWIND(ILUNAM)
00212 !
00213 !------------------------------------------------------------------------------
00214 !
00215 !*    4.     town parameters depending on building structure descriptions
00216 !      ------------------------------------------------------------------
00217 !
00218 YTYPE_OF_DATA = 'STRUCTURE'
00219 !
00220 !* radiative properties
00221 !
00222 ALLOCATE(XDESC_ALB_ROOF(NDESC_CODE))
00223  CALL READ_IN_CSVFILE('TOITURE',YBLD_NAME,"Exterieur",'Albedo',XDESC_ALB_ROOF)
00224 
00225 ALLOCATE(XDESC_ALB_WALL(NDESC_CODE))
00226  CALL READ_IN_CSVFILE('MUR',YBLD_NAME,"Couche 1 (Ext)",'Albedo',XDESC_ALB_WALL)
00227 
00228 ALLOCATE(XDESC_EMIS_ROOF(NDESC_CODE))
00229  CALL READ_IN_CSVFILE('TOITURE',YBLD_NAME,"Exterieur",'Emissivite',XDESC_EMIS_ROOF)
00230 
00231 ALLOCATE(XDESC_EMIS_WALL(NDESC_CODE))
00232  CALL READ_IN_CSVFILE('MUR',YBLD_NAME,"Couche 1 (Ext)",'Emissivite',XDESC_EMIS_WALL)
00233 !
00234 !* thermal properties for roof
00235 !
00236 ALLOCATE(YLAYER(NDESC_ROOF_LAYER))
00237 DO JLAYER=1,NDESC_ROOF_LAYER
00238   IF (JLAYER==1) THEN
00239     WRITE(YLAYER(JLAYER),FMT='(A)') 'Exterieur '
00240   ELSEIF (JLAYER==NDESC_ROOF_LAYER) THEN
00241     WRITE(YLAYER(JLAYER),FMT='(A)') 'Interieur '
00242   ELSE
00243     WRITE(YLAYER(JLAYER),FMT='(A)') 'Milieu '
00244   END IF
00245 END DO
00246 !
00247 ALLOCATE(XDESC_HC_ROOF(NDESC_CODE,NDESC_ROOF_LAYER))
00248 ALLOCATE(XDESC_TC_ROOF(NDESC_CODE,NDESC_ROOF_LAYER))
00249 ALLOCATE(XDESC_D_ROOF (NDESC_CODE,NDESC_ROOF_LAYER))
00250 DO JLAYER=1,NDESC_ROOF_LAYER
00251   CALL READ_IN_CSVFILE('TOITURE',YBLD_NAME,YLAYER(JLAYER),'Chaleur specifique C',XDESC_HC_ROOF(:,JLAYER))
00252   CALL READ_IN_CSVFILE('TOITURE',YBLD_NAME,YLAYER(JLAYER),'Conductivite',XDESC_TC_ROOF(:,JLAYER))
00253   CALL READ_IN_CSVFILE('TOITURE',YBLD_NAME,YLAYER(JLAYER),'Epaisseur d',XDESC_D_ROOF(:,JLAYER))
00254 END DO
00255 !* transformation from kJ.m-3.K-1 to J.m-3.K-1
00256 XDESC_HC_ROOF = XDESC_HC_ROOF * 1000.
00257 DEALLOCATE(YLAYER)
00258 !
00259 !* thermal properties for wall
00260 !
00261 ALLOCATE(YLAYER(NDESC_WALL_LAYER))
00262 DO JLAYER=1,NDESC_WALL_LAYER
00263   IF (JLAYER==1) THEN
00264     WRITE(YLAYER(JLAYER),FMT='(A,I1,A)') 'Couche ',JLAYER,' (Ext)'
00265   ELSEIF (JLAYER==NDESC_WALL_LAYER) THEN
00266     WRITE(YLAYER(JLAYER),FMT='(A,I1,A)') 'Couche ',JLAYER,' (Int)'
00267   ELSE
00268     WRITE(YLAYER(JLAYER),FMT='(A,I1,A)') 'Couche ',JLAYER,' (Milieu)'
00269   END IF
00270 END DO
00271 !
00272 ALLOCATE(XDESC_HC_WALL(NDESC_CODE,NDESC_WALL_LAYER))
00273 ALLOCATE(XDESC_TC_WALL(NDESC_CODE,NDESC_WALL_LAYER))
00274 ALLOCATE(XDESC_D_WALL (NDESC_CODE,NDESC_WALL_LAYER))
00275 DO JLAYER=1,NDESC_WALL_LAYER
00276   CALL READ_IN_CSVFILE('MUR',YBLD_NAME,YLAYER(JLAYER),'Chaleur specifique C',XDESC_HC_WALL(:,JLAYER))
00277   CALL READ_IN_CSVFILE('MUR',YBLD_NAME,YLAYER(JLAYER),'Conductivite',XDESC_TC_WALL(:,JLAYER))
00278   CALL READ_IN_CSVFILE('MUR',YBLD_NAME,YLAYER(JLAYER),'Epaisseur d',XDESC_D_WALL(:,JLAYER))
00279 END DO
00280 !* transformation from kJ.m-3.K-1 to J.m-3.K-1
00281 XDESC_HC_WALL = XDESC_HC_WALL * 1000.
00282 DEALLOCATE(YLAYER)
00283 !
00284 !
00285 !* thermal properties for floor
00286 !
00287 ALLOCATE(YLAYER(NDESC_FLOOR_LAYER))
00288 DO JLAYER=1,NDESC_FLOOR_LAYER
00289   IF (JLAYER==1) THEN
00290     WRITE(YLAYER(JLAYER),FMT='(A)') 'Superieur '
00291   ELSEIF (JLAYER==NDESC_FLOOR_LAYER) THEN
00292     WRITE(YLAYER(JLAYER),FMT='(A)') 'Inferieur '
00293   ELSE
00294     WRITE(YLAYER(JLAYER),FMT='(A)') 'Milieu '
00295   END IF
00296 END DO
00297 !
00298 ALLOCATE(XDESC_HC_FLOOR(NDESC_CODE,NDESC_FLOOR_LAYER))
00299 ALLOCATE(XDESC_TC_FLOOR(NDESC_CODE,NDESC_FLOOR_LAYER))
00300 ALLOCATE(XDESC_D_FLOOR (NDESC_CODE,NDESC_FLOOR_LAYER))
00301 DO JLAYER=1,NDESC_FLOOR_LAYER
00302   CALL READ_IN_CSVFILE('PLANCHER',YBLD_NAME,YLAYER(JLAYER),'Chaleur specifique C',XDESC_HC_FLOOR(:,JLAYER))
00303   CALL READ_IN_CSVFILE('PLANCHER',YBLD_NAME,YLAYER(JLAYER),'Conductivite',XDESC_TC_FLOOR(:,JLAYER))
00304   CALL READ_IN_CSVFILE('PLANCHER',YBLD_NAME,YLAYER(JLAYER),'Epaisseur d',XDESC_D_FLOOR(:,JLAYER))
00305 END DO
00306 !* transformation from kJ.m-3.K-1 to J.m-3.K-1
00307 XDESC_HC_FLOOR = XDESC_HC_FLOOR * 1000.
00308 DEALLOCATE(YLAYER)
00309 !
00310 !* windows
00311 !  -------
00312 !
00313 ALLOCATE(XDESC_SHGC(NDESC_CODE))
00314  CALL READ_IN_CSVFILE('ENVELOPPE',YBLD_NAME,"Vitrage",'Facteur solaire m',XDESC_SHGC)
00315 
00316 ALLOCATE(XDESC_U_WIN(NDESC_CODE))
00317  CALL READ_IN_CSVFILE('ENVELOPPE',YBLD_NAME,"Vitrage",'U-factor',XDESC_U_WIN)
00318 
00319 ALLOCATE(XDESC_GR(NDESC_CODE))
00320  CALL READ_IN_CSVFILE('ENVELOPPE',YBLD_NAME,"Vitrage",'Surface fenetre /surface facade',XDESC_GR)
00321 !
00322 !------------------------------------------------------------------------------
00323 !
00324 !*    5.     town parameters depending on building equipment descriptions
00325 !      ------------------------------------------------------------------
00326 !
00327 YTYPE_OF_DATA = 'EQUIPMENT'
00328 !
00329  CALL READ_CONF_IN_CSVFILE("Nb d_hypotheses",IALL_HYP)
00330 !
00331 !* Air conditionning systems
00332 !
00333  CALL READ_HYP_IN_CSVFILE("Climatisation","Taux de rejets en toitures",IHYP)
00334 ALLOCATE(XDESC_F_WASTE_CAN(NDESC_CODE))
00335  CALL READ_IN_CSVFILE('EQUIPEMENT',YBLD_NAME,"Climatisation",'Taux de rejets en toitures',XDESC_F_WASTE_CAN)
00336 XDESC_F_WASTE_CAN = XDESC_F_WASTE_CAN / 100. ! % => fraction
00337 !
00338  CALL READ_HYP_IN_CSVFILE("Climatisation","Taux de rejets secs",IHYP)
00339 ALLOCATE(XDESC_F_WATER_COND(NDESC_CODE))
00340  CALL READ_IN_CSVFILE('EQUIPEMENT',YBLD_NAME,"Climatisation",'Taux de rejets secs',XDESC_F_WATER_COND)
00341 XDESC_F_WATER_COND = XDESC_F_WATER_COND / 100. ! % => fraction
00342 !
00343  CALL READ_HYP_IN_CSVFILE("Climatisation","Performance (COP)",IHYP)
00344 ALLOCATE(XDESC_COP_RAT(NDESC_CODE))
00345  CALL READ_IN_CSVFILE('EQUIPEMENT',YBLD_NAME,"Climatisation",'Performance (COP)',XDESC_COP_RAT)
00346 !
00347 !
00348 !* Heating systems
00349 !
00350 !CALL READ_HYP_IN_CSVFILE("Chauffage","Efficacite energetique",IHYP)
00351 ALLOCATE(XDESC_EFF_HEAT(NDESC_CODE))
00352 !CALL READ_IN_CSVFILE('EQUIPEMENT',YBLD_NAME,"Chauffage",'Efficacite energetique',XDESC_EFF_HEAT)
00353 XDESC_EFF_HEAT = 0.9
00354 !
00355 !
00356 !* Sanitary ventilation
00357  CALL READ_HYP_IN_CSVFILE("Infiltration","Taux de renouvellement d_air",IHYP)
00358 ALLOCATE(XDESC_INF(NDESC_CODE))
00359  CALL READ_IN_CSVFILE('EQUIPEMENT',YBLD_NAME,"Infiltration","Taux de renouvellement d_air",XDESC_INF)
00360 !
00361  CALL READ_HYP_IN_CSVFILE("Ventilation Mecanique Controlee","Taux de renouvellement d_air",IHYP)
00362 ALLOCATE(XDESC_V_VENT(NDESC_CODE))
00363  CALL READ_IN_CSVFILE('EQUIPEMENT',YBLD_NAME,"Ventilation Mecanique Controlee","Taux de renouvellement d_air",XDESC_V_VENT)
00364 !
00365 !* Greenroof fraction
00366  CALL READ_HYP_IN_CSVFILE("Toits vegetalises","Implantation",IHYP)
00367 ALLOCATE(XDESC_GREENROOF(NDESC_CODE))
00368  CALL READ_IN_CSVFILE('EQUIPEMENT',YBLD_NAME,"Toits vegetalises","Implantation",XDESC_GREENROOF)
00369 !-------------------------------------------------------------------------------
00370 
00371 !------------------------------------------------------------------------------
00372 !
00373 !*    7.     town parameters depending on building's use descriptions
00374 !      --------------------------------------------------------------
00375 !
00376 !
00377 YTYPE_OF_DATA = 'USE'
00378 !
00379 !* Temperature target for air conditionning
00380  CALL READ_HYP_IN_CSVFILE("Climatisation","Temp. de consigne",IHYP)
00381 ALLOCATE(XDESC_TCOOL_TARGET(NDESC_USE))
00382  CALL READ_IN_CSVFILE('USAGE',YUSE_NAME,"Climatisation","Temp. de consigne",XDESC_TCOOL_TARGET)
00383 XDESC_TCOOL_TARGET = XDESC_TCOOL_TARGET + XTT ! °C => K
00384 !
00385 !* Temperature target for domestic heating
00386  CALL READ_HYP_IN_CSVFILE("Chauffage","Temp. de consigne",IHYP)
00387 ALLOCATE(XDESC_THEAT_TARGET(NDESC_USE))
00388  CALL READ_IN_CSVFILE('USAGE',YUSE_NAME,"Chauffage","Temp. de consigne",XDESC_THEAT_TARGET)
00389 XDESC_THEAT_TARGET = XDESC_THEAT_TARGET + XTT ! °C => K
00390 !
00391 !* Internal gains
00392  CALL READ_HYP_IN_CSVFILE("Apports internes","Flux",IHYP)
00393 ALLOCATE(XDESC_QIN(NDESC_USE))
00394  CALL READ_IN_CSVFILE('USAGE',YUSE_NAME,"Apports internes","Flux",XDESC_QIN)
00395 !
00396 !* Latent fraction for internal gains
00397  CALL READ_HYP_IN_CSVFILE("Apports internes","Fraction latente",IHYP)
00398 ALLOCATE(XDESC_QIN_FLAT(NDESC_USE))
00399  CALL READ_IN_CSVFILE('USAGE',YUSE_NAME,"Apports internes","Fraction latente",XDESC_QIN_FLAT)
00400 XDESC_QIN_FLAT = XDESC_QIN_FLAT / 100. ! % => fraction
00401 !
00402 !* Solar protections
00403  CALL READ_HYP_IN_CSVFILE("Protection solaire","Facteur solaire m",IHYP)
00404 ALLOCATE(XDESC_SHGC_SH(NDESC_USE))
00405  CALL READ_IN_CSVFILE('USAGE',YUSE_NAME,"Protection solaire","Facteur solaire m",XDESC_SHGC_SH)
00406 !
00407  CALL READ_HYP_IN_CSVFILE("Protection solaire","Active",IHYP)
00408 ALLOCATE(XDESC_SHADE(NDESC_USE))
00409  CALL READ_IN_CSVFILE('USAGE',YUSE_NAME,"Protection solaire","Active",XDESC_SHADE)
00410 !
00411 !* Extra Natural ventilation (windows open or extra mechanical ventilation)
00412  CALL READ_HYP_IN_CSVFILE("Sur-ventilation","Type d_ouverture",IHYP)
00413 ALLOCATE(XDESC_NATVENT(NDESC_USE))
00414  CALL READ_IN_CSVFILE('USAGE',YUSE_NAME,"Sur-ventilation","Type d_ouverture",XDESC_NATVENT)
00415 !
00416 !------------------------------------------------------------------------------
00417 !
00418 !*    8.     town parameters depending on urban structure
00419 !      --------------------------------------------------
00420 !
00421 NDESC_ROAD_LAYER = 3
00422 !
00423 ALLOCATE(XDESC_ALB_ROAD(NDESC_CODE))
00424 XDESC_ALB_ROAD = 0.08
00425 ALLOCATE(XDESC_EMIS_ROAD(NDESC_CODE))
00426 XDESC_EMIS_ROAD = 0.94
00427 ALLOCATE(XDESC_HC_ROAD(NDESC_CODE,NDESC_ROAD_LAYER))
00428 XDESC_HC_ROAD(:,1)  = 1940000.
00429 XDESC_HC_ROAD(:,2:) = 1280000.
00430 ALLOCATE(XDESC_TC_ROAD(NDESC_CODE,NDESC_ROAD_LAYER))
00431 XDESC_TC_ROAD(:,1)  = 0.74
00432 XDESC_TC_ROAD(:,2:) = 0.25
00433 ALLOCATE(XDESC_D_ROAD(NDESC_CODE,NDESC_ROAD_LAYER))
00434 XDESC_D_ROAD(:,1)  = 0.05
00435 XDESC_D_ROAD(:,2)  = 0.1
00436 XDESC_D_ROAD(:,3:) = 1.
00437 !
00438 !-------------------------------------------------------------------------------
00439 !
00440  CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
00441 !
00442 IF (LHOOK) CALL DR_HOOK('READ_CSVDATA_TEB',1,ZHOOK_HANDLE)
00443 !-------------------------------------------------------------------------------
00444 CONTAINS
00445 !-------------------------------------------------------------------------------
00446 !
00447 FUNCTION BLD_CODE(KBLD,KAGE)
00448 INTEGER, INTENT(IN) :: KBLD     ! building type number
00449 INTEGER, INTENT(IN) :: KAGE     ! building construction period number
00450 INTEGER             :: BLD_CODE ! building code combining type and age
00451 BLD_CODE = 100*KBLD+KAGE
00452 END FUNCTION BLD_CODE
00453 !
00454 !-------------------------------------------------------------------------------
00455 !
00456 !-------------------------------------------------------------------------------
00457 !
00458 SUBROUTINE READ_CONF_IN_CSVFILE(HCODE1,KDATA)
00459 
00460  CHARACTER(LEN=*), INTENT(IN) :: HCODE1
00461 INTEGER,          INTENT(OUT):: KDATA
00462  CHARACTER(LEN=80) :: YERROR
00463 !
00464 REWIND(ILUNAM)
00465 DO
00466   YSTRING1 = ''
00467   YSTRING2 = ''
00468 !* reads the record
00469  READ(ILUNAM,END=101,FMT='(A400)') YSTRING
00470 !* analyses if the record has been written in French convention 
00471   CALL FRENCH_TO_ENGLISH(YSTRING)
00472 !* reads the string
00473   IF (LEN_TRIM(YSTRING)>0) &
00474   READ(YSTRING,FMT=*) YSTRING1, YSTRING2
00475 
00476   IF (TRIM(YSTRING1)==TRIM(HCODE1)) THEN
00477     READ(YSTRING,*) YSTRING1, KDATA
00478     REWIND(ILUNAM)
00479     RETURN
00480   END IF
00481 END DO
00482 !
00483 101 YERROR=TRIM(HCODE1)//' not found in file : '//TRIM(HFILE)
00484  CALL ABOR1_SFX(YERROR)
00485 !
00486 END SUBROUTINE READ_CONF_IN_CSVFILE
00487 !
00488 SUBROUTINE READ_HYP_IN_CSVFILE(HCODE1,HCODE2,KDATA)
00489 
00490  CHARACTER(LEN=*), INTENT(IN) :: HCODE1
00491  CHARACTER(LEN=*), INTENT(IN) :: HCODE2
00492 INTEGER,          INTENT(OUT):: KDATA
00493  CHARACTER(LEN=80) :: YERROR
00494 LOGICAL           :: GCODE2
00495 !
00496 REWIND(ILUNAM)
00497 DO
00498   YSTRING1 = ''
00499   YSTRING2 = ''
00500 !* reads the record
00501   READ(ILUNAM,END=101,FMT='(A400)') YSTRING
00502 !* analyses if the record has been written in French convention 
00503   CALL FRENCH_TO_ENGLISH(YSTRING)
00504 !* reads the string
00505   IF (LEN_TRIM(YSTRING)>0) &
00506   READ(YSTRING,FMT=*) YSTRING1, YSTRING2
00507 
00508   GCODE2 = TRIM(YSTRING2)==TRIM(HCODE2)
00509   IF (TRIM(YSTRING1)==TRIM(HCODE1) .AND. GCODE2) THEN
00510     READ(YSTRING,*) YSTRING1, YSTRING2, KDATA
00511     REWIND(ILUNAM)
00512     RETURN
00513   END IF
00514 END DO
00515 !
00516 101 YERROR=TRIM(HCODE1)//' '//TRIM(HCODE2)//' not found in file : '//TRIM(HFILE)
00517  CALL ABOR1_SFX(YERROR)
00518 !
00519 END SUBROUTINE READ_HYP_IN_CSVFILE
00520 !
00521 SUBROUTINE READ_IN_CSVFILE(HCODE_ELEMENT,HCODE_TYPE,HCODE_ELEMENT2,HCODE_PARAM,PDATA)
00522 !
00523  CHARACTER(LEN=*),               INTENT(IN) :: HCODE_ELEMENT  ! type of element
00524  CHARACTER(LEN=*), DIMENSION(:), INTENT(IN) :: HCODE_TYPE     ! building type or
00525                                                              ! building's use type
00526  CHARACTER(LEN=*),               INTENT(IN) :: HCODE_ELEMENT2 ! description of element
00527  CHARACTER(LEN=*),               INTENT(IN) :: HCODE_PARAM    ! name of Parameter
00528 REAL, DIMENSION(:),             INTENT(OUT):: PDATA          ! data read in the csv file
00529 !
00530 REAL, DIMENSION(:), ALLOCATABLE      :: ZDATA        ! data array read in the file
00531 LOGICAL, DIMENSION(SIZE(HCODE_TYPE)) :: GINITIALIZED ! Flag to know if parameter
00532 !                                                    ! has been initialized correctly
00533 LOGICAL                          :: GFOUND ! correct record has been found
00534  CHARACTER(LEN=80)                :: YTYPE  ! type of building or building's use
00535 !                                          ! in the csv file record
00536  CHARACTER(LEN=100)               :: YERROR ! Character string for error message
00537 INTEGER                          :: IN1 ! number of building type or use
00538 INTEGER                          :: IN2 ! number of construction dates
00539 !
00540 IF (YTYPE_OF_DATA=='STRUCTURE') THEN
00541   ALLOCATE(ZDATA(NDESC_AGE))
00542   IN1=NDESC_BLD
00543   IN2=NDESC_AGE
00544 ELSE IF (YTYPE_OF_DATA=='EQUIPMENT') THEN
00545   ALLOCATE(ZDATA(IALL_HYP))
00546   IN1=NDESC_BLD
00547   IN2=NDESC_AGE
00548 ELSE IF (YTYPE_OF_DATA=='USE') THEN
00549   ALLOCATE(ZDATA(IALL_HYP))
00550   IN1=NDESC_USE
00551   IN2=1
00552 END IF
00553 !
00554 PDATA = XUNDEF
00555 GINITIALIZED(:)=.FALSE.
00556 DO
00557   YSTRING1=' '
00558   YSTRING2=' '
00559   YSTRING3=' '
00560   YSTRING4=' '
00561   YSTRING5=' '
00562   YSTRING6=' '
00563   YSTRING7=' '
00564   YSTRING8=' '
00565 !* reads the record
00566   READ(ILUNAM,END=100,FMT='(A400)') YSTRING
00567 !* analyses if the record has been written in French convention 
00568   CALL FRENCH_TO_ENGLISH(YSTRING)
00569 !* reads the string
00570   IF (LEN_TRIM(YSTRING)>0) &
00571   READ(YSTRING,FMT=*) YSTRING1, YSTRING2, YSTRING3, YSTRING4, YSTRING5, YSTRING6, YSTRING7
00572   !
00573   IF (YTYPE_OF_DATA=='EQUIPMENT' .OR. YTYPE_OF_DATA=='USE') THEN
00574     GFOUND = TRIM(YSTRING1)==TRIM(HCODE_ELEMENT) .AND. TRIM(YSTRING6)==TRIM(HCODE_ELEMENT2) &
00575                                                  .AND. TRIM(YSTRING7)==TRIM(HCODE_PARAM)
00576   ELSE IF (YTYPE_OF_DATA=='STRUCTURE') THEN
00577     GFOUND = TRIM(YSTRING1)==TRIM(HCODE_ELEMENT) .AND. TRIM(YSTRING4)==TRIM(HCODE_ELEMENT2) &
00578                                                  .AND. TRIM(YSTRING5)==TRIM(HCODE_PARAM)
00579   ELSE
00580     GFOUND = .FALSE.
00581   END IF
00582 
00583   IF (GFOUND) THEN
00584 !* reads the data in the record
00585   IF (YTYPE_OF_DATA=='EQUIPMENT' .OR. YTYPE_OF_DATA=='USE') THEN
00586     READ(YSTRING,FMT=*) YSTRING1, YSTRING2, YSTRING3, YSTRING4, YSTRING5, &
00587                         YSTRING6, YSTRING7, YSTRING8, YSTRING9, ZDATA(:)
00588   ELSE IF (YTYPE_OF_DATA=='STRUCTURE') THEN
00589     READ(YSTRING,FMT=*) YSTRING1, YSTRING2, YSTRING3, YSTRING4, YSTRING5, &
00590                         YSTRING6, YSTRING7, ZDATA(:)
00591   END IF
00592 !* in case of EQUIPMENT or USE data, one keeps the chosen hypothesis
00593     IF (YTYPE_OF_DATA=='EQUIPMENT' .OR. YTYPE_OF_DATA=='USE') ZDATA(:) = ZDATA(IHYP)
00594 !* one finds for which building type or building's use type the data is for
00595     IF (YTYPE_OF_DATA=='EQUIPMENT') YTYPE = YSTRING2
00596     IF (YTYPE_OF_DATA=='STRUCTURE') YTYPE = YSTRING2
00597     IF (YTYPE_OF_DATA=='USE      ') YTYPE = YSTRING4
00598     !
00599     DO JBLD=1,IN1
00600       IF (TRIM(HCODE_TYPE(JBLD))==TRIM(YTYPE) .OR. TRIM(YTYPE)=='Tous batiments') THEN
00601 !* one affects the data for this type of building for each construction dates
00602         DO JAGE=1,IN2
00603           IINDEX = (JBLD-1)*IN2 + JAGE
00604           PDATA(IINDEX) = ZDATA(MIN(JAGE,SIZE(ZDATA)))
00605         END DO
00606         GINITIALIZED(JBLD) = .TRUE.
00607       END IF
00608     END DO
00609   END IF
00610   IF (ALL(GINITIALIZED)) EXIT
00611 END DO
00612 !
00613 100 REWIND(ILUNAM)
00614 DEALLOCATE(ZDATA)
00615 !
00616 !* one checks if the data is available for all building's types
00617 IF (ANY(.NOT. GINITIALIZED)) THEN
00618   WRITE(ILUOUT,*) '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*'
00619   WRITE(ILUOUT,*) 'While reading the csv data file for building parameters specification'
00620   WRITE(ILUOUT,*) '(file ',TRIM(HFILE),')'
00621   WRITE(ILUOUT,*) 'The field corresponding to the following '
00622   WRITE(ILUOUT,*) 'identifiers:',TRIM(HCODE_ELEMENT),' ',TRIM(HCODE_ELEMENT2),' ',TRIM(HCODE_PARAM)
00623   WRITE(ILUOUT,*) 'has not been completely initialized.'
00624   WRITE(ILUOUT,*) 'The data for the following building types were not found:'
00625   IF (YTYPE_OF_DATA=='USE') THEN
00626     DO JBLD=1,IN1
00627       IF (.NOT. GINITIALIZED(JBLD)) WRITE(ILUOUT,*) '"',TRIM(YUSE_NAME(JBLD)),'"'
00628     END DO
00629   ELSE
00630     DO JBLD=1,IN1
00631       IF (.NOT. GINITIALIZED(JBLD)) WRITE(ILUOUT,*) '"',TRIM(YBLD_NAME(JBLD)),'"'
00632     END DO
00633   END IF
00634   WRITE(ILUOUT,*) '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*'
00635 
00636   YERROR='Initialization not complete for: '//TRIM(HCODE_ELEMENT)//' '//TRIM(HCODE_ELEMENT2)//' '//TRIM(HCODE_PARAM)
00637   CALL ABOR1_SFX(YERROR)
00638 END IF
00639 !
00640 END SUBROUTINE READ_IN_CSVFILE
00641 !-------------------------------------------------------------------------------
00642 !-------------------------------------------------------------------------------
00643 SUBROUTINE FRENCH_TO_ENGLISH(HSTRING)
00644  CHARACTER(LEN=400), INTENT(INOUT) :: HSTRING ! csv record
00645 INTEGER :: JL
00646 LOGICAL :: GFRENCH
00647 !
00648 GFRENCH = .FALSE.
00649 !* analyses if the record has been written in French convention 
00650 !     French  convention (separator is ;  decimal symbol is ,) 
00651 !  or English convention (separator is ,  decimal symbol is .)
00652 DO JL=1,400
00653   IF (HSTRING(JL:JL)==';') GFRENCH=.TRUE.
00654 END DO
00655 !
00656 ! If French convention is used in the file, transforms it in English convention
00657 IF (GFRENCH) THEN
00658   DO JL=1,400
00659     IF (HSTRING(JL:JL)==',') HSTRING(JL:JL)='.'
00660     IF (HSTRING(JL:JL)==';') HSTRING(JL:JL)=','
00661   END DO
00662 END IF
00663 !
00664 END SUBROUTINE FRENCH_TO_ENGLISH
00665 !-------------------------------------------------------------------------------
00666 !
00667 END SUBROUTINE READ_CSVDATA_TEB