현재 횡단면 해석을 수행하기 위해 WRF 출력 데이터에서 3 차원 전장을 계산하기 위해 python 스크립트를 실행하려고합니다. 필자는 이미 비교 대상이되는 Petterson 's Formula의 2 차원 버전을 사용하고 있지만, 3 차원 버전은 2 차원 버전의 사소한 부분 만 캡쳐하고 있습니다.Python에서 WRF 출력으로 3D Frontogenesis 계산하기
나는 3 차원 frontogenesis을 계산하는 데 사용하고 공식은 다음과 같습니다
내 두 차원 코드 (925 고전력 증폭기)를 생산하는 내용의 예 이미지입니다 : 그라데이션 용어입니다
그리고 여기는 동일한 이차원 (고전력 증폭기 925) 표면까지 보간 삼차원 코드의
적어도 일부 정확한 정보가 이미지의 동일한 지역에 표시된다는 사실은 내가 적어도 올바른 방향으로 가고 있으며 어딘가에 약간의 오류가 있음을 보여줍니다. 내가 본 바로는, 내 파이썬 코드는 여기에, 적어도 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-python 라이브러리를 사용하여 데이터를 가져옵니다 파일. NetCDF 파일은 표준 numpy 배열과 비슷한 배열 구조를 사용합니다.
따라서 축 인수의 순서는 정확해야합니다 (z = 0, y (y = 0, y = 1, x = 2).
내 교수진 중 한 사람이 그라디언트의 가장자리가 계산 내부에 문제가있을 수 있다고 생각하지만 각 점은 가장자리와 별도로 계산되므로 차이가 없어야하지만 이것은 제가 100 % 확실하지 않은 것입니다.
계산 결과가 위의 이미지와 같이 잘못된 결과를 산출하는 이유를 아는 사람이 있습니까?
여기에 약간의 업데이트가 있습니다. 나는 오늘 개별적으로 용어를 계산하는 것을 시도하기로 결심했다. 그리고 나는 내가 여기의 문제 위에 있다고 생각한다. 그래디언트 항의 분모에 대해 z [n + 1] - z [n-1]을 처리해야하는 여기서 dz 항은 실제로 z [n + 1] - z [n]을 수행합니다. dp 용어는 dz와 dp로 나눈 부분 미분 항을 버리는 똑같은 일을합니다. – Phantom139