Skip to content

Commit b8ffcdf

Browse files
committed
Add new InfoBox V maximum efficiency
1 parent a06bc68 commit b8ffcdf

File tree

13 files changed

+57
-2
lines changed

13 files changed

+57
-2
lines changed

src/Computer/TaskComputer.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ TaskComputer::ProcessMoreTask(const MoreData &basic,
9999
else
100100
calculated.V_stf = calculated.common_stats.V_dolphin;
101101

102+
calculated.V_max_eff = calculated.common_stats.V_max_eff;
103+
102104
if (calculated.task_stats.current_leg.vector_remaining.IsValid()) {
103105
const GeoVector &v = calculated.task_stats.current_leg.vector_remaining;
104106
calculated.auto_zoom_distance = v.distance;

src/Engine/GlideSolvers/GlidePolar.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,18 @@ GlidePolar::SpeedToFly(const AircraftState &state,
340340
return std::max(Vmin, V_stf * g_scaling);
341341
}
342342

343+
double
344+
GlidePolar::SpeedToFlyMaxEfficient(const AircraftState &state,
345+
const GlideResult &solution) const noexcept
346+
{
347+
assert(IsValid());
348+
349+
const auto head_wind = solution.IsDefined() ? solution.head_wind : 0.;
350+
const auto sink_rate = -state.netto_vario;
351+
352+
return SpeedToFly(sink_rate, head_wind);
353+
}
354+
343355
double
344356
GlidePolar::GetTotalMass() const noexcept
345357
{

src/Engine/GlideSolvers/GlidePolar.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,9 @@ class GlidePolar
417417
double SpeedToFly(const AircraftState &state, const GlideResult &solution,
418418
bool block_stf) const noexcept;
419419

420+
[[gnu::pure]]
421+
double SpeedToFlyMaxEfficient(const AircraftState &state, const GlideResult &solution) const noexcept;
422+
420423
/**
421424
* Calculate speed-to-fly according to MacCready dolphin theory
422425
* with ring setting at current MC value, at specified netto sink rate

src/Engine/Task/Stats/CommonStats.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ CommonStats::Reset() noexcept
2626

2727
V_block = 0;
2828
V_dolphin = 0;
29+
V_max_eff = 0;
2930

3031
current_risk_mc = 0;
3132
height_min_working = 0;

src/Engine/Task/Stats/CommonStats.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ class CommonStats
5656
double V_block;
5757
/** Dolphin speed to fly */
5858
double V_dolphin;
59+
/** Maximum efficiency speed to fly */
60+
double V_max_eff;
5961

6062
/** Risk MC setting (m/s) */
6163
double current_risk_mc;

src/Engine/Task/TaskManager.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ TaskManager::UpdateCommonStatsPolar(const AircraftState &state) noexcept
218218
risk_polar.SpeedToFly(state,
219219
GetStats().current_leg.solution_remaining,
220220
false);
221+
222+
common_stats.V_max_eff =
223+
glide_polar.SpeedToFlyMaxEfficient(state,
224+
GetStats().current_leg.solution_remaining);
221225
}
222226

223227
void

src/InfoBoxes/Content/Factory.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -1202,6 +1202,15 @@ static constexpr MetaData meta_data[] = {
12021202
UpdateInfoBoxFuelRemain,
12031203
},
12041204

1205+
// e_Speed_Maximum_Efficiency
1206+
{
1207+
N_("Speed maximum efficiency"),
1208+
N_("V max eff"),
1209+
N_("Best glide speed based on vario and wind"),
1210+
UpdateInfoBoxSpeedMaximumEfficiency,
1211+
maccready_panels,
1212+
},
1213+
12051214
};
12061215

12071216
static_assert(ARRAY_SIZE(meta_data) == NUM_TYPES,

src/InfoBoxes/Content/MacCready.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ SetVSpeed(InfoBoxData &data, double value) noexcept
2626
* Subpart callback function pointers
2727
*/
2828

29-
static constexpr InfoBoxPanel panels[] = {
29+
constexpr InfoBoxPanel maccready_panels[] = {
3030
{ N_("Edit"), LoadMacCreadyEditPanel },
3131
{ N_("Setup"), LoadMacCreadySetupPanel },
3232
{ nullptr, nullptr }
@@ -35,7 +35,7 @@ static constexpr InfoBoxPanel panels[] = {
3535
const InfoBoxPanel *
3636
InfoBoxContentMacCready::GetDialogContent() noexcept
3737
{
38-
return panels;
38+
return maccready_panels;
3939
}
4040

4141
/*

src/InfoBoxes/Content/MacCready.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
#include "InfoBoxes/Content/Base.hpp"
77

8+
extern const InfoBoxPanel maccready_panels[];
9+
810
class InfoBoxContentMacCready : public InfoBoxContent
911
{
1012
public:

src/InfoBoxes/Content/Speed.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,16 @@ UpdateInfoBoxSpeedGroundAndTAS(InfoBoxData &data) noexcept
117117
}
118118

119119
}
120+
121+
void
122+
UpdateInfoBoxSpeedMaximumEfficiency(InfoBoxData &data) noexcept
123+
{
124+
// Set Value
125+
const DerivedInfo &calculated = CommonInterface::Calculated();
126+
data.SetValueFromSpeed(calculated.V_max_eff, false);
127+
128+
if(calculated.head_wind_available)
129+
data.SetCommentFromSpeed(calculated.head_wind, false, _T("HW:"));
130+
else
131+
data.SetCommentInvalid();
132+
}

src/InfoBoxes/Content/Speed.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,6 @@ UpdateInfoBoxSpeedDolphin(InfoBoxData &data) noexcept;
2626

2727
void
2828
UpdateInfoBoxSpeedGroundAndTAS(InfoBoxData &data) noexcept;
29+
30+
void
31+
UpdateInfoBoxSpeedMaximumEfficiency(InfoBoxData &data) noexcept;

src/InfoBoxes/Content/Type.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ namespace InfoBoxFactory
169169
e_HeightAGL_T_O,
170170

171171
e_Fuel_Remain,
172+
e_Speed_Maximum_Efficiency,
172173

173174
e_NUM_TYPES /* Last item */
174175
};

src/NMEA/Derived.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ struct DerivedInfo:
133133
/** Speed to fly block/dolphin (m/s) */
134134
double V_stf;
135135

136+
/** Speed to fly maximum efficiency (m/s) */
137+
double V_max_eff;
138+
136139
/** Auto QNH calculation result. */
137140
AtmosphericPressure pressure;
138141
Validity pressure_available;

0 commit comments

Comments
 (0)