2 % initialization of micromodel
for buckley leverett multiscale
5 % Bernard Haasdonk 5.5.2010
9 model = nonlin_evol_model_default;
11 model.mu_names = {
'BL_Ul',
'BL_tau'};
12 model.mu_ranges = {[0.3,1],[1,20]};
16 model.T = 3*10^(-3); % Zeit, nicht Matrix
19 % parameters in test-routine:
20 model.BL_Time=3; % Endzeit fuer HMM-Berechnung
22 % Regularisierungsparameter
23 model.BL_epsilon = 0.00001;
25 model.BL_M = 2; % water/oil viscosity ratio
27 %%%%%%%%%%%%%%% makroskopische Ortsschrittweite %%%%%%%%%%%%%%%%%%%%%%%
30 %%%%%%%%%%% Anzahl der Schritte auf mikroskopischer Skala %%%%%%%%%%%%%
32 model.BL_n = model.BL_n_x-2;
34 %%%%%%%%%%%%%%%%%%%%%%%% Anfangsdaten %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35 %[U,Ur,xfront,lR,rR,X,N_X]=HMM_AB_U0_BL(DX,Ul);
38 %%%%%%%%%%%%%%%%%%%%%%%%% Schrittweiten %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
41 [DT,N_T,dx,dt,LAMBDA]=HMM_CFL_BL(...
42 model.BL_DX,model.BL_Time,model.BL_epsilon,model.BL_M);
43 n_t=round(model.T/dt)-1; % Anzahl mikroskopischer Zeitschritte
44 % disp(
'model parameters should be set constant sometime');
45 else % variables from previous call of
function...
58 model.BL_LAMBDA = LAMBDA;
61 % n_t unabhaegnig von tau, Ul
64 % further fields required by nonlin-evol:
65 %model.gridtype =
'none';
66 model.inner_product_matrix_algorithm = @(model,model_data) ...
70 model.init_values_algorithm = @BL_init_values;
71 model.L_E_local_ptr = @BL_L_E_local;
72 model.plot = @(dummy) plot(dummy);
74 %%% Diskretisierungsmatrix A in IR^{(nx-2)x(nx-2)}
75 %a = 2+dx^2/(epsilon^2*tau);
76 %c = epsilon^2*tau/(dx^2);
77 %A = c*(diag(a*ones(1,n))+diag(-ones(1,n-1),1)+diag(-ones(1,n-1),-1));
80 %%% Inverse der Tridiagonalmatrix A
81 %[T]=INVERSE_TRIDIAG(A);
84 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
85 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
87 % % 1.Schritt: stueckweise konstante Rekonstruktion von u=RU
88 % [u,x,s]=HMM_REKONSTRUKTION(U,xfront,X,dx,n_x);
90 % % 2.Schritt: Loesung des mikroskopischen Modells mit den Anfangsdaten u=RU
91 % % auf dem mikroskopischen Gitter -> gibt Loesung u zurueck
93 %
for iter=1:n_t % global Loesung zum Zeitpunkt T-dt
94 % [u_new,w]=HMM_MIKRO_teil(T,u,epsilon,tau,dx,dt,n_x,M);
95 %
if ~isequal(u_new,w*dt+u)
96 % error(
'w*dt+u not equal new u!!');
106 % index=[i1,i2,i3,i4];
108 % % lokale Loesung zum Zeitpunkt T
109 % [u,w,index_n]=HMM_MIKRO_teil(T,u_sicher,epsilon,tau,dx,dt,n_x,M,index);
112 % % kontrolle/ global Loesung zum Zeitpunkt T
113 % [u_kontrolle,w_k]=HMM_MIKRO_teil(T,u_sicher,epsilon,tau,dx,dt,n_x,M);
115 % % Fehler zwischen globaler und lokaler Loesung
116 % fehler = max(abs(u_kontrolle(index_n)-u));
118 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
119 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
122 %figure % Plot zu u-Werten
123 %plot(x,u_sicher,
'g',
'LineWidth',2)
125 %plot(x,u_kontrolle,
'LineWidth',2)
128 %legend(
'globale Lsg bei T-dt',
'globale Lsg bei T',
'lokale Lsg bei T')
131 %figure % Plot zu w-Werten
138 function U0 = BL_init_values(model,model_data)
140 % Abhaegnig von Ulinks
141 % Unabhaegnig von Tau
142 % erster Eintrag Ul, rest 0!!!
143 U0 = zeros(1,model.BL_n_x);
145 %[U,Ur,xfront,lR,rR,X,N_X]=HMM_AB_U0_BL(model.BL_DX,model.BL_Ul);
146 % % 1.Schritt: stueckweise konstante Rekonstruktion von u=RU
147 %[U0,x,s]=HMM_REKONSTRUKTION(U,xfront,X,model.BL_dx,model.BL_n_x);
149 function [inc, fluxes] = BL_L_E_local(model, model_data, U, index);
151 [UNew,w]=HMM_MIKRO_teil(model.T,(U(:))',...
152 model.BL_epsilon,model.BL_tau,model.BL_dx,...
153 model.dt,model.BL_n_x,model.BL_M);
function model = multiscale_buckley_leverett_model(params)
initialization of micromodel for buckley leverett multiscale problem