Theory Manual
User Manual:
Open the PDF directly: View PDF .
Page Count: 128
Download | |
Open PDF In Browser | View PDF |
HYDRA: Rotorcraft Conceptual Sizing Authors Ananth Sridharan Bharath Govindarajan This is the analysis manual for the rotorcraft conceptual sizing analysis HYDRA HYbrid Design and Rotorcraft Analysis, developed and evolved over several years at the University of Maryland, with inspiration drawn from the AHS Student Design Competition challenges. This manual contains a description of the theory and various operations performed by the sizing code for both conventional and novel Vertical-Lift aircraft. The main advantages of HYDRA over other sizing codes are flexibility, speed and reliance on only open-source tools. With the majority of the code written in an interpreted language, i.e., Python, modules can be prototyped and added quickly. Subsequently select parts of the code can be ported to Fortran or C (i.e., compiled languages) and wrapped for execution sppeed. Using a combination of OpenMP, MPI and algorithmic acceleration, up to 2000 designs can be generated per second on a standard desktop computer with 8 cores. Another advantage of HYDRA is the ability to set up input decks and call higher fidelity models (BEMT, FEA for airframe and wings) and the comprehensive analysis PRASADUM, and through the comprehensive analysis, the Maryland Free Wake (MFW). These higher-fidelity tools are integrated into the sizing loop to provide accurate estimates of rotor performance and component weights, and may be invoked as required. Contents List of Abbreviations ii 1 VTOL sizing: Overview 1 1.1 The nature of VTOL sizing . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.1 Iterative convergence . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.2 Constrained optimziation . . . . . . . . . . . . . . . . . . . . . 10 2 Drag models 2.1 Fuselage and empennage drag . . . . . 2.2 Edgewise rotor hub drag . . . . . . . . 2.3 Spinner drag . . . . . . . . . . . . . . . 2.4 Momentum drag for engine air intakes 2.5 Landing gear drag . . . . . . . . . . . . 2.6 Cooling drag . . . . . . . . . . . . . . . 2.7 Mast fairing drag for coaxial rotors . . 2.8 Protrusion drag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 12 12 12 13 14 14 14 3 Rotor and Wing Performance Models 3.1 Rotor performance model . . . . . . . . . . . . . . 3.1.1 Momentum Theory . . . . . . . . . . . . . . 3.1.2 Blade Element Momentum Theory (BEMT) 3.2 Wing performance model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 14 15 15 18 4 Weight models 4.1 Engines, fuel and batteries . . . . . . . . . . 4.1.1 Engines . . . . . . . . . . . . . . . . 4.1.2 Fuel, tank and fuel handling systems 4.1.3 Battery models . . . . . . . . . . . . 4.1.4 Electric motor weights . . . . . . . . 4.2 Electric Transmissions . . . . . . . . . . . . 4.3 Wire weights . . . . . . . . . . . . . . . . . 4.4 Physics based model for rotor blades . . . . 4.4.1 Skin sizing . . . . . . . . . . . . . . . 4.4.2 Leading edge weight . . . . . . . . . 4.4.3 Spar caps and shear web sizing . . . 4.4.4 Root fitting sizing . . . . . . . . . . . 4.4.5 Torsion frequency check . . . . . . . 4.5 Flight controls . . . . . . . . . . . . . . . . . 4.5.1 Rotor controls . . . . . . . . . . . . . 4.5.2 Fixed wing controls . . . . . . . . . . 4.5.3 Tilt actuators . . . . . . . . . . . . . 4.6 Motor mount mass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 19 21 23 25 25 27 28 29 29 30 34 34 35 35 36 36 36 ii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7 Wing weight model . . . . . . . . . . . . 4.7.1 AFDD wing weight model . . . . 4.7.2 Frequency tuning: bending loads 4.7.3 Hover: shear loads . . . . . . . . 4.8 Airframe Weight Model . . . . . . . . . . 4.8.1 Statistical weight model . . . . . 4.8.2 Physics-based weight model . . . 4.9 Weight margin . . . . . . . . . . . . . . 4.10 Fixed weight groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Analysis Organization 5.1 Programming Language and Syntax . . . . . . . . . . . . . . 5.2 Pre-Requisites and Installation Notes . . . . . . . . . . . . . 5.3 Source Code Directories . . . . . . . . . . . . . . . . . . . . . 5.3.1 Python code: src/Python . . . . . . . . . . . . . . . . 5.3.2 NETLIB FILES: Source/fea/Source/mathops/ . . . 5.3.3 Python-integrated routines: Source/pyint_files/ . . 5.3.4 Python-accesible modules: Source/pyint_modules/ 5.3.5 Python-invisible files: Source/pyinv_files/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 38 38 39 40 40 41 45 45 . . . . . . . . 46 46 47 48 48 49 49 49 50 6 First-time setup 51 6.1 Installing pre-requisites . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.2 Compiling source code . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.3 MacOS-specific issues . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7 Input files 7.1 input.yaml . . . . . . . . . . . 7.1.1 Sizing . . . . . . . . . . 7.1.2 Vehicle configuration 7.1.3 Mission profile . . . . 7.1.4 Aircraft . . . . . . . . . 7.2 defaults.yaml . . . . . . . . . 7.2.1 Sizing dictionary . . . . 7.2.2 Empirical parameters . 7.2.3 Acquisition cost model 7.2.4 Operations . . . . . . . 7.2.5 Redundant systems . . 8 Output files 8.1 log.yaml . . . . . 8.1.1 vehicle summary . . 8.1.2 Rotor . . . . . . . . 8.1.3 Wings . . . . . . . . 8.1.4 Costs . . . . . . . . 8.1.5 Weight breakdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 55 58 61 62 63 65 65 66 71 74 77 . . . . . . 78 78 78 79 81 83 86 8.2 8.3 8.1.6 Volumes . . . . 8.1.7 Parasitic drag . 8.1.8 Mission details 8.1.9 Battery details log .txt . . . . summary.dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 89 90 91 92 93 9 Running HYDRA 94 10 Postprocessing 95 A Cantilever beam dynamics A.1 Potential energy . . . . . . . . . . . . . . . . . . A.2 Kinetic energy . . . . . . . . . . . . . . . . . . . A.3 Frequency tuning . . . . . . . . . . . . . . . . . A.4 Validation . . . . . . . . . . . . . . . . . . . . . A.4.1 Case 1: cantilever beam . . . . . . . . . A.4.2 Case 2: distributed non-structural mass . A.4.3 Case 3: half-wing with lumped masses . iv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 . 119 . 120 . 121 . 122 . 122 . 124 . 124 1 VTOL sizing: Overview The objective of rotorcraft sizing is to obtain a consistent combination of weights and performance for the various components in a VTOL platform. The interdependent nature of the design of various parts (e.g., engine, rotors, transmission, fuselage) necessitates methods that capture these dependencies to the required accuracy; otherwise components might be over-designed and heavier/bulkier than required (performance penalty) or under-designed, requiring a costly sequence of redesign operations for all parts in the detailed design phase. Sizing for vertical-lift aircraft is not a new field; the fundamental methods have been adapted from fixed-wing sizing and augmented with VTOL-specific components, and refined over several decades. A notable example of a VTOL sizing algorithm is the method of Prof. Marat Tishchenko (MIL design bureau) and Dr. V.T. Nagaraj; this combination of component sizing laws and the iterative sizing sequence is one of the cornerstones of HYDRA. Recent work by Dr. Wayne Johnson at NASA Ames produced several iterations of a continuously updated NASA code called NDARC. This code can size conventional and unconventional VTOL platforms, as well as a range of fixed-wing aircraft. Additionally, each major helicopter manufacturer has built up a database of manufactured part weights and performance, and have developed their respective in-house sizing tools. These sizing tools were originally developed for single main rotor helicopters powered by gas turbine engines, and have been gradually adapted 1 to include eVTOLs (electric Vertical TakeOff and Landing platforms) and configurations with hybrid powerplants featuring Distributed Electric Propulsion (DEP). 1.1 The nature of VTOL sizing Table 1: Conceptual sizing: drivers for group mass Group name Fixed wing Rotors Empennage Mass depends on Aspect ratio, wing loading → take-off mass Radius, solidity, RPM, torque, thrust → take-off mass Tail loading, pitch/yaw stability and control authority Propeller Vehicle drag → take-off mass Fuselage Dimensions, take-off mass Take-off mass Landing gear Flight controls Blade geometry, wing area, wing loading → take-off mass Deicing Wing area, rotor blade area → take-off mass Battery C-rating, specific energy, rotor power → take-off mass Motor Maximum torque/power → take-off mass Avionics Fixed mass group Power wire Layout of rotors and motor power limits → take-off mass Signal wire Layout of controls and sensors 2 To illustrate the interdependent nature of sizing laws for various components, consider the dominant drivers for the weights of various vehicle components in an eVTOL, shown in Table 1. The list of dependencies is illustrative and not exhaustive, but sufficient to highlight the key point: determination of take-off mass requires solving for several cyclic dependencies, i.e., the total take-off mass depends on itself. Two well-known methods have been successfully used to solve this class of problems with simultaneous nonlinear equations: 1. Iterative convergence 2. Optimization with compatibility constraints The implementations of both approaches in HYDRA are detailed in the following sections. 1.1.1 Iterative convergence Iterative convergence is a popular technique that is used to solve several classes of problems. It has been successfully applied to nonlinear algebraic equations in several variables, where analytical solutions are unavailable. The overall approach is shown in Fig. 1. Four primary types of models are required for conceptual sizing: 1. Weight 2. Performance 3. Sizing and geometry 4. Energy storage 3 Figure 1: Iterative sizing: the classical approach Typically, low-fidelity models are used to represent each group for conceptual sizing, because fine-grained resolution of each component is not possible at this stage due to the unavailability of design details. For VTOL sizing in particular, sizing operations can be executed in a particular sequence to obtain answers rapidly with fewer sizing iterations. One such sequence is shown in Fig. 2. Each block shown in Fig. 2 consists of further sub-modules that are assembled together in the implementation. The key inputs for sizing are the three green blocks that feed information to the sizing of the vehicle: aircraft layout, mission profile and model calibration data. The aircraft layout is perhaps the most significant assumption required to initiate sizing. Figure 3 shows a few candidate eVTOL configurations, with different permutations and combinations of rotor and wing technologies, as shown in Fig. 4. In HYDRA, the constituent rotor and wing technologies are defined as primitive types. Based on user inputs, these technology combinations are superimposed in HYDRA to obtain the appropriate configuration. 4 Figure 2: Iterative sizing: detailed breakdown of operations 5 Figure 3: Variety in electric VTOL aircraft 6 Figure 4: Assumbling eVTOLs from rotor and wing technologies 7 Figure 5: An example mission profile The mission profile is specified as a sequence of hover and cruise segments. Cruise segments are defined through a specified airspeed and distance/time, while hover segments are defined through duration. Climb and descent segments are defined as cruise segments with different start and end altitudes. An example mission profile is shown in Fig. 5. Finally, the model calibration data refers to calibration constants for parametric models of rotor performance, turboshaft engine performance, electric motors, fuselage drag vs. weight curve fits, and several other assumptions. Typically, up to 30 constants are required to calibrate different low-fidelity models accurately, defined in the defaults.yaml input file. In HYDRA, several parametric models have been systematically replaced with higher-fidelity counterparts and so lift the specific assumptions made to arrive at those constants. Accelerated convergence The implementation of iterative sizing shown in Fig. 1 requires several iterations (up 8 Figure 6: Accelerated convergence for iterative sizing to 30) to converge take-off mass to the required tolerance. An alternate approach is implemented in HYDRA, resulting in significantly faster convergence for no loss in accuracy. This accelerated convergence technique is shown in Fig. 6. In this method, the “inner loop” is executed in fixed take-off mass mode, and the constituent weight groups are evaluated. Finally, the remaining mass (take-off mass minus empty weight, minus energy storage) is assigned to payload mass, i.e., mpay = M − mempty − mbattery − mfuel (1) Here, M represents the take-off mass. Usually, mission profiles are specified together with the target payload mtarget . However, the “inner loop” described above runs once to calculate the payload mass mpay for a given take-off mass M . Therefore, the take-off mass needs to be continuously adjusted to ensure that the “calculated” payload matches the target payload. One update scheme for the take-off mass (used 9 in HYDRA) is Mi+1 The slope dM dmpay = Mi − dM (mpay − mtarget ) dmpay (2) is initially set to 3.0, and subsequently updated based on a finite- difference approximation as iterations proceed. This method usually converges in 3 – 5 updates for take-off mass (vs. 30 iterations for the baseline technique), resulting in 5 – 6 times faster convergence for no reduction in accuracy. 1.1.2 Constrained optimziation The other technique that lends itself to VTOL conceptual sizing is constrained optimization. The primary advantage of this technique is that it allows for simultaneous minimization of a cost function (e.g. vehicle operating cost) while satisfying compatibility constraints (e.g., payload matching and landing footprint). If only sizing is required, the design variables are fed as prescribed inputs and compatibility constraints are specified as nonlinear algebraic constraints. The take-off weight is provided as a design variable and the payload is calculated as an output. The condition that the calculated payload (mpay ) be at least the target mission payload (mtarget ) is enforced as a nonlinear inequality constraint. In HYDRA, two different optimizers are used for constrained minimization of the vehicle hourly operating cost: gradient-based optimization, and differential evolution. The constraints are landing footprint (based on wing span and fuselage length) and payload matching. For concentual sizing, gradient-based optimization requires an accurate initial condition to ensure that global minima (and not local minima) are identified at the end of optimization. In HYDRA, the gradient10 based optimizer is initialized from several starting conditions, each of which are obtained from a parametric sweep over the available high-level design variables. For differential evolution, compatibility constraints are implemented indirectly as a “death penalty” - an analog of exterior penalty functions. The cost function is increased by a large number (1e6) for designs that violate any of the user-specified constraints. Additionally, HYDRA is programmed to automatically add and remove design variables based on the number of rotor and wing groups in the vehicle. The optimizer in HYDRA is invoked after basic sizing over a limited parametric sweep is carried out. Both optimization techniques - gradient based and differential evolution - are used to minimize vehicle operating costs, and the resulting optimized designs are checked for uniqueness. These unique designs (obtained from optimization with different starting conditions) are ranked by operating cost, weight, battery/fuel or rated power based on a user-selected criterion. Further details are provided in the appropriate section later on in the documentation. 2 2.1 Drag models Fuselage and empennage drag The fuselage is modeled as a slender body of revolution with its length set by user inputs, and an equivalent diameter based on body width and height (also set by the user). The procedure to calculate skin friction drag and base drag are identical to those documented in NASA CR-3083: 11 Rotary-Wing Aerodynamics: Volume II by C.N. Keys. Similiarly, the approach for estimating the drag of horizontal and vertical tail surfaces, as documented in NASA CR-3083, is implemented in HYDRA. 2.2 Edgewise rotor hub drag The flat-plate area of each edgewise rotor hub is estimated based on a modified procedure outlined in NASA CR-3083, as follows: fhub 2.3 = 1.2R2 (0.0006 + 0.00222Nb ) (3) Spinner drag The spinner is assumed to be a rotating body with a hemispherical nose and blunt base. As shown in Fig. 7, the drag coefficient of such a shape is 0.2 (referenced to cross-sectional area πd2 /4), for a length-to-diameter ratio of 2.5. For the calculations presented in this paper, a drag coefficient of 0.36 is assumed, to account for additional blockage from the airframe, vertical fins and interference effects. The radius of the spinner is 15% of the rotor radius. 2.4 Momentum drag for engine air intakes For turboshaft engines operating at cruise speeds above 160 knots, the addi- tional momentum drag is 0.3 ft2 per intake. 12 Figure 7: Spinner nose cone:drag coefficient, from Fluid Dynamic Drag, Hoerner 2.5 Landing gear drag The drag of landing gear is modeled with a parametric representation (obtained from NASA CR-3083) as follows: loge fLG = y0 + m loge (0.001W ) (4) Here, fLG is in square feet, and W is in lbs. The constants y0 and m are set based on the type of landing gear. 1. Retracted gear: fLG = 0 2. Wheeled gear: y0 = 0.5755. The slope m = 0.443 for W ≥ 1000 lb, and zero for W ≤ 1000 lb. 3. Skid gear: y0 =-0.11626. The slope m = 0.4979 for W ≥ 1000 lb, and zero for W ≤ 1000 lb. 13 2.6 Cooling drag The cooling systems required to regulate engine temperatures creates addi- tional drag, which is estimated using a parametric model given in NASA CR-3083. fcool (ft2 ) 2.7 10−4 Pins (hp) = (5) Mast fairing drag for coaxial rotors The fairing for the exposed length of the rotor shaft between the upper and lower rotors of a coaxial system incurs an additional drag penalty, given by fmast (ft2 ) 2.8 = 0.0322R2 (6) Protrusion drag The drag of protrusions is modeled as an additional 10% of the accumulated parasitic drag of all wetted surfaces. 3 3.1 Rotor and Wing Performance Models Rotor performance model Two performance models are used to calculate rotor power required in hover and axial flight. The first model is based on momentum theory, and the second model is based on blade element momentum theory. 14 3.1.1 Momentum Theory For momentum theory-based predictions, rotor power is calculated based on assumed aerodynamic efficiency factors in hover and cruise. Imperial units (foot, pounds of force and horsepower) are assumed for these expressions. In hover, rotor power is given by Phover (hp) T 1.5 √R 550 2ρA FM = (7) Here, T is the thrust required in hover from each rotor, and is calculated assuming the segment weight is equally divided between all rotors. A vertical download factor (configuration-dependent) is included in the estimation of rotor thrust. The rotor disk area is A (ft2 ), ρ is the ambient air density (slug/ft3 ) and FM is the rotor figure of merit in hover. In cruise, the power required by each rotor when operating in axial flight is Pcruise (hp) = D V∞ NR 550ηp (8) Here, D is the total vehicle drag in lbs when operating at a forward flight speed of V∞ ft/s, which is overcome by each of the NR rotors operating at a propeller efficiency of ηp . 3.1.2 Blade Element Momentum Theory (BEMT) Certain configurations like the tilt-rotor or tilt-wing fly such that the rotors operate predominantly in axial flight. Therefore, the Blade Element Momentum Theory (BEMT) is used as a higher-fidelity replacement for momentum theory-based predictions. Though BEMT can resolve finer details like angle of attack variations 15 along the span, it requires detailed inputs, namely airfoil tables and distribution of blade chord and twist along the span. These details are populated as described below. The rotor is assumed to be constructed from multiple user-specified airfoils. The lift and drag characteristics for each airfoil may be Reynolds-tabulated or machtabulated. Several combinations of blade chord and twist distribution are generated assuming linear taper and bilinear twist. The design variables for blade geometry are: 1. Blade taper ratio (1:1, 2:1 and 3:1) 2. Blade bilinear twist junction (30% – 70% span) 3. Twist at bilinear junction (-5 deg to -20 deg) 4. Twist at tip (-5 deg to -35 deg) The rotor RPM in cruise (specified as a fraction of hover RPM) is added as a sizing variable. The BEMT analysis calculates the rotor power required for a given thrust, for all mission segments, exploring a parameter space of 360 designs (combinations of blade twist and taper distribution). The rotor geometry for minimum energy consumption over the mission is identified from the parametric sweep, and the aerodynamic efficiencies (figure of merit F M in hover and propeller efficiency ηp in cruise) are calculated for each mission segment. Minimizing the energy required at the rotor ensures reduced fuel consumption, but not necessarily a good overall design. A cruise-dominated mission results in a 16 prop-rotor with a potentially degraded hover figure of merit while achieving good aerodynamic cruise efficiency. Therefore, installed power (and therefore, engine and transmission weights) may increase, resulting in a lower payload fraction. To prevent unchecked increases in powerplant weights, another condition is introduced in the BEMT analysis: designs are considered “valid" if the hover figure of merit is greater than a user-specified threshold (e.g., 0.72), and only these valid designs are ranked to determine the “best” rotor efficiencies. When BEMT is included in the sizing iterations, sizing proceeds in 3 steps: 1. Perform sizing with momentum theory and assumed efficiency factors in hover and cruise (F M =0.75, ηp =0.82) 2. If the design satisfies all constraints, perform BEMT analysis to calculate aerodynamic efficiencies for each segment based on thrust requirements; extract hover or cruise efficiencies (FM, ηp ). 3. Perform sizing with momentum theory, using the calculated rotor aerodynamic efficiencies obtained in Step 2. Figure 8 shows the comparison of thrust and power obtained from BEMT predictions with airfoil tables vs. sub-scale experiments for a variable-pitch and variable-RPM sub-scale prop-rotor. Good predictions were obtained at various cruise speeds ranging from 3 m/s to 15 m/s. For these cases, BEMT was found to be sufficient for accurate performance predictions. 17 Figure 8: Comparison of BEMT predictions to experiments 3.2 Wing performance model The drag coefficient of a fixed wing is given by CD = CDo + 1 CL2 πARe (9) The lift coefficient CL and aspect ratio AR are sizing design variables. The profile drag coefficient CDo is an assumed value, usually 0.014 (including protrusions and interference). The Oswald efficiency e is calculated as e = (Q + P πAR)−1 P = 0.38 × 0.02 Q = 1.01 s s = 1 − 2 dfus bwing 2 The parameters are dfus = equivalent fuselage diameter, and bwing = wing span. 18 4 Weight models There are three main contributors to vehicle take-off mass: 1. Energy storage - battery and/or fuel weight. This component may be traded-off against payload for mission flexibility, depending on available volume. 2. Empty weight - this weight group represents the airframe, wings, rotors, engines, transmission, motors, seats, avionics and other non-removable systems. 3. Payload - usually specified with the mission definition. 4.1 Engines, fuel and batteries Though engines strictly belong in the empty weight category, the calculation of fuel weights are inextricably linked to the evaluation of engine performance and engine weights. Therefore, engine models are described in this section. 4.1.1 Engines HYDRA has built-in models for fuel-burning engines of two types: gas turbine engines, and reciprocating engines (piston engines and aero-diesel engines). Turboshaft engines Based on statistical data for various production engines, a trend line was fitted with good accuracy (R2 = 0.92) for the variation of engine weight Wengine (lb) with 19 installed power Pins (hp). The fitted engine weight model is given by Wengine (lb) 0.552 7.3874 Pins = (10) Another fit is shown in Fig. 9, in SI units with engines manufactured over the last fifty years. The variation of engine Specific Fuel Consumption (SFC) at peak efficiency with installed power is sfcbase (lb/hp-hr) = 1.549 P−0.161 ins (11) Engines operating at sub-optimal conditions (i.e. at power settings lower than design power output) suffer from higher specific fuel consumption. This effect is modeled using a power law as sfc = sfcbase Preq Pins −0.256 (12) Here, Preq is the power output required from the engine to produce a thrust T during a mission segment. Finally, the variation of available power (relative to installed power) with ambient temperature and pressure is given by Pavail = Pins [1 − KT (θ − 1)] [1 + KD (δ − 1)] (13) The terms θ and δ are ratios of ambient temperature and ambient pressure to their corresponding values at mean sea level (ISA). The constants KT and KD are obtained from curve fits of detailed engine performance curves. Piston engines The treatment of piston engine weights is similar to that followed for turboshaft engines. The variation of engine weight with installed power is given by 20 Figure 9: Statistics: turboshaft engine mass vs. installed power Wengine (lb) = 2.367 Pins (hp)0.916 35 ≤ Pins (hp) ≤ 1000 (14) Another fit is shown in Fig. 10, in SI units with a larger sample size, including less efficient engines. The variation of engine SFC at its peak efficiency is sfcbase (lb/hp-hr) = 0.42, Pins (hp) ≤ 4 = 0.594 − 0.0046 Pins (hp), 4 ≤ Pins ≤ 56 = 0.52 Pins (hp)−0.0972 , 56 ≤ Pins ≤ 1000 4.1.2 Fuel, tank and fuel handling systems After calculating the engine power required, the mission profile (flight segment duration) is used with engine power requirement and SFC estimates to calculate the fuel weight as mfuel = SEG ΣNi=1 sf c(i) Peng (i) 21 + munusable (15) Figure 10: Statistics: reciprocating engine mass vs. installed power An average density of 6.7 lb/gal is used for both turbine engine fuel and aviation gasoline. The fuel tank and plumbing mass is estimated from fuel volume using AFDD models as Wtank = 0.7717 0.5897 1.9491 0.4341 Vtank Ntank fcw fbt (16) The terms used in the equations are Vtank is the tank volume in U.S. gallons (1 gal = 3.7.8 liters) Ntank is the number of internal tanks fcw is the crashworthiness mark-up factor, usually 1.31 fbt is the ballistic survivability mark-up factor (1.2 for military, 1.0 for civilian) The weight of plumbing systems used for regulating fuel flow from tanks to engines is modeled as follows: k0plumb = max(0.022M, 120) 22 k1plumb = 0.025k0 Wplumb = k0plumb + k1plumb (0.01 ∗ Ntank + 0.06 ∗ Nengine ) V̇ 0.866 V̇ is the peak fuel flow rate to the powerplant in lb/hr and the plumbing system weight is in pounds. M is the take-off mass in kg - the mixing of units and conventions is a result of AFDD models being specified in FPS units, while HYDRA is implemented in SI units. For small-scale powerplants, the trendlines predict an over-estimate of fuel handling system weight. To handle these special cases, a maximum limiter is placed on the fuel system weights, with the limit set to 50% of fuel weight. 4.1.3 Battery models Battery weights are accurately represented using a very simple statistical model. Figure 11 shows the variation of battery weight with rated energy capacity for commercially available small-scale batteries, where each data point represents a manufactured unit. Arguably, a battery density of 158 W-hr/kg is quite low and improvements can be made; this “conservative” design is typical of commercially available battery packs including the safety casing. For full-scale platforms used in commercial operations, several conservative assumptions are used to incorporate various margins in sizing the battery. 1. The minimum depth of discharge is 7.5% of total energy capacity 2. The maximum state of charge near end of life for the battery is 80%, i.e., after cycling, the usable battery capacity is at most 80% of the rated energy. Thus, 23 Figure 11: Small-scale batteries: weight statistics the effective usable energy for battery sizing is 72.5% of the rated capacity. 3. The average discharge efficiency of the battery reduces by 4% for every unit increase in average C-rating. 4. A specific energy of 240 Wh/kg is used to estimate the mass of the cells. 5. A pack integration factor of 0.75 (defined as battery mass to cell mass) is used to estimate the weight of battery management systems and casing. 6. A curve fit of temperature rise vs. C-rating (obtained from experimental data) is used to track the rise of cell temperature over the mission duration. A maximum limit of of 70o C is used to iteratively add cells until thermal limits are satisfied. 24 4.1.4 Electric motor weights Though electric motor weights are strictly driven by peak torque requirements, the data correlation between weight and peak rated power is also very good as shown in Fig. 12. For small-scale motors, the speed controller is sized based on the current drawn by the system assuming a 12 Volt source. The masses of several large-scale motors with controllers are plotted against rated power in Fig. 13. Motor + speed controller efficiencies range from 85% to 92% depending on the design point and operating RPM range. Motor and speed controller weights are estimated as Wmotor (lb) = 0.74 P P ≤ 13.4 hp WESC (lb) = 1.047 P Wmotor + WESC (lb) = 1.489 P0.783 4.2 P ≤ 13.4 hp 13.4 hp < P ≤ 350 hp Electric Transmissions Generators for electric transmissions are sized in a manner identical to electric drive motors. The components of an electric transmission are shown in Fig. 14. The advantage of this hybrid system is that a mechanical transmission is not required for power transmission to the rotors; further the hybrid system can serve as a long-range drop-in upgrade for short-range battery-powered variants. The disadvantage of a turboshaft-electric hybrid system is that each additional component introduces additional points of failure. Adding redundancy and fail-safe architectures can incur a significant empty weight penalty. 25 Figure 12: Statistics: weight of small BLDC motors Figure 13: Statistics: large-scale DC motor + controller mass vs. installed power. Manufacturing technology in 2018 can achieve 3.75 kW/kg of power density. 26 Figure 14: Turbine-generator hybrid powerplant for electric motor. 98% wire transmission efficiency, 92% generator efficiency 4.3 Wire weights Two types of wires are considered in the sizing analysis: power cables and signal wires. The weights of electrical power cables are estimated from the vehicle rotor layout using a wire mass per unit length per unit power of 0.0057 kg/kW/m. Signal wires are calculated using a linear mass density of 0.17 kg/m and a knowledge of the rotor layout, together with an estimate of channel counts. Based on user inputs, doubly/triply redundant power cables and signal wires are automatically added to the appropriate weight groups for estimating vehicle empty mass. At full-scale, a key driver of vehicle weight is the rotor design parameter set (tip speed, solidity, disk loading/radius, first rotating flap frequency). One such em- 27 Figure 15: Blade cross-section pirical parameter is the flap natural frequency. In the legacy approach for estimating rotor blade weight, the designer had to prescribe this parameter to perform sizing. However, underlying data for the flap frequency is restricted to articulated and hingeless rotors, and plentiful data is not available for stiffer rotors (νβ ≥ 1.08/rev). For small-scale VTOL with very stiff rotor systems (νβ ≥ 1.4/rev), extrapolation of the trend line beyond the range of available data for νβ may yield erroneous estimates for rotor blade weight. For eVTOLs, a physics-based approach is implemented and used in HYDRA. 4.4 Physics based model for rotor blades A schematic of the rotor airfoil is shown in Fig. 15. The cross-section consists of two categories of materials: non-structural masses, and load-bearing components. The non-structural masses are: 1. Paint: 0.15 mm thickness, density 1800 kg/cu.m, applied on surface 2. Glue: 0.25 mm thickness, density 1800 kg/cu.m, applied on skin, shear webs 3. Core: density of 52 kg/cu.m, encompasses cross-section area of 0.49 t c c 4. Leading edge protection: 1.14mm thickness, density 8900 kg/cu.m, from lead28 ing edge to 25% chord on upper and lower surfaces. Here, t c is the airfoil thickness-to-chord ratio, usually 0.1 to 0.12 and c is the blade airfoil chord. For the paint and glue, the chordwise location of the component center of gravity is 0.5c. For the leading edge protection strip and core, the component chordwise center of gravity locations are 12.5% chord and 57% chord, respectively. 4.4.1 Skin sizing The skin is sized to withstand a total torsion moment equivalent to an airfoil cm =0.2 at the maximum rated rotor speed. The total root pitching moment in hover is Mx 1 2 2 ρV c cm R 6 TIP = The skin thickness is given by tskin nMx 2Acs τskin = Here, Acs is the cross-section area of the airfoil, and τskin is the maximum allowable shear stress in the skin. The factor n accounts for additional overload and safety factors to account for for contingency conditions and fatigue margins. 4.4.2 Leading edge weight The section chordwise center of gravity for the non-structural components (paint, leading edge protection and core) along with the skin is obtained from the respective weights and component centroid locations. If this center of gravity is 29 behind the blade quarter-chord, a leading edge weight is added to avoid torsional divergence and flutter for the blade. The CG of the non-structural components and skin is given by x1 c If x1 c mLE 4.4.3 mLEP 0.125 + mskin 0.5 + mcore 0.57 + mpaint 0.5 + mglue 0.5 mLEP + mskin + mcore + mpaint + mglue = is greater than 0.25, then a leading edge mass is added, equal to = (mLEP + mskin + mcore + mpaint x 1 + mglue ) 4 − 1 c Spar caps and shear web sizing The spar is placed so that the neutral axis and CG both lie at quarter-chord. A NACA-0012 section is used to estimate The elements that support shear and bending moment due to lift and drag and bending loads are the spar webs (shear and lag bending moment) and spar caps (flap bending moment and tension due to the centrifugal load). The limit load for eVTOL rotor blades is determined from the trim thrust required under OMI (One Motor Inoperative) conditions. For the “conventional” tilt-wing configuration (6 rotors on main wing, 2 rotors on horizontal tail) and the tandem tilt-wing configuration (4 rotors each on canard and wing), the maximum thrust scaling factor is approximately 150% the hover thrust. With rotor radius R, rotor speed Ω and peak torque at the blade root Qb determined from the rotor geometry, the vertical force on the blade is obtained by dividing the maximum expected thrust level by the total number of blades as Fz = W nz NR Nb 30 (17) Figure 16: Blade spanwise segment The terms nz is a load factor that can incorporate safety margins, dynamic overshoot/landing and fatigue factors for blade loads. The lift distribution along the span is assumed to be quadratic (a structurally conservative loading profile - the optimum hovering rotor features a linear spanwise lift distribution, discounting tip loss effects). The blade is assumed to constructed with a pre-cone angle βp to alleviate root bending moments, and then subdivided into N = 5 equal span segments. One such segment is shown in Fig. 16. The dominant loads on the outboard end of the segment, that are carried by the spar caps, are the centrifugal force (from all segments outboard of the present one) and a flap bending moment due to (i) distributed lift on segments outboard of the present one, and (ii) a combination of pre-cone and centrifugal load on segments outboard of the present one. The blade spanwise segments are successively sized starting from the tip segment and ending in the root segment. A schematic of the rotor blade segment and cross-section is shown in Fig. 17. The total centrifugal load and flap bending moment at the inboard end of the 31 Figure 17: Rotor blade segment sizing: schematic segment is CF (xin ) = CF (xout ) + ∆CF (18) M (xin ) = M (xout ) + ∆M (19) The flap bending moment distribution due to lift, along the non-dimensional span coordinate x (0 at root, 1 at tip) is Mlift (x) = 1 Fz R(x4 − 4x + 3) 4 (20) The additional centrifugal load and flap bending moment due to loads on the present segment are ∆CF = ∆M = 1 2 (ms + mns )VTIP (x)out2 − x2in ) 2 1 −(CFout + ∆CF )∆Rβp + Mlift (xin ) − Mlift (xout ) 2 The spar mass per unit span is ms ) and the non-structural mass per unit span is 32 mns . The maximum axial stress in the spar caps at the inboard end of the present segment is σxx (xin ) = M (xin ) h2 CF + 2 Aspar 2bt h2 The term Aspar is the area of the spar, given by 2(b + h)t. The individual expressions can be rearranged to solve for the spar cap thickness t, as t = LHS = RHS = RHS LHS 1 1 2 b+h 2 2 σmax + VTIP (xout − xin )ρspar ∆Rβp −1 n 2 bh 1 1 2 2 2 CF (xout ) + mns VTIP (xout − xin ) + Mlift (xin ) 2(b + h) 2 1 1 + M (xout ) − ∆Rβp CF (xout ) + ∆CF bh 2 This formulation avoids iterative convergence inner loops for the rotor blade structure during sizing, improving computational efficiency. After sizing the spar, the shear webs thickness is determined from the vertical bending load at the inboard end, given by tweb = max 1.5nVz , tweb hσskin Here, Vz is the vertical shear due to blade lift integrated from the inboard end of the segment (x=xin ) to the blade tip (x=1). After sizing one spanwise segment, the total axial load and flap bending moment at the inboard end of the segment are calculated using Eqns. 18,19 respectively. The loads at the inboard end of the present segment are then assigned as tip loads for the next segment, and the process is repeated for all segments in succession. 33 4.4.4 Root fitting sizing The root fitting for the blade is assumed to extend from the shaft (x=0) to 10% of the blade span (x=0.1), and is made of 7075 Aluminum. The density is 2800 kg/cu.m, and a limiting axial stress of 20 MPa is used based on a fatigue life of 108 cycles. The construction of the root fitting is shown in Fig. 18. The tube radius is assumed to be equal to 4× the airfoil thickness, and the thickness tRoot is evaluated to ensure that the maximum tensile stress in the material does not exceed the limiting stress (20 MPa). The tube thickness is solved analytically, using a formulation similar to the approach used for spar sizing. The expression for tube thickness is RHS LHS Mlift (x = 0.1) − MCF (x = 0.1) CF (x = 0.1) + 2 2πrRoot σlimit 3πrRoot σlimit tRoot = RHS = LHS = 1 − ρ Ω2 (0.1R) 2σlimit The root fitting thickness is set to the larger of minimum gauge tmin or the calculated thickness above, whichever is larger. 4.4.5 Torsion frequency check The skin thickness is used to calculate the first elastic torsion frequency for the rotating blade and ensure that it is above 3.3/rev at the hover RPM. If the torsion frequency is too low, then additional skin thickness is added until this requirement is satisfied, preserving the same spar design. 34 Figure 18: Blade root fitting 4.5 Flight controls Two categories of actuators are modeled: fixed-wing, and rotary-wing. 4.5.1 Rotor controls Unlike large rotorcraft, some eVTOLs feature low-bandwidth collective actu- ators and no cyclic or swashplate. In such designs, the collective pitch (e.g., for prop-rotors) is usually scheduled with airspeed, and RPM is used for feedback control. Sizing laws for these collective actuators are therefore markedly different from those used for full-scale helicopter controls. The rotor hub mass and collective pitch actuator masses scale with tip speed VTIP (and blade chord c for the actuator) as Mhub (kg) = 4.84 Mact (kg) = 1.47 VTIP 171 VTIP 171 2 c 0.82 2 c 0.82 The tip speed VTIP is in m/s and mean blade chord c is in meters. 35 (21) (22) 4.5.2 Fixed wing controls Fixed wing flap and actuator weights are obtained from the AFDD model as Wflaps (lb) = 0.41 0.01735W 0.644 Swing (23) For this model, the weights are in lbs, including the take-off weight W . The term Swing is the total plan-form area of all fixed wings, and the actuator weights Wflaps includes all actuators on all fixed wings. 4.5.3 Tilt actuators For tilt-rotors and tilt-wing configurations, the masses of tilt actuators are estimated as the larger of 15.5% of wing mass, and 3.61% of the total mass being tilted by that actuator. For tilt-wings, both metrics are applicable; for tilt-rotors, the tilt actuator weight is set to 10% of the masses being tilted. 4.6 Mtilt−wing = max(0.155Mwing , 0.0361Mtilt ) (24) Mtilt−rotor = 0.10(Mhub + Mact + Mblades + Mmotor ) (25) Motor mount mass The motor mount structure refers to the overhang beam connecting the motor and rotor hub, to a wing (or fuselage). For the Vahana tilt-wing configuration, the motor mount structure is the overhang beam used to offset the rotor hub ahead of the wing leading edge, as shown in Fig. 19. The motor mount is modeled as a cantilever beam of length L with a tip mass equal to the mass of the rotor hub, blades and 36 Figure 19: Motor mount model motor. This structure is sized by a natural frequency requirement, i.e., the first cantilever bending mode for this beam with a tip mass must be sufficiently large so that the structural dynamics do not interact with flight dynamics (0 - 4 Hz). For eVTOLs, a target first bending frequency of 8.5 – 10 Hz is used to size the motor mount beam. The overhang length is set to the sum of wing three-quarter chord and one rotor radius. For configurations such as CityAirbus (quad-ducted-coaxial rotors) with no fixed wings, the rotors are mounted directly on the fuselage using support arms. The support arms are treated as “motor mounts”, and the beam length is set to 120% rotor radius. Appendix A provides an analytical solution for sizing a cantilever beam with several lumped non-structural masses, distributed structural and nonstructural masses based on a target frequency. 37 4.7 Wing weight model Three models are available to estimate the weight of a fixed wing: 4.7.1 AFDD wing weight model The weight of a fixed wing is estimated as Wwing = 5.6641 Lw 0.847 0.4 0.21 nz Swing AR0.5 1000 t 0.0936 c The wing weight is in lbs, Lw is the wing design lift in lbs, nz is the design ultimate load factor, Swing is the wing plan-form area in sq. ft, AR is the wing aspect ratio and 4.7.2 t c is the wing thickness to chord ratio. Frequency tuning: bending loads The wing spar is idealized as a cantilever beam with lumped non-structural masses (rotor blades, hub and collective actuator assembly and motor), distributed non-structural masses (skin, ribs) and a hollow circular spar. A schematic of one half-wing is shown in Fig. 20. The wing taper ratio λ = cTIP cROOT is a design parameter with a default value of 0.75. A tapered wing shifts the non-structural skin mass inboard while strengthening the root, resulting in increased first bending frequency for the same mass. The skin thickness is set to include three layers of carbn fiber (45/0/45), resulting in an areal mass density of ≈ 4.9 kg/sq.m. During sizing, the rotor assembly mass and motor mass are used to calculate the wing spar thickness required to achieve a target first bending frequency using the Rayleigh-Ritz approximation detailed in Appendix A. 38 Figure 20: Wing structure: layout To decouple wing structural dynamics from vehicle flight dynamics, a target first bending frequency of at least 4 Hz is desirable (for a take off mass of 2000 kg). Larger aircraft feature progressively relaxed natural frequency constraints, because the flight dynamic frequencies are lower for larger vehicles with correspondingly larger moments inertia. 4.7.3 Hover: shear loads After determining the spar thickness based on natural frequency requirements, the wing structure is analyzed with static loads in hover with the tapered beam. Rotor thrusts are applied at the motor mount locations and the static bending stresses and shear stresses are calculated at five points between nodes (nodes are located at the root and motor mount locations). A load factor of 3.8 and safety margin of 1.5 are applied to ensure that the spar can support the loads in hover. This hover loading condition is more limiting than cruise flight with the same load 39 factors and safety factors, because the bending moments due to distributed lift are lower than the corresponding bending moments in hover. The shear loading is used to estimate the number of ± 45 deg layers of carbon fiber, while the bending loads are supported by layers of uniaxial carbon fiber. 4.8 4.8.1 Airframe Weight Model Statistical weight model The AFDD82 fuselage weight model for helicopter is given by wfuselage = wbasic + wpress + wcw (26) where wbasic is the basic weight of the fuselage, wpress is the weight from any pressurization constraints (set to none for the sample mission in this work) and wcw is the weight addition for crashworthiness, which is assumed to be 6% of the basic weight as per AFDD standards. The basic weight is given by wbasic = 5.896framp WGTOW 1000 0.4908 0.2544 0.61 nz0.1323 Sbody l (27) where framp is the factor for a retractable ramp, nz is the load factor, Sbody is the wetted area of the fuselage (sq. ft) and l is the length of the fuselage (feet). While these terms can be defined for full-scale helicopters/tiltrotor, their definitions become increasingly challenging to interpret in the context of unconventional configurations such as an eVTOL, with very different load paths compared to helicopters. 40 4.8.2 Physics-based weight model A physics-based model is used to estimate the weights of load-bearing compo- nents that transmit rotor hub forces and wing lift and drag to the vehicle center of mass. The airframe is subdivided into 3-D beam elements, each with bending, axial and torsion degrees of freedom. Rotor hub loads and wing lift/drag are modeled as point loads at the motor points, and distributed uniformly over the wing span, respectively. The external loads corresponding to each mission phase are applied on the structure, (rotor thrust, torque, wing lift and wing drag) and the resulting stresses and deflections are calculated and stored at all the nodes. Subsequently, the cross-section dimensions of the beams are iteratively resized to ensure; (i) Minimum factor of safety of 1.5 (based on Von-Mises stress) at a load factor of 3.5, (ii) A maximum deflection of 10% for any node (relative to its distance from the vehicle center). The cross-sections of all beam elements are assumed to be hollow circles with wall thickness equal to 15% outer radius. The only design parameter for a beam element is the outer radius of the cross-section. Beam cross-section radii for all elements are updated iteratively until the 3 design criteria are satisfied, and the weight of the airframe members is calculated using material density and final dimensions. The finite element analysis iterations are performed within the sizing loop. The parameterization for a quad-rotor layout is shown in Fig. 21. Integration of FEA into sizing: workflow The overall process is depicted in a flowchart shown in Fig. 22 and proceeds as follows 41 Figure 21: Quad-rotor biplane tail-sitter: layout to finite element representation Figure 22: Workflow for including physics-based airframe weight model in sizing 42 1. Initialize: A geometric layout of the airframe is chosen, and beam elements are defined. The present work assumes the beam cross section to be simple shapes such as a hollow cylinder or a solid square. 2. Inner FEA loop: Point forces and moments are applied to the structure based on rotor and wing loads, such as rotor thrust, rotor torque and wing lift. The von-Mises stress (σVM ), the corresponding factor of safety and deflection of the various nodes are computed as σVM = [(σxx − σyy )2 + (σyy − σzz )2 (28) 2 2 2 + (σzz − σxx )2 + 6(σyz + σxy + σxz )]1/2 where σij are components of the stress tensor and the factor-of-safety (FOS) is FOS = min(σV M )i /σyield ∀ i ∈N (29) where N is the total number of beam elements. 3. Update cross-section dimensions: The mathematical constraints im- posed for convergence are |FOStar − ∆FOS| ≤ min(FOS) (30) where FOStar is the target FOS, set to 1.5 and ∆FOS is the allowable band, set to 0.1. The axial and bending deflections of each node are normalized by the distance of the node from the vehicle center of gravity. These normalized deflections must not exceed a pre-determined fraction (0.08) to ensure struc43 tural rigidity. Depending on the type of condition encountered, two types of cross-section updates are calculated: (a) The beam cross-section is scaled up by the term (FOS/FOStar )1/3 ) if the factor of safety is not sufficiently large. The cube root in the expression stems from the fact that stress is inversely proportional to cross-section dimension under static load. (b) If the deflection of any one node is too large, the dimensions of all crosssections are increased by 10%. Increasing the sizes of all the member cross-sections is required because adding stiffness to the root end of a longer beam may be more effective than stiffening an outboard member (in the present workflow, no apriori assumptions are made about the load path, and so to guarantee deflections are restricted, all members are stiffened). The larger of the two calculated dimensions for each structural member is provided to the FEA for the next iteration. The stresses and deflections are recalculated, and members resized until the structure achieves the required factor of safety and deflection limits. The airframe weight is computed by multiplying the total volume of all the beam elements with the material density (Aluminum, 2,700 kg/m3 or carbon, 1650 kg/m3 ). This converged airframe weight from static finite element analysis replaces the fuselage weight from the AFDD empty weight formulae in the iterative sizing process. 44 The structural analysis used in in sizing the airframe structure also provides estimates of the natural frequencies and the mode-shapes. This information can be used in advanced stages of design to ensure sufficient separation between the airframe, blade natural frequencies and operating RPM range of the rotor(s). 4.9 Weight margin A weight margin is included in the analysis to admit additional expansion of component performance (and therefore weight) at later stages of design. Therefore, 10% of the vehicle empty weight is allocated for a weight margin. 4.10 Fixed weight groups Fixed empty weight groups consist of mission-specific components and do not scale with vehicle dimensions or system performance during sizing. These fixed weight groups are 1. Carpets, cabin trim and noise insulation 2. Avionics, sensors and flight computers 3. Airconditioning and heaters 4. Seats 5. Low voltage battery, anti-collision lights, air data systems 6. High voltage bus and power distributors 45 5 Analysis Organization HYDRA is a rotorcraft sizing code with the following features: 1. Sizing: obtain consistent vehicle weights and performance for a given payload and mission profile. 2. Optimization Optimize a given design (e.g., for annual operating cost) 3. Sensitivity Analysis For a given design, identify sensitivity of weights and performance metrics to (i) underlying assumptions (e.g., engine efficiency), and (ii) changing design variables (e.g., rotor tip speed) The main focus of this document is to explain the usage of the analysis, and implementation of the various performance, weight and cost models used to size the rotorcraft. The theory, if any, will be explained side-by-side with the corresponding code segment. 5.1 Programming Language and Syntax HYDRA is written in Python3, with heavy emphasis on classes to contain and compartmentalize information. Because Python2 support expires in 2019, it is recommended to use Python3 specifically. Some parts of the code are written in Fortran. Three fortran compilers have been tested and verified to work with the compiled parts of the code: GNU fortran, intel fortran and PGI fortran. Among these three compilers, gfortran and 46 pgfortran are free, while ifort requires academic or commercial licenses. The main advantage of pgfortran is the availability of support for CUDA-Fortran, while executables generated with ifort consistently run faster than those generated with gfortran or pgfortran for the target applications. HYDRA also features a built-in Blade Element Momentum Theory (BEMT) solver, also implemented in Fortran90. The BEMT solver is parallelized with OpenMP. Additionally, the sizing and optimization stages of HYDRA are parallelized with MPI, and can be executed in parallel. 5.2 Pre-Requisites and Installation Notes A Fortran90 compiler is required. Due to the use of free-format coding, derived types and modules, a Fortran77 compiler is not sufficient. If you want to try running the code on Windows, there are some manual steps required to help certain Python modules recognize the OpenMP libraries. For the time being, consult Ananth for installation details on Windows. Additional Python3 and its modules (freely available) are required to run HYDRA and its various postprocessors: 1. matplotlib, numpy, scipy, pyyaml, python3-tk, f90wrap 2. Optional: mpi4py Finally, CMake version 3.0 or higher is required to create Platform-independent Makefiles that compile the Fortran90 routines. To use integrated LATEXrendering for fonts in plots, you may also need the texlive-fonts-extra package. 47 5.3 Source Code Directories All source code to be compiled is located in src/, under various subfolders. Each subfolder contains a collection of subroutines or functions that pertain to specific types of operations. 5.3.1 Python code: src/Python This subfolder contains various classes and functions written in Python that pertain to sizing a vehicle, in four sub-folders. 1. Stage_0/: This folder contains the “main” class that defines the vehicle in hydraInterface.py. It contains the various high-level driver functions pertaining to sizing and optimization. The folder also contains two other files, dict2obj.py (convert dictionary to class) and footprint.py (calculates vehicle footprint). 2. Stage_1/: This folder contains the workhorse routines that perform sizing with weight, performance and cost estimation. 3. Stage_3/: This folder contains Python-wrapped routines for higher-fidelity fuselage and wing weight models, BEMT rotor performance models and the associated interfaces to setup the inputs and extract outputs for the sizing analysis. 4. Postprocessing/: This folder contains functions that perform postprocessing analysis, including optimization, design perturbation and sensitivity studies, 48 noise estimation, battery status, profile, power curve, and pie charts for the breakdown of vehicle weight, operating cost and parasitic drag. 5.3.2 NETLIB FILES: Source/fea/Source/mathops/ This subfolder contains the ODE Solver dassl, algebraic equation solver hybrd and various dependencies needed for linear algebra and matrix operations. These files have not be modified, except the algebraic equation solver hybrd.f. This file alone has been changed to obtain the Jacobian in parallel using OpenMP. Parts of the sizing analyis, FEA-based fuselage/wing weight estimation and BEMT-based rotor performance estimation are written in Fortran90 to improve execution speed. The source code for these operations are contained in src/bemt/Source/, src/fea/Source/ and src/sizing/Source/. Within each of these folders, there are three sub-folders: 5.3.3 Python-integrated routines: Source/pyint_files/ This subfolder contains routines that can be invoked from Python, using f2py and James Kermode’s f90wrap adaptation for derived types. 5.3.4 Python-accesible modules: Source/pyint_modules/ The files in this folder contain module definitions used to define universal con- stants (e.g., 1, 0, π) to the required precision. Using James Kermode’s f2py-f90wrap interface generator, Python can access and modify these module variables directly without having to painstakingly break down derived types into its primitive con- 49 stituents (arrays, integers, real numbers and logicals). The advantage of this automation and abstraction helps avoid programming errors, reduces the number of arguments passed between Python and Fortran and allows for code feature expansion without significant additional effort. 5.3.5 Python-invisible files: Source/pyinv_files/ The files in this folder are work-horse routines that can be called only by the routines in Source/pyint_files/, but not directly by Python. These routines, together with those in Source/pyint_files/, are compiled into shared object files. Specific routines (present in Source/pyint_files/) in these shared objects can be called by the Python interface. 50 6 6.1 First-time setup Installing pre-requisites For Debian-based Linux distributions, you can get Python3, CMake and gfor- tran using the command sudo apt-get install python3 cmake gfortran texlive-fonts-extra For MacOS, similar commands can be executed with brew. After installing Python3, install various modules using pip sudo python3 -m pip install numpy sudo python3 -m pip install scipy In a similar manner, install the other modules with a terminal. 6.2 Compiling source code After installing the pre-requisites, create the directory cmake/build/ as fol- lows cd cmake/ mkdir build/ cd build/ Then, execute the cmake command and compile the code FC=gfortran cmake ../../ make -j 51 6.3 MacOS-specific issues Hopefully, there are no issues and the build process executes successfully. How- ever, if it does not, and you are reading this, chances are that you are using Windows, or Mac. For Windows, there is a long and complicated series of steps documented here: https://github.com/jameskermode/f90wrap/issues/73 For MacOS, the system may not recognize the f90wrap and f2py-f90wrap commands even if the f90wrap module is installed - this issue was noticed for OSX High Sierra and v3.7 of Python. In case this situation arises, you may have to create symbolic links to these two commands in /usr/local/bin/. For example, Ananth had to create a symlink as follows: 1. Identify where f90wrap is installed: use the following command in terminal python3 -m site If Python3 is installed correctly, you will see an output that looks like this: sys.path = [ ’/usr/local/bin’, ’/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/ Versions/3.7/lib/python37.zip’, ’/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/ Versions/3.7/lib/python3.7’, 52 ’/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/ Versions/3.7/lib/python3.7/lib-dynload’, ’/usr/local/lib/python3.7/site-packages’, ’/usr/local/lib/python3.7/site-packages/RBF-2018.10.31-py3.7macosx-10.13-x86_64.egg’, ’/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/ Versions/3.7/lib/python3.7/site-packages’, ’/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/ Versions/3.7/lib/python3.7/site-packages/RBF-2018.10.31-py3.7macosx-10.13-x86_64.egg’, ] USER_BASE: ’/Users/ananthsridharan/Library/Python/3.7’ (doesn’t exist) USER_SITE: ’/Users/ananthsridharan/Library/Python/3.7/lib/python/sitepackages’ (doesn’t exist) ENABLE_USER_SITE: True The results of this command show that f90wrap may be found in /usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions /3.7/bin/ To verify that the f90wrap and f2py-f90wrap commands can indeed be located in that folder, use the ls command as follows: (without the linebreak) ls /usr/local/Cellar/python/3.7.0/Frameworks/ Python.framework/Versions/3.7/bin/*f90wrap 53 You should see an output that looks like this: /usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions /3.7/bin/f2py-f90wrap /usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions /3.7/bin/f90wrap Now, we’re ready to use the ln command to create symlinks. 2. First, create a link for f90wrap: ln -s /usr/local/Cellar/python/3.7.0/Frameworks/ Python.framework/Versions/3.7/bin/f90wrap /usr/local/bin 3. Next, create a link for f2py-f90wrap: ln -s /usr/local/Cellar/python/3.7.0/Frameworks/ Python.framework/Versions/3.7/bin/f2py-f90wrap /usr/local/bin Then, try deleting the build directory and redo all the compilation steps. 54 7 Input files This section of the documentation details the inputs files and conventions that that are necessary to perform sizing. The two main input files are input.yaml and defaults.yaml. 7.1 input.yaml This input file specifies the mission profile, vehicle configuration, propulsion type and masses of fixed weight groups (e.g., crew, payload, mission equipment). An example input.yaml file is shown below in various segments, and each input and its units are explained. HYDRA inputs and outputs are handled using yaml files through the pyyaml package. The yaml input files are converted to Python dictionaries when read, allowing the inputs to be specified in any order. The main dictionaries in input.yaml are Sizing, Configuration, Mission and Aircraft. All four dictionaries must be present in input.yaml. An example file is shown below with the main dictionary names and sub-dictionary names highlighted. Sizing: Rotors: All_rotors: Nb: [3] # per rotor Vtip: [170] # hover tip speed, m/s ctsigma: [0.139] 55 Wings: Main_wing: nwing: [1] aspectratio: [5,6,7,8] cl: [0.4,0.5,0.6] liftfraction: [0.9] nrotors: [6] Tail: nwing: [1] aspectratio: [6] cl: [0.3] nrotors: [2] Fuselage: nrotors: 0 # fidelity options for weight and performance models ifea: False use_bemt: False Configuration: Rotors: All_rotors: ‘All_motors’ # motor group to drive this rotor group Wings: Main_wing: ‘All_rotors’ # what rotor group to use on this wing Tail: ‘All_rotors’ # 56 # note: 4k95 = 1219.2 m, ISA + 27.92 C, 6k95 = 1828.8 m, ISA + 11.88 C # flight mode: 0-idle, 1-hover, 3-cruise Mission: nsegments: 4 flight_mode: [’hover’,’cruise’, ’cruise’,’hover’ ] time_seg: [ 1.5, 0, 0, 1.5 start_altitude: [ 0.0, 00.0, 0, 0 ] # m end_altitude: [ 0.0, 0.0, 0, 0 ] # m delta_temp_isa: [ 0.0, 0.0, 0, 0 ] # centrigrade cruise_speed: [ 0, 98, 98, 0 ] # knots distance: [ 0, 50, 15, 0 ] # in km add_payload: [ 0, 0, 0, 0 ] # segment_type: [ ‘all’, sizing_order: [ # fixed_GTOW: 1, ] ‘all’,‘reserve’, ‘all’ ] # 2, 0, 0 ] # 1400.0 Aircraft: aircraftID: 2 # 1: SMR, 3: Coax, 4: Quadrotor (needs to be improved), 5: custom # payload, crew (kg) mass_payload: mass_crew: avionics: 320.0 # 250 kg payload + 70 kg margin 0 79.2 57 common_equipment: 24.0 # HVAC systems - common for all PAX common_per_pax: 00.0 pax_count: 0 nrotor: 8 # total number of rotors npropeller: 0 # Cruise propeller count engineType: # passengers (uses pax -> baggage map) ‘electric_motor’ # engine parameters Each main dictionary and its relevant inputs are discussed below. 7.1.1 Sizing This dictionary specifies the values of high-level design variables to use for sizing the vehicle. Up to three sub-dictionaries (Rotor, Wings and Fuselage) and two logical inputs for using higher-fidelity models constitute the sizing dictionary. 7.1.1.1 Rotors The Rotors dictionary consists of sub-dictionaries, with each sub-dictionary corresponding to a rotor. Several instances of this rotor unit may exist on the vehicle; this detail is provided in the Configuration dictionary, detailed in the following sub-section. Each Rotor group is determined by several sizing design variables. In the present example, the Rotor sub-dictionary is Rotors: All_rotors: 58 Nb: [3] Vtip: [170, 180, 190] ctsigma: [0.13, 0.139] # per rotor # hover tip speed, m/s This definition shows that there is one rotor group used in the vehicle called ‘All_rotors’, with three design variables to size rotors in this group: 1. Number of blades Nb - single or multiple integers 2. Tip speed VTIP in m/s - list of floats 2 ) - list of floats 3. Hover blade loading CT /σ = T/(ρNb cRVTIP Rotor radius: If the rotor radius is specified, then it is set to the input value. If the disk loading is specified, rotor radius is calculated based on the vehicle weight, rotor thrust share and hover down-load (specified in defaults.yaml). If the rotor disk loading in hover is not specified (keyword DL, lb/sq.ft) and the rotor radius (keyword radius, meters) is also not specified, the rotor is assumed to be mounted on a wing, and the size is set based on wing span (calculated in fixed wing sizing) and rotor tip clearance (specified in defaults.yaml). After calculating rotor radius, the tip speed is used to identify the mean rotor blade chord. If the rotor geometric solidity (keyword solidity) is specified, then the hover blade loading is calculated. Otherwise, the the hover blade loading (keyword ctsigma) must be specified, and the geometric solidity is calculated. Some additional inputs are rotor cruise RPM to hover RPM ratio (keyword RPM_ratio), and first flap frequency in hover (keyword fl_freq). If these inputs are not specified, then default values of 59 ΩC /ΩH = 0.5 and νβ =1.1/rev are assumed. 7.1.1.2 Wings The Wings dictionary consists of sub-dictionaries, with each sub-dictionary corresponding to a fixed wing type. Several instances of this fixed wing unit may exist on the vehicle; this detail is specified by the parameter nwing. In the example shown above, the Wings dictionary is Wings: Main_wing: nwing: [1] aspectratio: [5,6,7,8] cl: [0.4,0.5,0.6] liftfraction: [0.9] nrotors: [6] Tail: nwing: [1] aspectratio: [6] cl: [0.3] nrotors: [2] This input specifies one fixed wing called “Main_wing”, and another called “Tail”. The number of wings is specified using the parameter nwing, which is usually 1. The input nwing =[2] is used for tandem-wing designs, where both the canard and main wing are of identical construction. The parameter aspectratio is the wing aspect 60 ratio b2 /Swing , cl is the wing cruise lift coefficient and liftfraction is the fraction of vehicle weight carried by the wing group in cruise. Finally, the parameter nrotors specifies the number of rotors mounted on a wing of this group. Here, 6 rotors are mounted on the main wing, and 2 rotors are mounted on the tail. Each input parameter can be specified as a list of values to investigate. 7.1.1.3 High-fidelity model switches The parameter ifea is a logical input, used to specify if the FEA-based weight model is to be used in the sizing loop to estimate the airframe structural weight. The other parameter use_bemt indicates whether the Blade Element Momentum Theory (BEMT) should be used to refine rotor performance estimates in hover (and cruise for prop-rotors). In this example, both options are not enabled. 7.1.2 Vehicle configuration Configuration: Rotors: All_rotors: ‘All_motors’ # motor group to use to drive this rotor Wings: Main_wing: ‘All_rotors’ # what rotor group to use on the main wing Tail: ‘All_rotors’ # what rotor group to use on the tail This dictionary specifies the vehicle configuration, and associations between wings/fuselage and rotors, and drive motors for each rotor group. In the example given above, the configuration dictionary is repeated below. The first sub-dictionary for 61 the configuration specifies that rotors belonging to the group “All_rotors” are driven by motors specified by a group called “All_motors”. The rotor group name corresponds to the string used to specify the rotor design variables in the Sizing section. The second sub-dictionary for the vehicle configuration specifies that on the fixed wing called ‘Main_wing’, the rotors mounted on this structure are of the type “All_rotors”. Similarly, the “Tail” fixed wing features rotors of type “All_rotors”. 7.1.3 Mission profile The mission profile from input.yaml is repeated below for convenience: Mission: nsegments: 4 flight_mode: [’hover’,’cruise’, ’cruise’,’hover’ ] time_seg: [ 1.5, 0, 0, 1.5 start_altitude: [ 0.0, 00.0, 0, 0 ] # m end_altitude: [ 0.0, 0.0, 0, 0 ] # m delta_temp_isa: [ 0.0, 0.0, 0, 0 ] # centrigrade cruise_speed: [ 0, 98, 98, 0 ] # knots distance: [ 0, 50, 15, 0 ] # in km add_payload: [ 0, 0, 0, 0 ] # extra payload segment_type: [ ‘all’, sizing_order: [ # fixed_GTOW: 1, ] ‘all’,‘reserve’, ‘all’ ] 2, 0, 0 ] # 1400.0 The parameter nsegments specifies the number of mission segments. Each segment type can be ‘hover’ or ‘cruise’, specified by the parameter flight_mode. For 62 hover segments, the duration is specified by the parameter time_seg. For cruise segments, either the segment duration can be specified, or the distance can be provided as an input and the segment velocity cruise_speed will be calculated. If the distance is provided as a non-zero input value, the cruise segment duration input is ignored. For climb segments, the start and end altitudes start_altitude, end_altitude are specified in meters. The parameter add_payload is used to inform the analysis that the payload has changed at the end of a mission segment (e.g., cargo picked up/dropped off or passenger disembarked/entered the vehicle). The input parameter segment_type specifies the type of mission segment - ‘all’ indicates the segment is used in dayto-day operations, while ‘reserve’ indicates that the segment is used for sizing, nut not operating cost calculations. The parameter sizing_order is a list of integers, with zero specifying that the segment is not used for sizing, and a non-zero integer specifying that the segment is used to size a particular component. Usually, the first hover segment and first cruise segment are used for sizing various components. The final line is an optional input specifying the parameter fixed_GTOW. If this line is present, it instructs the analysis to run sizing in fixed take-off weight mode, and estimate the payload based on the remaining mass. 7.1.4 Aircraft The aircraft specification dictionary is repeated below for convenience. The payload mass, crew mass, common equipment and avionics mass are fixed mass groups, specified in kg. The parameter common_per_pax is the mass of equip63 ment that is multiplied by the number of passengers, specified by pax_count. Based on the number of passengers, additional payload is added internally with the following map: 150 kg for first passenger, 125 kg for next two passengers and 120 kg for the fourth and fifth passengers. The parameters nrotor and npropeller are outdated inputs. Finally, engineType specifies the powerplant that is used to store and produce mechanical energy. Valid entries are ‘electric_motor’ (with Lithium ion battery), ‘turboshaft’ (with mechanical transmission), piston (with mechanical transmission), turbo_electric (turboshaft with generator and electric motors) and piston_electric (piston engine with generator and electric motors). Aircraft: aircraftID: 2 mass_payload: mass_crew: avionics: # 1: SMR, 3: Coax, 4: Quadrotor, 5: custom 320.0 # 250 kg payload + 70 kg margin 0 79.2 common_equipment: 24.0 # HVAC systems - common for all PAX common_per_pax: 00.0 pax_count: 0 # passengers (uses pax -> baggage map) nrotor: 8 # total number of rotors npropeller: 0 # Cruise propeller count engineType: ‘electric_motor’ # engine parameters 64 7.2 defaults.yaml This input file contains the sizing constraints, motor efficiencies, powerplant details, calibration factors for empirical/reduced-order weight and peformance models and cost models. Also included are “technology factors”, i.e., multipliers applied to weight predictions for each component. The file is too large to be printed verbatim as a whole unit; instead the text is subdivided into dictionary-sized segments, and each dictionary in this input file is detailed below. 7.2.1 Sizing dictionary Sizing: Constraints: max_rotor_radius: 12.0 # m max_ct_sigma : 0.14 max_gtow : 5000.0 # kg Constraints used to size the vehicle are specified in this dictionary. The first parameter max_rotor_radius is the maximum rotor radius (for single main rotor helicopters) or the maximum vehicle footprint (for eVTOL). The parameter max_ct_sigma is the upper limit on rotor blade loading in hover. Finally, max_gtow is the upper limit on take-off mass imposed for the vehicle. These constraints are imposed during optimization as well as iterative sizing. If any of these three constraints are violated during fixed-point iterations, the sizing loop is 65 terminated and the design is marked “invalid”. 7.2.2 Empirical parameters This dictionary contains several sub-dictionaries, each of which are detailed below. A sample dictionary is broken into sub-dictionaries and explained below. 7.2.2.1 Transmission Empirical: # Empirical modeling parameters Transmission: eta: 1.00 # transmission efficiency The parameter eta is a fraction between 0 and 1, quantifying the efficiency of the electrical/mechanical transmission. Both wires and driveshafts/gears feature upwards of 98% efficiency. 7.2.2.2 Electric motors Motors: #motor efficiencies All_motors: hover_efficiency: 0.90 cruise_efficiency: 0.85 Presently, the empirical parameters used for motor sizing are hover_efficiency and cruise_efficiency. In reality, prop-rotors may operate at significantly lower cruise RPMs, resulting in different electrical-to-mechanical energy conversion effi- 66 ciencies for the electric motors and speed controllers. 7.2.2.3 Battery Battery: Cell: sp_energy: 240.0 # measured in W-hr/kg Tmax: # max cell temperature, deg C 70.0 energy_vol: 632.0 volume: # energy density, Watt-hours/liter 0.01708 # volume of a cell unit, liters Pack: SOH: 0.8 # state of health; 0 = gone; 1 = brand new DOD_min: 0.075 # minimum depth of discharge; integ_fac: 0.75 # battery pack integration factor for mass vol_fac: 0.3 # battery volume integration factor Force_sizing: ‘energy’ # ignore cell count or temperature effects The battery sub-dictionary features parameters to model individual cells, as well as the battery pack. The cell parameters are sp_energy (maximum rated energy stored per unit cell mass), Tmax (maximum rated cell temperature), energy_vol (rated energy per unit cell volume) and volume (unit cell volume in liters). The battery pack is quantified by the following parameters 1. State of health SOH - the maximum energy that can be stored in the pack, as a fraction of its rated energy. This parameter is usually less than unity because charge/discharge cycling of cells results in reduced energy storage capacity. 67 2. Minimum depth of discharge DOD_min - the minimum energy capacity that the pack must retain to avoid permanent set and reduced energy capacity in individual cells. 3. Pack mass integration factor integ_fac - the ratio of battery cell mass to pack mass, to account for the battery casing and power management systems. 4. Pack volume factor vol_fac - the ratio of cell mass to battery pack mass, to account for additional components introduced by the mass integration factor, as well as clearances for cell cooling. Finally, the battery sizing option Force_sizing is character input that directs the battery sizing module to ignores thermal effects and pack voltage constraints; if this input is present, only energy-based sizing is performed. 7.2.2.4 Aerodynamics The aerodynamics dictionary is used to specify rotor hover and cruise efficiencies, interference losses, wing efficiencies and body drag. A sample dictionary is shown below. Aerodynamics: Rotors: hover_dwld_factor: 0.015 cd0: 0.012 induced_power_factor: 1.18 FM: 0.75 68 kint: 1.02 hover_thrust: ‘equal’ Wings: oswald: 0.8 cd0: 0.014 Propellers: eta: 0.85 Body: flat_plate_factor: 0.88 # means use drag build-up model The Rotors sub-dictionary contains modeling constants to quantify hover efficiency 1. hover_dwld_factor is the additional fraction of nominal rotor lift share that the rotor has to produce in hover to overcome vertical down-load due to the rotor wake impinging on the structure of the vehicle 2. cd0 is the average profile drag coefficient of the rotor blade airfoil section 3. induced_power_factor is the multiplier for ideal rotor power to account for non-ideal losses 4. FM is the rotor hover figure of merit. If the hover figure of merit is given as non-zero, then FM is used to estimate rotor shaft power in hover. If the value of figure of merit is given as zero, then the profile drag coefficient and induced power factor are used to estimate rotor hover power. 69 5. kint is the rotor power scaling factor to account for interference losses. 6. hover_thrust is a character input that ignores the calculated rotor lift share, and distributes the hover thrust equally across all rotors in the system. This input is primarily present for backward-compatibility, and should not be used extensively except for debugging. The empirical parameters used to model wing performance are the Oswald efficiency factor oswald (quantifies additional induced drag for non-elliptical span loading) and the mean profile drag coefficient cd0. The efficiencies of dedicated cruise propellers and prop-rotors in cruise is quantified by the Propeller parameter eta. Finally, the scaling factor to estimate body drag from weight using a weight-drag trendline is the parameter flat_plate_factor. If this input is zero, then the analysis uses a component drag build-up to estimate parasitic drag. 7.2.2.5 Geometry Geometry: fuselage_width: 1.00 # fuselage width in meters fuselage_length: 7.00 # fuselage length in meters clearance: # rotor tip clearance / radius ratio 0.15 The three geometry parameters used for sizing are the fuselage width at the widest point fuselage_width (meters), airframe length fuselage_length (meters) and the rotor clearance parameters clearance. This final parameter is the in-plane 70 clearance between a rotor plane and other rotor planes/vehicle fuselage. 7.2.2.6 Technology factors The term technology factor refers to scaling factors (“multipliers”) used to increase or decrease component empty weights to account for improvements in lightweight manufacturing. A sample dictionary is shown below. Tech_factors: Weight_scaling: 7.2.3 rotor: 1.0 # rotor blades and hub wing: 0.9 empennage: 1.0 # tail surfaces/winglets fuselage: 1.0 # airframe structure landing_gear: 0.4 # fuel_system: 1.0 # fuel pumps for engines drive_system: 1.0 # transmission # wings flight_control: 1.0 # anti_icing: 0.0 # powerplant: 0.76 # motors and engines fuel: 1.0 # fuel battery: 1.0 # battery Acquisition cost model There are two types of costs associated with the rotorcraft that are modeled in HYDRA: acquisition cost (component purchase) and operating cost. The dictio71 nary Acquisition contains three sub-dictionaries: Fixed_cost, Scaling_cost and Beta_acq_factors. Each of these dictionaries is detailed below with examples. 7.2.3.1 Fixed acquisition cost Acquisition: Fixed_cost: sense_avoid: 189817.0 # USD avionics: 145807.0 # USD interiors: 45152.0 testing: 6400.0 # USD, air conditioning/heater/HUD # USD This sub-dictionary contains inputs for the cost of vehicle components that do not vary with vehicle size. These groups include the sense and avoid system, avionics, interiors and component testing. 7.2.3.2 Scaling_cost This sub-dictionary contains inputs for the cost of vehicle components that scale with the mass of each component. Several components fall under this category, particularly airframe, wings, landing gear, rotor blade structures, transmission lines and motors. A sample dictionary is shown below. Scaling_cost: final_assem_line: 90.07 # USD/kg of take-off mass BRS: # USD/kg of take-off mass fuselage: 10.885 2807.0 # USD/kg of fuselage weight 72 landing_gear: 1725.0 # USD/kg of landing gear strl. weight wing_structure: 3779.1 # USD/kg of wing motors: 2669.0 # USD/kg of drive motor mass power_dist: 31.0 structural weight # USD/kW of installed power rotor_blade: 77605.0 # USD/sq.m of plan-form area rotor_hub: 14133.0 # USD/kg: hub+collective actuator wires: 20.3 # USD/kg of wire weight tilt_actuator: 2868.0 # USD/kg of tilt actuator weight wing_flap: 2619.0 # USD/kg of wing flap/aileron 7.2.3.3 Acquisition cost scaling factors This dictionary deals with cost multipliers that account for reduction of component prices associated with mass-production. A value less than one indicates that the component is less expensive when manufactured in bulk. Beta_acq_factors: # acquisition cost multipliers sense_avoid: 0.5 avionics: 0.75 interiors: 1.0 testing: 1.0 # air conditioning/heater/HUD final_assem_line: 0.5 BRS: 0.75 fuselage: 0.2 landing_gear: 0.2 73 wing_structure: 0.2 motors: 0.2 power_dist: 1.0 rotor_blade: 0.2 rotor_hub: 0.2 wires: 1.0 tilt_actuators: 0.75 wing_flaps: 0.75 7.2.4 Operations Operating costs are of two types: annual and hourly operating costs. These two components of the operating cost model are specified as sub-dictionaries under Operations. Additionally, the constants required to obtain battery life cycle costs are also specified. Finally, vertiport details are also specified and the cost of an eVTOL trip is compared to the cost of using a taxi for traveling the same distance. Each of these sub-dictionaries are detailed below. 7.2.4.1 Annual costs Operations: Annual: Flight_hours: 1500 # flight hours per year Liability: 22000 # USD liability insurance per year Inspection: 7700 # USD, per year 74 Insurance_percent: 4.5 # insurance, % of acquisition Depreciation_percent: 10 # % of acquisition cost depr./year Pilot: 280500 # USD, pilot cost to company/year Training: 9900 # USD, pilot training/year The number of flight hours per year (Flight_hours) is used to calculate the equivalent cost per flight hour from the annual fixed costs incurred in ensuring vehicle airworthiness. The annual costs incurred are Liability, Inspection, insurance and depreciation (specified as a percentage of acquisition cost, Insurance_percent and Depreciation_percent respectively). For a piloted vehicle, additional costs are incurred for pilot salary and overhead (Pilot) as well as continuous training (Training). 7.2.4.2 Hourly costs This dictionary specifies the maintenance and inspection costs associated with operating an air vehicle. The three elements in this dictionary are 1. Frame inspection (Frame_maintenance): specified as a cost in currency per flight hour 2. Rotor blades, collective actuator and hub inspection (Rotor_inspection): specified as a cost in currency per flight hour per unit assembly 3. Electric motor inspection (Motor_inspection): specified as a cost in currency per flight hour per motor unit. Hourly: 75 Frame_maintenance: 37.35 Rotor_inspection: 1.0 # $/flight hr/rotor Motor_inspection: 0.625 # $/flight hr/rotor 7.2.4.3 # $/flight hr Battery costs This dictionary specifies the number of charge/discharge Cycles that a battery can withstand before its energy reduces to the design state of health specified in Sizing → Battery → Pack → SOH. Additionally, the purchase price of a battery pack as well as the battery recharge cost are specified as cost per unit rated energy/cost per unit of energy (Cost_per_kwh, Electricity respectively). Battery: Cycles: 900 Cost_per_kwh: 180.0 Electricity: 7.2.4.4 # battery cost/rated energy, $/kWh 0.20 # electricity/unit energy, $/kWh Vertiport The relevant operational details at the vertiport are the landing tariffs (Landing_fees) per touchdown, the distance from the vertiport to the final passenger destination (Ground_distance in km) and the additional time spent in commuting to and from the vertiport changing modes of transport (Padding_time). Vertiport: Landing_fees: 20.0 # landing fee per flight, USD Padding_time: 26.0 # min, curb -> UAM + UAM -> curb 76 Ground_distance: 7.2.4.5 2.0 # last leg distance in km Taxi details The details of a taxi that can compete with a short-range aircraft are the tariff per unit distance traveled (Distance_rate in currency per km), a time tariff (Time_rate in currency per minute) and the additional time required to change from another mode of transport to the taxi (Padding_time, minutes). Taxi: Distance_rate: 0.55 # Taxi price in USD per km Time_rate: 0.36 # USD/minute of taxi ride Padding_time: 7.2.5 15.0 # airport gate to curb, minutes Redundant systems The dictionary Redundancies specifies components that feature doubly or triply redundant backups for flight controls, power cables and avionics. The redundancy factors are used to proportionally increase the component empty weights and associated group costs. Redundancies: wing_flap: 1.0 tilt_actuator: 2.0 wires: 1.0 avionics: 1.0 77 8 Output files This section of the documentation details the output file generated at the end of sizing. The file pattern is log .yaml, where is an integer representing a unique design ID number. The output is in plain text formatted as a YAML file, similar to the input files. These files can be read an automatically converted to Python dictionaries using the pyyaml package. All outputs are stored under the outputs/log/ subdirectory in the run folder. 8.1 log .yaml An example output log file is detailed dictionary-by-dictionary below, and the relevant outputs are explained. 8.1.1 vehicle summary # --------------------------------------------------# Mission and Vehicle Log # --------------------------------------------------vehicle: aircraftID: 2 take_off_mass: 1734.67 # [kg] power_installed: 963.0 # [kW] Cruise_LbyD: 11.80 # The vehicle dictionary contains four high-level vehicle metrics. The aircraftID is 78 an outdated output, that is a copy of the input value given in input.yaml. The other metrics given in this dictionary are the take-off mass in kg, sum of maximum rated motor power values in kiloWatts and the vehicle lift-to-drag ratio in the cruise sizing segment. 8.1.2 Rotor The Rotor dictionary provides details of the rotor geometry and performance in the hover sizing segment. Each sub-dictionary under the rotor dictionary corresponds to a unique rotor group. For each rotor group, the following outputs are specified: 1. nrotor: number of rotors of this type in the vehicle 2. nblade: number of blades per rotor in this rotor type 3. disk_loading: rotor hover disk loading in pounds per square foot 4. aspect_ratio: blade aspect ratio (radius to chord ratio) 5. radius: rotor radius in meters 6. chord: mean rotor blade chord in meters 7. tip_speed: rotor hover tip speed in m/s 8. hover_FM: rotor figure of merit in the hover sizing segment 9. cruise_rpm_ratio: rotor cruise RPM divided by rotor hover RPM 10. eta_xmsn: transmission efficiency, 0 to 1 79 11. solidity: rotor geometric solidity 12. cd0: rotor blade airfoil drag coefficient at zero lift 13. ipf : rotor induced power factor in hover (non-ideal losses) 14. hvr_dwld: hover download divided by rotor lift share 15. hvr_ct_sigma: rotor blade loading in hover sizing segment 16. prop_eta: prop-rotor efficiency in cruise sizing segment Rotor: set0: nrotor: 8 nblade: 3 disk_loading: 16.76 # [lb/ft2] aspect_ratio: 5.86 radius: 0.93 # [m] chord: 0.158 # [m] tip_speed: 170.0 # [m/s] hover_FM: 0.750 cruise_rpm_ratio: 0.500 eta_xmsn: 1.000 solidity: 0.16299 cd0: 0.012 ipf: 1.234 hvr_dwld: 0.015 80 8.1.3 hvr_ct_sigma: 0.139 prop_eta: 0.850 Wings This dictionary contains details of the wing geometry and operating condition in the cruise sizing segment. If multiple wing groups are present in the system, then details of each wing group are listed as sub-dictionaries. For each wing group, the following details are written: 1. nwing: the number of fixed wings of this type present in the vehicle. 2. span: the tip-to-tip dimension in meters 3. chord: the average wing chord in meters 4. structure_wt: the weight of the structure for one wing 5. wires_wt: the weight of wires running along one wing 6. aspect_ratio: the wing aspect ratio 7. oswald: the wing Oswald efficiency 8. cd0: the wing profile drag coefficient 9. cl: the operating lift coefficient for the cruise sizing segment 10. lift_fraction: lift fraction for this wing group in the cruise sizing segment 11. rotors_per_wing: the number of rotors mounted along a wing of this group 81 12. rotor_group_id: the group identifier for rotors mounted on this wing Wings: set0: nwing: 1 span: 11.086 # [m] chord: 2.217 # [m] structure_wt: 117.303 # [kg, each] wires_wt: 66.506 # [kg, each] aspect_ratio: 5.000 oswald: 0.800 cd0: 0.014 cl: 0.400 lift_fraction: 0.900 rotors_per_wing: 6 rotor_group_id: 0 set1: nwing: 1 span: 4.674 # [m] ... (pattern repeats) ... 82 8.1.4 Costs The costs dictionary contains a breakdown of the vehicle acquisition cost and operating cost per flight hour, as well as the results of comparisons with a ground taxi. The individual sub-dictionaries are detailed below. 8.1.4.1 Acquisition cost breakdown The first row Frame_acquisition is the acquisition cost of the aircraft in millions of currency. The following dictionary shows two values per line: the first value is the cost of the component in currency, and the second column shows the fraction of the component’s acquisition cost as a percentage of the total acquisition cost. Costs: Frame_acquisition: [0.779632] # [Millions of USD] acquisition_cost_breakdown: BRS : [ 14161.395 , 1.816] # [USD, % acquisition cost] avionics : [ 109355.250 , 14.027] # [USD, % acquisition cost] final_assem_line: [ 42876.657 , 5.500] # [USD, % acquisition cost] fuselage : [ 47190.123 , 6.053] # [USD, % acquisition cost] interiors : [ 45152.000 , 5.791] # [USD, % acquisition cost] landing_gear : [ 20874.300 , 2.677] # [USD, % acquisition cost] motors : [ 117455.191 , 15.065] # [USD, % acquisition cost] power_dist : [ 29854.461 , 3.829] # [USD, % acquisition cost] rotor_blade : [ 54432.887 , 6.982] # [USD, % acquisition cost] 83 rotor_hub : [ 20923.226 , 2.684] # [USD, % acquisition cost] sense_avoid : [ 94908.500 , 12.174] # [USD, % acquisition cost] testing : [ 6400.000 , 0.821] # [USD, % acquisition cost] tilt_actuators : [ 37893.206 , 4.860] # [USD, % acquisition cost] wing_flaps 29202.352 , 3.746] # [USD, % acquisition cost] : [ wing_structure : [ wires 8.1.4.2 : [ 106832.064 , 13.703] # [USD, % acquisition cost] 2120.209 , 0.272] # [USD, % acquisition cost] Annual operating costs This dictionary details the breakdown of annual operating costs for maintaining airworthiness. The field Fixed_operating_costs shows the aggregated annual costs in currency. The fixed cost breakdown dictionary is organized in a manner similar to the previous section: the first column shows the cost in currency, and the second column shows the cost as a percentage of the annual cost. Fixed_operating_costs: [142746.614190] # [USD] fixed_cost_breakdown: depreciation : [ 77963.182 , 54.616] # [USD, % fixed cost] inspection : [ 7700.000 , 5.394] # [USD, % fixed cost] insurance : [ 35083.432 , 24.577] # [USD, % fixed cost] liability : [ 22000.000 , 15.412] # [USD, % fixed cost] 84 8.1.4.3 Variable operating costs This section details the costs that depend on the number of flight hours that the vehicle is operated for. The field Variable_operating_costs details the currency spent per flight hour in operating costs due to maintenance, energy usage and inspections/cleaning. The variable operating costs are broken down into the individual cost elements in the variable_cost_breakdown dictionary. The first number in the two-column rows is the cost in currency per flight hour, and the second number is the cost of that contributing element expressed as a percentage of the Variable_operating_costs field. Variable_operating_costs: [290.210] # [USD/hr] variable_cost_breakdown: battery_use : [ 51.327 , 17.686] # [USD/hr, % variable cost] electricity : [ 31.895 , 10.990] # [USD/hr, % variable cost] fixed_annual : [ 95.164 , 32.792] # [USD/hr, % variable cost] frame_overhaul : [ 37.350 , 12.870] # [USD/hr, % variable cost] landing_fees : [ 61.474 , 21.183] # [USD/hr, % variable cost] vpf_overhaul : [ 13.000 , 4.480] # [USD/hr, % variable cost] UAM_time: [ 62.589] # [minutes ] Taxi_time: [ 80.261] # [minutes ] UAM_trip_cost: [ 101.662] # [USD ] Taxi_trip_cost: [ 50.994] # [USD ] Time_value: [ 2.867] # [$/min saved] 85 The last five fields are miscellaneous data that compare the performance and cost of an eVTOL with a ground taxi. UAM_time is the time taken to travel from an airport gate to a vertiport, fly to another vertiport and finally travel the last leg by ground taxi (i.e., door-to-door time from airport to final destination through an “air taxi”). The field Taxi_time is the door-to-door time from airport to final destination using ground transport only. UAM_trip_cost is the total cost of operating a combined air taxi and ground taxi for the final leg, and the corresponding cost for the ground taxi-only option is Taxi_time_cost. The time value is defined as the price difference between the two transport options, divided by the time difference, or time value. 8.1.5 Weight breakdown This dictionary details the breakdown of vehicle weights. Three main weight categories are listed: battery (and/or fuel), payload and empty mass. For rows with two columns, the first column is the component mass in kg, and the second column is the mass of the component expressed as a percentage of take-off mass. For rows with a single column, the number corresponds to a component’s mass in kg. For the empty weight dictionary, each components is listed under subdictionaries. If the empty weight group is a dictionary with additional breakdowns within the component, those details are also printed, along with a field called total - the accumulated mass of components within that group. These breakdowns are plotted in pie charts by the postprocessing script piethon.py. 86 Weights: empty_weight: total: [ 952.1 , 54.9] # [kg, %GTOW] alighting_gear : total : [ 60.5 , fairing : [ 26.0] # [kg] structure : [ 34.5] # [kg] 3.5] # [kg, % GTOW] avionics : [ 79.2 , 4.6] # [kg, %GTOW] common_equip : [ 24.0 , 1.4] # [kg, %GTOW] emergency_sys : [ 40.4 , 2.3] # [kg, %GTOW] , 1.4] # [kg, % GTOW] empennage : total : [ 23.9 vtail : [ 23.9] # [kg] fuselage : total : [ 84.1 bulkhead : [ 12.4] # [kg] canopy : [ 12.2] # [kg] keel : [ 14.9] # [kg] skin : [ 44.6] # [kg] powerplant total , 4.8] # [kg, % GTOW] : : [ 220.0 , 12.7] # [kg, % GTOW] motor_group0 : [ 220.0] # [kg] rotor total : : [ 143.6 , 87 8.3] # [kg, % GTOW] group0actuatr: [ 26.9] # [kg] group0blades : [ 73.7] # [kg] group0hub wing : [ 43.0] # [kg] : total : [ 171.9 actuators : [ 14.9] # [kg] mounts : [ 22.0] # [kg] structure : [ 117.4] # [kg] tilters : [ 17.6] # [kg] wires total , 9.9] # [kg, % GTOW] : : [ 104.4 , 6.0] # [kg, % GTOW] power_wire : [ 74.3] # [kg] signal_wire : [ 30.1] # [kg] battery: [462.58 , 26.7] # [kg] payload: [320.02 , 18.4] # [kg] 8.1.6 Volumes The volume output section is under development, and additional fields will be introduced in future versions of HYDRA. At present, the dictionary contains: Volumes: fuselage_width: passenger_count: battery_volume: 1.00 # [m] 0 # [people] 0.439 # [cu.m] 88 This dictionary outputs the fuselage width (specified in defaults.yaml) in meters, number of passengers (specified in input.yaml) and the calculated battery volume in cubic meters. 8.1.7 Parasitic drag This dictionary details the vehicle flat plate area (flat_plate_area) in square meters. If the (Empirical → Aerodynamics → Body → flat_plate_factor input in defaults.yaml is set to zero, the component drag build-up for the vehicle parasitic drag is also printed in a sub-dictionary, flat_plate_breakdown. The entries in this sub-dictionary are the parasitic drag of each component expressed as a percentage of the total flat plate area. Parasitic_drag: flat_plate_area: 0.422 # [sq.m] flat_plate_breakdown: LG : [ 41.0] # [%] base : [ 7.0] # [%] fus : [ 18.9] # [%] prot : [ 9.1] # [%] spin : [ 20.1] # [%] vt : [ 3.8] # [%] 89 8.1.8 Mission details This dictionary provides relevant details for the vehicle performance during various mission segments. The field total_energy is the energy in kWh required to complete the mission, which has nsegments segments. The segment types are given in the list flight_mode, with the segment altitudes given in meters by the fields start_alt and end_alt. The variable delta_temp_ISA is the temperature offset at sea level for the sizing mission relative to the temperature in the International Standard Atmosphere model. The segment rate of climb is specified in feet per minute, while cruise speed is specified in knots. Segment duration is specified by the field time, and rotor power required for each segment is listed in kilowatts. The corresponding battery power draw is also listed in kW, and the battery C-rating is listed in 1/hr. The cell temperature (if the model is used in sizing) is shown at the end of each segment in deg C. Ambient density is specified in kg/cu.m. The vehicle mass at the beginning of each segment is listed in segment_mass. The variable segment_type is a character string; ‘all’ indicates the segment is used for sizing and regular operations for operating cost evaluation; ‘reserve’ indicates the segment is used for sizing only, but not for regular mission operating cost. The ground distance covered by the vehicle in kilometers is output in the field segment_distance. Mission: total_energy: 67.07 # [kW-hr] nsegments: 4 90 flight_mode: [’hover ’,’cruise ’,’cruise ’,’hover ’] start_alt: [ 0 , 0 , 0 , 0 ] #[m] end_alt: [ 0 , 0 , 0 , 0 ] #[m] delta_temp_ISA: [ 0.00 , 0.00 , 0.00 , 0.00 ] #[C] rate_of_climb: [ 0 , 0 , 0 , 0] #[ft/min] cruise_speed: [ 0.00 , 98.00 , 98.00 , 0.00 ] #[knots] time: [ 1.50 , 16.53 , 4.96 , rotor_power_reqd: [ 486.76 , 123.49 , 123.49 , 486.76 ] #[kW] battery_power_draw: [ 540.84 , 145.28 , 145.28 , 540.84 ] #[kW] [ 4.96 , 1.33 , 1.33 , 4.96 ] #[1/hr] cell temperature: [ 0.00 , 0.00 , 0.00 , 0.00 ] #[deg C] C-rating: density: [ segment_mass: [ segment_type: [’all segment_distance: [ 8.1.9 1.226 , 2000.9 , 1.226 , 2000.9 , ’,’all 0.00, 1.226 , 2000.9 , 1.50 ] #[min] 1.226] #[kg/cu.m] 2000.9 ] #[kg] ’,’reserve ’,’all 50.00, 15.00, ’] 0.00] Battery details This dictionary is used to output the details pertaining to the battery. The rated_capacity is the rated energy in kWh of all vehicle battery packs. The state_of_health is the multiplier for the battery pack rated energy; the product of these two numbers is the maximum energy that the pack can store at the pack’s end-of-life after several charge/discharge cycles. The parameter depth_discharge is a fraction ranging from 0 to 1, which indicates the smallest energy fraction that 91 the battery can be discharged to, without damaging the cells. In this example, the battery rated capacity before cycling is 109.07 kWh, and the design state of health is 0.8, i.e., at end of life, the maximum energy that can be stored in the battery is 0.8 × 109.07 = 87.25 kWh. The minimum depth of discharge is 0.075, i.e., the battery can be discharged until 0.075 × 109.07 = 8.18 kWh of energy is remaining, without permanently damaging the cells. Battery: rated_capacity: 109.07 state_of_health: 0.800 depth_discharge: 0.075 8.2 log .txt The other output generated by HYDRA is the final converged design and its details stored as a pickle module. The various postprocessing scripts in HYDRA load the vehicle class in its converged state for various sensitivity studies and to extract details. To load the file corresponding to design ID = 0, use this template: import pickle fname = ‘outputs/log/log0.yaml’ with open(fname,‘rb’) as f: design = pickle.load(f ) The variable design is an instance of the hydraInterface class with all methods and variables required to perform sizing. 92 93 A high-level summary of all designs is provided in summary.dat. The first column is the unique design identifier; the summary.dat ... 1734.67 1872.70 2049.93 1607.40 1702.75 1826.42 1 2 3 4 5 Weight (kg) 0 Design ID # 1143.83 967.71 810.49 1411.57 1171.23 963.05 497.869 441.230 399.572 609.178 525.369 462.579 1008.55 941.50 887.79 1120.75 1027.33 952.07 Power (kW) Fuel/Batt (kg) Empty Wt (kg) is invalid, while 1 indicates the design satisfies all the constraints. 320.00 320.02 320.04 320.00 320.00 320.02 299.42785 285.65621 275.44891 325.62067 305.44722 290.21050 1 1 1 1 1 1 Payload (kg) Op Cost ($/hr) Valid design seventh column is the vehicle operating cost in currency per flight hour; the final column is an integer - 0 indicates the design configuration fuel and battery (kg); the fifth column is the empty mass in kg; the sixth column is the payload mass in kg; the second column is the take-off mass in kg, the third column is the installed power in kW, the fourth column is the mass sum of 8.3 9 Running HYDRA 1. Create a run directory under cases/ 2. Create input files input.yaml, defaults.yaml. If multiple input values of each design parameter are specified, the analysis generates all possible combinations of all specified design parameters, and launches multiple sizing operations. 3. Run sizing on a parametric sweep: copy xrun.py from a sample run directory to the current run folder, then use the following command: python3 xrun.py (serial mode) mpirun -n 8 python3 xrun.py (parallel mode, 8 threads) The various cases are automatically subdivided by HYDRA , analyzed and the summaries are collated in the summary.dat output file. 4. Sort valid designs: use the routine process_data.py routine: python3 process_data.py This command will generate a file called best_design.dat in the same format as summary.dat, with valid designs ranked in order of ascending cost, takeoff weight, installed power, or empty weight depending on the user-specified choice in process_data.py. 94 10 Postprocessing Several postprocessing scripts are provided in the Postprocessing/ folder in the sample run directories. Copy these scripts to the run directory with results to postprocess. Examples of these commands and sample outputs are shown below: 1. Pie chart generator: the script piethon.py generates pie charts for the breakdown of empty weight, annual operating costs, hourly operating costs and parasitic drag. Invoke it using the command python3 Postprocessing/piethon.py Here, is the integer unique identifier for a design. For example, the command python3 Postprocessing/piethon.py 10 generates pie charts for a vehicle with the design ID 10. The relevant images are compiled into a PDF called costs_design_10.pdf for the sample input. The individual pie charts are shown in Fig. 23 2. Battery charge profile: HYDRA features the ability to visualize the battery state of charge as a function of time along the mission profile. This postprocessor can be invoked with the command python3 Postprocessing/battery_draw.py 10 Here, 10 is the unique design ID for the sized vehicle that needs to be postprocessed. The resulting plot is stored in a PDF called battery_design_10.pdf, and shown in Fig. 24. The first subplot shows the estimated vehicle range for 95 (a) Acquisition cost (b) Annual cost (c) Operating cost (d) Parasitic drag breakdown (e) Vehicle weight (f) Empty weight Figure 23: Pie charts generated by piethon.py postprocessor for a single design 96 a “perfect battery” starting the mission at its theoretical maximum state of charge. The second subplot shows the same “ideal battery” charge, along with the estimated battery state of charge used in HYDRA for sizing the vehicle. 3. Vehicle performance: To automatically generate the (approximate) power curve, payload-range and payload-endurance trade offs, HYDRA features a performance postprocessor that can be invoked as follows: python3 Postprocessing/performance.py 28 Here, 28 is the unique design identifier that will be analyzed at various airspeeds and longitudinal trim will be performed. The outputs from the postprocessor are shown in the following pages. 97 Battery power required (kW) 500 400 with payload no payload 6C 300 200 100 0 0 10 20 30 40 Cruise speed (m/s) 50 60 100 with payload no payload Wing tilt (deg) 80 60 40 20 0 0 10 20 30 40 Cruise speed (m/s) 50 60 Lift to Drag ratio WV/Protor 10 with payload no payload 8 6 4 2 0 0 10 20 30 40 Cruise speed (m/s) 50 60 500 Payload-Endurance in hover, fixed cruise distance Ideal battery Vahana assumptions Payload (kg) 400 300 200 100 0 0 2 4 6 8 Time in hover (min) 10 12 Payload-Endurance in Cruise 500 50 m/s 43 m/s 400 58 m/s Payload (kg) 50 m/s, ideal battery 300 200 100 0 0 10 20 30 40 Time in cruise (min) 50 60 Payload-Range [3 min hover] 500 Payload (kg) 400 300 200 50 m/s 43 m/s 100 58 m/s 50 m/s, ideal battery 0 0 20 40 60 80 100 120 Cruise range (km) 140 160 Battery charge (%) Battery charge (%) Perfect battery assumptions 100 75 range 50 = 97. 4 km 25 0 0 5 10 15 20 25 Mission time (min) 30 35 30 35 Vahana battery assumptions 100 75 range 50 range = 50. 0 km = 97. 4 km 15.0 k m res erve 25 0 0 5 10 15 20 25 Mission time (min) Figure 24: Battery state of charge along mission profile 104 4. Sensitivity analysis: single and two-perturbation sensitivity studies can be launched using the following script: python3 Postprocessing/sensitivity_wrapper.py 32 Here, 32 is the unique identifier for a converged vehicle design. The resulting plots from the sensitivity of the converged design to perturbations in target airspeed (for the same mission range) are shown in the first two plots. The next four plots show the effect of changing the cruise wing loading and aspect ratio on vehicle take-off mass, installed power, battery power and operating cost as contour plots, with carpet axes. The baseline design point is marked as a circle, and invalid designs are marked with a red cross (×) inside a gray circle ◦. The final two plots show the effect of changing the rotor hover blade loading and hover tip speed on take-off mass, installed power, battery mass and operating cost. These results are stored in a PDF named sensitivities_design_32.pdf. 105 Effect of cruise airspeed design point 1850 800 1800 1750 1700 600 1650 500 1600 1550 400 70 80 90 100 110 Airspeed (knots) 120 Power (kW) Mass (kg) 700 Effect of cruise airspeed design point 550 235 525 Battery (kg) 500 225 475 220 450 215 425 210 400 205 375 200 70 80 90 100 110 Airspeed (knots) 120 Cost (USD/hr) 230 wing (group 0) design variables 1600 Wing loading (N/m2 ) 2175.0 2101.2 1400 CL =0.8 2027.5 1200 1000 Mass (kg) 1953.8 CL =0.6 1880.0 800 1806.2 CL =0.4 600 1732.5 400 AR =4 200 10 AR =6 AR =8 1658.8 CL =0.2 AR =1 =1 0 2 AR 15 20 Wing span (m) 25 1585.0 wing (group 0) design variables 1600 Wing loading (N/m2 ) 752 709 1400 CL =0.8 666 1200 1000 Power (kW) 623 CL =0.6 580 800 537 CL =0.4 600 494 400 AR =4 200 10 AR =6 AR =8 451 CL =0.2 A =1 R=1 0 2 AR 15 20 Wing span (m) 25 408 wing (group 0) design variables 1600 Wing loading (N/m2 ) 573.0 551.9 1400 CL =0.8 530.8 1200 1000 Battery (kg) 509.6 CL =0.6 488.5 800 467.4 CL =0.4 600 446.2 400 AR =4 200 10 AR =6 AR =8 425.1 CL =0.2 A =1 R=1 0 2 AR 15 20 Wing span (m) 25 404.0 wing (group 0) design variables 1600 Wing loading (N/m2 ) 284.00 274.38 1400 CL =0.8 264.75 1200 1000 (USD/hr) 255.12 CL =0.6 245.50 800 235.88 CL =0.4 600 226.25 400 AR =4 200 10 AR =6 216.62 CL =0.2 AR AR =8 =1 =1 0 2 AR 15 20 Wing span (m) 25 207.00 rotor (group 0) design variables 0.225 Mass (kg) 1972.0 CT /σ=0.08 1925.6 0.200 140 m/s CT /σ=0.09 1879.2 CT /σ=0.1 Solidity 0.175 1832.9 CT /σ=0.11 160 m/s 0.150 CT /σ=0.12 1786.5 CT /σ=0.13 0.125 1740.1 180 m/s 0.100 1693.8 0.075 1647.4 7.70 7.75 7.80 7.85 7.90 7.95 Disk loading (lb/sq.ft) 8.00 1601.0 rotor (group 0) design variables 0.225 Power (kW) 670.0 CT /σ=0.08 655.5 0.200 140 m/s CT /σ=0.09 641.0 CT /σ=0.1 Solidity 0.175 626.5 CT /σ=0.11 160 m/s 0.150 CT /σ=0.12 612.0 CT /σ=0.13 0.125 597.5 180 m/s 0.100 583.0 0.075 568.5 7.7 7.8 7.9 Disk loading (lb/sq.ft) 8.0 554.0 rotor (group 0) design variables 0.225 Battery (kg) 496.00 CT /σ=0.08 486.88 0.200 140 m/s CT /σ=0.09 477.75 CT /σ=0.1 Solidity 0.175 468.62 CT /σ=0.11 160 m/s 0.150 CT /σ=0.12 459.50 CT /σ=0.13 0.125 450.38 180 m/s 0.100 441.25 0.075 432.12 7.7 7.8 7.9 Disk loading (lb/sq.ft) 8.0 423.00 rotor (group 0) design variables 0.225 (USD/hr) 243.00 CT /σ=0.08 238.75 0.200 140 m/s CT /σ=0.09 234.50 CT /σ=0.1 Solidity 0.175 230.25 CT /σ=0.11 160 m/s 0.150 CT /σ=0.12 226.00 CT /σ=0.13 0.125 221.75 180 m/s 0.100 217.50 0.075 213.25 7.70 7.75 7.80 7.85 7.90 7.95 Disk loading (lb/sq.ft) 8.00 209.00 5. Optimization: After running xrun.py, use the following commands to invoke sizing optimization: python3 process_data.py #⇒ filter out invalid designs, rank python3 Postprocessing/optimize_driver.py # serial mode mpirun -n 8 python3 Postprocessing/optimize_driver.py # parallel This command launches two types of optimization: (a) gradient-based optimization (several threads), with several initial conditions based on valid designs identified by the process_data.py command, and (b) differential evolution (first thread), with a latin-hypercube initial sampling. The optimized designs (generated by both methods) are aggregated and checked for uniqueness and validity. These unique designs are written to the file optim_summary.dat, with the syntax identical to summary.dat and best_design.dat. Additionally, the file optim_dvars_summary.dat shows the values of the design variables that yield the optimum design. After optimization is complete, the outputs/log/ folder will feature files with the pattern optim_log_ .yaml and optim_log_ .txt, with patterns similar to the regular output files of the same format. The process_data.py command can be called with an additional argument ‘optim’ as follows: python3 process_data.py optim This command sorts the various optimized unique designs in optim_summary.dat from best to worst and writes the results in a file called optim_ranked.dat. 116 A Cantilever beam dynamics Consider an eVTOL wing with multiple electric motors and rotors mounted along the spar, shown in Fig. 25. The wing structure is idealized as a cantilever beam with non-structural lumped masses placed along the span, shown in Fig. 26. Figure 25: Rotor layout for an example eVTOL wing Figure 26: Idealization of eVTOL wing structure To expand the generality of the analysis, consider a tapered circular spar running along the length of the wing. The cross-section of the spar is shown in 117 Figure 27: Linearly tapered circular spar Fig. 27. The tube thickness is equal to t, and is uniform along the spar length. The radius of the circular cross-section varies from r1 at the root of the beam to r2 at the tip. The mass per unit span and bending stiffness of the spar is given by m(x) = 2πρr(x)t EIyy (x) = Eπr(x)3 t The first bending natural frequency is estimated using a Rayleigh-Ritz approximation, with a mode shape set by the static deflection of the cantilever due to a tip-load, i.e., w00 (x) = P (L − x) (31) Integrate twice along the span and apply the cantilever boundary condition to obtain the deflected bending slope as 0 w (x) = P a2 a1 + + a0 Eπt r(x)2 r(x) 118 (32) The constants are a2 = a1 = a0 = L r1 − 0 2r 2r0 2 1 − 02 r L 1 − 2 0 0 2r r1 2r 2 r1 − Integrate the bending slope along the span to obtain the deflected mode shape as w(x) bm P b0 + b1 x + + bl loge r(x) Eπt r(x) = (33) The constants are A.1 b0 = − b1 = a0 bm = − bl = a1 r0 a2 a1 − loge (r1 ) r1 r 0 r0 a2 r0 Potential energy The maximum potential energy is given by U = 1 2 L Z 0 P 2 (L − x)2 dx EIyy (x) Substitute for the bending stiffness to obtain U = 1 P2 [A + B + C](λ) 2 Eπt The term λ is the spar taper ratio, given by λ = 119 r2 r1 (34) The sum A + B + C is well-represented by a cubic polynomial in λ as A+B+C (1.6261 − 0.4826λ + 2.1197λ2 − 0.5957λ3 ) ≈ 1 K3 The constant K is the inverse of the spar aspect ratio, given by K Here, A.2 t c = 2( ct ) ARwing (35) is the wing thickness to chord ratio, and ARwing is the wing aspect ratio. Kinetic energy The maximum kinetic energy of the beam has contributions from three types of masses: 1. Structural masses: This term deals with the kinetic energy of the spar structure. This contribution to kinetic energy is Z KEs = 0 L 1 2πr(x)tρ w(x)2 ωn2 dx 2 = P2 ρω 2 (RHS) E 2 πt n The term RHS is a function of the taper ratio λ, length L and spar taper ratio inverse K only. Further, the dependence on wing taper λ can be approximated using a cubic polynomial in λ. Thus, the kinetic energy coefficient RHS is approximated as RHS ≈ L2 (0.04823 + 0.269λ + 0.15178λ2 + 0.36917λ3 ) K5 2. Non-structural distributed masses: This term deals with the kinetic energy due to the skin and other components (e.g., wires) that do not contribute 120 significantly to bending stiffness. The kinetic energy term is L Z KENS = 0 1 mNS (x) w(x)2 ωn2 dx 2 The non-structural mass due to wing skin is given by mNS (x) The term MNS A = 2MNS r(x) A( ct ) is the non-structural mass per unit plan-form area of the skin. Define an intermediate quantity β given by β MNS A( ct ) = The expression for kinetic energy of non-structural masses simplifies to KENS = β P 2 ωn2 RHS E 2 π 2 t2 3. Non-structural lumped mass: This term refers to the kinetic energy of the electric motor/speed controller unit, rotor hubs and rotor blades. These discrete lumped masses are mounted along the wing spar, and the kinetic energy of these masses is given by KElump ΣNi M = 1 Mi w(xi )2 2 = P 2 ωn2 ∆RHS E 2 π 2 t2 The coefficient ∆RHS is ∆RHS A.3 = NM Mi i 2 Σ bm b0 + b1 xi + bl loge r(xi ) + r(xi ) 2 Frequency tuning The goal is to determine the spar mass by setting a target first natural fre- quency ωn for the cantilever beam with distributed and lumped non-structural 121 masses. Equating the maximum total kinetic energy and maximum potential energy for the first bending mode, we obtain 1 P2 LHS 2 E 2 πt ωn2 = P2 P2 P2 (RHS) + β(RHS) + ∆RHS E 2t E 2 π 2 t2 E 2 π 2 t2 (36) Solve for spar thickness as t = Eπ LHS − ρπRHS 2ωn2 −1 [β(RHS) + ∆RHS] The total spar mass is therefore Mspar = πρ t(1 + λ)r1 (37) For validation of the Rayleigh-Ritz solution, several cases were evaluated with and without lumped non-structural masses. A.4 Validation A.4.1 Case 1: cantilever beam Consider a cantilever beam with a hollow circular cross-section of constant wall thickness, and the cross-section radius is linearly tapered from root to tip, with a taper ratio of λ varying from 0.5 to 1.2. The beam length is 2.9 m, mean tube radius is 0.1411 m. The first bending natural frequency predictions from the Rayleigh-Ritz approximation are compared against a beam Finite Element Method analysis. These two frequencies are plotted in Fig. 28. The Rayleigh-Ritz approximation exhibits about 2% over-prediction, but otherwise captures the trends accurately. In this example, no non-structural masses were considered. 122 (a) Natural frequency vs. taper ratio (b) Rayleigh-Ritz vs. FEM Figure 28: Natural frequency: Rayleigh-Ritz vs. FEM predicted natural frequencies for a tapered cantilever beam (a) Natural frequency vs. taper ratio (b) Rayleigh-Ritz vs. FEM Figure 29: Natural frequency: Rayleigh-Ritz vs. FEM for a tapered cantilever beam with distributed non-structural masses 123 (a) Layout of eVTOL wing (b) Rayleigh-Ritz vs. FEM Figure 30: Natural frequency: Rayleigh-Ritz vs. FEM for an example eVTOL wing A.4.2 Case 2: distributed non-structural mass This case is representative of an aircraft half-wing with skin, and no lumped masses. The non-structural masses are represented as a mass per unit area, i.e., M A kg/m2 . Three different values of the non-structural mass per unit wing area were evaluated: 0, 2.0 and 4.9 kg/m2 . The resulting natural frequencies were calculated from both Rayleigh-Ritz and FEM, and are plotted in Fig. 29. Excellent agreement is obtained. A.4.3 Case 3: half-wing with lumped masses This case is representative of an eVTOL wing. The dimensions of the beam are the same as in the previous examples, and the distributed skin mass per unit area is 4.9 kg/m2 . Two lumped masses (21.3 kg, 27 kg) are placed along the beam at 0.5L and L, respectively. The wing layout and natural frequencies are shown in Fig. 30. 124
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.5 Linearized : No Page Count : 128 Page Mode : UseOutlines Author : Title : Subject : Creator : LaTeX with hyperref package Producer : pdfTeX-1.40.19 Create Date : 2019:01:13 19:31:33-08:00 Modify Date : 2019:01:13 19:31:33-08:00 Trapped : False PTEX Fullbanner : This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018) kpathsea version 6.3.0EXIF Metadata provided by EXIF.tools