%************************************************************************** %******* Simulation for Hookean dumbbell ************ %* shear flow Monte Carlo * %* * %**************************** Tony Lelievre 27/05/2007 ******************* %************************************************************************** % run Couette_MC_VarReduc % The non-dimensional equation are : % % Re . d_t u = (1- Epsilon) d_x,x u + d_x tau % u(0,x)=0 % u(t,0)=v % u(t,1)=0 % tau=(Epsilon/We) \E( Y X ) % dX(x,t)= ((d_x u) Y -X/(2*We))dt + \sqrt(1/We) dVt % dY(x,t)= -Y/(2*We)dt + \sqrt(1/We) dWt % % The velocity on the boundary is actually progressively set to v % Brownian motion not depending on space % With control variate clear all; % Physical parameters Re=0.1; Eps=0.9; We=0.5; v=1.; T=1; % Maximal time % Numerical parameters % Space I=100; dx=1/I; mesh=[0:dx:1]; % Time N=100; dt=T/N; % Number of polymers per cell (Monte Carlo) J=1000; % Matrices D1=diag(ones(1,I-1),-1);D1=D1(2:I,:);D1=[D1,zeros(I-1,1)]; D2=diag(ones(1,I-1));D2=[zeros(I-1,1),D2,zeros(I-1,1)]; D3=diag(ones(1,I-1),+1);D3=D3(1:(I-1),:);D3=[zeros(I-1,1),D3]; % Mass matrix M=(1/6)*D1+(2/3)*D2+(1/6)*D3; M=M.*dx; M=sparse(M); MM=M(:,2:I); % Stiffness matrix A=(-1)*D1+2*D2+(-1)*D3; A=A./dx; A=sparse(A); AA=A(:,2:I); % Vectors u=zeros(I+1,1); % Initial velocity Y=zeros(J,1); X=zeros(J,I); X_var_controle=zeros(J,1); % Control variate Y=randn(size(Y)); % Initial condition not depending on the space variable X=randn(J,1)*ones(1,I); X_var_controle=X(:,1); tau=zeros(I,1); gradtau=zeros(I-1,1); % Time iterations BB=Re*MM./dt+(1-Eps)*AA; CLL=zeros(I+1,1); for t=dt:dt:T, for l=1:I, tau(l)=sum(Y.*(X(:,l)-X_var_controle))/J; end; tau=(Eps/We)*tau; gradtau=tau(2:I)-tau(1:(I-1)); if ((t/T)<0.1) CLL(1)=v*10*(t/T); else CLL(1)=v ; end; CL=(Re*M./dt+(1-Eps)*A)*CLL; F=(Re*M./dt)*u-CL+gradtau; u(2:I)=BB\F; if ((t/T)<0.1) u(1)=v*10*(t/T); else u(1)=v; end; % Y, X and X_var_controle r=randn(J,1); for l=1:I, X(:,l)=(1-dt/(2*We))*X(:,l)+(dt/dx)*(u(l+1)-u(l))*Y+sqrt(dt/We)*r; end; X_var_controle=(1-dt/(2*We))*X_var_controle+sqrt(dt/We)*r; Y=(1-dt/(2*We))*Y+sqrt(dt/We)*randn(J,1); % Drawings plot(mesh',u,mesh',[tau;tau(I)]); axis([0 1 -1 1.2]); drawnow; end; legend('velocity','stress');