aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--engine.h1
-rw-r--r--main.c22
-rw-r--r--ui.c57
-rw-r--r--ui.h10
4 files changed, 81 insertions, 9 deletions
diff --git a/engine.h b/engine.h
index 3922ab8..89c6a13 100644
--- a/engine.h
+++ b/engine.h
@@ -7,6 +7,7 @@ typedef struct {
Fraction ve;
Fraction comp_efficiency;
Fraction intercooler_efficiency;
+ Pressure intercooler_deltap;
} Engine;
void init_engine(Engine *e);
diff --git a/main.c b/main.c
index d357664..cfcb9fb 100644
--- a/main.c
+++ b/main.c
@@ -64,6 +64,7 @@ static void map_row(mu_Context *ctx, UI *ui);
static void ve_row(mu_Context *ctx, UI *ui);
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 volume_flow_rate_row(mu_Context *ctx, UI *ui);
static void hpad(mu_Context *ctx, int w);
@@ -143,6 +144,7 @@ main_window(mu_Context *ctx, UI *ui) {
ve_row(ctx, ui);
comp_efficiency_row(ctx, ui);
intercooler_efficiency_row(ctx, ui);
+ intercooler_deltap_row(ctx, ui);
dup_del_row(ctx, ui);
vpad(ctx, 0);
@@ -284,6 +286,26 @@ intercooler_efficiency_row(mu_Context *ctx, UI *ui) {
}
static void
+intercooler_deltap_row(mu_Context *ctx, UI *ui) {
+ int i;
+
+ mu_layout_row(ctx, 0, NULL, 0);
+ mu_layout_width(ctx, LABEL_WIDTH);
+ mu_label(ctx, "Intercooler ΔP:");
+ mu_layout_width(ctx, UNIT_WIDTH);
+ if (w_select(ctx, &ui->intercooler_deltap_unit) & MU_RES_CHANGE) {
+ set_intercooler_deltap_unit(ui);
+ }
+ mu_layout_width(ctx, FIELD_WIDTH);
+ for (i = 0; i < ui->npoints; i++) {
+ if (w_field(ctx, &ui->intercooler_deltap[i])) {
+ set_intercooler_deltap(ui, i);
+ set_volume_flow_rate(ui, i);
+ }
+ }
+}
+
+static void
dup_del_row(mu_Context *ctx, UI *ui) {
int i;
diff --git a/ui.c b/ui.c
index 9d2557e..424bf82 100644
--- a/ui.c
+++ b/ui.c
@@ -43,25 +43,35 @@ static const VolumeFlowRateReader volume_flow_rate_readers[nelem(volume_flow_rat
void
init_ui(UI *ui) {
+ ui->npoints = 1;
+ init_engine(&ui->points[0]);
+
w_init_field(&ui->displacement);
w_init_select(&ui->displacement_unit, nelem(volume_units), volume_units);
w_init_field(&ui->ambient_temperature);
w_init_select(&ui->ambient_temperature_unit, nelem(temperature_units), temperature_units);
-
+
w_init_field(&ui->ambient_pressure);
w_init_select(&ui->ambient_pressure_unit, nelem(pressure_units), pressure_units);
- ui->npoints = 1;
-
w_init_field(&ui->rpm[0]);
+ w_set_field(&ui->rpm[0], as_rpm(DEFAULT_RPM));
w_init_field(&ui->map[0]);
w_init_select(&ui->map_unit, nelem(pressure_units), pressure_units);
w_init_field(&ui->ve[0]);
+ w_set_field(&ui->ve[0], as_percent(DEFAULT_VE));
- init_engine(&ui->points[0]);
+ w_init_field(&ui->comp_efficiency[0]);
+ w_set_field(&ui->comp_efficiency[0], as_percent(DEFAULT_COMPRESSOR_EFFICIENCY));
+
+ w_init_field(&ui->intercooler_efficiency[0]);
+ w_set_field(&ui->intercooler_efficiency[0], as_percent(DEFAULT_INTERCOOLER_EFFICIENCY));
+
+ w_init_field(&ui->intercooler_deltap[0]);
+ w_init_select(&ui->intercooler_deltap_unit, nelem(pressure_units), pressure_units);
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]);
@@ -204,6 +214,35 @@ set_intercooler_efficiency(UI *ui, int idx) {
}
void
+set_intercooler_deltap(UI *ui, int idx) {
+ int unit_idx;
+ PressureMaker convert;
+ Pressure p;
+
+ unit_idx = ui->intercooler_deltap_unit.idx;
+ assert(unit_idx >= 0 && (long unsigned int) unit_idx < nelem(pressure_units));
+
+ convert = pressure_makers[unit_idx];
+ p = convert(ui->intercooler_deltap[idx].value);
+ ui->points[idx].intercooler_deltap = p;
+}
+
+void
+set_intercooler_deltap_unit(UI *ui) {
+ PressureMaker maker;
+ PressureReader reader;
+ int i;
+ Pressure p;
+
+ maker = pressure_makers[ui->intercooler_deltap_unit.oldidx];
+ reader = pressure_readers[ui->intercooler_deltap_unit.idx];
+ for (i = 0; i < ui->npoints; i++) {
+ p = maker(ui->intercooler_deltap[i].value);
+ w_set_field(&ui->intercooler_deltap[i], reader(p));
+ }
+}
+
+void
set_volume_flow_rate(UI *ui, int idx) {
int unit_idx;
VolumeFlowRateReader convert;
@@ -235,12 +274,15 @@ insert_point(UI *ui, int idx) {
}
for (i = ui->npoints; i > idx; i--) {
+ memmove(&ui->points[i], &ui->points[i-1], sizeof(ui->points[i-1]));
+
memmove(&ui->rpm[i], &ui->rpm[i-1], sizeof(ui->rpm[i-1]));
memmove(&ui->map[i], &ui->map[i-1], sizeof(ui->map[i-1]));
memmove(&ui->ve[i], &ui->ve[i-1], sizeof(ui->ve[i-1]));
memmove(&ui->comp_efficiency[i], &ui->comp_efficiency[i-1], sizeof(ui->comp_efficiency[i-1]));
memmove(&ui->intercooler_efficiency[i], &ui->intercooler_efficiency[i-1], sizeof(ui->intercooler_efficiency[i-1]));
- memmove(&ui->points[i], &ui->points[i-1], sizeof(ui->points[i-1]));
+ memmove(&ui->intercooler_deltap[i], &ui->intercooler_deltap[i-1], sizeof(ui->intercooler_deltap[i-1]));
+
memmove(&ui->volume_flow_rate[i], &ui->volume_flow_rate[i-1], sizeof(ui->volume_flow_rate[i-1]));
}
ui->npoints++;
@@ -253,12 +295,15 @@ remove_point(UI *ui, int idx) {
}
for (; idx < ui->npoints-1; idx++) {
+ memmove(&ui->points[idx], &ui->points[idx+1], sizeof(ui->points[idx]));
+
memmove(&ui->rpm[idx], &ui->rpm[idx+1], sizeof(ui->rpm[idx]));
memmove(&ui->map[idx], &ui->map[idx+1], sizeof(ui->map[idx]));
memmove(&ui->ve[idx], &ui->ve[idx+1], sizeof(ui->ve[idx]));
memmove(&ui->comp_efficiency[idx], &ui->comp_efficiency[idx+1], sizeof(ui->comp_efficiency[idx]));
memmove(&ui->intercooler_efficiency[idx], &ui->intercooler_efficiency[idx+1], sizeof(ui->intercooler_efficiency[idx]));
- memmove(&ui->points[idx], &ui->points[idx+1], sizeof(ui->points[idx]));
+ memmove(&ui->intercooler_deltap[idx], &ui->intercooler_deltap[idx+1], sizeof(ui->intercooler_deltap[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 904d239..16d3c6e 100644
--- a/ui.h
+++ b/ui.h
@@ -1,6 +1,9 @@
enum { MAX_POINTS = 16 };
typedef struct {
+ int npoints;
+ Engine points[MAX_POINTS];
+
w_Field displacement;
w_Select displacement_unit;
@@ -10,8 +13,6 @@ typedef struct {
w_Field ambient_pressure;
w_Select ambient_pressure_unit;
- int npoints;
-
w_Field rpm[MAX_POINTS];
w_Field map[MAX_POINTS];
@@ -23,7 +24,8 @@ typedef struct {
w_Field intercooler_efficiency[MAX_POINTS];
- Engine points[MAX_POINTS];
+ w_Field intercooler_deltap[MAX_POINTS];
+ w_Select intercooler_deltap_unit;
w_Select volume_flow_rate_unit;
w_Number volume_flow_rate[MAX_POINTS];
@@ -42,6 +44,8 @@ void set_map_unit(UI *ui);
void set_ve(UI *ui, int idx);
void set_comp_efficiency(UI *ui, int idx);
void set_intercooler_efficiency(UI *ui, int idx);
+void set_intercooler_deltap(UI *ui, int idx);
+void set_intercooler_deltap_unit(UI *ui);
void set_volume_flow_rate(UI *ui, int idx);
void set_all_volume_flow_rate(UI *ui);
void insert_point(UI *ui, int idx);