function varargout = desb_run_durosplus(varargin)
%DESB_RUN_DUROSPLUS  One line description goes here.
%
%   More detailed description goes here.
%
%   Syntax:
%   varargout = desb_run_durosplus(varargin)
%
%   Input:
%   varargin  =
%
%   Output:
%   varargout =
%
%   Example
%   desb_run_durosplus
%
%   See also 

%% Copyright notice
%   --------------------------------------------------------------------
%   Copyright (C) 2011 Delft University of Technology
%       Kees den Heijer
%
%       C.denHeijer@TUDelft.nl	
%
%       Faculty of Civil Engineering and Geosciences
%       P.O. Box 5048
%       2600 GA Delft
%       The Netherlands
%
%   This library is free software: you can redistribute it and/or modify
%   it under the terms of the GNU General Public License as published by
%   the Free Software Foundation, either version 3 of the License, or
%   (at your option) any later version.
%
%   This library is distributed in the hope that it will be useful,
%   but WITHOUT ANY WARRANTY; without even the implied warranty of
%   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%   GNU General Public License for more details.
%
%   You should have received a copy of the GNU General Public License
%   along with this library.  If not, see <http://www.gnu.org/licenses/>.
%   --------------------------------------------------------------------

% This tool is part of <a href="http://www.OpenEarth.eu">OpenEarthTools</a>.
% OpenEarthTools is an online collaboration to share and manage data and 
% programming tools in an open source, version controlled environment.
% Sign up to recieve regular updates of this function, and to contribute 
% your own tools.

%% Version <http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.keywords.html>
% Created: 07 Sep 2011
% Created with Matlab version: 7.7.0.471 (R2008b)

% $Id$
% $Date$
% $Author$
% $Revision$
% $HeadURL$
% $Keywords: $

%%
OPT = struct(...
    'id', 7003925,...
    'irun', 0,...
    'maindir', fullfile(fileparts(which(mfilename)), '..', 'simulations'),...
    'mean', false,...
    'WL', 5,...
    'Hsig', 9,...
    'Tp', 12,...
    'D50', 225e-6);

OPT = setproperty(OPT, varargin{:});

if OPT.irun == 1
    OPT.mean = true;
end

%% read data
tr = jarkus_transects(...
    'id', OPT.id,...
    'url', fullfile(fileparts(which(mfilename)), '..', 'data', 'jarkus.nc'));

%% derive relevant info
T = year(tr.time+datenum(1970,1,1));
if OPT.mean
    T = NaN;
end

%% choose DUROS+ settings
DuneErosionSettings('set',...
    'AdditionalErosion', false,...
    'BoundaryProfile', false,...
    'DuneBreachCalculation', false);

%% run DUROS+ in loop
ntransects = size(tr.altitude,2);
nT = length(T);
for itransect = 1:ntransects
    basepath = fullfile(OPT.maindir, sprintf('%08i', OPT.id(itransect)), 'durosplus', sprintf('run%02i', OPT.irun));
    for iT = 1:nT
        
        if ~isnan(T(iT))
            % actual transect
            nnid = ~isnan(squeeze(tr.altitude(iT,itransect,:)));
            z = squeeze(tr.altitude(iT,itransect,nnid));
            matfile = fullfile(basepath, sprintf('%i.mat', T(iT)));
        else
            % mean transect
            nnid = ~isnan(sum(squeeze(tr.altitude(:,itransect,:))));
            z = mean(squeeze(tr.altitude(:,itransect,nnid)))';
            matfile = fullfile(basepath, 'mean.mat');
        end
        x = tr.cross_shore(nnid)';
        
        result = DUROS(...
            'xInitial', x,...
            'zInitial', z,...
            'WL_t', OPT.WL,...
            'Hsig_t', OPT.Hsig,...
            'Tp_t', OPT.Tp,...
            'D50', OPT.D50);
        
        mkpath(fileparts(matfile))
        save(matfile, 'result');
    end
end