Пример #1
0
def readDOE(serialize_output=True):
    """
    Read csv files of DOE buildings
    Sheet 1 = BuildingSummary
    Sheet 2 = ZoneSummary
    Sheet 3 = LocationSummary
    Sheet 4 = Schedules
    Note BLD8 & 10 = school


    Then make matrix of ref data as nested nested lists [16, 3, 16]:
    matrix refDOE = Building objs
    matrix Schedule = SchDef objs
    matrix refBEM (16,3,16) = BEMDef
    where:
        [16,3,16] is Type = 1-16, Era = 1-3, climate zone = 1-16
        i.e.
        Type: FullServiceRestaurant, Era: Pre80, Zone: 6A Minneapolis
    Nested tree:
    [TYPE_1:
        ERA_1:
            CLIMATE_ZONE_1
            ...
            CLIMATE_ZONE_16
        ERA_2:
            CLIMATE_ZONE_1
            ...
            CLIMATE_ZONE_16
        ...
        ERA_3:
            CLIMATE_ZONE_1
            ...
            CLIMATE_ZONE_16]

    """

    #Nested, nested lists of Building, SchDef, BEMDef objects
    refDOE = map(lambda j_: map(lambda k_: [None] * 16, [None] * 3),
                 [None] * 16)  #refDOE(16,3,16) = Building;
    Schedule = map(lambda j_: map(lambda k_: [None] * 16, [None] * 3),
                   [None] * 16)  #Schedule (16,3,16) = SchDef;
    refBEM = map(lambda j_: map(lambda k_: [None] * 16, [None] * 3),
                 [None] * 16)  #refBEM (16,3,16) = BEMDef;

    #Purpose: Loop through every DOE reference csv and extract building data
    #Nested loop = 16 types, 3 era, 16 zones = time complexity O(n*m*k) = 768

    for i in xrange(16):

        #i = 16 types of buildings
        #print "\tType: {} @i={}".format(BLDTYPE[i], i)

        # Read building summary (Sheet 1)
        file_doe_name_bld = os.path.join(
            "{}".format(DIR_DOE_PATH), "BLD{}".format(i + 1),
            "BLD{}_BuildingSummary.csv".format(i + 1))
        list_doe1 = read_csv(file_doe_name_bld)
        #listof(listof 3 era values)
        nFloor = str2fl(
            list_doe1[3][3:6]
        )  # Number of Floors, this will be list of floats and str if "basement"
        glazing = str2fl(list_doe1[4][3:6])  # [?] Total
        hCeiling = str2fl(list_doe1[5][3:6])  # [m] Ceiling height
        ver2hor = str2fl(list_doe1[7][3:6])  # Wall to Skin Ratio
        AreaRoof = str2fl(
            list_doe1[8][3:6])  # [m2] Gross Dimensions - Total area

        # Read zone summary (Sheet 2)
        file_doe_name_zone = os.path.join(
            "{}".format(DIR_DOE_PATH), "BLD{}".format(i + 1),
            "BLD{}_ZoneSummary.csv".format(i + 1))
        list_doe2 = read_csv(file_doe_name_zone)
        #listof(listof 3 eras)
        AreaFloor = str2fl([list_doe2[2][5], list_doe2[3][5],
                            list_doe2[4][5]])  # [m2]
        Volume = str2fl([list_doe2[2][6], list_doe2[3][6],
                         list_doe2[4][6]])  # [m3]
        AreaWall = str2fl([list_doe2[2][8], list_doe2[3][8],
                           list_doe2[4][8]])  # [m2]
        AreaWindow = str2fl(
            [list_doe2[2][9], list_doe2[3][9], list_doe2[4][9]])  # [m2]
        Occupant = str2fl(
            [list_doe2[2][11], list_doe2[3][11],
             list_doe2[4][11]])  # Number of People
        Light = str2fl([list_doe2[2][12], list_doe2[3][12],
                        list_doe2[4][12]])  # [W/m2]
        Elec = str2fl([list_doe2[2][13], list_doe2[3][13],
                       list_doe2[4][13]])  # [W/m2] Electric Plug and Process
        Gas = str2fl([list_doe2[2][14], list_doe2[3][14],
                      list_doe2[4][14]])  # [W/m2] Gas Plug and Process
        SHW = str2fl([list_doe2[2][15], list_doe2[3][15],
                      list_doe2[4][15]])  # [Litres/hr] Peak Service Hot Water
        Vent = str2fl([list_doe2[2][17], list_doe2[3][17],
                       list_doe2[4][17]])  # [L/s/m2] Ventilation
        Infil = str2fl([list_doe2[2][20], list_doe2[3][20], list_doe2[4][20]
                        ])  # Air Changes Per Hour (ACH) Infiltration

        # Read location summary (Sheet 3)
        file_doe_name_location = os.path.join(
            "{}".format(DIR_DOE_PATH), "BLD{}".format(i + 1),
            "BLD{}_LocationSummary.csv".format(i + 1))
        list_doe3 = read_csv(file_doe_name_location)
        #(listof (listof 3 eras (listof 16 climate types)))
        TypeWall = [
            list_doe3[3][4:20], list_doe3[14][4:20], list_doe3[25][4:20]
        ]  # Construction type
        RvalWall = str2fl(
            [list_doe3[4][4:20], list_doe3[15][4:20],
             list_doe3[26][4:20]])  # [m2*K/W] R-value
        TypeRoof = [
            list_doe3[5][4:20], list_doe3[16][4:20], list_doe3[27][4:20]
        ]  # Construction type
        RvalRoof = str2fl(
            [list_doe3[6][4:20], list_doe3[17][4:20],
             list_doe3[28][4:20]])  # [m2*K/W] R-value
        Uwindow = str2fl(
            [list_doe3[7][4:20], list_doe3[18][4:20],
             list_doe3[29][4:20]])  # [W/m2*K] U-factor
        SHGC = str2fl(
            [list_doe3[8][4:20], list_doe3[19][4:20],
             list_doe3[30][4:20]])  # [-] coefficient
        HVAC = str2fl(
            [list_doe3[9][4:20], list_doe3[20][4:20],
             list_doe3[31][4:20]])  # [kW] Air Conditioning
        HEAT = str2fl(
            [list_doe3[10][4:20], list_doe3[21][4:20],
             list_doe3[32][4:20]])  # [kW] Heating
        COP = str2fl(
            [list_doe3[11][4:20], list_doe3[22][4:20],
             list_doe3[33][4:20]])  # [-] Air Conditioning COP
        EffHeat = str2fl(
            [list_doe3[12][4:20], list_doe3[23][4:20],
             list_doe3[34][4:20]])  # [%] Heating Efficiency
        FanFlow = str2fl(
            [list_doe3[13][4:20], list_doe3[24][4:20],
             list_doe3[35][4:20]])  # [m3/s] Fan Max Flow Rate

        # Read Schedules (Sheet 4)
        file_doe_name_schedules = os.path.join(
            "{}".format(DIR_DOE_PATH), "BLD{}".format(i + 1),
            "BLD{}_Schedules.csv".format(i + 1))
        list_doe4 = read_csv(file_doe_name_schedules)

        #listof(listof weekday, sat, sun (list of 24 fractions)))
        SchEquip = str2fl(
            [list_doe4[1][6:30], list_doe4[2][6:30],
             list_doe4[3][6:30]])  # Equipment Schedule 24 hrs
        SchLight = str2fl(
            [list_doe4[4][6:30], list_doe4[5][6:30],
             list_doe4[6][6:30]])  # Light Schedule 24 hrs; Wkday=Sat=Sun=Hol
        SchOcc = str2fl(
            [list_doe4[7][6:30], list_doe4[8][6:30],
             list_doe4[9][6:30]])  # Occupancy Schedule 24 hrs
        SetCool = str2fl(
            [list_doe4[10][6:30], list_doe4[11][6:30],
             list_doe4[12][6:30]])  # Cooling Setpoint Schedule 24 hrs
        SetHeat = str2fl([
            list_doe4[13][6:30], list_doe4[14][6:30], list_doe4[15][6:30]
        ])  # Heating Setpoint Schedule 24 hrs; summer design
        SchGas = str2fl(
            [list_doe4[16][6:30], list_doe4[17][6:30],
             list_doe4[18][6:30]])  # Gas Equipment Schedule 24 hrs; wkday=sat
        SchSWH = str2fl(
            [list_doe4[19][6:30], list_doe4[20][6:30], list_doe4[21][6:30]]
        )  # Solar Water Heating Schedule 24 hrs; wkday=summerdesign, sat=winterdesgin

        for j in xrange(3):

            # j = 3 built eras
            #print"\tEra: {} @j={}".format(BUILTERA[j], j)

            for k in xrange(16):

                # k = 16 climate zones
                #print "\tClimate zone: {} @k={}".format(ZONETYPE[k], k)

                B = Building(
                    hCeiling[j],  # floorHeight by era
                    1,  # intHeatNight
                    1,  # intHeatDay
                    0.1,  # intHeatFRad
                    0.1,  # intHeatFLat
                    Infil[j],  # infil (ACH) by era
                    Vent[j] /
                    1000.,  # vent (m^3/s/m^2) by era, converted from liters
                    glazing[j],  # glazing ratio by era
                    Uwindow[j][k],  # uValue by era, by climate type
                    SHGC[j][k],  # SHGC, by era, by climate type
                    'AIR',  # cooling condensation system type: AIR, WATER
                    COP[j][k],  # cop by era, climate type
                    297,  # coolSetpointDay = 24 C
                    297,  # coolSetpointNight
                    293,  # heatSetpointDay = 20 C
                    293,  # heatSetpointNight
                    (HVAC[j][k] * 1000.0) / AreaFloor[
                        j],  # coolCap converted to W/m2 by era, climate type
                    EffHeat[j][k],  # heatEff by era, climate type
                    293)  # initialTemp at 20 C

                #Not defined in the constructor
                B.heatCap = (HEAT[j][k] * 1000.0) / AreaFloor[
                    j]  # heating Capacity converted to W/m2 by era, climate type
                B.Type = BLDTYPE[i]
                B.Era = BUILTERA[j]
                B.Zone = ZONETYPE[k]
                refDOE[i][j][k] = B

                # Define wall, mass(floor), roof
                # Reference from E+ for conductivity, thickness (reference below)

                # Material: (thermalCond, volHeat = specific heat * density)
                Concrete = Material(1.311, 836.8 * 2240, "Concrete")
                Insulation = Material(0.049, 836.8 * 265.0, "Insulation")
                Gypsum = Material(0.16, 830.0 * 784.9, "Gypsum")
                Wood = Material(0.11, 1210.0 * 544.62, "Wood")
                Stucco = Material(0.6918, 837.0 * 1858.0, "Stucco")

                # Wall (1 in stucco, concrete, insulation, gypsum)
                # Check TypWall by era, by climate
                if TypeWall[j][k] == "MassWall":
                    #Construct wall based on R value of Wall from refDOE and properties defined above
                    # 1" stucco, 8" concrete, tbd insulation, 1/2" gypsum
                    Rbase = 0.271087  # R val based on stucco, concrete, gypsum
                    Rins = RvalWall[j][k] - Rbase  #find insulation value
                    D_ins = Rins * Insulation.thermalCond  # depth of ins from m2*K/W * W/m*K = m
                    if D_ins > 0.01:
                        thickness = [
                            0.0254, 0.0508, 0.0508, 0.0508, 0.0508, D_ins,
                            0.0127
                        ]
                        layers = [
                            Stucco, Concrete, Concrete, Concrete, Concrete,
                            Insulation, Gypsum
                        ]
                    else:
                        #if it's less then 1 cm don't include in layers
                        thickness = [
                            0.0254, 0.0508, 0.0508, 0.0508, 0.0508, 0.0127
                        ]
                        layers = [
                            Stucco, Concrete, Concrete, Concrete, Concrete,
                            Gypsum
                        ]

                    wall = Element(0.08, 0.92, thickness, layers, 0., 293., 0.,
                                   "MassWall")

                    # If mass wall, assume mass floor (4" concrete)
                    # Mass (assume 4" concrete);
                    alb = 0.2
                    emis = 0.9
                    thickness = [0.054, 0.054]
                    concrete = Material(1.31, 2240.0 * 836.8)
                    mass = Element(alb, emis, thickness, [concrete, concrete],
                                   0, 293, 1, "MassFloor")

                elif TypeWall[j][k] == "WoodFrame":
                    # 0.01m wood siding, tbd insulation, 1/2" gypsum
                    Rbase = 0.170284091  # based on wood siding, gypsum
                    Rins = RvalWall[j][k] - Rbase
                    D_ins = Rins * Insulation.thermalCond  #depth of insulatino

                    if D_ins > 0.01:
                        thickness = [0.01, D_ins, 0.0127]
                        layers = [Wood, Insulation, Gypsum]
                    else:
                        thickness = [0.01, 0.0127]
                        layers = [Wood, Gypsum]

                    wall = Element(0.22, 0.92, thickness, layers, 0., 293., 0.,
                                   "WoodFrameWall")

                    # If wood frame wall, assume wooden floor
                    alb = 0.2
                    emis = 0.9
                    thickness = [0.05, 0.05]
                    wood = Material(1.31, 2240.0 * 836.8)
                    mass = Element(alb, emis, thickness, [wood, wood], 0.,
                                   293., 1., "WoodFloor")

                elif TypeWall[j][k] == "SteelFrame":
                    # 1" stucco, 8" concrete, tbd insulation, 1/2" gypsum
                    Rbase = 0.271087  # based on stucco, concrete, gypsum
                    Rins = RvalWall[j][k] - Rbase
                    D_ins = Rins * Insulation.thermalCond
                    if D_ins > 0.01:
                        thickness = [
                            0.0254, 0.0508, 0.0508, 0.0508, 0.0508, D_ins,
                            0.0127
                        ]
                        layers = [
                            Stucco, Concrete, Concrete, Concrete, Concrete,
                            Insulation, Gypsum
                        ]
                    else:  # If insulation is too thin, assume no insulation
                        thickness = [
                            0.0254, 0.0508, 0.0508, 0.0508, 0.0508, 0.0127
                        ]
                        layers = [
                            Stucco, Concrete, Concrete, Concrete, Concrete,
                            Gypsum
                        ]
                    wall = Element(0.15, 0.92, thickness, layers, 0., 293., 0.,
                                   "SteelFrame")

                    # If mass wall, assume mass foor
                    # Mass (assume 4" concrete),
                    alb = 0.2
                    emis = 0.93
                    thickness = [0.05, 0.05]
                    mass = Element(alb, emis, thickness, [Concrete, Concrete],
                                   0., 293., 1., "MassFloor")

                elif TypeWall[j][k] == "MetalWall":
                    # metal siding, insulation, 1/2" gypsum
                    alb = 0.2
                    emis = 0.9
                    D_ins = max(
                        (RvalWall[j][k] * Insulation.thermalCond) / 2, 0.01
                    )  #use derived insul thickness or 0.01 based on max
                    thickness = [D_ins, D_ins, 0.0127]
                    materials = [Insulation, Insulation, Gypsum]
                    wall = Element(alb, emis, thickness, materials, 0, 293, 0,
                                   "MetalWall")

                    # Mass (assume 4" concrete);
                    alb = 0.2
                    emis = 0.9
                    thickness = [0.05, 0.05]
                    concrete = Material(1.31, 2240.0 * 836.8)
                    mass = Element(alb, emis, thickness, [concrete, concrete],
                                   0., 293., 1., "MassFloor")

                # Roof
                if TypeRoof[j][k] == "IEAD":  #Insulation Entirely Above Deck
                    # IEAD-> membrane, insulation, decking
                    alb = 0.2
                    emis = 0.93
                    D_ins = max(RvalRoof[j][k] * Insulation.thermalCond / 2.,
                                0.01)
                    roof = Element(alb, emis, [D_ins, D_ins],
                                   [Insulation, Insulation], 0., 293., 0.,
                                   "IEAD")

                elif TypeRoof[j][k] == "Attic":
                    # IEAD-> membrane, insulation, decking
                    alb = 0.2
                    emis = 0.9
                    D_ins = max(RvalRoof[j][k] * Insulation.thermalCond / 2.,
                                0.01)
                    roof = Element(alb, emis, [D_ins, D_ins],
                                   [Insulation, Insulation], 0., 293., 0.,
                                   "Attic")

                elif TypeRoof[j][k] == "MetalRoof":
                    # IEAD-> membrane, insulation, decking
                    alb = 0.2
                    emis = 0.9
                    D_ins = max(RvalRoof[j][k] * Insulation.thermalCond / 2.,
                                0.01)
                    roof = Element(alb, emis, [D_ins, D_ins],
                                   [Insulation, Insulation], 0., 293., 0.,
                                   "MetalRoof")

                # Define bulding energy model, set fraction of the urban floor space of this typology to zero
                refBEM[i][j][k] = BEMDef(B, mass, wall, roof, 0.0)
                refBEM[i][j][k].building.FanMax = FanFlow[j][
                    k]  # max fan flow rate (m^3/s) per DOE

                Schedule[i][j][k] = SchDef()

                Schedule[i][j][
                    k].Elec = SchEquip  # 3x24 matrix of schedule for fraction electricity (WD,Sat,Sun)
                Schedule[i][j][
                    k].Light = SchLight  # 3x24 matrix of schedule for fraction light (WD,Sat,Sun)
                Schedule[i][j][
                    k].Gas = SchGas  # 3x24 matrix of schedule for fraction gas (WD,Sat,Sun)
                Schedule[i][j][
                    k].Occ = SchOcc  # 3x24 matrix of schedule for fraction occupancy (WD,Sat,Sun)
                Schedule[i][j][
                    k].Cool = SetCool  # 3x24 matrix of schedule for fraction cooling temp (WD,Sat,Sun)
                Schedule[i][j][
                    k].Heat = SetHeat  # 3x24 matrix of schedule for fraction heating temp (WD,Sat,Sun)
                Schedule[i][j][
                    k].SWH = SchSWH  # 3x24 matrix of schedule for fraction SWH (WD,Sat,Sun

                Schedule[i][j][k].Qelec = Elec[
                    j]  # W/m^2 (max) for electrical plug process
                Schedule[i][j][k].Qlight = Light[j]  # W/m^2 (max) for light
                Schedule[i][j][k].Nocc = Occupant[j] / AreaFloor[
                    j]  # Person/m^2
                Schedule[i][j][k].Qgas = Gas[j]  # W/m^2 (max) for gas
                Schedule[i][j][k].Vent = Vent[j] / 1000.0  # m^3/m^2 per person
                Schedule[i][j][k].Vswh = SHW[j] / AreaFloor[
                    j]  # litres per hour per m^2 of floor

    # if not test serialize refDOE,refBEM,Schedule and store in resources
    if serialize_output:

        # create a binary file for serialized obj
        pkl_file_path = os.path.join(DIR_CURR, '..', 'resources',
                                     'readDOE.pkl')
        pickle_readDOE = open(pkl_file_path, 'wb')

        # dump in ../resources
        # Pickle objects, protocol 1 b/c binary file
        cPickle.dump(refDOE, pickle_readDOE, 1)
        cPickle.dump(refBEM, pickle_readDOE, 1)
        cPickle.dump(Schedule, pickle_readDOE, 1)

        pickle_readDOE.close()

    return refDOE, refBEM, Schedule
