4#define pi 3.14159265358979
14static inline int sign2 (
number x) {
return (
int)(
x > 0 ? 1 :
x < 0 ? -1 : 0); }
19#define swap(type,a,b) do { type _tmp_ = a; a = b; b = _tmp_; } while(false)
76struct {
int x,
y,
z; }
Period = {
false,
false,
false};
108void origin (
double x = 0.,
double y = 0.,
double z = 0.) {
184 for (
int _s = 0;
_s < 1;
_s++) ns++;
193 list[len + 1].
i = -1;
201 for (
int i = len;
i >= 1;
i--)
204 list[len + 1].
i = -1;
210 for (
int _t = 0;
_t < 1;
_t++)
229 for (
int _s = 0;
_s < 1;
_s++)
237 for (
int _s = 0;
_s < 1;
_s++)
245 for (
int _s = 0;
_s < 1;
_s++)
246 fprintf (
fp,
"%s%s",
i++ == 0 ?
"{" :
",",
s.name);
254 for (
int _v = 0;
_v < 1;
_v++)
nv++;
269 for (
int _w = 0;
_w < 1;
_w++) {
284 for (
int _v = 0;
_v < 1;
_v++)
307 for (
int _t = 0;
_t < 1;
_t++)
nt++;
323 while (
v->x.i >= 0) {
354#define vector(x) (*((vector *)&(x)))
383 return ((
tvend.tv_sec -
t.tv.tv_sec) +
384 (
tvend.tv_usec -
t.tv.tv_usec)/1
e6);
403#define face_gradient_x(a,i) ((a[i] - a[i-1])/Delta)
404#define face_gradient_y(a,i) ((a[0,i] - a[0,i-1])/Delta)
405#define face_gradient_z(a,i) ((a[0,0,i] - a[0,0,i-1])/Delta)
406#define face_value(a,i) ((a[i] + a[i-1])/2.)
407#define center_gradient(a) ((a[1] - a[-1])/(2.*Delta))
413 double det = (
m[0][0]*(
m[1][1]*
m[2][2] -
m[2][1]*
m[1][2]) -
414 m[0][1]*(
m[1][0]*
m[2][2] -
m[2][0]*
m[1][2]) +
415 m[0][2]*(
m[1][0]*
m[2][1] -
m[2][0]*
m[1][1]));
417 double m00 =
m[0][0];
418 m[0][0] = (
m[1][1]*
m[2][2] -
m[1][2]*
m[2][1])/
det;
419 double m01 =
m[0][1];
420 m[0][1] = (
m[2][1]*
m[0][2] -
m[0][1]*
m[2][2])/
det;
421 double m02 =
m[0][2];
422 m[0][2] = (m01*
m[1][2] -
m[1][1]*
m[0][2])/
det;
423 double m10 =
m[1][0];
424 m[1][0] = (
m[1][2]*
m[2][0] -
m[1][0]*
m[2][2])/
det;
425 double m11 =
m[1][1];
426 m[1][1] = (
m00*
m[2][2] -
m[2][0]*m02)/
det;
428 double m20 =
m[2][0];
429 m[2][0] = (
m10*
m[2][1] -
m[2][0]*m11)/
det;
440 for (
j = 0;
j <
n;
j++)
443 for (
i = 0;
i <
n;
i++) {
445 for (
j = 0;
j <
n;
j++)
447 for (
k = 0;
k <
n;
k++) {
458 for (
l = 0;
l <
n;
l++)
473 for (
l = 0;
l <
n;
l++)
478 for (
l =
n - 1;
l >= 0;
l--) {
480 for (
k = 0;
k <
n;
k++)
490 for (
int i = 0;
i <
n;
i++)
502 free (((
void **)
m)[0]);
547#define display_control(val, ...)
566# define avector(x, ...) {x}
568# define avector(x, y, ...) {x, y}
570# define avector(x, y, z) {x, y, z}
603 for (
size_t n = 0;
n <
size;
n++, buffer++)
double(* gradient)(double, double, double)
vector g[]
We store the combined pressure gradient and acceleration field in g*.
void * array_append(Array *a, void *elem, size_t size)
define m((k)==0 &&(l)==0 &&(m)==0) macro2 foreach_point(double _x=0.
define VT _attribute[s.i] v y scalar * list
scalar * list_prepend(scalar *list, scalar s)
double zero(double s0, double s1, double s2)
vector(* init_vector)(vector, const char *)
void free_solver_func_add(free_solver_func func)
scalar(* init_vertex_scalar)(scalar, const char *)
void(* scalar_clone)(scalar, scalar)
static int sign2(number x)
vector * vectors_copy(vector *l)
void display(const char *commands, bool overwrite=false)
vector * vectors_add(vector *list, vector v)
void list_print(scalar *l, FILE *fp)
static _Attributes * _attribute
scalar * list_concat(scalar *l1, scalar *l2)
scalar * list_add(scalar *list, scalar s)
int list_lookup(scalar *l, scalar s)
tensor(* init_tensor)(tensor, const char *)
tensor * tensors_append(tensor *list, tensor t)
void(* free_solver_func)(void)
static Array * free_solver_funcs
static uint32_t a32_hash(const Adler32Hash *hash)
static number sq(number x)
void origin(double x=0., double y=0., double z=0.)
scalar * list_copy(scalar *l)
void matrix_free(void *m)
int list_len(scalar *list)
double timer_elapsed(timer t)
static char * display_defaults
void(* BoundaryStencilFunc)(Point, Point, scalar, void *)
vector(* init_face_vector)(vector, const char *)
void * matrix_new(int n, int=(type *) realloc(p,(size) *sizeof(type)) p=(type *) realloc(p,(size) *sizeof(type)), size_t size)
static number clamp(number x, number a, number b)
static void a32_hash_add(Adler32Hash *hash, const void *data, size_t size)
double matrix_inverse(double **m, int n, double pivmin)
void matrix_inverse3(double m[3][3])
tensor * tensors_from_vectors(vector *v)
static int sign(number x)
scalar * list_append(scalar *list, scalar s)
static bool is_vertex_scalar(scalar s)
double smatrix_inverse(const int n, double m[n][n], double pivmin)
scalar(* init_scalar)(scalar, const char *)
int tensors_len(tensor *list)
int vectors_len(vector *list)
static void free_display_defaults()
double(* BoundaryFunc)(Point, Point, scalar, bool *)
static void a32_hash_init(Adler32Hash *hash)
vector * vectors_from_scalars(scalar *s)
static number cube(number x)
vector * vectors_append(vector *list, vector v)
#define qmalloc(size, type)
define sysmalloc malloc define syscalloc calloc define sysrealloc realloc define sysfree free define systrdup strdup define func
define sysmalloc malloc define syscalloc calloc define sysrealloc realloc define sysfree free define systrdup strdup define line line realloc(p, s) @ define pfree(p
define sysmalloc malloc define syscalloc calloc define sysrealloc realloc define sysfree free define systrdup strdup define line line line line strdup(s) @ define tracing(...) @ define end_tracing(...) @define tid() 0 @define pid() 0 @define npe() 1 @define mpi_all_reduce(v
if(2.*fabs(alpha)< fabs(n.y))
We need to reconstruct the face fractions fs for the fine cells.
*cs[i, 0, 0] a *[i -1, 0, 0] j
BoundaryStencilFunc * boundary_stencil
BoundaryFunc * boundary_homogeneous