sandbox/Antoonvh/test_filaments.c
Test for filaments.h
We want to test the initialization of a Lamb_Oseen
vorticity field using a varying number of filament sections for its discretization.
set xr [0.09:11]
set logscale xy
set grid
set size square
set xlabel 'segments per core diameter'
set ylabel 'error'
plot 'out'
reset
set xr [0.005: 0.015]
set grid
set size square
set xlabel 'Average vorticity'
set ylabel 'z'
plot 'prof12' u 2:1 t '12 segments', 'prof22' u 2:1 t '22 segements', 'prof43' u 2:1 w l lw 2 t '43 segements'
The convergence with the number of segments is limited. This is due to the finite length of the vortex tube and the limited grid resolution.
#include "grid/multigrid3D.h"
#include "filaments.h"
#include "profile6.h"
#include "view.h"
double xp = 0.1, yp = -0.2;
coord line (double t) {
coord C;
C.x = xp;
C.y = yp;
C.z = t;
return C;
}
int main () {
L0 = 10;
X0 = Y0 = Z0 = -L0/2;
init_grid (64);
vector omega[];
for (int nsegs = 5; nsegs < 200; nsegs *= sqrt(2)) {
get_vor_vector (omega, line, -2*L0, 2*L0, nsegs, Lamb_Oseen);
char fname[99];
sprintf (fname, "prof%d", nsegs);
profile ({omega.z}, z, fname);
double err = 0;
scalar error[];
foreach() {
double val = 0;
foreach_child()
val += exp(-sq(x - xp) - sq(y - yp))/(8*pi);
err += dv()*fabs(val - omega.z[]);
error[] = (val - omega.z[]);
}
printf ("%g %g\n", nsegs/(4*L0), err);
view (theta = pi/2, psi = pi/2);
isosurface ("omega.z", exp(-1)/pi, color = "error", min = -0.2, max = 0.2);
save ("omg.mp4", opt = "-r 3");
}
}