Files
FluidSimCpp/include/FluidSim/FuelInjector.hpp

32 lines
1.2 KiB
C++

#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_;
};
}