Skip to content

Commit

Permalink
Merge pull request #289 from ORNL-AMO/issue-286
Browse files Browse the repository at this point in the history
Issues 286 & 288
  • Loading branch information
nbintertech authored Mar 22, 2024
2 parents dfc9f74 + c25e969 commit f4b8812
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 5 deletions.
2 changes: 2 additions & 0 deletions src/PageControls.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ PageControls[Pages.scope1Projects] = newGroupedChoicesControl({
Projects[Pages.electricBoiler].getProjectChoiceControl(),
Projects[Pages.blendedFuel].getProjectChoiceControl(),
Projects[Pages.landfillGasForOven].getProjectChoiceControl(),
Projects[Pages.heatPumpForOffice].getProjectChoiceControl(),
Projects[Pages.solarThermalHotWater].getProjectChoiceControl()
]
}
],
Expand Down
2 changes: 2 additions & 0 deletions src/Pages.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ const Pages = {
electricBoiler: Symbol('electric-boiler'),
blendedFuel: Symbol('blended-fuel'),
landfillGasForOven: Symbol('landfill-gas-for-oven'),
heatPumpForOffice: Symbol('heat-pump-for-office'),
solarThermalHotWater: Symbol('solar-thermal-for-hot-water'),
// below: scope 2 projects
lightingUpgrades: Symbol('explore-lighting-upgrades'),
greenPowerTariff: Symbol('green-power-tariff'),
Expand Down
2 changes: 1 addition & 1 deletion src/ProjectControl.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -811,7 +811,7 @@ export class ProjectControl implements ProjectControlParams {
export const Scope1Projects = [
Pages.advancedEnergyMonitoring, Pages.steamTrapsMaintenance, Pages.improvePipeInsulation, Pages.boilerControl,
Pages.airHandingUnitUpgrades, Pages.processHeatingUpgrades, Pages.wasteHeatRecovery,
Pages.electricBoiler, Pages.blendedFuel, Pages.landfillGasForOven
Pages.electricBoiler, Pages.blendedFuel, Pages.landfillGasForOven, Pages.heatPumpForOffice, Pages.solarThermalHotWater
//Pages.digitalTwinAnalysis,

//Pages.condensingEconomizerInstallation,
Expand Down
66 changes: 66 additions & 0 deletions src/Projects.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1319,4 +1319,70 @@ Projects[Pages.communityWindProject] = new ProjectControl({
visible: (state) => {
return state.gameSettings.financingOptions.greenBond && getHasFinancingStarted(state.trackedStats.currentGameYear, state.gameSettings.financingStartYear, state.gameSettings.gameYearInterval);
}
});


Projects[Pages.heatPumpForOffice] = new ProjectControl({
pageId: Pages.heatPumpForOffice,
isCapitalFundsEligible: true,
costSavingsCarryover: 'never',
baseCost: 500_000,
financedAnnualCost: 192_000,
financedTotalCost: 768_000,
financingOptions: [
{
financingType: getLoanFinancing(4),
},
],
isEnergyEfficiency: true,
statsInfoAppliers: {
electricityUseKWh: absolute(351_000),
naturalGasMMBTU: absolute(-4_000), // since the flavor text says No. 2 oil... maybe add a new stat later
},
statsActualAppliers: {
electricityUseKWh: absolute(351_000),
naturalGasMMBTU: absolute(-4_000),
},
title: 'Heat Pump for Office Conditioning',
shortTitle: 'Heat pump for office conditioning',
choiceInfoText: [`As a focus on your Scope 1 emissions, you have decided to look into electrifying your building conditioning systems.
Your on-campus offices use about {4,000 MMBty/yr} of natural gas to heat.
You think you can get an equivalent output heat pump system that will take care of heating and cooling and will be about {155-ton system}.
As your AC system is not new, but also not at the end of it's life, the corporate management team has agreed that they will pay for {25%} of the capital and installation costs.`],
choiceInfoImg: 'images/electric-boiler.png',
choiceInfoImgAlt: 'electric boiler',
choiceInfoImgObjectFit: 'contain',
recapDescription: 'Insert flavor text here!',
// add case study
});

Projects[Pages.solarThermalHotWater] = new ProjectControl({
pageId: Pages.solarThermalHotWater,
isCapitalFundsEligible: true,
costSavingsCarryover: 'never',
baseCost: 550_000,
financedAnnualCost: 55_000,
financedTotalCost: 550_000,
financingOptions: [
{
financingType: getGreenBondsFinancing(10),
},
],
isEnergyEfficiency: true,
statsInfoAppliers: {
naturalGasMMBTU: absolute(-3_750), // since the flavor text says No. 2 oil... maybe add a new stat later
},
statsActualAppliers: {
naturalGasMMBTU: absolute(-3_750),
},
title: 'Solar Thermal for Hot Water',
shortTitle: 'Solar thermal for hot water',
choiceInfoText: [`As a focus on your Scope 1 emissions, you have decided to look into a solar thermal field for some hot water needs.
As you do not wish to install water storage, you are sized for a field to match your lowest demand, leading to a system that can
deliver {2.5 MMBtu/hr}, about {1,500 hours per year}.`],
choiceInfoImg: 'images/electric-boiler.png',
choiceInfoImgAlt: 'electric boiler',
choiceInfoImgObjectFit: 'contain',
recapDescription: 'Insert flavor text here!',
// add case study
});
8 changes: 4 additions & 4 deletions src/components/YearRecap.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,7 @@ export class YearRecap extends React.Component<YearRecapProps, { inView }> {
<YearRecapCharts barGraphData={barGraphData.costPerCarbon} width={parent.width} height={400} totalGameYears={this.props.totalGameYears} graphTitle={'Cost per kg ($/kg)'} unitLable={'$/kg'} currentYear={this.props.currentGameYear} domainYaxis={1} id={'cost'} backgroundFill={'#eaeffb'} />
<YearRecapCharts barGraphData={barGraphData.naturalGas} width={parent.width} height={400} totalGameYears={this.props.totalGameYears} graphTitle={'Natural Gas Use (10K MMBtu)'} unitLable={'10K MMBtu'} currentYear={this.props.currentGameYear} domainYaxis={100} id={'naturalGas'} backgroundFill={'#f5f5f5'} />
<YearRecapCharts barGraphData={barGraphData.electricity} width={parent.width} height={400} totalGameYears={this.props.totalGameYears} graphTitle={'Electricity Use (M kWh)'} unitLable={'M kWh'} currentYear={this.props.currentGameYear} domainYaxis={100} id={'electricity'} backgroundFill={'#eaeffb'} />
<YearRecapCharts barGraphData={barGraphData.hydrogen} width={parent.width} height={400} totalGameYears={this.props.totalGameYears} graphTitle={'Landfill Gas Use (10K MMBtu)'} unitLable={'10K MMBtu'} currentYear={this.props.currentGameYear} domainYaxis={100} id={'hydrogen'} backgroundFill={'#f5f5f5'} />
<YearRecapCharts barGraphData={barGraphData.hydrogen} width={parent.width} height={400} totalGameYears={this.props.totalGameYears} graphTitle={'Landfill Gas Use (K MMBtu)'} unitLable={'K MMBtu'} currentYear={this.props.currentGameYear} domainYaxis={1} id={'hydrogen'} backgroundFill={'#f5f5f5'} />
</>
)}
</ParentSize>
Expand Down Expand Up @@ -1061,11 +1061,11 @@ export class YearRecap extends React.Component<YearRecapProps, { inView }> {
}

props.yearRangeInitialStats.forEach(year => {
barGraphData.hydrogen.push(year.hydrogenMMBTU / 10000);
barGraphData.hydrogen.push(year.hydrogenMMBTU / 1000);
});
barGraphData.hydrogen.push(mutableStats.hydrogenMMBTU / 10000);
barGraphData.hydrogen.push(mutableStats.hydrogenMMBTU / 1000);
for (let i = props.currentGameYear; i < props.totalGameYears; i++) {
barGraphData.hydrogen.push(mutableStats.hydrogenMMBTU / 10000);
barGraphData.hydrogen.push(mutableStats.hydrogenMMBTU / 1000);
}

props.yearRangeInitialStats.forEach(year => {
Expand Down

0 comments on commit f4b8812

Please sign in to comment.