Aeroacoustic Noise
FLOWUnsteady.run_noise_wopwop
— FunctionGiven the path of a FLOWUnsteady simulation read_path
, it runs the noise analysis on the rotors of the simulation. It uses PSU-WOPWOP to calculate the tonal noise from thickness and loading sources on the geometry and aerodynamic loading.
run_noise_wopwop(
read_path::String, # Path from where to read aerodynamic solution (FLOWUnsteady simulation)
run_name, # Run name (prefix of rotor files to read)
RPM::Real, # Reference RPM to convert `nrevs` to simulation time
rho::Real, speedofsound::Real, # Air density and speed of sound
rotorsystems, # `rotorsystems[i][j]` is the number of blades of the j-th rotor in the i-th system
ww_nrevs, # Run PSU-WOPWOP for this many revolutions
ww_nsteps_per_rev, # Number of steps per revolution to use in WW
save_path::String, # Where to save PSU-WOPWOP results
wopwopbin; # Path to PSU-WOPWOP binary
nrevs = nothing, # Number of revolutions to read (defaults to `ww_nrevs`)
nsteps_per_rev = nothing, # Number of steps per revolution to read (default to `ww_nsteps_per_rev`)
# ---------- OBSERVERS ---------------------------------------
Vobserver = nothing, # (m/s) velocity of observer (vector)
sph_R = 1.5*6.5, # (m) sphere radius
sph_nR = 0, # Number of cells in radial direction
sph_ntht = 24, sph_nphi = 24, # Number of cells in polar and azimuthal directions
sph_thtmin = 5, sph_thtmax = 175, # (deg) Bounds of polar direction
sph_phimax = 180, # (deg) maximum azimuthal angle (use 180 to make a hemisphere)
sph_rotation= [0, 90, 0], # (degs) rotate the sphere by these angles
sph_C = zeros(3), # (m) center of sphere
microphoneX = nothing, # If given, replaces sphere with one observer at this position
highpass = nothing, lowpass = nothing, # Low and high pass filters
windowing = nothing, # Windowing method
output_octaves = true, # Whether to output octave bands
Noctave = 3, # Number of octave bands
# ---------- SIMULATION OPTIONS -----------------------------
periodic = true, # Whether rotor loading and translation in aerodynamic solution is periodic
# ---------- INPUT OPTIONS ----------------------------------
num_min = 0, # Start reading loading files from this number
const_geometry = false, # Whether to run PSW on a constant geometry, obtained from num_min
axisrot = "automatic", # Axis of rotation to use for constant geometry (defaults to [1,0,0])
CW = true, # Clockwise or counter-clockwise rotation of constant geometry
# ---------- OUTPUT OPTIONS ---------------------------------
prompt = true, # Whether to prompt the user
verbose = true, # Whether to verbose
v_lvl = 0, # Indentation level when printing verbose
debug_paraview = false, # Whether to visualize the grid of observers in Paraview before running
debuglvl = 1, # PSU-WOPWOP debug level
observerf_name = "observergrid",# .xyz file with observer grid
case_name = "runcase", # Name of case to create and run
)
NOTE: This function will call the PSU-WOPWOP binary indicated through wopwopbin
. This binary is not included with FLOWUnsteady and must be provided by the user. This method has been tested on PSU-WOPWOP v3.4.2.
NOTE 2: Make sure that the simulation was run with nsteps_save=1
, otherwise the time in PSU-WOPWOP will get messed up.
FLOWUnsteady.run_noise_bpm
— FunctionCalculates broadband rotor noise through the Brooks, Pope, and Marcolini method using the BPM.jl package.
This writes the results to a file in the same format than PSU-WOPWOP, which can be read afterwards with FLOWNoise.readwopwopoutput()
. It writes three files: SPL (non-weighted), A-weighted SPL, and OASPL.
This method assumes steady conditions and that all rotors have the same RPM.
function run_noise_bpm(
rotors::Array{vlm.Rotor, 1}, # Rotors
RPM::Real, # RPM of rotors
Vinf::Function, # Freestream
rho::Real, mu::Real, speedofsound::Real, # Air density, dynamic viscosity, and speed of sound
save_path::String; # Where to save results
# ---------- OBSERVERS --------------------------------------
sph_R = 1.5*6.5, # (m) sphere radius
sph_nR = 0, # Number of cells in radial direction
sph_ntht = 24, sph_nphi = 24, # Number of cells in polar and azimuthal directions
sph_thtmin = 5, sph_thtmax = 175, # (deg) Bounds of polar direction
sph_phimax = 180, # (deg) maximum azimuthal angle (use 180 to make a hemisphere)
sph_rotation= [0, 90, 0], # (degs) rotate the sphere by these angles
sph_C = zeros(3), # (m) center of sphere
microphoneX = nothing, # If given, replaces sphere with one observer at this position
# ---------- BPM OPTIONS ------------------------------------
noise_correction = 0.5, # Broadband calibration correction
TE_thickness::Union{Float64, Array{Float64, 1}}=16.15, # Trailing edge thickness (in degrees)
freq_bins = BPM.default_f, # Frequency bins
db_offset = BPM.default_AdB, # dB offset of every frequency for A-weighting
# ---------- OUTPUT OPTIONS ---------------------------------
prompt = true, # Whether to prompt the user
verbose = true, # Whether to verbose
v_lvl = 0, # Indentation level when printing verbose
)