- 3.1 Overview
- 3.2 Mathematical formulation of each step of the FARGO algorithm
- 3.3 Timestep limitation
- 3.4 Continuity
- 3.5 Operators swapping

where . The transport equation of any HD quantity will look the same as the L.H.S. of Eq. (2).

Now without loss of generality we can rewrite Eq. (2)
as:

where

- a source step;
- a radial transport step;
- an azimuthal transport step with the
velocity
,
which we are going to call the
azimuthal
*residual*velocity; - and an additional step which corresponds
to the following PDE:

It is an easy matter to check that the solution of this last equation can be written in a general way as:

which means that the solution of this equation at any time*t*looks like the initial profile (*t*=0), except for a shift in azimuth. It should be noted that this is true*whatever the profile of**J*, which can even contain discontinuities (i.e. shocks). In particular*no assumption has to be made*on the linearity of the flow (i.e. on the relative amplitude of the perturbed quantities).

A qualitative reason of why such a decomposition is valid
is that the time evolution
of the HD quantities can be described either by an observer sitting on a
ring of radius *r* which rotates at any instant in
time with the average azimuthal
velocity, or by an observer at rest in an inertial frame.
Now the time evolution of the system is of course observer-independent,
which is why their observations are reconciled through the simple shift
described by Eq. (5).

The idea on which the FARGO algorithm is based on is precisely to evolve the HD quantities through operators which mimic in a discrete way the different terms of Eq. (3). The source step, the radial transport step and the residual azimuthal velocity transport step are performed in a standard way (see e.g.Stone & Norman 1992). Now the last step in the operator-splitting described above, which corresponds to a simple shift which amounts to be in one timestep, can be implemented in such a way that the matter can sweep an arbitrary number of cell widths in one timestep.

In order to lay down the basic mechanism by which FARGO works, let us
take the following concrete
example. We assume that, after the classical substeps
(which are the source step, the radial transport and the residual
azimuthal velocity transport), the material
at a given radius *r* has to be shifted
by 4.7 cells in one timestep
(which means that
). What is actually done is that 4.7 is
decomposed as
4.7=-0.3+5, i.e. the nearest integer and a remainder
which by construction is lower or equal to 0.5 in absolute value.
In the first substep of this shift step the material is shifted by this
remainder (here -0.3),
which can be achieved through a classical transport method since
the remainder is lower or equal to 0.5 in absolute value (it has to
be
in order for the standard transport method to be possible),
with the additional simplicity that the corresponding velocity field
is uniform (which is actually why shift and transport happen to coincide
in this special case, since there is no compression in the
corresponding flow).
The second substep just corresponds to an integer number
of cells shift, which is done in our example simply by copying the
content of cell *j* into cell *j*+5, for any *j*.

A more formal and detailed description of the FARGO algorithm is given in the next section.

In the modified algorithm, the azimuthal transport substep is
split in several parts. We assume that the timestep has already be chosen, and defer discussion of the timestep
constraints until Sect. 3.3.
We first compute the average azimuthal
velocity at each radius:

We then introduce the residual velocity: , and the "shift number'' at each radius:

where

Hence the total velocity can be expressed as:

where the "shift velocity'' corresponds to a uniform shift of

We first transport the HD quantities according to the flow
:

then to the uniform flow :

We split the first part of the transport into two parts ( and ) instead of using a single transport step with the velocity , in order to ensure (as can be checked below given the timestep constraints) that in each of these transport substeps the material sweeps at most half a cell (it could sweep up to one cell, but for reasons which will become clear in Sect. 4, we prefer to take a half cell limitation), and in order for the continuity considerations of Sect. 3.4 to apply. Finally, the quantities are transported along the uniform flow:

Only the first two parts of this transport step introduce some numerical diffusion. The last one, given by Eq. (12), which in many cases corresponds to the largest part of the motion, does not introduce any numerical error, since it just corresponds to a circular permutation of the grid cells, or in other words it is just an integer discrete version of the shift given by Eq. (5).

A precise quantification of the lower numerical diffusivity
of FARGO is beyond the scope of this paper though. An extremely
rough estimation can be done in the case of the comparison of
a standard method (in which the effective CFL ratio is a sizable
fraction of one) and a FARGO method for which .
If we
assume that numerical effects will behave in azimuth as a physical
viscosity would do, then the effective numerical viscosity in
FARGO is about *n*_{i}/*C*_{0} times lower than the standard method's one,
where *C*_{0} is the CFL standard dimensionless limitation factor,
which is detailed in the next section. Nevertheless a variety of
numerical experiments can be found below which all show that
FARGO's numerical diffusivity is smaller than the standard method's.

3.3 Timestep limitation

which means that the timestep limitation comes now from the perturbed azimuthal velocity, which results in a much higher absolute value of . Another limitation arises from the shear. Indeed we do not want the shear to disconnect the two neighboring cells [

Following Stone & Norman's notations, we finally adopt:

3.4 Continuity

At each timestep,
values of *n*_{i} (with
), used in
Eq. (12),
are computed using Eq. (7). These integer values scale
roughly as
*R*_{i}^{-3/2}. The shift on the central parts generally
amounts to several cells over one timestep, while in the outer
parts *n*_{i} is small, and possibly zero. One can wonder whether
or not problems may arise at the radii *R*_{i} where
(i.e. at radii where the azimuthal shift corresponding
to the third substep of the transport step is discontinuous).
More generally
we want to examine the question of the continuity of
with respect to
.
In order to check for this
continuity, we assume
,
where *N* is an integer,
and we work out the behavior of
in the vicinity of
.
Since we have to use the explicit form of the
"
'' operator, we adopt the van Leer algorithm
(van Leer 1977), which
is widely used. Some straightforward algebra leads to:

both for and provided and where the operator "d'' is the van Leer slope. Equation (16) shows that the field is a continuous function of and hence of . In particular no special problem is to be expected from the discontinuities of

As we said in Sect. 2, it is a common practice to
alternate the radial *R* and azimuthal *T* transport
operators every other timestep. In this modified algorithm, *R*should usually be applied first, unless the velocity field is
updated just after applying the *T* operator from
the new momenta and new density fields, or unless special
care is devoted to the *j* indices. Indeed swapping blindly the *R*and *T* operators would result in moving radially the matter
with the radial velocity it actually has
cells upwards,
and would quickly end in a non-physical staggering everywhere
.

Copyright The European Southern Observatory (ESO)