# ============================================================================= # MADETOOL - Product Requirements Document (PRD) format 1.5 # ============================================================================= # INTEGRATION TEST FIXTURE F5 (decision R6-05, Stage 3): turboprop (propulsion code 5) # with runway take-off and landing (VTOL code 0), Group 3 class UAV near the upper # Group 3 weight limit (1320 lb), where the flat rating and the altitude lapse of the # turbine matter. Every number is a SYNTHETIC test value (src = "test fixture # (synthetic)"): it is NOT customer, manufacturer or flight data, and the results are # conceptual estimates only. The engine is a rubber turboprop (PE 1.2.0): its flat # rating is sized from the design point, its shape (thermodynamic/flat ratio, # temperature break, part-power PSFC, idle, specific power) comes from # components_turboprop_rwy.txt, which is PE's WO-PE-16 file (data/propulsion/examples/ # SYNTHETIC_F5_turboprop_runway_components.txt, with SYNTHETIC_F5_turboprop_partpower.csv # next to it); the PRD values its header names are set here, once (P-05). # # HOW TO WRITE THIS FILE # ---------------------- # [section] groups keys # key = value unit REF | attr = value ... fixed value / target # key >= value unit REF | ... requirement: must be AT LEAST # key <= value unit REF | ... requirement: must NOT EXCEED # # ... comment (to end of line) # # value : 12.5 3e-4 [300 200 150] "quoted text" WORD # unit : case-sensitive, e.g. m km ft kg lb s min h m/s kt km/h W kW hp # Wh Wh/kg K degC deg % (full list: docs/02_PRD_SCHEMA.md) # REF : airspeeds MUST state TAS | EAS | CAS | IAS # altitudes MUST state AGL | MSL (AGL is from site_elevation) # keyword : TBD = not known yet (never treated as zero) # NONE = no limit / not applicable # AUTO = the tool sizes/estimates it # DEFAULT = use the model default (model options only) # # Requirement attributes (after "|"): # type = HARD_LIMIT must never be violated # MINIMUM minimum acceptable capability; FAIL if not met # TARGET desired value; deviation reported (tol = allowed deviation) # PREFERENCE nice to have; ranks trade-study options # prio = 1 (highest) .. 5 src = where the number comes from # id = "customer ID" note = "free text" # Operating condition: alt = 1000 m MSL | CRUISE | SITE # isa_dev = 15 K or oat = 35 degC # config = CLEAN | TAKEOFF | LANDING # If no isa_dev/oat is given: alt = SITE uses site_isa_dev, # every other condition uses enroute_isa_dev. # # Author: Syed Yasir Rehan Ali | WhatsApp: +90-551-681-9256 # ============================================================================= [prd] format_version = 1.5 revision = "A" date = "2026-10-29" author = "TBD" status = DRAFT [aircraft] name = "TEST-F5-TURBOPROP-RWY (tractor turboprop, runway; integration fixture F5)" mission_role = "ISR - EO/IR turret, long endurance" description = "Integration test fixture F5 for propulsion code 5 and VTOL code 0. Not a requirement set." propulsion_code = 5 # 1..7 (docs/03_CODES.md) propulsion_label = TURBOPROP # optional cross-check of the code vtol_code = 0 # 0..5 vtol_label = NONE # optional cross-check of the code [configuration] layout = CONVENTIONAL tail = CONVENTIONAL wing_position = HIGH fuselage = FUSELAGE cruise_propulsor_position = TRACTOR n_cruise_propulsors = 1 landing_gear = FIXED_TRICYCLE [payload] mass_max >= 60 kg | type = MINIMUM | prio = 1 | src = "test fixture (synthetic)" | note = "R6-05" mass_normal = 60 kg | src = "test fixture (synthetic)" | note = "R6-05: the endurance and range cases carry the full payload" volume >= TBD | type = MINIMUM | prio = 3 | src = "test fixture (synthetic)" dims = [450 400 450] mm | src = "test fixture (synthetic)" power_avg = 300 W | src = "test fixture (synthetic)" power_peak = 500 W | src = "test fixture (synthetic)" cg_offset = TBD mount = INTERNAL_BAY # AERO's F5 airframe: internal payload bay (aero_turboprop_rwy.txt = AERO's aero_data_F5.txt with two documented position changes, WO-INTEG-23a) interface = "28 V power, Ethernet video (example)" droppable = NO [performance] # Endurance / range: normal payload, take-off to landing, reserves EXCLUDED. endurance >= 8.0 h | type = MINIMUM | prio = 1 | src = "test fixture (synthetic)" | note = "R6-05" range >= 1000 km | type = MINIMUM | prio = 2 | src = "test fixture (synthetic)" | note = "added by INTEG (R6-05 gives none) so that the cruise case at 60 m/s TAS is flown" speed_max_level >= 75 m/s TAS | alt = CRUISE | isa_dev = 0 K | type = MINIMUM | prio = 2 | src = "test fixture (synthetic)" | note = "R6-05" speed_cruise = 60 m/s TAS | alt = CRUISE | isa_dev = 0 K | type = TARGET | tol = 5 % | prio = 2 | src = "test fixture (synthetic)" | note = "R6-05" speed_stall <= 32 m/s EAS | config = CLEAN | type = TARGET | tol = 2 m/s | prio = 3 | src = "test fixture (synthetic)" altitude_max >= 5000 m MSL | isa_dev = 0 K | type = MINIMUM | prio = 2 | src = "test fixture (synthetic)" | note = "R6-05" altitude_cruise = 3000 m MSL | isa_dev = 0 K | type = TARGET | tol = 100 m | prio = 2 | src = "test fixture (synthetic)" | note = "R6-05" climb_rate >= 3.0 m/s | alt = SITE | type = MINIMUM | prio = 3 | src = "test fixture (synthetic)" [constraints] mtow <= 590 kg | type = HARD_LIMIT | prio = 1 | src = "test fixture (synthetic)" | note = "R6-05; DoD Group 3 limit 1320 lb = 598.7 kg" wingspan <= 10 m | type = HARD_LIMIT | prio = 1 | src = "test fixture (synthetic)" | note = "R6-05" length <= 8.0 m | type = PREFERENCE | prio = 4 | src = "test fixture (synthetic)" height <= NONE | type = PREFERENCE | prio = 5 | src = "test fixture (synthetic)" [launch_recovery] takeoff_distance <= 500 m | type = MINIMUM | prio = 2 | src = "test fixture (synthetic)" | note = "R6-05" landing_distance <= 600 m | type = MINIMUM | prio = 2 | src = "test fixture (synthetic)" | note = "R6-05; = runway_length" takeoff_method = RUNWAY # VTOL RUNWAY HAND CATAPULT BUNGEE ROCKET_ASSIST VEHICLE_ROOF recovery_method = RUNWAY # VTOL RUNWAY BELLY PARACHUTE NET DEEP_STALL approach_angle = 4 deg | src = "test fixture (synthetic)" braking_friction = 0.3 | src = "test fixture (synthetic)" | note = "wheel brakes on" free_roll_time = 2 s | src = "test fixture (synthetic)" landing_speed_schedule = MILITARY | src = "user decision 2026-10-28 (D-22)" | note = "approach 1.2, flare 1.15, touchdown 1.1 x V_stall" [environment] site_elevation = 100 m MSL | src = "test fixture (synthetic)" site_isa_dev = 20 K | src = "test fixture (synthetic)" | note = "hot day ISA+20 K: engine-face theta_t2 = 1.067 at take-off, below the flat-rating break theta_break = 1.10 (PE 1.2.0 component-file header (WO-PE-16))" enroute_isa_dev = 0 K | src = "test fixture (synthetic)" wind_mean = 10 m/s | src = "test fixture (synthetic)" wind_gust = 15 m/s | src = "test fixture (synthetic)" crosswind = 8 m/s | src = "test fixture (synthetic)" runway_length = 600 m | src = "test fixture (synthetic)" runway_surface = PAVED obstacle_height = 15 m | src = "test fixture (synthetic)" [vtol] # not used: vtol_code = 0 [mission] name = "ISR endurance / range" cruise_speed_policy = FIXED # FIXED uses performance.speed_cruise loiter_speed_policy = BEST_ENDURANCE climb_rate = 3.0 m/s | src = "test fixture (synthetic)" descent_rate = 3.0 m/s | src = "test fixture (synthetic)" headwind = 0 m/s # 0 = still-air range warmup_time = 5 min | src = "test fixture (synthetic)" custom_profile = NO [mission.custom] # not used: custom_profile = NO [reserves] # All components are added: loiter time + divert distance + extra hover # (flown level at the reserve altitude / hover height) + contingency_fraction of # the trip fuel; then energy_fraction of the usable fuel must still remain at landing. # Format 1.5: reserves.placement defaults to HOLD_BEFORE_LANDING (R5-04). time = 30 min | src = "test fixture (synthetic)" altitude = 500 m AGL | src = "test fixture (synthetic)" distance = 0 km | src = "test fixture (synthetic)" hover_time = 0 s energy_fraction = 5 % | src = "test fixture (synthetic)" contingency_fraction = 5 % | src = "test fixture (synthetic)" [component.fuel] type = JET_A density = 0.80 kg/L | src = "test fixture (synthetic)" lhv = 43.2 MJ/kg | src = "test fixture (synthetic)" | note = "PE generic Jet A value; PE 1.2.0 component-file header (WO-PE-16)" unusable_fraction = 2 % | src = "test fixture (synthetic)" [component.engine] # Code 5: rubber turboprop (PE 1.2.0, engine fidelity 1): flat rating = P/W x W at SL ISA # static; mass = SLS power / turboprop.spec_power_Wkg (components file). mass = AUTO power_max_sl = AUTO bsfc = 450 g/kWh | src = "test fixture (synthetic)" | note = "turboprop PSFC at maximum power; PE 1.2.0 component-file header (WO-PE-16)" data_file = "" # no engine deck (level-2 referred-parameter model) [component.battery] # not used: no propulsion battery (hotel load from the engine-driven generator) [component.cruise_motor] # not used [component.cruise_prop] diameter = AUTO # components file: cruise.prop.D_m pitch = AUTO blades = 3 efficiency_cruise = AUTO [component.lift_motor] # not used [component.lift_rotor] # not used [component.esc] # not used [component.avionics] mass = 12 kg | src = "test fixture (synthetic)" power = 150 W | src = "test fixture (synthetic)" [component.airfoil_wing] name = "NACA 4412" | src = "test fixture (synthetic)" data_file = "" cl_max_2d = AUTO cd_min_2d = AUTO cm_ac = AUTO alpha_zero_lift = AUTO [data_files] # External data files owned by the specialist modules; paths are relative to # this PRD's folder. "" = not used. A value may be given in a data file OR in # [component.*], not both. propulsion_components = "components_turboprop_rwy.txt" # PE format; SYNTHETIC test values aero_data = "aero_turboprop_rwy.txt" # AERO format; SYNTHETIC test values layout = "layout_turboprop_rwy.txt" # MSC format; SYNTHETIC test values [design_choices] mtow_guess = 450 kg | note = "iteration start value only" wing_loading = AUTO aspect_ratio = AUTO # rule D-07: AR = b_max^2 / S, at most aspect_ratio_max taper_ratio = 0.5 | src = "test fixture (synthetic)" sweep_c4 = 0 deg dihedral = 2 deg | src = "test fixture (synthetic)" thickness_ratio = 12 % | note = "consistent with NACA 4412" tail_volume_h = AUTO tail_volume_v = AUTO power_loading = AUTO [stability] static_margin_min >= 5 % | type = HARD_LIMIT | prio = 1 | src = "test fixture (synthetic)" static_margin_max <= 20 % | type = PREFERENCE | prio = 4 | src = "test fixture (synthetic)" [loads] # PART23_PRE_A64 = 14 CFR Part 23 normal category before Amendment 23-64: public # reference values only, NOT a UAS airworthiness requirement. basis = PART23_PRE_A64 n_limit_pos = AUTO n_limit_neg = AUTO factor_of_safety = 1.5 | src = "test fixture (synthetic)" | note = "14 CFR 23.303 (pre-Amdt 23-64) uses 1.5 for manned aircraft; confirm for this UAS" gust_ude_vc = AUTO gust_ude_vd = AUTO [manufacturing] structure_material = CFRP_GFRP process = VACUUM_INFUSION max_part_length <= 7.5 m | type = HARD_LIMIT | prio = 2 | src = "test fixture (synthetic)" | note = "mould / oven size: one-piece fuselage (AERO's F5 airframe 7.2 m, as AERO's PRD_aero_F5), two wing halves" [classification] dod_group <= 3 | type = HARD_LIMIT | prio = 1 | src = "test fixture (synthetic)" dod_table = DOD_UAS_GROUPS civil_jurisdiction = "Turkey (SHGM) - informational only; civil rules are separate inputs" [model] sizing_mode = SIZE_TO_MISSION # or FIXED_MTOW (uses constraints.mtow) fidelity_default = 2 # 1 statistical, 2 semi-empirical, 3 user/external data fidelity_sizing = DEFAULT fidelity_aero = DEFAULT fidelity_drag = DEFAULT fidelity_propulsion = DEFAULT fidelity_mass = DEFAULT fidelity_stability = DEFAULT fidelity_performance = DEFAULT allow_fidelity_fallback = NO allow_generic_estimates = NO # YES = labelled generic estimates when component data are missing iter_max = 80 # F5 converged in 16 passes in the build-0.7.0 gate (49 on the round-6 airframe: alternating Wegstein steps, handoff R-15): headroom for the long test iter_tol = 1e-4 iter_relax = 0.5 mass_margin = 10 % | src = "test fixture (synthetic)" | note = "empty-mass growth margin" ceiling_roc_min = 100 ft/min | note = "service-ceiling definition; confirm convention" report_units = SI_PLUS_US output_dir = "out" make_plots = NO timestamp_outputs = YES debug = NO [trade] enable = NO