3. Methodology

3.1. General

The project folder for using the tool should contain an “inputs” folder containing necessary input files and a “bca_tool_code” folder containing the Python modules. Optionally, a virtual environment folder may be desirable. When running the tool, the user will be asked to provide a run ID. If a run ID is entered, that run ID will be included in the run-results folder-ID for the given run. Hitting return will use the default run ID. The tool will create an “outputs” folder within the project folder into which all run results will be saved. A timestamp is included in any run-results folder-ID so that new results never overwrite prior results. The user can enter ‘test’ at the run ID prompt. This will send outputs to a ‘test’ folder in the project folder.

The tool first reads inputs and input files. The specific input files to use (i.e., their filenames) must be specified in the Input_Files.csv file in the “UserEntry.csv” column. The tool then calculates appropriate technology costs and operating costs. Once complete, these are brought together in a set of cost results with those results saved to a run folder within the outputs folder.

Importantly, monetized values in the tool are treated as costs throughout. So a negative cost represents a savings. Also, for the most part, everything is treated in absolute terms. So absolute costs are calculated for each scenario/option/alternative and then deltas are calculated as costs in the action alternative case less costs in the no action, baseline case. As such, higher technology costs in an alternative case than those in the baseline case would result in positive delta costs, or increased costs. Likewise, lower operating costs in an alternative case relative to those in the baseline case would result in negative delta costs, or decreased costs. A decrease in operating costs represents an increase in operating savings.

3.2. Calculations and Equations

This is not meant to be an exhaustive list of all equations used in the tool, but rather a list of those that are considered to be of most interest. The associated draft Regulatory Impact Analysis (RIA) also contains explanations of calculations made.

3.2.1. Learning effects applied to costs

In the criteria air pollutant program calculations, learning effects are applied to direct costs in “steps” which coincide with MY-based cost input columns in the DirectCostInputs_byRegClass_byFuelType file. If that input file contains costs for two MY-based steps of implementation, then 2 steps of costs are calculated with step-1 being the first column of cost data and step-2 being the second column. Step-2 costs must be incremental to the step-1 costs entered in the input file. Note that both steps of costs are added to arrive at the direct costs for any given MY. Note also that direct costs are calculated for new vehicles only to represent costs on new vehicle sales.

For step-1 and later direct costs (equations show step-1 occurring in MY2027):

(3.1)\[\begin{split}& DirectCost_{optionID;engine;MY} \\ & =\small(\frac{CumulativeSales_{2027+}+Sales_{MY2027} \times SeedVolumeFactor} {Sales_{MY2027} \times (1+SeedVolumeFactor)})^{b} \times DirectCost_{optionID;engine;MY2027}\end{split}\]

where,

  • b = the learning rate (-0.245 in this analysis but can be changed via the BCA_General_Inputs.csv file)

  • DirectCost = the direct manufacturing cost absent indirect costs, and where DirectCost in step-1 (MY2027) is the sum of individual tech costs for step-1 (MY2027) as input via the DirectCostInputs_byRegClass_byFuelType file

  • optionID = the option considered (i.e, baseline or one of the action alternatives)

  • MY = the model year being considered

  • engine = a unique regclass-fueltype engine within MOVES

  • CumulativeSales = cumulative sales of MY2027 and later engines in model year, MY, of implementation

  • SeedVolumeFactor = 0 or greater to represent the number of years of learning already having occurred on a technology

For subsequent steps, e.g., new direct costs implemented in 2030:

(3.2)\[\begin{split}& DirectCost_{optionID;engine;MY} \\ & =\small(\frac{CumulativeSales_{2030+}+Sales_{MY2030} \times SeedVolumeFactor} {Sales_{MY2030} \times (1+SeedVolumeFactor)})^{b} \times DirectCost_{optionID;engine;MY2030}\end{split}\]

where,

  • CumulativeSales = cumulative sales of MY2030 and later engines in model year, MY, of implementation

  • DirectCost = marginal direct costs above those calculated for step-1 and later engines (i.e., the sum of individual tech costs for step-2 as input via the DirectCostInputs_byRegClass_byFuelType file)

In the Greenhouse Gas Program calculations, learning effects are applied to the technology costs which include both direct and indirect cost. Other than that, they are calculated consistent with what is shown above for criteria air pollutant costs.

(3.3)\[\begin{split}& TechCost_{optionID;vehicle;MY} \\ & =\small(\frac{CumulativeSales_{2027+}+Sales_{MY2027} \times SeedVolumeFactor} {Sales_{MY2027} \times (1+SeedVolumeFactor)})^{b} \times TechCost_{optionID;vehicle;MY2027}\end{split}\]

where,

  • b = the learning rate (-0.245 in this analysis but can be changed via the BCA_General_Inputs.csv file)

  • TechCost = the technology cost inclusive of indirect costs, and where TechCost in step-1 (MY2027) is from the TechCostInputs_bySourceType_byFuelType file

  • optionID = the option considered (i.e, baseline or one of the action alternatives)

  • MY = the model year being considered

  • vehicle = a unique sourcetype-regclass-fueltype vehicle within MOVES

  • CumulativeSales = cumulative sales of MY2027 and later vehicles in model year, MY, of implementation

  • SeedVolumeFactor = 0 or greater to represent the number of years of learning already having occurred

3.2.3. Discounting

3.2.3.1. Present value

(3.11)\[PV=\frac{AnnualValue_{0}} {(1+rate)^{(0+offset)}}+\frac{AnnualValue_{1}} {(1+rate)^{(1+offset)}} +⋯+\frac{AnnualValue_{n}} {(1+rate)^{(n+offset)}}\]

where,

  • PV = present value

  • AnnualValue = annual costs or annual benefits or annual net of costs and benefits

  • rate = discount rate

  • 0, 1, …, n = the period or years of discounting

  • offset = controller to set the discounting approach (0 means first costs occur at time=0; 1 means costs occur at time=1)

3.2.3.2. Annualized value

When the present value offset in equation (3.11) equals 0:

(3.12)\[AV=PV\times\frac{rate\times(1+rate)^{n}} {(1+rate)^{(n+1)}-1}\]

When the present value offset in equation (3.11) equals 1:

(3.13)\[AV=PV\times\frac{rate\times(1+rate)^{n}} {(1+rate)^{n}-1}\]

where,

  • AV = annualized value of costs or benefits or net of costs and benefits

  • PV = present value of costs or benefits or net of costs and benefits

  • rate = discount rate

  • n = the number of periods over which to annualize the present value

3.3. Sensitivites

The BCA_General_Inputs file contains several inputs that can be adjusted as indicated within the file. Input values in other files can also be adjusted. It is suggested that the structure of the input files not be changed and that the headers and names within the input files not be changed unless the user is willing to modify the Python code in the event that changes result in errors.