Example #1
0
def calcGHGImpact(tl_array):
    jet_a_out = UF.returnPintQty(tl_array,
                                 [[UF.substance_name, 'Jet-A'],
                                  [UF.input_or_output, D.tl_output]]).magnitude
    diesel_out = UF.returnPintQty(
        tl_array, [[UF.substance_name, 'Diesel'],
                   [UF.input_or_output, D.tl_output]]).magnitude
    gasoline_out = UF.returnPintQty(
        tl_array, [[UF.substance_name, 'Gasoline'],
                   [UF.input_or_output, D.tl_output]]).magnitude
    transport_fuel_energy = 46.0 * (jet_a_out + diesel_out + gasoline_out)

    # note that excel formula has a few others. zero for grass so omitting.
    total_MJ = transport_fuel_energy + UF.returnPintQty(
        tl_array, [[UF.substance_name, 'Electricity'],
                   [UF.input_or_output, D.tl_output]]).magnitude

    GHG_impact = 0

    for i in range(len(tl_array)):
        row_vals = tl_array.loc[i]
        subst_name = row_vals[UF.substance_name]
        in_or_out = row_vals[UF.input_or_output]
        mag = row_vals[UF.magnitude]
        if in_or_out != D.zeroed:
            match_list = [[D.LCA_key_str, subst_name], [D.LCA_IO, in_or_out]]
            LCA_val = UF.returnLCANumber(D.LCA_inventory_df, match_list,
                                         D.LCA_GHG_impact)
            GHG_impact += (LCA_val * mag)

    return 75 + GHG_impact / total_MJ
Example #2
0
def convertGrassBiomass(size, biomass_IO_array):
    return_array = UF.createEmptyFrame()
    forestry_vals = forestry_cited_values_dict
    forestry_out = forestry_out_vals
    
    in_list = conv_in_list
    out_list = conv_out_list
    match_list = [[UF.input_or_output, D.tl_output],
                  [UF.substance_name, 'Woody Biomass']]
    grass_biomass_out_qty = UF.returnPintQty(biomass_IO_array, match_list)
    scaling_param = size.qty * (grass_biomass_out_qty/
                    (size.qty * D.forestry_woody_biomass_val.qty))
    
    # special write of woody biomass
    return_array.loc[0] = UF.getWriteRow('Woody Biomass', D.conv, 
                                      D.tl_input, grass_biomass_out_qty)
    
    row_count = 1

    for substance in in_list:
        pint_qty = scaling_param*forestry_vals[substance].qty
        return_array.loc[row_count] = UF.getWriteRow(substance, D.conv, 
                                                  D.tl_input, pint_qty)
        row_count += 1
        
    for substance in out_list:
        pint_qty = scaling_param*forestry_out[substance].qty
        return_array.loc[row_count] = UF.getWriteRow(substance, D.conv, 
                                                  D.tl_output, pint_qty)
        row_count += 1
        
    return return_array
Example #3
0
def upgradeGrassProducts(size, conv_IO_array):
    return_array = UF.createEmptyFrame()
    forestry_vals = forestry_upgr_in
    forestry_out = forestry_upgr_out
    in_list = upgr_in_list
    out_list = upgr_out_list
    match_list = [[UF.input_or_output, D.tl_output],
                  [UF.substance_name, 'Woody Biomass']]
    grass_biomass_out_qty = UF.returnPintQty(conv_IO_array, match_list)
    scaling_param = size.qty * (grass_biomass_out_qty /
                                (size.qty * D.forestry_woody_biomass_val.qty))

    row_count = 0

    for substance in in_list:
        pint_qty = scaling_param * forestry_vals[substance].qty
        return_array.loc[row_count] = UF.getWriteRow(substance, D.upgrading,
                                                     D.tl_input, pint_qty)
        row_count += 1

    for substance in out_list:
        pint_qty = scaling_param * forestry_out[substance].qty
        return_array.loc[row_count] = UF.getWriteRow(substance, D.upgrading,
                                                     D.tl_output, pint_qty)
        row_count += 1

    return return_array
