文件
AcousticSO/pyat/tlcore.py
T

90 行
3.4 KiB
Python

import numpy as np
from pyat.AcousticPara import GetEnv, Coord
from pyat.DataBase import DataBase
from pyat.bellhop import call_Bellhop
from pyat.krakenc import call_krakenc
from pyat.ram import call_ram
import matplotlib.pyplot as plt
def call_tl(database, freq, sourceDepth, sourceLat, sourceLon,
receiveLat=None, receiveLon=None, range=None, azi=None, modelType='kraken', isPlot=False):
""" Input:
freq - float, Frequency
sourceDepth - float, Source depth
sourceLat - float, Source lat
sourceLon - float, Source lon
receiveDepth - float, Receive depth
receiveLat - float, Receive lat
receiveLon - float, Receive lon
range - float, Range from source to receive
azi - float, azimuth angle from receive to source
timeType - char, #全年平均 'Annual', #1-12月'January''February''March''April''May''June''July''August''September'
October': '10''November''December', #北半球四季'Winter''Spring''Summer''Autumn'
modelType - char, 'bellhop'、'kraken'、'ram'
isPlot - plot or not
"""
""" Output:
ranges 距离
depths 深度
TL 传播损失
bathym类 地形数据 bathym.r距离 bathym.d深度
"""
bathym, ssp, sed, base = [], [], [], []
if (receiveLat != None) and (receiveLon != None):
[bathym, ssp, sed, base] = GetEnv(database, 25, Coord(sourceLon, sourceLat), coordR=Coord(receiveLon, receiveLat))
elif (range != None) and (azi != None):
[bathym, ssp, sed, base] = GetEnv(database, 25, Coord(sourceLon, sourceLat), R=range, azi=azi)
else:
print('no receive info!')
return [], [], [], bathym
if modelType == 'bellhop':
sd = np.array([sourceDepth]) # Source depth
[Pos, TL] = call_Bellhop(freq, sd, bathym, ssp, sed, base)
# Plot
if isPlot:
plt.pcolor(Pos.r.range, Pos.r.depth, TL[0,0,:,:], vmin=40, vmax=130, cmap='jet_r', shading='auto')
plt.xlabel("Range/m")
plt.ylabel("Depth/m")
plt.gca().invert_yaxis()
plt.colorbar()
plt.show()
return Pos.r.range, Pos.r.depth, TL[0,0,:,:], bathym
elif modelType == 'kraken':
sd = np.array([sourceDepth]) # Source depth
[Pos, TL] = call_krakenc(freq, sd, bathym, ssp, sed, base)
# Plot
if isPlot:
plt.pcolor(Pos.r.range, Pos.r.depth, TL[0,0,:,:], vmin=40, vmax=130, cmap='jet_r', shading='auto')
plt.xlabel("Range/m")
plt.ylabel("Depth/m")
plt.gca().invert_yaxis()
plt.colorbar()
plt.show()
return Pos.r.range, Pos.r.depth, TL[0,0,:,:], bathym
elif modelType == 'ram':
# 调用ram模块
[rd, rr, TL] = call_ram(freq, sourceDepth, bathym, ssp, sed)
# Plot
if isPlot:
plt.pcolormesh(rr, rd, TL, vmin=60, vmax=130, cmap='jet_r', shading='auto')
plt.xlabel("Range/m")
plt.ylabel("Depth/m")
plt.gca().invert_yaxis()
plt.colorbar()
plt.show()
return rr, rd, TL, bathym
else:
return [], [], [], bathym
# # 创建类
# database = DataBase()
# # 设置时间段
# database.set_timePeriod('06')
# # 设置时间段
# #database.set_timePeriod(timeIndex)
# range, depth, tl, bathym = call_tl(database=database,freq=200, sourceDepth=60, sourceLat=19, sourceLon=127,
# receiveLat=17.5, receiveLon=127.1, modelType='ram', isPlot=True)