From 52b37c134b85150f1e3fd5e2536428092c968d68 Mon Sep 17 00:00:00 2001 From: BA Kayra <kayra.yazici@rwth-aachen.de> Date: Wed, 19 Mar 2025 14:36:34 +0100 Subject: [PATCH] front names except design cpp --- .../src/tandem/tandemCalculatePolar.cpp | 12 + .../src/tandem/tandemCalculatePolar.h | 2 + .../src/tandem/tandemCalculatePolarConfig.cpp | 3 + .../src/tandem/tandemDefaultStrategy.cpp | 4 +- .../cantilever/cantileverTandemWingDesign.cpp | 254 +++++++++--------- .../cantilever/cantileverTandemWingDesign.h | 22 +- .../cantileverTandemWingDesignPlot.cpp | 36 +-- .../cantileverTandemWingDesignReport.cpp | 142 +++++----- .../src/tandem/tandemWingDesignConfig.cpp | 132 ++++----- .../src/tandem/tandemWingDesignConfig.h | 70 ++--- .../src/tandem/tandemWingDesignData.cpp | 34 +-- wing_design/src/tandem/tandemWingDesignData.h | 22 +- 12 files changed, 375 insertions(+), 358 deletions(-) diff --git a/aerodynamic_analysis/src/tandem/tandemCalculatePolar.cpp b/aerodynamic_analysis/src/tandem/tandemCalculatePolar.cpp index 3b383cfb..cac1f282 100644 --- a/aerodynamic_analysis/src/tandem/tandemCalculatePolar.cpp +++ b/aerodynamic_analysis/src/tandem/tandemCalculatePolar.cpp @@ -80,6 +80,18 @@ void tandemCalculatePolar::report() { myDefaultStrategy->writePolarData(); myRuntimeInfo->out << "Calculate Polar for tandem: Report..." << endl; myDefaultStrategy->writeViscDragData(); + /* myRuntimeInfo->out << "Calculate Polar for TAW: Report..." << endl; + if (rtIO_->plotOn) { + myRuntimeInfo->out << " - Calculate Polar for TAW: Write Polar Data..." << endl; + myDefaultStrategy->writePolarData(); + myDefaultStrategy->writeViscDragData(); + } + if (rtIO_->reportOn) { + myRuntimeInfo->out << " - Calculate Polar for TAW: Create HTML Report Body ..." << endl; + set_html_body(); + } + report_.generateReports();*/ //TODO kayra: new versions + } void tandemCalculatePolar::save() { diff --git a/aerodynamic_analysis/src/tandem/tandemCalculatePolar.h b/aerodynamic_analysis/src/tandem/tandemCalculatePolar.h index 9f80cc31..ba27b99f 100644 --- a/aerodynamic_analysis/src/tandem/tandemCalculatePolar.h +++ b/aerodynamic_analysis/src/tandem/tandemCalculatePolar.h @@ -43,6 +43,8 @@ class tandemCalculatePolar : public Strategy { void save(); void selectAeroStrategy(); + //void set_html_body(); TODO kayra:new versions + private: std::shared_ptr<RuntimeIO> rtIO_; /*<-- RuntimeIO object*/ std::shared_ptr<tandemCalculatePolarConfig> config_; diff --git a/aerodynamic_analysis/src/tandem/tandemCalculatePolarConfig.cpp b/aerodynamic_analysis/src/tandem/tandemCalculatePolarConfig.cpp index 8b0f7798..b64f1d82 100644 --- a/aerodynamic_analysis/src/tandem/tandemCalculatePolarConfig.cpp +++ b/aerodynamic_analysis/src/tandem/tandemCalculatePolarConfig.cpp @@ -26,6 +26,9 @@ #include <string> #include <vector> #include <utility> // make_pair +#include <iostream> //TODO kayra:new versions +#include <sstream> //TODO kayra:new versions + #ifdef _WIN32 #include <fileapi.h> diff --git a/aerodynamic_analysis/src/tandem/tandemDefaultStrategy.cpp b/aerodynamic_analysis/src/tandem/tandemDefaultStrategy.cpp index 01cb5fdc..f1ea09e4 100644 --- a/aerodynamic_analysis/src/tandem/tandemDefaultStrategy.cpp +++ b/aerodynamic_analysis/src/tandem/tandemDefaultStrategy.cpp @@ -119,10 +119,12 @@ void tandemDefaultStrategy::createAircraftGeometry(const double backWingAngle) { // back wing geom2::MultisectionSurface<geom2::AirfoilSection> backWing = wingFactory.create("wing/specific/geometry/aerodynamic_surface@1"); backWing.origin += offset; - for (auto& section : backWing.sections) { + for (auto& section : backWing.sections) { //TODO kayra: 0 section da dönsün mü? double designBackWingAngle = section.get_twist_angle(); section.set_twist_angle(designBackWingAngle + convertUnit(DEGREE, RADIAN, backWingAngle)); } + myRuntimeInfo->out<< "back wing twist and back wing angle in [deg]!" << convertUnit(RADIAN, DEGREE, backWing.sections.back().get_twist_angle()) << endl; //TODO kayra:aux yanlis sanirim + /* double designBackWingAngle = backWing.sections.front().get_twist_angle(); //TODO Kayra: ausprobierern mit stl für backwing //TODO kayra:denemek icin bu eskisi backWing.sections.front().set_twist_angle(designBackWingAngle + convertUnit(DEGREE, RADIAN, backWingAngle)); */ liftingSurfaces.push_back(backWing); diff --git a/wing_design/src/tandem/cantilever/cantileverTandemWingDesign.cpp b/wing_design/src/tandem/cantilever/cantileverTandemWingDesign.cpp index b4ba039a..c9c3676f 100644 --- a/wing_design/src/tandem/cantilever/cantileverTandemWingDesign.cpp +++ b/wing_design/src/tandem/cantilever/cantileverTandemWingDesign.cpp @@ -107,7 +107,7 @@ void Wing::report() { /* Generate reports */ reporter.generateReports(); /* Generate wing stl */ - geom2::Mesh front_wing_mesh = geom2::transform::to_mesh(data->wing); + geom2::Mesh front_wing_mesh = geom2::transform::to_mesh(data->front_wing); CGAL::IO::write_STL("front_wing_left.stl", front_wing_mesh); geom2::Mesh back_wing_mesh = geom2::transform::to_mesh(data->back_wing); CGAL::IO::write_STL("back_wing_left.stl", back_wing_mesh); @@ -139,11 +139,11 @@ void Wing::standard_design() { } /* check seperately if wings are kinked */ - bool is_wing_kinked = is_wing_kinked_check(); + bool is_wing_kinked = is_front_wing_kinked_check(); bool is_back_wing_kinked = is_back_wing_kinked_check(); /* get maximum thickness to chord ratios of wings */ - double max_thickness_to_chord_ratio = get_max_thickness_to_chord_ratio(); + double max_thickness_to_chord_ratio = get_front_max_thickness_to_chord_ratio(); myRuntimeInfo->out << "max_thickness_to_chord_ratio for front wing: " << max_thickness_to_chord_ratio << std::endl; double back_max_thickness_to_chord_ratio = get_back_max_thickness_to_chord_ratio(); myRuntimeInfo->out << "back_max_thickness_to_chord_ratio for back wing: " << back_max_thickness_to_chord_ratio << std::endl; @@ -175,10 +175,10 @@ void Wing::standard_design() { // Compute front wing quarter chord based on selected mode myRuntimeInfo->out << "1/4 sweep of front Wing: " << std::endl; const double installed_quarter_chord_sweep = get_wing_quarter_chord_sweep( - config->sweep_calculation_mode.value(), config->user_sweep_angle_at_quarter_chord.value(), + config->sweep_calculation_mode.value(), config->user_front_sweep_angle_at_quarter_chord.value(), data->specification_design_mach.value(), data->sizing_point_wing_loading.value(), data->specification_design_altitude.value(), max_thickness_to_chord_ratio, - config->delta_drag_divergence_to_mach_design.value(), config->korn_technology_factor.value()); + config->front_delta_drag_divergence_to_mach_design.value(), config->front_korn_technology_factor.value()); myRuntimeInfo->out << "1/4 sweep of rear Wing: " << std::endl; // Compute back wing quarter chord based on selected mode @@ -199,7 +199,7 @@ void Wing::standard_design() { /* Compute aspect ratios based on selected modes*/ myRuntimeInfo->out <<"initial AR_1 of front wing: "<< std::endl; double aspect_ratio = get_design_aspect_ratio(config->aspect_ratio_calculation_mode.value(), - config->user_aspect_ratio.value(), installed_quarter_chord_sweep); + config->user_front_aspect_ratio.value(), installed_quarter_chord_sweep); myRuntimeInfo->out <<"initial AR_2 of back wing: "<< std::endl; double back_aspect_ratio = get_design_aspect_ratio(config->aspect_ratio_calculation_mode.value(), @@ -272,7 +272,7 @@ void Wing::standard_design() { // Compute taper ratios based on selected modes myRuntimeInfo->out <<"Taper Ratio of forward wing: "<< std::endl; const double installed_taper_ratio = - get_design_taper_ratio(config->taper_ratio_calculation_mode.value(), config->user_taper_ratio.value(), + get_design_taper_ratio(config->taper_ratio_calculation_mode.value(), config->user_front_taper_ratio.value(), installed_aspect_ratio, installed_quarter_chord_sweep); myRuntimeInfo->out <<"Taper Ratio of rear wing: "<< std::endl; const double installed_back_taper_ratio = @@ -286,47 +286,47 @@ void Wing::standard_design() { myRuntimeInfo->out << "Dihedral angle calculation mode: user-defined" << std::endl; - dihedral = config->user_dihedral.value(); + dihedral = config->user_front_dihedral.value(); back_dihedral = config->user_back_dihedral.value(); }else if(config->dihedral_calculation_mode.value() == "mode_1"){ myRuntimeInfo->out << "Dihedral angle calculation mode: Schiktanz dihedral excess method" << std::endl; double total_dihedral = get_total_dihedral(installed_quarter_chord_sweep , installed_back_quarter_chord_sweep); - if(total_dihedral < 0 && data->specification_wing_mounting.value() == "low" && (data->specification_back_wing_mounting.value() == "mid" || data->specification_back_wing_mounting.value() == "high")){ + if(total_dihedral < 0 && data->specification_front_wing_mounting.value() == "low" && (data->specification_back_wing_mounting.value() == "mid" || data->specification_back_wing_mounting.value() == "high")){ dihedral = total_dihedral; back_dihedral = 0; - }else if(total_dihedral < 0 && data->specification_wing_mounting.value() == "low" && data->specification_back_wing_mounting.value() == "low"){ + }else if(total_dihedral < 0 && data->specification_front_wing_mounting.value() == "low" && data->specification_back_wing_mounting.value() == "low"){ dihedral = 0; //better for high AOAs back_dihedral = total_dihedral; - }else if(total_dihedral < 0 && data->specification_wing_mounting.value() == "mid" && data->specification_back_wing_mounting.value() == "high"){ + }else if(total_dihedral < 0 && data->specification_front_wing_mounting.value() == "mid" && data->specification_back_wing_mounting.value() == "high"){ dihedral = total_dihedral; back_dihedral = 0; - }else if(total_dihedral < 0 && data->specification_wing_mounting.value() == "mid" && (data->specification_back_wing_mounting.value() == "mid" ||data->specification_back_wing_mounting.value() == "low")){ + }else if(total_dihedral < 0 && data->specification_front_wing_mounting.value() == "mid" && (data->specification_back_wing_mounting.value() == "mid" ||data->specification_back_wing_mounting.value() == "low")){ dihedral = 0; back_dihedral = total_dihedral; - }else if(total_dihedral < 0 && data->specification_wing_mounting.value() == "high" && (data->specification_back_wing_mounting.value() == "mid" || data->specification_back_wing_mounting.value() == "low")){ + }else if(total_dihedral < 0 && data->specification_front_wing_mounting.value() == "high" && (data->specification_back_wing_mounting.value() == "mid" || data->specification_back_wing_mounting.value() == "low")){ dihedral = 0; back_dihedral = total_dihedral; - }else if(total_dihedral < 0 && data->specification_wing_mounting.value() == "high" && data->specification_back_wing_mounting.value() == "high"){ + }else if(total_dihedral < 0 && data->specification_front_wing_mounting.value() == "high" && data->specification_back_wing_mounting.value() == "high"){ dihedral = 0; back_dihedral = total_dihedral; - }else if(total_dihedral > 0 && data->specification_wing_mounting.value() == "low" && (data->specification_back_wing_mounting.value() == "mid" || data->specification_back_wing_mounting.value() == "high")){ + }else if(total_dihedral > 0 && data->specification_front_wing_mounting.value() == "low" && (data->specification_back_wing_mounting.value() == "mid" || data->specification_back_wing_mounting.value() == "high")){ dihedral = 0; back_dihedral = total_dihedral; - }else if(total_dihedral > 0 && data->specification_wing_mounting.value() == "low" && data->specification_back_wing_mounting.value() == "low"){ + }else if(total_dihedral > 0 && data->specification_front_wing_mounting.value() == "low" && data->specification_back_wing_mounting.value() == "low"){ dihedral = total_dihedral; //better for high AOAs back_dihedral = 0; - }else if(total_dihedral > 0 && data->specification_wing_mounting.value() == "mid" && data->specification_back_wing_mounting.value() == "high"){ + }else if(total_dihedral > 0 && data->specification_front_wing_mounting.value() == "mid" && data->specification_back_wing_mounting.value() == "high"){ dihedral = 0; back_dihedral = total_dihedral; - }else if(total_dihedral > 0 && data->specification_wing_mounting.value() == "mid" && (data->specification_back_wing_mounting.value() == "mid" || data->specification_back_wing_mounting.value() == "low")){ + }else if(total_dihedral > 0 && data->specification_front_wing_mounting.value() == "mid" && (data->specification_back_wing_mounting.value() == "mid" || data->specification_back_wing_mounting.value() == "low")){ dihedral = total_dihedral; back_dihedral = 0; - }else if(total_dihedral > 0 && data->specification_wing_mounting.value() == "high" && (data->specification_back_wing_mounting.value() == "mid" || data->specification_back_wing_mounting.value() == "low")){ + }else if(total_dihedral > 0 && data->specification_front_wing_mounting.value() == "high" && (data->specification_back_wing_mounting.value() == "mid" || data->specification_back_wing_mounting.value() == "low")){ dihedral = total_dihedral; back_dihedral = 0; - }else if(total_dihedral > 0 && data->specification_wing_mounting.value() == "high" && data->specification_back_wing_mounting.value() == "high"){ + }else if(total_dihedral > 0 && data->specification_front_wing_mounting.value() == "high" && data->specification_back_wing_mounting.value() == "high"){ dihedral = total_dihedral; //better for high AOAs back_dihedral = 0; } @@ -342,12 +342,12 @@ void Wing::standard_design() { // Generate wings myRuntimeInfo->out <<"FORWARD WING PROFILE: "<< std::endl; if (is_wing_kinked) { - data->wing = - calculate_kinked_wing_geometry(installed_taper_ratio, installed_aspect_ratio, installed_quarter_chord_sweep, + data->front_wing = + calculate_kinked_front_wing_geometry(installed_taper_ratio, installed_aspect_ratio, installed_quarter_chord_sweep, installed_dihedral, installed_front_wing_area, installed_span); } else { - data->wing = - calculate_unkinked_wing_geometry(installed_taper_ratio, installed_aspect_ratio, installed_quarter_chord_sweep, + data->front_wing = + calculate_unkinked_front_wing_geometry(installed_taper_ratio, installed_aspect_ratio, installed_quarter_chord_sweep, installed_dihedral, installed_front_wing_area, installed_span); } myRuntimeInfo->out <<"REAR WING PROFILE: "<< std::endl; @@ -362,10 +362,10 @@ void Wing::standard_design() { } // Set wing names to constant names - data->wing.name = "FRONT WING"; + data->front_wing.name = "FRONT WING"; data->back_wing.name ="BACK WING"; - data->wing_position.set_xyz(calculate_wing_position()); + data->wing_position.set_xyz(calculate_front_wing_position()); myRuntimeInfo->out << "front wing position" << " X:" <<data->wing_position.x.value()<<" Y:"<<data->wing_position.y.value()<<" Z:"<<data->wing_position.z.value()<< std::endl; @@ -375,7 +375,7 @@ void Wing::standard_design() { // Set spar devices - data->spars = get_spars(config->spars_mode.value(), config->user_defined_spars); + data->front_spars = get_spars(config->front_spars_mode.value(), config->user_defined_front_spars); data->back_spars = get_spars(config->back_spars_mode.value(), config->user_defined_back_spars); // Set control devices @@ -383,10 +383,10 @@ void Wing::standard_design() { double eta_kink = 0.; double back_eta_kink = 0.; - if (is_wing_kinked_check()) { + if (is_front_wing_kinked_check()) { eta_kink = get_design_relative_kink_position( - config->relative_kink_position_calculation_mode.value(), config->user_relative_kink.value(), - config->track_based_initial_relative_kink.value(), data->track_based_relative_kink.value()); + config->front_relative_kink_position_calculation_mode.value(), config->user_front_relative_kink.value(), + config->track_based_front_initial_relative_kink.value(), data->track_based_front_relative_kink.value()); } if (is_back_wing_kinked_check()) { back_eta_kink = get_design_relative_kink_position( @@ -394,26 +394,26 @@ void Wing::standard_design() { config->track_based_back_initial_relative_kink.value(), data->track_based_back_relative_kink.value()); } - auto [devices, deflections] = get_control_devices(config->control_device_mode.value(), config->user_defined_control_devices, - data->spars, data->wing, data->fuselage, is_wing_kinked_check(), eta_kink, - config->high_lift_device_type_leading_edge.value(), - config->high_lift_device_type_trailing_edge.value()); + auto [devices, deflections] = get_control_devices(config->front_control_device_mode.value(), config->user_defined_front_control_devices, + data->front_spars, data->front_wing, data->fuselage, is_front_wing_kinked_check(), eta_kink, + config->front_high_lift_device_type_leading_edge.value(), + config->front_high_lift_device_type_trailing_edge.value()); auto [back_devices, back_deflections] = get_control_devices(config->back_control_device_mode.value(), config->user_defined_back_control_devices, data->back_spars, data->back_wing, data->fuselage, is_back_wing_kinked_check(), back_eta_kink, config->back_high_lift_device_type_leading_edge.value(), config->back_high_lift_device_type_trailing_edge.value()); - data->control_devices = devices; - data->control_devices_deflections = deflections; + data->front_control_devices = devices; + data->front_control_devices_deflections = deflections; data->back_control_devices = back_devices; data->back_control_devices_deflections = back_deflections; /* Check control device boundaries - if inside fuselage */ //TODO kayra: max fus width is considered to keep control devices distant from fuselage flow and keep effectiveness - if ((config->control_device_mode.value() == "mode_0") && + if ((config->front_control_device_mode.value() == "mode_0") && (rtIO->aircraft_configuration_type() == "tandem")) { - double eta_fuselage_max = geom2::measure::width_max(data->fuselage) / geom2::measure::span(data->wing); - for (auto& device : data->control_devices) { + double eta_fuselage_max = geom2::measure::width_max(data->fuselage) / geom2::measure::span(data->front_wing); + for (auto& device : data->front_control_devices) { size_t sec_id = 0; for (auto& section : device.sections) { if (section.origin.z() < eta_fuselage_max * 1.1) { @@ -446,11 +446,11 @@ void Wing::standard_design() { } } -bool Wing::is_wing_kinked_check() { +bool Wing::is_front_wing_kinked_check() { myRuntimeInfo->out << "Front Wing kink check ..." << std::endl; /* Check if front wing mounting is low & landing gear mounted on front wing */ - if (data->specification_wing_mounting.value()== "low" && + if (data->specification_front_wing_mounting.value()== "low" && data->specification_landing_gear_mounting.value() == "wing_mounted") { myRuntimeInfo->out << "Front Wing is kinked ... [TRUE]" << std::endl; return true; @@ -474,18 +474,18 @@ bool Wing::is_back_wing_kinked_check() { } } -double Wing::get_max_thickness_to_chord_ratio() { +double Wing::get_front_max_thickness_to_chord_ratio() { // Get maximum thickness to chord ratio based on wing profile and thickness mode // If user - get maximum thickness from elements // Else use max_thickness to chord ratio from sweep calculation method - if (config->wing_profile_and_thickness_calculation_mode.value() == "mode_0") { + if (config->front_wing_profile_and_thickness_calculation_mode.value() == "mode_0") { std::vector<double> to_check; - for (auto item : config->user_thickness_to_chord) { + for (auto item : config->user_front_thickness_to_chord) { to_check.push_back(item.value()); } return *std::max_element(to_check.begin(), to_check.end()); } else { - return config->max_thickness_to_chord_ratio.value(); + return config->front_max_thickness_to_chord_ratio.value(); } } @@ -517,11 +517,11 @@ double Wing::get_total_dihedral(const double quarter_chord_sweep , const double double dih_swp_2; double total_dihedral_deg; - if(data->specification_wing_mounting.value()== "low"){ + if(data->specification_front_wing_mounting.value()== "low"){ dih_pos_1 = -5; - } else if(data->specification_wing_mounting.value()== "mid") { + } else if(data->specification_front_wing_mounting.value()== "mid") { dih_pos_1 = -1.5; - } else if(data->specification_wing_mounting.value()== "high") { + } else if(data->specification_front_wing_mounting.value()== "high") { dih_pos_1 = 2; } @@ -546,7 +546,7 @@ double Wing::get_total_dihedral(const double quarter_chord_sweep , const double } -geom2::Point_3 Wing::calculate_wing_position() { +geom2::Point_3 Wing::calculate_front_wing_position() { std::tuple<double, double> z_limits; @@ -561,12 +561,12 @@ geom2::Point_3 Wing::calculate_wing_position() { double keel_beam_height = 0.005 * fuselage_height; // Assumed 0.5% of fuselage height /* Define wing position limits */ - if (data->specification_wing_mounting.value() == "low") { + if (data->specification_front_wing_mounting.value() == "low") { /* Limit to lower fuselage half*/ fuselage_lower_z = data->fuselage.origin.z() - fuselage_height * 0.5; keel_beam_height = 0.005 * (fuselage_upper_z - fuselage_lower_z); z_limits = {fuselage_lower_z + keel_beam_height, fuselage_upper_z}; - } else if (data->specification_wing_mounting.value() == "high") { + } else if (data->specification_front_wing_mounting.value() == "high") { /* Limit to upper fuselage half*/ fuselage_upper_z += fuselage_height * 0.5; keel_beam_height = 0.005 * (fuselage_upper_z - fuselage_lower_z); @@ -579,9 +579,9 @@ geom2::Point_3 Wing::calculate_wing_position() { auto const [lim_low, lim_up] = z_limits; double z_position; - if (data->specification_wing_mounting.value() == "low") { + if (data->specification_front_wing_mounting.value() == "low") { z_position = lim_low + 0.4 * (lim_up - lim_low); - } else if (data->specification_wing_mounting.value() == "high") { + } else if (data->specification_front_wing_mounting.value() == "high") { z_position = lim_low + 0.8 * (lim_up - lim_low); } else { z_position = lim_low + 0.5 * (lim_up - lim_low); @@ -635,15 +635,15 @@ geom2::Point_3 Wing::calculate_back_wing_position() { } -geom2::MultisectionSurface<geom2::AirfoilSection> Wing::calculate_kinked_wing_geometry( +geom2::MultisectionSurface<geom2::AirfoilSection> Wing::calculate_kinked_front_wing_geometry( const double taper_ratio, const double aspect_ratio, const double quarter_chord_sweep, const double dihedral, const double wing_area, const double span) { double maximum_inner_trailing_edge_sweep = get_design_maximum_inner_trailing_edge_sweep( - config->relative_kink_position_calculation_mode.value(), - config->user_max_inner_trailing_edge_sweep.value(), // old converted to radians - config->track_based_max_inner_trailing_edge_sweep.value()); // old converted to radians + config->front_relative_kink_position_calculation_mode.value(), + config->user_front_max_inner_trailing_edge_sweep.value(), // old converted to radians + config->track_based_front_max_inner_trailing_edge_sweep.value()); // old converted to radians - const double max_thickness_to_chord_ratio = get_max_thickness_to_chord_ratio(); + const double max_thickness_to_chord_ratio = get_front_max_thickness_to_chord_ratio(); // Get normalized half span values - eta const double half_span = 0.5 * span; @@ -656,17 +656,17 @@ geom2::MultisectionSurface<geom2::AirfoilSection> Wing::calculate_kinked_wing_ge std::vector<double> eta_values = {eta_centerline, eta_fuselage, eta_tip}; double eta_kink = get_design_relative_kink_position( - config->relative_kink_position_calculation_mode.value(), config->user_relative_kink.value(), - config->track_based_initial_relative_kink.value(), data->track_based_relative_kink.value()); + config->front_relative_kink_position_calculation_mode.value(), config->user_front_relative_kink.value(), + config->track_based_front_initial_relative_kink.value(), data->track_based_front_relative_kink.value()); eta_values.push_back(eta_kink); std::vector<std::tuple<double, double, std::string>> wing_profile_and_thickness_vector = - get_wing_profile_and_thickness(config->wing_profile_and_thickness_calculation_mode.value(), - config->user_wing_profiles_and_thickness_vector, - config->torenbeek_jenkinson_wing_profile.value(), max_thickness_to_chord_ratio, - config->airfoil_critical_factor.value(), data->specification_design_mach.value(), + get_wing_profile_and_thickness(config->front_wing_profile_and_thickness_calculation_mode.value(), + config->user_front_wing_profiles_and_thickness_vector, + config->front_torenbeek_jenkinson_wing_profile.value(), max_thickness_to_chord_ratio, + config->front_airfoil_critical_factor.value(), data->specification_design_mach.value(), data->specification_design_altitude.value(), quarter_chord_sweep, - config->delta_drag_divergence_to_mach_design.value(), + config->front_delta_drag_divergence_to_mach_design.value(), data->sizing_point_wing_loading.value(), eta_fuselage, eta_values); // Geometry computation functions @@ -947,10 +947,10 @@ geom2::MultisectionSurface<geom2::AirfoilSection> Wing::calculate_kinked_back_wi } -geom2::MultisectionSurface<geom2::AirfoilSection> Wing::calculate_unkinked_wing_geometry( +geom2::MultisectionSurface<geom2::AirfoilSection> Wing::calculate_unkinked_front_wing_geometry( const double taper_ratio, const double aspect_ratio, const double quarter_chord_sweep, const double dihedral, const double wing_area, const double span) { - const double max_thickness_to_chord_ratio = get_max_thickness_to_chord_ratio(); + const double max_thickness_to_chord_ratio = get_front_max_thickness_to_chord_ratio(); // Get normalized half span values - eta const double half_span = 0.5 * span; @@ -962,12 +962,12 @@ geom2::MultisectionSurface<geom2::AirfoilSection> Wing::calculate_unkinked_wing_ std::vector<double> eta_values = {eta_centerline, eta_fuselage, eta_tip}; std::vector<std::tuple<double, double, std::string>> wing_profile_and_thickness_vector = - get_wing_profile_and_thickness(config->wing_profile_and_thickness_calculation_mode.value(), - config->user_wing_profiles_and_thickness_vector, - config->torenbeek_jenkinson_wing_profile.value(), max_thickness_to_chord_ratio, - config->airfoil_critical_factor.value(), data->specification_design_mach.value(), + get_wing_profile_and_thickness(config->front_wing_profile_and_thickness_calculation_mode.value(), + config->user_front_wing_profiles_and_thickness_vector, + config->front_torenbeek_jenkinson_wing_profile.value(), max_thickness_to_chord_ratio, + config->front_airfoil_critical_factor.value(), data->specification_design_mach.value(), data->specification_design_altitude.value(), quarter_chord_sweep, - config->delta_drag_divergence_to_mach_design.value(), + config->front_delta_drag_divergence_to_mach_design.value(), data->sizing_point_wing_loading.value(), eta_fuselage, eta_values); // Geometry computation functions @@ -1102,14 +1102,14 @@ void Wing::flops_mass() { // Unit conversions and reference values for front and back wing const double to_foot = convertUnit(METER, FOOT, 1.0); const double to_meter = 1. / to_foot; - const double taper_ratio = geom2::measure::taper_ratio(data->wing); - const double span_ft = geom2::measure::span(data->wing) * to_foot; - const double wing_area_sqrft = geom2::measure::reference_area(data->wing) * to_foot * to_foot; - const double aspect_ratio = geom2::measure::aspect_ratio(data->wing); - const double t_to_c_root = get_max_thickness_to_chord_ratio(data->wing.sections.front()); - const double t_to_c_tip = get_max_thickness_to_chord_ratio(data->wing.sections.back()); + const double taper_ratio = geom2::measure::taper_ratio(data->front_wing); + const double span_ft = geom2::measure::span(data->front_wing) * to_foot; + const double wing_area_sqrft = geom2::measure::reference_area(data->front_wing) * to_foot * to_foot; + const double aspect_ratio = geom2::measure::aspect_ratio(data->front_wing); + const double t_to_c_root = get_max_thickness_to_chord_ratio(data->front_wing.sections.front()); + const double t_to_c_tip = get_max_thickness_to_chord_ratio(data->front_wing.sections.back()); const double quarter_chord_sweep = - geom2::measure::sweep(data->wing, 0.25 * span_ft * to_meter, 0.25); // measure at 50% half span -> 25% of span + geom2::measure::sweep(data->front_wing, 0.25 * span_ft * to_meter, 0.25); // measure at 50% half span -> 25% of span const double to_lb = convertUnit(KILO, GRAM, NOPREFIX, POUND, 1.0); const double to_kg = 1 / to_lb; @@ -1155,10 +1155,10 @@ void Wing::flops_mass() { double SLAM = TLAM / (sqrt(1 + TLAM * TLAM)); // Factor Eq. 15 of front wing - double C4 = 1.0 - 0.5 * config->flops_faert.value(); + double C4 = 1.0 - 0.5 * config->front_flops_faert.value(); // Factor Eq. 16 of front wing - double C6 = 0.5 * config->flops_faert.value() - 0.16 * config->flops_fstrt.value(); + double C6 = 0.5 * config->front_flops_faert.value() - 0.16 * config->front_flops_fstrt.value(); // Aspect ratio defined factor Eq. 17 of front wing double CAYA = aspect_ratio > 5. ? aspect_ratio - 5.0 : 0.; @@ -1166,7 +1166,7 @@ void Wing::flops_mass() { double CAYL = (1.0 - SLAM * SLAM) * (1.0 + C6 * SLAM * SLAM + 0.03 * CAYA * C4 * SLAM); // Wing strut bracing factor of front wing (for cantilever w/o wing strut) - double EMS = 1.0 - 0.25 * config->flops_fstrt.value(); + double EMS = 1.0 - 0.25 * config->front_flops_fstrt.value(); // Weighted average of the wing thickness to chord ratio of front wing (Jenkinson 1999 formulation) double TCA = 0.25 * (3. * t_to_c_tip + t_to_c_root); // wing equivalent bending material factor of front wing Dimension [-] @@ -1194,7 +1194,7 @@ void Wing::flops_mass() { // Wing bending material weight of front wing, not including the effects of inertia [lb] const double W1NIR = A1 * BT * (1.0 + sqrt(A2 / span_ft)) * ULF * span_ft * - (1.0 - 0.4 * config->flops_fcomp.value()) * (1.0 - 0.1 * config->flops_faert.value()) * CAYF * + (1.0 - 0.4 * config->front_flops_fcomp.value()) * (1.0 - 0.1 * config->front_flops_faert.value()) * CAYF * VFACT * PCTL / 1000000.0; // Total wing shear material and control surface weight of front wing @@ -1204,16 +1204,16 @@ void Wing::flops_mass() { // total movable wing surface area of front wing including flaps, elevators, spoilers etc [ft^2] - const double SFLAP = get_control_device_area_in_fraction_of_wing_area() * + const double SFLAP = get_front_control_device_area_in_fraction_of_front_wing_area() * wing_area_sqrft; // set to 20% of wing_area - testing only TODO - const double W2 = A3 * (1.0 - 0.17 * config->flops_fcomp.value()) * pow(SFLAP, A4) * pow(dg, A5); + const double W2 = A3 * (1.0 - 0.17 * config->front_flops_fcomp.value()) * pow(SFLAP, A4) * pow(dg, A5); // Total wing miscellaneous items weight of front wing const double A6 = 0.035; const double A7 = 1.50; - const double W3 = A6 * (1.0 - 0.3 * config->flops_fcomp.value()) * pow(wing_area_sqrft, A7); + const double W3 = A6 * (1.0 - 0.3 * config->front_flops_fcomp.value()) * pow(wing_area_sqrft, A7); // Wing bending material weight intertia relief adjustment of front wing const int NEW = data->specification_number_of_wing_mounted_engines; @@ -1225,12 +1225,12 @@ void Wing::flops_mass() { const double W4 = 0.0; // Total wing weight of front wing - const double wing_mass = config->flops_technology_factor.value() * (W1 + W2 + W3 + W4) * to_kg; + const double wing_mass = config->front_flops_technology_factor.value() * (W1 + W2 + W3 + W4) * to_kg; myRuntimeInfo->out << "Calculated front wing mass ... " << wing_mass << "[kg]" << std::endl; - myRuntimeInfo->out << "Wing bending material mass of front wing... " << config->flops_technology_factor.value() * W1 * to_kg << "[kg]" << std::endl; - myRuntimeInfo->out << "Wing shear material and control surface mass of front wing ... " << config->flops_technology_factor.value() * W2 * to_kg << "[kg]" << std::endl; - myRuntimeInfo->out << "Wing miscellaneous items mass of front wing ... " << config->flops_technology_factor.value() * W3 * to_kg << "[kg]" << std::endl; + myRuntimeInfo->out << "Wing bending material mass of front wing... " << config->front_flops_technology_factor.value() * W1 * to_kg << "[kg]" << std::endl; + myRuntimeInfo->out << "Wing shear material and control surface mass of front wing ... " << config->front_flops_technology_factor.value() * W2 * to_kg << "[kg]" << std::endl; + myRuntimeInfo->out << "Wing miscellaneous items mass of front wing ... " << config->front_flops_technology_factor.value() * W3 * to_kg << "[kg]" << std::endl; @@ -1337,16 +1337,16 @@ void Wing::flops_mass() { // Calculate wing center of gravity of front wing according to Howe 2005 page 252 myRuntimeInfo->out << "Calculate Center of Gravity of front wing ..." << std::endl; - const double half_span_mac_position = geom2::measure::mean_aerodynamic_chord_position(data->wing); - const double mean_chord = geom2::measure::reference_area(data->wing) / geom2::measure::span(data->wing); - const double mac = geom2::measure::chord(data->wing, half_span_mac_position); - const geom2::Point_3 leading_edge_point = geom2::measure::offset_LE(data->wing, half_span_mac_position); - const double CoG_x = data->wing_position.x.value() + leading_edge_point.x() + 0.25 * mac * cos(geom2::measure::twist(data->wing, half_span_mac_position)) + + const double half_span_mac_position = geom2::measure::mean_aerodynamic_chord_position(data->front_wing); + const double mean_chord = geom2::measure::reference_area(data->front_wing) / geom2::measure::span(data->front_wing); + const double mac = geom2::measure::chord(data->front_wing, half_span_mac_position); + const geom2::Point_3 leading_edge_point = geom2::measure::offset_LE(data->front_wing, half_span_mac_position); + const double CoG_x = data->wing_position.x.value() + leading_edge_point.x() + 0.25 * mac * cos(geom2::measure::twist(data->front_wing, half_span_mac_position)) + 0.1 * mean_chord; // Transform values into global coordinate system z-> -y z const double CoG_y = data->wing_position.y.value() + fabs(leading_edge_point.z()) - fabs(leading_edge_point.z()); - const double CoG_z = data->wing_position.z.value() + leading_edge_point.y() + 0.25 * mac * sin(geom2::measure::twist(data->wing, half_span_mac_position)); + const double CoG_z = data->wing_position.z.value() + leading_edge_point.y() + 0.25 * mac * sin(geom2::measure::twist(data->front_wing, half_span_mac_position)); myRuntimeInfo->out << "CG Position of front wing..." << std::endl; myRuntimeInfo->out << "x ... " << CoG_x << std::endl; @@ -1447,7 +1447,7 @@ void Wing::chiozzotto_wer_mass() { {"CFRP ASW", {15.3, 3.104, 0.909}}, {"CFRP USW", {13.6, 2.569, 0.910}}, {"CFRP FSW", {24.7, 2.117, 1.148}}}; - const double ref_area = geom2::measure::reference_area(data->wing); + const double ref_area = geom2::measure::reference_area(data->front_wing); const double back_ref_area = geom2::measure::reference_area(data->back_wing); const double area_portion = ref_area / (ref_area + back_ref_area); @@ -1466,9 +1466,9 @@ void Wing::chiozzotto_wer_mass() { atmosphere isa; const double mtom = data->mtom_mass_properties.data["mass"].value() * area_portion; //TODO kayra: lift generation and load carriage prop. to its area portion: first assumption - const double aspect_ratio = geom2::measure::aspect_ratio(data->wing); - const double taper_ratio = geom2::measure::taper_ratio(data->wing); - const double half_span = geom2::measure::span(data->wing) * 0.5; + const double aspect_ratio = geom2::measure::aspect_ratio(data->front_wing); + const double taper_ratio = geom2::measure::taper_ratio(data->front_wing); + const double half_span = geom2::measure::span(data->front_wing) * 0.5; const double speed_of_sound_at_zero = isa.getSpeedOfSoundISA(0.0); const double pressure_at_zero = isa.getPressureISA(0.0); const double pressure_at_design_altitude = isa.getPressureISA(data->specification_design_altitude.value()); @@ -1480,10 +1480,10 @@ void Wing::chiozzotto_wer_mass() { sqrt(pressure_at_design_altitude / pressure_at_zero); // No LRA sweep existent - use 1/4 chord sweep (deviation from chiozzotto P.112 -> referred to figure 5.3) - const double quarter_chord_sweep = -geom2::measure::sweep(data->wing, 0.5 * half_span, 0.25); + const double quarter_chord_sweep = -geom2::measure::sweep(data->front_wing, 0.5 * half_span, 0.25); // Get material selection - std::string material = config->chiozzotto_material.value() + " "; + std::string material = config->front_chiozzotto_material.value() + " "; if (quarter_chord_sweep > ACCURACY_LOW) { material += "ASW"; } else if (quarter_chord_sweep < -ACCURACY_LOW) { @@ -1494,32 +1494,32 @@ void Wing::chiozzotto_wer_mass() { myRuntimeInfo->out << "Wing material used for front wing ... " << material << std::endl; // Get design relative kink - - double t_to_c_kink = geom2::measure::thickness_max(data->wing.sections.front()) / geom2::measure::chord(data->wing, 0.0); //TODO kayra : initialized so that mass is calculated properly for an unkinked wing + double t_to_c_kink = geom2::measure::thickness_max(data->front_wing.sections.front()) / geom2::measure::chord(data->front_wing, 0.0); //TODO kayra : initialized so that mass is calculated properly for an unkinked wing double eta_kink = 0.0; - if (is_wing_kinked_check()) { + if (is_front_wing_kinked_check()) { eta_kink = get_design_relative_kink_position( - config->relative_kink_position_calculation_mode.value(), config->user_relative_kink.value(), - config->track_based_initial_relative_kink.value(), data->track_based_relative_kink.value()); + config->front_relative_kink_position_calculation_mode.value(), config->user_front_relative_kink.value(), + config->track_based_front_initial_relative_kink.value(), data->track_based_front_relative_kink.value()); } // Find thickness to chord ratio - const double chord_at_kink = geom2::measure::chord(data->wing, eta_kink * half_span); + const double chord_at_kink = geom2::measure::chord(data->front_wing, eta_kink * half_span); double eta_position_last = 0.; double max_thickness_last = 0.0; double eta_position_next = 0.; double max_thickness_next = 0.0; - for (size_t idx = 0; idx < data->wing.sections.size() - 1; ++idx) { - eta_position_last = fabs(data->wing.sections.at(idx).origin.z()) / half_span; - eta_position_next = fabs(data->wing.sections.at(idx + 1).origin.z()) / half_span; + for (size_t idx = 0; idx < data->front_wing.sections.size() - 1; ++idx) { + eta_position_last = fabs(data->front_wing.sections.at(idx).origin.z()) / half_span; + eta_position_next = fabs(data->front_wing.sections.at(idx + 1).origin.z()) / half_span; // If kink at a specified section if (fabs(eta_position_last - eta_kink) < ACCURACY_MEDIUM) { - t_to_c_kink = geom2::measure::thickness_max(data->wing.sections.at(idx)) / chord_at_kink; + t_to_c_kink = geom2::measure::thickness_max(data->front_wing.sections.at(idx)) / chord_at_kink; } else if (fabs(eta_position_next - eta_kink) < ACCURACY_MEDIUM) { - t_to_c_kink = geom2::measure::thickness_max(data->wing.sections.at(idx)) / chord_at_kink; + t_to_c_kink = geom2::measure::thickness_max(data->front_wing.sections.at(idx)) / chord_at_kink; } else if (eta_position_last > eta_kink && eta_position_next < eta_kink) { - double max_thickness_last = geom2::measure::thickness_max(data->wing.sections.at(idx)); - double max_thickness_next = geom2::measure::thickness_max(data->wing.sections.at(idx)); + double max_thickness_last = geom2::measure::thickness_max(data->front_wing.sections.at(idx)); + double max_thickness_next = geom2::measure::thickness_max(data->front_wing.sections.at(idx)); double dimensionless_position = (eta_kink - eta_position_last) / (eta_position_last - eta_position_next); t_to_c_kink = std::lerp(max_thickness_last, max_thickness_next, dimensionless_position) / chord_at_kink; } else { @@ -1564,7 +1564,7 @@ void Wing::chiozzotto_wer_mass() { k_e *= (1 - C_er * pow(engine_relative_spanwise_position, E_eta_er) * pow(engine_mass / mtom, E_K_er)); } // Secondary structure mass - double mass_secondary_structure = 0.0443 * mtom * config->chiozzotto_technology_factor.value(); + double mass_secondary_structure = 0.0443 * mtom * config->front_chiozzotto_technology_factor.value(); // Mass of covers const auto [C_cov, mtom_cov, w_to_s_cov, ar_cov, cos_lambda_cov, t_to_c_kink_cov, v_eas_design_cov, @@ -1572,7 +1572,7 @@ void Wing::chiozzotto_wer_mass() { double mass_covers = (k_e * C_cov * pow(mtom, mtom_cov) * pow(wing_loading, w_to_s_cov) * pow(aspect_ratio, ar_cov) * pow(cos(quarter_chord_sweep), cos_lambda_cov) * pow(t_to_c_kink, t_to_c_kink_cov) * pow(v_eas_design, v_eas_design_cov) * pow(1 + taper_ratio, one_plus_taper_cov)) * - config->chiozzotto_technology_factor.value(); + config->front_chiozzotto_technology_factor.value(); // Mass of spars and ribs const auto [C_sr, mtom_sr, w_to_s_sr, ar_sr, cos_lambda_sr, t_to_c_kink_sr, v_eas_design_sr, one_plus_taper_sr] = @@ -1580,7 +1580,7 @@ void Wing::chiozzotto_wer_mass() { double mass_spars_and_ribs = (C_sr * pow(mtom, mtom_sr) * pow(wing_loading, w_to_s_sr) * pow(aspect_ratio, ar_sr) * pow(cos(quarter_chord_sweep), cos_lambda_sr) * pow(t_to_c_kink, t_to_c_kink_sr) * pow(v_eas_design, v_eas_design_sr) * pow(1 + taper_ratio, one_plus_taper_sr)) * - config->chiozzotto_technology_factor.value(); + config->front_chiozzotto_technology_factor.value(); double wing_mass = mass_covers + mass_spars_and_ribs + mass_secondary_structure; @@ -1739,16 +1739,16 @@ void Wing::chiozzotto_wer_mass() { // Calculate wing center of gravity of front wing according to Howe 2005 page 252 myRuntimeInfo->out << "Calculate Center of Gravity of front wing ..." << std::endl; - const double half_span_mac_position = geom2::measure::mean_aerodynamic_chord_position(data->wing); - const double mean_chord = geom2::measure::reference_area(data->wing) / geom2::measure::span(data->wing); - const double mac = geom2::measure::chord(data->wing, half_span_mac_position); - const geom2::Point_3 leading_edge_point = geom2::measure::offset_LE(data->wing, half_span_mac_position); - const double CoG_x = data->wing_position.x.value() + leading_edge_point.x() + 0.25 * mac * cos(geom2::measure::twist(data->wing, half_span_mac_position)) + + const double half_span_mac_position = geom2::measure::mean_aerodynamic_chord_position(data->front_wing); + const double mean_chord = geom2::measure::reference_area(data->front_wing) / geom2::measure::span(data->front_wing); + const double mac = geom2::measure::chord(data->front_wing, half_span_mac_position); + const geom2::Point_3 leading_edge_point = geom2::measure::offset_LE(data->front_wing, half_span_mac_position); + const double CoG_x = data->wing_position.x.value() + leading_edge_point.x() + 0.25 * mac * cos(geom2::measure::twist(data->front_wing, half_span_mac_position)) + 0.1 * mean_chord; // Transform values into global coordinate system z-> -y z const double CoG_y = data->wing_position.y.value() + fabs(leading_edge_point.z()) - fabs(leading_edge_point.z()); - const double CoG_z = data->wing_position.z.value() + leading_edge_point.y() + 0.25 * mac * sin(geom2::measure::twist(data->wing, half_span_mac_position)); + const double CoG_z = data->wing_position.z.value() + leading_edge_point.y() + 0.25 * mac * sin(geom2::measure::twist(data->front_wing, half_span_mac_position)); myRuntimeInfo->out << "CG Position of front wing..." << std::endl; myRuntimeInfo->out << "x ... " << CoG_x << std::endl; @@ -1805,11 +1805,11 @@ bool Wing::chiozzotto_wer_check_limits(std::tuple<double, double>& min_max, doub } } -double Wing::get_control_device_area_in_fraction_of_wing_area() { +double Wing::get_front_control_device_area_in_fraction_of_front_wing_area() { double overall_control_device_area = 0.0; - double wing_area = geom2::measure::reference_area(data->wing); - for (auto& item : data->control_devices) { - auto cd = geom2::transform::to_absolute(item, data->wing); + double wing_area = geom2::measure::reference_area(data->front_wing); + for (auto& item : data->front_control_devices) { + auto cd = geom2::transform::to_absolute(item, data->front_wing); overall_control_device_area += geom2::measure::area(cd); } return overall_control_device_area / wing_area; diff --git a/wing_design/src/tandem/cantilever/cantileverTandemWingDesign.h b/wing_design/src/tandem/cantilever/cantileverTandemWingDesign.h index 45dd2bcb..5672168b 100644 --- a/wing_design/src/tandem/cantilever/cantileverTandemWingDesign.h +++ b/wing_design/src/tandem/cantilever/cantileverTandemWingDesign.h @@ -1,5 +1,5 @@ /** - * \file lowWingDesignTaw.h + * \file cantileverTandemWingDesign.h * \author Christopher Ruwisch (christopher.ruwisch@tu-berlin.de) * \brief * \version 0.1 @@ -94,7 +94,7 @@ class Wing : public Strategy { * \return true if kinked * \return false if not kinked */ - bool is_wing_kinked_check(); + bool is_front_wing_kinked_check(); /** * \brief Check if designed back wing is a kinked or not @@ -109,7 +109,7 @@ class Wing : public Strategy { * * \return double */ - double get_max_thickness_to_chord_ratio(); + double get_front_max_thickness_to_chord_ratio(); /** * \brief Get the max thickness to chord ratio value for back wing @@ -137,7 +137,7 @@ class Wing : public Strategy { * * \return double */ - double get_control_device_area_in_fraction_of_wing_area(); + double get_front_control_device_area_in_fraction_of_front_wing_area(); /** * \brief Get the back wing control device area in fraction of back wing area value @@ -152,7 +152,7 @@ class Wing : public Strategy { * * \return geom2::Point_3 */ - geom2::Point_3 calculate_wing_position(); + geom2::Point_3 calculate_front_wing_position(); /** * \brief Calculates the back wing position based on the fuselage length @@ -173,7 +173,7 @@ class Wing : public Strategy { * \param span * \return geom2::MultisectionSurface<geom2::AirfoilSection> object */ - geom2::MultisectionSurface<geom2::AirfoilSection> calculate_kinked_wing_geometry( + geom2::MultisectionSurface<geom2::AirfoilSection> calculate_kinked_front_wing_geometry( const double taper_ratio, const double aspect_ratio, const double quarter_chord_sweep, const double dihedral, const double wing_area, const double span); @@ -211,7 +211,7 @@ class Wing : public Strategy { * \param span * \return geom2::MultisectionSurface<geom2::AirfoilSection> object */ - geom2::MultisectionSurface<geom2::AirfoilSection> calculate_unkinked_wing_geometry( + geom2::MultisectionSurface<geom2::AirfoilSection> calculate_unkinked_front_wing_geometry( const double taper_ratio, const double aspect_ratio, const double quarter_chord_sweep, const double dihedral, const double wing_area, const double span); @@ -241,7 +241,7 @@ class Wing : public Strategy { * * \return fs::path relative path between reportpage and wing planform plot */ - fs::path plot_wing_planform(); + fs::path plot_front_wing_planform(); /** * \brief Generate plot for back wing planform @@ -255,7 +255,7 @@ class Wing : public Strategy { * * \return fs::path relative path between reportpage and thickness and twist distribution plot */ - fs::path plot_thickness_and_twist_distribution(); + fs::path plot_front_thickness_and_twist_distribution(); /** * \brief Generate plots for thickness and twist of back wing @@ -269,7 +269,7 @@ class Wing : public Strategy { * * \return std::vector<fs::path> vector of relative paths between reportpage and thickness and twist distribution plot */ - std::vector<fs::path> plot_airfoils(); + std::vector<fs::path> plot_front_airfoils(); /** * \brief Generate airfoil plots for back wing @@ -286,11 +286,9 @@ class Wing : public Strategy { std::string selected_design_mode; std::string selected_mass_mode; - std::string selected_back_mass_mode; std::map<std::string, std::function<void(void)>> design_mode_runner; std::map<std::string, std::function<void(void)>> mass_mode_runner; - std::map<std::string, std::function<void(void)>> back_mass_mode_runner; std::shared_ptr<Airfoils> airfoils_library; diff --git a/wing_design/src/tandem/cantilever/cantileverTandemWingDesignPlot.cpp b/wing_design/src/tandem/cantilever/cantileverTandemWingDesignPlot.cpp index 30ee4bfd..92263ba6 100644 --- a/wing_design/src/tandem/cantilever/cantileverTandemWingDesignPlot.cpp +++ b/wing_design/src/tandem/cantilever/cantileverTandemWingDesignPlot.cpp @@ -1,7 +1,7 @@ /** - * \file cantileverWingDesignPlot.cpp + * \file cantileverTandemWingDesignPlot.cpp * \author Christopher Ruwisch (christopher.ruwisch@tu-berlin.de) - * \brief Plots for cantileverWingDesign + * \brief Plots for cantileverTandemWingDesign * \version 0.1 * \date 2024-05-22 * @@ -110,17 +110,17 @@ namespace cantilever { -fs::path Wing::plot_wing_planform() { +fs::path Wing::plot_front_wing_planform() { /* Plot active */ if (!rtIO->plotOn) { return ""; } - auto coordinates_xy = geom2::transform::outline_2d(data->wing, geom2::Direction_3(0, 0, 1)); + auto coordinates_xy = geom2::transform::outline_2d(data->front_wing, geom2::Direction_3(0, 0, 1)); std::deque<double> spanwise; std::deque<double> chordwise; - auto half_span = 0.5 * geom2::measure::span(data->wing); - auto sections = data->wing.sections; + auto half_span = 0.5 * geom2::measure::span(data->front_wing); + auto sections = data->front_wing.sections; auto fuselage_half = geom2::measure::width(data->fuselage , data->wing_position.x.value())*0.5; /* Loop coordinates from out to inside for LE and TE */ @@ -132,9 +132,9 @@ fs::path Wing::plot_wing_planform() { } /* Get mac coordinates */ - auto mac_position_y = geom2::measure::mean_aerodynamic_chord_position(data->wing); - auto mac_position = geom2::measure::offset_LE(data->wing,mac_position_y); - auto mac = geom2::measure::chord(data->wing,mac_position_y); + auto mac_position_y = geom2::measure::mean_aerodynamic_chord_position(data->front_wing); + auto mac_position = geom2::measure::offset_LE(data->front_wing,mac_position_y); + auto mac = geom2::measure::chord(data->front_wing,mac_position_y); @@ -150,14 +150,14 @@ fs::path Wing::plot_wing_planform() { legend_strings.push_back("MAC"); /* Plot spars */ - for(auto& spar : data->spars) { - const auto [x,y,_] = gen_polygon_tandem(data->wing, spar); + for(auto& spar : data->front_spars) { + const auto [x,y,_] = gen_polygon_tandem(data->front_wing, spar); (void)_; ax->plot(y,x)->color(spar_color_tandem).line_width(1).line_style("--"); legend_strings.push_back("spar"); } - for(auto& device : data->control_devices) { - const auto [x,y,name] = gen_polygon_tandem(data->wing, device); + for(auto& device : data->front_control_devices) { + const auto [x,y,name] = gen_polygon_tandem(data->front_wing, device); ax->plot(y,x)->color(control_device_colormap_tandem[name]).line_width(1.5); legend_strings.push_back(device.name); } @@ -258,7 +258,7 @@ fs::path Wing::plot_back_wing_planform() { return fs::relative(plot_path, fs::path(rtIO->getHtmlDir())); } -fs::path Wing::plot_thickness_and_twist_distribution() { +fs::path Wing::plot_front_thickness_and_twist_distribution() { /* Plot active */ if (!rtIO->plotOn) { return ""; @@ -266,8 +266,8 @@ fs::path Wing::plot_thickness_and_twist_distribution() { std::vector<double> eta; std::vector<double> thickness_to_chord_ratio; std::vector<double> twist; - double half_span = geom2::measure::span(data->wing) * 0.5; - for (auto section : data->wing.sections) { + double half_span = geom2::measure::span(data->front_wing) * 0.5; + for (auto section : data->front_wing.sections) { eta.push_back(-section.origin.z() / half_span); thickness_to_chord_ratio.push_back(section.get_thickness_scale() * geom2::measure::thickness_max(section) / section.get_chord_length()); @@ -388,7 +388,7 @@ fs::path Wing::plot_back_thickness_and_twist_distribution() { * * \return fs::path */ -std::vector<fs::path> Wing::plot_airfoils() { +std::vector<fs::path> Wing::plot_front_airfoils() { /* Plot active */ if (!rtIO->plotOn) { return {""}; @@ -396,7 +396,7 @@ std::vector<fs::path> Wing::plot_airfoils() { std::map<std::string, std::vector<geom2::Point_2>> airfoils_data{}; std::vector<fs::path> airfoil_plots_path; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { if (airfoils_data.find(section.name) != airfoils_data.end()) { continue; } else { diff --git a/wing_design/src/tandem/cantilever/cantileverTandemWingDesignReport.cpp b/wing_design/src/tandem/cantilever/cantileverTandemWingDesignReport.cpp index 10189b5c..1c440cf3 100644 --- a/wing_design/src/tandem/cantilever/cantileverTandemWingDesignReport.cpp +++ b/wing_design/src/tandem/cantilever/cantileverTandemWingDesignReport.cpp @@ -1,7 +1,7 @@ /** - * \file cantileverWingDesignReport.cpp + * \file cantileverTandemWingDesignReport.cpp * \author Christopher Ruwisch (christopher.ruwisch@tu-berlin.de) - * \brief Report for cantilever wing design + * \brief Report for cantilever tandem wing design * \version 0.1 * \date 2024-02-14 * @@ -35,14 +35,14 @@ void Wing::set_html_body() { << "<tbody>\n" << "<tr>\n" << std::format("<td>Horizontal LE position of front wing</td><td>x<sub>front,LE</sub></td><td>m</td><td>{:.4f}</td>\n", - (data->wing_position.x.value() + data->wing.origin.x())) + (data->wing_position.x.value() + data->front_wing.origin.x())) << "</tr>\n" << std::format("<td>Horizontal LE position of back wing</td><td>x<sub>back,LE</sub></td><td>m</td><td>{:.4f}</td>\n", (data->wing_position.x.value() + data->back_wing.origin.x())) << "</tr>\n" << "<tr>\n" << std::format("<td>Verical LE position of front wing</td><td>z<sub>front,LE</sub></td><td>m</td><td>{:.4f}</td>\n", - (data->wing_position.z.value() + data->wing.origin.z())) + (data->wing_position.z.value() + data->front_wing.origin.z())) << "</tr>\n" << "<tr>\n" << std::format("<td>Verical LE position of back wing</td><td>z<sub>back,LE</sub></td><td>m</td><td>{:.4f}</td>\n", @@ -50,11 +50,11 @@ void Wing::set_html_body() { << "</tr>\n" << "<tr>\n" << std::format("<td>Leading edge stagger</td><td>St<sub>LE</sub></td><td>m</td><td>{:.4f}</td>\n", - (data->back_wing.origin.x() - data->wing.origin.x())) + (data->back_wing.origin.x() - data->front_wing.origin.x())) << "</tr>\n" << "<tr>\n" << std::format("<td>Relative leading edge stagger</td><td>St<sub>rel,LE</sub></td><td>1</td><td>{:.4f}</td>\n", - (data->back_wing.origin.x() - data->wing.origin.x()) / geom2::measure::length(data->fuselage)) + (data->back_wing.origin.x() - data->front_wing.origin.x()) / geom2::measure::length(data->fuselage)) << "</tr>\n" << "<tr>\n" << std::format("<td>1/4 MAC stagger</td><td>St<sub>25_MAC</sub></td><td>m</td><td>{:.4f}</td>\n", @@ -62,10 +62,10 @@ void Wing::set_html_body() { + geom2::measure::offset_LE(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)).x() + 0.25 * geom2::measure::chord(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)) * cos(geom2::measure::twist(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)))) - - (data->wing.origin.x() - + geom2::measure::offset_LE(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing)).x() - + 0.25 * geom2::measure::chord(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing)) - * cos(geom2::measure::twist(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing))))) + - (data->front_wing.origin.x() + + geom2::measure::offset_LE(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing)).x() + + 0.25 * geom2::measure::chord(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing)) + * cos(geom2::measure::twist(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing))))) ) << "</tr>\n" @@ -75,20 +75,20 @@ void Wing::set_html_body() { + geom2::measure::offset_LE(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)).x() + 0.25 * geom2::measure::chord(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)) * cos(geom2::measure::twist(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)))) - - (data->wing.origin.x() - + geom2::measure::offset_LE(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing)).x() - + 0.25 * geom2::measure::chord(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing)) - * cos(geom2::measure::twist(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing))))) + - (data->front_wing.origin.x() + + geom2::measure::offset_LE(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing)).x() + + 0.25 * geom2::measure::chord(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing)) + * cos(geom2::measure::twist(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing))))) / geom2::measure::length(data->fuselage)) << "</tr>\n" << "<tr>\n" << std::format("<td>Vertical leading edge gap</td><td>G<sub>LE</sub></td><td>m</td><td>{:.4f}</td>\n", - data->back_wing.origin.z() - data->wing.origin.z()) + data->back_wing.origin.z() - data->front_wing.origin.z()) << "</tr>\n" << "<tr>\n" << std::format("<td>Relative vertical leading edge gap</td><td>G<sub>rel,LE</sub></td><td>1</td><td>{:.4f}</td>\n", - (data->back_wing.origin.z() - data->wing.origin.z()) / geom2::measure::height_max(data->fuselage)) + (data->back_wing.origin.z() - data->front_wing.origin.z()) / geom2::measure::height_max(data->fuselage)) << "</tr>\n" << "<tr>\n" << std::format("<td>Vertical 1/4 MAC gap</td><td>G<sub>25_MAC</sub></td><td>m</td><td>{:.4f}</td>\n", @@ -96,10 +96,10 @@ void Wing::set_html_body() { + geom2::measure::offset_LE(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)).y() + 0.25 * geom2::measure::chord(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)) * sin(geom2::measure::twist(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)))) - - (data->wing.origin.z() - + geom2::measure::offset_LE(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing)).y() - + 0.25 * geom2::measure::chord(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing)) - * sin(geom2::measure::twist(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing))))) + - (data->front_wing.origin.z() + + geom2::measure::offset_LE(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing)).y() + + 0.25 * geom2::measure::chord(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing)) + * sin(geom2::measure::twist(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing))))) ) << "</tr>\n" @@ -109,10 +109,10 @@ void Wing::set_html_body() { + geom2::measure::offset_LE(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)).y() + 0.25 * geom2::measure::chord(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)) * sin(geom2::measure::twist(data->back_wing, geom2::measure::mean_aerodynamic_chord_position(data->back_wing)))) - - (data->wing.origin.z() - + geom2::measure::offset_LE(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing)).y() - + 0.25 * geom2::measure::chord(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing)) - * sin(geom2::measure::twist(data->wing, geom2::measure::mean_aerodynamic_chord_position(data->wing))))) + - (data->front_wing.origin.z() + + geom2::measure::offset_LE(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing)).y() + + 0.25 * geom2::measure::chord(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing)) + * sin(geom2::measure::twist(data->front_wing, geom2::measure::mean_aerodynamic_chord_position(data->front_wing))))) / geom2::measure::height_max(data->fuselage)) << "</tr>\n" @@ -146,22 +146,22 @@ void Wing::set_html_body() { << "<tbody>\n" << "<tr>\n" << std::format("<td>Reference area</td><td>S<sub>ref</sub></td><td>m<sup>2</sup></td><td>{:.2f}</td>\n", - geom2::measure::reference_area(data->wing)) + geom2::measure::reference_area(data->front_wing)) << "</tr>\n" << "<tr>\n" << std::format("<td>Mean aero. chord</td><td>MAC</td><td>m</td><td>{:.2f}</td>\n", - geom2::measure::mean_aerodynamic_chord(data->wing)) + geom2::measure::mean_aerodynamic_chord(data->front_wing)) << "</tr>\n" << "<tr>\n" - << std::format("<td>Span</td><td>b</td><td>m</td><td>{:.2f}</td>\n", geom2::measure::span(data->wing)) + << std::format("<td>Span</td><td>b</td><td>m</td><td>{:.2f}</td>\n", geom2::measure::span(data->front_wing)) << "</tr>\n" << "<tr>\n" << std::format("<td>Aspect ratio</td><td>AR</td><td>1</td><td>{:.2f}</td>\n", - geom2::measure::aspect_ratio(data->wing)) + geom2::measure::aspect_ratio(data->front_wing)) << "</tr>\n" << "<tr>\n" << std::format("<td>Taper ratio</td><td>λ</td><td>1</td><td>{:.2f}</td>\n", - geom2::measure::taper_ratio(data->wing)) + geom2::measure::taper_ratio(data->front_wing)) << "</tr>\n" << "</tbody>\n" << "</table>\n"; @@ -204,7 +204,7 @@ void Wing::set_html_body() { << "<thead>\n" << "<tr>\n" << "<th>parameter</th><th>symbol</th><th>unit</th>"; - for (size_t i = 0; i < data->wing.sections.size(); ++i) { + for (size_t i = 0; i < data->front_wing.sections.size(); ++i) { reporter.htmlReportStream() << std::format("<th>S<sub>{:02d}</sub></th>", i); } reporter.htmlReportStream() << "\n</tr>\n" @@ -213,67 +213,67 @@ void Wing::set_html_body() { /* Dimensionless half span - eta*/ << "<tr>\n" << "<td>Dimensionless half span</td><td>η</td><td>1</td>"; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { reporter.htmlReportStream() << std::format("<td>{:.2f}</td>", - -2 * section.origin.z() / geom2::measure::span(data->wing)); + -2 * section.origin.z() / geom2::measure::span(data->front_wing)); } /* Spanwise coordinate - y*/ reporter.htmlReportStream() << "\n</tr>\n" << "<td>Spanwise coordinate</td><td>y</td><td>m</td>"; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { reporter.htmlReportStream() << std::format("<td>{:.2f}</td>", -section.origin.z()); } reporter.htmlReportStream() << "\n</tr>\n" /* Chord - c*/ << "<tr>\n" << "<td>Chord</td><td>c</td><td>m</td>"; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { reporter.htmlReportStream() << std::format("<td>{:.2f}</td>", section.get_chord_length()); } reporter.htmlReportStream() << "\n</tr>\n" /* Sweep - Leading edge - phi_LE*/ << "<tr>\n" << "<td>Sweep leading edge</td><td>φ<sub>LE</sub></td><td>°</td>"; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { reporter.htmlReportStream() << std::format( - "<td>{:.2f}</td>", -geom2::detail::to_degrees * geom2::measure::sweep(data->wing, section.origin.z(), 0.0)); + "<td>{:.2f}</td>", -geom2::detail::to_degrees * geom2::measure::sweep(data->front_wing, section.origin.z(), 0.0)); } reporter.htmlReportStream() << "\n</tr>\n" /* Sweep - 25 percent - phi_25%*/ << "<tr>\n" << "<td>Sweep quarter chord</td><td>φ<sub>25</sub></td><td>°</td>"; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { reporter.htmlReportStream() << std::format( - "<td>{:.2f}</td>", -geom2::detail::to_degrees * geom2::measure::sweep(data->wing, section.origin.z(), 0.25)); + "<td>{:.2f}</td>", -geom2::detail::to_degrees * geom2::measure::sweep(data->front_wing, section.origin.z(), 0.25)); } reporter.htmlReportStream() << "\n</tr>\n" /* Sweep - Trailing edge percent - phi_TE*/ << "<tr>\n" << "<td>Sweep Trailing edge</td><td>φ<sub>TE</sub></td><td>°</td>"; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { reporter.htmlReportStream() << std::format( - "<td>{:.2f}</td>", -geom2::detail::to_degrees * geom2::measure::sweep(data->wing, section.origin.z(), 1.0)); + "<td>{:.2f}</td>", -geom2::detail::to_degrees * geom2::measure::sweep(data->front_wing, section.origin.z(), 1.0)); } reporter.htmlReportStream() << "\n</tr>\n" /* Dihedral - nu*/ << "<tr>\n" << "<td>Dihedral</td><td>ν</td><td>°</td>"; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { reporter.htmlReportStream() << std::format( - "<td>{:.2f}</td>", geom2::detail::to_degrees * geom2::measure::dihedral(data->wing, section.origin.z())); + "<td>{:.2f}</td>", geom2::detail::to_degrees * geom2::measure::dihedral(data->front_wing, section.origin.z())); } reporter.htmlReportStream() << "\n</tr>\n" /* Twist - epsilon*/ << "<tr>\n" << "<td>Twist angle</td><td>ε</td><td>°</td>"; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { reporter.htmlReportStream() << std::format("<td>{:.2f}</td>", geom2::detail::to_degrees * section.rotation_z); } reporter.htmlReportStream() << "\n</tr>\n" /* Thickness to chord - epsilon*/ << "<tr>\n" << "<td>Thickness ratio</td><td>t/c</td><td>%</td>"; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { reporter.htmlReportStream() << std::format( "<td>{:.2f}</td>", 100 * geom2::measure::thickness_max(section) / section.get_chord_length()); } @@ -281,7 +281,7 @@ void Wing::set_html_body() { /* Airfoil - none */ << "<tr>\n" << "<td>Airfoil</td><td>-</td><td>-</td>"; - for (auto section : data->wing.sections) { + for (auto section : data->front_wing.sections) { reporter.htmlReportStream() << std::format("<td>{}</td>", section.name); } reporter.htmlReportStream() << "\n</tr>\n" @@ -380,7 +380,7 @@ void Wing::set_html_body() { /* Table 5 - Spar parameters of Front Wing*/ - for (size_t spar_id = 0; spar_id < data->spars.size(); ++spar_id) { + for (size_t spar_id = 0; spar_id < data->front_spars.size(); ++spar_id) { reporter.htmlReportStream() << "<table class=\"content-table\">\n"; if (spar_id == 0) { reporter.htmlReportStream() << "<caption>Spar parameters of front wing</caption>\n"; @@ -388,22 +388,22 @@ void Wing::set_html_body() { reporter.htmlReportStream() << "<thead>\n" << "<tr>\n" << std::format("<th>{:<10}</th><th>η [1]<th>x/c [%]</th>", - data->spars.at(spar_id).name) + data->front_spars.at(spar_id).name) << "\n</tr>\n" << "</thead>\n" << "<tbody>\n"; /* Spar name - eta, x/c*/ - for (size_t i = 0; i < data->spars.at(spar_id).sections.size(); ++i) { + for (size_t i = 0; i < data->front_spars.at(spar_id).sections.size(); ++i) { reporter.htmlReportStream() << "<tr>\n"; std::string tag = ""; if (i == 0) { tag = "from"; - } else if (i == data->spars.at(spar_id).sections.size() - 1) { + } else if (i == data->front_spars.at(spar_id).sections.size() - 1) { tag = "to"; } reporter.htmlReportStream() << std::format("<td>{}</td><td>{:.2f}</td><td>{:.2f}</td>\n", tag, - data->spars.at(spar_id).sections.at(i).origin.z(), - data->spars.at(spar_id).sections.at(i).get_contour().vertex(0).x()); + data->front_spars.at(spar_id).sections.at(i).origin.z(), + data->front_spars.at(spar_id).sections.at(i).get_contour().vertex(0).x()); reporter.htmlReportStream() << "\n</tr>\n"; } /* Spanwise coordinate - y*/ @@ -446,11 +446,11 @@ void Wing::set_html_body() { /* Sort devices to leading, trailing and other devices for front wing*/ /* device data - name, eta_from, rel_chord_from_start, rel_chord_from_end, eta_to, rel_chord_to_start, * rel_chord_to_end */ - using device_data = std::tuple<std::string, double, double, double, double, double, double>; - std::vector<device_data> leading_edge_devices; - std::vector<device_data> trailing_edge_devices; - std::vector<device_data> other_devices; - for (auto device : data->control_devices) { + using front_device_data = std::tuple<std::string, double, double, double, double, double, double>; + std::vector<front_device_data> front_leading_edge_devices; + std::vector<front_device_data> front_trailing_edge_devices; + std::vector<front_device_data> front_other_devices; + for (auto device : data->front_control_devices) { /* Device has only two sections (from + to) spanwise */ double eta_from = device.sections.at(0).origin.z(); double rel_chord_from_start = device.sections.at(0).get_contour().vertex(0).x(), @@ -461,20 +461,20 @@ void Wing::set_html_body() { if (std::fabs(rel_chord_from_start - rel_chord_to_start) < ACCURACY_MEDIUM && std::fabs(rel_chord_from_start) < ACCURACY_MEDIUM) { - leading_edge_devices.push_back({device.name, eta_from, rel_chord_from_start, rel_chord_from_end, eta_to, + front_leading_edge_devices.push_back({device.name, eta_from, rel_chord_from_start, rel_chord_from_end, eta_to, rel_chord_to_start, rel_chord_to_end}); } else if (std::fabs(rel_chord_from_end - rel_chord_to_end) < ACCURACY_MEDIUM && std::fabs(rel_chord_from_end - 1) < ACCURACY_MEDIUM) { - trailing_edge_devices.push_back({device.name, eta_from, rel_chord_from_start, rel_chord_from_end, eta_to, + front_trailing_edge_devices.push_back({device.name, eta_from, rel_chord_from_start, rel_chord_from_end, eta_to, rel_chord_to_start, rel_chord_to_end}); } else { - other_devices.push_back({device.name, eta_from, rel_chord_from_start, rel_chord_from_end, eta_to, + front_other_devices.push_back({device.name, eta_from, rel_chord_from_start, rel_chord_from_end, eta_to, rel_chord_to_start, rel_chord_to_end}); } } /* Leading edge table*/ - if (!leading_edge_devices.empty()) { + if (!front_leading_edge_devices.empty()) { reporter.htmlReportStream() << "<table class=\"content-table\">\n" << "<caption>Leading edge control devices of front wing</caption>\n" @@ -485,7 +485,7 @@ void Wing::set_html_body() { << "</tr>\n" << "</thead>\n" << "<tbody>\n"; - for (auto device : leading_edge_devices) { + for (auto device : front_leading_edge_devices) { const auto [name, eta_from, rel_chord_from_start, rel_chord_from_end, eta_to, rel_chord_to_start, rel_chord_to_end] = device; reporter.htmlReportStream() << "<tr>\n"; @@ -500,7 +500,7 @@ void Wing::set_html_body() { << "</table>\n"; } - if (!trailing_edge_devices.empty()) { + if (!front_trailing_edge_devices.empty()) { reporter.htmlReportStream() << "<table class=\"content-table\">\n" << "<caption>Trailing edge control devices of front wing</caption>\n" @@ -511,7 +511,7 @@ void Wing::set_html_body() { << "</tr>\n" << "</thead>\n" << "<tbody>\n"; - for (auto device : trailing_edge_devices) { + for (auto device : front_trailing_edge_devices) { const auto [name, eta_from, rel_chord_from_start, rel_chord_from_end, eta_to, rel_chord_to_start, rel_chord_to_end] = device; reporter.htmlReportStream() << "<tr>\n"; @@ -525,7 +525,7 @@ void Wing::set_html_body() { << "</table>\n"; } - if (!other_devices.empty()) { + if (!front_other_devices.empty()) { reporter.htmlReportStream() << "<table class=\"content-table\">\n" << "<caption>Other control devices of front wing</caption>\n" @@ -536,7 +536,7 @@ void Wing::set_html_body() { << "</tr>\n" << "</thead>\n" << "<tbody>\n"; - for (auto device : other_devices) { + for (auto device : front_other_devices) { const auto [name, eta_from, rel_chord_from_start, rel_chord_from_end, eta_to, rel_chord_to_start, rel_chord_to_end] = device; reporter.htmlReportStream() << "<tr>\n"; @@ -685,16 +685,16 @@ void Wing::set_html_body() { reporter.htmlReportStream() << "<h2>Plots</h2>\n"; reporter.htmlReportStream() << "<h3>Geometry of front wing</h3>\n"; - auto planform_plot_path = plot_wing_planform(); - reporter.htmlReportStream() << std::format("<img class=\"image-plot\" src=\"{}\"/>\n",planform_plot_path.string()); + auto front_planform_plot_path = plot_front_wing_planform(); + reporter.htmlReportStream() << std::format("<img class=\"image-plot\" src=\"{}\"/>\n",front_planform_plot_path.string()); reporter.htmlReportStream() << "<h3>Geometry of back wing</h3>\n"; auto back_planform_plot_path = plot_back_wing_planform(); reporter.htmlReportStream() << std::format("<img class=\"image-plot\" src=\"{}\"/>\n",back_planform_plot_path.string()); - auto airfoil_plot_paths = plot_airfoils(); + auto front_airfoil_plot_paths = plot_front_airfoils(); reporter.htmlReportStream() << "<h3>Airfoils of front wing</h3>\n"; - for( auto airfoil_path : airfoil_plot_paths) { + for( auto airfoil_path : front_airfoil_plot_paths) { reporter.htmlReportStream() << std::format("<img class=\"image-plot\" src=\"{}\"/>\n", airfoil_path.string()); } @@ -705,8 +705,8 @@ void Wing::set_html_body() { } reporter.htmlReportStream() << "<h3>Thickness & Geometric Twist of front wing</h3>\n"; - auto thickness_and_twist_plot_path = plot_thickness_and_twist_distribution(); - reporter.htmlReportStream() << std::format("<img class=\"image-plot\" src=\"{}\"/>\n", thickness_and_twist_plot_path.string()); + auto front_thickness_and_twist_plot_path = plot_front_thickness_and_twist_distribution(); + reporter.htmlReportStream() << std::format("<img class=\"image-plot\" src=\"{}\"/>\n", front_thickness_and_twist_plot_path.string()); reporter.htmlReportStream() << "<h3>Thickness & Geometric Twist of back wing</h3>\n"; auto back_thickness_and_twist_plot_path = plot_back_thickness_and_twist_distribution(); diff --git a/wing_design/src/tandem/tandemWingDesignConfig.cpp b/wing_design/src/tandem/tandemWingDesignConfig.cpp index 17156f96..32cfa683 100644 --- a/wing_design/src/tandem/tandemWingDesignConfig.cpp +++ b/wing_design/src/tandem/tandemWingDesignConfig.cpp @@ -18,11 +18,11 @@ tandem::cantilever::WingDesignConfig::WingDesignConfig() sweep_calculation_mode( EndnodeReadOnly<std::string>("program_settings/tandem/cantilever/calculation_methods/sweep_method/method")), - user_sweep_angle_at_quarter_chord(EndnodeReadOnly<double>( + user_front_sweep_angle_at_quarter_chord(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/sweep/parameters/mode_0/sweep_angle")), - korn_technology_factor(EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/front_wing/" + front_korn_technology_factor(EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/front_wing/" "sweep/parameters/mode_1/korn_technology_factor")), - delta_drag_divergence_to_mach_design( + front_delta_drag_divergence_to_mach_design( EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/front_wing/sweep/parameters/" "mode_1/delta_drag_divergence_to_mach_design")), user_back_sweep_angle_at_quarter_chord(EndnodeReadOnly<double>( @@ -35,45 +35,45 @@ tandem::cantilever::WingDesignConfig::WingDesignConfig() taper_ratio_calculation_mode(EndnodeReadOnly<std::string>( "program_settings/tandem/cantilever/calculation_methods/taper_ratio_method/method")), - user_taper_ratio(EndnodeReadOnly<double>( + user_front_taper_ratio(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/taper_ratio/parameters/mode_0/taper_ratio")), user_back_taper_ratio(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/back_wing/taper_ratio/parameters/mode_0/taper_ratio")), aspect_ratio_calculation_mode(EndnodeReadOnly<std::string>( "program_settings/tandem/cantilever/calculation_methods/aspect_ratio_method/method")), - user_aspect_ratio(EndnodeReadOnly<double>( + user_front_aspect_ratio(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/aspect_ratio/parameters/mode_0/aspect_ratio")), user_back_aspect_ratio(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/back_wing/aspect_ratio/parameters/mode_0/aspect_ratio")), dihedral_calculation_mode(EndnodeReadOnly<std::string>( "program_settings/tandem/cantilever/calculation_methods/dihedral_method/method")), - user_dihedral(EndnodeReadOnly<double>( + user_front_dihedral(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/dihedral/parameters/mode_0/dihedral_angle")), user_back_dihedral(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/back_wing/dihedral/parameters/mode_0/dihedral_angle")), - relative_kink_position_calculation_mode(EndnodeReadOnly<std::string>( + front_relative_kink_position_calculation_mode(EndnodeReadOnly<std::string>( "program_settings/tandem/cantilever/calculation_methods/front_wing/relative_kink_position/method")), - user_relative_kink(EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/front_wing/" + user_front_relative_kink(EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/front_wing/" "relative_kink_position/parameters/mode_0/relative_kink_position")), back_relative_kink_position_calculation_mode(EndnodeReadOnly<std::string>( "program_settings/tandem/cantilever/calculation_methods/back_wing/relative_kink_position/method")), user_back_relative_kink(EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/back_wing/" "relative_kink_position/parameters/mode_0/relative_kink_position")), - user_max_inner_trailing_edge_sweep( + user_front_max_inner_trailing_edge_sweep( EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/front_wing/" "relative_kink_position/parameters/mode_0/maximum_inner_trailing_edge_sweep")), user_back_max_inner_trailing_edge_sweep( EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/back_wing/" "relative_kink_position/parameters/mode_0/maximum_inner_trailing_edge_sweep")), - track_based_initial_relative_kink( + track_based_front_initial_relative_kink( EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/front_wing/" "relative_kink_position/parameters/mode_1/initial_relative_kink_position")), - track_based_max_inner_trailing_edge_sweep( + track_based_front_max_inner_trailing_edge_sweep( EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/front_wing/" "relative_kink_position/parameters/mode_1/maximum_inner_trailing_edge_sweep")), track_based_back_initial_relative_kink( @@ -83,16 +83,16 @@ tandem::cantilever::WingDesignConfig::WingDesignConfig() EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/back_wing/" "relative_kink_position/parameters/mode_1/maximum_inner_trailing_edge_sweep")), - wing_profile_and_thickness_calculation_mode( + front_wing_profile_and_thickness_calculation_mode( EndnodeReadOnly<std::string>("program_settings/tandem/cantilever/calculation_methods/front_wing/" "wing_profile_and_thickness_distribution/method")), - torenbeek_jenkinson_wing_profile( + front_torenbeek_jenkinson_wing_profile( EndnodeReadOnly<std::string>("program_settings/tandem/cantilever/calculation_methods/front_wing/" "wing_profile_and_thickness_distribution/parameters/mode_1/wing_profile")), - max_thickness_to_chord_ratio(EndnodeReadOnly<double>( + front_max_thickness_to_chord_ratio(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/wing_profile_and_thickness_distribution/" "parameters/mode_1/max_thickness_to_chord_ratio")), - airfoil_critical_factor( + front_airfoil_critical_factor( EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/front_wing/" "wing_profile_and_thickness_distribution/parameters/mode_1/airfoil_critical_factor")), back_wing_profile_and_thickness_calculation_mode( @@ -108,12 +108,12 @@ tandem::cantilever::WingDesignConfig::WingDesignConfig() EndnodeReadOnly<double>("program_settings/tandem/cantilever/calculation_methods/back_wing/" "wing_profile_and_thickness_distribution/parameters/mode_1/airfoil_critical_factor")), - control_device_mode(EndnodeReadOnly<std::string>( + front_control_device_mode(EndnodeReadOnly<std::string>( "program_settings/tandem/cantilever/calculation_methods/front_wing/control_devices/method")), - high_lift_device_type_leading_edge( + front_high_lift_device_type_leading_edge( EndnodeReadOnly<std::string>("program_settings/tandem/cantilever/calculation_methods/front_wing/control_devices/" "parameters/mode_1/high_lift_device_type_leading_edge")), - high_lift_device_type_trailing_edge( + front_high_lift_device_type_trailing_edge( EndnodeReadOnly<std::string>("program_settings/tandem/cantilever/calculation_methods/front_wing/control_devices/" "parameters/mode_1/high_lift_device_type_trailing_edge")), back_control_device_mode(EndnodeReadOnly<std::string>( @@ -125,18 +125,18 @@ tandem::cantilever::WingDesignConfig::WingDesignConfig() EndnodeReadOnly<std::string>("program_settings/tandem/cantilever/calculation_methods/back_wing/control_devices/" "parameters/mode_1/high_lift_device_type_trailing_edge")), - spars_mode( + front_spars_mode( EndnodeReadOnly<std::string>("program_settings/tandem/cantilever/calculation_methods/front_wing/spars/method")), back_spars_mode( EndnodeReadOnly<std::string>("program_settings/tandem/cantilever/calculation_methods/back_wing/spars/method")), - flops_fstrt(EndnodeReadOnly<double>( + front_flops_fstrt(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/mass/parameters/mode_0/fstrt")), - flops_faert(EndnodeReadOnly<double>( + front_flops_faert(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/mass/parameters/mode_0/faert")), - flops_fcomp(EndnodeReadOnly<double>( + front_flops_fcomp(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/mass/parameters/mode_0/fcomp")), - flops_technology_factor(EndnodeReadOnly<double>( + front_flops_technology_factor(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/mass/parameters/mode_0/technology_factor")), back_flops_fstrt(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/back_wing/mass/parameters/mode_0/fstrt")), @@ -147,9 +147,9 @@ tandem::cantilever::WingDesignConfig::WingDesignConfig() back_flops_technology_factor(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/back_wing/mass/parameters/mode_0/technology_factor")), - chiozzotto_technology_factor(EndnodeReadOnly<double>( + front_chiozzotto_technology_factor(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/mass/parameters/mode_1/technology_factor")), - chiozzotto_material(EndnodeReadOnly<std::string>( + front_chiozzotto_material(EndnodeReadOnly<std::string>( "program_settings/tandem/cantilever/calculation_methods/front_wing/mass/parameters/mode_1/material")), back_chiozzotto_technology_factor(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/back_wing/mass/parameters/mode_1/technology_factor")), @@ -169,43 +169,43 @@ void tandem::cantilever::WingDesignConfig::read(const node& xml) { user_relative_LE_stagger.read(xml); sweep_calculation_mode.read(xml); - user_sweep_angle_at_quarter_chord.read(xml); - korn_technology_factor.read(xml); - delta_drag_divergence_to_mach_design.read(xml); + user_front_sweep_angle_at_quarter_chord.read(xml); + front_korn_technology_factor.read(xml); + front_delta_drag_divergence_to_mach_design.read(xml); user_back_sweep_angle_at_quarter_chord.read(xml); back_korn_technology_factor.read(xml); back_delta_drag_divergence_to_mach_design.read(xml); taper_ratio_calculation_mode.read(xml); - user_taper_ratio.read(xml); + user_front_taper_ratio.read(xml); user_back_taper_ratio.read(xml); aspect_ratio_calculation_mode.read(xml); - user_aspect_ratio.read(xml); + user_front_aspect_ratio.read(xml); user_back_aspect_ratio.read(xml); dihedral_calculation_mode.read(xml); - user_dihedral.read(xml); + user_front_dihedral.read(xml); user_back_dihedral.read(xml); - relative_kink_position_calculation_mode.read(xml); - user_relative_kink.read(xml); + front_relative_kink_position_calculation_mode.read(xml); + user_front_relative_kink.read(xml); back_relative_kink_position_calculation_mode.read(xml); user_back_relative_kink.read(xml); - user_max_inner_trailing_edge_sweep.read(xml); + user_front_max_inner_trailing_edge_sweep.read(xml); user_back_max_inner_trailing_edge_sweep.read(xml); //TODO kayra: seperate mode switches after that - track_based_initial_relative_kink.read(xml); - track_based_max_inner_trailing_edge_sweep.read(xml); + track_based_front_initial_relative_kink.read(xml); + track_based_front_max_inner_trailing_edge_sweep.read(xml); track_based_back_initial_relative_kink.read(xml); track_based_back_max_inner_trailing_edge_sweep.read(xml); - wing_profile_and_thickness_calculation_mode.read(xml); - torenbeek_jenkinson_wing_profile.read(xml); - max_thickness_to_chord_ratio.read(xml); - airfoil_critical_factor.read(xml); - control_device_mode.read(xml); + front_wing_profile_and_thickness_calculation_mode.read(xml); + front_torenbeek_jenkinson_wing_profile.read(xml); + front_max_thickness_to_chord_ratio.read(xml); + front_airfoil_critical_factor.read(xml); + front_control_device_mode.read(xml); back_wing_profile_and_thickness_calculation_mode.read(xml); back_torenbeek_jenkinson_wing_profile.read(xml); @@ -213,37 +213,37 @@ void tandem::cantilever::WingDesignConfig::read(const node& xml) { back_airfoil_critical_factor.read(xml); - control_device_mode.read(xml); - high_lift_device_type_leading_edge.read(xml); - high_lift_device_type_trailing_edge.read(xml); + front_control_device_mode.read(xml); + front_high_lift_device_type_leading_edge.read(xml); + front_high_lift_device_type_trailing_edge.read(xml); back_control_device_mode.read(xml); back_high_lift_device_type_leading_edge.read(xml); back_high_lift_device_type_trailing_edge.read(xml); - spars_mode.read(xml); + front_spars_mode.read(xml); back_spars_mode.read(xml); - flops_fstrt.read(xml); - flops_faert.read(xml); - flops_fcomp.read(xml); + front_flops_fstrt.read(xml); + front_flops_faert.read(xml); + front_flops_fcomp.read(xml); - flops_technology_factor.read(xml); + front_flops_technology_factor.read(xml); back_flops_fstrt.read(xml); back_flops_faert.read(xml); back_flops_fcomp.read(xml); back_flops_technology_factor.read(xml); - chiozzotto_technology_factor.read(xml); - chiozzotto_material.read(xml); + front_chiozzotto_technology_factor.read(xml); + front_chiozzotto_material.read(xml); back_chiozzotto_technology_factor.read(xml); back_chiozzotto_material.read(xml); common_airfoil_data_path.read(xml); // Read user wing profiles thickness and half span position - if (user_wing_profiles.empty()) { + if (user_front_wing_profiles.empty()) { node* result; int to_count = 0; do { @@ -256,23 +256,23 @@ void tandem::cantilever::WingDesignConfig::read(const node& xml) { to_count--; for (int i = 0; i < to_count; ++i) { std::string id = std::to_string(i); - user_wing_profiles.push_back(EndnodeReadOnly<std::string>( + user_front_wing_profiles.push_back(EndnodeReadOnly<std::string>( "program_settings/tandem/cantilever/calculation_methods/front_wing/wing_profile_and_thickness_distribution/" "parameters/mode_0/wing_profile_and_thickness@" + id + "/wing_profile")); - user_thickness_to_chord.push_back(EndnodeReadOnly<double>( + user_front_thickness_to_chord.push_back(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/wing_profile_and_thickness_distribution/" "parameters/mode_0/wing_profile_and_thickness@" + id + "/thickness_to_chord/ratio")); - user_eta.push_back(EndnodeReadOnly<double>( + user_front_eta.push_back(EndnodeReadOnly<double>( "program_settings/tandem/cantilever/calculation_methods/front_wing/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); - user_thickness_to_chord[i].read(xml); - user_eta[i].read(xml); - user_wing_profiles_and_thickness_vector.push_back( - {user_eta[i].value(), user_thickness_to_chord[i].value(), user_wing_profiles[i].value()}); + user_front_wing_profiles[i].read(xml); + user_front_thickness_to_chord[i].read(xml); + user_front_eta[i].read(xml); + user_front_wing_profiles_and_thickness_vector.push_back( + {user_front_eta[i].value(), user_front_thickness_to_chord[i].value(), user_front_wing_profiles[i].value()}); } } @@ -310,7 +310,7 @@ void tandem::cantilever::WingDesignConfig::read(const node& xml) { } // read user defined control surfaces - if (user_defined_control_devices.empty()) { + if (user_defined_front_control_devices.empty()) { node* result; int to_count = 0; do { @@ -322,11 +322,11 @@ void tandem::cantilever::WingDesignConfig::read(const node& xml) { } while (result != nullptr); to_count--; for (int i = 0; i < to_count; ++i) { - user_defined_control_devices.push_back( + user_defined_front_control_devices.push_back( ControlDevice("program_settings/tandem/cantilever/calculation_methods/front_wing/control_devices/" "parameters/mode_0/control_device@" + std::to_string(i) + "/")); - user_defined_control_devices.back().read(xml); + user_defined_front_control_devices.back().read(xml); } } @@ -351,7 +351,7 @@ void tandem::cantilever::WingDesignConfig::read(const node& xml) { } // read user defined spars - if (user_defined_spars.empty()) { + if (user_defined_front_spars.empty()) { node* result; int to_count = 0; do { @@ -363,11 +363,11 @@ void tandem::cantilever::WingDesignConfig::read(const node& xml) { } while (result != nullptr); to_count--; for (int i = 0; i < to_count; ++i) { - user_defined_spars.push_back( + user_defined_front_spars.push_back( Spar("program_settings/tandem/cantilever/calculation_methods/front_wing/spars/" "parameters/mode_0/spar@" + std::to_string(i) + "/")); - user_defined_spars.back().read(xml); + user_defined_front_spars.back().read(xml); } } diff --git a/wing_design/src/tandem/tandemWingDesignConfig.h b/wing_design/src/tandem/tandemWingDesignConfig.h index 637f4262..7b739939 100644 --- a/wing_design/src/tandem/tandemWingDesignConfig.h +++ b/wing_design/src/tandem/tandemWingDesignConfig.h @@ -1,7 +1,7 @@ /** - * \file tawWingDesignConfig.h + * \file tandemWingDesignConfig.h * \author Christopher Ruwisch (christopher.ruwisch@tu-berlin.de) - * \brief Wing design configuration for tube and wing aircrafts + * \brief Wing design configuration for tandem aircrafts * \version 0.1 * \date 2023-12-14 * @@ -34,7 +34,7 @@ class WingDesignConfig { EndnodeReadOnly<std::string> wing_design_mode; EndnodeReadOnly<std::string> wing_configuration_mode; EndnodeReadOnly<std::string> wing_mass_mode; - //EndnodeReadOnly<std::string> back_wing_mass_mode; + /* Design */ /* Data for method - wing area calculation */ @@ -46,9 +46,9 @@ class WingDesignConfig { /* Data for method - quarter chord sweep calculation */ EndnodeReadOnly<std::string> sweep_calculation_mode; - EndnodeReadOnly<double> user_sweep_angle_at_quarter_chord; - EndnodeReadOnly<double> korn_technology_factor; - EndnodeReadOnly<double> delta_drag_divergence_to_mach_design; + EndnodeReadOnly<double> user_front_sweep_angle_at_quarter_chord; + EndnodeReadOnly<double> front_korn_technology_factor; + EndnodeReadOnly<double> front_delta_drag_divergence_to_mach_design; EndnodeReadOnly<double> user_back_sweep_angle_at_quarter_chord; EndnodeReadOnly<double> back_korn_technology_factor; @@ -56,46 +56,46 @@ class WingDesignConfig { /* Data for method - taper ratio calculation */ EndnodeReadOnly<std::string> taper_ratio_calculation_mode; - EndnodeReadOnly<double> user_taper_ratio; + EndnodeReadOnly<double> user_front_taper_ratio; EndnodeReadOnly<double> user_back_taper_ratio; /* Data for method - aspect ratio calculation */ EndnodeReadOnly<std::string> aspect_ratio_calculation_mode; - EndnodeReadOnly<double> user_aspect_ratio; + EndnodeReadOnly<double> user_front_aspect_ratio; EndnodeReadOnly<double> user_back_aspect_ratio; /* Data for method - dihedral calculation*/ EndnodeReadOnly<std::string> dihedral_calculation_mode; - EndnodeReadOnly<double> user_dihedral; + EndnodeReadOnly<double> user_front_dihedral; EndnodeReadOnly<double> user_back_dihedral; - //TODO kayra: seperate mode switches after that - EndnodeReadOnly<std::string> relative_kink_position_calculation_mode; - EndnodeReadOnly<double> user_relative_kink; + //TODO kayra: seperated mode switches after here + EndnodeReadOnly<std::string> front_relative_kink_position_calculation_mode; + EndnodeReadOnly<double> user_front_relative_kink; EndnodeReadOnly<std::string> back_relative_kink_position_calculation_mode; EndnodeReadOnly<double> user_back_relative_kink; - EndnodeReadOnly<double> user_max_inner_trailing_edge_sweep; + EndnodeReadOnly<double> user_front_max_inner_trailing_edge_sweep; EndnodeReadOnly<double> user_back_max_inner_trailing_edge_sweep; - EndnodeReadOnly<double> track_based_initial_relative_kink; - EndnodeReadOnly<double> track_based_max_inner_trailing_edge_sweep; + EndnodeReadOnly<double> track_based_front_initial_relative_kink; + EndnodeReadOnly<double> track_based_front_max_inner_trailing_edge_sweep; EndnodeReadOnly<double> track_based_back_initial_relative_kink; EndnodeReadOnly<double> track_based_back_max_inner_trailing_edge_sweep; /* Data for method - wing profile and thickness calculation */ - EndnodeReadOnly<std::string> wing_profile_and_thickness_calculation_mode; - std::vector<EndnodeReadOnly<std::string>> user_wing_profiles; - std::vector<EndnodeReadOnly<double>> user_thickness_to_chord; - std::vector<EndnodeReadOnly<double>> user_eta; - std::vector<std::tuple<double, double, std::string>> user_wing_profiles_and_thickness_vector; - EndnodeReadOnly<std::string> torenbeek_jenkinson_wing_profile; - EndnodeReadOnly<double> max_thickness_to_chord_ratio; - EndnodeReadOnly<double> airfoil_critical_factor; + EndnodeReadOnly<std::string> front_wing_profile_and_thickness_calculation_mode; + std::vector<EndnodeReadOnly<std::string>> user_front_wing_profiles; + std::vector<EndnodeReadOnly<double>> user_front_thickness_to_chord; + std::vector<EndnodeReadOnly<double>> user_front_eta; + std::vector<std::tuple<double, double, std::string>> user_front_wing_profiles_and_thickness_vector; + EndnodeReadOnly<std::string> front_torenbeek_jenkinson_wing_profile; + EndnodeReadOnly<double> front_max_thickness_to_chord_ratio; + EndnodeReadOnly<double> front_airfoil_critical_factor; EndnodeReadOnly<std::string> back_wing_profile_and_thickness_calculation_mode; std::vector<EndnodeReadOnly<std::string>> user_back_wing_profiles; @@ -110,10 +110,10 @@ class WingDesignConfig { // flops mass method - EndnodeReadOnly<double> flops_fstrt; - EndnodeReadOnly<double> flops_faert; - EndnodeReadOnly<double> flops_fcomp; - EndnodeReadOnly<double> flops_technology_factor; + EndnodeReadOnly<double> front_flops_fstrt; + EndnodeReadOnly<double> front_flops_faert; + EndnodeReadOnly<double> front_flops_fcomp; + EndnodeReadOnly<double> front_flops_technology_factor; EndnodeReadOnly<double> back_flops_fstrt; EndnodeReadOnly<double> back_flops_faert; @@ -121,17 +121,17 @@ class WingDesignConfig { EndnodeReadOnly<double> back_flops_technology_factor; // chiozzotto wer mass method - EndnodeReadOnly<double> chiozzotto_technology_factor; - EndnodeReadOnly<std::string> chiozzotto_material; + EndnodeReadOnly<double> front_chiozzotto_technology_factor; + EndnodeReadOnly<std::string> front_chiozzotto_material; EndnodeReadOnly<double> back_chiozzotto_technology_factor; EndnodeReadOnly<std::string> back_chiozzotto_material; /* Data for method - control devices */ - EndnodeReadOnly<std::string> control_device_mode; - std::vector<ControlDevice> user_defined_control_devices; - EndnodeReadOnly<std::string> high_lift_device_type_leading_edge; - EndnodeReadOnly<std::string> high_lift_device_type_trailing_edge; + EndnodeReadOnly<std::string> front_control_device_mode; + std::vector<ControlDevice> user_defined_front_control_devices; + EndnodeReadOnly<std::string> front_high_lift_device_type_leading_edge; + EndnodeReadOnly<std::string> front_high_lift_device_type_trailing_edge; EndnodeReadOnly<std::string> back_control_device_mode; std::vector<ControlDevice> user_defined_back_control_devices; @@ -139,8 +139,8 @@ class WingDesignConfig { EndnodeReadOnly<std::string> back_high_lift_device_type_trailing_edge; /* Data for method - spars */ - EndnodeReadOnly<std::string> spars_mode; - std::vector<Spar> user_defined_spars; + EndnodeReadOnly<std::string> front_spars_mode; + std::vector<Spar> user_defined_front_spars; EndnodeReadOnly<std::string> back_spars_mode; std::vector<Spar> user_defined_back_spars; diff --git a/wing_design/src/tandem/tandemWingDesignData.cpp b/wing_design/src/tandem/tandemWingDesignData.cpp index 38cf34c8..fdf849c2 100644 --- a/wing_design/src/tandem/tandemWingDesignData.cpp +++ b/wing_design/src/tandem/tandemWingDesignData.cpp @@ -16,7 +16,7 @@ tandem::cantilever::WingDesignData::WingDesignData() : specification_icao_aerodrome_reference_code( EndnodeReadOnly<std::string>("requirements_and_specifications/requirements/top_level_aircraft_requirements/" "icao_aerodrome_reference_code")), - specification_wing_mounting( + specification_front_wing_mounting( EndnodeReadOnly<std::string>("requirements_and_specifications/design_specification/configuration/wing_definition/tandem_wing_mounting/front_mounting")), specification_back_wing_mounting( EndnodeReadOnly<std::string>("requirements_and_specifications/design_specification/configuration/wing_definition/tandem_wing_mounting/back_mounting")), @@ -43,7 +43,7 @@ tandem::cantilever::WingDesignData::WingDesignData() void tandem::cantilever::WingDesignData::read(const node& xml) { specification_icao_aerodrome_reference_code.read(xml); - specification_wing_mounting.read(xml); + specification_front_wing_mounting.read(xml); specification_back_wing_mounting.read(xml); specification_longitudinal_position.read(xml); specification_landing_gear_mounting.read(xml); @@ -107,11 +107,11 @@ void tandem::cantilever::WingDesignData::read_fuselage(std::filesystem::path pat fuselage = fuselage_factory.create("fuselage/specific/geometry/fuselage@0"); } -void tandem::cantilever::WingDesignData::update_wing(node& xml) { - geom2::io::SurfaceType io = geom2::io::Wing(wing); +void tandem::cantilever::WingDesignData::update_front_wing(node& xml) { + geom2::io::SurfaceType io = geom2::io::Wing(front_wing); const std::string path_to_geometry = "component_design/wing/specific/geometry"; std::visit(geom2::io::AixmlConverter(xml[path_to_geometry], - {"aerodynamic_surface", "0", wing.name}), + {"aerodynamic_surface", "0", front_wing.name}), io); } @@ -123,13 +123,13 @@ void tandem::cantilever::WingDesignData::update_back_wing(node& xml) { io); } -void tandem::cantilever::WingDesignData::update_spars(node& xml) { - for (size_t i = 0; i < spars.size(); ++i) { - geom2::io::SurfaceType io_spar = geom2::io::Spar(spars[i]); +void tandem::cantilever::WingDesignData::update_front_spars(node& xml) { + for (size_t i = 0; i < front_spars.size(); ++i) { + geom2::io::SurfaceType io_spar = geom2::io::Spar(front_spars[i]); const std::string path_to_spars = "component_design/wing/specific/geometry/aerodynamic_surface@0/parameters/spars"; std::visit(geom2::io::AixmlConverter( xml[path_to_spars], - {"spar", std::to_string(i), spars[i].name}), + {"spar", std::to_string(i), front_spars[i].name}), io_spar); } } @@ -144,17 +144,17 @@ void tandem::cantilever::WingDesignData::update_back_spars(node& xml) { } } -void tandem::cantilever::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]); +void tandem::cantilever::WingDesignData::update_front_control_devices(node& xml) { + for (size_t i = 0; i < front_control_devices.size(); ++i) { + geom2::io::SurfaceType io_control_device = geom2::io::ControlDevice(front_control_devices[i]); const std::string path_to_control_devices = "component_design/wing/specific/geometry/aerodynamic_surface@0/parameters/control_devices"; std::visit(geom2::io::AixmlConverter( xml[path_to_control_devices], - {"control_device", std::to_string(i), control_devices[i].name}), + {"control_device", std::to_string(i), front_control_devices[i].name}), io_control_device); Endnode<double> min_deflection(path_to_control_devices + "/control_device@" + std::to_string(i) + "/deflection/full_negative_deflection","full negative deflection"); Endnode<double> max_deflection(path_to_control_devices + "/control_device@" + std::to_string(i) + "/deflection/full_positive_deflection","full positive deflection"); - const auto [min, max] = control_devices_deflections[i]; + const auto [min, max] = front_control_devices_deflections[i]; min_deflection.set_unit("rad"); max_deflection.set_unit("rad"); min_deflection.set_value(min); @@ -197,15 +197,15 @@ void tandem::cantilever::WingDesignData::update(node& xml) { wing_position.update(xml); - update_wing(xml); + update_front_wing(xml); update_back_wing(xml); - update_spars(xml); + update_front_spars(xml); update_back_spars(xml); - update_control_devices(xml); + update_front_control_devices(xml); update_back_control_devices(xml); diff --git a/wing_design/src/tandem/tandemWingDesignData.h b/wing_design/src/tandem/tandemWingDesignData.h index 406de77b..68f0b143 100644 --- a/wing_design/src/tandem/tandemWingDesignData.h +++ b/wing_design/src/tandem/tandemWingDesignData.h @@ -1,7 +1,7 @@ /** - * \file tawWingDesignData.h + * \file tandemWingDesignData.h * \author Christopher Ruwisch (christopher.ruwisch@tu-berlin.de) - * \brief Wing design data for tube and wing aircrafts + * \brief Wing design data for tandem aircrafts * \version 0.1 * \date 2023-12-14 * @@ -33,17 +33,17 @@ class WingDesignData { void update(node& xml); - void update_wing(node& xml); + void update_front_wing(node& xml); void update_back_wing(node& xml); - void update_spars(node& xml); + void update_front_spars(node& xml); void update_back_spars(node& xml); - void update_control_devices(node& xml); + void update_front_control_devices(node& xml); void update_back_control_devices(node& xml); EndnodeReadOnly<std::string> specification_icao_aerodrome_reference_code; - EndnodeReadOnly<std::string> specification_wing_mounting; + EndnodeReadOnly<std::string> specification_front_wing_mounting; EndnodeReadOnly<std::string> specification_back_wing_mounting; EndnodeReadOnly<double> specification_longitudinal_position; EndnodeReadOnly<std::string> specification_landing_gear_mounting; @@ -52,7 +52,7 @@ class WingDesignData { EndnodeReadOnly<double> specification_design_altitude; EndnodeReadOnly<double> specification_maximum_load_factor; EndnodeReadOnly<double> sizing_point_wing_loading; - EndnodeReadOnly<double> track_based_relative_kink; + EndnodeReadOnly<double> track_based_front_relative_kink; EndnodeReadOnly<double> track_based_back_relative_kink; Endnode<double> spanwise_kink; @@ -67,15 +67,15 @@ class WingDesignData { PositionIO center_of_gravity_mtom; geom2::MultisectionSurface<geom2::PolygonSection> fuselage; - geom2::MultisectionSurface<geom2::AirfoilSection> wing; + geom2::MultisectionSurface<geom2::AirfoilSection> front_wing; geom2::MultisectionSurface<geom2::AirfoilSection> back_wing; - std::vector<geom2::MultisectionSurface<geom2::PolygonSection>> control_devices; - std::vector<std::tuple<double,double>> control_devices_deflections; + std::vector<geom2::MultisectionSurface<geom2::PolygonSection>> front_control_devices; + std::vector<std::tuple<double,double>> front_control_devices_deflections; std::vector<geom2::MultisectionSurface<geom2::PolygonSection>> back_control_devices; std::vector<std::tuple<double,double>> back_control_devices_deflections; - std::vector<geom2::MultisectionSurface<geom2::PolygonSection>> spars; + std::vector<geom2::MultisectionSurface<geom2::PolygonSection>> front_spars; std::vector<geom2::MultisectionSurface<geom2::PolygonSection>> back_spars; }; -- GitLab