Пример #2
0
    def __init__(self, climate_file, HI, HF):
        #HI: Julian start date
        #HF: Julian final date
        #H1 and HF define the row we want

        # Open .epw file and feed csv data to self.climate_data
        try:
            self.climate_data = read_csv(climate_file)
        except Exception as e:
            raise Exception("Failed to read .epw file! {}".format(e.message))

        self.location = self.climate_data[0][1]
        cd = self.climate_data[HI:HF + 1]
        self.staTemp = str2fl([cd[i][6]
                               for i in xrange(len(cd))])  # drybulb [C]
        self.staTdp = str2fl([cd[i][7]
                              for i in xrange(len(cd))])  # dewpoint [C]
        self.staRhum = str2fl([cd[i][8] for i in xrange(len(cd))
                               ])  # air relative humidity (%)
        self.staPres = str2fl([cd[i][9]
                               for i in xrange(len(cd))])  # air pressure (Pa)
        self.staInfra = str2fl([
            cd[i][12] for i in xrange(len(cd))
        ])  # horizontal Infrared Radiation Intensity (W m-2)
        self.staHor = str2fl([cd[i][13] for i in xrange(len(cd))
                              ])  # horizontal radiation [W m-2]
        self.staDir = str2fl([cd[i][14] for i in xrange(len(cd))
                              ])  # normal solar direct radiation (W m-2)
        self.staDif = str2fl([cd[i][15] for i in xrange(len(cd))
                              ])  # horizontal solar diffuse radiation (W m-2)
        self.staUdir = str2fl([cd[i][20]
                               for i in xrange(len(cd))])  # wind direction ()
        self.staUmod = str2fl([cd[i][21]
                               for i in xrange(len(cd))])  # wind speed (m s-1)
        self.staRobs = str2fl([cd[i][33] for i in xrange(len(cd))
                               ])  # Precipitation (mm h-1)
        self.staHum = [0.0] * len(
            self.staTemp)  # specific humidty (kgH20 kgN202-1)
        for i in xrange(len(self.staTemp)):
            self.staHum[i] = HumFromRHumTemp(self.staRhum[i], self.staTemp[i],
                                             self.staPres[i])

        self.staTemp = [s + 273.15
                        for s in self.staTemp]  # air temperature (K)
