Coastlines/d3d_input_uvpFieldsCL_FUN.m

143 lines
5.9 KiB
Matlab

%PROGRAM d3d_input
%R.P. Mulligan
%this script writes the spatially varying wind and pressure fields for Delft3D....
%3 files are created, 1 for each of u, v and p.
%below the example is for H. Ernesto ...
function [] = d3d_input_uvpFieldsCL_FUN(StartDateIN,m,n,P,u,v,prep,tStep,fName,Times)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
%user define the txt string for the start date and time:
StartDate = [datestr(StartDateIN,'yyyy-mm-dd HH:MM:SS') ' +00:00'];
%1. input grid parameters-----------------
%these values are produced by "latlon_grid.m", run it first
% m = %number of points in x-dir
% n = %number of points in y-dir
% dx = %dlon in deg
% dy = %dlat in deg
% gridloncentre = round(min(min(gridlon)),0)%deg
% gridlatcentre = round(min(min(gridlat)),0)%deg
%and arrays for u, v, P, prep that are (time, lon, lat)
%and time index is ttt
%write to d3d inputt grid...--------------------------
clear line1 line2 line3;
d3dfile1 = [fName '.amp']; %output file names.
d3dfile2 = [fName '.amu'];
d3dfile3 = [fName '.amv'];
d3dfile4 = [fName '.ampr'];
curline1 = 1;
line1{curline1,:} = ['FileVersion = 1.03'];curline1 = curline1 + 1;
line1{curline1,:} = ['filetype = meteo_on_curvilinear_grid'] ;curline1 = curline1 + 1;
line1{curline1,:} = ['NODATA_value = -999.000'] ;curline1 = curline1 + 1;
line1{curline1,:} = ['grid_file = Cone7LRW.grd'] ;curline1 = curline1 + 1;
line1{curline1,:} = ['first_data_value = grid_llcorner'] ;curline1 = curline1 + 1;
line1{curline1,:} = ['data_row = grid_row'] ;curline1 = curline1 + 1;
line1{curline1,:} = ['n_quantity = 1'] ;curline1 = curline1 + 1;
line1{curline1,:} = ['quantity1 = air_pressure'] ;curline1 = curline1 + 1;
line1{curline1,:} = ['unit1 = Pa'] ;curline1 = curline1 + 1;
for ttt = 1:Times
line1{curline1,:} = ['TIME = ',num2str((ttt-1).*tStep),'.0 hours since ',StartDate] ;curline1 = curline1 + 1;
Psqueeze = squeeze(P(ttt,:,:)); % array is therefore (time, lon, lat)
for jj = 1:m
line1{curline1,:} = [num2str(Psqueeze(jj,1:end),'% 11.1f')];curline1 = curline1 + 1;
end
end%
curline2 = 1;
line2{curline2,:} = ['FileVersion = 1.03'];curline2 = curline2 + 1;
line2{curline2,:} = ['filetype = meteo_on_curvilinear_grid'] ;curline2 = curline2 + 1;
line2{curline2,:} = ['NODATA_value = -999.000'] ;curline2 = curline2 + 1;
line2{curline2,:} = ['grid_file = Cone7LRW.grd'] ;curline2 = curline2 + 1;
line2{curline2,:} = ['first_data_value = grid_llcorner'] ;curline2 = curline2 + 1;
line2{curline2,:} = ['data_row = grid_row'] ;curline2 = curline2 + 1;
line2{curline2,:} = ['n_quantity = 1'] ;curline2 = curline2 + 1;
line2{curline2,:} = ['quantity1 = x_wind'] ;curline2 = curline2 + 1;
line2{curline2,:} = ['unit1 = m s-1'] ;curline2 = curline2 + 1;
for ttt = 1:Times
line2{curline2,:} = ['TIME = ',num2str((ttt-1).*tStep),'.0 hours since ',StartDate] ;curline2 = curline2 + 1;
usqueeze = squeeze(u(ttt,:,:));
for jj = 1:m
line2{curline2,:} = [num2str(usqueeze(jj,1:end),'% 11.3f')];curline2 = curline2 + 1;
end
end
curline3 = 1;
line3{curline3,:} = ['FileVersion = 1.03'];curline3 = curline3 + 1;
line3{curline3,:} = ['filetype = meteo_on_curvilinear_grid'] ;curline3 = curline3 + 1;
line3{curline3,:} = ['NODATA_value = -999.000'] ;curline3 = curline3 + 1;
line3{curline3,:} = ['grid_file = Cone7LRW.grd'] ;curline3 = curline3 + 1;
line3{curline3,:} = ['first_data_value = grid_llcorner'] ;curline3 = curline3 + 1;
line3{curline3,:} = ['data_row = grid_row'] ;curline3 = curline3 + 1;
line3{curline3,:} = ['n_quantity = 1'] ;curline3 = curline3 + 1;
line3{curline3,:} = ['quantity1 = y_wind'] ;curline3 = curline3 + 1;
line3{curline3,:} = ['unit1 = m s-1'] ;curline3 = curline3 + 1;
for ttt = 1:Times
line3{curline3,:} = ['TIME = ',num2str((ttt-1).*tStep),'.0 hours since ',StartDate] ;curline3 = curline3 + 1;
vsqueeze = squeeze(v(ttt,:,:));
for jj = 1:m
line3{curline3,:} = [num2str(vsqueeze(jj,1:end),'% 11.3f')];curline3 = curline3 + 1;
end
end
curline4 = 1;
line4{curline4,:} = ['FileVersion = 1.03'];curline4 = curline4 + 1;
line4{curline4,:} = ['filetype = meteo_on_curvilinear_grid'] ;curline4 = curline4 + 1;
line4{curline4,:} = ['NODATA_value = -999.000'] ;curline4 = curline4 + 1;
line4{curline4,:} = ['grid_file = Cone7LRW.grd'] ;curline4 = curline4 + 1;
line4{curline4,:} = ['first_data_value = grid_llcorner'] ;curline4 = curline4 + 1;
line4{curline4,:} = ['data_row = grid_row'] ;curline4 = curline4 + 1;
line4{curline4,:} = ['n_quantity = 1'] ;curline4 = curline4 + 1;
line4{curline4,:} = ['quantity1 = precipitation'] ;curline4 = curline4 + 1;
line4{curline4,:} = ['unit1 = mm/h'] ;curline4 = curline4 + 1;
for ttt = 1:Times
line4{curline4,:} = ['TIME = ',num2str((ttt-1).*tStep),'.0 hours since ',StartDate] ;curline4 = curline4 + 1;
prepsqueeze = squeeze(prep(ttt,:,:));
for jj = 1:m
line4{curline4,:} = [num2str(prepsqueeze(jj,1:end),'% 11.4f')];curline4 = curline4 + 1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%write text files, 1 for each met data
fid = fopen(d3dfile1,'wt'); %should overwrite if file already exists
for ii = 1:(curline1-1)
len = size(line1{ii,:},2);
countP = fprintf(fid,['%' num2str(len) 's\n'],line1{ii,:});
end
fclose(fid);
fid = fopen(d3dfile2,'wt'); %should overwrite if file already exists
for ii = 1:(curline2-1)
len = size(line2{ii,:},2);
countu = fprintf(fid,['%' num2str(len) 's\n'],line2{ii,:});
end
fclose(fid);
fid = fopen(d3dfile3,'wt'); %should overwrite if file already exists
for ii = 1:(curline3-1)
len = size(line3{ii,:},2);
countv = fprintf(fid,['%' num2str(len) 's\n'],line3{ii,:});
end
fclose(fid);
fid = fopen(d3dfile4,'wt'); %should overwrite if file already exists
for ii = 1:(curline4-1)
len = size(line4{ii,:},2);
countv = fprintf(fid,['%' num2str(len) 's\n'],line4{ii,:});
end
fclose(fid);
fclose all
end