aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--engine.c15
-rw-r--r--engine.h2
-rw-r--r--main.c16
-rw-r--r--ui.c19
-rw-r--r--ui.h2
5 files changed, 54 insertions, 0 deletions
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);
@@ -326,6 +328,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);
@@ -188,6 +191,11 @@ init_intercooler_deltap(UI *ui) {
}
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);
w_init_number(ui->volume_flow_rate[0]);
@@ -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);
}
@@ -373,6 +382,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;
VolumeFlowRateReader convert;
@@ -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;