見出し画像

エマグラム

エマグラムは、対流圏の成層状況などを確認することができます。2012年につくば市で竜巻が発生した日のエマグラムを紹介し、MetPyを利用してエマグラムを作図していきます。

この記事の最後に、サンプルコードを用意しました。記事の中のコードは、わかりやすさを重視し、それだけでは動作しません。ご留意ください。


つくば市の竜巻

2012年5月6日につくば市では竜巻(F3)が発生しました。軽自動車が宙を舞い、電柱が根本から折れ、大きな被害となりました。この日の9時のエマグラムを下に示します。高度960から990hPaに逆転層があり、地上付近では熱が蓄積できる成層状態となっています。上中層では、平年より気温が5度程度低い寒気が入っていて、ほほ乾燥断熱減率の線に沿った気温プロファイルとなっている高度もあります。

下の図の灰色の実線は、850hPa面から地上の間で最も相当温位が高い高度を求め、その気塊を持ち上げた時の温度のプロファイルです。この温度プロファイルが気温より高い高度では、気塊は周囲より軽いため上昇します。この高度における、気塊の温度と気温の閉領域を赤色で塗りつぶしています。この面積(CAPEと比例)が大きいほど、大気の状況は不安定と言えます。

気温が気塊の温度より低い場合の閉曲線を青色で塗りつぶしています。赤で塗りつぶした高度より下部のこの面積(CINに比例)は、気塊を持ち上げに必要なエネルギーと比例しています。面積が大きいほど、気塊は持ち上がりにくいと言えます。

午前中、上空に寒気が入り下層に逆転層がある状況で晴れて日射により地面が温められたり、地上付近に暖かく湿った空気が流れ込む場合には、熱が逆転層より下で蓄積され、逆転層の厚さが次第に薄くなり、積乱雲の発生につながるおそれがあり要注意です。

逆転層を解消するほど逆転層より下で気温が上昇し、逆転層より上ではさらに寒気が入るれば、前述の赤の閉領域の面積は大幅に増えて、積乱雲が発達することになるでしょう。

画像1
図1 2012年5月6日9時 舘野のエマグラム
気温は赤線、露点温度は緑線、その他は本文で説明

高層観測ゾンデデータの読み込み

ワイオミング大学では高層観測のゾンデデータアーカイブを公開しています。便利なことに、このデータを読み込んで、データセットを作成してくれるPythonのコードが準備されています。siphoneというライブラリにはWyomingUpperAirというクラスがあり、これを利用して高層観測データを取得します。次に、変数に単位情報を加えるために、MetPyにある関数 pandas_dataframe_to_unit_arrays()を使います。

from datetime import datetime
from metpy.units import pandas_dataframe_to_unit_arrays
from siphon.simplewebservice.wyoming import WyomingUpperAir
#
## 年月日と地点番号の指定
dt = datetime(2012, 5, 6, 0)
station = '47646'

## 高層観測ゾンデデータの読み込み データ変 
df = WyomingUpperAir.request_data(dt, station)
data = pandas_dataframe_to_unit_arrays(df)

このように、エマグラム作成に必要なゾンデ観測データを、わずか2行で準備することができます。

持ち上げた気塊の温度プロファイル

下のコードでは、最初に可読性を高める別名を設定した後に、持ち上げる気塊の高度を求めるために、850hPa面高度より下層の相当温位を計算し、その中で最大の相当温位の気圧p[i_eptmax]をサーチしています。

断熱を仮定し、気塊を持ち上げた際の温度プロファイルは、metpy.calc.parcel_profile()を利用して、求めることができます。ここでは、下層の相当温位最大である気圧、気温、露点温度を入力して、温度プロファイル profを得ています。さらに、凝結高度(LCL)の気圧と温度も計算します。

## コードの可読性を高めるために、個別の単位付き配列を準備
p = data['pressure']
T = data['temperature']
Td = data['dewpoint']
u = data['u_wind']
v = data['v_wind']
h = data['height']

