# hub.darcs.net :: basilisk -> basilisk -> files

Basilisk source code

## root / src / advection.h.page

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59  /** # An advection solver We wish to solve the advection equations $$\partial_tf_i+\mathbf{u}\cdot\nabla f_i=0$$ where $\mathbf{u}$ is the velocity field and $f_i$ are a list of passive tracers. This can be done with a flux-based advection scheme such as the 2nd-order, unsplit, upwind scheme of [Bell-Collela-Glaz, 1989](references.bib#bell89). The main time loop is defined in [run.h](). A stable timestep needs to respect the [CFL condition](http://en.wikipedia.org/wiki/Courant%E2%80%93Friedrichs%E2%80%93Lewy_condition). */ #include "run.h" #include "timestep.h" /** We allocate the (face) velocity field. For compatibility with the other solvers, we allocate it as uf and define an alias. The gradient function is used to set the type of slope-limiting required. The default is to not use any limiting (i.e. a purely centered slope estimation). */ face vector uf[]; #define u uf double (* gradient) (double, double, double) = NULL; /** Here we set the gradient functions for each tracer (as defined in the user-provided tracers list). */ extern scalar * tracers; event defaults (i = 0) { for (scalar f in tracers) f.gradient = gradient; } /** We apply boundary conditions after user initialisation. */ event init (i = 0) { boundary ((scalar *){u}); boundary (tracers); } /** The timestep is set using the velocity field and the CFL criterion. The integration itself is performed in the events of [tracer.h](). */ event velocity (i++,last) { dt = dtnext (timestep (u, DT)); } #include "tracer.h"