说明:下载的单个文件为ERA-Interim风场,每个文件储存一年风场数据(也可以用python脚本直接下载多年的数据,但是数据量太大,以后用起来不方便)。因WaveWatch3 输入风场要求为十进制文件,需要进行合并并转化。
注意:Matlab运行速度比较慢
clear;
clc;
start_lon=0.0;
end_lon=30.0;
start_lat=-10.0;
end_lat=30.0;
in_path='D:\Data\'; % 待合并风场路径
out_path='D:\Data\\era_small16-18.dat'; % 输出文件路径
out_file=fopen(out_path,'a');
dir=['M01';'M02';'M03';'M04';'M05';'M06';'M07';'M08';'M09';'M10';'M11';'M12'];
num = 1;
for year=2013:2017
file_name=['era_',num2str(year),'.nc'];
full_path=[in_path,file_name];
longitude=ncread(full_path,'longitude');
latitude=ncread(full_path,'latitude');
time=ncread(full_path,'time');
lon_range=find(longitude>=start_lon & longitude<=end_lon);
lat_range=find(latitude>=start_lat & latitude<=end_lat);
time_num=length(time);
lon_num=length(lon_range);
lat_num=length(lat_range);
uwnd=ncread(full_path,'u10');
vwnd=ncread(full_path,'v10');
for month=1:12
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
all_date=31;
elseif(month==2)
if((mod(year,4)== 0 && mod(year,100)~= 0) || mod(year,400)== 0)
all_date=29;
else
all_date=28;
end
else
all_date=30;
end
for date=1:all_date
year_day=num2str(10000*year+100*month+date);
disp(year_day);
hour_sec=['000000';'060000';'120000';'180000'];
for i=1:4
year_sec=[year_day,' ',hour_sec(i,:)];
fprintf(out_file,'%s\n',year_sec);
for lat=1:lat_num
for lon=1:lon_num
fprintf(out_file,'%10.3f',uwnd(lon,lat,num));
end
fprintf(out_file,'\n');
end
for lat=1:lat_num
for lon=1:lon_num
fprintf(out_file,'%10.3f',vwnd(lon,lat,num));
end
fprintf(out_file,'\n');
end
num = num + 1;
end
end
end
end
fclose(out_file);