文档详情

MATLAB水波模拟源代码.doc

发布:2018-09-27约5.29千字共5页下载文档
文本预览下载声明
function waterwave % WATER WAVE % 2D Shallow Water Model % % Lax-Wendroff finite difference method. % Reflective boundary conditions. % Random water drops initiate gravity waves. % Surface plot displays height colored by momentum. % Plot title shows t = simulated time and tv = a measure of total variation. % An exact solution to the conservation law would have constant tv. % Lax-Wendroff produces nonphysical oscillations and increasing tv. % % Information: % Author: cuixing % qq:577737382 % email: 577737382@ % Parameters n = 64; % grid size g = 9.8; % gravitational constant dt = 0.01; % hardwired timestep dx = 1.0; dy = 1.0; nplotstep = 8; % plot interval ndrops = 5; % maximum number of drops dropstep = 500; % drop interval D = droplet(1.5,21); % simulate a water drop % Initialize graphics [surfplot,top,start,stop] = initgraphics(n); % Outer loop, restarts. while get(stop,value) == 0 set(start,value,0) H = ones(n+2,n+2); U = zeros(n+2,n+2); V = zeros(n+2,n+2); Hx = zeros(n+1,n+1); Ux = zeros(n+1,n+1); Vx = zeros(n+1,n+1); Hy = zeros(n+1,n+1); Uy = zeros(n+1,n+1); Vy = zeros(n+1,n+1); ndrop = ceil(rand*ndrops); nstep = 0; % Inner loop, time steps. while get(start,value)==0 get(stop,value)==0 nstep = nstep + 1; % Random water drops if mod(nstep,dropstep) == 0 nstep = ndrop*dropstep w = size(D,1); i = ceil(rand*(n-w))+(1:w); j = ceil(rand*(n-w))+(1:w); H(i,j) = H(i,j) + rand*D; end % Reflective boundary conditions H(:,1) = H(:,2); U(:,1) = U(:,2); V(:,1) = -V(:,2); H(:,n+2) = H(:,n+1); U(:,n+2) = U(:,n+1); V(:,n+2) = -V(:,n+1); H(1,:) = H(2,:); U(1,:) = -U(2,:); V(1,:) = V(2,:); H(n+2,:) = H(n+1,:); U(n+2,:) = -U(n+1,:); V(n+2,:) = V(n+1,:); % First half step % x direction
显示全部
相似文档