From cc215eca7d914a0aa1d0757dc3782b30763a691d Mon Sep 17 00:00:00 2001 From: unuma Date: Mon, 1 Jan 2024 14:38:58 +0900 Subject: [PATCH] Site updated: 2024-01-01 14:38:57 --- .DS_Store | Bin 6148 -> 6148 bytes 2024/01/01/index.html | 301 +++++++++++++++++++++++++++ 2024/01/01/skewt.png | Bin 0 -> 81432 bytes archives/2024/01/index.html | 264 +++++++++++++++++++++++ archives/2024/index.html | 264 +++++++++++++++++++++++ archives/index.html | 32 +-- archives/page/2/index.html | 16 ++ atom.xml | 25 ++- index.html | 28 +-- page/2/index.html | 28 +-- page/3/index.html | 28 +-- page/4/index.html | 28 +-- rss2.xml | 27 ++- tags/Miscellaneous/index.html | 36 ++-- tags/Miscellaneous/page/2/index.html | 18 ++ 15 files changed, 1003 insertions(+), 92 deletions(-) create mode 100644 2024/01/01/index.html create mode 100644 2024/01/01/skewt.png create mode 100644 archives/2024/01/index.html create mode 100644 archives/2024/index.html diff --git a/.DS_Store b/.DS_Store index 65575f82fbd9b26cfae462833040081309ac042a..9073741549d92538a60d314c32931a9ec2be547d 100644 GIT binary patch delta 114 zcmZoMXfc?uH14!S69WSS3xgg*IzuKyNp8N2OHxjL5>Sl8adxJF=E9?nsPZXz+hqai#1 diff --git a/2024/01/01/index.html b/2024/01/01/index.html new file mode 100644 index 0000000..2998ec6 --- /dev/null +++ b/2024/01/01/index.html @@ -0,0 +1,301 @@ + + + + + + + + + + + + + Skew-T LogP plot by MetPy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+

+ Takashi Unuma's blog. +

+
+ +
+
+
+ Home + + + Archive + + +
+
+
+
+
+ +
+

Skew-T LogP plot by MetPy

+ +

はじめに

+

大気の鉛直構造を把握するため、日々、高層気象観測が行われている。これらは観測としてのみならず、数値予報モデルの初期値・解析値としても用いられる重要な観測データである。本稿では、その観測データを地点毎に把握するための Skew-T LogP plot について述べる。ここでは、MetPy で提供されているものを利用し、特に理想化した数値実験の初期値に用いる一点鉛直プロファイルの可視化について紹介する。

+

データ

+

とある時刻・地点のデータを利用する。
+1行目は、地上の気圧 (hPa)・温位 (K)・水蒸気混合比 (g/kg)。
+2行目以降は、高度 (m)・温位 (K)・水蒸気混合比 (g/kg)・東西風 (m/s)・南北風 (m/s)。
+これを、input_sounding という名前で保存。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 1000.00  298.81   18.08
277.04 299.83 16.13 -5.29 1.54
504.73 299.94 16.02 -5.96 1.84
736.79 300.06 16.00 -6.08 2.16
973.81 301.25 15.48 -5.57 3.11
1465.20 303.95 14.38 -2.57 5.48
1982.15 306.88 12.90 1.13 5.17
3104.82 312.11 9.51 5.20 4.45
4369.76 318.33 6.41 5.66 4.46
5823.29 325.50 4.00 11.84 -0.45
7542.22 334.36 1.78 15.32 3.46
9655.91 343.85 0.65 15.49 -5.92
12000.00 351.53 0.11 15.49 -5.92
21000.00 500.53 0.01 15.49 -5.92
+

ソースコード

+

上記のデータを、下記で可視化する。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import matplotlib
import matplotlib.dates as mdates

import metpy.calc as mpcalc
from metpy.calc import temperature_from_potential_temperature, height_to_pressure_std, dewpoint_from_specific_humidity
from metpy.plots import SkewT
from metpy.units import units, pandas_dataframe_to_unit_arrays
import pint_xarray

# ヘッダーを取り除いた上でカラムを指定、pandas dataframe として格納。
df = pd.read_fwf('input_sounding', header=0, usecols=[0, 1, 2, 3, 4], names=['height', 'theta', 'qv', 'uwnd', 'vwnd'])

# pandas dataframe を xarray dataset に変換
ds = df.to_xarray()

# MetPy.units を用い、単位を指定。
ds['height'] = ds['height'] * units.meter
ds['theta'] = ds['theta'] * units.kelvin
ds['qv'] = ds['qv'] * units('g/kg')
ds['uwnd'] = ds['uwnd'] * units.meter_per_second
ds['vwnd'] = ds['vwnd'] * units.meter_per_second

# SkewT logP plot の描画に必要な変数に変換。
ds['pressure'] = height_to_pressure_std(ds['height']).pint.to('hPa')
ds['temperature'] = temperature_from_potential_temperature(ds['pressure'], ds['theta']).pint.to('degC')
ds['dewpoint'] = dewpoint_from_specific_humidity(ds['pressure'], ds['temperature'], ds['qv']).pint.to('degC')

# ある高度から持ち上げたパーセルの気温・露点温度のプロファイルを計算。
parcel_prof = mpcalc.parcel_profile(ds['pressure'], ds['temperature'][0], ds['dewpoint'][0]).pint.to('degC')

