#pragma once #include "FluidSim/MachinePorts.hpp" namespace fluidsim::port { class Volume0D; // Initial delivery model: calibrated regulated rail, with declared ideal or // finite supply. Rail pressure dynamics and liquid plumbing are separate work. struct FuelInjectorConfig { enum class Supply {IdealRail,FiniteRail}; Supply supply{Supply::FiniteRail}; double maximum_mass_flow{.001}; // kg/s at the calibrated rail pressure double initial_fuel_mass{.1}; // kg, used only by FiniteRail float fuel_temperature{300}; // sensible energy of the vaporized fuel }; struct FuelInjectorState { bool command_fault{},saturated{},empty{}; double mass_flow{},delivered_mass{},remaining_mass{}; }; class FuelInjector { public: explicit FuelInjector(FuelInjectorConfig config={}); // Continuous/batch-average delivery, not a sequential pulse-width model. // Adds conserved fuel species, tracer and sensible energy to its host. const FuelInjectorState& deliver(Volume0D& host,const SignalValue& command, double time,double dt); const FuelInjectorState& state()const{return state_;} private: FuelInjectorConfig config_; FuelInjectorState state_; }; }