📄 user_predict_tide.m
字号:
function user_predict_tide(UserPath)
%生成mike所需dfs1或dfs0
[StationNum,TideConst_All,OutputFileName,LatLon]=ReadData(UserPath);
Fid_Output=fopen(OutputFileName,'w');
DataType=2;
TempVar1=inputdlg({'开始年份','开始月份','开始日期','开始时间(小时)','时间间隔(小时)','预报总时间步长','平均海平面'},'时间设置',1,{num2str(year(now)),num2str(month(now)),num2str(day(now)),num2str(hour(now)),'1','24','0'});
TempVar2=str2num(char(TempVar1));
TempVar2=TempVar2';
StartTime=TempVar2(1:4);
TimeStep=TempVar2(5);
TotalNum=TempVar2(6);
DataAverage=TempVar2(7);
H_Wait=waitbar(0,'计算中,请稍候。。。。。。');
for c1=1:StationNum
TempTideConst=TideConst_All{c1}.Data;
TempResult=TidePredict_Main(DataType,StartTime,TimeStep,TotalNum,TempTideConst,DataAverage);
Result(:,c1)=TempResult(:,2);
if c1==1
AllTime=TempResult(:,1);
end
waitbar(c1./StationNum,H_Wait);
end
%%
StartTime=datenum([StartTime 0 0]);
%%
if StationNum>1
%%
fprintf(Fid_Output,'Title %s\n',OutputFileName);
fprintf(Fid_Output,'Time %s %s %.0f %.6f\n',datestr(StartTime,29),datestr(StartTime,13),TotalNum,TimeStep.*60.*60);
fprintf(Fid_Output,'NoGridPoints %.0f\n',StationNum);
fprintf(Fid_Output,'Spacing 2475.74\n');
fprintf(Fid_Output,'NoDynamicItems 1\n');
fprintf(Fid_Output,'Item Predicted Water Level meter\n');
fprintf(Fid_Output,'Delete -1E-030\n\n');
for c1=1:TotalNum
fprintf(Fid_Output,'tstep %.0f\n',c1);
for c2=1:StationNum
fprintf(Fid_Output,'%.5f \n',Result(c1,c2));
end
fprintf(Fid_Output,'\n');
end
else
fprintf(Fid_Output,'Station:%.6f,%.6f\n',LatLon(1),LatLon(2));
fprintf(Fid_Output,'Time Water Level\n');
fprintf(Fid_Output,'Unit 100000 1000 0\n');
for c1=1:TotalNum
for c2=1:StationNum
fprintf(Fid_Output,'%s %.5f\n',datestr(AllTime(c1),31),Result(c1,c2));
end
end
end
%%
close(H_Wait);
fclose(Fid_Output);
%%
function [StationNum,TideConst_All,OutputFileName,LatLon]=ReadData(UserPath)
[FileName,InputPath]=uigetfile(strcat(UserPath,'*.dat'),'r');
InputFileName=strcat(InputPath,FileName);
OutputFileName=strcat(InputPath,'ForMikeZero_',FileName(1:length(FileName)-3),'txt');
AllConst=load(InputFileName,'-ascii');
[StationNum,N]=size(AllConst);
if N~=22
error('调和常数数据列数不等于22,数据缺失!');
end
%O1、K1、M2、S2、M4、MS4、P1、Q1、N2、K2十个分潮
LatLon=min(AllConst(:,1:2));
for c1=1:StationNum
H_Const=AllConst(c1,3:2:N);
g_Const=AllConst(c1,4:2:N);
TideConst_All{c1}.Data=[H_Const',g_Const'];
TideConst_All{c1}.Lat=AllConst(c1,1);
TideConst_All{c1}.Lon=AllConst(c1,2);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -