|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
Public Member Functions | |
| float | capacity_at (self) |
| float | capacity (self, float temperature) |
| WallExchange | exchange (self, *, float mdot, float wall_temperature, float inlet_temperature, float density, float viscosity, float conductivity, float heat_capacity) |
A lumped thermal mass wrapped around one line.
One temperature for the whole run, and **the honest justification for that
covers the tube but not the fittings.** Across a 0.9 mm tube wall the Biot
number is 0.17 and the metal really is near enough isothermal: against a
1-D conduction solution the lumped answer is exact to two figures. A
fitting body is 5-8 mm of steel, which is Bi 0.9 to 1.5, and there the
lumped model **over-credits the heat by 19% at 5 mm and 32% at 8 mm** over
a six-second burn, because the core cannot reach the bore in time. Steel's
diffusion depth is 1.9 mm at 1 s and 4.7 mm at 6 s.
That error is knowingly carried, for a reason that has to be measured
rather than assumed: **the model is film-limited, not mass-limited.**
Doubling the metal on the shipped stand moves end-of-burn tank pressure by
6 psi out of 52, so a 20% over-credit on the fitting mass is worth two or
three. Resolving it would mean a second node, a fitting-thickness
parameter, and a conduction coupling, to move a number by less than the
uncertainty in how many fittings are actually on the stand. If a drawing
ever lands in the mass-limited regime -- thin lines, few fittings, high
flow -- that trade stops holding, and the benchmark's saturation check is
what catches it.
Args:
mass: Metal in thermal contact with the flow [kg].
area: Wetted internal area [m^2].
bore: Internal diameter [m], for the convection correlation.
| float feedtwin.comps.wall.LineWall.capacity | ( | self, | |
| float | temperature ) |
Thermal capacity of the wall [J/K] at its current temperature.
Definition at line 212 of file wall.py.
References backend.routers.flight.TankConfig.mass, engine.pipeline.config_schemas.FuelTankConfig.mass, engine.pipeline.config_schemas.LOXTankConfig.mass, engine.pipeline.config_schemas.PressTankConfig.mass, engine.pipeline.config_schemas.RocketConfig.mass, fsw::control::RobustDDPController::NavState.mass, and feedtwin.comps.wall.stainless_capacity().
Referenced by feedtwin.engine.card.InjectorCard.pressure_drop(), and feedtwin.engine.card.InjectorCard.to_dict().
| float feedtwin.comps.wall.LineWall.capacity_at | ( | self | ) |
Placeholder to keep the dataclass slotted; use :meth:`capacity`.
Definition at line 208 of file wall.py.
References backend.routers.flight.TankConfig.mass, engine.pipeline.config_schemas.FuelTankConfig.mass, engine.pipeline.config_schemas.LOXTankConfig.mass, engine.pipeline.config_schemas.PressTankConfig.mass, engine.pipeline.config_schemas.RocketConfig.mass, and fsw::control::RobustDDPController::NavState.mass.
| WallExchange feedtwin.comps.wall.LineWall.exchange | ( | self, | |
| * | , | ||
| float | mdot, | ||
| float | wall_temperature, | ||
| float | inlet_temperature, | ||
| float | density, | ||
| float | viscosity, | ||
| float | conductivity, | ||
| float | heat_capacity ) |
Heat the wall gives the stream, and the temperature it leaves at. Treated as a single-stream heat exchanger against a wall at one temperature: the film coefficient comes from Dittus-Boelter, and the outlet follows from the number of transfer units rather than from applying a heat rate to an inlet state. Using ``Q = h.A.dT`` directly would let a long line at low flow hand the gas more than the wall-to-gas difference, which is not a small error -- it is thermodynamically impossible. **No flow, no exchange.** A still line does not trade heat with its metal here; see the module docstring for why soak is out of scope.
Definition at line 216 of file wall.py.
References engine.layerx.diag.start.Element.area(), engine.layerx.diag.waterhammer.Pipeline.area(), feedtwin.comps.manifold.ManifoldPort.area(), feedtwin.engine.balance.SideBalance.area, engine.layerx.diag.start.Element.bore, feedtwin.comps.iec_gas.GasCv.bore, feedtwin.model.segments.Fitting.bore, feedtwin.model.segments.LineSegment.bore, and min.