Coastlines/DUNEX_2022_Process.m

312 lines
12 KiB
Matlab

%% Read and process results from long term DUNEX Run
addpath(genpath('matlab/applications/delft3d_matlab'),'-begin')
addpath(genpath('D:/DUNEX_RT/Operation/Hindcast'),'-begin')
%% Model Results 9
%trihPath = 'D:\DUNEX_RT\Operation\Hindcast\Setup\trih-dunx22.dat';
trihPath = 'D:\Alexander\Setup8_NoWaves\trih-dunx22.dat';
% trihPath = 'D:\Alexander\Setup8_NoWind_NoWaves\trih-dunx22.dat';
% trihPath = '\\tsclient\F\DUNEX_RT\trih-dunx22.dat';
runSteps = 1:8785;
% Read in model data
modelHistNamesB = qpread(qpfopen(trihPath),1,'water level','stations');
modelHistWLB = qpread(qpfopen(trihPath),1,'water level','griddata',runSteps,[98:129 6 7 8 9]);
modelHistVelB = qpread(qpfopen(trihPath),1,'depth averaged velocity','griddata',runSteps,[98:129 6 7 8 9]);
modelHistWaveHeightB = qpread(qpfopen(trihPath),1,'significant wave height','griddata',runSteps,[98:129 6 7 8 9]);
modelHistWavePerB = qpread(qpfopen(trihPath),1,'peak wave period','griddata',runSteps,[98:129 6 7 8 9]);
modelHistWaveDirB = qpread(qpfopen(trihPath),1,'wave direction','griddata',runSteps,[98:129 6 7 8 9]);
modelHistWindSpeedB = qpread(qpfopen(trihPath),1,'wind speed','griddata',runSteps,[98:129 6 7 8 9]);
modelHistWindDirB = qpread(qpfopen(trihPath),1,'wind direction','griddata',runSteps,[98:129 6 7 8 9]);
%% Model Results
trihPath = 'D:\Alexander\Setup8\trih-dunx22.def';
% trihPath = 'D:\Alexander\Setup8_NoWind_NoWaves\trih-dunx22.dat';
% trihPath = 'D:\Alexander\Setup8_NoWind\trih-dunx22.dat';
runSteps = 1:8785;
% Read in model data
modelHistNames = qpread(qpfopen(trihPath),1,'water level','stations');
modelHistWL = qpread(qpfopen(trihPath),1,'water level','griddata',runSteps,[98:129 6 7 8 9]);
modelHistVel = qpread(qpfopen(trihPath),1,'depth averaged velocity','griddata',runSteps,[98:129 6 7 8 9]);
modelHistWaveHeight = qpread(qpfopen(trihPath),1,'significant wave height','griddata',runSteps,[98:129 6 7 8 9]);
modelHistWavePer = qpread(qpfopen(trihPath),1,'peak wave period','griddata',runSteps,[98:129 6 7 8 9]);
modelHistWaveDir = qpread(qpfopen(trihPath),1,'wave direction','griddata',runSteps,[98:129 6 7 8 9]);
modelHistWindSpeed = qpread(qpfopen(trihPath),1,'wind speed','griddata',runSteps,[98:129 6 7 8 9]);
modelHistWindDir = qpread(qpfopen(trihPath),1,'wind direction','griddata',runSteps,[98:129 6 7 8 9]);
%% WL QA/AC
axisLimits=[datetime(2020,07,20) datetime(2020,10,01,00,00,00)];
dateStart = axisLimits(1);
dateEnd = axisLimits(2);
delfTime = axisLimits(1):minutes(10):axisLimits(2);
%% Read in WL
stations{6} = 8651370; %Dck
stations{7} = 8652587; %Oregon Inlet
stations{8} = 8654467; %Hatteras
stations{9} = 8656483; %Beau
for Stat=[6 7 8 9]
for Month = 1:3
if Month==1
dateStartM=dateStart +((Month-1).*days(31));
dateEndM=dateStart +((Month).*days(31));
else
dateStartM=dateEndM + days(1);
dateEndM=dateStart +((Month).*days(31));
end
url = ['https://tidesandcurrents.noaa.gov/api/datagetter?product=water_level&application=NOS.COOPS.TAC.WL&'...
'begin_date=' datestr(dateStartM,'yyyymmdd') '&end_date=' datestr(dateEndM,'yyyymmdd') '&datum=NAVD' '&station=' num2str(stations{Stat})...
'&time_zone=GMT&units=metric&format=csv'];
wlIN = webread(url);
if Month==1
measuredWL_D = datenum(wlIN.DateTime);
measuredWL_W = wlIN.WaterLevel;
else
measuredWL_D = vertcat(measuredWL_D,datenum(wlIN.DateTime));
measuredWL_W = vertcat(measuredWL_W,wlIN.WaterLevel);
end
clear windIN wlIN
end
switch Stat
case 6
tideOutN = interp1(measuredWL_D,...
measuredWL_W,...
datenum(axisLimits(1):minutes(10):axisLimits(2)));
case 7
tideOutOI = interp1(measuredWL_D,...
measuredWL_W,...
datenum(axisLimits(1):minutes(10):axisLimits(2)));
case 8
tideOutHat = interp1(measuredWL_D,...
measuredWL_W,...
datenum(axisLimits(1):minutes(10):axisLimits(2)));
case 9
tideOutS = interp1(measuredWL_D,...
measuredWL_W,...
datenum(axisLimits(1):minutes(10):axisLimits(2)));
end
end
%% Read in merged WL
MergedWL_Table = readtable('D:\Alexander\MATLAB\DunexBounds\Dunex_RT_WL.csv');
MergedHs_Table = readtable('D:\Alexander\MATLAB\DunexBounds\Dunex_RT_SigWave.csv');
MergedDir_Table = readtable('D:\Alexander\MATLAB\DunexBounds\Dunex_RT_Dir.csv');
MergedPer_Table = readtable('D:\Alexander\MATLAB\DunexBounds\Dunex_RT_Period.csv');
MergedVelX_Table = readtable('D:\Alexander\MATLAB\DunexBounds\Dunex_RT_VelX.csv');
MergedVelY_Table = readtable('D:\Alexander\MATLAB\DunexBounds\Dunex_RT_VelY.csv');
MergedWindD_Table = readtable('D:\Alexander\MATLAB\DunexBounds\Dunex_RT_WindDir.csv');
MergedWindS_Table = readtable('D:\Alexander\MATLAB\DunexBounds\Dunex_RT_WindSpeed.csv');
%% Hs QA/QC
% Read in NDBC
StatCount=1;
for Station = [44095]
buoyIn{StatCount} = readtable(...
['D:\DUNEX_RT\Operation\Hindcast\Buoy\'...
num2str(Station) 'h2020.txt']);
buoyOut{StatCount} = struct;
buoyOut{StatCount}.WVHT = buoyIn{StatCount}.WVHT;
buoyOut{StatCount}.DateTime = datetime(buoyIn{StatCount}.x_YY,...
buoyIn{StatCount}.MM,buoyIn{StatCount}.DD,buoyIn{StatCount}.hh,...
buoyIn{StatCount}.mm,0);
buoyOut{StatCount}.DateTime(buoyOut{StatCount}.WVHT==99) = [];
buoyOut{StatCount}.WVHT(buoyOut{StatCount}.WVHT==99) = [];
StatCount=StatCount+1;
end
%% Create FrankenTimeline
Dunex_RT_WL = MergedWL_Table;
Dunex_RT_SigWave = MergedHs_Table;
Dunex_RT_Dir = MergedDir_Table;
Dunex_RT_Period = MergedPer_Table;
Dunex_RT_VelX = MergedVelX_Table;
Dunex_RT_VelY = MergedVelY_Table;
Dunex_RT_WindDir = MergedWindD_Table;
Dunex_RT_WindSpeed = MergedWindS_Table;
for i = 1:32
modelWL_Inter(:, i) = interp1(modelHistWL.Time,...
modelHistWL.Val(:,i), datenum(MergedWL_Table.DateTime));
modelHs_Inter(:, i) = interp1(modelHistWaveHeight.Time,...
modelHistWaveHeight.Val(:,i), datenum(MergedHs_Table.DateTime));
modelDir_Inter(:, i) = interp1(modelHistWaveDir.Time,...
modelHistWaveDir.Val(:,i), datenum(MergedDir_Table.DateTime));
modelPer_Inter(:, i) = interp1(modelHistWavePer.Time,...
modelHistWavePer.Val(:,i), datenum(MergedPer_Table.DateTime));
modelVelX_Inter(:, i) = interp1(modelHistVel.Time,...
modelHistVel.XComp(:,i), datenum(MergedVelX_Table.DateTime));
modelVelY_Inter(:, i) = interp1(modelHistVel.Time,...
modelHistVel.YComp(:,i), datenum(MergedVelY_Table.DateTime));
modelWindD_Inter(:, i) = interp1(modelHistWindDir.Time,...
modelHistWindDir.Val(:,i), datenum(MergedWindD_Table.DateTime));
modelWindS_Inter(:, i) = interp1(modelHistWindSpeed.Time,...
modelHistWindSpeed.Val(:,i), datenum(MergedWindS_Table.DateTime));
Dunex_RT_WL{isnan(Dunex_RT_WL{:,i}), i} =...
modelWL_Inter(isnan(Dunex_RT_WL{:,i}), i);
Dunex_RT_SigWave{isnan(Dunex_RT_SigWave{:,i}), i} =...
modelHs_Inter(isnan(Dunex_RT_SigWave{:,i}), i);
Dunex_RT_Dir{isnan(Dunex_RT_Dir{:,i}), i} =...
modelDir_Inter(isnan(Dunex_RT_Dir{:,i}), i);
Dunex_RT_Period{isnan(Dunex_RT_Period{:,i}), i} =...
modelPer_Inter(isnan(Dunex_RT_Period{:,i}), i);
Dunex_RT_VelX{isnan(Dunex_RT_VelX{:,i}), i} =...
modelVelX_Inter(isnan(Dunex_RT_VelX{:,i}), i);
Dunex_RT_VelY{isnan(Dunex_RT_VelY{:,i}), i} =...
modelVelY_Inter(isnan(Dunex_RT_VelY{:,i}), i);
Dunex_RT_WindDir{isnan(Dunex_RT_WindDir{:,i}), i} =...
modelWindD_Inter(isnan(Dunex_RT_WindDir{:,i}), i);
Dunex_RT_WindSpeed{isnan(Dunex_RT_WindSpeed{:,i}), i} =...
modelWindS_Inter(isnan(Dunex_RT_WindSpeed{:,i}), i);
end
%% Plot WL Hat
wlValF = figure
subplot(2,1,1)
title('Hatteras Coast Guard')
hold on
plot(modelHistWL.Time, modelHistWL.Val(:,35),'-r')
% plot(modelHistWLB.Time, modelHistWLB.Val(:,35),'-b')
plot(datenum(axisLimits(1):minutes(10):axisLimits(2)), tideOutHat, '-k')
% plot(datenum(MergedWL_Table.DateTime),MergedWL_Table.x106_DUNEX_9,'-b')
% plot(datenum(Dunex_RT_WL.DateTime),Dunex_RT_WL.x106_DUNEX_9,'-m')
legend('Large-scale Model','Observations','Orientation','horizontal','Location','south')
ylabel('Water Level [m]')
ax=gca;
ax.XLim = datenum([datetime(2020,08,01,00,00,00) datetime(2020,10,01,00,00,00)]);
ax.YLim = [-0.5 0.75];
datetick('x','keeplimits')
% figure
subplot(2,1,2)
title('Oregon Inlet Marina')
hold on
plot(modelHistWL.Time, modelHistWL.Val(:,34),'-r')
% plot(modelHistWLB.Time, modelHistWLB.Val(:,34),'-b')
% plot(datenum(axisLimits(1):minutes(10):axisLimits(2)), tideOutS, '-k')
plot(datenum(axisLimits(1):minutes(10):axisLimits(2)), tideOutOI, '-k')
% plot(datenum(MergedWL_Table.DateTime),MergedWL_Table.x106_DUNEX_9,'-b')
% plot(datenum(Dunex_RT_WL.DateTime),Dunex_RT_WL.x106_DUNEX_9,'-m')
legend('Large-scale Model','Observations','Orientation','horizontal','Location','south')
ylabel('Water Level [m]')
ax=gca;
ax.XLim = datenum([datetime(2020,08,01,00,00,00) datetime(2020,10,01,00,00,00)]);
ax.YLim = [-0.5 1];
datetick('x','keeplimits')
wlValF.Units='inches';
wlValF.PaperOrientation='portrait';
wlValF.Position=[0 0 8 4];
exportgraphics(wlValF, 'D:\Alexander\LargeScaleWL_Val.png', 'Resolution', 300)
%% Plot Hs
figure
hold on
plot(modelHistWaveHeight.Time, modelHistWaveHeight.Val(:,34),'-r')
% plot(datenum(axisLimits(1):minutes(10):axisLimits(2)), tideOutS, '-k')
plot(datenum(buoyOut{3}.DateTime), buoyOut{3}.WVHT, '-k')
% plot(datenum(MergedHs_Table.DateTime),MergedHs_Table.x129_DUNEX_32,'-b')
plot(datenum(MergedHs_Table.DateTime),MergedHs_Table.x106_DUNEX_3,'-b')
plot(datenum(Dunex_RT_SigWave.DateTime),Dunex_RT_SigWave.x106_DUNEX_3,'-m')
datetick('x','keeplimits')
%% Save
writetable(Dunex_RT_WL, 'D:\Alexander\MATLAB\DunexBoundsB\Dunex_RT_WL_RevB.csv')
writetable(Dunex_RT_SigWave, 'D:\Alexander\MATLAB\DunexBoundsB\Dunex_RT_SigWave_RevB.csv')
writetable(Dunex_RT_Dir, 'D:\Alexander\MATLAB\DunexBoundsB\Dunex_RT_Dir_RevB.csv')
writetable(Dunex_RT_Period, 'D:\Alexander\MATLAB\DunexBoundsB\Dunex_RT_Period_RevB.csv')
writetable(Dunex_RT_VelX, 'D:\Alexander\MATLAB\DunexBoundsB\Dunex_RT_VelX_RevB.csv')
writetable(Dunex_RT_VelY, 'D:\Alexander\MATLAB\DunexBoundsB\Dunex_RT_VelY_RevB.csv')
writetable(Dunex_RT_WindDir, 'D:\Alexander\MATLAB\DunexBoundsB\Dunex_RT_WindDir_RevB.csv')
writetable(Dunex_RT_WindSpeed, 'D:\Alexander\MATLAB\DunexBoundsB\Dunex_RT_WindSpeed_RevB.csv')
%% Save Raw Model
varNames = {'WL', 'SigWave', 'Dir', 'Period', 'VelX', 'VelY', 'WindDir', 'WindSpeed'};
for v = 1:8%[1 5 6 7 8]
clear table_Raw
switch v
case 1
table_Raw = array2table(modelHistWL.Val);
case 2
table_Raw = array2table(modelHistWaveHeight.Val);
case 3
table_Raw = array2table(modelHistWaveDir.Val);
case 4
table_Raw = array2table(modelHistWavePer.Val);
case 5
table_Raw = array2table(modelHistVel.XComp);
case 6
table_Raw = array2table(modelHistVel.YComp);
case 7
table_Raw = array2table(modelHistWindSpeed.Val);
case 8
table_Raw = array2table(modelHistWindDir.Val);
end
table_Raw.Properties.VariableNames = modelHistNames([98:129 6 7 8 9]);
table_Raw.DateTime = datetime(datevec(modelHistWL.Time));
writetable(table_Raw, ['D:\Alexander\MATLAB\DUNEX_NoWind\Dunex_RT_NoWind'...
varNames{v} '.csv'])
end