Example PRD

Turboprop runway UAV (F5, Group 3)

Propulsion code 5 with runway operations; synthetic fixture values.

Source (read-only): MADETOOL/tests/fixtures/PRD_turboprop_rwy.txt

# =============================================================================
#  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 <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-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
Turboprop runway UAV (F5, Group 3) | MADETOOL by ALATES