Пример #3
0
    def read_input(self):
        """Section 3 - Read Input File (.m, file)
        Note: UWG_Matlab input files are xlsm, XML, .m, file.
        properties:
            self._init_param_dict   # dictionary of simulation initialization parameters

            self.sensAnth           # non-building sensible heat (W/m^2)
            self.SchTraffic         # Traffice schedule

            self.BEM                # list of BEMDef objects extracted from readDOE
            self.Sch                # list of Schedule objects extracted from readDOE

        """

        uwg_param_file_path = os.path.join(self.uwgParamDir,
                                           self.uwgParamFileName)

        if not os.path.exists(uwg_param_file_path):
            raise Exception(
                "Param file: '{}' does not exist.".format(uwg_param_file_path))

        # Open .uwg file and feed csv data to initializeDataFile
        try:
            uwg_param_data = utilities.read_csv(uwg_param_file_path)
        except Exception as e:
            raise Exception("Failed to read .uwg file! {}".format(e.message))

        # The initialize.uwg is read with a dictionary so that users changing
        # line endings or line numbers doesn't make reading input incorrect
        self._init_param_dict = {}
        count = 0
        while count < len(uwg_param_data):
            row = uwg_param_data[count]
            row = [row[i].replace(" ", "")
                   for i in xrange(len(row))]  # strip white spaces

            # Optional parameters might be empty so handle separately
            is_optional_parameter = (
                row != [] and \
                    (
                    row[0] == "albRoof" or \
                    row[0] == "vegRoof" or \
                    row[0] == "glzR" or \
                    row[0] == "hvac" or \
                    row[0] == "albWall" or \
                    row[0] == "SHGC"
                    )
                )

            if row == [] or "#" in row[0]:
                count += 1
                continue
            elif row[0] == "SchTraffic":
                # SchTraffic: 3 x 24 matrix
                trafficrows = uwg_param_data[count + 1:count + 4]
                self._init_param_dict[row[0]] = map(
                    lambda r: utilities.str2fl(r[:24]), trafficrows)
                count += 4
            elif row[0] == "bld":
                #bld: 17 x 3 matrix
                bldrows = uwg_param_data[count + 1:count + 17]
                self._init_param_dict[row[0]] = map(
                    lambda r: utilities.str2fl(r[:3]), bldrows)
                count += 17
            elif is_optional_parameter:
                self._init_param_dict[row[0]] = float(
                    row[1]) if row[1] != "" else None
                count += 1
            else:
                self._init_param_dict[row[0]] = float(row[1])
                count += 1

        ipd = self._init_param_dict

        # Define Simulation and Weather parameters
        if self.Month is None: self.Month = ipd['Month']
        if self.Day is None: self.Day = ipd['Day']
        if self.nDay is None: self.nDay = ipd['nDay']
        if self.dtSim is None: self.dtSim = ipd['dtSim']
        if self.dtWeather is None: self.dtWeather = ipd['dtWeather']

        # HVAC system and internal laod
        if self.autosize is None: self.autosize = ipd['autosize']
        if self.sensOcc is None: self.sensOcc = ipd['sensOcc']
        if self.LatFOcc is None: self.LatFOcc = ipd['LatFOcc']
        if self.RadFOcc is None: self.RadFOcc = ipd['RadFOcc']
        if self.RadFEquip is None: self.RadFEquip = ipd['RadFEquip']
        if self.RadFLight is None: self.RadFLight = ipd['RadFLight']

        # Define Urban microclimate parameters
        if self.h_ubl1 is None: self.h_ubl1 = ipd['h_ubl1']
        if self.h_ubl2 is None: self.h_ubl2 = ipd['h_ubl2']
        if self.h_ref is None: self.h_ref = ipd['h_ref']
        if self.h_temp is None: self.h_temp = ipd['h_temp']
        if self.h_wind is None: self.h_wind = ipd['h_wind']
        if self.c_circ is None: self.c_circ = ipd['c_circ']
        if self.c_exch is None: self.c_exch = ipd['c_exch']
        if self.maxDay is None: self.maxDay = ipd['maxDay']
        if self.maxNight is None: self.maxNight = ipd['maxNight']
        if self.windMin is None: self.windMin = ipd['windMin']
        if self.h_obs is None: self.h_obs = ipd['h_obs']

        # Urban characteristics
        if self.bldHeight is None: self.bldHeight = ipd['bldHeight']
        if self.h_mix is None: self.h_mix = ipd['h_mix']
        if self.bldDensity is None: self.bldDensity = ipd['bldDensity']
        if self.verToHor is None: self.verToHor = ipd['verToHor']
        if self.charLength is None: self.charLength = ipd['charLength']
        if self.alb_road is None: self.alb_road = ipd['albRoad']
        if self.d_road is None: self.d_road = ipd['dRoad']
        if self.sensAnth is None: self.sensAnth = ipd['sensAnth']
        if self.latAnth is None: self.latAnth = ipd['latAnth']

        # climate Zone
        if self.zone is None: self.zone = ipd['zone']

        # Vegetation parameters
        if self.vegCover is None: self.vegCover = ipd['vegCover']
        if self.treeCoverage is None: self.treeCoverage = ipd['treeCoverage']
        if self.vegStart is None: self.vegStart = ipd['vegStart']
        if self.vegEnd is None: self.vegEnd = ipd['vegEnd']
        if self.albVeg is None: self.albVeg = ipd['albVeg']
        if self.rurVegCover is None: self.rurVegCover = ipd['rurVegCover']
        if self.latGrss is None: self.latGrss = ipd['latGrss']
        if self.latTree is None: self.latTree = ipd['latTree']

        # Define Traffic schedule
        if self.SchTraffic is None: self.SchTraffic = ipd['SchTraffic']

        # Define Road (Assume 0.5m of asphalt)
        if self.kRoad is None: self.kRoad = ipd['kRoad']
        if self.cRoad is None: self.cRoad = ipd['cRoad']

        # Building stock fraction
        if self.bld is None: self.bld = ipd['bld']

        # Optional parameters
        if self.albRoof is None: self.albRoof = ipd['albRoof']
        if self.vegRoof is None: self.vegRoof = ipd['vegRoof']
        if self.glzR is None: self.glzR = ipd['glzR']
        if self.albWall is None: self.albWall = ipd['albWall']
        if self.SHGC is None: self.SHGC = ipd['SHGC']