def getGenDicts(fleet):
    orisCol,genIdCol = fleet[0].index('ORIS Plant Code'), fleet[0].index('Unit ID')
    capacCol,minloadCol = fleet[0].index('Capacity (MW)'), fleet[0].index('MinLoad(MW)')
    plantTypeCol,rampCol = fleet[0].index('PlantType'),fleet[0].index('RampRate(MW/hr)')
    mdtCol = fleet[0].index('MinDownTime(hrs)')
    genToCapac,genToMinload,genToPlantType,genToRamp,genToMDT = dict(),dict(),dict(),dict(),dict()
    for row in fleet[1:]:
        genToCapac[createGenSymbol(row,fleet[0])] = float(row[capacCol])
        genToMinload[createGenSymbol(row,fleet[0])] = float(row[minloadCol])
        genToPlantType[createGenSymbol(row,fleet[0])] = row[plantTypeCol]
        genToRamp[createGenSymbol(row,fleet[0])] = float(row[rampCol])
        genToMDT[createGenSymbol(row,fleet[0])] = int(float(row[mdtCol]))
    return (genToCapac,genToMinload,genToPlantType,genToRamp,genToMDT)
Ejemplo n.º 2
0
def getGenDicts():
    fleet = readCSVto2dList(os.path.join(RESULTSDIR, 'genFleetUC2015.csv'))
    orisCol, genIdCol = fleet[0].index('ORIS Plant Code'), fleet[0].index(
        'Unit ID')
    fuelCol = fleet[0].index('Modeled Fuels')
    capacCol = fleet[0].index('Capacity (MW)')
    plantTypeCol = fleet[0].index('PlantType')
    genToCapac, genToPlantType, genToFuel = dict(), dict(), dict()
    for row in fleet[1:]:
        genToCapac[createGenSymbol(row, fleet[0])] = float(row[capacCol])
        genToPlantType[createGenSymbol(row, fleet[0])] = row[plantTypeCol]
        genToFuel[createGenSymbol(row, fleet[0])] = row[fuelCol]
    return (genToCapac, genToPlantType, genToFuel)
Ejemplo n.º 3
0
def markAndSaveRetiredUnitsFromAge(genFleet, currYear,
                                   capacExpRetiredUnitsByAge, runLoc,
                                   scenario):
    lifetimeByPlantTypeDict = importPlantTypeLifetimes(runLoc, scenario)
    renewablePlantTypes = [
        'Geothermal', 'Hydro', 'Pumped Storage', 'Wind', 'Solar PV', 'Biomass'
    ]
    onlineYearCol = genFleet[0].index('On Line Year')
    plantTypeCol = genFleet[0].index('PlantType')
    retiredByAgeCol = genFleet[0].index('YearRetiredByAge')
    retiredByCECol = genFleet[0].index('YearRetiredByCE')
    retiredUnitsByAge = []
    for row in genFleet[1:]:
        if row[retiredByAgeCol] == '' and row[
                retiredByCECol] == '':  #if not already retired by age or CE
            (onlineYear, plantType) = (row[onlineYearCol], row[plantTypeCol])
            lifetimePlantType = lifetimeByPlantTypeDict[plantType]
            if int(onlineYear) + lifetimePlantType < currYear:
                if plantType in renewablePlantTypes:
                    readdRenewablePlant(
                        genFleet, row,
                        currYear)  #readd to fleet before add retired year!
                row[retiredByAgeCol] = currYear
                retiredUnitsByAge.append(createGenSymbol(row, genFleet[0]))
    capacExpRetiredUnitsByAge.append(['UnitsRetiredByAge' + str(currYear)] +
                                     retiredUnitsByAge)
