32 lines
1.2 KiB
C++
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_;
|
|
};
|
|
}
|