Production Financial Analysis Scenario Tool
Project description
ProFAST
The Production Financial Analysis Scenario Tool (ProFAST) is the python version of H2FAST. ProFAST provides a quick and convenient in-depth financial analysis for production systems and services based on Generally Accepted Accounting Principles (GAAP) methodology.
Please see https://www.nrel.gov/hydrogen/h2fast.html for the H2FAST excel model
NOTICE
Copyright © 2023 Alliance for Sustainable Energy, LLC These data were produced by the Alliance for Sustainable Energy, LLC (Contractor) under Contract No. DE-AC36-08GO28308 with the U.S. Department of Energy (DOE). During the period of commercialization or such other time period specified by the DOE, the Government is granted for itself and others acting on its behalf a nonexclusive, paid-up, irrevocable worldwide license in this data to reproduce, prepare derivative works, and perform publicly and display publicly, by or on behalf of the Government. Subsequent to that period the Government is granted for itself and others acting on its behalf a nonexclusive, paid-up, irrevocable worldwide license in this data to reproduce, prepare derivative works, distribute copies to the public, perform publicly and display publicly, and to permit others to do so. The specific term of the license can be identified by inquiry made to the Contractor or DOE. NEITHER CONTRACTOR, THE UNITED STATES, NOR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF THEIR EMPLOYEES, MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF ANY DATA, APPARATUS, PRODUCT, OR PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS.
LICENSE
Citation
Kee, Jamie, Penev, Michael, and USDOE Office of Energy Efficiency and Renewable Energy. ProFAST (Production Financial Analysis Scenario Tool) [SWR-23-88]. Computer software. USDOE Office of Energy Efficiency and Renewable Energy (EERE), Office of Sustainable Transportation. Hydrogen Fuel Cell Technologies Office (HFTO). 9 Nov. 2023. Web. doi:10.11578/dc.20231211.1.
Setup
ProFAST can be installed using pip. Refer to pyproject.toml for configuration. ProFAST is installed as a compiled python file.
Installation
$ pip install .
Testing
$ pytest
Quick Start Example
This quick start example is also in generic_example.py and can be accessed for exmaple usage.
Start by importing the ProFAST class from the ProFAST package
from ProFAST import ProFAST
Initialize a ProFAST instance
pf = ProFAST()
Set parameter values for the financial model (you set some of them to 0 or not set them at all)
# Define general inflation rate
gen_inflation = 0.019
# Sales specification
pf.set_params('commodity',{"name":'Hydrogen',"unit":"kg","initial price":4,"escalation":gen_inflation}) # Define the primary commodity
pf.set_params('analysis start year',2025)
pf.set_params('operating life',30) # Years of production
pf.set_params('installation months',20) # Months of installation (no production)
pf.set_params('demand rampup',2) # Years of ramp up (linear)
pf.set_params('long term utilization',0.9) # The utilization or capacity factor of the plant, relative to the nameplate capacity
# Installation information:
pf.set_params('capacity',50000) #units/day # Nameplate capacity
pf.set_params('installation cost',{"value":0,"depr type":"Straight line","depr period":5,"depreciable":False}) # Can be separated from capital items
pf.set_params('non depr assets',10000) # Such as land
pf.set_params('end of proj sale non depr assets',10000*(1+gen_inflation)**30) # Sale of land at project end
pf.set_params('maintenance',{"value":5000,"escalation":gen_inflation}) # Annual maintenance cost
# Incentives specification
pf.set_params('one time cap inct',{"value":250000,"depr type":"MACRS","depr period":5,"depreciable":False}) # Such as a capital grant, cost share, or investment tax credit
pf.set_params('annual operating incentive',{"value":1000,"decay":0,"sunset years":6,"taxable":True}) # Annual incentive (treated as income)
pf.set_params('incidental revenue',{"value":500,"escalation":gen_inflation}) # Such as coffee sales
# Take or pay specification
pf.set_params('TOPC',{"unit price":1,"decay":0.01,"support utilization":0.6,"sunset years":3}) # Underutilization support
# Other operating expenses
pf.set_params('credit card fees',0.025) # Fraction of sales revenue
pf.set_params('sales tax',0.023) # Fraction of sales revenue
# pf.set_params('road tax',{"value":0,"escalation":0}) # Cost per unit of commodity ($/kg)
pf.set_params('labor',{"value":20*40*52,"rate":20,"escalation":gen_inflation}) # 20 workers at 40hrs a week for 20$/hr
pf.set_params('license and permit',{'value':2000,'escalation':gen_inflation}) # $/yr for licensing and permitting
pf.set_params('rent',{'value':50000,'escalation':gen_inflation}) # $/yr, for example for equipment
pf.set_params('property tax and insurance',0.009) # Fraction of plant property and equipment
pf.set_params('admin expense',0.005) # Fraction of sales revenue
# Financing information
pf.set_params('total income tax rate',0.2574) # Combined tax rate
pf.set_params('capital gains tax rate',0.15) # Only for any gains made on non depreciable assets
pf.set_params('sell undepreciated cap',True)
pf.set_params('tax losses monetized',True) # Offset coupled business tax liabilities
pf.set_params('tax loss carry forward years',0) # If tax losses are carried forward
pf.set_params('general inflation rate',gen_inflation)
pf.set_params('leverage after tax nominal discount rate',0.08) # Discount rate, and expected financial performance
pf.set_params('debt equity ratio of initial financing',1.5) # D2E ratio at start
pf.set_params('debt type','Revolving debt') # Bond/Revolving debt or one time loan
pf.set_params('loan period if used',0) # Only for one time loan
pf.set_params('debt interest rate',0.037) # Interest rate for loan
pf.set_params('cash onhand',1) # Number of month of monthly expenses in liquidity
Set the feedstocks
pf.add_feedstock(name='Water',usage=3.78,unit='gal',cost=0.005,escalation=gen_inflation) #3.78gal/kg H2
pf.add_feedstock(name='Electricity (industrial)',usage=55.5,unit='kWh',cost=0.15,escalation=gen_inflation)
You can also use dictionaries and list to set the usages and costs
years = list(map(str,range(2025-1,2025+30+2)))
elec_usage = np.linspace(55.5,65,len(years))
elec_usage_dict = dict(zip(years,elec_usage))
pf.add_feedstock(name='Electricity (industrial) dict',usage=elec_usage_dict,unit='kWh',cost=0.15,escalation=gen_inflation)
pf.remove_feedstock(name='Electricity (industrial) dict')
You can also use AEO feedstocks (Name and Cost must be valid values from AEO list)
pf.edit_feedstock(name='Electricity (industrial)',value={'cost':'Mountain'})
# AEO feedstocks can be modified for sensitivity analysis
pf.edit_feedstock(name='Electricity (industrial)',value={'usage':55.5,'cost':'1.1X Mountain'})
Set the coproducts
pf.add_coproduct(name='Oxygen',usage=7,unit='mol',cost=0.01,escalation=gen_inflation)
pf.edit_coproduct(name='Oxygen',value={'usage':7})
Set the capital items. These have a depreciation and a refurbishment schedule
dol_per_kw = 500
kW = 50000/24*55.5
pf.add_capital_item(name='PEM Stack',cost=kW*dol_per_kw,depr_type='MACRS',depr_period=7,refurb=[0,0,0,0,0,0,0.15]*4) # Refurb 15% every 7 years
pf.add_capital_item(name='BOP',cost=1000000,depr_type='MACRS',depr_period=7,refurb=[0])
Set the fixed costs. which is a annual cost
pf.add_fixed_cost(name='Fixed costs',usage=1,unit='$',cost=3000000,escalation=gen_inflation)
Set the incentives, which is a per unit commodity based incentive
pf.add_incentive(name='PTC',value=3,decay=0,sunset_years=10,tax_credit=True)
This solves for the break even price - access it with sol["price"]
sol = pf.solve_price()
unit = pf.vals['commodity']['unit']
name = pf.vals['commodity']['name']
print('\n')
print(f'Levelized cost of {name} price: ${round(sol["lco"],2)}/{unit}')
print('\n')
Plot the cost breakdowns
pf.plot_costs()
Premade files
Refer to the resources directory for premade JSON files to load in a ProFAST instance, where the input parameter is the filename. For example, to load in a sample central grid electrolysis PEM
pf = ProFAST('central_grid_electrolysis_PEM')
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file profast-1.0.4.tar.gz
.
File metadata
- Download URL: profast-1.0.4.tar.gz
- Upload date:
- Size: 11.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 604d743d28a7efae47438df7dccee3ef78511cb609d47f5a62554857189eadd2 |
|
MD5 | acd2f3cb352f8a561bc8e2e4f7931523 |
|
BLAKE2b-256 | aeeb4164703c94b357df3ab4d1fe8cce5d34eca05e0ebd4290b17da45c55cd66 |
File details
Details for the file ProFAST-1.0.4-py3-none-any.whl
.
File metadata
- Download URL: ProFAST-1.0.4-py3-none-any.whl
- Upload date:
- Size: 11.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9941dbfee89cdba7e9b68d0d4d25226b976f4a1ed8ba24435d86ecb0ac185842 |
|
MD5 | e520a31dacbb56f1c96adf8e8b42afbb |
|
BLAKE2b-256 | 1ead02b7ccbe24600210efc11ae1519950388a01f814674e17d3728ddd6680fa |