From 42f2f6419bbff03931654e52a885b0600eec9b9b Mon Sep 17 00:00:00 2001 From: sam-anthony Date: Sat, 26 Mar 2022 16:30:43 -0230 Subject: pressure ratio --- main.go | 16 ++++++++++++++++ pressure.go | 4 ++++ temperature.go | 2 +- ui.go | 50 ++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 63 insertions(+), 9 deletions(-) diff --git a/main.go b/main.go index 653fd61..80d0e03 100644 --- a/main.go +++ b/main.go @@ -54,6 +54,21 @@ var ( selectedPressureUnit = defaultPressureUnitIndex ) +var pressureRatio [numPoints]float32 + +func pressureRatioAt(point int) float32 { + u := pascal + m := manifoldPressure[point].asUnit(u) + a := atmosphericPressure().asUnit(u) + return m / a +} + +func init() { + for i := 0; i < numPoints; i++ { + pressureRatio[i] = pressureRatioAt(i) + } +} + func loop() { g.SingleWindow().Layout( engineDisplacementRow(), @@ -63,6 +78,7 @@ func loop() { volumetricEfficiencyRow(), intakeAirTemperatureRow(), manifoldPressureRow(), + pressureRatioRow(), ). Columns( g.TableColumn("Parameter"), diff --git a/pressure.go b/pressure.go index f486552..a6665dc 100644 --- a/pressure.go +++ b/pressure.go @@ -52,3 +52,7 @@ func (p pressure) asUnit(u pressureUnit) float32 { pa := p.val * float32(p.unit) // Convert to pascals. return pa / float32(u) // Convert to desired unit. } + +func atmosphericPressure() pressure { + return pressure{1, bar} +} diff --git a/temperature.go b/temperature.go index 89cb1ba..7562ca7 100644 --- a/temperature.go +++ b/temperature.go @@ -64,7 +64,7 @@ func (t temperature) asUnit(u temperatureUnit) (float32, error) { case kelvin: return c + 272.15, nil case fahrenheit: - return c * (9.0 / 5.0) + 32.0, nil + return c*(9.0/5.0) + 32.0, nil default: return 0, errors.New(fmt.Sprintf("invalid temperatureUnit: '%v'", u)) } diff --git a/ui.go b/ui.go index 57765a3..d72fec4 100644 --- a/ui.go +++ b/ui.go @@ -1,6 +1,9 @@ package main -import g "github.com/AllenDang/giu" +import ( + g "github.com/AllenDang/giu" + "strconv" +) func engineDisplacementRow() *g.RowWidget { return g.Row( @@ -93,18 +96,49 @@ func manifoldPressureRow() *g.TableRowWidget { u, err := pressureUnitFromString(s) check(err) - for i := range manifoldPressure { + for i := 0; i < numPoints; i++ { manifoldPressure[i] = pressure{ manifoldPressure[i].asUnit(u), u, } } }), - g.InputFloat(&manifoldPressure[0].val).Format("%.2f"), - g.InputFloat(&manifoldPressure[1].val).Format("%.2f"), - g.InputFloat(&manifoldPressure[2].val).Format("%.2f"), - g.InputFloat(&manifoldPressure[3].val).Format("%.2f"), - g.InputFloat(&manifoldPressure[4].val).Format("%.2f"), - g.InputFloat(&manifoldPressure[5].val).Format("%.2f"), + g.InputFloat(&manifoldPressure[0].val).Format("%.2f"). + OnChange(func() { + pressureRatio[0] = pressureRatioAt(0) + }), + g.InputFloat(&manifoldPressure[1].val).Format("%.2f"). + OnChange(func() { + pressureRatio[1] = pressureRatioAt(1) + }), + g.InputFloat(&manifoldPressure[2].val).Format("%.2f"). + OnChange(func() { + pressureRatio[2] = pressureRatioAt(2) + }), + g.InputFloat(&manifoldPressure[3].val).Format("%.2f"). + OnChange(func() { + pressureRatio[3] = pressureRatioAt(3) + }), + g.InputFloat(&manifoldPressure[4].val).Format("%.2f"). + OnChange(func() { + pressureRatio[4] = pressureRatioAt(4) + }), + g.InputFloat(&manifoldPressure[5].val).Format("%.2f"). + OnChange(func() { + pressureRatio[5] = pressureRatioAt(5) + }), + ) +} + +func pressureRatioRow() *g.TableRowWidget { + return g.TableRow( + g.Label("Pressure Ratio"), + g.Label(""), + g.Label(strconv.FormatFloat(float64(pressureRatio[0]), 'f', 1, 32)), + g.Label(strconv.FormatFloat(float64(pressureRatio[1]), 'f', 1, 32)), + g.Label(strconv.FormatFloat(float64(pressureRatio[2]), 'f', 1, 32)), + g.Label(strconv.FormatFloat(float64(pressureRatio[3]), 'f', 1, 32)), + g.Label(strconv.FormatFloat(float64(pressureRatio[4]), 'f', 1, 32)), + g.Label(strconv.FormatFloat(float64(pressureRatio[5]), 'f', 1, 32)), ) } -- cgit v1.2.3