現在、私はWRF出力データの3次元フロントジェネシスを計算するためにPythonスクリプトを実行して、断面解析を実行しようとしています。私は既に、2次元のバージョンが何であるかの非常にマイナーな側面をキャプチャしているにもかかわらず、比較するためにペターソンの公式の二次元のバージョンを動作させています。PythonのWRF出力から3D Frontogenesisを計算する
私が3D frontogenesisを計算するために使用している式は次のとおりです。勾配項がある
: :
ここに私の2次元コード(925 hPaの)が生産するものの一例のイメージです
:そして、ここでは、同じ2次元(925 HPA)の表面にまで補間された三次元コードです
少なくともいくつかの読みが画像上の同じ地理的領域に現れるという事実は、私が少なくとも正しい軌道にいること、そしておそらくどこかで軽度のエラーを起こしていることを示している。私が見たところでは、私のPythonコードは、ここでは、少なくともnp.gradient機能がどのように動作するかの私の理解で、正しい表示されますfrontogenesis計算コードである:参照、DXと同様
# Fetch the fields we need
p = getvar(ncFile, "pressure") * 100 # Convert to Pa
z = getvar(ncFile, "z")
ua = getvar(ncFile, "ua")
va = getvar(ncFile, "va")
theta = getvar(ncFile, "theta")
omega = getvar(ncFile, "omega")
dz = np.gradient(z, axis=0)
dp = np.gradient(p, axis=0)
theta_gradient = np.sqrt((np.gradient(theta, dx, axis=2))**2 + (np.gradient(theta, dy, axis=1))**2 + (np.gradient(theta, axis=0)/dz)**2)
zonal_gradient = (-1 * np.gradient(theta, dx, axis=2)) * ((np.gradient(ua, dx, axis=2) * np.gradient(theta, dx, axis=2)) + (np.gradient(va, dx, axis=2) * np.gradient(theta, dy, axis=1)))
meridional_gradient = (-1 * np.gradient(theta, dy, axis=1)) * ((np.gradient(ua, dy, axis=1) * np.gradient(theta, dx, axis=2)) + (np.gradient(va, dy, axis=1) * np.gradient(theta, dy, axis=1)))
vertical_gradient = (-1 * (np.gradient(theta, axis=0)/dp)) * ((np.gradient(omega, dx, axis=2) * np.gradient(theta, dx, axis=2)) + (np.gradient(omega, dy, axis=1) * np.gradient(theta, dy, axis=1)))
F3D = 1.08e9 * (1/theta_gradient) * (zonal_gradient + meridional_gradient + vertical_gradient)
return F3D
をdyの用語は、NetCDFファイル自体から直接取得されます(属性DXとDYは両方とも4000mと定義されています)
私はnetCDFをインポートするgetvarを使用してデータをインポートするためにwrf-ファイル。参考として、netCDFファイルは、標準numpy配列と同様の配列構造を使用しています。 [bottom-top、south-north、east-west]
したがって、axis引数の順序は正しいはずです(z = 0、y = 1、x = 2)。
私の教員アドバイザーの一人は、グラデーションのエッジが計算の内部で問題を引き起こしていると考えていますが、各点はエッジとは独立して計算されるため、違いはありませんこれは私が100%確信していないものです。
上記の画像に示されているように計算結果が正しくない理由が分かっている人はいますか?
こちらのアップデートはほんの少しです。私は今日個別に用語を計算してみることにしました。私はここで問題に取り組んでいると思います。勾配項の分母に対してz [n + 1] - z [n-1]を扱うと考えられるdz項は、実際にz [n + 1] -z [n]を行っている。 dp項は、dzとdpで分ける偏微分項を投げ捨てる同じことをしています。 – Phantom139