Fuel allocation strategies

master
Tobias Dammers 3 years ago
parent 8f7eacaeee
commit 178ad7b301

@ -12,6 +12,7 @@
<import-fob type="bool" userarchive="y">0</import-fob> <import-fob type="bool" userarchive="y">0</import-fob>
<import-perfinit type="bool" userarchive="y">0</import-perfinit> <import-perfinit type="bool" userarchive="y">0</import-perfinit>
<import-winds-aloft type="bool" userarchive="y">0</import-winds-aloft> <import-winds-aloft type="bool" userarchive="y">0</import-winds-aloft>
<fuel-strategy type="string" userarchive="y">balanced</fuel-strategy>
</options> </options>
<downloading type="bool">0</downloading> <downloading type="bool">0</downloading>
<text-status type="string"></text-status> <text-status type="string"></text-status>

@ -205,9 +205,10 @@ var importFOB = func (ofp) {
var fob = ofp.getNode('fuel/plan_ramp').getValue() * fuelFactor; var fob = ofp.getNode('fuel/plan_ramp').getValue() * fuelFactor;
var unallocated = fob; var unallocated = fob;
var tankNodes = props.globals.getNode('/consumables/fuel').getChildren('tank'); var tankNodes = props.globals.getNode('/consumables/fuel').getChildren('tank');
var numTanks = size(tankNodes); var strategy = getprop('sim/simbrief/options/fuel-strategy');
printf("Allocating %1.1f kg (%1.1f lbs) of fuel", fob, fob * KG2LB);
printf("Fuel to allocate: %1.1f kg", fob); var numTanks = size(tankNodes);
var allocate = func(tankNumber, maxAmount = nil) { var allocate = func(tankNumber, maxAmount = nil) {
var tankNode = tankNodes[tankNumber]; var tankNode = tankNodes[tankNumber];
@ -243,19 +244,42 @@ var importFOB = func (ofp) {
allocate(tank2, allocate2); allocate(tank2, allocate2);
} }
var i = 0; if (strategy == 'first-come-first-serve') {
while (i < numTanks) { print("Using 'first come, first serve' strategy");
var tankNode = tankNodes[i]; var i = 0;
var tankName = tankNode.getValue('name') or 'unnamed'; while (i < numTanks) {
if (i >= numTanks - 1 or string.imatch(tankName, "*center*")) { var tankNode = tankNodes[i];
allocate(i); var tankName = tankNode.getValue('name') or 'unnamed';
i = i + 1; if (i >= numTanks - 1 or
string.imatch(tankName, "*center*") or
string.imatch(tankName, "*front*") or
string.imatch(tankName, "*rear*")) {
allocate(i);
i = i + 1;
}
else {
allocatePair(i, i + 1);
i = i + 2;
}
} }
else { }
allocatePair(i, i + 1); elsif (strategy == 'balanced') {
i = i + 2; var totalFuel = unallocated;
var totalCapacity = 0;
foreach (var tankNode; tankNodes) {
var capacity = tankNode.getValue('capacity-m3');
totalCapacity = totalCapacity + capacity;
}
for (var i = 0; i < numTanks; i += 1) {
var tankNode = tankNodes[i];
var capacity = tankNode.getValue('capacity-m3');
allocate(i, totalFuel * capacity / totalCapacity);
} }
} }
else {
printf("Invalid strategy '%s', please allocate fuel manually", strategy);
}
printf("Fuel not allocated: %1.1f kg", unallocated); printf("Fuel not allocated: %1.1f kg", unallocated);
}; };

@ -147,6 +147,24 @@
<halign>left</halign> <halign>left</halign>
<pref-width>100</pref-width> <pref-width>100</pref-width>
</checkbox> </checkbox>
<group>
<layout>hbox</layout>
<text>
<label>Strategy</label>
</text>
<combo>
<property>/sim/simbrief/options/fuel-strategy</property>
<binding>
<command>dialog-apply</command>
</binding>
<halign>left</halign>
<pref-width>100</pref-width>
<value>first-come-first-serve</value>
<value>balanced</value>
</combo>
<halign>left</halign>
<pref-width>100</pref-width>
</group>
</group> </group>
<group> <group>
<layout>hbox</layout> <layout>hbox</layout>

Loading…
Cancel
Save