diff --git a/aerodynamic_analysis/aerodynamic_analysis_conf.xml b/aerodynamic_analysis/aerodynamic_analysis_conf.xml index 327d3d1b905403025cd142d90e7ce8d834c07ad6..45be3c07c6e974dc2883c4c0494538f54d73ece9 100644 --- a/aerodynamic_analysis/aerodynamic_analysis_conf.xml +++ b/aerodynamic_analysis/aerodynamic_analysis_conf.xml @@ -104,6 +104,21 @@ </bwbStrategies> </aeroStrategySelection> <FlightConditions description="Flight State"> + <AdaptMachNumbersToCruiseReq> + <value>true</value> + <default>true</default> + </AdaptMachNumbersToCruiseReq> + <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> <FlightCondition ID="0" description="Description of the flight condition"> <extrapolation_margin description="Margin for extrapolation"> <value>1</value> diff --git a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp index a79dbd21fbe72db78da7d65f30cbb1fca837c721..b0ff93ed82ed9f289e25c11c98a0cda34cf5be30 100644 --- a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp +++ b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.cpp @@ -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").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,24 +102,22 @@ 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/allow_grid_change").read(config).value()), + autoFC_extrapolationMargin(EndnodeReadOnly<double>("program_settings/FlightConditions/extrapolation_margin").read(config).value()) { // Constructor liftingLineFolderPath = pathToLiftingLine.value(); myRuntimeInfo->out << "config: " << liftingLineFolderPath << endl; - if (setFlightConditionsMode.value() == "mode_0") { - 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 - 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; + 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 + std::sort(flightConditions.begin(), flightConditions.end(), + [](const flightCondition& firstFC, const flightCondition& secondFC) { + return firstFC.Mach <= secondFC.Mach; + }); this->initializeTrimSettings(config); this->read_hl_calibration_factors(config); } @@ -180,6 +178,9 @@ void tawCalculatePolarConfig::read_hl_calibration_factors(const node& config) { EndnodeReadOnly factor_CDNode(EndnodeReadOnly<double>("SemiEmpiricalHighLiftAdaptions/hl_polars_correction_values/hl_polar@" + num2Str(HLPolarID) + "/factor_CD").read(config)); hl_polar_calibration_values aHLPolarCalibrationContainer; + aHLPolarCalibrationContainer.CL_max = 0.0; + aHLPolarCalibrationContainer.delta_CD = 0.0; + aHLPolarCalibrationContainer.factor_CD = 0.0; hl_polar_calibration_data[configurationNode.value()] = aHLPolarCalibrationContainer; hl_polar_calibration_data.at(configurationNode.value()).CL_max = CLMaxNode.value(); hl_polar_calibration_data.at(configurationNode.value()).delta_CD = delta_CDNode.value(); diff --git a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h index 049213a36de5017d1c8559856f02a98a39d95999..8f60d2424782d0ecd614214b82a17012811df75f 100644 --- a/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h +++ b/aerodynamic_analysis/src/taw/tawCalculatePolarConfig.h @@ -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; diff --git a/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp b/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp index 6663ab4146cc56f6ee005354004728bdd24bd338..8bb1d2609915fe0d9a599689bfe90dfdf6a469f0 100644 --- a/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp +++ b/aerodynamic_analysis/src/taw/tawDefaultStrategy.cpp @@ -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,41 @@ void tawDefaultStrategy::run() { CoGPositions["aft"] = data_->aftCoG; } + // set individual flight conditions if enabled + if (config_->setFlightConditionsMode) { + myRuntimeInfo->out << "test" << endl; + config_->flightConditions.clear(); + config_->machNumbers.clear(); + 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.2; + config_->flightConditions.back().Altitude = 77776; + config_->flightConditions.back().extrapolationMargin = config_->autoFC_extrapolationMargin; + config_->flightConditions.back().allowGridChange = config_->autoFC_allowGridChange; + config_->machNumbers.push_back(config_->flightConditions.back().Mach); + exit(1); + } + // 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) {