Ejemplo n.º 4
0
def setupHourlyResultBySto(daysForUC, fleetUC):
    stoRows = [fleetUC[0]] + [
        row
        for row in fleetUC if row[fleetUC[0].index('PlantType')] == 'Storage'
    ]
    #Initialize stuff
    (genToRow, hourToCol, chargeByStoUnits) = (dict(), dict(), [])
    #Create empty 2d list
    numRows = len(
        stoRows) - 1 + 1  #-1 for header in fleet, +1 for header in new 2d list
    for idx in range(numRows):
        chargeByStoUnits.append([''] * (1 + len(daysForUC) * 24))
    #Add hours as first row, starting at col 1 since first col is gen IDs
    hourSymbolsForUC = getHourSymbolsForUC(daysForUC)
    genIDLabel = 'genID'
    chargeByStoUnits[0] = [genIDLabel] + hourSymbolsForUC
    #Create dict mapping hours to col #s
    for idx in range(1, len(chargeByStoUnits[0])):
        hourToCol[chargeByStoUnits[0][idx]] = idx
    #Add gens as first col, starting at row 1 since first row is hours
    genSymbols = [createGenSymbol(row, stoRows[0]) for row in stoRows[1:]]
    for idx in range(1, len(chargeByStoUnits)):
        chargeByStoUnits[idx][0] = genSymbols[
            idx - 1]  #-1 b/c row 1 of hourlyGen = hours
    #Create dict mapping gens to row #s
    firstColVals = [row[0] for row in chargeByStoUnits]
    genToRow = dict()
    for idx in range(1, len(firstColVals)):
        genToRow[firstColVals[idx]] = idx
    return (chargeByStoUnits, genToRow, hourToCol)
Ejemplo n.º 5
0
def setupHourlyGenByPlant(hourSymbolsForUC, fleetUC):
    (genToRow, hourToCol) = (dict(), dict())
    #Create empty 2d list
    numRows = len(
        fleetUC) - 1 + 1  #-1 for header in fleet, +1 for header in new 2d list
    hourlyGenByPlant = []
    for idx in range(numRows):
        hourlyGenByPlant.append([''] * (1 + len(hourSymbolsForUC)))
    #Add hours as first row, starting at col 1 since first col is gen IDs
    genIDLabel = 'genID'
    hourlyGenByPlant[0] = [genIDLabel] + hourSymbolsForUC
    #Create dict mapping hours to col #s
    for idx in range(1, len(hourlyGenByPlant[0])):
        hourToCol[hourlyGenByPlant[0][idx]] = idx
    #Add gens as first col, starting at row 1 since first row is hours
    genSymbols = [createGenSymbol(row, fleetUC[0]) for row in fleetUC[1:]]
    for idx in range(1, len(hourlyGenByPlant)):
        hourlyGenByPlant[idx][0] = genSymbols[
            idx - 1]  #-1 b/c row 1 of hourlyGen = hours
    #Create dict mapping gens to row #s
    firstColVals = [row[0] for row in hourlyGenByPlant]
    genToRow = dict()
    for idx in range(1, len(firstColVals)):
        genToRow[firstColVals[idx]] = idx
    return (hourlyGenByPlant, genToRow, hourToCol)
def getGenDicts(fleetDir):
    lbToTon = 2000
    fleet = readCSVto2dList(os.path.join(fleetDir, 'genFleetUC2015.csv'))
    orisCol, genIdCol = fleet[0].index('ORIS Plant Code'), fleet[0].index(
        'Unit ID')
    fuelCol = fleet[0].index('Modeled Fuels')
    capacCol = fleet[0].index('Capacity (MW)')
    plantTypeCol = fleet[0].index('PlantType')
    co2Col = fleet[0].index('CO2EmRate(lb/MMBtu)')
    hrCol = fleet[0].index('Heat Rate (Btu/kWh)')
    genToCapac, genToPlantType, genToFuel = dict(), dict(), dict()
    genToCo2Ems = dict()
    for row in fleet[1:]:
        genToCapac[createGenSymbol(row, fleet[0])] = float(row[capacCol])
        genToPlantType[createGenSymbol(row, fleet[0])] = row[plantTypeCol]
        genToFuel[createGenSymbol(row, fleet[0])] = row[fuelCol]
        genToCo2Ems[createGenSymbol(row, fleet[0])] = float(
            row[co2Col]) / lbToTon * float(row[hrCol])  #ton/GWh
    return (genToCapac, genToPlantType, genToFuel, genToCo2Ems)
