albar965 / littlenavmap

Little Navmap is a free flight planner, navigation tool, moving map, airport search and airport information system for Flight Simulator X, Microsoft Flight Simulator 2020, Prepar3D and X-Plane.
https://albar965.github.io/littlenavmap.html
GNU General Public License v3.0
1.28k stars 164 forks source link

[Feature suggestion] Performance profiles #626

Closed cristi-neagu closed 3 years ago

cristi-neagu commented 3 years ago

Hello,

Would be nice if instead of having multiple performance files for the same plane but with different cruise regimes (say for 65% , 75%, etc), all that data were contained in a single file, and there would be a drop down to select the desired profile. It doesn't even have to be based around cruise profiles. Users would be able to create sections for whatever purpose they desire: different cruise settings, different altitudes, different engine types, even different planes.

The same performance file format can be used, except there would be a new header denoting each profile. This way the same parser would work to populate performance data.

Since each section contains the exact same data as before, this should be a minimal change to both the performance file GUI and the rest of the software which consumes this data.

The desired section would be selectable from a drop down menu inside the performance file GUI. There would also have to be controls for creating and deleting sections, maybe even to copy sections to new ones.

I did see #314 asking for a more extensive modification to the performance data, which would indeed be very time consuming. But the change i'm proposing would be a good compromise between the flexibility suggested in that request, and ease of implementation, whilst making life a bit easier for users who would no longer need to manage a loose collection of files.

Thank you.

tonghuix commented 3 years ago

Different pressure altitude requires different cruise performance, TAS and fuel consumption are varies. It's better user can input a performance table include maximum climb table, time/distance/FPM/GPH table and cruise performance table which is coming from aircraft's POH. So littlenavmap only need to do is interpreting between two rows. calculate middle value.

cristi-neagu commented 3 years ago

@tonghuix Yes, that is better. But it's also pretty hard to implement. Not only would it require a complete rewrite of the performance data processing code, but also a complete rewrite of the fuel burn code to take pressure altitude into consideration. It would be a substantial amount of work. What i am proposing is a compromise.

tonghuix commented 3 years ago

@cristi-neagu calculate pressure altitude is not such hard, just using current altimeter setting subtract 29.92 and multiply 1000. Or we can use planned cruise altitude as a compromise.

cristi-neagu commented 3 years ago

@tonghuix It's much harder than it seems like. Either way, this is not the place to discuss this, as this ticket relates to a different feature. If you want to continue this discussion we can go over to #314 and continue there.

albar965 commented 3 years ago

Duplicate of #314

Cruise altitude and performance settings are most relevant. Less is aircraft load. Winds aloft are already considered.

For now you can create different performance profiles for different performance setting or cruise altitude ranges, for example.

cristi-neagu commented 3 years ago

@albar965 I beg to differ, but this is not a duplicate of #314. That one is requesting a table based performance profile which would undoubtable require a full rewrite of the performance file code. I am suggesting a small extension to the performance file format which would still reuse the existing code base and with minimal effort allow for easily selectable profiles.

albar965 commented 3 years ago

What means table based approach?

I might add tabs for different conditions but this might change.

cristi-neagu commented 3 years ago

@albar965 As far as i understand from #314, the idea is to have a table of performance figures based on altitude from which LNM would interpolate the fuel flow. I agree with your opinion on that thread, that it might not be doable with reasonable effort.

What i am proposing is a simple drop down which would select different sections from the performance file and would populate the already existing performance window.

Here's a mockup for the window: image

And here is a sample file performance file:

