更新:

日期 内容
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.15kgm3
外围环境气压 Pn=1010.0hPaP_n = 1010.0 hPaPn=1010.0hPa
气压差 ΔP=Pn−Pc\Delta P = P_n - P_cΔP=PnPc
科氏力参数 f=2∗7.292∗0.00001∗sin(Latc∗π/180.0)f = 2 * 7.292 * 0.00001 * sin(Lat_c * \pi / 180.0)f=27.2920.00001sin(Latcπ/180.0)
最大风速半径 Rm=−18.18∗log(ΔP)+112.2R_m = -18.18 * log(\Delta P) + 112.2Rm=18.18log(Δ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.8810.00557Rm0.01295Latc)
气压场 Pr=Pc+ΔP∗exp(−(Rm/r)B)P_r = P_c + \Delta P * exp(-(R_m / r) ^ B)Pr=Pc+ΔPexp((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))+(2rf)2 +2rf
近地表10m处的平均风速 V10m(r)=Km∗Vg(r)V_{10m}(r) = K_m * V_g(r)V10m(r)=KmVg(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.812.96103Vg,6Vg<19.50.774.31103Vg,19.5Vg<450.66,Vg45

生成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);
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