## パーセル法の計算
# 850hPaから地上までの相当温位最大の高度を求める
i_85 = p.magnitude.tolist().index(850.0)
ept = mpcalc.equivalent_potential_temperature(p[:i_85],T[:i_85],Td[:i_85])
i_eptmax = ept.magnitude.tolist().index(ept.max().magnitude)
#
# 上の高度の気塊を持ち上げた際の温度プロファイル
prof = mpcalc.parcel_profile(p[i_eptmax:], T[i_eptmax], Td[i_eptmax]).to('degC')
#
# LCLの算出
lcl_pressure, lcl_temperature = mpcalc.lcl(p[i_eptmax], T[i_eptmax], 
                                           Td[i_eptmax])

エマグラム作図

作図部分の下に示したコードは、コメント文を見ていただければ、特に不明なところはないでしょう。ただし、エマグラムを描画する関数 metpy.plots.SkewT()の中で、rotation=0と指定している点には留意してください。

この関数は、skew-T図を作成する関数で、rotaion=0と指定することで、skew-T図は、エマグラムと同じ仕様で図を作成してくれます。

日本ではエマグラムが通常使われますが、海外ではskew-T図がよく使われているそうです。両者の違いは、縦軸の気圧(log)軸と気温の軸が直交している図がエマグラム、気温の軸が45度などの斜めになっているのが skew-T図です。上に示したつくばの事例と同じデータのskew-T図は、下の通りとなります。軸が斜めになっているため、同じ高度の温度差が強調されていて見やすくなります。

画像2
図2 skew-T図 (図1と同じ観測データ) 
## 作図設定
# 描画範囲
AxTmax = 40     # Celsius
AxTmin = -70
AxPtop = 100    # hPa
AxPBot = 1020
# 描画する断熱線などの指定
dry_tmp = np.arange(203, 533, 10) * units.K
moist_tmp = np.arange(203, 400, 5) * units.K
mix_p = np.arange(1000, 99, -20) * units.hPa
#
## 作図
fig = plt.figure(figsize=fig_size)

# asplectを大きくすると、縦長の図となる
skew = SkewT(fig, rotation=0, aspect=120)

# 軸の設定
skew.ax.set_xlim(AxTmin, AxTmax)
skew.ax.set_ylim(AxPBot, AxPtop)

# 温度、露点温度、風の描画
skew.plot(p, T, 'r')
skew.plot(p, Td, 'g')
skew.plot_barbs(p, u, v, y_clip_radius=0.03)

# parcelのプロファイルを追加、パーセルの持ち上げる前の位置、ELを黒、青で示す
skew.plot(p[i_eptmax:], prof, 'k', linewidth=2, alpha=0.5)
skew.plot(p[i_eptmax], T[i_eptmax], 'ko', markerfacecolor='black')
skew.plot(lcl_pressure, lcl_temperature, 'ko', markerfacecolor='blue')

# CAPE,CINを表す領域をshadeする
skew.shade_cin(p[i_eptmax:], T_[i_eptmax:], prof, Td_[i_eptmax:])
skew.shade_cape(p[i_eptmax:], T[i_eptmax:], prof)

# 乾燥断熱曲線などの描画
skew.plot_dry_adiabats(t0=dry_tmp, alpha=0.25, color='orangered')
skew.plot_moist_adiabats(t0=moist_tmp, alpha=0.25, color='tab:green')
skew.plot_mixing_lines(pressure=mix_p, linestyle='dotted', color='tab:blue')

# タイトル
plt.title('{} Sounding'.format(station), loc='left')
plt.title('Valid Time: {}        '.format(dt), loc='right');

# ホドグラフ描画
ax_hod = inset_axes(skew.ax, '40%', '40%', loc=1)  # loc = 9 or 1
hd = Hodograph(ax_hod, component_range=80.)
hd.add_grid(increment=20)
hd.plot_colormapped(u, v, h)
plt.show()

サンプルコード

下に、サンプルコード(Jupyter Notebook用)を掲載します。年月日や地点番号を書き換えるとエマグラムを作成できます。試してみてください。

なお、この記事では、MetPy Vesionは1.1を利用しています。




この記事が気に入ったらサポートをしてみませんか?