% Loesung der Laplace Gleichung auf (0,1)^2 mit FDM
% uniforme Anordnung der Knoten 
% lexikographische Nummerierung der Knoten
% Dirichlet Randbedingungen

clear all, close all, clc

numSteps = 6;
%*** definiere Volumenkraft f und Randbedingungen
global a;
a = 2*pi;
u = @(x,y) sin(a*x).*sin(2*pi*y);
f = @(x,y) (a^2+4*pi^2)*sin(a*x).*sin(2*pi*y);
g = @(x,y,n) a*cos(a*x).*sin(2*pi*y)*n(1)...
        + 2*pi*cos(2*pi*y).*sin(a*x)*n(2);


% Definiere Gitterweite
h=1/3;

for k=1:numSteps
  % Definiere Anzahl der Punkte
  M=1/h-1;

  % Initialisiere Blockmatrix T (sparse)
  T = 1/h^2*spdiags([ -ones(M,1), 4*ones(M,1), -ones(M,1) ],[-1,0,1],M,M);

  % Assembliere Steifigkeitsmatrix A fuer Dirichlet-Bedingungen
  %*** TO  DO **********************************************************
  
  % setze Diagonlbloecke
  for j = 
    
  end
  % setze Nebendiagonalbloecke
  for j = 
    
  end
  %***********************************************************************

  
  % berechne rechte Seite fuer Dirichlet Randbedingungen
  %*** TO  DO **********************************************************
  
  s = linspace(0,1,M+2);
  [x,y] = meshgrid(s(2:end-1),s(2:end-1));
  % setze Vektor b
  b = 
  %***********************************************************************
  
  % Loesung des Gleichungssystems
  uh=A\b(:);

  % Graphische Darstellung
  U = zeros(M+2,M+2);
  U(2:M+1,2:M+1) = reshape(uh,M,M)';
  
  % Berechne Fehler auf dem gr?bsten Gitter
  idx = 2^(k-1)+1:2^(k-1):M+1;
  err(k) = max(max(abs( U(idx, idx)-u( x(idx-1,idx-1),y(idx-1,idx-1)) )));
  
  % Verfeinere Gitter
  h=h/2;
end
  
%*** TO  DO **********************************************************
figure(1)
% plotte Losung ueber dem Gitter


view(3);
title('Numerische Loesung der Laplace Gleichung')
xlabel('x')
ylabel('y')
zlabel('uh(x,y)');

figure(2)
% plotte Fehler (doppelt logarithmische Skala)


title('Maximaler absoluter Fehler auf dem grobsten Gitter')
xlabel('1/h')
ylabel('max|u-uh|')
loglogTriangle(1e1,1e2,1e-2,2,'l');
%***********************************************************************

