Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: Optimization of a finite volume differencing scheme for multispecies
transport problem

Replies: 4   Last Post: Aug 4, 2008 8:26 AM

 Messages: [ Previous | Next ]
 bouloumag@gmail.com Posts: 10 Registered: 7/31/08
Re: Optimization of a finite volume differencing scheme for
multispecies transport problem

Posted: Aug 1, 2008 10:09 PM

On 1 août, 12:40, Olin Perry Norton <mylastn...@icet.msstate.invalid>
wrote:
> boulou...@gmail.com wrote:
> > I am working on a 3d finite volume scheme for an advection-diffusion-
> > reaction problem involving a large number of chemical species (more
> > than 60) and a large domain (an big lake for example). Since this
> > scheme will be used on large problem, I want it to be as efficient as
> > possible. The linear operators are splitted in 2 :

>
> > (1) advection-diffusion is solved using a fully implicit finite volume
> > discretisation with a multigrid method for solving the linear system
> > of equations
> > (2) chemistry is solved using a Runge-Kutta-Rosenbrock solver for
> > stiff ODE.

>
> > The transport (1) actually have the following form
>
> > foreach specie in speciesList {
> >        construct_matrix();
> >        solve_linear_system();
> > }

>
> > and takes a lot of time on the computer.
>
> > Assuming that diffusion coefficients are the same for all species, the
> > whole fluid (including all species) should follow the same path during
> > the transport. I wonder if it really necessairy to loop over all
> > species and compute the transport several time. It is possible to
> > compute the transport of the fluid once, and after reuse this
> > calculation to the different species ?

>
> > I would really appreciate suggestion or reference on this.
>
>    What you suggest is indeed possible.
>
>    Suppose that C(n) is the vector of concentrations of a certain
>    species at timestep n. This vector will have as many dimensions
>    as there are cells in your grid, and there will be a similar
>    vector for each species. I have used just one index, "n", to
>    indicate the timestep, but we could clearly add others to
>    indicate species and to identify grid location.
>
>    The advection-diffusion equation is linear, so, unless you
>    are doing something like flux-limiting, this concentration
>    vector at the next timestep, n+1, will be a linear function
>    of C(n), i.e.,
>
>             C(n+1) = T * C(n)
>
>    where T is a matrix. It is a square matrix -- the number of
>    entries in this matrix is the square of the number of grid points
>    you have. The matrix T takes a concentration profile
>    and diffuses and convects it by one timestep.
>
>    Clearly, since the advection and diffusion process is the same
>    for all species, once you have computed T for one species,
>    you can use the same T for all species.
>
>    Also note that, unless the diffusion coefficient or the flow
>    velocity in your lake change with time, you can continue to use
>    the same T for every timestep.
>
>    Mathematically, this is based on the fact that the advection-diffusion
>    equation is linear in the concentration variable -- if you're familiar
>    with Green's functions, this is basically a discretized version of
>    a Green's function.
>
>    The drawback I see is that ithis method would require solving for
>    and storing a large matrix -- if M is the number of gridpoints
>    in your problem, then T would be an MxM matrix. Perhaps there is
>    a clever way around this, or maybe it is manageable. Most of the
>    entries in T should be very close to zero.
>
>    Olin Perry Norton

Thank you very much for these informations, really appreciated.

If I understand, what you suggest is to do the following :

1) Suppose I use a fully implicit (backward Euler for example) or semi-
implicit (Crank-nicholson) time integrating scheme. I will use a
finite volume discretisation to create a linear system in the form

A * c(n+1) = c(n)

2) Compute

T = inverse(A)

Using a finite volume discretisation, with an hybrid differencing
scheme (central/upwind depending on the Peclet number) for the
advective part, the matrix A will be diagonnally dominant and all
entries are positive. Hence, the inverse of A exists and could be
computer with an appropriate method (do you have any suggestions on
this ?)

3) loop over all species and solve

C(n+1) = T * C(n)

for each one.

If my understanding of your suggestion is correct, this would be a
very elegant solution to my problem !

If you have reference on this method or it's application in CFD, I
would be interested to read them.

Again thank you very much.

Date Subject Author
7/31/08 bouloumag@gmail.com
8/1/08 Olin Perry Norton
8/1/08 bouloumag@gmail.com
8/2/08 bouloumag@gmail.com
8/4/08 Peter Spellucci