自动和远程提取 MetCoOp-Ensemble 预测系统数据(Matlab代码实现)

 👨‍🎓个人主页:研学社的博客    

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

MetCoOp是芬兰气象研究所(FMI)、挪威气象局和瑞典气象水文研究所(SMHI)之间的业务数值天气预报(NWP)气象合作。

北欧合作正在扩大
MET和SMHI (MetCoOp)的合作始于2010年,自2014年以来,这两个部门都受益于同一天气模型的预报。2017年,(FMI)也加入MetCoOp。许多国家都对这一合作感兴趣,从长远来看,七个北欧国家也将加入这一合作。

从2022年起,波罗的海国家爱沙尼亚、拉脱维亚和立陶宛也将加入,届时可能被称为UWC- east (UWC =联合气象中心)。同样从2022年起,UWC-West (KNMI, DMI, Met Éireann和ve - urstofa Islands)将开始联合运营生产。

从2027年起,UWC-East和UWC-West将在一个共同的数据中心进行联合生产。

结果是,数值气象研究所(NMSs)可以联合起来做任何一方都无法做到的事情:确保北欧社会做好天气准备,加强高影响天气警报,加强安全,确保公民的生命和财产安全。

电脑要求
联合天气中心(UWC)项目背后的十个北方国家有一个主要目标:创建一个共同的天气预报模型,以提供尽可能最好的短期天气预报。

天气预报需要大量昂贵的计算能力、天气观测和研究。新技术正在改变气象服务的环境和机遇。有足够资金投资于高性能计算机(hpc)和人工智能研究的全球公司能够挑战现有的NMSs。十个北方国家不再单独行动,而是同意联合起来。

天气预报系统MEPS
MET、SMHI和FMI使用一个天气模型进行天气预报,我们称之为MEPS (MetCoOp集合预报系统)。天气模式作整体预报。这意味着,人们可以从几个预报的组合开始,量化可能的天气发展的结果空间,这取决于天气本身,而不是只看一个预报。这样的预报汇编使得计算极端天气的概率变得更加容易。

📚2 运行结果

部分代码:

% Outputs:
%   * data: structure with the following fields
%       - time: [1x1] datetime
%       - LAF: [Nlon x Nlat] double: land_area_fraction
%       - U:  [Nlon x Nlat] double: wind_speed at 10m above the surface in
%       m/s
%       - DD:  [Nlon x Nlat] double: wind_direction at 10m above the surface
%       in deg
%       - RH:  [Nlon x Nlat] double: relative_humidity 2m  above the surface
%       - PA:  [Nlon x Nlat] double: precipitation_amount in kg/m^2
%       - I:  [Nlon x Nlat] double:
%       integral_of_surface_downwelling_shortwave_flux_in_air_wrt_time in W s/m^2
%       - P:  [Nlon x Nlat] double: air_pressure_at_sea_level in Pa
%       - T:  [Nlon x Nlat] double: air_temperature_2m in K
%       - CAF:  [Nlon x Nlat] double: cloud_area_fraction
%
%
% Author: E. Cheynet - UiB, Norway - last modified: 14-04-2021
%%
if strcmpi(type,'rerun version 2')
    typeA = 'metpparchivev2';
elseif strcmpi(type,'rerun version 1')
    typeA = 'metpparchivev1';
elseif strcmpi(type,'Operational')
    typeA = 'metpparchive';
else
    error('type unknown');
end
%% Definition of the grid
[lon,lat] = ndgrid(targetLon(1):resolution:targetLon(end),targetLat(1):resolution:targetLat(end));
%% Check month and day number + transform date into string
if targetMonth<10
    myMonth = ['0',num2str(targetMonth)];
else
    myMonth = num2str(targetMonth);
end
if targetDay<10
    myDay = ['0',num2str(targetDay)];
else
    myDay = num2str(targetDay);
end
if targetHour<10
    myHour = ['0',num2str(targetHour)];
else
    myHour = num2str(targetHour);
end
myYear = num2str(targetYear);
%% Preallocation and initalisation
data = struct('time',[],'LAF',[],'U',[],'DD',[],'RH',[],'PA',[],'I',[],...
    'P',[],'T',[],'CAF',[]);
urldat= ['https://thredds.met.no/thredds/dodsC/',typeA,'/',myYear,'/',myMonth,'/',myDay,'/met_analysis_1_0km_nordic_',myYear,myMonth,myDay,'T',myHour,'Z.nc'];
time0 = ncread(urldat,'time')./86400+datenum('1970-01-01 00:00:00');
data.time = datetime(datestr(double(time0)));
lon00 = ncread(urldat,'longitude');
lat00 = ncread(urldat,'latitude');
dummyLat = lat00(:);
dummyLon = lon00(:);
ind = find(dummyLat>=min(targetLat(:)-0.1) & dummyLat <= max(targetLat(:)+0.1) & dummyLon>=min(targetLon(:)-0.1) & dummyLon <= max(targetLon(:)+0.1));
%% Read the data in a for loop for each selected output
%  Data are resampled spatially as gridded data
Nout = numel(output);
for ii=1:Nout
    myVar0 = ncread(urldat,output{ii});
    dummyVar = double(myVar0(:));
    
    
    if strcmpi(output{ii},'wind_direction_10m')
        
        meanU = ncread(urldat,'wind_speed_10m');
        un = double(meanU(:)).*cosd(dummyVar);
        ue = double(meanU(:)).*sind(dummyVar);
        
        F_ue = scatteredInterpolant(dummyLat(ind),dummyLon(ind),un(ind),'linear','none');
        F_un = scatteredInterpolant(dummyLat(ind),dummyLon(ind),ue(ind),'linear','none');
        
        newUe = F_ue(lat,lon);
        newUn = F_un(lat,lon);
        
        data.DD = atan2(newUn,newUe).*180/pi;
        
    else
        F_Var = scatteredInterpolant(dummyLat(ind),dummyLon(ind),dummyVar(ind),'linear','none');
    end
    
    if strcmpi(output{ii},'land_area_fraction')
        data.LAF = F_Var(lat,lon);
    elseif strcmpi(output{ii},'wind_speed_10m')
        data.U = F_Var(lat,lon);
    elseif strcmpi(output{ii},'relative_humidity_2m')
        data.RH = F_Var(lat,lon);
    elseif strcmpi(output{ii},'precipitation_amount')
        data.PA  = F_Var(lat,lon);
    elseif strcmpi(output{ii},'integral_of_surface_downwelling_shortwave_flux_in_air_wrt_time')
        data.I  = F_Var(lat,lon);
    elseif strcmpi(output{ii},'air_pressure_at_sea_level')
        data.P  = F_Var(lat,lon);
    elseif strcmpi(output{ii},'air_temperature_2m') 

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1] MetCoOp

[2] https://thredds.met.no

🌈4 Matlab代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值