diff --git a/performance_assessment/performance_assessment_conf.xml b/performance_assessment/performance_assessment_conf.xml index 7152fd0fdc34a01e74e1700c4220840a40ac8355..dd7efdbd371b4e7257b1311f4cc5319e38803af8 100644 --- a/performance_assessment/performance_assessment_conf.xml +++ b/performance_assessment/performance_assessment_conf.xml @@ -86,12 +86,6 @@ <upper_boundary>50</upper_boundary> </head_wind> </field_performance> - <rate_of_climb_for_service_ceiling description="Rate of climb considered for the definition of the service ceiling (2.54m/s = 500 ft/min(default), 0.508m/s = 100ft/min)"> - <value>0.508</value> - <unit>m/s</unit> - <lower_boundary>0</lower_boundary> - <upper_boundary>10</upper_boundary> - </rate_of_climb_for_service_ceiling> </constants_for_performance_checks> <modes description="other settings that influence different modes!"> <use_study_mission_for_analysis description="Switch to use study mission for analysis; Switch: true(use missionStudy.xml) / false (use missionDesign.xml)"> diff --git a/performance_assessment/src/taw/defaultMethods/aircraft.h b/performance_assessment/src/taw/defaultMethods/aircraft.h index aed0d6e40939bd84e0c6970b25a4950ed2747b2a..6ec8362e9eda50e3d4b1f2b0461b806a4c5c918f 100644 --- a/performance_assessment/src/taw/defaultMethods/aircraft.h +++ b/performance_assessment/src/taw/defaultMethods/aircraft.h @@ -58,7 +58,7 @@ class aircraft { // double banana; double MTOM;/**< Maximum Take-off Mass (kg)*/ double MLM; /**< Maximum Landing Mass (kg)*/ - double OME;/**< Operating Mass Empty(kg) */ + double OME;/**< Operating Mass Empty (kg) */ double MFM;/**< Maximum Fuel mass (kg) */ double maxPayload; /** Maximum payload (kg) */ diff --git a/performance_assessment/src/taw/defaultMethods/ceilingPerformance/abstractCeilingPerformance.h b/performance_assessment/src/taw/defaultMethods/ceilingPerformance/abstractCeilingPerformance.h index a3cddbddb2cee11a49c90916c3f48c8eba5c2742..e80ad8266c80012df836e97baf0869c3637c034c 100644 --- a/performance_assessment/src/taw/defaultMethods/ceilingPerformance/abstractCeilingPerformance.h +++ b/performance_assessment/src/taw/defaultMethods/ceilingPerformance/abstractCeilingPerformance.h @@ -51,6 +51,8 @@ class abstractCeilingPerformance }; std::vector<dataCeiling> theCeiling; /**< List of the ceiling data */ + double ROC_AEO_req; /** Required rate of climb for all engines operational (m/s)*/ + double ROC_OEI_req; /** Required rate of climb for one engine inoperative (m/s)*/ }; #endif // PERFORMANCE_ASSESSMENT_SRC_TAW_DEFAULTMETHODS_CEILINGPERFORMANCE_ABSTRACTCEILINGPERFORMANCE_H_ diff --git a/performance_assessment/src/taw/defaultMethods/ceilingPerformance/low_fidelity/ceilingPerformance.cpp b/performance_assessment/src/taw/defaultMethods/ceilingPerformance/low_fidelity/ceilingPerformance.cpp index e4d645946647cd1d293a8cb69392988632579417..e976703a0c1484bb97ba81dd7c762dad33a565c9 100644 --- a/performance_assessment/src/taw/defaultMethods/ceilingPerformance/low_fidelity/ceilingPerformance.cpp +++ b/performance_assessment/src/taw/defaultMethods/ceilingPerformance/low_fidelity/ceilingPerformance.cpp @@ -53,23 +53,24 @@ void ceilingPerformance::doCeilingCalculation() { lastAltMax = theCeiling.back().maxCeiling; lastAltMaxOEI = theCeiling.back().maxCeilingOEI; } - double ROC = theAcftPt->mySettingsPt->rate_of_climb_for_service_ceiling; - // double ROC = convertUnit(FOOT, METER, 500.)/ 60.; - // if (theAcftPt->thrust_generator_type == "prop") { - // ROC = convertUnit(FOOT, METER, 100.)/ 60.; - // } else if (theAcftPt->thrust_generator_type == "fan") { - // ROC = convertUnit(FOOT, METER, 500.)/ 60.; - // } else { - // myRuntimeInfo->warn << "No service ceiling rate of climb found for given thrust generator type: " << theAcftPt->thrust_generator_type << - // " found! Using 500 ft/m. Please check this!" << std::endl; - // ROC = convertUnit(FOOT, METER, 500.)/ 60.; - // } + // Determine required ROCs + ROC_AEO_req = convertUnit(FOOT, METER, 100.)/ 60.; + ROC_OEI_req = convertUnit(FOOT, METER, 50.)/ 60.; + if (theAcftPt->thrust_generator_type == "prop") { + ROC_AEO_req = ROC_OEI_req = convertUnit(FOOT, METER, 50.)/ 60.; + } else if (theAcftPt->thrust_generator_type == "fan") { + ROC_AEO_req = convertUnit(FOOT, METER, 100.)/ 60.; + ROC_OEI_req = convertUnit(FOOT, METER, 50.)/ 60.; + } else { + myRuntimeInfo->warn << "No service ceiling rate of climb found for given thrust generator type: " << theAcftPt->thrust_generator_type << + "! Options are 'prop' or 'fan'. Using 100 ft/m. Please check this!" << std::endl; + } theCeiling.push_back(dataCeiling()); theCeiling.back().Mass = grossMass; theCeiling.back().Mach = theAcftPt->MInitialCruise; - theCeiling.back().serviceCeiling = iterateForCeiling(grossMass, ROC, theCeiling.back().Mach, lastAltService, false); + theCeiling.back().serviceCeiling = iterateForCeiling(grossMass, ROC_AEO_req, theCeiling.back().Mach, lastAltService, false); theCeiling.back().maxCeiling = iterateForCeiling(grossMass, 0.0, theCeiling.back().Mach, lastAltMax, false); - theCeiling.back().maxCeilingOEI = iterateForCeiling(0.925 * grossMass, ROC, theCeiling.back().Mach, lastAltMaxOEI, true); + theCeiling.back().maxCeilingOEI = iterateForCeiling(0.925 * grossMass, ROC_OEI_req, theCeiling.back().Mach, lastAltMaxOEI, true); } theAcftPt->myChecks.initCruiseAlt = checkForInitialCruiseAlt(); theAcftPt->myChecks.initCruiseM = checkForInitialCruiseMach(); diff --git a/performance_assessment/src/taw/defaultMethods/performance_assessment_output.cpp b/performance_assessment/src/taw/defaultMethods/performance_assessment_output.cpp index 6b3c377ab2b9a193c89bca3d40209e01cef5af6c..90ceec48240b9acaa3fc0b955f81b321ffbf977e 100644 --- a/performance_assessment/src/taw/defaultMethods/performance_assessment_output.cpp +++ b/performance_assessment/src/taw/defaultMethods/performance_assessment_output.cpp @@ -840,8 +840,9 @@ void performance_assessment_output::generate_plot_ceiling_performance() { ax->plot(x, max_oei_ceiling_y); ax->grid(matplot::on); ax->ylim({0, max_ylim}); - ax->legend({"Service ceiling, Rate of climb " + num2Str(std::format("{:.0f}", floor(mySettingsPt->rate_of_climb_for_service_ceiling * 196.8504))) + " ft/min", - "Max. ceiling, Rate of climb 0 ft/min", "OEI ceiling, Rate of climb 500 ft/min"}); + ax->legend({"Service ceiling, Rate of climb " + num2Str(std::format("{:.0f}", floor(convertUnit(METER, FOOT, abstractCeilingPerformancePt->ROC_AEO_req)* 60.))) + " ft/min", + "Max. ceiling, Rate of climb 0 ft/min", "OEI ceiling, Rate of climb " + + num2Str(std::format("{:.0f}", floor(convertUnit(METER, FOOT, abstractCeilingPerformancePt->ROC_OEI_req)* 60.))) + " ft/min"}); ax->legend()->location(matplot::legend::general_alignment::bottomright); ax->xlabel("Gross mass [kg]"); ax->ylabel("Altitude [m]"); diff --git a/performance_assessment/src/taw/defaultMethods/performance_assessment_settings.cpp b/performance_assessment/src/taw/defaultMethods/performance_assessment_settings.cpp index 85194900404d1a2f7cb8db116382c5df3167c59e..3b2c4c6f9269c7e60b8c01370603cd7c43750330 100644 --- a/performance_assessment/src/taw/defaultMethods/performance_assessment_settings.cpp +++ b/performance_assessment/src/taw/defaultMethods/performance_assessment_settings.cpp @@ -33,8 +33,6 @@ performance_assessment_settings::performance_assessment_settings(const std::shar .read(rtIO->moduleConfig).value(); myField.headWind = EndnodeReadOnly<double>("/module_configuration_file/program_settings/constants_for_performance_checks/field_performance/head_wind") .read(rtIO->moduleConfig).value(); - rate_of_climb_for_service_ceiling = EndnodeReadOnly<double>("/module_configuration_file/program_settings/constants_for_performance_checks/rate_of_climb_for_service_ceiling") - .read(rtIO->moduleConfig).value(); if (false) { // Vn-Diagram is temporarily disabled /* Constants for the Representation of the Vn Diagram */ diff --git a/performance_assessment/src/taw/defaultMethods/performance_assessment_settings.h b/performance_assessment/src/taw/defaultMethods/performance_assessment_settings.h index ca85e84f3ef01fc2610989e005bd61e3e339ab47..bad1f0c94352fec2bd853afac60d4643d514066f 100644 --- a/performance_assessment/src/taw/defaultMethods/performance_assessment_settings.h +++ b/performance_assessment/src/taw/defaultMethods/performance_assessment_settings.h @@ -62,7 +62,6 @@ class performance_assessment_settings { bool designForMTOM; /**< Switch for a new determination of the MTOM */ bool useStudyMissionForAnalysis; /**< Switch if missionStudy.xml should be used instead of missionDesign.xml */ bool optimizeMission; /** Switch if the mission profile will be optimized */ - double rate_of_climb_for_service_ceiling; /** Rate of climb that defines the service ceiling */ /** \class enginePerfData Includes the engine performance rating *