<?xml version="1.0" encoding="UTF-8"?>
<LittleNavmap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://www.littlenavmap.org/schema/lnmperf.xsd">
  <AircraftPerf>
    <Header>
      <CreationDate>2021-03-27T02:07:11</CreationDate>
      <FileVersion>1.0</FileVersion>
      <ProgramName>Little Navmap</ProgramName>
      <ProgramVersion>2.6.10</ProgramVersion>
      <Documentation>https://www.littlenavmap.org/lnmperf.html</Documentation>
    </Header>
    <Options>
      <Name>|Diamond DA62</Name>
      <AircraftType>DA62</AircraftType>
      <Description></Description>
      <FuelAsVolume>1</FuelAsVolume>
      <JetFuel>1</JetFuel>
    </Options>
    <Perf profile="75% Cruise">
      <ContingencyFuelPercent>10.0</ContingencyFuelPercent>
      <ExtraFuelLbsGal>3.000</ExtraFuelLbsGal>
      <MinRunwayLengthFt>700.000</MinRunwayLengthFt>
      <ReserveFuelLbsGal>5.000</ReserveFuelLbsGal>
      <RunwayType>SOFT</RunwayType>
      <TaxiFuelLbsGal>0.417</TaxiFuelLbsGal>
      <UsableFuelLbsGal>89.000</UsableFuelLbsGal>
      <Alternate>
        <FuelFlowLbsGalPerHour>12.000</FuelFlowLbsGalPerHour>
        <SpeedKtsTAS>140.000</SpeedKtsTAS>
      </Alternate>
      <Climb>
        <FuelFlowLbsGalPerHour>18.908</FuelFlowLbsGalPerHour>
        <SpeedKtsTAS>106.308</SpeedKtsTAS>
        <VertSpeedFtPerMin>1155.495</VertSpeedFtPerMin>
      </Climb>
      <Cruise>
        <FuelFlowLbsGalPerHour>14.839</FuelFlowLbsGalPerHour>
        <SpeedKtsTAS>171.348</SpeedKtsTAS>
      </Cruise>
      <Descent>
        <FuelFlowLbsGalPerHour>8.136</FuelFlowLbsGalPerHour>
        <SpeedKtsTAS>147.802</SpeedKtsTAS>
        <VertSpeedFtPerMin>707.511</VertSpeedFtPerMin>
      </Descent>
    </Perf>
    <Perf profile="55% Cruise">
      <ContingencyFuelPercent>10.0</ContingencyFuelPercent>
      <ExtraFuelLbsGal>3.000</ExtraFuelLbsGal>
      <MinRunwayLengthFt>700.000</MinRunwayLengthFt>
      <ReserveFuelLbsGal>5.000</ReserveFuelLbsGal>
      <RunwayType>SOFT</RunwayType>
      <TaxiFuelLbsGal>0.417</TaxiFuelLbsGal>
      <UsableFuelLbsGal>89.000</UsableFuelLbsGal>
      <Alternate>
        <FuelFlowLbsGalPerHour>12.000</FuelFlowLbsGalPerHour>
        <SpeedKtsTAS>140.000</SpeedKtsTAS>
      </Alternate>
      <Climb>
        <FuelFlowLbsGalPerHour>18.908</FuelFlowLbsGalPerHour>
        <SpeedKtsTAS>106.308</SpeedKtsTAS>
        <VertSpeedFtPerMin>1155.495</VertSpeedFtPerMin>
      </Climb>
      <Cruise>
        <FuelFlowLbsGalPerHour>8.884</FuelFlowLbsGalPerHour>
        <SpeedKtsTAS>129.058</SpeedKtsTAS>
      </Cruise>
      <Descent>
        <FuelFlowLbsGalPerHour>8.136</FuelFlowLbsGalPerHour>
        <SpeedKtsTAS>147.802</SpeedKtsTAS>
        <VertSpeedFtPerMin>707.511</VertSpeedFtPerMin>
      </Descent>
    </Perf>
  </AircraftPerf>
</LittleNavmap>

Note the <Perf profile="75% Cruise"> tags. Or maybe you could use <name>75% Cruise</name>. I'm not very good with xml.

I think this should be easier to implement than a performance table method, Also, note that the tags don't necessarily have to refer to cruise power, they can be used for altitudes as well.