# 持ち上げ凝結高度の気圧・気温・露点温度を計算。
lcl_pressure, lcl_temperature = mpcalc.lcl(ds['pressure'][0], ds['temperature'][0], ds['dewpoint'][0])


# 描画
fig = plt.figure(figsize=(8, 6))
skew = SkewT(fig)
skew.ax.set_ylim(1050,100)
skew.ax.set_xlim(-30,35)
skew.ax.set_title("A sample sounding")
skew.plot(ds['pressure'], ds['temperature'], color="k", linestyle='-')
skew.plot(ds['pressure'], ds['dewpoint'], linestyle='-')
skew.shade_cape(ds['pressure'], ds['temperature'], parcel_prof)
skew.plot(ds['pressure'], parcel_prof, linestyle=':', linewidth=2)
skew.plot(lcl_pressure, lcl_temperature, 'ko', markerfacecolor='black')
skew.plot_moist_adiabats(linewidth=0.5)
fig.savefig('skewt.png', bbox_inches='tight')


# 各種指数・パラメーターの計算
p = ds['pressure']
T = ds['temperature']
Td = ds['dewpoint']
height = ds['height']
u = ds['uwnd']
v = ds['vwnd']

ctotals = mpcalc.cross_totals(p, T, Td)
kindex = mpcalc.k_index(p, T, Td)
showalter = mpcalc.showalter_index(p, T, Td)
total_totals = mpcalc.total_totals_index(p, T, Td)
vert_totals = mpcalc.vertical_totals(p, T)
lift_index = mpcalc.lifted_index(p, T, parcel_prof)
cape, cin = mpcalc.cape_cin(p, T, Td, parcel_prof)
lclp, lclt = mpcalc.lcl(p[0], T[0], Td[0])
lfcp, _ = mpcalc.lfc(p, T, Td)
el_pressure, _ = mpcalc.el(p, T, Td, parcel_prof)
ml_t, ml_td = mpcalc.mixed_layer(p, T, Td, depth=50 * units.hPa)
ml_p, _, _ = mpcalc.mixed_parcel(p, T, Td, depth=50 * units.hPa)
mlcape, mlcin = mpcalc.mixed_layer_cape_cin(p, T, parcel_prof, depth=50 * units.hPa)
mu_p, mu_t, mu_td, _ = mpcalc.most_unstable_parcel(p, T, Td, depth=50 * units.hPa)
mucape, mucin = mpcalc.most_unstable_cape_cin(p, T, Td, depth=50 * units.hPa)
(u_storm, v_storm), *_ = mpcalc.bunkers_storm_motion(p, u, v, height)
critical_angle = mpcalc.critical_angle(p, u, v, height, u_storm, v_storm)


# 各種指数・パラメーターの値を確認
print(f' CAPE: {cape:.2f}')
print(f' CIN: {cin:.2f}')
print(f'LCL Pressure: {lclp:.2f}')
print(f'LFC Pressure: {lfcp:.2f}')
print(f' EL Pressure: {el_pressure:.2f}')
print()
print('Mixed Layer - Lowest 50-hPa')
print(f' ML Temp: {ml_t:.2f}')
print(f' ML Dewp: {ml_td:.2f}')
print(f' ML CAPE: {mlcape:.2f}')
print(f' ML CIN: {mlcin:.2f}')
print()
print('Most Unstable - Lowest 50-hPa')
print(f' MU Temp: {mu_t:.2f}')
print(f' MU Dewp: {mu_td:.2f}')
print(f' MU Pressure: {mu_p:.2f}')
print(f' MU CAPE: {mucape:.2f}')
print(f' MU CIN: {mucin:.2f}')
print()
print(f' Lifted Index: {lift_index:.2f}')
print(f' K-Index: {kindex:.2f}')
print(f'Showalter Index: {showalter:.2f}')
print(f' Cross Totals: {ctotals:.2f}')
print(f' Total Totals: {total_totals:.2f}')
print(f'Vertical Totals: {vert_totals:.2f}')
print()
print('Bunkers Storm Motion Vector')
print(f' u_storm: {u_storm:.2f}')
print(f' v_storm: {v_storm:.2f}')
print(f'Critical Angle: {critical_angle:.2f}')
+

出力結果

+

図が Skew-T logP plot。横軸は気温または露点温度 (degree C)、縦軸は気圧 (hPa)。黒実線で気温、青実線で露点温度、橙点線で持ち上げたパーセルの気温をそれぞれ示す、赤色の陰影で示される面積は、持ち上げたパーセルと周辺大気との気温差、すなわち対流有効位置エネルギー (CAPE) である。黒丸印は持ち上げ凝結高度 (LCL) を示す。
+図の左下から右上に向かう灰色の線は等温線を、図の右下から左上に伸びる青色点線は等湿潤断熱線をそれぞれ示す。

+ +

図の 925 hPa から少なくとも 500 hPa までは、気温と露点温度の線が重なっている。これは、ほぼ相対湿度 100% であることを示す。加えて、800 hPa から 600 hPa までの層では、気温減率の傾きが湿潤断熱線の傾きよりも大きくなっており、湿潤絶対不安定 (Moist Absolutely Unstable Layer, Bryan and Fritsch 2000) の可能性がある。

+