Example #4
0
def calc_MFSP(tl_array):
    capex_qty = UF.returnPintQty(tl_array,
                                 [[UF.substance_name, 'Capital Cost']])
    land_cost_qty = UF.returnPintQty(
        tl_array, [[UF.substance_name, 'Land Capital Cost']])
    capex = capex_qty.magnitude + land_cost_qty.magnitude  #inputs ['capex']
    labor = UF.returnPintQty(tl_array,
                             [[UF.substance_name, 'Labor']]).magnitude

    #calculating total costs for inputs to the pathway (opex)

    opex = calcOPEX(tl_array)

    #Economic analysis variables
    ecovar = {
        'disc rate': 0.1,
        't': 0.2,
        'equity': 0.4,
        'interest': 0.08,
        'loan term': 10,
        'maint rate': 0.03,
        'ins rate': 0.01,
        'land lease': 0,
        'dep capex': 0.85
    }
    macrs = [0.143, 0.245, 0.175, 0.125, 0.089, 0.089, 0.089, 0.045]
    ###yrs = input('What is the project lifespan? ')
    landcapex = land_cost_qty.magnitude

    #Total depreciable investment
    depinv = capex_qty.magnitude * ecovar['dep capex']
    #Investment-loan share
    invloanshare = capex * (1 - ecovar['equity'])
    #Loan annual payment
    loanannpay = capex * (1 - ecovar['equity']) * ecovar['interest'] * (
        1 + ecovar['interest'])**ecovar['loan term'] / (
            (1 + ecovar['interest'])**ecovar['loan term'] - 1)
    #Investment-equity share
    invequityshare = capex * (ecovar['equity'])
    #Salvage value end of life
    salvage = landcapex
    #Annual insurance
    annins = depinv * ecovar['ins rate']
    #Annual maintenance
    annmaint = depinv * ecovar['maint rate']
    #Annual material and energy costs = opex, Annual labor costs = labor
    #Fixed operating costs in $/yr
    fopex = annins + annmaint + opex + labor

    #creating MACRS list with zeros at the end to match duration of project
    depyrs = len(macrs)
    dif = int(yrs) - depyrs
    if dif > 0:
        addzero = [0] * dif
        macrs.extend(addzero)

    depreciation = []
    i = 0

    #calculating depreciation of depreciable investment in each year
    while i < len(macrs):
        depreciation.append(depinv * macrs[i])
        i += 1

    i = 0

    #calculating loan payment, interest, and principle for each time step
    loanpay = []
    loanint = []
    loanprin = []

    while i < int(ecovar['loan term']):
        loanpay.append(loanannpay)
        if i == 0:
            loanint.append(invloanshare * ecovar['interest'])
            loanprin.append(invloanshare - loanpay[i] + loanint[i])
        else:
            loanint.append(loanprin[i - 1] * ecovar['interest'])
            loanprin.append(loanprin[i - 1] - loanpay[i] + loanint[i])

        i += 1

    #adding zeros to the end of loan payment, interest, and principle for duration of project
    dif = int(yrs) - len(loanprin)

    if dif > 0:
        addzero = [0] * dif
        loanpay.extend(addzero)
        loanint.extend(addzero)
        loanprin.extend(addzero)

    result = s_opt.minimize_scalar(lambda price_per_MJ: NPV_goal(
        price_per_MJ, fopex, depreciation, loanint, ecovar, invequityshare,
        loanpay, tl_array))

    return result.x * 152.79288
Example #5
0
def NPV_goal(price_per_MJ, fopex, depreciation, loanint, ecovar,
             invequityshare, loanpay, tl_array):
    jet_a_out = UF.returnPintQty(tl_array,
                                 [[UF.substance_name, 'Jet-A'],
                                  [UF.input_or_output, D.tl_output]]).magnitude
    diesel_out = UF.returnPintQty(
        tl_array, [[UF.substance_name, 'Diesel'],
                   [UF.input_or_output, D.tl_output]]).magnitude
    gasoline_out = UF.returnPintQty(
        tl_array, [[UF.substance_name, 'Gasoline'],
                   [UF.input_or_output, D.tl_output]]).magnitude
    transport_fuel_energy = 46.0 * (jet_a_out + diesel_out + gasoline_out)
    nonfuel_value = calcNonFuelValue(tl_array)
    annrevenue = nonfuel_value + price_per_MJ * transport_fuel_energy

    #calculating total annual revenue from annual fuel revenue and co product revenue
    # for key in prodcost:
    #     if key in prodcost and key in outputs:
    #         annrevenue += prodcost [key] * outputs[key]

    #calculating net income
    netincome = []
    years = int(yrs)
    i = 0

    while i < years:
        netincome.append(annrevenue - fopex - depreciation[i] - loanint[i])
        i += 1

    #calculating losses forward and taxable income
    lossforward = []
    taxincome = [0]
    i = 0

    while i < years:
        if taxincome[i] < 0:
            lossforward.append(taxincome[i])
        else:
            lossforward.append(0)
        taxincome.append(lossforward[i] + netincome[i])
        i += 1
    taxincome.pop(0)

    #calculating income tax

    i = 0
    incometax = []
    while i < years:
        if taxincome[i] < 0:
            incometax.append(0)
        else:
            incometax.append(taxincome[i] * ecovar['t'])
        i += 1
    # calculating cash flow
    cashflow = [-invequityshare]
    i = 1

    while i < years + 1:
        cashflow.append(annrevenue - fopex - loanpay[i - 1] - incometax[i - 1])
        i += 1

    # calculating discounted cash flow
    disccashflow = []
    i = 0

    while i < years + 1:
        disccashflow.append(cashflow[i] / (1 + ecovar['disc rate'])**i)
        i += 1

    # calculating cumulative discounted cash flow
    cumdisccashflow = [disccashflow[0]]

    i = 1

    while i < years + 1:
        cumdisccashflow.append(cumdisccashflow[i - 1] + disccashflow[i])
        i += 1

    # NPV retrieval from cumulative discounted cash flow
    npv = cumdisccashflow

    return abs(npv[-1])