diff --git a/wing_design/CMakeLists.txt b/wing_design/CMakeLists.txt index ec25b1e7c5e33b5243a10ab13366b60c4e102d34..cba6e661aaf515743c3063b56ea2e761371111e4 100644 --- a/wing_design/CMakeLists.txt +++ b/wing_design/CMakeLists.txt @@ -13,11 +13,11 @@ set(MODULE_NAME wing_design) # Conventional tail files set(MODULE_SOURCES_TAW - src/taw/cantilever/cantileverWingDesignTaw.cpp src/taw/tawWingDesignData.cpp src/taw/tawWingDesignConfig.cpp - src/taw/cantilever/cantileverWingDesignReport.cpp - src/taw/cantilever/cantileverWingDesignPlot.cpp + src/taw/cantilever_backward/cantileverWingDesignTaw.cpp + src/taw/cantilever_backward/cantileverWingDesignReport.cpp + src/taw/cantilever_backward/cantileverWingDesignPlot.cpp ) set(MODULE_SOURCES_BLENDED_WING_BODY @@ -53,7 +53,8 @@ find_package(Eigen3 3.3 REQUIRED NO_MODULE) # Link the runtime libraries target_link_libraries(${MODULE_NAME} - PUBLIC + PUBLIC + PUBLIC Eigen3::Eigen PRIVATE UnicadoLibs::runtimeInfo @@ -72,7 +73,7 @@ target_include_directories(${MODULE_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/ PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src/ # <- This is due to the includes in empennage PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src/bwb/low_fidelity/ - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src/taw/cantilever/ + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src/taw/cantilever_backward/ ) # Set the location where the executable will be placed to the current source directory @@ -87,8 +88,8 @@ endif() # Add the installation rules install (TARGETS ${MODULE_NAME} DESTINATION ${MODULE_NAME}) -install (FILES - ${MODULE_NAME}_conf.xml +install (FILES + ${MODULE_NAME}_conf.xml gmp-10.dll mpfr-6.dll DESTINATION ${MODULE_NAME}) @@ -97,4 +98,5 @@ install (FILES if(BUILD_SHARED_LIBS) # Install the runtime dependencies install(RUNTIME_DEPENDENCY_SET ${MODULE_NAME}_dependencies) -endif() \ No newline at end of file +endif() + diff --git a/wing_design/src/lib/design_methods/dihedralMethods.cpp b/wing_design/src/lib/design_methods/dihedralMethods.cpp index cc2fcf03417096f31d7c3682795c6384d42eb011..590b7b627d6759233573ca0aaba39ae8a12afcb8 100644 --- a/wing_design/src/lib/design_methods/dihedralMethods.cpp +++ b/wing_design/src/lib/design_methods/dihedralMethods.cpp @@ -26,6 +26,7 @@ #include <unitConversion/constants.h> #include <map> +#include <cmath> #include <iostream> #include <numbers> #include <tuple> @@ -35,17 +36,15 @@ constexpr double to_degree = 180.0 / std::numbers::pi; constexpr double to_radian = std::numbers::pi / 180.0; -std::tuple<double, double> user_defined::dihedral(const double user_dihedral) { return {user_dihedral, user_dihedral}; } +double user_defined::dihedral(const double user_dihedral) { return user_dihedral; } double by_wing_position_and_quarter_chord_sweep::dihedral(const std::string& wing_position, - const double quarter_chord_sweep, const double mach_design) { - const auto [minimum_dihedral, maximum_dihedral] = - raymer::dihedral_limitation(wing_position, quarter_chord_sweep, mach_design); - return 0.5 * (minimum_dihedral + maximum_dihedral); + const double quarter_chord_sweep, const double mach_design, const double raymer_range_value) { + return raymer::dihedral_limitation(wing_position, quarter_chord_sweep, mach_design, raymer_range_value); } -std::tuple<double, double> raymer::dihedral_limitation(const std::string& wing_position, - const double quarter_chord_sweep, const double mach_design) { +double raymer::dihedral_limitation(const std::string& wing_position, + const double quarter_chord_sweep, const double mach_design, const double raymer_range_value) { std::map<std::string, std::tuple<double, double>> unswept = {{"low", {5. * geom2::detail::to_radians, 7. * geom2::detail::to_radians}}, {"mid", {2. * geom2::detail::to_radians, 4. * geom2::detail::to_radians}}, {"high", {0. * geom2::detail::to_radians, 2. * geom2::detail::to_radians}}}; @@ -58,46 +57,34 @@ std::tuple<double, double> raymer::dihedral_limitation(const std::string& wing_p {"mid", {-5. * geom2::detail::to_radians, 0. * geom2::detail::to_radians}}, {"high", {-5. * geom2::detail::to_radians, 0. * geom2::detail::to_radians}}}; + double dihedral; if (mach_design < 1.) { if (fabs(quarter_chord_sweep) < ACCURACY_MEDIUM) { - return unswept[wing_position]; + const auto [lo, up] = unswept[wing_position]; + dihedral = std::lerp(lo, up, raymer_range_value); } else { - return swept_subsonic[wing_position]; + const auto [lo, up] = swept_subsonic[wing_position]; + dihedral = std::lerp(lo, up, raymer_range_value); } } else { - return swept_supersonic[wing_position]; - } -} - -std::tuple<double, double> howe::dihedral_limitation(const std::string& wing_position, - const double quarter_chord_sweep) { - std::map<std::string, std::tuple<double, double>> unswept = {{"low", {3. * geom2::detail::to_radians, 5. * geom2::detail::to_radians}}, - {"mid", {0. * geom2::detail::to_radians, 0. * geom2::detail::to_radians}}, - {"high", {0. * geom2::detail::to_radians, 0. * geom2::detail::to_radians}}}; - std::map<std::string, std::tuple<double, double>> swept = { - {"low", {0. * to_radian, std::numeric_limits<double>::max()}}, - {"mid", {std::numeric_limits<double>::lowest(), std::numeric_limits<double>::max()}}, - {"high", {std::numeric_limits<double>::lowest(), 0. * geom2::detail::to_radians}}}; - if (fabs(quarter_chord_sweep) < ACCURACY_MEDIUM) { - return unswept[wing_position]; - } else { - return swept[wing_position]; + const auto [up, lo] = swept_supersonic[wing_position]; + dihedral = std::lerp(lo, up, raymer_range_value); } + return dihedral; } double get_design_dihedral(modes dihedral_mode, const std::string& wing_mounting, const double user_dihedral, - const double quarter_chord_sweep, const double mach_design) { - std::map<modes, std::tuple<std::string, std::function<std::tuple<double, double>(void)>>> dihedral_selection = { + const double quarter_chord_sweep, const double mach_design, const double raymer_range_value) { + std::map<modes, std::tuple<std::string, std::function<double(void)>>> dihedral_selection = { {"mode_0", {"user_defined", [=]() { return user_defined::dihedral(user_dihedral); }}}, - {"mode_1", - {"raymer", [=]() { return ::raymer::dihedral_limitation(wing_mounting, quarter_chord_sweep, mach_design); }}}, - {"mode_2", {"howe", [=]() { return ::howe::dihedral_limitation(wing_mounting, quarter_chord_sweep); }}}}; + {"mode_1", {"raymer", [=]() { return ::raymer::dihedral_limitation(wing_mounting, quarter_chord_sweep, mach_design, raymer_range_value); }}}}; + const auto [method, limits_method] = dihedral_selection[dihedral_mode]; - std::tuple<double, double> limits = limits_method(); - const auto [minimum, maximum] = limits; - const double value = 0.5 * (minimum + maximum); + const double value = limits_method(); std::cout << "Dihedral [method]: " << method << "\n"; std::cout << "Dihedral [value]: " << value * geom2::detail::to_degrees << " [deg]\n"; return value; -} \ No newline at end of file + + +} diff --git a/wing_design/src/lib/design_methods/dihedralMethods.h b/wing_design/src/lib/design_methods/dihedralMethods.h index 3b95d75724607b17122669c55d7ecfaa0118bea3..abcee2325469a9b5a737c08c7216d675a64610db 100644 --- a/wing_design/src/lib/design_methods/dihedralMethods.h +++ b/wing_design/src/lib/design_methods/dihedralMethods.h @@ -29,22 +29,18 @@ using modes = std::string; namespace user_defined { -std::tuple<double, double> dihedral(const double user_dihedral); +double dihedral(const double user_dihedral); } namespace by_wing_position_and_quarter_chord_sweep { -double dihedral(const std::string& wing_position, const double quarter_chord_sweep, const double mach_design); +double dihedral(const std::string& wing_position, const double quarter_chord_sweep, const double mach_design, const double raymer_range_value); } // namespace by_wing_position_and_quarter_chord_sweep namespace raymer { -std::tuple<double, double> dihedral_limitation(const std::string& wing_position, const double quarter_chord_sweep, - const double mach); -} - -namespace howe { -std::tuple<double, double> dihedral_limitation(const std::string& wing_position, const double quarter_chord_sweep); +double dihedral_limitation(const std::string& wing_position, const double quarter_chord_sweep, + const double mach, const double raymer_range_value); } double get_design_dihedral(modes dihedral_mode, const std::string& wing_mounting, const double user_dihedral, - const double quarter_chord_sweep, const double mach_design); + const double quarter_chord_sweep, const double mach_design, const double raymer_range_value); #endif // DIHEDRAL_METHODS_H_ diff --git a/wing_design/src/taw/cantilever/cantileverWingDesignPlot.cpp b/wing_design/src/taw/cantilever_backward/cantileverWingDesignPlot.cpp similarity index 99% rename from wing_design/src/taw/cantilever/cantileverWingDesignPlot.cpp rename to wing_design/src/taw/cantilever_backward/cantileverWingDesignPlot.cpp index 0abe7b9a8b7a549eabb97ed84bc2908fb51d7e7e..f26d1bdf5ec7999b2bf3dd34a1136135e9928552 100644 --- a/wing_design/src/taw/cantilever/cantileverWingDesignPlot.cpp +++ b/wing_design/src/taw/cantilever_backward/cantileverWingDesignPlot.cpp @@ -117,7 +117,7 @@ std::tuple<std::vector<double>,std::vector<double>,std::string> gen_polygon(cons return {x,y,object.name}; } namespace taw { -namespace cantilever { +namespace cantilever_backward { diff --git a/wing_design/src/taw/cantilever/cantileverWingDesignReport.cpp b/wing_design/src/taw/cantilever_backward/cantileverWingDesignReport.cpp similarity index 99% rename from wing_design/src/taw/cantilever/cantileverWingDesignReport.cpp rename to wing_design/src/taw/cantilever_backward/cantileverWingDesignReport.cpp index ba88c99788775da5403838b2169a46e640fe04d3..e8a9a6aee1ea484a143f0ea8bfa8142dfb3b4334 100644 --- a/wing_design/src/taw/cantilever/cantileverWingDesignReport.cpp +++ b/wing_design/src/taw/cantilever_backward/cantileverWingDesignReport.cpp @@ -27,7 +27,7 @@ #include "cantileverWingDesignTaw.h" namespace taw { -namespace cantilever { +namespace cantilever_backward { void Wing::set_html_body() { /* Add box data */ reporter.htmlReportStream() << "<div class=\"box data\">\n"; diff --git a/wing_design/src/taw/cantilever/cantileverWingDesignTaw.cpp b/wing_design/src/taw/cantilever_backward/cantileverWingDesignTaw.cpp similarity index 97% rename from wing_design/src/taw/cantilever/cantileverWingDesignTaw.cpp rename to wing_design/src/taw/cantilever_backward/cantileverWingDesignTaw.cpp index 2ac8dd4764ea1ff5344fe3c642a5d980c0248b55..7879b76dabb32126c93963660f92333e7c79f259 100644 --- a/wing_design/src/taw/cantilever/cantileverWingDesignTaw.cpp +++ b/wing_design/src/taw/cantilever_backward/cantileverWingDesignTaw.cpp @@ -50,11 +50,11 @@ geom2::AirfoilSection get_rescaled_airfoil_geometry(const std::string& airfoilda std::tuple<double, double, std::string> wing_profile_and_thickness); namespace taw { -namespace cantilever { +namespace cantilever_backward { Wing::Wing(const std::shared_ptr<RuntimeIO>& rtIO) : rtIO(rtIO), - config(std::make_shared<taw::cantilever::WingDesignConfig>()), - data(std::make_shared<taw::cantilever::WingDesignData>()), + config(std::make_shared<taw::cantilever_backward::WingDesignConfig>()), + data(std::make_shared<taw::cantilever_backward::WingDesignData>()), reporter(rtIO) { /* Setup design modes */ design_mode_runner["mode_0"] = [this]() { standard_design(); }; @@ -66,6 +66,7 @@ Wing::Wing(const std::shared_ptr<RuntimeIO>& rtIO) } void Wing::initialize() { + myRuntimeInfo->out << "Wing design method ... cantilever (backward)" << std::endl; myRuntimeInfo->out << "Initializing wing design ... [START]" << std::endl; /* Create Airfoil directory in project path */ rtIO->createAirfoilDataDir(); @@ -169,19 +170,9 @@ void Wing::standard_design() { /* if current aspect ratio exceeds maximum possible aspect ratio -> set aspect ratio to maximum possible aspect ratio * and set span to according wing span */ - if (aspect_ratio > maximum_possible_aspect_ratio) { - myRuntimeInfo->warn << "Calculated aspect ratio > maximum_possible_aspect_ratio" << std::endl; - myRuntimeInfo->warn << "Switch to maximum possible aspect_ratio" << std::endl; - aspect_ratio = maximum_possible_aspect_ratio; - span = upper_wing_span; - } - // Check if current aspect ratio is below lower span limit -> set aspect ratio to minimum possible aspect ratio and - // set span to according wing span */ - if (aspect_ratio < minimum_possible_aspect_ratio) { - myRuntimeInfo->warn << "Current aspect ratio breach lower span limit ..." << std::endl; - myRuntimeInfo->warn << "Switch to minimum possible aspect_ratio" << std::endl; - aspect_ratio = minimum_possible_aspect_ratio; - span = lower_wing_span; + if (aspect_ratio > maximum_possible_aspect_ratio || aspect_ratio < minimum_possible_aspect_ratio) { + myRuntimeInfo->warn << "Calculated aspect ratio out of bounds with regard to icao aerodrome reference" << std::endl; + myRuntimeInfo->warn << std::format("Aspect ratio range: {:.2f} <= {:.2f} <= {:.2f}", minimum_possible_aspect_ratio, aspect_ratio, maximum_possible_aspect_ratio) << std::endl; } /* Freeze aspect ratio and span */ @@ -195,7 +186,7 @@ void Wing::standard_design() { // Comptue dihedral based on selected mode const double installed_dihedral = get_design_dihedral( config->dihedral_calculation_mode.value(), data->specification_wing_mounting.value(), - config->user_dihedral.value(), installed_quarter_chord_sweep, data->specification_design_mach.value()); + config->user_dihedral.value(), installed_quarter_chord_sweep, data->specification_design_mach.value(), config->raymer_range_value.value()); // Generate wing if (is_wing_kinked) { @@ -439,10 +430,10 @@ geom2::MultisectionSurface<geom2::AirfoilSection> Wing::calculate_kinked_wing_ge if ((half_span * (eta_kink - eta_fuselage) * tan_inner_wing_leading_edge_sweep) >= (1 - taper_ratio_inner)) { std::cout << "[OK]" << std::endl; } else { - throwError(__FILE__,__func__,__LINE__,"Error - trailing edge condition not fulfilled (TE Sweep < 0)"); + myRuntimeInfo->info << "Trailing edge sweep < 0" << std::endl; } } else { - throwError(__FILE__,__func__,__LINE__,"Error - leading edge condition not fulfilled (LE Sweep inner < LE Sweep outer)."); + myRuntimeInfo->info << "Leading edge sweep inner < Leading edge sweep outer" << std::endl; } /* Create Sections */ diff --git a/wing_design/src/taw/cantilever/cantileverWingDesignTaw.h b/wing_design/src/taw/cantilever_backward/cantileverWingDesignTaw.h similarity index 96% rename from wing_design/src/taw/cantilever/cantileverWingDesignTaw.h rename to wing_design/src/taw/cantilever_backward/cantileverWingDesignTaw.h index d6fbf2510b45d60fa3cde2addc2f86c7ca73c799..d7e6ba8bf6a35d32f12197edb4a71c11ae8e68c4 100644 --- a/wing_design/src/taw/cantilever/cantileverWingDesignTaw.h +++ b/wing_design/src/taw/cantilever_backward/cantileverWingDesignTaw.h @@ -33,7 +33,7 @@ using modes = std::string; namespace taw { -namespace cantilever { +namespace cantilever_backward { class Wing : public Strategy { public: Wing(const std::shared_ptr<RuntimeIO>& rtIO); @@ -211,8 +211,8 @@ class Wing : public Strategy { std::shared_ptr<Airfoils> airfoils_library; const std::shared_ptr<RuntimeIO>& rtIO; - const std::shared_ptr<taw::cantilever::WingDesignData> data; - const std::shared_ptr<taw::cantilever::WingDesignConfig> config; + const std::shared_ptr<taw::cantilever_backward::WingDesignData> data; + const std::shared_ptr<taw::cantilever_backward::WingDesignConfig> config; Report reporter; }; diff --git a/wing_design/src/taw/tawWingDesignConfig.cpp b/wing_design/src/taw/tawWingDesignConfig.cpp index f3946b3357a09146c1714287c53705515167cf05..23b56c4aeb104792e2619b063c9b4f7cfdcdfe79 100644 --- a/wing_design/src/taw/tawWingDesignConfig.cpp +++ b/wing_design/src/taw/tawWingDesignConfig.cpp @@ -22,89 +22,89 @@ #include "tawWingDesignConfig.h" -taw::cantilever::WingDesignConfig::WingDesignConfig() +taw::cantilever_backward::WingDesignConfig::WingDesignConfig() : wing_design_mode(EndnodeReadOnly<std::string>("program_settings/modes/design_mode")), wing_mass_mode( - EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever/calculation_methods/mass/method")), + EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/mass/method")), wing_configuration_mode(EndnodeReadOnly<std::string>("program_settings/tube_and_wing/wing_configuration")), wing_area_calculation_mode(EndnodeReadOnly<std::string>( - "program_settings/tube_and_wing/cantilever/calculation_methods/wing_area/method")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/wing_area/method")), user_wing_area(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/wing_area/parameters/mode_0/wing_area")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/wing_area/parameters/mode_0/wing_area")), sweep_calculation_mode( - EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever/calculation_methods/sweep/method")), + EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/sweep/method")), user_sweep_angle_at_quarter_chord(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/sweep/parameters/mode_0/sweep_angle")), - korn_technology_factor(EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever/calculation_methods/" + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/sweep/parameters/mode_0/sweep_angle")), + korn_technology_factor(EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/" "sweep/parameters/mode_1/korn_technology_factor")), delta_drag_divergence_to_mach_design( - EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever/calculation_methods/sweep/parameters/" + EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/sweep/parameters/" "mode_1/delta_drag_divergence_to_mach_design")), taper_ratio_calculation_mode(EndnodeReadOnly<std::string>( - "program_settings/tube_and_wing/cantilever/calculation_methods/taper_ratio/method")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/taper_ratio/method")), user_taper_ratio(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/taper_ratio/parameters/mode_0/taper_ratio")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/taper_ratio/parameters/mode_0/taper_ratio")), aspect_ratio_calculation_mode(EndnodeReadOnly<std::string>( - "program_settings/tube_and_wing/cantilever/calculation_methods/aspect_ratio/method")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/aspect_ratio/method")), user_aspect_ratio(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/aspect_ratio/parameters/mode_0/aspect_ratio")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/aspect_ratio/parameters/mode_0/aspect_ratio")), dihedral_calculation_mode(EndnodeReadOnly<std::string>( - "program_settings/tube_and_wing/cantilever/calculation_methods/dihedral/method")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/dihedral/method")), user_dihedral(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/dihedral/parameters/mode_0/dihedral_angle")), - dihedral_limitation_mode( - EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever/calculation_methods/dihedral/" - "parameters/mode_1/dihedral_limitation")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/dihedral/parameters/mode_0/dihedral_angle")), + raymer_range_value( + EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/dihedral/" + "parameters/mode_1/raymer_range_value")), relative_kink_position_calculation_mode(EndnodeReadOnly<std::string>( - "program_settings/tube_and_wing/cantilever/calculation_methods/relative_kink_position/method")), - user_relative_kink(EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever/calculation_methods/" + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/relative_kink_position/method")), + user_relative_kink(EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/" "relative_kink_position/parameters/mode_0/relative_kink_position")), user_max_inner_trailing_edge_sweep( - EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever/calculation_methods/" + EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/" "relative_kink_position/parameters/mode_0/maximum_inner_trailing_edge_sweep")), track_based_initial_relative_kink( - EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever/calculation_methods/" + EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/" "relative_kink_position/parameters/mode_1/initial_relative_kink_position")), track_based_max_inner_trailing_edge_sweep( - EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever/calculation_methods/" + EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/" "relative_kink_position/parameters/mode_1/maximum_inner_trailing_edge_sweep")), wing_profile_and_thickness_calculation_mode( - EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever/calculation_methods/" + EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/" "wing_profile_and_thickness_distribution/method")), torenbeek_jenkinson_wing_profile( - EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever/calculation_methods/" + EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/" "wing_profile_and_thickness_distribution/parameters/mode_1/wing_profile")), max_thickness_to_chord_ratio(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/wing_profile_and_thickness_distribution/" + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/wing_profile_and_thickness_distribution/" "parameters/mode_1/max_thickness_to_chord_ratio")), airfoil_critical_factor( - EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever/calculation_methods/" + EndnodeReadOnly<double>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/" "wing_profile_and_thickness_distribution/parameters/mode_1/airfoil_critical_factor")), control_device_mode(EndnodeReadOnly<std::string>( - "program_settings/tube_and_wing/cantilever/calculation_methods/control_devices/method")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/control_devices/method")), high_lift_device_type_leading_edge( - EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever/calculation_methods/control_devices/" + EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/control_devices/" "parameters/mode_1/high_lift_device_type_leading_edge")), high_lift_device_type_trailing_edge( - EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever/calculation_methods/control_devices/" + EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/control_devices/" "parameters/mode_1/high_lift_device_type_trailing_edge")), spars_mode( - EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever/calculation_methods/spars/method")), + EndnodeReadOnly<std::string>("program_settings/tube_and_wing/cantilever_backward/calculation_methods/spars/method")), flops_fstrt(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/mass/parameters/mode_0/fstrt")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/mass/parameters/mode_0/fstrt")), flops_faert(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/mass/parameters/mode_0/faert")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/mass/parameters/mode_0/faert")), flops_fcomp(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/mass/parameters/mode_0/fcomp")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/mass/parameters/mode_0/fcomp")), flops_technology_factor(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/mass/parameters/mode_0/technology_factor")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/mass/parameters/mode_0/technology_factor")), chiozzotto_technology_factor(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/mass/parameters/mode_1/technology_factor")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/mass/parameters/mode_1/technology_factor")), chiozzotto_material(EndnodeReadOnly<std::string>( - "program_settings/tube_and_wing/cantilever/calculation_methods/mass/parameters/mode_1/material")), + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/mass/parameters/mode_1/material")), common_airfoil_data_path(EndnodeReadOnly<std::string>("module_configuration_file/program_settings/additional_directory_paths/common_airfoil_data_path")) {} -void taw::cantilever::WingDesignConfig::read(const node& xml) { +void taw::cantilever_backward::WingDesignConfig::read(const node& xml) { wing_design_mode.read(xml); wing_mass_mode.read(xml); wing_configuration_mode.read(xml); @@ -120,7 +120,7 @@ void taw::cantilever::WingDesignConfig::read(const node& xml) { user_aspect_ratio.read(xml); dihedral_calculation_mode.read(xml); user_dihedral.read(xml); - dihedral_limitation_mode.read(xml); + raymer_range_value.read(xml); relative_kink_position_calculation_mode.read(xml); user_relative_kink.read(xml); user_max_inner_trailing_edge_sweep.read(xml); @@ -148,7 +148,7 @@ void taw::cantilever::WingDesignConfig::read(const node& xml) { int to_count = 0; do { result = xml.find( - "program_settings/tube_and_wing/cantilever/calculation_methods/wing_profile_and_thickness_distribution/" + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/wing_profile_and_thickness_distribution/" "parameters/mode_0/wing_profile_and_thickness@" + std::to_string(to_count)); to_count++; @@ -157,15 +157,15 @@ void taw::cantilever::WingDesignConfig::read(const node& xml) { for (int i = 0; i < to_count; ++i) { std::string id = std::to_string(i); user_wing_profiles.push_back(EndnodeReadOnly<std::string>( - "program_settings/tube_and_wing/cantilever/calculation_methods/wing_profile_and_thickness_distribution/" + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/wing_profile_and_thickness_distribution/" "parameters/mode_0/wing_profile_and_thickness@" + id + "/wing_profile")); user_thickness_to_chord.push_back(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/wing_profile_and_thickness_distribution/" + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/wing_profile_and_thickness_distribution/" "parameters/mode_0/wing_profile_and_thickness@" + id + "/thickness_to_chord/ratio")); user_eta.push_back(EndnodeReadOnly<double>( - "program_settings/tube_and_wing/cantilever/calculation_methods/wing_profile_and_thickness_distribution/" + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/wing_profile_and_thickness_distribution/" "parameters/mode_0/wing_profile_and_thickness@" + id + "/thickness_to_chord/at_half_span")); user_wing_profiles[i].read(xml); @@ -182,7 +182,7 @@ void taw::cantilever::WingDesignConfig::read(const node& xml) { int to_count = 0; do { result = xml.find( - "program_settings/tube_and_wing/cantilever/calculation_methods/control_devices/" + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/control_devices/" "parameters/mode_0/control_device@" + std::to_string(to_count)); to_count++; @@ -190,7 +190,7 @@ void taw::cantilever::WingDesignConfig::read(const node& xml) { to_count--; for (int i = 0; i < to_count; ++i) { user_defined_control_devices.push_back( - ControlDevice("program_settings/tube_and_wing/cantilever/calculation_methods/control_devices/" + ControlDevice("program_settings/tube_and_wing/cantilever_backward/calculation_methods/control_devices/" "parameters/mode_0/control_device@" + std::to_string(i) + "/")); user_defined_control_devices.back().read(xml); @@ -202,7 +202,7 @@ void taw::cantilever::WingDesignConfig::read(const node& xml) { int to_count = 0; do { result = xml.find( - "program_settings/tube_and_wing/cantilever/calculation_methods/spars/" + "program_settings/tube_and_wing/cantilever_backward/calculation_methods/spars/" "parameters/mode_0/spar@" + std::to_string(to_count)); to_count++; @@ -210,7 +210,7 @@ void taw::cantilever::WingDesignConfig::read(const node& xml) { to_count--; for (int i = 0; i < to_count; ++i) { user_defined_spars.push_back( - Spar("program_settings/tube_and_wing/cantilever/calculation_methods/spars/" + Spar("program_settings/tube_and_wing/cantilever_backward/calculation_methods/spars/" "parameters/mode_0/spar@" + std::to_string(i) + "/")); user_defined_spars.back().read(xml); diff --git a/wing_design/src/taw/tawWingDesignConfig.h b/wing_design/src/taw/tawWingDesignConfig.h index b34bcc5160001ae2986492ba2b284232642cc1e1..d7ca50ed31ca31aa9ca433f6c23f12d61dfa4bf2 100644 --- a/wing_design/src/taw/tawWingDesignConfig.h +++ b/wing_design/src/taw/tawWingDesignConfig.h @@ -32,7 +32,7 @@ #include "lib/io_methods/sparIO.h" namespace taw { -namespace cantilever { +namespace cantilever_backward { #include <aixml/endnode.h> @@ -67,8 +67,8 @@ class WingDesignConfig { /* Data for method - dihedral calculation*/ EndnodeReadOnly<std::string> dihedral_calculation_mode; - EndnodeReadOnly<std::string> dihedral_limitation_mode; EndnodeReadOnly<double> user_dihedral; + EndnodeReadOnly<double> raymer_range_value; EndnodeReadOnly<std::string> relative_kink_position_calculation_mode; EndnodeReadOnly<double> user_relative_kink; diff --git a/wing_design/src/taw/tawWingDesignData.cpp b/wing_design/src/taw/tawWingDesignData.cpp index d3e667a065e6e3b1d2e1bf9788d8b38208c54baa..90f37ea2b370d32073d9d92803a25bae05a7fbea 100644 --- a/wing_design/src/taw/tawWingDesignData.cpp +++ b/wing_design/src/taw/tawWingDesignData.cpp @@ -24,7 +24,7 @@ #include <aircraftGeometry2/fuselage.h> #include <aircraftGeometry2/io/convert.h> -taw::cantilever::WingDesignData::WingDesignData() +taw::cantilever_backward::WingDesignData::WingDesignData() : specification_icao_aerodrome_reference_code( EndnodeReadOnly<std::string>("requirements_and_specifications/requirements/top_level_aircraft_requirements/" "icao_aerodrome_reference_code")), @@ -48,7 +48,7 @@ taw::cantilever::WingDesignData::WingDesignData() wing_mass_properties(MassPropertiesIO("component_design/wing", "wing")), wing_position(PositionIO("component_design/wing/position", "wing")) {} -void taw::cantilever::WingDesignData::read(const node& xml) { +void taw::cantilever_backward::WingDesignData::read(const node& xml) { specification_icao_aerodrome_reference_code.read(xml); specification_wing_mounting.read(xml); specification_landing_gear_mounting.read(xml); @@ -61,7 +61,7 @@ void taw::cantilever::WingDesignData::read(const node& xml) { read_wing_mounted_engine_information(xml); } -void taw::cantilever::WingDesignData::read_wing_mounted_engine_information(const node& xml) { +void taw::cantilever_backward::WingDesignData::read_wing_mounted_engine_information(const node& xml) { auto propulsors_reqs = xml.getVector("aircraft_exchange_file/requirements_and_specifications/design_specification/propulsion/propulsor",1); std::vector<int> wing_mounted_engine_ids; @@ -104,7 +104,7 @@ void taw::cantilever::WingDesignData::read_wing_mounted_engine_information(const } -void taw::cantilever::WingDesignData::read_fuselage(std::filesystem::path path, +void taw::cantilever_backward::WingDesignData::read_fuselage(std::filesystem::path path, std::filesystem::path geometry_data_dir) { std::shared_ptr<node> acxml = aixml::openDocument(path); geom2::FuselageFactory fuselage_factory{acxml, geometry_data_dir}; @@ -112,7 +112,7 @@ void taw::cantilever::WingDesignData::read_fuselage(std::filesystem::path path, fuselage = fuselage_factory.create("fuselage/specific/geometry/fuselage@0"); } -void taw::cantilever::WingDesignData::update_wing(node& xml) { +void taw::cantilever_backward::WingDesignData::update_wing(node& xml) { geom2::io::SurfaceType io = geom2::io::Wing(wing); const std::string path_to_geometry = "component_design/wing/specific/geometry"; std::visit(geom2::io::AixmlConverter(xml[path_to_geometry], @@ -120,7 +120,7 @@ void taw::cantilever::WingDesignData::update_wing(node& xml) { io); } -void taw::cantilever::WingDesignData::update_spars(node& xml) { +void taw::cantilever_backward::WingDesignData::update_spars(node& xml) { for (size_t i = 0; i < spars.size(); ++i) { geom2::io::SurfaceType io_spar = geom2::io::Spar(spars[i]); const std::string path_to_spars = "component_design/wing/specific/geometry/aerodynamic_surface@0/parameters/spars"; @@ -131,7 +131,7 @@ void taw::cantilever::WingDesignData::update_spars(node& xml) { } } -void taw::cantilever::WingDesignData::update_control_devices(node& xml) { +void taw::cantilever_backward::WingDesignData::update_control_devices(node& xml) { for (size_t i = 0; i < control_devices.size(); ++i) { geom2::io::SurfaceType io_control_device = geom2::io::ControlDevice(control_devices[i]); const std::string path_to_control_devices = "component_design/wing/specific/geometry/aerodynamic_surface@0/parameters/control_devices"; @@ -152,7 +152,7 @@ void taw::cantilever::WingDesignData::update_control_devices(node& xml) { } } -void taw::cantilever::WingDesignData::update(node& xml) { +void taw::cantilever_backward::WingDesignData::update(node& xml) { auto tmp = xml.find("component_design/wing"); if (tmp != nullptr) { tmp->deleteChildren(); diff --git a/wing_design/src/taw/tawWingDesignData.h b/wing_design/src/taw/tawWingDesignData.h index 44d059e8dcb392cc21a24c605153ccb4d7ed544e..26fa6af747b2d7276dfc9eb5a66a49242a9dfa47 100644 --- a/wing_design/src/taw/tawWingDesignData.h +++ b/wing_design/src/taw/tawWingDesignData.h @@ -31,7 +31,7 @@ #include "lib/io_methods/massPropertiesIO.h" #include "lib/io_methods/positionIO.h" namespace taw { -namespace cantilever { +namespace cantilever_backward { class WingDesignData { public: WingDesignData(); diff --git a/wing_design/src/wingDesign.cpp b/wing_design/src/wingDesign.cpp index 16b197fcd3d2ae59ac67022c2e42dd1f47cd3f75..4a9836354b5f47f3aa5167f3bc96f5cfe1240945 100644 --- a/wing_design/src/wingDesign.cpp +++ b/wing_design/src/wingDesign.cpp @@ -34,15 +34,15 @@ WingDesign::WingDesign(const int argc, char *argv[], const std::string &toolName, const std::string &toolVersion) : Module(argc, argv, toolName, toolVersion) { std::string configuration = rtIO_->aircraft_configuration_type(); - std::string wing_type = "cantilever"; - + std::string wing_type_mode = EndnodeReadOnly<std::string>("program_settings/" + configuration + "/wing_configuration").read(rtIO_->moduleConfig).value(); + /* Register existing strategies */ /* tube and wing strategies */ - strategy.registerStrategy<taw::cantilever::Wing>({"tube_and_wing", "cantilever"}); + strategy.registerStrategy<taw::cantilever_backward::Wing>({"tube_and_wing", "mode_0"}); /* blended wing body strategies */ - strategy.registerStrategy<bwb::low::Wing>({"blended_wing_body", "cantilever"}); - + strategy.registerStrategy<bwb::low::Wing>({"blended_wing_body", "mode_0"}); + /* Set desired strategy */ - strategy.setStrategy({configuration, wing_type}, rtIO_); + strategy.setStrategy({configuration, wing_type_mode}, rtIO_); } diff --git a/wing_design/wing_design_conf.xml b/wing_design/wing_design_conf.xml index e744617754bc1b1090a49cf074fce3c78304f209..a7912967233496a36ff2275b7d7e45f7fdd83eec 100644 --- a/wing_design/wing_design_conf.xml +++ b/wing_design/wing_design_conf.xml @@ -53,10 +53,10 @@ </design_mode> </modes> <tube_and_wing description="settings for tube and wing (TAW)"> - <wing_configuration description="selector mode_0: cantilever"> + <wing_configuration description="selector mode_0: cantilever_backward"> <value>mode_0</value> </wing_configuration> - <cantilever description="cantilever design information"> + <cantilever_backward description="cantilever design information"> <calculation_methods description="calculation methods for specific parameter"> <wing_area description="wing area calculation method"> <method description="selector mode_0: user_defined, mode_1: by_loading_and_mtom"> @@ -80,9 +80,9 @@ <parameters description="sweep method parameters"> <mode_0 description="user_defined"> <sweep_angle description="sweep angle at quarter chord"> - <value>27</value> + <value>25</value> <unit>deg</unit> - <lower_boundary>-60</lower_boundary> + <lower_boundary>0</lower_boundary> <upper_boundary>60</upper_boundary> </sweep_angle> </mode_0> @@ -131,9 +131,12 @@ </dihedral_angle> </mode_0> <mode_1 description="by_wing_position_and_quarter_chord_sweep"> - <dihedral_limitation description="selector mode_0: raymer, mode_1: howe"> - <value>mode_0</value> - </dihedral_limitation> + <raymer_range_value description="linear interpolation from lowest to highest dihedral value according to raymer limits"> + <value>0.25</value> + <unit>1</unit> + <lower_boundary>0.0</lower_boundary> + <upper_boundary>1.0</upper_boundary> + </raymer_range_value> </mode_1> </parameters> </dihedral> @@ -147,7 +150,7 @@ <value>10.3</value> <unit>1</unit> <lower_boundary>6</lower_boundary> - <upper_boundary>15</upper_boundary> + <upper_boundary>20</upper_boundary> </aspect_ratio> </mode_0> </parameters> @@ -167,8 +170,8 @@ <maximum_inner_trailing_edge_sweep description="maximum inner trailing edge sweep - sets maximum possible inner trailing edge sweep"> <value>3.0</value> <unit>deg</unit> - <lower_boundary>0.0</lower_boundary> - <upper_boundary>20.0</upper_boundary> + <lower_boundary>-30.0</lower_boundary> + <upper_boundary>30.0</upper_boundary> </maximum_inner_trailing_edge_sweep> </mode_0> <mode_1> @@ -722,7 +725,7 @@ </parameters> </spars> </calculation_methods> - </cantilever> + </cantilever_backward> </tube_and_wing> <blended_wing_body> <fidelity_selection description="selection of fidelity level">