You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

169 lines
5.7 KiB
Matlab

7 years ago
% Written by Joshua Simmons 11/02/2015 and updated on 11/01/2016
% to convert from fielddata storage struct to SBEACH compatible format.
clear
clc
%% Settings
%all the initial files location
%specify folder with Mitch's bathymetry and field data setup for xbeach.
setupoutputpath = 'D:\7 Erosion Models\a_nb_model_comparison\sbeach\model_setup\setup_folders\';
setupbasepath = 'D:\7 Erosion Models\a_nb_model_comparison\sbeach\model_setup\';
basebatchrunpath = 'D:\7 Erosion Models\a_nb_model_comparison\sbeach\model_results\src\';
% meta
site = 'deewhy';
% stormid = '2007';
% stormid = '2011';
% stormid = '2014';
stormid = '2015';
%profile info - CHECK
pfno = 5;
% model parameters
%parameter vals - leave as '' if params to be generated
paramload = 'D:\7 Erosion Models\a_nb_model_comparison\sbeach\params\bigparams_K_EPS_BMAX.mat';
% paramload = '';
%or specify stats
paramsname = {'K','EPS','BMAX'}; %K divided by 3600 below to bring into seconds, Cs for R2;
% paramsrange = {[0.5e-6 2.5e-6],[0.001 0.003],[15 30]}; % give range as [min max] then fed into rand()
paramsrange = {[1.75e-6 1.75e-6],[0.002 0.002],[28.5 28.5]}; % give range as [min max] then fed into rand()
nruns = 10000; %number of parameter conmbinations
nrunst = 1;
nrunend = 10000;
%% Code - format the data
%generate param combos
if isempty(paramload)
for aa = 1:length(paramsname)
tmpmin = paramsrange{aa}(1);
tmpmax = paramsrange{aa}(2);
params(:,aa) = (tmpmax-tmpmin).*rand(nruns,1) + tmpmin;
end
bigparams.name = paramsname;
bigparams.value = params;
else
bigparams = load(paramload);
fnsparams = fieldnames(bigparams);
bigparams = bigparams.(fnsparams{1,1});
params = bigparams.value;
if sum(strcmp(bigparams.name,paramsname)) ~= length(paramsname)
error('Parameter names in loaded file do not match those specified')
end
end
%load pf info
profileinfo = load([setupbasepath 'setup_info\profileinfo_' site '.mat']);
fns2 = fieldnames(profileinfo);
profileinfo = profileinfo.(fns2{1});
%load cfg info
cfginfo = load([setupbasepath 'setup_info\cfginfo_' site '_' stormid '_PF' num2str(pfno) '.mat']);
fns3 = fieldnames(cfginfo);
cfginfo = cfginfo.(fns3{1});
%get the names of the files copying across
dns1 = dir([setupoutputpath 'sb_' site '_' stormid '_PF' num2str(pfno) '\']);
dns1dirs = {dns1.name}; % Get a list of the subdirectories
dns1ind2 = ~ismember(dns1dirs,{'.','..'}); % Find index of subdirectories
dns1 = dns1(dns1ind2);
allfilelocs = cell(nruns,1);
% not done VVVV
%do the modelling
for ii = nrunst:nrunend
CFGname = ['PF' num2str(pfno) '_Run_' num2str(ii) '.CFG'];
tmpprintdir = [basebatchrunpath site '_' stormid '_PF' num2str(pfno) '\PF' num2str(pfno) '_Run_' num2str(ii) '\'];
if ~exist(tmpprintdir,'dir')
mkdir(tmpprintdir)
end
%now copy the setup files across
copyfile([setupoutputpath 'sb_' site '_' stormid '_PF' num2str(pfno) '\*'],tmpprintdir);
% now change the contents of CFG file
fin = fopen([setupbasepath 'base.CFG']) ;
fout = fopen([tmpprintdir 'temp.CFG'], 'w');
tline = fgetl(fin);
while ischar(tline)
%replace:
%filename
if (~isempty(strfind(tline, '%RPLCNAME%')))
tline = strrep(tline, '%RPLCNAME%', ['_Run_' num2str(ii)]);
end
%profile ID
if (~isempty(strfind(tline, '%RPLCPFID%')))
tline = strrep(tline, '%RPLCPFID%', ['PF' num2str(pfno)]);
end
%run number
if (~isempty(strfind(tline, '%RPLCRNUM%')))
tline = strrep(tline, '%RPLCRNUM%', num2str(ii));
end
%calculation cells
%number
if (~isempty(strfind(tline, '%RPLCNDX%')))
tline = strrep(tline, '%RPLCNDX%', num2str(cfginfo.NDX));
end
%landward boundary
if (~isempty(strfind(tline, '%RPLCXSTART%')))
tline = strrep(tline, '%RPLCXSTART%', num2str(cfginfo.XSTART));
end
%spacing between
if (~isempty(strfind(tline, '%RPLCDXC%')))
tline = strrep(tline, '%RPLCDXC%', num2str(cfginfo.DXC));
end
%calculation time
%number
if (~isempty(strfind(tline, '%RPLCNDT%')))
tline = strrep(tline, '%RPLCNDT%', num2str(cfginfo.NDT));
end
%steps
if (~isempty(strfind(tline, '%RPLCDT%')))
tline = strrep(tline, '%RPLCDT%', num2str(cfginfo.DT));
end
%steps
if (~isempty(strfind(tline, '%RPLCD50%')))
tline = strrep(tline, '%RPLCD50%', num2str(profileinfo.data(pfno).d50*1000));
end
%check for params
for aa = 1:length(paramsname)
if (~isempty(strfind(tline, ['%RPLC' paramsname{aa} '%'])))
tline = strrep(tline, ['%RPLC' paramsname{aa} '%'], num2str(params(ii,aa)));
end
end
%now print the final string
fprintf(fout,'%s\r\n',tline);
tline = fgetl(fin);
end
fclose(fin);
fclose(fout);
%rename CFG to original name
try
movefile([tmpprintdir 'temp.CFG'],[tmpprintdir CFGname])
catch
fileattrib([tmpprintdir 'temp.CFG'],'+w')
movefile([tmpprintdir 'temp.CFG'],[tmpprintdir CFGname])
end
%change file name
for jj = 1:length(dns1)
movefile([tmpprintdir dns1(jj).name],[tmpprintdir 'PF' num2str(pfno) '_Run_' num2str(ii) dns1(jj).name(end-3:end)])
end
%save location of file
allfilelocs{ii,1} = ['PF' num2str(pfno) '_Run_' num2str(ii) '\PF' num2str(pfno) '_Run_' num2str(ii)];
end
%write allfilelocs to .txt
fid = fopen([basebatchrunpath site '_' stormid '_PF' num2str(pfno) '\SBEACHrun_loc.txt'],'w');
for kk = 1:length(allfilelocs)
fprintf(fid,'%s\r\n',allfilelocs{kk});
end
fclose(fid);