Aeroacoustic Noise

FLOWUnsteady.run_noise_wopwopFunction

Given 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.

source
FLOWUnsteady.run_noise_bpmFunction

Calculates 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
)
source