flight_model.cfg - [FUEL_SYSTEM]
This section is for defining the aircraft's fuel system in detail. In general, the fuel system should be set up through the Aircraft Editor, and only tweaked if required through the flight_model.cfg
file using the parameters on this page.
The [FUEL_SYSTEM]
section is primarily for use in complex aircraft models where the simple [FUEL]
system doesn't give enough control or flexibility for the aircraft systems. The parameters within the [FUEL]
section should be used for simple aircraft or those that require a basic fuel system setup, or for maintaining old aircraft (like ones imported from FSX). However there is one exception: the fuel_type
parameter is required by the detailed fuel system, although all other [FUEL]
parameters can be omitted.
This section only has a few parameters, but each parameter can be repeated a number of times if required, where N
in the parameter name corresponds to a new item of that parameter type. For example, the Engine
parameter can go from Engine.1
to Engine.N
and each one can be defined separately.
At its most basic the fuel system can be thought of as a series of "components" connected by "lines", with the simplest setup being a tank, a fuel line, and an engine. However you can create far more complex fuel system definitions that include multiple components like pumps, junctions, valves, etc... and multiple line connections between them. The system is also dynamic and can be set to respond to certain "trigger" conditions. For example, should a tank become empty, you can trigger an event to close the valve to that tank and open the valve to another tank.
NOTE: You can only connect components to lines and lines to components... You cannot connect two components or two lines together.
These different parts of the system are all setup using the appropriate values within the hash maps required by each of the listed parameters.
IMPORTANT: Connections between the different components are made using the "Name" key in the various hash maps that are associated with each parameter, and so you should try and ensure a clear and consistent naming methodology to help keep the way that the different components connect as clear as possible.
The available fuel system parameters are:
Parameter | Description | Type | Required |
---|---|---|---|
Version |
This value corresponds to the various versions of the modern fuel system and is used to permit you to maintain compatibility with already published aircraft as the modern fuel system evolves. The following values are currently accepted:
|
String | Yes |
APU.N |
This defines an APU for the fuel system. You can have multiple APU's per system, numbered from 1 upwards. Details on the APU map contents are given here: |
Hash Map (see Data Types for more information) |
No |
Engine.N |
Defines one or more engines that form a part of the fuel system. Details on the engine map contents are given here: |
||
Tank.N |
Defines one or more fuel tanks that form a part of the fuel system. Details on the tank map contents are given here: |
||
Line.N |
Defines one or more lines that form a part of the fuel system. Details on the line map contents are given here: |
||
Junction.N |
Defines one or more junctions that form a part of the fuel system. Details on the junction map contents are given here: |
||
Valve.N |
Defines one or more valves that form a part of the fuel system. Details on the valve map contents are given here: |
||
Pump.N |
Defines one or more fuel pumps that form a part of the fuel system. Details on the pump map contents are given here: |
||
Trigger.N |
Defines one or more triggers that will be used to change components within the fuel system based on certain conditions. Details on the trigger map contents are given here: Trigger.N |
||
Curve.N |
A 1D table of values. You can define multiple curves for a fuel system, starting at N = 1, and the curves may be used in multiple different parameters. Details on the table contents are given here: Curve.N |
1D Table of Values (see Data Types for more information) |
Yes |
NOTE: For all parameters, the "Title" key is localisable, but it is also optional and can be omitted in most cases. Currently only the Tank.N
title is visible in the Microsoft Flight Simulator UI.
APU.N
This parameter is used to define one or more APU components to be used in the fuel system. This APU is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
APU.N = Name:<apu_name>#Title:<apu_title>#FuelBurnRate:<burn_rate>
Note that you may have more than one APU, in which case you would increment the N
index, starting from 1. A typical example of a single APU definition would be like this:
APU.1 = Name:MainAPU#FuelBurnRate:33
Key | Value | Description | Required |
---|---|---|---|
Name |
String | The internal name of the APU, which is used to reference it in other components and fuel lines. | Yes |
Title |
String (Localisable) |
The title of the APU to be displayed in the UI, if applicable. | No |
FuelBurnRate |
Float | The rate at which fuel will be burnt in Gallons per hour. | Yes |
Engine.N
This parameter is used to define one or more engine components to be used in the fuel system. This engine is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Engine.N = Name:<engine_name>#Title:<engine_title>#Index:<engine_index>
Note that you may have more than one engine, in which case you would increment the N
index, starting from 1. A typical example for defining engines would look like this:
Engine.1 = Name:LeftEngine#Index:1
Engine.2 = Name:RightEngine#Index:2
Key | Value | Description | Required |
---|---|---|---|
Name |
String | The internal name of the engine, which is used to reference it in other components and fuel lines. | Yes |
Title |
String (Localisable) |
The title of the engine to be displayed in the UI, if applicable. | No |
Index |
Float | The index of the engine this fuel system component refers to. This would normally be the same as the index of the component, but can be different if required. | Yes |
The following SimVar is available for this component:
Tank.N
This parameter is used to define one or more fuel tank components to be used in the fuel system. This tank is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Tank.N = Name:<tank_name>#Title:<tank_title>#Capacity:<tank_capacity>#UnusableCapacity:<tank_unusable_capacity>#Position:<Z>,<X>,<Y>#InputOnlyLines:<line1_name>,<line2_name>,<etc...>#OutputOnlyLines:<line1_name>,<line2_name>,<etc...>#DropTimer:<tank_timer>#Priority:<tank_priority>
Note that you may have more than one fuel tanks, in which case you would increment the N
index, starting from 1. A typical example of a single tank definition would be like this:
Tank.1 = Name:CenterAft
#Capacity:20
#UnusableCapacity:0
#Position:-1.6,-3,-1.5
#Priority:1
Key | Value | Description | Required |
---|---|---|---|
Name |
String | The internal name of the tank, which is used to reference it in other components and fuel lines. | Yes |
Title |
String (Localisable) |
The title of the fuel tank to be displayed in the UI, if applicable. | No |
Capacity |
Float | The capacity of the fuel tank, in Gallons. | Yes |
UnusableCapacity |
Float | The part of the total capacity that cannot be used, in Gallons. | Yes |
PressureCurve |
Curve Index | Here you can assign a Curve.N index. This curve will be used to ensure that the tank itself generates some line pressure depending on how full it is. The curve should be formatted as:
volume:psi, volume:psi, volume:psi, etc...Volume is simply a Percent Over 100 where 0 is empty and 1 is full. For example, a curve of 0:0, 1:15 would mean that the tank will generate 15psi of pressure when full and then linearly go down to 0psi as the level goes down.
|
|
Position |
List (3 Floats) |
This sets the position of the tank relative to the Datum Reference Point. Value is a comma separated list with the format Z, X, Y, and it is measured in ft. | Yes |
InputOnlyLines |
List (N Strings) |
This is a comma separated list of lines that are to be considered as input only. You can have a maximum of 10, and lines are given by their name, for example:
|
No |
OutputOnlyLines |
List (N Strings) |
This is a comma separated list of lines that are to be considered as output only. You can have a maximum of 10, and lines are given by their name, for example:OutputOnlyLines:TankCenterToCenterTankPump1,TankCenterToCenterTankPump2
|
No |
DropTimer |
Float | Sets the timer that will be started when one of the RELEASE_DROP_TANK_ALL , RELEASE_DROP_TANK_1 or RELEASE_DROP_TANK_2 events are called for the tank. This is the time - in seconds - that the user has to validate the jettison command for the tank (only valid for external tanks). |
No |
Priority |
Integer | This controls the order in which fuel tanks are filled (when using the Fuel window), as well as the order they will be used (when skipping in time). The higher the number the higher the priority and tanks with a higher priority will be filled first, and used last. For example: A tank with the priority 4 will be filled before a tank with priority 2 and after a tank with priority 5, and it will be used after the priority 2 tank but before the priority 5 tank. | No |
The following SimVars are available for this component:
FUELSYSTEM_TANK_CAPACITY
FUELSYSTEM_TANK_LEVEL
FUELSYSTEM_TANK_QUANTITY
FUELSYSTEM_TANK_TOTAL_QUANTITY
FUELSYSTEM_TANK_WEIGHT
Line.N
This parameter is used to define one or more fuel lines to be used in the fuel system. This line is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Line.N = Name:<line_name>#Title:<line_title>#Source:<source_name>#Destination:<destination_name>#FuelFlowAt1PSI:<psi_value>#Volume:<volume_value>#GravityBasedFuelFlow:<gravity_flow_value>
Note that you may have more than one fuel line, in which case you would increment the N
index, starting from 1. A typical example of a single line definition would be like this:
Line.1 = Name:TankRightToRightTankPump1
#Source:RightInner
#Destination:RightInnerTankPump1
Key | Value | Description | Required |
---|---|---|---|
Name |
String | The internal name of the fuel line, which is used to reference it in other components. | Yes |
Title |
String (Localisable) |
The title of the fuel line to be displayed in the UI, if applicable. | No |
Source |
String | A source component name, where fuel will flow from. | Yes |
Destination |
String | A destination component name, where fuel will flow to. | Yes |
FuelFlowAt1PSI |
Float | This is used to calculate the effect of pressure on fuel flow. Value is in lbs per second, and if not set will default to 0.1. | No |
Volume |
Float | This is the maximum amount of fuel that can be in the line at a given time. Value is in Gallons, and if not set will default to 0.24. | No |
GravityBasedFuelFlow |
Float |
This controls how fast the fuel will flow under gravity and also flag the line as being setup in such a way that even without pressure the fuel will naturally flow towards the destination. Value is in Gallon per hour. IMPORTANT! This will only affect how fuel is transferred between tanks, NOT how fuel flows to the engine. Engines require pressure for fuel to flow correctly. |
No |
The following SimVars are available for this component:
Junction.N
This parameter is used to define one or more junction components to be used in the fuel system. This junction is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Junction.N = Name:<junction_name>#Title:<title>#Option:<option>,<option>,<etc>#InputOnlyLines:<line>,<line>,<etc>#OutputOnlyLines:<line>,<line>,<etc>
Note that you may have more than one junction, in which case you would increment the N
index, starting from 1. A typical example of a single junction definition would be like this:
Junction.1 = Name:FuelSelector
#InputOnlyLines:LeftInnerToFuelSelector,RightInnerToFuelSelector
#OutputOnlyLines:FuelSelectorToPumpsJunction
#Option:LeftInnerToFuelSelector,FuelSelectorToPumpsJunction
#Option:RightInnerToFuelSelector,FuelSelectorToPumpsJunction
#Option:CenterAftToFuelSelector,FuelSelectorToPumpsJunction
#Option:FuelSelectorToPumpsJunction
Key | Value | Description | Required |
---|---|---|---|
Name |
String | The internal name of the junction, which is used to reference it in other components and fuel lines. | Yes |
Title |
String (Localisable) |
The title of the junction to be displayed in the UI, if applicable. | No |
Option |
List (N strings) |
Junctions can have one or more option settings, and each one takes a comma separated list of line names. Lines given for each option will be set to open when the option is set, and all others will be set to closed. The order of definition of each Option corresponds to the index of the option, which is used by the FUELSYSTEM_JUNCTION_SET key event to trigger them. If no options are defined then all connected lines will be considered as open. |
No |
InputOnlyLines |
List (N strings) |
This is a comma separated list of lines connected to the junction that are to be considered as input only. You can have a maximum of 10, and lines are given by their name, for example:InputOnlyLines:HandPumpValveToEngineJunction, EngineDrivenPumpToEngineJunction
|
No |
OutputOnlyLines |
List (N strings) |
This is a comma separated list of lines that are connected to the junction to be considered as output only. You can have a maximum of 10, and lines are given by their name, for example:OutputOnlyLines:EngineJunctionToEngine
|
No |
The following SimVar is available for this component:
The following key Event is also available:
Valve.N
This parameter is used to define one or more valve components to be used in the fuel system. This valve is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Valve.N = Name:<valve_name>#Title:<valve_title>#DestinationLine:<destination_name>#OpeningTime:<time_value>#Circuit:<circuit_index>
Note that you may have more than one valve, in which case you would increment the N
index, starting from 1. A typical example of a single valve definition would be like this:
Valve.1 = Name:LeftEngineValve
#OpeningTime:3
#Circuit:1
Key | Value | Description | Required |
---|---|---|---|
Name |
String | The internal name of the valve, which is used to reference it in other components and fuel lines. | Yes |
Title |
String (Localisable) |
The title of the valve to be displayed in the UI, if applicable. | No |
DestinationLine |
String |
The destination line for the valve. If not included, the valve will permit fuel flow in both directions, however if set, then fuel can only flow towards the destination line. | No |
OpeningTime |
Float | The time, in seconds, that it takes the valve to open/close. Default value is 0.5. | No |
Circuit |
Integer |
The index of the electrical circuit that controls the valve. The circuit needs to be of the type IMPORTANT! This is not the index of the circuit itself, but the index of the circuit of the type circuit.15 = Type:CIRCUIT_FUEL_VALVE:4 #Connections:bus.2 #Power:3,5,20 #Name:Fuel_P_R2 then the circuit index would be 4, eg: Valve.2 = Name:Right2Valve #OpeningTime:3 #Circuit:4 |
No |
The following SimVars are available for this component:
The following key Events are also available:
Pump.N
This parameter is used to define one or more fuel pump components to be used in the fuel system. This pump is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Pump.N = Name:<pump_name>#Title:<pump_title>#Pressure:<pressure_value>#PressureCurve:<curve_index>#TankFuelRequired:<tank_name>#DestinationLine:<line_name>#Type:<type_string>#index:<value>#AutoCondition:<engine_psi_threshold>#PressureDecreaseRate:<decrease_value>
Note that you may have more than one fuel pump, in which case you would increment the N
index, starting from 1. A typical example of a single pump definition would be like this:
Pump.1 = Name:HandPump
#Pressure:6
#DestinationLine:HandPumpToHandPumpValve
#Type:Manual
#PressureDecreaseRate:0.05
Key | Value | Description | Required |
---|---|---|---|
Name |
String | The internal name of the pump, which is used to reference it in other components and fuel lines. | Yes |
Title |
String (Localisable) |
The title of the pump to be displayed in the UI, if applicable. | No |
Pressure |
Float | This is the pump pressure in psi. Minimum is 0 psi. | Yes |
PressureCurve |
Integer (Curve Index) |
This takes the index N value of a curve defined in the Curve.N section. The curve is the relationship between the percentage of maximum RPM of an engine and the percentage of maximum pressure provided by the pump (the maximum value being defined by the "Pressure" key). This curve is only used when the "Type" key is set to EngineDriven , and it will use the RPM of the engine given in the "Index" key. |
No |
TankFuelRequired |
String | Sets whether the pump requires a fuel tank or not. If a fuel tank name is supplied here, then the pump will automatically shut down when the tank is empty. | No |
DestinationLine |
String | The line name supplied here sets the direction in which the pump is causing pressure. | Yes |
Type |
String |
Sets the type of pump that is being defined. The available strings for this key are:
|
Yes |
Index |
Integer |
An index value that corresponds to the following:
|
No |
AutoCondition |
List (String, Float) |
If this key is included, then you will be able to set the pump to "AUTO" mode, in which case it will only be enabled when the pressure of the fuel reaching the chosen engine goes below a specific threshold. The key requires two values, separated by a comma: the name of the engine to link with the pump, and the threshold value (in psi). | No |
PressureDecreaseRate |
Float | This key is only required when the "Type" is set to "Manual", and controls how much the pump pressure will decrease per second after the user stops interacting with it. Default value is 0.5 Percent Over 100 (so, a decrease of 50% per second). | No |
The following SimVars are available for this component:
The following key Events are also available:
Trigger.N
This parameter is used to define one or more triggers to be used in the fuel system. Triggers are used to listen for - and react to - specific conditions and events that will affect the way the fuel system operates. Triggers are defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and have the following structure:
Trigger.N = Name:<trigger_name>#Title:<trigger_title>#Target:<target_name>#Threshold:<value>#Index:<target_index>#DelayTrue:<seconds_value>#DelayFalse:<seconds_value>#Condition:<string>#EffectTrue:<effect_list>#EffectFalse:<effect_list>
Note that you may have more than one trigger, in which case you would increment the N
index, starting from 1. A basic example of a single trigger definition would be like this:
Trigger.1 = Condition:Autostart_Enabled
#EffectTrue:OpenValve.LeftEngValve,
OpenValve.RightEngValve,
OpenValve.CrossFeedValve,
StartPump.LeftTankPump,
StartPump.RightTankPump
The following SimVar is available for this component:
The following key Events are also available:
Trigger Conditions And Events
When creating triggers for the fuel system, the hash map has an entry for "Condition". This can be any one of the following strings:
Condition | Description |
---|---|
TankQuantityBelow |
Checks if the tank has a fuel quantity below the given Threshold (threshold in Gallons). Requires the Target key to be a tank name. |
TankQuantityAbove |
Checks if the tank has a fuel quantity above the given Threshold (threshold in Gallons). Requires the Target key to be a tank name. |
CGAboveLimit |
This condition can be used to watch the value of the SimVar CG_PERCENT and then trigger once it goes above the limit set in the Threshold field (as a percentage). |
CGBelowLimit |
This condition can be used to watch the value of the SimVar CG_PERCENT and then trigger once it goes below the limit set in the Threshold field (as a percentage). |
Autostart_Enabled |
Checks if autostart is enabled. |
Autoshutdown_Enabled |
Checks if autoshutdown is enabled. |
Manual |
This is a manual trigger event that can only be triggered by using a Key Event. |
TankImbalanceAbove |
Checks if there is a relative fuel imbalance between two tanks above the given Threshold (threshold in Gallons). Requires the Target key to hold two tank names, eg:
|
TankImbalanceBelow |
Checks if there is a relative fuel imbalance between two tanks below the given Threshold (threshold in Gallons). Requires the Target key to hold two tank names, eg:
|
TankAbsImbalanceAbove |
Checks if there is an absolute fuel imbalance between two tanks above the given Threshold (threshold in Gallons). Requires the Target key to hold two tank names, eg:
|
TankAbsImbalanceBelow |
Checks if there is an absolute fuel imbalance between two tanks below the given Threshold (threshold in Gallons). Requires the Target key to hold two tank names, eg:
|
JunctionOptionChanged |
Requires the Target key to be a junction name, and the Index key to be the Option in the junction to set. |
The result of the condition can be checked as either TRUE or FALSE, triggering an "event". These events are defined as a comma separated list in the EffectTrue and EffectFalse keys of the trigger hash map, where each entry in the list is comprised of an event and a target component, for example:
#EffectTrue:<event>.<target_name>, <event>.<target_name>, etc...
The available event types are:
Condition | Description |
---|---|
OpenValve |
Open the named valve. |
CloseValve |
Close the named valve. |
StartPump |
Start the named pump. |
StopPump |
Stop the named pump. |
SetJunction |
Set the named junction to a specific option. When using this event, it requires both a name and an option index, eg: SetJunction.FuelSelector.1 |
StartTrigger |
Flag the named trigger to start. |
StopTrigger |
Flag the named trigger to stop. NOTE: Only for manual triggers. |
Curve.N
The curve parameter is defined as a 1D table of paired values, and the parameter is appended with a number that corresponds to its unique id (starting at 1). The exact number of paired values that are in the curve will depend on the use the curve is going to get, since curves are used by other parameters to store information. For example, you may have defined a fuel pump like this:
Pump.2 = Name:EngineDrivenPump#Pressure:6#PressureCurve:1#DestinationLine:EngineDrivenPumpToEngineJunction#Type:EngineDriven#Index:1
In this case, PressureCurve:1
references a fuel pressure curve table that would have been defined like this:
Curve.1 = 0:0, 0.2:0.5, 0.62:0.62, 0.88:0.63, 0.98:0.66, 1.0:1.0