下記は、一点鉛直プロファイルから得られる指数やパラメーターの出力である。一地点の鉛直プロファイルから、これだけ多様な診断パラメーターを算出することが可能となる。

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        CAPE: 729.54 joule / kilogram
CIN: -3.21 joule / kilogram
LCL Pressure: 926.10 hectopascal
LFC Pressure: 885.54 hectopascal
EL Pressure: 260.51 hectopascal

Mixed Layer - Lowest 50-hPa
ML Temp: 22.89 degree_Celsius
ML Dewp: 20.64 degree_Celsius
ML CAPE: 1997.43 joule / kilogram
ML CIN: -0.15 joule / kilogram

Most Unstable - Lowest 50-hPa
MU Temp: 20.55 degree_Celsius
MU Dewp: 20.17 degree_Celsius
MU Pressure: 927.77 hectopascal
MU CAPE: 754.89 joule / kilogram
MU CIN: -1.08 joule / kilogram

Lifted Index: -3.48 delta_degree_Celsius
K-Index: 41.32 degree_Celsius
Showalter Index: -3.25 delta_degree_Celsius
Cross Totals: 24.40 delta_degree_Celsius
Total Totals: 48.64 delta_degree_Celsius
Vertical Totals: 24.24 delta_degree_Celsius

Bunkers Storm Motion Vector
u_storm: 0.25 meter_per_second
v_storm: -4.63 meter_per_second
Critical Angle: 179.85 degree
+

指数・診断パラメーターは、発案された地域や特性に依存するため、計算結果をそのまま異なる地域に当てはめることは得策ではない。上記で調べたように、可視化することで指数が意図した計算となっているか、愚直に確認することが重要である (時に時間を要するが)。ここでは、計算方法の紹介に留める。

+

おわりに

+

大気の状態を把握するための基礎的な観測の一つである、高層気象観測データの可視化と関連する指数・パラメータの計算について紹介した。

+

参考文献

+
    +
  • May, R. M., Goebbert, K. H., Thielen, J. E., Leeman, J. R., Camron, M. D., Bruick, Z., Bruning, E. C., Manser, R. P., Arms, S. C., and Marsh, P. T., 2022: MetPy: A Meteorological Python Library for Data Analysis and Visualization. Bull. Amer. Meteor. Soc., 103, E2273-E2284, doi:10.1175/BAMS-D-21-0125.1.
  • +
  • Bryan, G. H., and J. M. Fritsch, 2000: Moist Absolute Instability: The Sixth Static Stability State. Bull. Amer. Meteor. Soc., 81, 1207–1230, doi:10.1175/1520-0477(2000)081<1287:MAITSS>2.3.CO;2.
  • +
+

更新履歴

+
    +
  • 2024-01-01: 初稿
  • +
+ +

— 2024年1月1日

+ +
+
+ + + + + +
+ + + +
+
+ +
+

Made with ❤ and + + Hexo.js + + + at Japan.

