From f7970f9b769369220ed3c607a27081b8ea93e409 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Sat, 1 Mar 2025 18:53:29 -0500 Subject: add pressure ratio output --- engine.c | 15 +++++++++++++++ engine.h | 2 ++ main.c | 16 ++++++++++++++++ ui.c | 19 +++++++++++++++++++ ui.h | 2 ++ 5 files changed, 54 insertions(+) diff --git a/engine.c b/engine.c index 1817180..5c1568d 100644 --- a/engine.c +++ b/engine.c @@ -13,6 +13,21 @@ init_engine(Engine *e) { memset(e, 0, sizeof(*e)); } +/* Pressure ratio across the compressor. */ +double +pressure_ratio(const Engine *e) { + Pressure p1, p2; + + p1 = e->ambient_pressure; + p2 = comp_outlet_pressure(e); + return p2 / p1; +} + +Pressure +comp_outlet_pressure(const Engine *e) { + return e->map + e->intercooler_deltap; +} + VolumeFlowRate volume_flow_rate(const Engine *e) { double n = as_rpm(e->rpm); diff --git a/engine.h b/engine.h index 89c6a13..7e1eb1e 100644 --- a/engine.h +++ b/engine.h @@ -11,4 +11,6 @@ typedef struct { } Engine; void init_engine(Engine *e); +Pressure comp_outlet_pressure(const Engine *e); +double pressure_ratio(const Engine *e); VolumeFlowRate volume_flow_rate(const Engine *e); diff --git a/main.c b/main.c index 8242853..4faa1de 100644 --- a/main.c +++ b/main.c @@ -66,6 +66,7 @@ static void comp_efficiency_row(mu_Context *ctx, UI *ui); static void intercooler_efficiency_row(mu_Context *ctx, UI *ui); static void intercooler_deltap_row(mu_Context *ctx, UI *ui); static void dup_del_row(mu_Context *ctx, UI *ui); +static void pressure_ratio_row(mu_Context *ctx, UI *ui); static void volume_flow_rate_row(mu_Context *ctx, UI *ui); static void hpad(mu_Context *ctx, int w); static void vpad(mu_Context *ctx, int h); @@ -149,6 +150,7 @@ main_window(mu_Context *ctx, UI *ui) { vpad(ctx, 0); + pressure_ratio_row(ctx, ui); volume_flow_rate_row(ctx, ui); mu_end_window(ctx); @@ -325,6 +327,20 @@ dup_del_row(mu_Context *ctx, UI *ui) { } } +static void +pressure_ratio_row(mu_Context *ctx, UI *ui) { + int i; + + mu_layout_row(ctx, 0, NULL, 0); + mu_layout_width(ctx, LABEL_WIDTH); + mu_label(ctx, "Pressure ratio:"); + hpad(ctx, UNIT_WIDTH); + mu_layout_width(ctx, FIELD_WIDTH); + for (i = 0; i < ui->npoints; i++) { + w_number(ctx, ui->pressure_ratio[i]); + } +} + static void volume_flow_rate_row(mu_Context *ctx, UI *ui) { int i; diff --git a/ui.c b/ui.c index 0aeaae8..b8d959d 100644 --- a/ui.c +++ b/ui.c @@ -60,7 +60,9 @@ static void init_ve(UI *ui); static void init_comp_efficiency(UI *ui); static void init_intercooler_efficiency(UI *ui); static void init_intercooler_deltap(UI *ui); +static void init_pressure_ratio(UI *ui); static void init_volume_flow_rate(UI *ui); +static void compute_pressure_ratio(UI *ui, int idx); static void compute_volume_flow_rate(UI *ui, int idx); @@ -80,6 +82,7 @@ init_ui(UI *ui) { init_intercooler_efficiency(ui); init_intercooler_deltap(ui); + init_pressure_ratio(ui); init_volume_flow_rate(ui); compute(ui, 0); @@ -187,6 +190,11 @@ init_intercooler_deltap(UI *ui) { set_intercooler_deltap(ui, 0); } +static void +init_pressure_ratio(UI *ui) { + w_init_number(ui->pressure_ratio[0]); +} + static void init_volume_flow_rate(UI *ui) { w_init_select(&ui->volume_flow_rate_unit, nelem(volume_flow_rate_units), volume_flow_rate_units); @@ -360,6 +368,7 @@ set_intercooler_deltap_unit(UI *ui) { void compute(UI *ui, int idx) { + compute_pressure_ratio(ui, idx); compute_volume_flow_rate(ui, idx); } @@ -372,6 +381,14 @@ compute_all(UI *ui) { } } +static void +compute_pressure_ratio(UI *ui, int idx) { + double pr; + + pr = pressure_ratio(&ui->points[idx]); + w_set_number(ui->pressure_ratio[idx], pr); +} + static void compute_volume_flow_rate(UI *ui, int idx) { int unit_idx; @@ -404,6 +421,7 @@ insert_point(UI *ui, int idx) { memmove(&ui->intercooler_efficiency[i], &ui->intercooler_efficiency[i-1], sizeof(ui->intercooler_efficiency[i-1])); memmove(&ui->intercooler_deltap[i], &ui->intercooler_deltap[i-1], sizeof(ui->intercooler_deltap[i-1])); + memmove(&ui->pressure_ratio[i], &ui->pressure_ratio[i-1], sizeof(ui->pressure_ratio[i-1])); memmove(&ui->volume_flow_rate[i], &ui->volume_flow_rate[i-1], sizeof(ui->volume_flow_rate[i-1])); } ui->npoints++; @@ -425,6 +443,7 @@ remove_point(UI *ui, int idx) { memmove(&ui->intercooler_efficiency[idx], &ui->intercooler_efficiency[idx+1], sizeof(ui->intercooler_efficiency[idx])); memmove(&ui->intercooler_deltap[idx], &ui->intercooler_deltap[idx+1], sizeof(ui->intercooler_deltap[idx])); + memmove(&ui->pressure_ratio[idx], &ui->pressure_ratio[idx+1], sizeof(ui->pressure_ratio[idx])); memmove(&ui->volume_flow_rate[idx], &ui->volume_flow_rate[idx+1], sizeof(ui->volume_flow_rate[idx])); } ui->npoints--; diff --git a/ui.h b/ui.h index bd00b68..c83dff8 100644 --- a/ui.h +++ b/ui.h @@ -27,6 +27,8 @@ typedef struct { w_Field intercooler_deltap[MAX_POINTS]; w_Select intercooler_deltap_unit; + w_Number pressure_ratio[MAX_POINTS]; + w_Select volume_flow_rate_unit; w_Number volume_flow_rate[MAX_POINTS]; } UI; -- cgit v1.2.3