aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2025-03-02 15:01:54 -0500
committerSam Anthony <sam@samanthony.xyz>2025-03-02 15:01:54 -0500
commit9ac96f1c5f795f80b1a01ebe3dc6b036cf2a7e07 (patch)
treedbbd3f1ca402f928894773db429ea4acbfc75efb
parent640d079ba6256121c45522e9a5fc0eef8725ff8c (diff)
downloadvolute-9ac96f1c5f795f80b1a01ebe3dc6b036cf2a7e07.zip
add mass flow rate outputsmicroui
-rw-r--r--main.c24
-rw-r--r--ui.c57
-rw-r--r--ui.h6
3 files changed, 85 insertions, 2 deletions
diff --git a/main.c b/main.c
index 9e89274..a18f08f 100644
--- a/main.c
+++ b/main.c
@@ -25,7 +25,7 @@ enum window {
enum layout {
LABEL_WIDTH = 128,
- UNIT_WIDTH = 48,
+ UNIT_WIDTH = 52,
FIELD_WIDTH = 64,
};
@@ -73,6 +73,8 @@ static void pressure_ratio_row(mu_Context *ctx, UI *ui);
static void comp_outlet_temperature_row(mu_Context *ctx, UI *ui);
static void manifold_temperature_row(mu_Context *ctx, UI *ui);
static void volume_flow_rate_row(mu_Context *ctx, UI *ui);
+static void mass_flow_rate_row(mu_Context *ctx, UI *ui);
+static void mass_flow_rate_corrected_row(mu_Context *ctx, UI *ui);
static void output_row(mu_Context *ctx, UI *ui, const char *label, w_Select *unit, w_Number outputs[]);
static void hpad(mu_Context *ctx, int w);
static void vpad(mu_Context *ctx, int h);
@@ -160,6 +162,8 @@ main_window(mu_Context *ctx, UI *ui) {
comp_outlet_temperature_row(ctx, ui);
manifold_temperature_row(ctx, ui);
volume_flow_rate_row(ctx, ui);
+ mass_flow_rate_row(ctx, ui);
+ mass_flow_rate_corrected_row(ctx, ui);
mu_end_window(ctx);
}
@@ -352,12 +356,28 @@ manifold_temperature_row(mu_Context *ctx, UI *ui) {
static void
volume_flow_rate_row(mu_Context *ctx, UI *ui) {
output_row(ctx, ui,
- "Volume flow rate:",
+ "Volume flow:",
&ui->volume_flow_rate_unit,
ui->volume_flow_rate);
}
static void
+mass_flow_rate_row(mu_Context *ctx, UI *ui) {
+ output_row(ctx, ui,
+ "Mass flow:",
+ &ui->mass_flow_rate_unit,
+ ui->mass_flow_rate);
+}
+
+static void
+mass_flow_rate_corrected_row(mu_Context *ctx, UI *ui) {
+ output_row(ctx, ui,
+ "Mass flow at STP:",
+ &ui->mass_flow_rate_corrected_unit,
+ ui->mass_flow_rate_corrected);
+}
+
+static void
output_row(mu_Context *ctx, UI *ui, const char *label, w_Select *unit, w_Number outputs[]) {
int i;
diff --git a/ui.c b/ui.c
index a80c207..9727717 100644
--- a/ui.c
+++ b/ui.c
@@ -50,6 +50,11 @@ static const VolumeFlowRateReader volume_flow_rate_readers[nelem(volume_flow_rat
as_cubic_metre_per_sec, as_cubic_foot_per_min,
};
+static const char *const mass_flow_rate_units[] = {"kg/s", "lb/min"};
+static const MassFlowRateReader mass_flow_rate_readers[nelem(volume_flow_rate_units)] = {
+ as_kilo_per_sec, as_pound_per_min,
+};
+
static void init_displacement(UI *ui);
static void init_ambient_temperature(UI *ui);
@@ -64,10 +69,14 @@ static void init_pressure_ratio(UI *ui);
static void init_comp_outlet_temperature(UI *ui);
static void init_manifold_temperature(UI *ui);
static void init_volume_flow_rate(UI *ui);
+static void init_mass_flow_rate(UI *ui);
+static void init_mass_flow_rate_corrected(UI *ui);
static void compute_pressure_ratio(UI *ui, int idx);
static void compute_comp_outlet_temperature(UI *ui, int idx);
static void compute_manifold_temperature(UI *ui, int idx);
static void compute_volume_flow_rate(UI *ui, int idx);
+static void compute_mass_flow_rate(UI *ui, int idx);
+static void compute_mass_flow_rate_corrected(UI *ui, int idx);
void
@@ -90,6 +99,8 @@ init_ui(UI *ui) {
init_comp_outlet_temperature(ui);
init_manifold_temperature(ui);
init_volume_flow_rate(ui);
+ init_mass_flow_rate(ui);
+ init_mass_flow_rate_corrected(ui);
compute(ui, 0);
}
@@ -219,6 +230,18 @@ init_volume_flow_rate(UI *ui) {
w_init_number(ui->volume_flow_rate[0]);
}
+static void
+init_mass_flow_rate(UI *ui) {
+ w_init_select(&ui->mass_flow_rate_unit, nelem(mass_flow_rate_units), mass_flow_rate_units);
+ w_init_number(ui->mass_flow_rate[0]);
+}
+
+static void
+init_mass_flow_rate_corrected(UI *ui) {
+ w_init_select(&ui->mass_flow_rate_corrected_unit, nelem(mass_flow_rate_units), mass_flow_rate_units);
+ w_init_number(ui->mass_flow_rate_corrected[0]);
+}
+
void
set_displacement(UI *ui) {
int idx, i;
@@ -390,6 +413,8 @@ compute(UI *ui, int idx) {
compute_comp_outlet_temperature(ui, idx);
compute_manifold_temperature(ui, idx);
compute_volume_flow_rate(ui, idx);
+ compute_mass_flow_rate(ui, idx);
+ compute_mass_flow_rate_corrected(ui, idx);
}
void
@@ -451,6 +476,34 @@ compute_volume_flow_rate(UI *ui, int idx) {
w_set_number(ui->volume_flow_rate[idx], v);
}
+static void
+compute_mass_flow_rate(UI *ui, int idx) {
+ int unit_idx;
+ MassFlowRateReader convert;
+ double v;
+
+ unit_idx = ui->mass_flow_rate_unit.idx;
+ assert(unit_idx >= 0 && (long unsigned int) unit_idx < nelem(mass_flow_rate_units));
+
+ convert = mass_flow_rate_readers[unit_idx];
+ v = convert(mass_flow_rate(&ui->points[idx]));
+ w_set_number(ui->mass_flow_rate[idx], v);
+}
+
+static void
+compute_mass_flow_rate_corrected(UI *ui, int idx) {
+ int unit_idx;
+ MassFlowRateReader convert;
+ double v;
+
+ unit_idx = ui->mass_flow_rate_corrected_unit.idx;
+ assert(unit_idx >= 0 && (long unsigned int) unit_idx < nelem(mass_flow_rate_units));
+
+ convert = mass_flow_rate_readers[unit_idx];
+ v = convert(mass_flow_rate_corrected(&ui->points[idx]));
+ w_set_number(ui->mass_flow_rate_corrected[idx], v);
+}
+
void
insert_point(UI *ui, int idx) {
int i;
@@ -473,6 +526,8 @@ insert_point(UI *ui, int idx) {
memmove(&ui->comp_outlet_temperature[i], &ui->comp_outlet_temperature[i-1], sizeof(ui->comp_outlet_temperature[i-1]));
memmove(&ui->manifold_temperature[i], &ui->manifold_temperature[i-1], sizeof(ui->manifold_temperature[i-1]));
memmove(&ui->volume_flow_rate[i], &ui->volume_flow_rate[i-1], sizeof(ui->volume_flow_rate[i-1]));
+ memmove(&ui->mass_flow_rate[i], &ui->mass_flow_rate[i-1], sizeof(ui->mass_flow_rate[i-1]));
+ memmove(&ui->mass_flow_rate_corrected[i], &ui->mass_flow_rate_corrected[i-1], sizeof(ui->mass_flow_rate_corrected[i-1]));
}
ui->npoints++;
}
@@ -497,6 +552,8 @@ remove_point(UI *ui, int idx) {
memmove(&ui->comp_outlet_temperature[idx], &ui->comp_outlet_temperature[idx+1], sizeof(ui->comp_outlet_temperature[idx]));
memmove(&ui->manifold_temperature[idx], &ui->manifold_temperature[idx+1], sizeof(ui->manifold_temperature[idx]));
memmove(&ui->volume_flow_rate[idx], &ui->volume_flow_rate[idx+1], sizeof(ui->volume_flow_rate[idx]));
+ memmove(&ui->mass_flow_rate[idx], &ui->mass_flow_rate[idx+1], sizeof(ui->mass_flow_rate[idx]));
+ memmove(&ui->mass_flow_rate_corrected[idx], &ui->mass_flow_rate_corrected[idx+1], sizeof(ui->mass_flow_rate_corrected[idx]));
}
ui->npoints--;
}
diff --git a/ui.h b/ui.h
index 5cbf6a3..aa30b5e 100644
--- a/ui.h
+++ b/ui.h
@@ -37,6 +37,12 @@ typedef struct {
w_Select volume_flow_rate_unit;
w_Number volume_flow_rate[MAX_POINTS];
+
+ w_Select mass_flow_rate_unit;
+ w_Number mass_flow_rate[MAX_POINTS];
+
+ w_Select mass_flow_rate_corrected_unit;
+ w_Number mass_flow_rate_corrected[MAX_POINTS];
} UI;
void init_ui(UI *ui);