+ +
+ + + + +
+ +
+ +
+ +
+ + + + + + + diff --git a/2024/01/01/skewt.png b/2024/01/01/skewt.png new file mode 100644 index 0000000000000000000000000000000000000000..d9817c90fd26d7d953af23348fd773a028cc13a1 GIT binary patch literal 81432 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 iBQBwV`+xo6 + + + + + + + + + + + + All Posts - Takashi Unuma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/archives/2024/index.html b/archives/2024/index.html new file mode 100644 index 0000000..828aa36 --- /dev/null +++ b/archives/2024/index.html @@ -0,0 +1,264 @@ + + + + + + + + + + + + + All Posts - Takashi Unuma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+

+ Takashi Unuma's blog. +

+
+ +
+
+
+ Home + + + Archive + + +
+
+
+
+
+ +
+ +

All Posts

+ + + + +
+
    + + +
+
+ + +
+
+ +
+

Made with ❤ and + + Hexo.js + + + at Japan.

+ +
+ + + + +
+ +
+ +
+ +
+ + + + + + + diff --git a/archives/index.html b/archives/index.html index 3403554..4004863 100644 --- a/archives/index.html +++ b/archives/index.html @@ -172,6 +172,22 @@

All Posts

+ +
@@ -316,22 +332,6 @@

All Posts

- -
    diff --git a/archives/page/2/index.html b/archives/page/2/index.html index c981c34..6a3060d 100644 --- a/archives/page/2/index.html +++ b/archives/page/2/index.html @@ -172,6 +172,22 @@

    All Posts

    + +
    diff --git a/atom.xml b/atom.xml index fda9fd9..3436dae 100644 --- a/atom.xml +++ b/atom.xml @@ -6,7 +6,7 @@ - 2022-11-20T09:33:35.000Z + 2024-01-01T05:37:46.502Z https://takashiunuma.github.io/blog/ @@ -16,6 +16,29 @@ Hexo + + Skew-T LogP plot by MetPy + + https://takashiunuma.github.io/blog/2024/01/01/ + 2024-01-01T04:15:24.000Z + 2024-01-01T05:37:46.502Z + + はじめに

    大気の鉛直構造を把握するため、日々、高層気象観測が行われている。これらは観測としてのみならず、数値予報モデルの初期値・解析値としても用いられる重要な観測データである。本稿では、その観測データを地点毎に把握するための Skew-T LogP plot について述べる。ここでは、MetPy で提供されているものを利用し、特に理想化した数値実験の初期値に用いる一点鉛直プロファイルの可視化について紹介する。

    データ

    とある時刻・地点のデータを利用する。
    1行目は、地上の気圧 (hPa)・温位 (K)・水蒸気混合比 (g/kg)。
    2行目以降は、高度 (m)・温位 (K)・水蒸気混合比 (g/kg)・東西風 (m/s)・南北風 (m/s)。
    これを、input_sounding という名前で保存。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     1000.00  298.81   18.08
    277.04 299.83 16.13 -5.29 1.54
    504.73 299.94 16.02 -5.96 1.84
    736.79 300.06 16.00 -6.08 2.16
    973.81 301.25 15.48 -5.57 3.11
    1465.20 303.95 14.38 -2.57 5.48
    1982.15 306.88 12.90 1.13 5.17
    3104.82 312.11 9.51 5.20 4.45
    4369.76 318.33 6.41 5.66 4.46
    5823.29 325.50 4.00 11.84 -0.45
    7542.22 334.36 1.78 15.32 3.46
    9655.91 343.85 0.65 15.49 -5.92
    12000.00 351.53 0.11 15.49 -5.92
    21000.00 500.53 0.01 15.49 -5.92

    ソースコード

    上記のデータを、下記で可視化する。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    import pandas as pd
    import numpy as np

    import matplotlib.pyplot as plt
    import matplotlib
    import matplotlib.dates as mdates

    import metpy.calc as mpcalc
    from metpy.calc import temperature_from_potential_temperature, height_to_pressure_std, dewpoint_from_specific_humidity
    from metpy.plots import SkewT
    from metpy.units import units, pandas_dataframe_to_unit_arrays
    import pint_xarray

    # ヘッダーを取り除いた上でカラムを指定、pandas dataframe として格納。
    df = pd.read_fwf('input_sounding', header=0, usecols=[0, 1, 2, 3, 4], names=['height', 'theta', 'qv', 'uwnd', 'vwnd'])

    # pandas dataframe を xarray dataset に変換
    ds = df.to_xarray()

    # MetPy.units を用い、単位を指定。
    ds['height'] = ds['height'] * units.meter
    ds['theta'] = ds['theta'] * units.kelvin
    ds['qv'] = ds['qv'] * units('g/kg')
    ds['uwnd'] = ds['uwnd'] * units.meter_per_second
    ds['vwnd'] = ds['vwnd'] * units.meter_per_second

    # SkewT logP plot の描画に必要な変数に変換。
    ds['pressure'] = height_to_pressure_std(ds['height']).pint.to('hPa')
    ds['temperature'] = temperature_from_potential_temperature(ds['pressure'], ds['theta']).pint.to('degC')
    ds['dewpoint'] = dewpoint_from_specific_humidity(ds['pressure'], ds['temperature'], ds['qv']).pint.to('degC')

    # ある高度から持ち上げたパーセルの気温・露点温度のプロファイルを計算。
    parcel_prof = mpcalc.parcel_profile(ds['pressure'], ds['temperature'][0], ds['dewpoint'][0]).pint.to('degC')

    # 持ち上げ凝結高度の気圧・気温・露点温度を計算。
    lcl_pressure, lcl_temperature = mpcalc.lcl(ds['pressure'][0], ds['temperature'][0], ds['dewpoint'][0])


    # 描画
    fig = plt.figure(figsize=(8, 6))
    skew = SkewT(fig)
    skew.ax.set_ylim(1050,100)
    skew.ax.set_xlim(-30,35)
    skew.ax.set_title("A sample sounding")
    skew.plot(ds['pressure'], ds['temperature'], color="k", linestyle='-')
    skew.plot(ds['pressure'], ds['dewpoint'], linestyle='-')
    skew.shade_cape(ds['pressure'], ds['temperature'], parcel_prof)
    skew.plot(ds['pressure'], parcel_prof, linestyle=':', linewidth=2)
    skew.plot(lcl_pressure, lcl_temperature, 'ko', markerfacecolor='black')
    skew.plot_moist_adiabats(linewidth=0.5)
    fig.savefig('skewt.png', bbox_inches='tight')


    # 各種指数・パラメーターの計算
    p = ds['pressure']
    T = ds['temperature']
    Td = ds['dewpoint']
    height = ds['height']
    u = ds['uwnd']
    v = ds['vwnd']

    ctotals = mpcalc.cross_totals(p, T, Td)
    kindex = mpcalc.k_index(p, T, Td)
    showalter = mpcalc.showalter_index(p, T, Td)
    total_totals = mpcalc.total_totals_index(p, T, Td)
    vert_totals = mpcalc.vertical_totals(p, T)
    lift_index = mpcalc.lifted_index(p, T, parcel_prof)
    cape, cin = mpcalc.cape_cin(p, T, Td, parcel_prof)
    lclp, lclt = mpcalc.lcl(p[0], T[0], Td[0])
    lfcp, _ = mpcalc.lfc(p, T, Td)
    el_pressure, _ = mpcalc.el(p, T, Td, parcel_prof)
    ml_t, ml_td = mpcalc.mixed_layer(p, T, Td, depth=50 * units.hPa)
    ml_p, _, _ = mpcalc.mixed_parcel(p, T, Td, depth=50 * units.hPa)
    mlcape, mlcin = mpcalc.mixed_layer_cape_cin(p, T, parcel_prof, depth=50 * units.hPa)
    mu_p, mu_t, mu_td, _ = mpcalc.most_unstable_parcel(p, T, Td, depth=50 * units.hPa)
    mucape, mucin = mpcalc.most_unstable_cape_cin(p, T, Td, depth=50 * units.hPa)
    (u_storm, v_storm), *_ = mpcalc.bunkers_storm_motion(p, u, v, height)
    critical_angle = mpcalc.critical_angle(p, u, v, height, u_storm, v_storm)


    # 各種指数・パラメーターの値を確認
    print(f' CAPE: {cape:.2f}')
    print(f' CIN: {cin:.2f}')
    print(f'LCL Pressure: {lclp:.2f}')
    print(f'LFC Pressure: {lfcp:.2f}')
    print(f' EL Pressure: {el_pressure:.2f}')
    print()
    print('Mixed Layer - Lowest 50-hPa')
    print(f' ML Temp: {ml_t:.2f}')
    print(f' ML Dewp: {ml_td:.2f}')
    print(f' ML CAPE: {mlcape:.2f}')
    print(f' ML CIN: {mlcin:.2f}')
    print()
    print('Most Unstable - Lowest 50-hPa')
    print(f' MU Temp: {mu_t:.2f}')
    print(f' MU Dewp: {mu_td:.2f}')
    print(f' MU Pressure: {mu_p:.2f}')
    print(f' MU CAPE: {mucape:.2f}')
    print(f' MU CIN: {mucin:.2f}')
    print()
    print(f' Lifted Index: {lift_index:.2f}')
    print(f' K-Index: {kindex:.2f}')
    print(f'Showalter Index: {showalter:.2f}')
    print(f' Cross Totals: {ctotals:.2f}')
    print(f' Total Totals: {total_totals:.2f}')
    print(f'Vertical Totals: {vert_totals:.2f}')
    print()
    print('Bunkers Storm Motion Vector')
    print(f' u_storm: {u_storm:.2f}')
    print(f' v_storm: {v_storm:.2f}')
    print(f'Critical Angle: {critical_angle:.2f}')

    出力結果

    図が Skew-T logP plot。横軸は気温または露点温度 (degree C)、縦軸は気圧 (hPa)。黒実線で気温、青実線で露点温度、橙点線で持ち上げたパーセルの気温をそれぞれ示す、赤色の陰影で示される面積は、持ち上げたパーセルと周辺大気との気温差、すなわち対流有効位置エネルギー (CAPE) である。黒丸印は持ち上げ凝結高度 (LCL) を示す。
    図の左下から右上に向かう灰色の線は等温線を、図の右下から左上に伸びる青色点線は等湿潤断熱線をそれぞれ示す。

    図の 925 hPa から少なくとも 500 hPa までは、気温と露点温度の線が重なっている。これは、ほぼ相対湿度 100% であることを示す。加えて、800 hPa から 600 hPa までの層では、気温減率の傾きが湿潤断熱線の傾きよりも大きくなっており、湿潤絶対不安定 (Moist Absolutely Unstable Layer, Bryan and Fritsch 2000) の可能性がある。

    下記は、一点鉛直プロファイルから得られる指数やパラメーターの出力である。一地点の鉛直プロファイルから、これだけ多様な診断パラメーターを算出することが可能となる。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
            CAPE: 729.54 joule / kilogram
    CIN: -3.21 joule / kilogram
    LCL Pressure: 926.10 hectopascal
    LFC Pressure: 885.54 hectopascal
    EL Pressure: 260.51 hectopascal

    Mixed Layer - Lowest 50-hPa
    ML Temp: 22.89 degree_Celsius
    ML Dewp: 20.64 degree_Celsius
    ML CAPE: 1997.43 joule / kilogram
    ML CIN: -0.15 joule / kilogram

    Most Unstable - Lowest 50-hPa
    MU Temp: 20.55 degree_Celsius
    MU Dewp: 20.17 degree_Celsius
    MU Pressure: 927.77 hectopascal
    MU CAPE: 754.89 joule / kilogram
    MU CIN: -1.08 joule / kilogram

    Lifted Index: -3.48 delta_degree_Celsius
    K-Index: 41.32 degree_Celsius
    Showalter Index: -3.25 delta_degree_Celsius
    Cross Totals: 24.40 delta_degree_Celsius
    Total Totals: 48.64 delta_degree_Celsius
    Vertical Totals: 24.24 delta_degree_Celsius

    Bunkers Storm Motion Vector
    u_storm: 0.25 meter_per_second
    v_storm: -4.63 meter_per_second
    Critical Angle: 179.85 degree

    指数・診断パラメーターは、発案された地域や特性に依存するため、計算結果をそのまま異なる地域に当てはめることは得策ではない。上記で調べたように、可視化することで指数が意図した計算となっているか、愚直に確認することが重要である (時に時間を要するが)。ここでは、計算方法の紹介に留める。

    おわりに

    大気の状態を把握するための基礎的な観測の一つである、高層気象観測データの可視化と関連する指数・パラメータの計算について紹介した。

    参考文献

    • May, R. M., Goebbert, K. H., Thielen, J. E., Leeman, J. R., Camron, M. D., Bruick, Z., Bruning, E. C., Manser, R. P., Arms, S. C., and Marsh, P. T., 2022: MetPy: A Meteorological Python Library for Data Analysis and Visualization. Bull. Amer. Meteor. Soc., 103, E2273-E2284, doi:10.1175/BAMS-D-21-0125.1.
    • Bryan, G. H., and J. M. Fritsch, 2000: Moist Absolute Instability: The Sixth Static Stability State. Bull. Amer. Meteor. Soc., 81, 1207–1230, doi:10.1175/1520-0477(2000)081<1287:MAITSS>2.3.CO;2.

    更新履歴

    • 2024-01-01: 初稿
    ]]>
    + + + + + <h1 id="はじめに"><a class="markdownIt-Anchor" href="#はじめに"></a> はじめに</h1> +<p>大気の鉛直構造を把握するため、日々、高層気象観測が行われている。これらは観測としてのみならず、数値予報モデルの初期値・解析値としても + + + + + + + +
    + 粒径分布パラメータのレーダー変数による推定 diff --git a/index.html b/index.html index a670e4b..814d4a0 100644 --- a/index.html +++ b/index.html @@ -180,6 +180,20 @@

    Welcome to Takashi Unuma's blog.

    Recent Posts

    +
    + +
    +

    2024年1月1日

    +
    + +
    +
    @@ -236,20 +250,6 @@

    Recent Posts

    - -

    All Posts

    diff --git a/page/2/index.html b/page/2/index.html index 24e130e..c3c36d4 100644 --- a/page/2/index.html +++ b/page/2/index.html @@ -180,6 +180,20 @@

    Welcome to Takashi Unuma's blog.

    Recent Posts

    +
    + +
    +

    2024年1月1日

    +
    + +
    +
    @@ -236,20 +250,6 @@

    Recent Posts

    - -

    All Posts

    diff --git a/page/3/index.html b/page/3/index.html index d54dd44..fec1e95 100644 --- a/page/3/index.html +++ b/page/3/index.html @@ -180,6 +180,20 @@

    Welcome to Takashi Unuma's blog.

    Recent Posts

    +
    + +
    +

    2024年1月1日

    +
    + +
    +
    @@ -236,20 +250,6 @@

    Recent Posts

    - -

    All Posts

    diff --git a/page/4/index.html b/page/4/index.html index 7661153..04bb9fc 100644 --- a/page/4/index.html +++ b/page/4/index.html @@ -180,6 +180,20 @@

    Welcome to Takashi Unuma's blog.

    Recent Posts

    +
    + +
    +

    2024年1月1日

    +
    + +
    +
    @@ -236,20 +250,6 @@

    Recent Posts

    - -

    All Posts

    diff --git a/rss2.xml b/rss2.xml index c7e8fd2..e919448 100644 --- a/rss2.xml +++ b/rss2.xml @@ -15,9 +15,34 @@ - Sun, 20 Nov 2022 09:33:35 GMT + Mon, 01 Jan 2024 05:37:46 GMT http://hexo.io/ + + Skew-T LogP plot by MetPy + https://takashiunuma.github.io/blog/2024/01/01/ + https://takashiunuma.github.io/blog/2024/01/01/ + Mon, 01 Jan 2024 04:15:24 GMT + + + + <h1 id="はじめに"><a class="markdownIt-Anchor" href="#はじめに"></a> はじめに</h1> +<p>大気の鉛直構造を把握するため、日々、高層気象観測が行われている。これらは観測としてのみならず、数値予報モデルの初期値・解析値としても + + + + + はじめに

    大気の鉛直構造を把握するため、日々、高層気象観測が行われている。これらは観測としてのみならず、数値予報モデルの初期値・解析値としても用いられる重要な観測データである。本稿では、その観測データを地点毎に把握するための Skew-T LogP plot について述べる。ここでは、MetPy で提供されているものを利用し、特に理想化した数値実験の初期値に用いる一点鉛直プロファイルの可視化について紹介する。

    データ

    とある時刻・地点のデータを利用する。
    1行目は、地上の気圧 (hPa)・温位 (K)・水蒸気混合比 (g/kg)。
    2行目以降は、高度 (m)・温位 (K)・水蒸気混合比 (g/kg)・東西風 (m/s)・南北風 (m/s)。
    これを、input_sounding という名前で保存。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     1000.00  298.81   18.08
    277.04 299.83 16.13 -5.29 1.54
    504.73 299.94 16.02 -5.96 1.84
    736.79 300.06 16.00 -6.08 2.16
    973.81 301.25 15.48 -5.57 3.11
    1465.20 303.95 14.38 -2.57 5.48
    1982.15 306.88 12.90 1.13 5.17
    3104.82 312.11 9.51 5.20 4.45
    4369.76 318.33 6.41 5.66 4.46
    5823.29 325.50 4.00 11.84 -0.45
    7542.22 334.36 1.78 15.32 3.46
    9655.91 343.85 0.65 15.49 -5.92
    12000.00 351.53 0.11 15.49 -5.92
    21000.00 500.53 0.01 15.49 -5.92

    ソースコード

    上記のデータを、下記で可視化する。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    import pandas as pd
    import numpy as np

    import matplotlib.pyplot as plt
    import matplotlib
    import matplotlib.dates as mdates

    import metpy.calc as mpcalc
    from metpy.calc import temperature_from_potential_temperature, height_to_pressure_std, dewpoint_from_specific_humidity
    from metpy.plots import SkewT
    from metpy.units import units, pandas_dataframe_to_unit_arrays
    import pint_xarray

    # ヘッダーを取り除いた上でカラムを指定、pandas dataframe として格納。
    df = pd.read_fwf('input_sounding', header=0, usecols=[0, 1, 2, 3, 4], names=['height', 'theta', 'qv', 'uwnd', 'vwnd'])

    # pandas dataframe を xarray dataset に変換
    ds = df.to_xarray()

    # MetPy.units を用い、単位を指定。
    ds['height'] = ds['height'] * units.meter
    ds['theta'] = ds['theta'] * units.kelvin
    ds['qv'] = ds['qv'] * units('g/kg')
    ds['uwnd'] = ds['uwnd'] * units.meter_per_second
    ds['vwnd'] = ds['vwnd'] * units.meter_per_second

    # SkewT logP plot の描画に必要な変数に変換。
    ds['pressure'] = height_to_pressure_std(ds['height']).pint.to('hPa')
    ds['temperature'] = temperature_from_potential_temperature(ds['pressure'], ds['theta']).pint.to('degC')
    ds['dewpoint'] = dewpoint_from_specific_humidity(ds['pressure'], ds['temperature'], ds['qv']).pint.to('degC')

    # ある高度から持ち上げたパーセルの気温・露点温度のプロファイルを計算。
    parcel_prof = mpcalc.parcel_profile(ds['pressure'], ds['temperature'][0], ds['dewpoint'][0]).pint.to('degC')

    # 持ち上げ凝結高度の気圧・気温・露点温度を計算。
    lcl_pressure, lcl_temperature = mpcalc.lcl(ds['pressure'][0], ds['temperature'][0], ds['dewpoint'][0])


    # 描画
    fig = plt.figure(figsize=(8, 6))
    skew = SkewT(fig)
    skew.ax.set_ylim(1050,100)
    skew.ax.set_xlim(-30,35)
    skew.ax.set_title("A sample sounding")
    skew.plot(ds['pressure'], ds['temperature'], color="k", linestyle='-')
    skew.plot(ds['pressure'], ds['dewpoint'], linestyle='-')
    skew.shade_cape(ds['pressure'], ds['temperature'], parcel_prof)
    skew.plot(ds['pressure'], parcel_prof, linestyle=':', linewidth=2)
    skew.plot(lcl_pressure, lcl_temperature, 'ko', markerfacecolor='black')
    skew.plot_moist_adiabats(linewidth=0.5)
    fig.savefig('skewt.png', bbox_inches='tight')


    # 各種指数・パラメーターの計算
    p = ds['pressure']
    T = ds['temperature']
    Td = ds['dewpoint']
    height = ds['height']
    u = ds['uwnd']
    v = ds['vwnd']

    ctotals = mpcalc.cross_totals(p, T, Td)
    kindex = mpcalc.k_index(p, T, Td)
    showalter = mpcalc.showalter_index(p, T, Td)
    total_totals = mpcalc.total_totals_index(p, T, Td)
    vert_totals = mpcalc.vertical_totals(p, T)
    lift_index = mpcalc.lifted_index(p, T, parcel_prof)
    cape, cin = mpcalc.cape_cin(p, T, Td, parcel_prof)
    lclp, lclt = mpcalc.lcl(p[0], T[0], Td[0])
    lfcp, _ = mpcalc.lfc(p, T, Td)
    el_pressure, _ = mpcalc.el(p, T, Td, parcel_prof)
    ml_t, ml_td = mpcalc.mixed_layer(p, T, Td, depth=50 * units.hPa)
    ml_p, _, _ = mpcalc.mixed_parcel(p, T, Td, depth=50 * units.hPa)
    mlcape, mlcin = mpcalc.mixed_layer_cape_cin(p, T, parcel_prof, depth=50 * units.hPa)
    mu_p, mu_t, mu_td, _ = mpcalc.most_unstable_parcel(p, T, Td, depth=50 * units.hPa)
    mucape, mucin = mpcalc.most_unstable_cape_cin(p, T, Td, depth=50 * units.hPa)
    (u_storm, v_storm), *_ = mpcalc.bunkers_storm_motion(p, u, v, height)
    critical_angle = mpcalc.critical_angle(p, u, v, height, u_storm, v_storm)


    # 各種指数・パラメーターの値を確認
    print(f' CAPE: {cape:.2f}')
    print(f' CIN: {cin:.2f}')
    print(f'LCL Pressure: {lclp:.2f}')
    print(f'LFC Pressure: {lfcp:.2f}')
    print(f' EL Pressure: {el_pressure:.2f}')
    print()
    print('Mixed Layer - Lowest 50-hPa')
    print(f' ML Temp: {ml_t:.2f}')
    print(f' ML Dewp: {ml_td:.2f}')
    print(f' ML CAPE: {mlcape:.2f}')
    print(f' ML CIN: {mlcin:.2f}')
    print()
    print('Most Unstable - Lowest 50-hPa')
    print(f' MU Temp: {mu_t:.2f}')
    print(f' MU Dewp: {mu_td:.2f}')
    print(f' MU Pressure: {mu_p:.2f}')
    print(f' MU CAPE: {mucape:.2f}')
    print(f' MU CIN: {mucin:.2f}')
    print()
    print(f' Lifted Index: {lift_index:.2f}')
    print(f' K-Index: {kindex:.2f}')
    print(f'Showalter Index: {showalter:.2f}')
    print(f' Cross Totals: {ctotals:.2f}')
    print(f' Total Totals: {total_totals:.2f}')
    print(f'Vertical Totals: {vert_totals:.2f}')
    print()
    print('Bunkers Storm Motion Vector')
    print(f' u_storm: {u_storm:.2f}')
    print(f' v_storm: {v_storm:.2f}')
    print(f'Critical Angle: {critical_angle:.2f}')

    出力結果

    図が Skew-T logP plot。横軸は気温または露点温度 (degree C)、縦軸は気圧 (hPa)。黒実線で気温、青実線で露点温度、橙点線で持ち上げたパーセルの気温をそれぞれ示す、赤色の陰影で示される面積は、持ち上げたパーセルと周辺大気との気温差、すなわち対流有効位置エネルギー (CAPE) である。黒丸印は持ち上げ凝結高度 (LCL) を示す。
    図の左下から右上に向かう灰色の線は等温線を、図の右下から左上に伸びる青色点線は等湿潤断熱線をそれぞれ示す。

    図の 925 hPa から少なくとも 500 hPa までは、気温と露点温度の線が重なっている。これは、ほぼ相対湿度 100% であることを示す。加えて、800 hPa から 600 hPa までの層では、気温減率の傾きが湿潤断熱線の傾きよりも大きくなっており、湿潤絶対不安定 (Moist Absolutely Unstable Layer, Bryan and Fritsch 2000) の可能性がある。

    下記は、一点鉛直プロファイルから得られる指数やパラメーターの出力である。一地点の鉛直プロファイルから、これだけ多様な診断パラメーターを算出することが可能となる。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
            CAPE: 729.54 joule / kilogram
    CIN: -3.21 joule / kilogram
    LCL Pressure: 926.10 hectopascal
    LFC Pressure: 885.54 hectopascal
    EL Pressure: 260.51 hectopascal

    Mixed Layer - Lowest 50-hPa
    ML Temp: 22.89 degree_Celsius
    ML Dewp: 20.64 degree_Celsius
    ML CAPE: 1997.43 joule / kilogram
    ML CIN: -0.15 joule / kilogram

    Most Unstable - Lowest 50-hPa
    MU Temp: 20.55 degree_Celsius
    MU Dewp: 20.17 degree_Celsius
    MU Pressure: 927.77 hectopascal
    MU CAPE: 754.89 joule / kilogram
    MU CIN: -1.08 joule / kilogram

    Lifted Index: -3.48 delta_degree_Celsius
    K-Index: 41.32 degree_Celsius
    Showalter Index: -3.25 delta_degree_Celsius
    Cross Totals: 24.40 delta_degree_Celsius
    Total Totals: 48.64 delta_degree_Celsius
    Vertical Totals: 24.24 delta_degree_Celsius

    Bunkers Storm Motion Vector
    u_storm: 0.25 meter_per_second
    v_storm: -4.63 meter_per_second
    Critical Angle: 179.85 degree

    指数・診断パラメーターは、発案された地域や特性に依存するため、計算結果をそのまま異なる地域に当てはめることは得策ではない。上記で調べたように、可視化することで指数が意図した計算となっているか、愚直に確認することが重要である (時に時間を要するが)。ここでは、計算方法の紹介に留める。

    おわりに

    大気の状態を把握するための基礎的な観測の一つである、高層気象観測データの可視化と関連する指数・パラメータの計算について紹介した。

    参考文献

    • May, R. M., Goebbert, K. H., Thielen, J. E., Leeman, J. R., Camron, M. D., Bruick, Z., Bruning, E. C., Manser, R. P., Arms, S. C., and Marsh, P. T., 2022: MetPy: A Meteorological Python Library for Data Analysis and Visualization. Bull. Amer. Meteor. Soc., 103, E2273-E2284, doi:10.1175/BAMS-D-21-0125.1.
    • Bryan, G. H., and J. M. Fritsch, 2000: Moist Absolute Instability: The Sixth Static Stability State. Bull. Amer. Meteor. Soc., 81, 1207–1230, doi:10.1175/1520-0477(2000)081<1287:MAITSS>2.3.CO;2.

    更新履歴

    • 2024-01-01: 初稿
    ]]>
    + + + + Miscellaneous + + + https://takashiunuma.github.io/blog/2024/01/01/#disqus_thread + +
    + 粒径分布パラメータのレーダー変数による推定 https://takashiunuma.github.io/blog/2022/11/19/ diff --git a/tags/Miscellaneous/index.html b/tags/Miscellaneous/index.html index 4815435..4ec3ceb 100644 --- a/tags/Miscellaneous/index.html +++ b/tags/Miscellaneous/index.html @@ -175,6 +175,24 @@

    Posts Related to — Miscellaneous

    + + + +
    @@ -336,24 +354,6 @@

    Posts Related to — Miscellaneous

    - - - -
      diff --git a/tags/Miscellaneous/page/2/index.html b/tags/Miscellaneous/page/2/index.html index dbd1d64..662ef5a 100644 --- a/tags/Miscellaneous/page/2/index.html +++ b/tags/Miscellaneous/page/2/index.html @@ -175,6 +175,24 @@

      Posts Related to — Miscellaneous

      + + + +
+
+
+ + + +
+ +

All Posts

+ + + + +
+
    + + +
+
+ + +
+
+ +
+

Made with ❤ and + + Hexo.js + + + at Japan.

+ +
+ + + + +
+ +
+ +
+ +