Wind turbine noise propagation
In this example, we will model a real case. A wind turbine is positioned on the top of a ridge. The wind turbine hub height is 80 m. We need to prepare input files as follows:
- elevation file
- sound speed profile file
Read elevation and sound speed files
Assume that we already have elevation and sound speed profile files in text files. The structure of these files are [range, elevation]
and [height, sound speed]
. We can read to Julia using DelimitedFiles package.
using DelimitedFiles
# read elevation and sound speed files.
elv = readdlm("./temp/elevation.txt") # [range(km), elevation (m)]
ssp = readdlm("./temp/ssp.txt") # [height(m), sound speed(m/s)]
Point source 100 Hz at 80 m above ground level
Because the hub height is at 80 m above the ground level, thus the absolute source height is added the ground elevation value. In this case, it is 169 m.
source = Source(
frequency = 100,
height = -80 + (-169) # 169 is ground level
)
Receiver
Similar to previous examples, we will analyse for a height of 1000 m and a range of 10 km with resolution is 1 m both directions.
receiver = Receiver(
depth_point = 1001,
range_point = 10001,
depth = Vec2(-1000f0,0f0),
range = Vec2(0f0,10f0)
)
Terrain geometry
Input elevation files to 2D vector Vec2
.
terrain = Terrain(
interp_type = "C",
profile = (Vec2(elv[:,1],elv[:,2]))
)
Boundary condition
The boundary conditions are similar as previous examples.
Zc = 12.81 + 11.62im
Theta, Rmag, Rphase = R_coeff(Zc;len=100)
brc = Vec3(Theta,Rmag,Rphase)
trc = Vec3([0f0,45f0,90f0],[0f0,0f0,0f0],[0f0,0f0,0f0])
reflection = Reflection_Coeff(
top_coeff = trc,
bottom_coeff = brc
)
Sound speed profile
We just need to read sound speed profile to 2D vector Vec2
. Note in the case our wind profile is relatively simple, we can input directly to here instead of preparing a text file of sound speed profile.
sspl = Vec2(ssp[:,1],ssp[:,2]) # case 1
ssp = SSP(sound_speed_profile= sspl)
Analysis
If you are not familiar with below set-up, please look back previous examples.
opt = Analysis(
filename = "RealCase_Bellhop_f100",
analyse = "CG",
option1 = "CFW",
option2 = "F*",
num_ray = 1601,
alpha = Vec2(-80.0f0,80.0f0),
box = Vec2(10f0,1000.0f0),
step= 0
)
Create input files
Environment(opt,source, receiver,ssp,terrain,reflection)
Run Bellhop
fn= opt.filename
filename = "temp\\$fn"
run_bellhop = `bellhop $filename`
@time run(run_bellhop)
Results
Waiting for 29.4 seconds, here is our results!
p1 = PlotRay("$filename.ray",
xlabs = "Range, m",
ylabs = "Height, m")
plot!(p1,elv[:,1]*1000,elv[:,2],
lw=0,fill = 0, color = "#8c510a",legend = false)
yflip!(true)
scatter!(p1,[0], [source.height],
markersize = 6, color = "#4daf4a")
#savefig(p1,"ray_real.png")
Transmission loss field
p2 = PlotShd("$filename.shd";
xlabs = "Range, m",
ylabs = "Transmission loss, dB",
cblabs = "dB",
climb = (40,120))
plot!(p2,elv[:,1]*1000,elv[:,2],
lw=0,fill = 0, color = "#8c510a", legend = false)
yflip!(true)
scatter!(p2,[0], [source.height],
markersize = 6, color = "#4daf4a",
label = "Source")
#savefig(p2,"trans_real.png")