31 for (
int _i = 0;
_i < _N;
_i++) {
41 double f2 =
f[
i] + (src[] + src[-1])*
dt/4. +
s*(1. -
s*
un)*
g.
x[
i]*Delta/2.;
49 double fyy = vn < 0. ?
f[
i,1] -
f[
i] :
f[
i] -
f[
i,-1];
50 f2 -=
dt*vn*fyy/(2.*Delta);
54 if (
fm.z[
i] &&
fm.z[
i,0,1]) {
55 double wn = (
uf.z[
i] +
uf.z[
i,0,1])/(
fm.z[
i] +
fm.z[
i,0,1]);
56 double fzz = wn < 0. ?
f[
i,0,1] -
f[
i] :
f[
i] -
f[
i,0,-1];
57 f2 -=
dt*wn*fzz/(2.*Delta);
80 for (
int _s = 0; _s < 1; _s++) {
91 for (
int _i = 0;
_i < _N;
_i++)
vector uf[]
We allocate the (face) velocity field.
scalar * tracers
Here we set the gradient functions for each tracer (as defined in the user-provided tracers list).
vector g[]
We store the combined pressure gradient and acceleration field in g*.
trace void advection(scalar *tracers, vector u, double dt, scalar *src=NULL)
The function below uses the tracer_fluxes function to integrate the advection equation,...
trace void tracer_fluxes(scalar f, vector uf, vector flux, double dt, const scalar src)
double zero(double s0, double s1, double s2)
int list_len(scalar *list)
static int sign(number x)
scalar * list_append(scalar *list, scalar s)
scalar f[]
The primary fields are:
trace void update_tracer(scalar f, vector uf, vector flux, double dt)
void gradients(scalar *f, vector *g)
Given a list of scalar fields f, this function fills the gradient fields g with the corresponding gra...