Finite Volume Method - Flux Limiters and Interpolation Schemes
(1) Need for Interpolation Schemes:
In the FVM method, we need to evaluate the surface and volume integrals for the finite volume formulation. But sometimes the integrals have unknown variables whose value we need to determine at points other than the computational nodes. For such calculations, Interpolation schemes are used to compute the value at these locations.
Consider the example of 1D Linear Heat Conduction Equation in a steady-state simulation:
If the value of alpha depends on temperature, we need to separately calculate alpha whose value will depend on the temperature of that particular face. To calculate the temperature at that face, we use interpolation scheme which takes the temperatures from adjoining cells. So we can say that Interpolation schemes are used to transform cell-center quantities to face centers.
Some types of Interpolation schemes are:
- Upwind Interpolation
- Linear Interpolation
- Quadratic Upwind Interpolation
- Total Variable Diminishing (TVD) Interpolation
(2) Need for Flux Limiters:
Flux limiters are used mainly to limit the values of flux quantities which can tend to oscillate and give unrealistic values due to shocks, discontinuities and sharp changes in the solution domain. The use of Flux limiters makes the solution Total Variable Diminishing.
The main idea behind the construction of flux limiter schemes is to limit the spatial derivatives to realistic values. They are used in high-resolution schemes for solving problems described by PDEs and only come into operation when sharp wavefronts are present. For smoothly changing waves, the flux limiters do not operate and the spatial derivatives can be represented by higher order approximations without introducing spurious oscillations.
Commonly used flux limiters are:
1. Minmod

2. Superbee

3. CHARM

4. Van Leer

This Matlab script solves the one-dimensional convection equation using a finite volume algorithm. The discretization forward Euler in time
% This Matlab script solves the one-dimensional convection
% equation using a finite volume algorithm. The
% discretization forward Euler in time.
clear all;
close all;
% Number of points
Nx = 50;
x = linspace(0,1,Nx+1);
dx = 1/Nx;
% Calculate midpoint v
xmid = 0.5*(x(1:Nx) + x(2:Nx+1));
% Set velocity
u = 1;
% Set final time
tfinal = 1;
% Set timestep
CFL = 0.5;
dt = CFL*dx/abs(u);
% Set initial condition to U0 = exp(-xˆ2)
% Note: technically, we should average the initial
% distribution in each cell but I choose to just set
% the value of U in each control volume to the midpoint
% value of U0.
U = 0.75*exp(-((xmid-0.5)/0.1).^2)';
t = 0;
% Loop until t > tfinal
while (t < tfinal)
Ubc = [U(Nx); U; U(1)]; % This enforces the periodic bc
% Calculate the flux at each interface
F = 0.5* u *( Ubc(2:Nx+2) + Ubc(1:Nx+1)) ...
- 0.5*abs(u)*( Ubc(2:Nx+2) - Ubc(1:Nx+1));
% Calculate residual in each cell
R = F(2:Nx+1) - F(1:Nx);
% Forward Euler step
U = U - (dt/dx)*R;
% Increment time
t = t + dt;
% Plot current (numerical) solution
stairs(x,[U; U(Nx)],'b-');
axis([0, 1, -0.5, 1.5]);
grid on;
drawnow;
end
% overlay exact solution
U = 0.75*exp(-((xmid-0.5)/0.1).^2)';
hold on;
stairs(x,[U; U(Nx)],'r-');
RESULT OF THE MATLAB SCRIPT FILE: