Skip to content
Snippets Groups Projects
Commit 78f84094 authored by Florian Schültke's avatar Florian Schültke
Browse files

Merge branch 'feature/neuer_zweig' into 'main'

Feature/neuer zweig

Closes #161

See merge request !264
parents 9d04b9df edeab3e9
No related branches found
No related tags found
1 merge request!264Feature/neuer zweig
......@@ -104,6 +104,23 @@
</bwbStrategies>
</aeroStrategySelection>
<FlightConditions description="Flight State">
<AdaptMachNumbersToCruiseReq description="Relevant parameters in regards to automatic flight condition generation">
<setAutomaticFlightConditions description="Switch to allow for automatic flight conditions. Switch: true (adapt flight conditions to initial cruise Mach number) / false (use flight conditions given here in config file)">
<value>true</value>
<default>true</default>
</setAutomaticFlightConditions>
<extrapolation_margin description="Margin for extrapolation">
<value>1</value>
<default>1</default>
<unit>1</unit>
<lower_boundary>0</lower_boundary>
<upper_boundary>1.1</upper_boundary>
</extrapolation_margin>
<allow_grid_change description="Switch to allow grid change. Switch: true (On) / false (Off)">
<value>true</value>
<default>true</default>
</allow_grid_change>
</AdaptMachNumbersToCruiseReq>
<FlightCondition ID="0" description="Description of the flight condition">
<extrapolation_margin description="Margin for extrapolation">
<value>1</value>
......
......@@ -46,7 +46,7 @@ bwbCalculatePolarConfig::bwbCalculatePolarConfig(const node& config)
pathToLiftingLine(EndnodeReadOnly<std::string>("program_settings/LiftingLine/FolderPath")),
stepWidthCL(EndnodeReadOnly<double>("LiftingLineForTAW/stepWidthCL")),
// other settings
setFlightConditionsMode(EndnodeReadOnly<std::string>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq")),
setFlightConditionsMode(EndnodeReadOnly<bool>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq/setAutomaticFlightConditions").read(config).value()),
// lifting line for TAW pitching moment corrections
delta_CM0(EndnodeReadOnly<double>("LiftingLineForTAW/PitchingMoment/delta_CM0")),
delta_dCMdCL(EndnodeReadOnly<double>("LiftingLineForTAW/PitchingMoment/delta_dCMdCL")),
......@@ -80,7 +80,6 @@ bwbCalculatePolarConfig::bwbCalculatePolarConfig(const node& config)
factorDragHL(EndnodeReadOnly<double>("program_settings/SemiEmpiricalHighLiftAdaptions/factorDrag")) {
CLModeAirfoilSelection.read(config);
stepWidthCL.read(config);
setFlightConditionsMode.read(config);
pathToLiftingLine.read(config);
manualTransition.read(config);
manualTransitionWing.read(config);
......@@ -110,13 +109,13 @@ bwbCalculatePolarConfig::bwbCalculatePolarConfig(const node& config)
deltaTotalDragHL.read(config);
factorDragHL.read(config);
myRuntimeInfo->out << "config: " << liftingLineFolderPath << endl;
if (setFlightConditionsMode.value() == "mode_0") {
if (setFlightConditionsMode == false) {
myRuntimeInfo->info << "set flight conditions from config xml" << endl;
size_t numberFlightConditions(config.getVector(("program_settings/FlightConditions/FlightCondition"), 2).size());
for (size_t i(0); i < numberFlightConditions; i++) {
readFlightConditions(config, i);
}
} else if (setFlightConditionsMode.value() == "mode_1") {
} else if (setFlightConditionsMode == true) {
myRuntimeInfo->info << "Hab vergessen was hier rein sollte" << endl;
}
CGPositions = {"design", "forward", "aft"};
......
......@@ -43,7 +43,7 @@ class bwbCalculatePolarConfig{
EndnodeReadOnly<std::string> CLModeAirfoilSelection; /**< Switch which sets if lift coefficient at ICA, at TOC or at average cruise is chosen for airfoil selection */
EndnodeReadOnly<double> stepWidthCL;
// fligt condition parameters
EndnodeReadOnly<std::string> setFlightConditionsMode;
bool setFlightConditionsMode;
// lifting line pitching moment parameters
EndnodeReadOnly<double> delta_CM0;
EndnodeReadOnly<double> delta_dCMdCL;
......
......@@ -49,7 +49,7 @@ tawCalculatePolarConfig::tawCalculatePolarConfig(const node& config)
stepWidthCL(EndnodeReadOnly<double>("LiftingLineForTAW/stepWidthCL").read(config)),
// other settings
CLModeAirfoilSelection(EndnodeReadOnly<std::string>("program_settings/CLModeAirfoilSelection").read(config)),
setFlightConditionsMode(EndnodeReadOnly<std::string>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq", "mode_0").read(config)),
setFlightConditionsMode(EndnodeReadOnly<bool>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq/setAutomaticFlightConditions").read(config).value()),
pathToLiftingLine(EndnodeReadOnly<std::string>("program_settings/LiftingLine/FolderPath").read(config)),
// lifting line for TAW pitching moment corrections
CM_corr_fuselage_mode(EndnodeReadOnly<std::string>("program_settings/LiftingLineForTAW/PitchingMoment/CM_corr_fuselage").read(config)),
......@@ -102,23 +102,23 @@ tawCalculatePolarConfig::tawCalculatePolarConfig(const node& config)
factorDragHL(EndnodeReadOnly<double>("program_settings/SemiEmpiricalHighLiftAdaptions/factorDrag").read(config)),
// high lift polars settings
do_individual_hl_calibration(EndnodeReadOnly<bool>("program_settings/SemiEmpiricalHighLiftAdaptions/do_individual_hl_calibration").read(config).value()),
apply_manual_CLmax_hl_values(EndnodeReadOnly<bool>("program_settings/SemiEmpiricalHighLiftAdaptions/apply_manual_CLmax_hl_values").read(config).value()) {
apply_manual_CLmax_hl_values(EndnodeReadOnly<bool>("program_settings/SemiEmpiricalHighLiftAdaptions/apply_manual_CLmax_hl_values").read(config).value()),
autoFC_allowGridChange(EndnodeReadOnly<bool>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq/allow_grid_change").read(config).value()),
autoFC_extrapolationMargin(EndnodeReadOnly<double>("program_settings/FlightConditions/AdaptMachNumbersToCruiseReq/extrapolation_margin").read(config).value()) {
// Constructor
liftingLineFolderPath = pathToLiftingLine.value();
myRuntimeInfo->out << "config: " << liftingLineFolderPath << endl;
if (setFlightConditionsMode.value() == "mode_0") {
myRuntimeInfo->out << "config: " << liftingLineFolderPath << endl;
if (!setFlightConditionsMode) {
myRuntimeInfo->info << "set flight conditions from config xml" << endl;
size_t numberFlightConditions(config.getVector(("program_settings/FlightConditions/FlightCondition"), 2).size());
for (size_t i(0); i < numberFlightConditions; i++) {
readFlightConditions(config, i);
}
//Sort flight conditions asc by Mach numbers
// Sort flight conditions asc by Mach numbers
std::sort(flightConditions.begin(), flightConditions.end(),
[](const flightCondition& firstFC, const flightCondition& secondFC) {
return firstFC.Mach <= secondFC.Mach;
});
} else if (setFlightConditionsMode.value() == "mode_1") {
myRuntimeInfo->info << "Hab vergessen was hier rein sollte" << endl;
}
this->initializeTrimSettings(config);
this->read_hl_calibration_factors(config);
......
......@@ -45,7 +45,9 @@ class tawCalculatePolarConfig{
EndnodeReadOnly<double> stepWidthCL;
EndnodeReadOnly<std::string> CLModeAirfoilSelection;
// fligt condition parameters
EndnodeReadOnly<std::string> setFlightConditionsMode;
bool setFlightConditionsMode;
bool autoFC_allowGridChange;
double autoFC_extrapolationMargin;
// lifting line pitching moment parameters
EndnodeReadOnly<std::string> CM_corr_fuselage_mode;
EndnodeReadOnly<std::string> CM_corr_nacelle_mode;
......@@ -121,9 +123,9 @@ class tawCalculatePolarConfig{
/* High lift calibration data */
struct hl_polar_calibration_values {
double CL_max; /**< maximum CL value which should be reached */
double delta_CD; /**< Constant delta for drag calibration */
double factor_CD; /**< Factor for drag calibration */
double CL_max = NAN; /**< maximum CL value which should be reached */
double delta_CD = NAN; /**< Constant delta for drag calibration */
double factor_CD = NAN; /**< Factor for drag calibration */
};
std::unordered_map<std::string, hl_polar_calibration_values> hl_polar_calibration_data; /**< Container for storing all high lift polar calibration and correction values */
......
......@@ -42,6 +42,8 @@ tawDefaultData::tawDefaultData(const std::shared_ptr<RuntimeIO>& rtIO)
engineType(EndnodeReadOnly<std::string>("type").read(rtIO->acxml.at("requirements_and_specifications/design_specification/propulsion/propulsor")).value()),
initialCruiseMachNumber(EndnodeReadOnly<double>("initial_cruise_mach_number").read(
rtIO->acxml.at("requirements_and_specifications/requirements/top_level_aircraft_requirements/design_mission")).value()),
initialCruise_Altitude(
EndnodeReadOnly<double>("requirements_and_specifications/requirements/top_level_aircraft_requirements/design_mission/initial_cruise_altitude").read(rtIO->acxml).value()),
bestCruiseCL(EndnodeReadOnly<double>("analysis/aerodynamics/lift_coefficients/C_LoptimumCruise").read(rtIO->acxml).value()),
designCoGX(EndnodeReadOnly<double>("analysis/masses_cg_inertia/design_mass/mass_properties/center_of_gravity/x").read(rtIO->acxml).value()),
designCoGY(EndnodeReadOnly<double>("analysis/masses_cg_inertia/design_mass/mass_properties/center_of_gravity/y").read(rtIO->acxml).value()),
......
......@@ -50,6 +50,7 @@ class tawDefaultData {
std::string engineType; /**< Information about the propulsor type (e.g. fan) [-] */
double delta_isa; /**< temperature delta to ISA Standard Atmosphere [K] */
double initialCruiseMachNumber; /**< Mach number flown in initial cruise phase at initial cruise altitude [-] */
double initialCruise_Altitude; /**< Initial cruise altitude [m] */
/* All EndnodeReadOnly Values are converted automatically to SI-Units/RADIAN when read in */
double bestCruiseCL; /**< optimum cruise lift coefficient */
double designCoGX; /**< x Position of design center of gravity in [m] */
......
......@@ -50,6 +50,7 @@
#include "../methods/waveDragMason.h"
#include "../methods/semiEmpiricalHighLiftAdaption.h"
#include "../methods/trimInterpolation.h"
#include "../flightCondition.h"
using std::endl;
using std::exception;
......@@ -86,6 +87,79 @@ void tawDefaultStrategy::run() {
CoGPositions["aft"] = data_->aftCoG;
}
// set individual flight conditions if enabled
if (config_->setFlightConditionsMode) {
config_->flightConditions.push_back(flightCondition());
config_->flightConditions.back().Mach = 0.2;
config_->flightConditions.back().Altitude = 0;
config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
config_->machNumbers.push_back(config_->flightConditions.back().Mach);
config_->flightConditions.push_back(flightCondition());
config_->flightConditions.back().Mach = 0.5;
config_->flightConditions.back().Altitude = 3048;
config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
config_->machNumbers.push_back(config_->flightConditions.back().Mach);
config_->flightConditions.push_back(flightCondition());
config_->flightConditions.back().Mach = 0.6;
config_->flightConditions.back().Altitude = 6096;
config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
config_->machNumbers.push_back(config_->flightConditions.back().Mach);
config_->flightConditions.push_back(flightCondition());
config_->flightConditions.back().Mach = data_->initialCruiseMachNumber - 0.15;
config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
config_->machNumbers.push_back(config_->flightConditions.back().Mach);
config_->flightConditions.push_back(flightCondition());
config_->flightConditions.back().Mach = data_->initialCruiseMachNumber - 0.1;
config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
config_->machNumbers.push_back(config_->flightConditions.back().Mach);
config_->flightConditions.push_back(flightCondition());
config_->flightConditions.back().Mach = data_->initialCruiseMachNumber - 0.05;
config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
config_->machNumbers.push_back(config_->flightConditions.back().Mach);
config_->flightConditions.push_back(flightCondition());
config_->flightConditions.back().Mach = data_->initialCruiseMachNumber - 0.02;
config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
config_->machNumbers.push_back(config_->flightConditions.back().Mach);
config_->flightConditions.push_back(flightCondition());
config_->flightConditions.back().Mach = data_->initialCruiseMachNumber;
config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
config_->machNumbers.push_back(config_->flightConditions.back().Mach);
config_->flightConditions.push_back(flightCondition());
config_->flightConditions.back().Mach = data_->initialCruiseMachNumber + 0.01;
config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
config_->machNumbers.push_back(config_->flightConditions.back().Mach);
config_->flightConditions.push_back(flightCondition());
config_->flightConditions.back().Mach = data_->initialCruiseMachNumber + 0.05;
config_->flightConditions.back().Altitude = data_->initialCruise_Altitude;
config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin;
config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange;
config_->machNumbers.push_back(config_->flightConditions.back().Mach);
}
// loop over all cg positions and stabilizer angles
for (size_t CGID(0); CGID < config_->CGPositions.size(); ++CGID) {
for (size_t stabID(0); stabID < config_->stabAngles.size(); ++stabID) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment