%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                       Matlab-Tutorium: PDE Toolbox                      %
%                                                                         %
%                                Aufgabe 6                                %
%                                                                         %
%                            Michael Pokojovy                             %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[pde_fig,ax] = pdeinit;
pdetool('appl_cb', 1);
pdetool('snapon', 'on');
set(ax, 'DataAspectRatio', [1 1 1]);
set(ax, 'PlotBoxAspectRatio', [1.5 1 1]);
set(ax, 'XLim', [-5 5]);
set(ax, 'YLim', [-5 5]);
set(ax, 'XTickMode', 'auto');
set(ax, 'YTickMode', 'auto');
pdetool('gridon', 'on');

% Geometrie des Gebietes Omega:
pdeellip(0, 0, 5, 2,   pi/4, 'E1');
pdeellip(0, 0, 5, 2, 3*pi/4, 'E2');
pdeellip(0, 0, 1, 1,      0, 'E3');

% Mengenformel (set formula):
set(findobj(get(pde_fig,'Children'), 'Tag', 'PDEEval'), 'String', '(E1+E2)-E3');

% Randbedingungen
pdetool('changemode', 0);
% Gamma_2 : Neumannsche Randbedingungen
for k = 12:15
    pdesetbd(k, 'neu', 1, '0', '0');     
end

% Gamma_1 : Dirichletsche Randbedingungen
I = [1, 3, 4, 6, 8, 9, 11];
for k = 1:7
    pdesetbd(I(k), 'dir', 1, '1', '1');
end

% Erstellung der Triangulierung:
refine_count = 1;
setuprop(pde_fig, 'Hgrad', 1.6);
setuprop(pde_fig, 'refinemethod', 'regular');
pdetool('initmesh')
for k = 1:refine_count
    pdetool('refine')
end

% Koeffizienten der PDG:
funktion = '1';
koeff = str2mat('2*(1 + x.*x)', 'cos(x)', 'cos(y)', '2*(1 + y.*y)');
pdeseteq(1, koeff, '0', funktion, '1.0', '0:10', '0.0', '0.0', '[0 100]')

setuprop(pde_fig, 'currparam', ['1.0'; '0.0'; '0  '; '1.0'])

% Parameter fuer "solve":
setuprop(pde_fig,'solveparam',...
str2mat('0', '1176', '10', 'pdeadworst', '0.5', 'longest', '0', '1E-4', '', 'fixed', 'Inf'))
 
% Darstellungsparameter:
setuprop(pde_fig,'plotflags', [1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 0 1]);
setuprop(pde_fig,'colstring','');
setuprop(pde_fig,'arrowstring','');
setuprop(pde_fig,'deformstring','');
setuprop(pde_fig,'heightstring','');

% Loesung der PDG:
pdetool('solve')
title('\it u(x, y)')