1 function [v,index_n]=A_operator(mu,u,index,Phi,M,epsilon,tau,dx)
3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4 %%% A-Operator fuer Buckley-Leverett Problem %%%
5 %%% A = Id-epsilon^2 tau D(u)_x d/dx - epsilon^2 tau D(u) d^2/dx^2 %%%
6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
9 % u Lsg u, wird komplett eingelesen und liest dann
10 % \in IR^{|index|x1} aus
11 % index Inidice-Menge, auf der lokale Lsg berechnet werden soll,
12 % fuer index=[] global berechnen
13 % Phi Menge aus Basisvektoren, wird komplett eingelesen und
14 % liest dann \in IR^{|index|xN} aus
15 % M Viskositaetsverhaeltnis
16 % epsilon Regularisierungsparameter
20 % Output: v Auswertung des A-Operators, d.h. linke Seite des
21 % BL-Problems an Basisvektoren aus Phi, \in IR^{|index_n|xN}
22 % index_n neue Indexmenge, nimmt von jedem Miniintervall einen
27 if isempty(index) % globale Lsg
32 a(i) = dx^2/(epsilon^2*tau)+BL_D(u(i-1),M)+BL_D(u(i),M);
39 A = sparse(epsilon^2*tau/dx^2*(diag(a)+diag(c,1)+diag(c,-1)));
55 for i=1:length(index)-1;
56 if index(i+1)-index(i)==0
57 error(
'Index kommt doppelt vor');
58 elseif index(i+1)-index(i)>1 % Zusaetzliche Abfrage, dass mind 3 aufeinanderfolgende Werte
63 Ie = [Ie,length(index)];
66 ni = Ie(i)-Ia(i)+1; % Anzahl aufeinanderfolgender Stuetzstellen
68 error('Zu wenig aufeinanderfolgende Stuetzstellen.')
73 uc = u(index(Ia(i)):index(Ie(i)));
75 a(k) = dx^2/(epsilon^2*tau)+BL_D(uc(k-1),M)+BL_D(uc(k),M);
79 c(k) = -BL_D(uc(k),M);
82 A = sparse(epsilon^2*tau/dx^2*(diag(a)+diag(c,1)+diag(c,-1)));
83 vi = A*Phi(index(Ia(i)):index(Ie(i)),:);
88 I = [I,index(Ia(i)+1):index(Ie(i)-1)];