Example PRD
Series-hybrid lift+cruise VTOL (F3)
Propulsion code 3 with lift+cruise VTOL; synthetic fixture values.
Source (read-only): MADETOOL/tests/fixtures/PRD_serhyb_vtol.txt
# ============================================================================= # MADETOOL - Product Requirements Document (PRD) format 1.5 # ============================================================================= # INTEGRATION TEST FIXTURE F3 (decision R6-05, Stage 3): series-hybrid lift+cruise VTOL # (propulsion code 3 x VTOL code 1, vtol.lift_energy = GENERATOR: the lift motors are on # the series-hybrid bus), Group 2 class UAV. 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. Derived from the relaxed starter # fixture PRD_LPC20_relaxed.txt (same airframe class). The engine-generator sustains # cruise and loiter and charges the pack; the pack covers hover and transition peaks. # Propulsion data: components_serhyb_vtol.txt is PE's WO-PE-16 file # (data/propulsion/examples/SYNTHETIC_F3_series_hybrid_vtol_components.txt, PE 1.2.0); # 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 <yasir@alates.tr> | WhatsApp: +90-551-681-9256 # ============================================================================= [prd] format_version = 1.5 revision = "A" date = "2026-10-29" author = "TBD" status = DRAFT [aircraft] name = "TEST-F3-SERHYB-VTOL (series-hybrid lift+cruise VTOL; integration fixture F3)" mission_role = "ISR - EO/IR gimbal, day and night" description = "Integration test fixture F3 for propulsion code 3 and VTOL code 1. Not a requirement set." propulsion_code = 3 # 1..7 (docs/03_CODES.md) propulsion_label = SERIES_HYBRID # optional cross-check of the code vtol_code = 1 # 0..5 vtol_label = LIFT_PLUS_CRUISE # optional cross-check of the code [configuration] layout = CONVENTIONAL tail = V_TAIL wing_position = HIGH fuselage = POD_AND_BOOM cruise_propulsor_position = PUSHER n_cruise_propulsors = 1 landing_gear = SKIDS [payload] mass_max >= 3.0 kg | type = MINIMUM | prio = 1 | src = "test fixture (synthetic)" | note = "R6-05" mass_normal = 3.0 kg | src = "test fixture (synthetic)" | note = "R6-05" volume >= TBD | type = MINIMUM | prio = 3 | src = "test fixture (synthetic)" dims = [250 180 160] mm | src = "test fixture (synthetic)" power_avg = 30 W | src = "test fixture (synthetic)" power_peak = 60 W | src = "test fixture (synthetic)" cg_offset = TBD mount = BELLY_GIMBAL interface = "12 V power, Ethernet video, UART control (example)" droppable = NO [performance] # Endurance / range: normal payload, take-off to landing, reserves EXCLUDED. endurance >= 4.0 h | type = MINIMUM | prio = 1 | src = "test fixture (synthetic)" | note = "R6-05" range >= 150 km | type = MINIMUM | prio = 2 | src = "test fixture (synthetic)" | note = "R6-05" speed_max_level >= 32 m/s TAS | alt = CRUISE | isa_dev = 0 K | type = MINIMUM | prio = 2 | src = "test fixture (synthetic)" | note = "R6-05" speed_cruise = 25 m/s TAS | alt = CRUISE | isa_dev = 0 K | type = TARGET | tol = 5 % | prio = 2 | src = "test fixture (synthetic)" | note = "R6-05" speed_stall <= 16 m/s EAS | config = CLEAN | type = TARGET | tol = 1 m/s | prio = 3 | src = "test fixture (synthetic)" altitude_max >= 3000 m MSL | isa_dev = 0 K | type = MINIMUM | prio = 2 | src = "test fixture (synthetic)" altitude_cruise = 800 m AGL | isa_dev = 0 K | type = TARGET | tol = 100 m | prio = 2 | src = "test fixture (synthetic)" climb_rate >= 2.5 m/s | alt = SITE | type = MINIMUM | prio = 3 | src = "test fixture (synthetic)" [constraints] mtow <= 55 lb | type = HARD_LIMIT | prio = 1 | src = "test fixture (synthetic)" | note = "R6-05, R7-15: DoD Group 2 upper weight 55 lb = 24.95 kg (25 kg would allow Group 3 by weight)" wingspan <= 4.0 m | type = HARD_LIMIT | prio = 1 | src = "test fixture (synthetic)" | note = "R6-05" length <= 2.5 m | type = PREFERENCE | prio = 4 | src = "test fixture (synthetic)" height <= NONE | type = PREFERENCE | prio = 5 | src = "test fixture (synthetic)" [launch_recovery] takeoff_method = VTOL # VTOL RUNWAY HAND CATAPULT BUNGEE ROCKET_ASSIST VEHICLE_ROOF recovery_method = VTOL # VTOL RUNWAY BELLY PARACHUTE NET DEEP_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 = 35 degC at sea level" enroute_isa_dev = 0 K | src = "test fixture (synthetic)" wind_mean = 8 m/s | src = "test fixture (synthetic)" wind_gust = 12 m/s | src = "test fixture (synthetic)" crosswind = 6 m/s | src = "test fixture (synthetic)" | note = "if omitted, wind_mean is used as crosswind" runway_length = NONE runway_surface = NONE [vtol] lift_energy = GENERATOR # SHARED_BATTERY DEDICATED_BATTERY GENERATOR (R6-05: lift motors on the series-hybrid bus) n_lift_rotors = 4 lift_rotor_diameter = 0.56 m | src = "test fixture (synthetic)" | note = "22 in; AUTO = largest rotor that fits (rotor_clearance) or the rotor at disk_loading_max" rotor_clearance = 0.05 m | src = "test fixture (synthetic)" | note = "plan-view clearance of the rotor disks (rotor-fit rule); AERO 0.3.1 has no built-in value (R3-11, CR-AERO-09)" hover_tw_min >= 1.5 | type = HARD_LIMIT | prio = 1 | src = "test fixture (synthetic)" | note = "R6-05; max lift thrust / weight, site hot day" disk_loading_max <= NONE | type = PREFERENCE | prio = 5 | src = "test fixture (synthetic)" [mission] name = "ISR endurance / range" cruise_speed_policy = FIXED # FIXED uses performance.speed_cruise loiter_speed_policy = BEST_ENDURANCE climb_rate = 2.5 m/s | src = "test fixture (synthetic)" descent_rate = 2.0 m/s | src = "test fixture (synthetic)" vertical_climb_rate = 2.0 m/s | src = "test fixture (synthetic)" vertical_descent_rate = 1.0 m/s | src = "test fixture (synthetic)" headwind = 0 m/s # 0 = still-air range warmup_time = 3 min | src = "test fixture (synthetic)" | note = "engine-generator warm-up before the vertical take-off" hover_time_takeoff = 30 s | src = "test fixture (synthetic)" hover_time_landing = 45 s | src = "test fixture (synthetic)" hover_height = 20 m AGL | src = "test fixture (synthetic)" transition_time_fwd = 15 s | src = "test fixture (synthetic)" transition_time_back = 20 s | src = "test fixture (synthetic)" custom_profile = NO # custom_payload = NORMAL # NORMAL | MAX - required when custom_profile = YES [mission.custom] # Read only when mission.custom_profile = YES. Example profile: # seg01 = VTOL_TAKEOFF | time = 30 s | height = 20 m AGL (climb at vertical_climb_rate, then hover) # seg02 = TRANSITION_FWD | time = 15 s # seg03 = CLIMB | to = CRUISE | rate = 2.5 m/s # seg04 = CRUISE | distance = 30 km | speed = CRUISE # seg05 = LOITER | time = 90 min | speed = BEST_ENDURANCE # seg06 = CRUISE | distance = 30 km | speed = BEST_RANGE # seg07 = DESCENT | to = 20 m AGL | rate = 2 m/s # seg08 = TRANSITION_BACK | time = 20 s # seg09 = VTOL_LANDING | time = 45 s | height = 20 m AGL (hover, then vertical descent) [reserves] # All components are added: loiter time + divert distance + extra hover # (flown level at the reserve altitude / hover height from the trip-end state) # + contingency_fraction of the trip energy/fuel; then energy_fraction of the # usable energy/fuel must still remain at landing. time = 10 min | src = "test fixture (synthetic)" altitude = 100 m AGL | src = "test fixture (synthetic)" distance = 0 km | src = "test fixture (synthetic)" hover_time = 30 s | src = "test fixture (synthetic)" energy_fraction = 10 % | src = "test fixture (synthetic)" contingency_fraction = 5 % | src = "test fixture (synthetic)" [component.fuel] type = MOGAS density = 0.74 kg/L | src = "test fixture (synthetic)" lhv = 43.4 MJ/kg | src = "test fixture (synthetic)" | note = "PE 1.2.0 component-file header (WO-PE-16)" unusable_fraction = 3 % | src = "test fixture (synthetic)" [component.engine] # Code 3: the engine of the engine-generator set (PE engine.*, generator.*). mass = AUTO # components file: engine.spec_power_Wkg power_max_sl = AUTO # PE: sustains the cruise-point bus power at cruise altitude (PROP_HYBRID_LOAD_FOLLOWING) bsfc = 600 g/kWh | src = "test fixture (synthetic)" | note = "small two-stroke class value" [component.battery] # High-power pack: hover and transition peaks above the generator rating, in-flight charging. chemistry = LI_PO pack_specific_energy = 150 Wh/kg | src = "test fixture (synthetic)" usable_fraction = 90 % | src = "test fixture (synthetic)" | note = "PE 1.2.0 component-file header (WO-PE-16)" eol_factor = 90 % | src = "test fixture (synthetic)" cell_voltage_nominal = 3.7 V | src = "test fixture (synthetic)" series_cells = 12 | src = "test fixture (synthetic)" capacity = AUTO max_c_rate_cont = AUTO # components file: battery.p_spec_cont_Wkg max_c_rate_peak = AUTO # components file: battery.p_spec_peak_Wkg [component.cruise_motor] mass = AUTO power_max_cont = AUTO kv = AUTO efficiency_max = AUTO [component.cruise_prop] diameter = AUTO pitch = AUTO blades = 2 efficiency_cruise = AUTO [component.lift_motor] mass = AUTO power_max_cont = AUTO kv = AUTO efficiency_max = AUTO [component.lift_rotor] blades = 2 figure_of_merit = 0.60 | src = "test fixture (synthetic)" mass = AUTO [component.esc] efficiency = AUTO [component.avionics] mass = 0.8 kg | src = "test fixture (synthetic)" power = 25 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_serhyb_vtol.txt" # PE format; SYNTHETIC test values aero_data = "aero_serhyb_vtol.txt" # AERO format; SYNTHETIC test values layout = "layout_serhyb_vtol.txt" # MSC format; SYNTHETIC test values [design_choices] mtow_guess = 22 kg | note = "iteration start value only" wing_loading = AUTO aspect_ratio = AUTO taper_ratio = 0.6 | 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. For STANAG 4671 / # STANAG 4703 / USER, enter every value (AUTO is not allowed). 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 <= 2.1 m | type = HARD_LIMIT | prio = 2 | src = "test fixture (synthetic)" | note = "mould / oven size; 2.1 m so that a 4 m wing is built in two halves" [classification] dod_group <= 2 | 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 = 50 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 parameter = "design_choices.aspect_ratio" values = [10 12 14 16] metric = MTOW