放开距离采样间隔参数dr
这个提交包含在:
+2
-2
@@ -49,11 +49,11 @@ def calZmax(ssp):
|
|||||||
def call_Bellhop_p(filename):
|
def call_Bellhop_p(filename):
|
||||||
system(AtBinPath + "/bellhop " + filename)
|
system(AtBinPath + "/bellhop " + filename)
|
||||||
|
|
||||||
def call_Bellhop(freq, sd, bathm, ssp, sed, base):
|
def call_Bellhop(freq, sd, bathm, ssp, sed, base, dr=0.1):
|
||||||
# Source and receiving position
|
# Source and receiving position
|
||||||
filename = 'envB'
|
filename = 'envB'
|
||||||
Rmax = bathm.r[-1] # unit: km
|
Rmax = bathm.r[-1] # unit: km
|
||||||
dr = 0.1 # wavelength / 10, unit: km
|
# dr = 0.1 # wavelength / 10, unit: km
|
||||||
ran = np.linspace(0, Rmax, round(Rmax / dr)) # Receiving range (unit: km)
|
ran = np.linspace(0, Rmax, round(Rmax / dr)) # Receiving range (unit: km)
|
||||||
NZmax, Zmax, ssp_idx = calZmax(ssp)
|
NZmax, Zmax, ssp_idx = calZmax(ssp)
|
||||||
RD = np.linspace(0, Zmax, round(Zmax / 10) + 1)
|
RD = np.linspace(0, Zmax, round(Zmax / 10) + 1)
|
||||||
|
|||||||
+12
-24
@@ -11,8 +11,6 @@ from env import Pos, Source, Dom, cInt, SSPraw, SSP, HS, BotBndry, TopBndry, Bnd
|
|||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
from config import AtBinPath
|
from config import AtBinPath
|
||||||
|
|
||||||
file_cz_data = open('cz_data.txt', 'w')
|
|
||||||
|
|
||||||
|
|
||||||
class CzRangeWidth:
|
class CzRangeWidth:
|
||||||
def __init__(self, minRange, maxRange, width):
|
def __init__(self, minRange, maxRange, width):
|
||||||
@@ -48,11 +46,11 @@ def calZmax(ssp, sed):
|
|||||||
return Zmax, ssp_idx
|
return Zmax, ssp_idx
|
||||||
|
|
||||||
|
|
||||||
def call_Bellhop(freq, sd, bathm, ssp, sed, base,azi):
|
def call_Bellhop(freq, sd, dr, bathm, ssp, sed, base,azi):
|
||||||
# Source and receiving position
|
# Source and receiving position
|
||||||
filename = 'cz'+str(azi)
|
filename = 'cz'+str(azi)
|
||||||
Rmax = bathm.r[-1] # unit: km
|
Rmax = bathm.r[-1] # unit: km
|
||||||
dr = 0.1 # wavelength / 10, unit: km
|
# dr = 0.1 # wavelength / 10, unit: km
|
||||||
ran = np.linspace(0, Rmax, round(Rmax / dr)) # Receiving range (unit: km)
|
ran = np.linspace(0, Rmax, round(Rmax / dr)) # Receiving range (unit: km)
|
||||||
Zmax, ssp_idx = calZmax(ssp, sed)
|
Zmax, ssp_idx = calZmax(ssp, sed)
|
||||||
"""RD 已修改 8.26"""
|
"""RD 已修改 8.26"""
|
||||||
@@ -118,11 +116,11 @@ def call_Bellhop(freq, sd, bathm, ssp, sed, base,azi):
|
|||||||
return Pos1, TL
|
return Pos1, TL
|
||||||
|
|
||||||
|
|
||||||
def call_Bellhop_Rays(freq, sd, bathm, ssp, sed, base,azi):
|
def call_Bellhop_Rays(freq, sd, dr, bathm, ssp, sed, base,azi):
|
||||||
# Source and receiving position
|
# Source and receiving position
|
||||||
filename = 'cz_ray'+str(azi)
|
filename = 'cz_ray'+str(azi)
|
||||||
Rmax = bathm.r[-1] # unit: km
|
Rmax = bathm.r[-1] # unit: km
|
||||||
dr = 0.1 # wavelength / 10, unit: km
|
# dr = 0.1 # wavelength / 10, unit: km
|
||||||
ran = np.linspace(0, Rmax, round(Rmax / dr)) # Receiving range (unit: km)
|
ran = np.linspace(0, Rmax, round(Rmax / dr)) # Receiving range (unit: km)
|
||||||
Zmax, ssp_idx = calZmax(ssp, sed)
|
Zmax, ssp_idx = calZmax(ssp, sed)
|
||||||
"""RD 已修改 8.26"""
|
"""RD 已修改 8.26"""
|
||||||
@@ -227,8 +225,6 @@ def call_hjq(r, TL):
|
|||||||
m = r[out[0]]
|
m = r[out[0]]
|
||||||
n = r[out[len(out) - 1]]
|
n = r[out[len(out) - 1]]
|
||||||
l = n - m
|
l = n - m
|
||||||
# file_cz_data.write('\n'"会聚区距离:%.1fm"%m +"-%.1fm" %n)
|
|
||||||
# file_cz_data.write('\n'"会聚区宽度:%.1fm\n"%l )
|
|
||||||
czrangewidth_list.append(CzRangeWidth(m, n, l))
|
czrangewidth_list.append(CzRangeWidth(m, n, l))
|
||||||
out.clear()
|
out.clear()
|
||||||
signal = 0
|
signal = 0
|
||||||
@@ -236,13 +232,10 @@ def call_hjq(r, TL):
|
|||||||
m = r[out[0]]
|
m = r[out[0]]
|
||||||
n = r[out[len(out) - 1]]
|
n = r[out[len(out) - 1]]
|
||||||
l = n - m
|
l = n - m
|
||||||
# file_cz_data.write('\n'"会聚区距离:%.1fm" % m + "-%.1fm" % n)
|
|
||||||
# file_cz_data.write('\n'"会聚区宽度:%.1fm\n" % l )
|
|
||||||
czrangewidth_list.append(CzRangeWidth(m, n, l))
|
czrangewidth_list.append(CzRangeWidth(m, n, l))
|
||||||
out.clear()
|
out.clear()
|
||||||
signal = 0
|
signal = 0
|
||||||
# if signal==1:
|
# if signal==1:
|
||||||
# file_cz_data.write('\n'" 没有出现会聚区\n")
|
|
||||||
# 滤波器效果图:
|
# 滤波器效果图:
|
||||||
# plt.plot(r, TL)
|
# plt.plot(r, TL)
|
||||||
# plt.plot(r, TL_R)
|
# plt.plot(r, TL_R)
|
||||||
@@ -266,18 +259,13 @@ def call_hjq(r, TL):
|
|||||||
return czrangewidth_list
|
return czrangewidth_list
|
||||||
|
|
||||||
|
|
||||||
def call_fangwei(freq, sd, bathm, ssp, sed, base, azi, isPlot=False):
|
def call_fangwei(freq, sd, dr, bathm, ssp, sed, base, azi, isPlot=False):
|
||||||
czdetail = CzDetail("", [], [])
|
czdetail = CzDetail("", [], [])
|
||||||
last = len(ssp[0].c) - 1
|
last = len(ssp[0].c) - 1
|
||||||
# if ssp[0].c[0] > ssp[0].c[last]:
|
|
||||||
# file_cz_data.write('\n'"直达会聚区:无")
|
|
||||||
# file_cz_data.write('\n'"反射会聚区:")
|
|
||||||
# else:
|
|
||||||
# file_cz_data.write('\n'"直达会聚区:")
|
|
||||||
sed = None
|
sed = None
|
||||||
rays_total = call_Bellhop_Rays(freq, sd, bathm, ssp, sed, base, azi)
|
rays_total = call_Bellhop_Rays(freq, sd, dr, bathm, ssp, sed, base, azi)
|
||||||
Rays = find_cvgcRays(rays_total)
|
Rays = find_cvgcRays(rays_total)
|
||||||
[Pos, TL] = call_Bellhop(freq, sd, bathm, ssp, sed, base, azi)
|
[Pos, TL] = call_Bellhop(freq, sd, dr, bathm, ssp, sed, base, azi)
|
||||||
[x, x, x, x, Pos, pressure] = read_shd('cz'+str(azi)+'.shd')
|
[x, x, x, x, Pos, pressure] = read_shd('cz'+str(azi)+'.shd')
|
||||||
TL = -10 * np.log10(np.square(np.abs(pressure))) # Transmission Loss
|
TL = -10 * np.log10(np.square(np.abs(pressure))) # Transmission Loss
|
||||||
# Plot
|
# Plot
|
||||||
@@ -297,12 +285,12 @@ def call_fangwei(freq, sd, bathm, ssp, sed, base, azi, isPlot=False):
|
|||||||
czdetail.reflectCz = []
|
czdetail.reflectCz = []
|
||||||
return Pos.r.range, Pos.r.depth, TL[0, 0, :, :], bathm, Rays, czdetail
|
return Pos.r.range, Pos.r.depth, TL[0, 0, :, :], bathm, Rays, czdetail
|
||||||
|
|
||||||
def child(freq, sd, isPlot, bathm, ssp, sed, base, azi, descript):
|
def child(freq, sd, dr, isPlot, bathm, ssp, sed, base, azi, descript):
|
||||||
ranges, depths, TL, bathym, Rays, czdetail = call_fangwei(freq, sd, bathm, ssp, sed, base, azi,isPlot=isPlot)
|
ranges, depths, TL, bathym, Rays, czdetail = call_fangwei(freq, sd, dr, bathm, ssp, sed, base, azi, isPlot=isPlot)
|
||||||
czdetail.descript = descript
|
czdetail.descript = descript
|
||||||
return CzData(azi, ranges, depths, TL, bathym, Rays, czdetail)
|
return CzData(azi, ranges, depths, TL, bathym, Rays, czdetail)
|
||||||
|
|
||||||
def call_cz(database, freq, lat, lon, azi, sourceDepth=10, isPlot=False):
|
def call_cz(database, freq, lat, lon, azi, sourceDepth=10, dr=0.1, isPlot=False):
|
||||||
sd = np.array([sourceDepth]) # Source depth
|
sd = np.array([sourceDepth]) # Source depth
|
||||||
|
|
||||||
results = []
|
results = []
|
||||||
@@ -315,7 +303,7 @@ def call_cz(database, freq, lat, lon, azi, sourceDepth=10, isPlot=False):
|
|||||||
if azi != None:
|
if azi != None:
|
||||||
[bathm, ssp, sed, base] = GetEnv(database, 25, Coord(lon, lat), R=100, azi=azi)
|
[bathm, ssp, sed, base] = GetEnv(database, 25, Coord(lon, lat), R=100, azi=azi)
|
||||||
if np.mean(bathm.d) >= 2000:
|
if np.mean(bathm.d) >= 2000:
|
||||||
ranges, depths, TL, bathym, Rays, czdetail = call_fangwei(freq, sd, bathm, ssp, sed, base, azi,
|
ranges, depths, TL, bathym, Rays, czdetail = call_fangwei(freq, sd, dr, bathm, ssp, sed, base, azi,
|
||||||
isPlot=isPlot)
|
isPlot=isPlot)
|
||||||
czdetail.descript = "{:.1f}°方向".format(azi)
|
czdetail.descript = "{:.1f}°方向".format(azi)
|
||||||
results.append(CzData(0, ranges, depths, TL, bathym, Rays, czdetail))
|
results.append(CzData(0, ranges, depths, TL, bathym, Rays, czdetail))
|
||||||
@@ -329,7 +317,7 @@ def call_cz(database, freq, lat, lon, azi, sourceDepth=10, isPlot=False):
|
|||||||
for i in range(8):
|
for i in range(8):
|
||||||
[bathm, ssp, sed, base] = GetEnv(database, 25, Coord(lon, lat), R=100, azi=theta[i])
|
[bathm, ssp, sed, base] = GetEnv(database, 25, Coord(lon, lat), R=100, azi=theta[i])
|
||||||
if np.mean(bathm.d) >= 2000:
|
if np.mean(bathm.d) >= 2000:
|
||||||
applyResults.append(pool.apply_async(partial(child, freq, sd, isPlot), (bathm, ssp, sed, base, theta[i], descripts[i])))
|
applyResults.append(pool.apply_async(partial(child, freq, sd, dr, isPlot), (bathm, ssp, sed, base, theta[i], descripts[i])))
|
||||||
# applyResults.append(pool.apply_async(partial(child, database, freq, lat, lon, sd, isPlot), (pi,)))
|
# applyResults.append(pool.apply_async(partial(child, database, freq, lat, lon, sd, isPlot), (pi,)))
|
||||||
pool.close()
|
pool.close()
|
||||||
pool.join()
|
pool.join()
|
||||||
|
|||||||
+2
-2
@@ -15,7 +15,7 @@ def calZmax(ssp, sed):
|
|||||||
return Zmax
|
return Zmax
|
||||||
|
|
||||||
|
|
||||||
def call_krakenc(freq, sd, bathm, ssp, sed, base):
|
def call_krakenc(freq, sd, bathm, ssp, sed, base, dr=0.1):
|
||||||
filename = "envK"
|
filename = "envK"
|
||||||
envFilename = "envK.env"
|
envFilename = "envK.env"
|
||||||
model = "KRAKEN"
|
model = "KRAKEN"
|
||||||
@@ -23,7 +23,7 @@ def call_krakenc(freq, sd, bathm, ssp, sed, base):
|
|||||||
|
|
||||||
# Source and receiving position
|
# Source and receiving position
|
||||||
Rmax = bathm.r[-1] # unit: km
|
Rmax = bathm.r[-1] # unit: km
|
||||||
dr = (1500 / freq / 3) / 1000 # wavelength / 10, unit: km
|
# dr = (1500 / freq / 3) / 1000 # wavelength / 10, unit: km
|
||||||
ran = np.linspace(0, Rmax, round(Rmax / dr)) # Receiving range (unit: km)
|
ran = np.linspace(0, Rmax, round(Rmax / dr)) # Receiving range (unit: km)
|
||||||
Zmax = calZmax(ssp, sed)
|
Zmax = calZmax(ssp, sed)
|
||||||
RD = np.linspace(0, Zmax, round(Zmax) + 1)
|
RD = np.linspace(0, Zmax, round(Zmax) + 1)
|
||||||
|
|||||||
+2
-2
@@ -13,7 +13,7 @@ def calZmax(ssp, sed):
|
|||||||
Zmax = max(d)
|
Zmax = max(d)
|
||||||
return Zmax
|
return Zmax
|
||||||
|
|
||||||
def call_ram(freq, sd, bathm, ssp, sed):
|
def call_ram(freq, sd, bathm, ssp, sed, dr=0.1):
|
||||||
''' ********************************************************************************* '''
|
''' ********************************************************************************* '''
|
||||||
''' ************************** Sound Field Calculation ****************************** '''
|
''' ************************** Sound Field Calculation ****************************** '''
|
||||||
''' ********************************************************************************* '''
|
''' ********************************************************************************* '''
|
||||||
@@ -24,7 +24,7 @@ def call_ram(freq, sd, bathm, ssp, sed):
|
|||||||
zmax = round(max(bathm.d) * 2) # Maximum receiving depth (uint: m)
|
zmax = round(max(bathm.d) * 2) # Maximum receiving depth (uint: m)
|
||||||
zmplt = round(max(bathm.d)*1.1) # Maximum depth of plot (uint: m)
|
zmplt = round(max(bathm.d)*1.1) # Maximum depth of plot (uint: m)
|
||||||
dz = 1500 / freq / 15 # Step in depth direction: wavelength / 15
|
dz = 1500 / freq / 15 # Step in depth direction: wavelength / 15
|
||||||
dr = 10 * dz # Step in range direction
|
# dr = 10 * dz # Step in range direction
|
||||||
Zmax = calZmax(ssp, sed)
|
Zmax = calZmax(ssp, sed)
|
||||||
rd = Zmax
|
rd = Zmax
|
||||||
pos = PosRAM(sd, rd, rmax, zmax, dr, dz, zmplt)
|
pos = PosRAM(sd, rd, rmax, zmax, dr, dz, zmplt)
|
||||||
|
|||||||
+4
-4
@@ -7,7 +7,7 @@ from ram import call_ram
|
|||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
def call_tl(database, freq, sourceDepth, sourceLat, sourceLon,
|
def call_tl(database, freq, sourceDepth, sourceLat, sourceLon,
|
||||||
receiveLat=None, receiveLon=None, range=None, azi=None, modelType='kraken', isPlot=False):
|
receiveLat=None, receiveLon=None, range=None, azi=None, dr=0.1, modelType='kraken', isPlot=False):
|
||||||
""" Input:
|
""" Input:
|
||||||
freq - float, Frequency
|
freq - float, Frequency
|
||||||
sourceDepth - float, Source depth
|
sourceDepth - float, Source depth
|
||||||
@@ -40,7 +40,7 @@ def call_tl(database, freq, sourceDepth, sourceLat, sourceLon,
|
|||||||
return [], [], [], bathym
|
return [], [], [], bathym
|
||||||
if modelType == 'bellhop':
|
if modelType == 'bellhop':
|
||||||
sd = np.array([sourceDepth]) # Source depth
|
sd = np.array([sourceDepth]) # Source depth
|
||||||
[Pos, TL] = call_Bellhop(freq, sd, bathym, ssp, sed, base)
|
[Pos, TL] = call_Bellhop(freq, sd, bathym, ssp, sed, base, dr)
|
||||||
# Plot
|
# Plot
|
||||||
if isPlot:
|
if isPlot:
|
||||||
plt.pcolor(Pos.r.range, Pos.r.depth, TL[0,0,:,:], vmin=40, vmax=130, cmap='jet_r', shading='auto')
|
plt.pcolor(Pos.r.range, Pos.r.depth, TL[0,0,:,:], vmin=40, vmax=130, cmap='jet_r', shading='auto')
|
||||||
@@ -52,7 +52,7 @@ def call_tl(database, freq, sourceDepth, sourceLat, sourceLon,
|
|||||||
return Pos.r.range, Pos.r.depth, TL[0,0,:,:], bathym
|
return Pos.r.range, Pos.r.depth, TL[0,0,:,:], bathym
|
||||||
elif modelType == 'kraken':
|
elif modelType == 'kraken':
|
||||||
sd = np.array([sourceDepth]) # Source depth
|
sd = np.array([sourceDepth]) # Source depth
|
||||||
[Pos, TL] = call_krakenc(freq, sd, bathym, ssp, sed, base)
|
[Pos, TL] = call_krakenc(freq, sd, bathym, ssp, sed, base, dr)
|
||||||
# Plot
|
# Plot
|
||||||
if isPlot:
|
if isPlot:
|
||||||
plt.pcolor(Pos.r.range, Pos.r.depth, TL[0,0,:,:], vmin=40, vmax=130, cmap='jet_r', shading='auto')
|
plt.pcolor(Pos.r.range, Pos.r.depth, TL[0,0,:,:], vmin=40, vmax=130, cmap='jet_r', shading='auto')
|
||||||
@@ -64,7 +64,7 @@ def call_tl(database, freq, sourceDepth, sourceLat, sourceLon,
|
|||||||
return Pos.r.range, Pos.r.depth, TL[0,0,:,:], bathym
|
return Pos.r.range, Pos.r.depth, TL[0,0,:,:], bathym
|
||||||
elif modelType == 'ram':
|
elif modelType == 'ram':
|
||||||
# 调用ram模块
|
# 调用ram模块
|
||||||
[rd, rr, TL] = call_ram(freq, sourceDepth, bathym, ssp, sed)
|
[rd, rr, TL] = call_ram(freq, sourceDepth, bathym, ssp, sed, dr)
|
||||||
# Plot
|
# Plot
|
||||||
if isPlot:
|
if isPlot:
|
||||||
plt.pcolormesh(rr, rd, TL, vmin=60, vmax=130, cmap='jet_r', shading='auto')
|
plt.pcolormesh(rr, rd, TL, vmin=60, vmax=130, cmap='jet_r', shading='auto')
|
||||||
|
|||||||
在新工单中引用
屏蔽一个用户