% c ***************************************************************** %c %c This program solves -u''+u=f on an interval 0= time_final ) break; end % % ITERATION LOOP at each TIMESTEP % for niter = 1 : maxiter % % solve v equation % disp ( 'Solve v' ) nuk=1; profile on vcur = solve_eqn(nuk,time,dt, a_mass, vcur,ccur,fcur,etacur,vold); profile report profile plot profile off pause % % solve c equation % disp ( 'Solve c' ) nuk=2; ccur = solve_eqn (nuk,time,dt, a_mass, vcur,ccur,fcur,etacur,cold); % % solve f equation % disp ( 'Solve f' ) nuk=3; fcur = solve_eqn (nuk,time,dt,a_mass, vcur,ccur,fcur,etacur,fold); % % solve eta equation % disp ( 'Assemble stiff' ) nuk=4; assemble_stiff disp ( 'Factor stiff' ) a_stiff = chol(a_stiff); disp ( 'Solve eta' ) etacur = solve_eqn (nuk,time,dt,a_stiff, vcur,ccur,fcur,etacur,etaold); % % calculate residual; if less than tolerance, go to next time step % disp ( 'Compute residual' ) residual if ( resid_norm <= tolerance) break; end % % if failed to converge in maxiter steps, then reduce time step and start again % if ( niter == maxiter ) disp ( 'Reducing time step.' ); time = time-dt; dt = dt/2; vcur=vold; ccur=cold; fcur=fold; etacur= etaold; end end % % get ready for next time step % vold = vcur; cold = ccur; fold = fcur; etaold = etacur; end