Matlab实现Holland风场
实现Holland圆对称风场,不考虑热带气旋的移动速度和前进方位角。
·
更新:
| 日期 | 内容 |
|---|---|
| 2022.09.13 | 代码中 Vg_Holland2 = r * abs(f) / 2; 中 r 的单位是 km,需要乘以 1000 转化为 m。 |
仅使用Matlab实现Holland圆对称风场,不考虑热带气旋的移动速度和前进方位角。
主要的参数设定:
| 参数 | 公式 |
|---|---|
| 空气密度 | ρ=1.15kg⋅m−3\rho=1.15 kg·m^{-3}ρ=1.15kg⋅m−3 |
| 外围环境气压 | Pn=1010.0hPaP_n = 1010.0 hPaPn=1010.0hPa |
| 气压差 | ΔP=Pn−Pc\Delta P = P_n - P_cΔP=Pn−Pc |
| 科氏力参数 | f=2∗7.292∗0.00001∗sin(Latc∗π/180.0)f = 2 * 7.292 * 0.00001 * sin(Lat_c * \pi / 180.0)f=2∗7.292∗0.00001∗sin(Latc∗π/180.0) |
| 最大风速半径 | Rm=−18.18∗log(ΔP)+112.2R_m = -18.18 * log(\Delta P) + 112.2Rm=−18.18∗log(ΔP)+112.2 |
| Holland B系数 | B=1.881−0.00557∗Rm−0.01295∗∣Latc∣)B = 1.881 - 0.00557 * R_m - 0.01295 * |Lat_c|)B=1.881−0.00557∗Rm−0.01295∗∣Latc∣) |
| 气压场 | Pr=Pc+ΔP∗exp(−(Rm/r)B)P_r = P_c + \Delta P * exp(-(R_m / r) ^ B)Pr=Pc+ΔP∗exp(−(Rm/r)B) |
| 梯度风场 | Vg(r)=ΔPBρ(Rmr)Bexp(−(Rmr)B))+(r⋅f2)2+r⋅∣f∣2V_g(r)=\sqrt{\Delta P \frac{B}{\rho}(\frac{R_m}{r})^Bexp(-(\frac{R_m}{r})^B))+(\frac{r·f}{2})^2} + \frac{r·|f|}{2}Vg(r)=ΔPρB(rRm)Bexp(−(rRm)B))+(2r⋅f)2+2r⋅∣f∣ |
| 近地表10m处的平均风速 | V10m(r)=Km∗Vg(r)V_{10m}(r) = K_m * V_g(r)V10m(r)=Km∗Vg(r) |
| KmK_mKm取值标准 | Km={0.81,Vg<60.81−2.96∗10−3∗Vg,6≤Vg<19.50.77−4.31∗10−3∗Vg,19.5≤Vg<450.66,Vg≥45K_m=\begin{cases}0.81, V_g < 6 \\0.81 - 2.96 * 10 ^ {-3} * V_g, 6\leq V_g<19.5 \\0.77 - 4.31 * 10 ^ {-3} * V_g, 19.5\leq V_g<45\\0.66, V_g \ge 45\end{cases}Km=⎩ ⎨ ⎧0.81,Vg<60.81−2.96∗10−3∗Vg,6≤Vg<19.50.77−4.31∗10−3∗Vg,19.5≤Vg<450.66,Vg≥45 |
生成0.25°分辨率的风场:
附Matlab代码:
其中,basetif.tif是一个0.25°的影像
中心经纬度以及中心气压:
Pc=995hPaP_c = 995 hPaPc=995hPa
Latc=10.125°Lat_c = 10.125 °Latc=10.125°
Lonc=120.125°Lon_c = 120.125 °Lonc=120.125°
%%
clc;
clear;
%%
fullpath = mfilename('fullpath');
[path, name] = fileparts(fullpath);
%%
%
basetif = strcat(path, '\basetif.tif');
[A_M, R_M] = geotiffread(basetif);
info = geotiffinfo(basetif);
A_I = zeros(size(A_M));
A_J = zeros(size(A_M));
for i = 1 : size(A_I, 1)
A_I(i, :) = i;
end
for j = 1 : size(A_J, 2)
A_J(:, j) = j;
end
[A_Lat, A_Lon] = pix2latlon(info.RefMatrix, A_I, A_J);
%%
P_c = 995; % hPa
Lat_c = 10.125; % °
Lon_c = 120.125; % °
%%
%
rou_air = 1.15; % kg m-3
%
P_n = 1010.0;
dertP = P_n - P_c;
Rm = -18.18 * log(dertP) + 112.2; % R2 = 0.84
B = 1.881 - 0.00557 * Rm - 0.01295 * abs(Lat_c);
f = 2 * 7.292 * 0.00001 * sin(Lat_c * pi / 180.0);
% great cricle arc
R_earth = 6371;
arcLAT1 = A_Lat * pi / 180.0;
arcLAT2 = Lat_c * pi / 180.0;
arcLON1 = A_Lon * pi / 180.0;
arcLON2 = Lon_c * pi / 180.0;
cos_sita = sin(arcLAT1) .* sin(arcLAT2) + ...
cos(arcLAT1) .* cos(arcLAT2) .* cos(arcLON1 - arcLON2);
sita = acos(cos_sita);
r = R_earth * sita + 0.001;
P_r = P_c + dertP * exp(-(Rm ./ r) .^ B);
Vg_Holland1 = 100 * dertP * B / rou_air * (Rm ./ r) .^ B .* exp(-(Rm ./ r) .^ B);
Vg_Holland2 = r * abs(f) / 2 * 1000;
Vg_Holland = (Vg_Holland1 + Vg_Holland2 .^ 2) .^ 0.5 - Vg_Holland2;
%%
Vg = Vg_Holland;
Km = zeros(size(Vg_Holland));
Km(Vg < 6) = 0.81;
Km(Vg >= 6 & Vg < 19.5) = 0.81 - 2.96 * 10 ^ (-3) * (Vg(Vg >= 6 & Vg < 19.5) - 6);
Km(Vg >= 19.5 & Vg < 45) = 0.77 - 4.31 * 10 ^ (-3) * (Vg(Vg >= 19.5 & Vg < 45) - 19.5);
Km(Vg >= 45) = 0.66;
V_10m = Km .* Vg;
outfile = strcat(path, '\V_10m.tif');
geotiffwrite(outfile, single(V_10m), R_M);
更多推荐


所有评论(0)