Ejemplo n.º 7
0
def plotGenUtilizationOverTime(yearList, resultDir):
    resultDir = os.path.join(resultDir, 'CE')
    plt.figure(4, figsize=(25, 35))
    ctr = 1
    for year in yearList:
        fleet = readCSVto2dList(
            os.path.join(resultDir, 'genFleetForCE' + str(year) + '.csv'))
        capacCol = fleet[0].index('Capacity (MW)')
        fleetGenRows = [createGenSymbol(row, fleet[0]) for row in fleet[1:]]
        ax = plt.subplot(3, 2, ctr)
        ctr += 1
        #Update fuel prices to current year
        newTechs = readCSVto2dList(
            os.path.join(resultDir, 'newTechsCE' + str(year) + '.csv'))
        fuelPricesTimeSeries = importFuelPrices()
        updateFuelPrices(fleet, newTechs, year, fuelPricesTimeSeries)
        #Get exist gens util & op cost
        fleetOpcosts, hrs = calcOpCosts(fleet, 2000, 0)
        genGen = readCSVto2dList(
            os.path.join(resultDir, 'genByPlantCE' + str(year) + '.csv'))
        genRegup = readCSVto2dList(
            os.path.join(resultDir, 'regupByPlantCE' + str(year) + '.csv'))
        genFlex = readCSVto2dList(
            os.path.join(resultDir, 'flexByPlantCE' + str(year) + '.csv'))
        genCont = readCSVto2dList(
            os.path.join(resultDir, 'contByPlantCE' + str(year) + '.csv'))
        yearUtils, yearOpcosts = [], []
        for row in genGen[1:]:
            unit, gen = row[0], sum([float(val) for val in row[1:]]) * 1000
            regup = sum([
                float(val)
                for val in genRegup[[row[0]
                                     for row in genRegup].index(unit)][1:]
            ]) * 1000
            flex = sum([
                float(val)
                for val in genFlex[[row[0] for row in genFlex].index(unit)][1:]
            ]) * 1000
            cont = sum([
                float(val)
                for val in genCont[[row[0] for row in genCont].index(unit)][1:]
            ]) * 1000
            fleetRowIdx = fleetGenRows.index(unit)
            capac = float(fleet[fleetRowIdx + 1][capacCol])
            opcost = fleetOpcosts[fleetRowIdx]
            util = (gen + regup + flex + cont) / (capac * len(row[1:]))
            if util > 2: print(unit, capac)
            yearUtils.append(util)
            yearOpcosts.append(opcost)
        ax.scatter(yearOpcosts, yearUtils, color='red', label='ExistingGens')
        #Get op cost and utilization for new techs
        addedTechs = readCSVto2dList(
            os.path.join(resultDir, 'genAdditionsCE' + str(year) + '.csv'))
        addedCol = addedTechs[0].index('UnitsAdded' + str(year))
        fpCol, hrCol = newTechs[0].index(
            'FuelCost($/MMBtu)'), newTechs[0].index('HR(Btu/kWh)')
        vomCol, techCapacCol = newTechs[0].index(
            'VOM(2012$/MWh)'), newTechs[0].index('Capacity(MW)')
        techCol = newTechs[0].index('TechnologyType')
        techGen = readCSVto2dList(
            os.path.join(resultDir, 'genByTechCE' + str(year) + '.csv'))
        techRegup = readCSVto2dList(
            os.path.join(resultDir, 'regupByTechCE' + str(year) + '.csv'))
        techFlex = readCSVto2dList(
            os.path.join(resultDir, 'flexByTechCE' + str(year) + '.csv'))
        techCont = readCSVto2dList(
            os.path.join(resultDir, 'contByTechCE' + str(year) + '.csv'))
        techOpcosts, hrs = calcBaseOpCost(fpCol, hrCol, vomCol, newTechs)
        yearUtils, yearOpcosts = [], []
        for row in techGen[1:]:
            tech, gen = row[0], sum([float(val) for val in row[1:]]) * 1000
            opcost = techOpcosts[[row[techCol]
                                  for row in newTechs].index(tech) - 1]
            regup = sum([
                float(val)
                for val in techRegup[[row[0]
                                      for row in techRegup].index(tech)][1:]
            ]) * 1000
            flex = sum([
                float(val)
                for val in techFlex[[row[0]
                                     for row in techFlex].index(tech)][1:]
            ]) * 1000
            cont = sum([
                float(val)
                for val in techCont[[row[0]
                                     for row in techCont].index(tech)][1:]
            ]) * 1000
            techRowIdx = [row[0] for row in newTechs].index(tech)
            capac = float(newTechs[techRowIdx][techCapacCol])
            numAdded = float(addedTechs[[row[0] for row in addedTechs
                                         ].index(tech)][addedCol])
            if numAdded > 0:
                util = (gen + regup + flex + cont) / (capac * numAdded *
                                                      len(row[1:]))
            else:
                util = 0
            yearUtils.append(util)
            yearOpcosts.append(opcost)
        ax.scatter(yearOpcosts, yearUtils, color='blue', label='NewTechs')
        plt.xlim(xmin=-3)
        plt.ylim(ymin=-.02)
        plt.legend()
        plt.title('Util versus Op Cost in ' + str(year))
        plt.xlabel('Op Cost ($/MWh)')
        plt.ylabel('Utilization by Gen & Res Prov')