#pragma once #include namespace fluidsim::port { struct Port { float mass_flow{}; // kg/s, positive into the owning component float enthalpy{}; // J/kg float pressure{101325.0f}; float density{1.1768f}; float temperature{300.0f}; float gamma_value{1.4f}, gas_constant_value{287.0f}; float air_fraction{1.0f}; float fuel_fraction{}; float fuel_equivalent_fraction{}; // fuel origin, including fuel already burned float* owner_energy{}; float* owner_air_mass{}; float* owner_exhaust_mass{}; float* owner_fuel_mass{}; }; // Small equivalent of the C# IComponent lifecycle. Components update their // conserved state after the coupled 1-D pipe solve has accumulated port flow. class Component { public: virtual ~Component() = default; virtual std::vector ports() = 0; // Optional actuation at each CFL substep, before boundary fluxes are resolved. virtual void prepare_step(float /*dt*/) {} virtual void update_state(float dt) = 0; }; } // namespace fluidsim::port