Skip to content

Commit

Permalink
Merge pull request #44 from MichaelPesce/september-updates
Browse files Browse the repository at this point in the history
Add hydraulics, water quality features
  • Loading branch information
MichaelPesce authored Sep 26, 2023
2 parents 5895c16 + a9d4f4b commit b9f03bd
Show file tree
Hide file tree
Showing 15 changed files with 263 additions and 106 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: App build
on:
push:
branches:
- "update-workflow-new-cert"
- "september-updates"

defaults:
run:
Expand Down
134 changes: 73 additions & 61 deletions backend/app/internal/get_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -621,66 +621,78 @@ def get_input_lists():
]

parameter_list = [
"Units",
"PNA",
"CNA",
"CCA",
"NNA",
"NCA",
"NKA",
"NRA",
"NSA",
"FCA",
"RCA",
"RNA",
"RSA",
"SCA",
"SNA",
"PCT",
"PKT",
"FCT",
"CST",
"CCT",
"CKT",
"CompletionsPadOutsideSystem",
"DesalinationTechnologies",
"DesalinationSites",
"TruckingTime",
"CompletionsDemand",
"PadRates",
"FlowbackRates",
"NodeCapacities",
"InitialPipelineCapacity",
"InitialDisposalCapacity",
"InitialTreatmentCapacity",
"FreshwaterSourcingAvailability",
"PadOffloadingCapacity",
"CompletionsPadStorage",
"DisposalOperationalCost",
"TreatmentOperationalCost",
"ReuseOperationalCost",
"PipelineOperationalCost",
"FreshSourcingCost",
"TruckingHourlyCost",
"PipelineDiameterValues",
"DisposalCapacityIncrements",
"InitialStorageCapacity",
"StorageCapacityIncrements",
"TreatmentCapacityIncrements",
"TreatmentEfficiency",
"RemovalEfficiency",
"DisposalExpansionCost",
"StorageExpansionCost",
"TreatmentExpansionCost",
"PipelineCapexDistanceBased",
"PipelineCapexCapacityBased",
"PipelineCapacityIncrements",
"PipelineExpansionDistance",
"Hydraulics",
"Economics",
"PadWaterQuality",
"StorageInitialWaterQuality",
"PadStorageInitialWaterQuality",
"DisposalOperatingCapacity",
"Units",
"PNA",
"CNA",
"CCA",
"NNA",
"NCA",
"NKA",
"NRA",
"NSA",
"FCA",
"RCA",
"RNA",
"RSA",
"SCA",
"SNA",
"ROA",
"SOA",
"NOA",
"PCT",
"PKT",
"FCT",
"CST",
"CCT",
"CKT",
"RST",
"ROT",
"SOT",
"Elevation",
"CompletionsPadOutsideSystem",
"DesalinationTechnologies",
"DesalinationSites",
"BeneficialReuseCredit",
"TruckingTime",
"CompletionsDemand",
"PadRates",
"FlowbackRates",
"WellPressure",
"NodeCapacities",
"InitialPipelineCapacity",
"InitialPipelineDiameters",
"InitialDisposalCapacity",
"InitialTreatmentCapacity",
"ReuseMinimum",
"ReuseCapacity",
"FreshwaterSourcingAvailability",
"PadOffloadingCapacity",
"CompletionsPadStorage",
"DisposalOperationalCost",
"TreatmentOperationalCost",
"ReuseOperationalCost",
"PipelineOperationalCost",
"FreshSourcingCost",
"TruckingHourlyCost",
"PipelineDiameterValues",
"DisposalCapacityIncrements",
"InitialStorageCapacity",
"StorageCapacityIncrements",
"TreatmentCapacityIncrements",
"TreatmentEfficiency",
"RemovalEfficiency",
"DisposalExpansionCost",
"StorageExpansionCost",
"TreatmentExpansionCost",
"PipelineCapexDistanceBased",
"PipelineCapexCapacityBased",
"PipelineCapacityIncrements",
"PipelineExpansionDistance",
"Hydraulics",
"Economics",
"PadWaterQuality",
"StorageInitialWaterQuality",
"PadStorageInitialWaterQuality",
"DisposalOperatingCapacity",
]
return [set_list, parameter_list]
4 changes: 3 additions & 1 deletion backend/app/internal/pareto_stategic_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
solve_model,
PipelineCost,
PipelineCapacity,
Hydraulics,
WaterQuality
)
from pyomo.opt import TerminationCondition
Expand Down Expand Up @@ -76,6 +77,7 @@ def run_strategic_model(input_file, output_file, id, modelParameters, overrideVa
"pipeline_capacity": PipelineCapacity.input,
"node_capacity": True,
"water_quality": WaterQuality[modelParameters["waterQuality"]],
"hydraulics": Hydraulics[modelParameters["hydraulics"]],
# "build_units": BuildUnits[modelParameters["build_units"]]
},
)
Expand All @@ -88,7 +90,7 @@ def run_strategic_model(input_file, output_file, id, modelParameters, overrideVa
optimality_gap = int(modelParameters["optimalityGap"])/100
except:
optimality_gap = 0
_log.info(f'optimality gap is {optimality_gap}')
# _log.info(f'optimality gap is {optimality_gap}')
options = {
"deactivate_slacks": True,
"scale_model": modelParameters["scale_model"],
Expand Down
1 change: 1 addition & 0 deletions backend/app/internal/scenario_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ def upload_excelsheet(self, output_path, scenarioName, filename):
"runtime": 900,
"pipelineCostCalculation": "distance_based",
"waterQuality": "false",
"hydraulics": "false",
"solver": "cbc",
"build_units": "scaled_units",
"optimalityGap": 0,
Expand Down
4 changes: 2 additions & 2 deletions backend/app/routers/scenarios.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ async def run_model(request: Request, background_tasks: BackgroundTasks):
"pipelineCost": data['scenario']['optimization']['pipelineCostCalculation'],
"waterQuality": data['scenario']['optimization']['waterQuality']
}
defaultParams = {'solver': None, 'build_units': 'user_units', 'optimalityGap': 5, 'scale_model': True}
for param in ['solver', 'build_units', 'optimalityGap', 'scale_model']:
defaultParams = {'solver': None, 'build_units': 'user_units', 'optimalityGap': 5, 'scale_model': True, 'hydraulics': 'false'}
for param in ['solver', 'build_units', 'optimalityGap', 'scale_model', 'hydraulics']:
try:
modelParameters[param]=data['scenario']['optimization'][param]
except:
Expand Down
11 changes: 7 additions & 4 deletions electron/ui/cypress/e2e/ScenarioTests.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ describe('scenario testing', () => {
use sc_count for screenshot names to ensure they are saved in chronological order
start with 10 because starting with 0 would stop working when it hits 10
*/
let strategic_small_case_study_url = "https://github.com/project-pareto/project-pareto/raw/main/pareto/case_studies/strategic_small_case_study.xlsx"
// let strategic_small_case_study_url = "https://github.com/project-pareto/project-pareto/raw/main/pareto/case_studies/strategic_small_case_study.xlsx"
let strategic_toy_case_study_url = "https://github.com/project-pareto/project-pareto/raw/main/pareto/case_studies/strategic_toy_case_study.xlsx"
let sc_count = 10
it('test that scenario list loads properly', () => {
//load webpage
Expand All @@ -28,8 +29,8 @@ describe('scenario testing', () => {
sc_count+=1
})

it('download strategic small case study', () => {
cy.downloadFile(strategic_small_case_study_url,'cypress/downloads','strategic_small_case_study.xlsx')
it('download strategic toy case study', () => {
cy.downloadFile(strategic_toy_case_study_url,'cypress/downloads','strategic_toy_case_study.xlsx')
})

it('creates a new scenario by uploading excel sheet', () => {
Expand Down Expand Up @@ -59,7 +60,7 @@ describe('scenario testing', () => {
cy.screenshot(`${sc_count}_clicked create new scenario`)
sc_count+=1
cy.findByRole('textbox').type('cypress test')
cy.get('input[type=file]').selectFile('./cypress/downloads/strategic_small_case_study.xlsx', {
cy.get('input[type=file]').selectFile('./cypress/downloads/strategic_toy_case_study.xlsx', {
action: 'drag-drop',
force: true
})
Expand Down Expand Up @@ -160,6 +161,8 @@ describe('scenario testing', () => {

//run optimization with default settings
cy.findByRole('button', {name: /continue to optimization/i}).click()
cy.screenshot(`${sc_count}_optimization settings`)
sc_count+=1
// cy.findByRole('button', {name: /optimize/i}).click()
cy.findAllByRole('button', {name: /optimize/i}).eq(0).click()

Expand Down
11 changes: 10 additions & 1 deletion electron/ui/src/assets/CategoryNames.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"FlowbackRates":"Flowback Rates",
"NodeCapacities":"Node Capacities",
"InitialPipelineCapacity":"Initial Pipeline Capacity",
"InitialPipelineDiameters":"Initial Pipeline Diameters",
"InitialDisposalCapacity":"Initial Disposal Capacity",
"InitialTreatmentCapacity":"Initial Treatment Capacity",
"FreshwaterSourcingAvailability":"Freshwater Sourcing Availability",
Expand Down Expand Up @@ -39,6 +40,8 @@
"PadStorageInitialWaterQuality":"Pad Storage Initial Water Quality",
"DisposalOperatingCapacity":"Disposal Operating Capacity",
"RemovalEfficiency": "Removal Efficiency",
"WellPressure": "Well Pressure",
"Elevation": "Elevation",
"PNA":"PNA",
"CNA":"CNA",
"CCA":"CCA",
Expand Down Expand Up @@ -94,7 +97,13 @@
"v_S_DisposalCapacity_dict":"Slack Disposal Capacity",
"v_S_TreatmentCapacity_dict":"Slack reatment Capacity",
"v_S_ReuseCapacity_dict":"Slack Reuse Capacity",

"hydraulics.v_PumpHead_dict": "Hydraulics Pump Head",
"hydraulics.vb_Y_Pump_dict": "Hydraulics New Pump",
"hydraulics.v_ValveHead_dict": "Hydraulics Valve Head",
"hydraulics.v_PumpCost_dict": "Hydraulics Pump Cost",
"hydraulics.v_Pressure_dict": "Hydraulics Pressure",
"quality.v_X": "Water Quality",
"hydraulics.v_Z_HydrualicsCost": "Hydraulics Cost",
"v_Z": "Objective",
"v_R_TotalStorage": "Credit Total Storage",
"reuse_WaterKPI": "Produced Water Recycle Rate",
Expand Down
4 changes: 2 additions & 2 deletions electron/ui/src/assets/Subcategories.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
"Dynamic": [
"CompletionsDemand","DisposalOperationalCost","TreatmentOperationalCost","CompletionsPadOutsideSystem",
"DesalinationTechnologies","DesalinationSites","TruckingTime","PadRates","FlowbackRates","NodeCapacities",
"InitialPipelineCapacity","InitialDisposalCapacity","InitialTreatmentCapacity","FreshwaterSourcingAvailability",
"InitialPipelineCapacity","InitialPipelineDiameters", "InitialDisposalCapacity","InitialTreatmentCapacity","FreshwaterSourcingAvailability",
"PadOffloadingCapacity","CompletionsPadStorage","ReuseOperationalCost","PipelineOperationalCost",
"FreshSourcingCost","TruckingHourlyCost","PipelineDiameterValues","DisposalCapacityIncrements",
"InitialStorageCapacity","StorageCapacityIncrements","TreatmentCapacityIncrements","TreatmentEfficiency",
"DisposalExpansionCost","StorageExpansionCost","TreatmentExpansionCost","PipelineCapexDistanceBased",
"PipelineCapexCapacityBased","PipelineCapacityIncrements","PipelineExpansionDistance","Hydraulics",
"PipelineCapexCapacityBased","PipelineCapacityIncrements","PipelineExpansionDistance","WellPressure", "Hydraulics","Elevation",
"Economics","PadWaterQuality","StorageInitialWaterQuality","PadStorageInitialWaterQuality","DisposalOperatingCapacity", "RemovalEfficiency"
],
"Static": [
Expand Down
54 changes: 38 additions & 16 deletions electron/ui/src/components/ComparisonTable/ComparisonTable.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,42 @@ export default function ComparisonTable(props) {
setIndices([scenarioIndex, secondaryScenarioIndex])
}, [scenarioIndex, secondaryScenarioIndex])

const getValue = (index) => {
try {
return scenarios[indices[1]].results.data[category][index+1][3].toLocaleString('en-US', {maximumFractionDigits:0})
}catch(e) {
return ""
}

}


const getPercentDifference = (value1, value2) => {
let result = ((value1 - value2) / value2) * 100
if (isNaN(result)) return 0
else if(value1 > value2) return "+" + (Math.round(result * 10) / 10)
else return Math.round(result * 10) / 10
const getPercentDifference = (index) => {
try {
let value1 = scenarios[indices[0]].results.data[category][index+1][3]
let value2 = scenarios[indices[1]].results.data[category][index+1][3]

let result = ((value1 - value2) / value2) * 100
if (isNaN(result)) return 0
else if(value1 > value2) return "+" + (Math.round(result * 10) / 10)
else return Math.round(result * 10) / 10
} catch(e) {
return ""
}

}

const getDifferenceStyling = (value1, value2) => {
let style = {}
if (value1 > value2) style.color = "green"
else if (value2 > value1) style.color = "red"
return style
const getDifferenceStyling = (index) => {
try {
let value1 = scenarios[indices[0]].results.data[category][index+1][3]
let value2 = scenarios[indices[1]].results.data[category][index+1][3]
let style = {}
if (value1 > value2) style.color = "green"
else if (value2 > value1) style.color = "red"
return style
} catch (e) {
return {}
}
}

const renderOutputTable = () => {
Expand All @@ -57,8 +79,7 @@ export default function ComparisonTable(props) {
<TableCell style={{backgroundColor:"#6094bc", color:"white", width:"20%"}}>Units</TableCell>
<TableCell style={{backgroundColor:"#6094bc", color:"white", width:"20%"}} align='right'>{scenarios[indices[0]].name}</TableCell>
<TableCell style={{backgroundColor:"#6094bc", color:"white", width:"20%"}} align='right'>{scenarios[indices[1]].name}</TableCell>
<TableCell style={{backgroundColor:"#6094bc", color:"white", width:"20%"}} align='right'>Percent Difference</TableCell>
{/* <TableCell key="overview3" style={{backgroundColor:"#6094bc", color:"white", width:"25%", paddingTop:"0px"}}>{renderConfigurationSelect(1)}</TableCell> */}
<TableCell style={{backgroundColor:"#6094bc", color:"white", width:"20%"}} align='right'>Percent Difference</TableCell>
</TableRow>
</TableHead>
<TableBody>
Expand All @@ -74,6 +95,7 @@ export default function ComparisonTable(props) {
cellValue.toLocaleString('en-US', {maximumFractionDigits:0}) :
cellValue ? CategoryNames[cellValue] ? CategoryNames[cellValue] :
cellValue.replace('v_F_','').replace('v_C_','Cost ').replace(/([A-Z])/g, ' $1').replace('Cap Ex', 'CapEx').trim()
// cellValue
: null
}
</TableCell>
Expand All @@ -83,15 +105,15 @@ export default function ComparisonTable(props) {
align="right"
style={styles.other}
>
{scenarios[indices[1]].results.data[category][index+1][3].toLocaleString('en-US', {maximumFractionDigits:0})}
{getValue(index)}
</TableCell>
<TableCell
align="right"
style={styles.other}
>
<span style={getDifferenceStyling(scenarios[indices[0]].results.data[category][index+1][3], scenarios[indices[1]].results.data[category][index+1][3])}>
>
<span style={getDifferenceStyling(index)}>
{
getPercentDifference(scenarios[indices[0]].results.data[category][index+1][3], scenarios[indices[1]].results.data[category][index+1][3])
getPercentDifference(index)
}
%
</span>
Expand Down
Loading

0 comments on commit b9f03bd

Please sign in to comment.