110# define lambda ((coord){1., 1. + dt/rho[]*(mu.x[] + mu.x[1] + \
111 mu.y[] + mu.y[0,1])/2./sq(y), 0})
113# define lambda ((coord){1. + 2.*dt/rho[]*(mu.x[] + mu.x[1])/sq(x), 0})
115# define lambda ((coord){1.,1.,1.})
171 +
mu.y[0,1]*(
u.x[0,1] +
172 (
u.y[1,0] +
ua.y[1,1])/4. -
173 (
u.y[-1,0] +
ua.y[-1,1])/4.)
174 -
mu.y[]*(-
u.x[0,-1] +
175 (
ua.y[1,-1] +
u.y[1,0])/4. -
176 (
ua.y[-1,-1] +
u.y[-1,0])/4.)
179 +
mu.z[0,0,1]*(
u.x[0,0,1] +
180 (
u.z[1,0,0] +
ua.z[1,0,1])/4. -
181 (
u.z[-1,0,0] +
ua.z[-1,0,1])/4.)
182 -
mu.z[]*(-
u.x[0,0,-1] +
183 (
ua.z[1,0,-1] +
u.z[1,0,0])/4. -
184 (
ua.z[-1,0,-1] +
u.z[-1,0,0])/4.)
192 +
mu.z[0,0,1] +
mu.z[]
200 u.x[] = (
u.x[] + 2.*
w.
x[])/3.;
247 taux.y[] =
mu.y[]*(
u.x[] -
u.x[0,-1] +
248 (
u.y[1,-1] +
u.y[1,0])/4. -
249 (
u.y[-1,-1] +
u.y[-1,0])/4.)/
Delta;
253 taux.z[] =
mu.z[]*(
u.x[] -
u.x[0,0,-1] +
254 (
u.z[1,0,-1] +
u.z[1,0,0])/4. -
255 (
u.z[-1,0,-1] +
u.z[-1,0,0])/4.)/
Delta;
270 res.x[] = r.x[] -
lambda.x*
u.x[] +
272 - 2.*
mu.x[]*(
u.x[] -
u.x[-1])
274 +
mu.y[0,1]*(
u.x[0,1] -
u.x[] +
275 (
u.y[1,0] +
u.y[1,1])/4. -
276 (
u.y[-1,0] +
u.y[-1,1])/4.)
277 -
mu.y[]*(
u.x[] -
u.x[0,-1] +
278 (
u.y[1,-1] +
u.y[1,0])/4. -
279 (
u.y[-1,-1] +
u.y[-1,0])/4.)
282 +
mu.z[0,0,1]*(
u.x[0,0,1] -
u.x[] +
283 (
u.z[1,0,0] +
u.z[1,0,1])/4. -
284 (
u.z[-1,0,0] +
u.z[-1,0,1])/4.)
285 -
mu.z[]*(
u.x[] -
u.x[0,0,-1] +
286 (
u.z[1,0,-1] +
u.z[1,0,0])/4. -
287 (
u.z[-1,0,-1] +
u.z[-1,0,0])/4.)
void(* boundary_level)(scalar *, int l)
static number sq(number x)
#define mu(f)
By default the Harmonic mean is used to compute the phase-averaged dynamic viscosity.
#define rho(f)
The density and viscosity are defined using arithmetic averages by default.
void(* restriction)(Point, scalar)
trace mgstats mg_solve(scalar *a, scalar *b, double(*residual)(scalar *a, scalar *b, scalar *res, void *data), void(*relax)(scalar *da, scalar *res, int depth, void *data), void *data=NULL, int nrelax=4, scalar *res=NULL, int minlevel=0, double tolerance=TOLERANCE)
The user needs to provide a function which computes the residual field (and returns its maximum) as w...
Information about the convergence of the solver is returned in a structure.
trace mgstats viscosity_explicit(vector u, vector mu, scalar rho, double dt)
trace mgstats viscosity(vector u, vector mu, scalar rho, double dt, int nrelax=4, scalar *res=NULL)
static void relax_viscosity(scalar *a, scalar *b, int l, void *data)
static double residual_viscosity(scalar *a, scalar *b, scalar *resl, void *data)