diff --git a/Parameters.md b/Parameters.md index f3f481b..6797c07 100644 --- a/Parameters.md +++ b/Parameters.md @@ -9,105 +9,17 @@ function animation. Some simulations use variants of the published code. The lis updated gradually. For older simulations, see files `Parameters_July21.md` etc. -### 21 August 21 - A Sinai pinball with infinite horizon ### - -**Program:** Variant of `particle_billiard.c` - -**Initial condition in function `animation()`:** `init_drop_config(-1.4, 0.0, -0.5*PID, 0.5*PID, configs);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define SCALING_FACTOR 1.0 /* scaling factor of drawing, needed for flower billiards, otherwise set to 1.0 */ - -/* Choice of the billiard table, see global_particles.c */ - -#define B_DOMAIN 21 /* choice of domain shape */ - -#define CIRCLE_PATTERN 2 /* pattern of circles */ - -#define ABSORBING_CIRCLES 0 /* set to 1 for circular scatterers to be absorbing */ - -#define NMAXCIRCLES 1000 /* total number of circles (must be at least NCX*NCY for square grid) */ -#define NCX 30 /* number of circles in x direction */ -#define NCY 20 /* number of circles in y direction */ - -#define LAMBDA 1.7 /* parameter controlling shape of domain */ -#define MU 0.028 /* second parameter controlling shape of billiard */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NPOLY 6 /* number of sides of polygon */ -#define APOLY 0.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define DRAW_BILLIARD 1 /* set to 1 to draw billiard */ -#define DRAW_CONSTRUCTION_LINES 0 /* set to 1 to draw additional construction lines for billiard */ -#define PERIODIC_BC 0 /* set to 1 to enforce periodic boundary conditions when drawing particles */ - -#define RESAMPLE 0 /* set to 1 if particles should be added when dispersion too large */ -#define DEBUG 0 /* draw trajectories, for debugging purposes */ - -/* Simulation parameters */ - -#define NPART 1 /* number of particles */ -#define NPARTMAX 100000 /* maximal number of particles after resampling */ -#define LMAX 0.01 /* minimal segment length triggering resampling */ -#define DMIN 0.02 /* minimal distance to boundary for triggering resampling */ -#define CYCLE 1 /* set to 1 for closed curve (start in all directions) */ -#define SHOWTRAILS 1 /* set to 1 to keep trails of the particles */ - -#define NSTEPS 11725 /* number of frames of movie */ -#define TIME 1400 /* time between movie frames, for fluidity of real-time simulation */ -#define DPHI 0.00004 /* integration step */ -#define NVID 150 /* number of iterations between images displayed on screen */ - -/* Decreasing TIME accelerates the animation and the movie */ -/* For constant speed of movie, TIME*DPHI should be kept constant */ -/* However, increasing DPHI too much deterioriates quality of simulation */ -/* NVID tells how often a picture is drawn in the animation, increase it for faster anim */ -/* For a good quality movie, take for instance TIME = 400, DPHI = 0.00005, NVID = 100 */ - -/* Colors and other graphical parameters */ - -#define NCOLORS 256 /* number of colors */ -#define COLORSHIFT 0 /* hue of initial color */ -#define RAINBOW_COLOR 0 /* set to 1 to use different colors for all particles */ -#define FLOWER_COLOR 0 /* set to 1 to adapt initial colors to flower billiard (tracks vs core) */ -#define NSEG 100 /* number of segments of boundary */ -#define LENGTH 0.045 /* length of velocity vectors */ -#define BILLIARD_WIDTH 2 /* width of billiard */ -#define PARTICLE_WIDTH 2 /* width of particles */ -#define FRONT_WIDTH 3 /* width of wave front */ - -#define BLACK 1 /* set to 1 for black background */ -#define COLOR_OUTSIDE 0 /* set to 1 for colored outside */ -#define OUTER_COLOR 270.0 /* color outside billiard */ -#define PAINT_INT 0 /* set to 1 to paint interior in other color (for polygon/Reuleaux) */ -#define ERASE_OUTSIDE 1 /* set to 1 to erase outside of rectangular billiard (beta) */ - - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1000 /* final sleeping time */ -#define END_FRAMES 100 /* number of still frames at end of movie */ - -``` - -### 20 August 21 - A wave protection alternating square and triangular grids ### +### 1 September 21 - A parabolic resonating cavity ### **Program:** `wave_billiard.c` -**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.015, 0.0, phi, psi, xy_in);` +**Initial condition in function `animation()`:** `init_wave(-LAMBDA, 0.0, phi, psi, xy_in);` + +**In `init_wave()`:** `if ((xy_in[i][j])||(TWOSPEEDS)) phi[i][j] = 0.2*exp(-dist2/0.001)*cos(-sqrt(dist2)/0.01)` ``` #define MOVIE 1 /* set to 1 to generate movie */ -#define DOUBLE_MOVIE 1 /* set to 1 to produce movies for wave height and energy simultaneously */ +#define DOUBLE_MOVIE 0 /* set to 1 to produce movies for wave height and energy simultaneously */ /* General geometrical parameters */ @@ -126,15 +38,15 @@ updated gradually. For older simulations, see files `Parameters_July21.md` etc. /* Choice of the billiard table */ -#define B_DOMAIN 20 /* choice of domain shape, see list in global_pdes.c */ +#define B_DOMAIN 19 /* choice of domain shape, see list in global_pdes.c */ -#define CIRCLE_PATTERN 12 /* pattern of circles, see list in global_pdes.c */ +#define CIRCLE_PATTERN 8 /* pattern of circles, see list in global_pdes.c */ #define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ #define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ -#define LAMBDA 0.85 /* parameter controlling the dimensions of domain */ -#define MU 0.03 /* parameter controlling the dimensions of domain */ +#define LAMBDA 0.0 /* parameter controlling the dimensions of domain */ +#define MU 1.25 /* parameter controlling the dimensions of domain */ #define NPOLY 3 /* number of sides of polygon */ #define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ #define MDEPTH 4 /* depth of computation of Menger gasket */ @@ -161,125 +73,7 @@ updated gradually. For older simulations, see files `Parameters_July21.md` etc. #define GAMMA 0.0 /* damping factor in wave equation */ #define GAMMAB 1.0e-6 /* damping factor in wave equation */ #define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 3 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 3000 /* number of frames of movie */ -#define NVID 20 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 250 /* time after which to start saving frames */ -#define BOUNDARY_WIDTH 2 /* width of billiard boundary */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 0 - -#define PLOT_B 1 /* plot type for second movie */ - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.5 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 2000.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -220.0 /* amplitude of variation of hue for color scheme C_HUE */ - -/* For debugging purposes only */ -#define FLOOR 0 /* set to 1 to limit wave amplitude to VMAX */ -#define VMAX 10.0 /* max value of wave amplitude */ - -``` - -### 19 August 21 - How a parabolic antenna works ### - -**Program:** `wave_billiard.c` - -**Initial condition in function `animation()`:** `` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ -#define DOUBLE_MOVIE 0 /* set to 1 to produce movies for wave height and energy simultaneously */ - -/* General geometrical parameters */ - -#define WINWIDTH 720 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 720 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -0.625 -#define XMAX 1.625 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN 18 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN 12 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.25 /* parameter controlling the dimensions of domain */ -#define MU 0.03 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 16 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 0 /* set to 1 to replace hardcore boundary by medium with different speed */ -#define OSCILLATE_LEFT 0 /* set to 1 to add oscilating boundary condition on the left */ -#define OSCILLATE_TOPBOT 0 /* set to 1 to enforce a planar wave on top and bottom boundary */ - -#define OMEGA 0.002 /* frequency of periodic excitation */ -#define AMPLITUDE 1.0 /* amplitude of periodic excitation */ -#define COURANT 0.02 /* Courant number */ -#define COURANTB 0.01 /* Courant number in medium B */ -#define GAMMA 0.0 /* damping factor in wave equation */ -#define GAMMAB 1.0e-6 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ +#define GAMMA_TOPBOT 1.0e-7 /* damping factor on boundary */ #define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ #define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ #define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ @@ -294,22 +88,24 @@ updated gradually. For older simulations, see files `Parameters_July21.md` etc. /* Parameters for length and speed of simulation */ -#define NSTEPS 1400 /* number of frames of movie */ +#define NSTEPS 5000 /* number of frames of movie */ #define NVID 25 /* number of iterations between images displayed on screen */ #define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 0 /* time after which to start saving frames */ +#define INITIAL_TIME 0 /* time after which to start saving frames */ #define BOUNDARY_WIDTH 2 /* width of billiard boundary */ -#define PAUSE 1000 /* number of frames after which to pause */ +#define PAUSE 1000 /* number of frames after which to pause */ #define PSLEEP 1 /* sleep time during pause */ #define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ +#define SLEEP2 1 /* final sleeping time */ +#define MID_FRAMES 20 /* number of still frames between parts of two-part movie */ +#define END_FRAMES 100 /* number of still frames at end of movie */ /* Plot type, see list in global_pdes.c */ #define PLOT 1 -#define PLOT_B 1 /* plot type for second movie */ +#define PLOT_B 0 /* plot type for second movie */ /* Color schemes */ @@ -334,1916 +130,3 @@ updated gradually. For older simulations, see files `Parameters_July21.md` etc. #define VMAX 10.0 /* max value of wave amplitude */ ``` - -### 18 August 21 - An pinball Ehrenfest model ### - -**Program:** Variant of `particle_billiard.c` - -**Initial condition in function `animation()`:** `init_drop_config(-1.4, 0.0, -0.5*PID, 0.5*PID, configs);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define SCALING_FACTOR 1.0 /* scaling factor of drawing, needed for flower billiards, otherwise set to 1.0 */ - -/* Choice of the billiard table, see global_particles.c */ - -#define B_DOMAIN 21 /* choice of domain shape */ - -#define CIRCLE_PATTERN 1 /* pattern of circles */ - -#define ABSORBING_CIRCLES 0 /* set to 1 for circular scatterers to be absorbing */ - -#define NMAXCIRCLES 1000 /* total number of circles (must be at least NCX*NCY for square grid) */ -#define NCX 9 /* number of circles in x direction */ -#define NCY 20 /* number of circles in y direction */ - -#define LAMBDA 1.8 /* parameter controlling shape of domain */ -#define MU 0.04 /* second parameter controlling shape of billiard */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NPOLY 6 /* number of sides of polygon */ -#define APOLY 0.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define DRAW_BILLIARD 1 /* set to 1 to draw billiard */ -#define DRAW_CONSTRUCTION_LINES 0 /* set to 1 to draw additional construction lines for billiard */ -#define PERIODIC_BC 0 /* set to 1 to enforce periodic boundary conditions when drawing particles */ - -#define RESAMPLE 0 /* set to 1 if particles should be added when dispersion too large */ -#define DEBUG 0 /* draw trajectories, for debugging purposes */ - -/* Simulation parameters */ - -#define NPART 1000 /* number of particles */ -#define NPARTMAX 100000 /* maximal number of particles after resampling */ -#define LMAX 0.01 /* minimal segment length triggering resampling */ -#define DMIN 0.02 /* minimal distance to boundary for triggering resampling */ -#define CYCLE 1 /* set to 1 for closed curve (start in all directions) */ -#define SHOWTRAILS 0 /* set to 1 to keep trails of the particles */ - -#define NSTEPS 3500 /* number of frames of movie */ -#define TIME 1500 /* time between movie frames, for fluidity of real-time simulation */ -#define DPHI 0.00001 /* integration step */ -#define NVID 150 /* number of iterations between images displayed on screen */ - -/* Decreasing TIME accelerates the animation and the movie */ -/* For constant speed of movie, TIME*DPHI should be kept constant */ -/* However, increasing DPHI too much deterioriates quality of simulation */ -/* NVID tells how often a picture is drawn in the animation, increase it for faster anim */ -/* For a good quality movie, take for instance TIME = 400, DPHI = 0.00005, NVID = 100 */ - -/* Colors and other graphical parameters */ - -#define NCOLORS 50 /* number of colors */ -#define COLORSHIFT 0 /* hue of initial color */ -#define RAINBOW_COLOR 0 /* set to 1 to use different colors for all particles */ -#define FLOWER_COLOR 0 /* set to 1 to adapt initial colors to flower billiard (tracks vs core) */ -#define NSEG 100 /* number of segments of boundary */ -#define LENGTH 0.03 /* length of velocity vectors */ -#define BILLIARD_WIDTH 2 /* width of billiard */ -#define PARTICLE_WIDTH 3 /* width of particles */ -#define FRONT_WIDTH 3 /* width of wave front */ - -#define BLACK 1 /* set to 1 for black background */ -#define COLOR_OUTSIDE 0 /* set to 1 for colored outside */ -#define OUTER_COLOR 270.0 /* color outside billiard */ -#define PAINT_INT 0 /* set to 1 to paint interior in other color (for polygon/Reuleaux) */ - - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1000 /* final sleeping time */ - -``` - -### 17 August 21 - Wave protection comparison 6: randomized square grid vs Sierpinski carpet ### - -**Program:** `wave_comparison.c` (variant of `wave_billiard.c`) - -**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.015, 0.0, phi, psi, xy_in);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -1.8 -#define XMAX 1.8 /* x interval */ -#define YMIN -1.0125 -#define YMAX 1.0125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN 20 /* choice of domain shape, see list in global_pdes.c */ -#define B_DOMAIN_B 15 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN 2 /* pattern of circles, see list in global_pdes.c */ -#define CIRCLE_PATTERN_B 10 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.8 /* parameter controlling the dimensions of domain */ -#define MU 0.0346 /* parameter controlling the dimensions of domain */ -#define MUB 0.03 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 20 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 0 /* set to 1 to replace hardcore boundary by medium with different speed */ -#define OSCILLATE_LEFT 0 /* set to 1 to add oscilating boundary condition on the left */ -#define OSCILLATE_TOPBOT 0 /* set to 1 to enforce a planar wave on top and bottom boundary */ - -#define OMEGA 0.0035 /* frequency of periodic excitation */ -#define AMPLITUDE 1.0 /* amplitude of periodic excitation */ -#define COURANT 0.02 /* Courant number */ -#define COURANTB 0.0075 /* Courant number in medium B */ -#define GAMMA 0.0 /* damping factor in wave equation */ -#define GAMMAB 1.0e-5 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 3 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 4500 /* number of frames of movie */ -#define NVID 25 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 200 /* time after which to start saving frames */ -#define COMPUTE_ENERGIES 1 /* set to 1 to compute and print energies */ -#define BOUNDARY_WIDTH 2 /* width of billiard boundary */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 1 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.5 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 2000.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -220.0 /* amplitude of variation of hue for color scheme C_HUE */ - -/* For debugging purposes only */ -#define FLOOR 0 /* set to 1 to limit wave amplitude to VMAX */ -#define VMAX 10.0 /* max value of wave amplitude */ - -``` - -### 16 August 21 - Long-wavelength waves gradually destroying a randomized square grid of obstacles ### - -**Program:** `mangrove.c` (variant of `wave_billiard.c`) - -**Initial condition in function `animation()`:** `init_wave_flat(phi, psi, xy_in);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN 20 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN 2 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.75 /* parameter controlling the dimensions of domain */ -#define MU 0.03 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 15 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 1 /* set to 1 to replace hardcore boundary by medium with different speed */ -#define OSCILLATE_LEFT 1 /* set to 1 to add oscilating boundary condition on the left */ -#define OSCILLATE_TOPBOT 1 /* set to 1 to enforce a planar wave on top and bottom boundary */ -#define X_SHIFT -0.8 /* x range on which to apply OSCILLATE_TOPBOT */ - -#define OMEGA 0.0004 /* frequency of periodic excitation */ -#define K_BC 3.0 /* spatial period of periodic excitation in y direction */ -#define KX_BC 6.0 /* spatial period of periodic excitation in x direction */ -#define KY_BC 2.0 /* spatial period of periodic excitation in y direction */ -#define AMPLITUDE 1.0 /* amplitude of periodic excitation */ -#define COURANT 0.02 /* Courant number */ -#define COURANTB 0.005 /* Courant number in medium B */ -#define GAMMA 5.0e-8 /* damping factor in wave equation */ -#define GAMMAB 1.0e-5 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 3 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 3300 /* number of frames of movie */ -#define NVID 40 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 125 /* time after which to start saving frames */ -#define BOUNDARY_WIDTH 2 /* width of billiard boundary */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 0 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 2500.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -50.0 /* amplitude of variation of hue for color scheme C_HUE */ - -/* mangrove colors */ - -#define MANGROVE_HUE_MIN 180.0 /* color of original mangrove */ -#define MANGROVE_HUE_MAX 0.0 /* color of saturated mangrove */ -#define MANGROVE_EMAX 1.0e-3 /* max energy for mangrove to survive */ -// #define MANGROVE_EMAX 1.0e-4 /* max energy for mangrove to survive */ - -/* For debugging purposes only */ -#define FLOOR 1 /* set to 1 to limit wave amplitude to VMAX */ -#define VMAX 10.0 /* max value of wave amplitude */ - -``` - -### 15 August 21 - How permeable is a pinball? Particles shot at various arrangements of circles ### - -**Program:** Variant of `particle_billiard.c` - -**Initial condition in function `animation()`:** `init_drop_config(-1.25, 0.0, -0.1, 0.1, configs);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define SCALING_FACTOR 1.0 /* scaling factor of drawing, needed for flower billiards, otherwise set to 1.0 */ - -/* Choice of the billiard table, see global_particles.c */ - -#define B_DOMAIN 20 /* choice of domain shape */ - -#define CIRCLE_PATTERN 3 /* pattern of circles */ - -#define ABSORBING_CIRCLES 0 /* set to 1 for circular scatterers to be absorbing */ - -#define NMAXCIRCLES 1000 /* total number of circles (must be at least NCX*NCY for square grid) */ -#define NCX 15 /* number of circles in x direction */ -#define NCY 20 /* number of circles in y direction */ - -#define LAMBDA 0.8 /* parameter controlling shape of domain */ -#define MU 0.03 /* second parameter controlling shape of billiard */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NPOLY 6 /* number of sides of polygon */ -#define APOLY 0.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define DRAW_BILLIARD 1 /* set to 1 to draw billiard */ -#define DRAW_CONSTRUCTION_LINES 0 /* set to 1 to draw additional construction lines for billiard */ -#define PERIODIC_BC 0 /* set to 1 to enforce periodic boundary conditions when drawing particles */ - -#define RESAMPLE 0 /* set to 1 if particles should be added when dispersion too large */ -#define DEBUG 0 /* draw trajectories, for debugging purposes */ - -/* Simulation parameters */ - -#define NPART 500 /* number of particles */ -#define NPARTMAX 100000 /* maximal number of particles after resampling */ -#define LMAX 0.01 /* minimal segment length triggering resampling */ -#define DMIN 0.02 /* minimal distance to boundary for triggering resampling */ -#define CYCLE 1 /* set to 1 for closed curve (start in all directions) */ -#define SHOWTRAILS 1 /* set to 1 to keep trails of the particles */ - -#define NSTEPS 1000 /* number of frames of movie */ -#define TIME 1500 /* time between movie frames, for fluidity of real-time simulation */ -#define DPHI 0.00001 /* integration step */ -#define NVID 150 /* number of iterations between images displayed on screen */ - -/* Decreasing TIME accelerates the animation and the movie */ -/* For constant speed of movie, TIME*DPHI should be kept constant */ -/* However, increasing DPHI too much deterioriates quality of simulation */ -/* NVID tells how often a picture is drawn in the animation, increase it for faster anim */ -/* For a good quality movie, take for instance TIME = 400, DPHI = 0.00005, NVID = 100 */ - -/* Colors and other graphical parameters */ - -#define NCOLORS 10 /* number of colors */ -#define COLORSHIFT 0 /* hue of initial color */ -#define RAINBOW_COLOR 1 /* set to 1 to use different colors for all particles */ -#define FLOWER_COLOR 0 /* set to 1 to adapt initial colors to flower billiard (tracks vs core) */ -#define NSEG 100 /* number of segments of boundary */ -#define LENGTH 0.02 /* length of velocity vectors */ -#define BILLIARD_WIDTH 2 /* width of billiard */ -#define PARTICLE_WIDTH 2 /* width of particles */ -#define FRONT_WIDTH 3 /* width of wave front */ - -#define BLACK 1 /* set to 1 for black background */ -#define COLOR_OUTSIDE 0 /* set to 1 for colored outside */ -#define OUTER_COLOR 270.0 /* color outside billiard */ -#define PAINT_INT 0 /* set to 1 to paint interior in other color (for polygon/Reuleaux) */ - - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1000 /* final sleeping time */ - -``` - -### 14 August 21 - A "golden spiral" wave protection ### - -**Program:** `wave_billiard.c` - -**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.015, 0.0, phi, psi, xy_in);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ -#define DOUBLE_MOVIE 1 /* set to 1 to produce movies for wave height and energy simultaneously */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN 20 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN 11 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.85 /* parameter controlling the dimensions of domain */ -#define MU 0.03 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 15 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 0 /* set to 1 to replace hardcore boundary by medium with different speed */ -#define OSCILLATE_LEFT 0 /* set to 1 to add oscilating boundary condition on the left */ -#define OSCILLATE_TOPBOT 0 /* set to 1 to enforce a planar wave on top and bottom boundary */ - -#define OMEGA 0.002 /* frequency of periodic excitation */ -#define AMPLITUDE 1.0 /* amplitude of periodic excitation */ -#define COURANT 0.02 /* Courant number */ -#define COURANTB 0.01 /* Courant number in medium B */ -#define GAMMA 0.0 /* damping factor in wave equation */ -#define GAMMAB 1.0e-6 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 3 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 3500 /* number of frames of movie */ -#define NVID 25 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 200 /* time after which to start saving frames */ -#define BOUNDARY_WIDTH 2 /* width of billiard boundary */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 0 - -#define PLOT_B 1 /* plot type for second movie */ - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 2000.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -220.0 /* amplitude of variation of hue for color scheme C_HUE */ - -/* For debugging purposes only */ -#define FLOOR 0 /* set to 1 to limit wave amplitude to VMAX */ -#define VMAX 10.0 /* max value of wave amplitude */ - -``` - -### 13 August 21 - Collapse of a triangle lattice wave protection under waves arriving at an angle ### - -**Program:** `mangrove.c` (variant of `wave_billiard.c`) - -**Initial condition in function `animation()`:** `init_wave_flat(phi, psi, xy_in);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN 20 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN 1 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.75 /* parameter controlling the dimensions of domain */ -#define MU 0.03 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 15 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 1 /* set to 1 to replace hardcore boundary by medium with different speed */ -#define OSCILLATE_LEFT 1 /* set to 1 to add oscilating boundary condition on the left */ -#define OSCILLATE_TOPBOT 1 /* set to 1 to enforce a planar wave on top and bottom boundary */ -#define X_SHIFT -0.8 /* x range on which to apply OSCILLATE_TOPBOT */ - -#define OMEGA 0.002 /* frequency of periodic excitation */ -#define K_BC 3.0 /* spatial period of periodic excitation in y direction */ -#define KX_BC 30.0 /* spatial period of periodic excitation in x direction */ -#define KY_BC 10.0 /* spatial period of periodic excitation in y direction */ -#define AMPLITUDE 1.0 /* amplitude of periodic excitation */ -#define COURANT 0.02 /* Courant number */ -#define COURANTB 0.00666 /* Courant number in medium B */ -#define GAMMA 5.0e-8 /* damping factor in wave equation */ -#define GAMMAB 1.0e-5 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 3 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 6000 /* number of frames of movie */ -#define NVID 20 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 250 /* time after which to start saving frames */ -#define BOUNDARY_WIDTH 2 /* width of billiard boundary */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 0 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 2500.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -50.0 /* amplitude of variation of hue for color scheme C_HUE */ - -/* mangrove colors */ - -#define MANGROVE_HUE_MIN 180.0 /* color of original mangrove */ -#define MANGROVE_HUE_MAX 0.0 /* color of saturated mangrove */ -#define MANGROVE_EMAX 2.0e-3 /* max energy for mangrove to survive */ - -/* For debugging purposes only */ -#define FLOOR 1 /* set to 1 to limit wave amplitude to VMAX */ -#define VMAX 10.0 /* max value of wave amplitude */ - -``` - -### 12 August 21 - Let’s play (frictionless) pinball! ### - -**Program:** Variant of `particle_billiard.c` - -**Initial condition in function `animation()`:** `init_drop_config(-0.9, 0.0, 0.117, 1.0, configs);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -#define WINWIDTH 720 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define XMIN -1.125 -#define XMAX 1.125 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define SCALING_FACTOR 1.0 /* scaling factor of drawing, needed for flower billiards, otherwise set to 1.0 */ - -/* Choice of the billiard table, see global_particles.c */ - -#define B_DOMAIN 21 /* choice of domain shape */ - -#define CIRCLE_PATTERN 3 /* pattern of circles */ - -#define ABSORBING_CIRCLES 0 /* set to 1 for circular scatterers to be absorbing */ - -#define NMAXCIRCLES 1000 /* total number of circles (must be at least NCX*NCY for square grid) */ -#define NCX 9 /* number of circles in x direction */ -#define NCY 20 /* number of circles in y direction */ - -#define LAMBDA 1.0 /* parameter controlling shape of domain */ -#define MU 0.04 /* second parameter controlling shape of billiard */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NPOLY 6 /* number of sides of polygon */ -#define APOLY 0.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define DRAW_BILLIARD 1 /* set to 1 to draw billiard */ -#define DRAW_CONSTRUCTION_LINES 0 /* set to 1 to draw additional construction lines for billiard */ -#define PERIODIC_BC 0 /* set to 1 to enforce periodic boundary conditions when drawing particles */ - -#define RESAMPLE 0 /* set to 1 if particles should be added when dispersion too large */ -#define DEBUG 0 /* draw trajectories, for debugging purposes */ - -/* Simulation parameters */ - -#define NPART 1 /* number of particles */ -#define NPARTMAX 100000 /* maximal number of particles after resampling */ -#define LMAX 0.01 /* minimal segment length triggering resampling */ -#define DMIN 0.02 /* minimal distance to boundary for triggering resampling */ -#define CYCLE 1 /* set to 1 for closed curve (start in all directions) */ -#define SHOWTRAILS 1 /* set to 1 to keep trails of the particles */ - -#define NSTEPS 1150 /* number of frames of movie */ -#define TIME 4000 /* time between movie frames, for fluidity of real-time simulation */ -#define DPHI 0.00001 /* integration step */ -#define NVID 150 /* number of iterations between images displayed on screen */ - -/* Decreasing TIME accelerates the animation and the movie */ -/* For constant speed of movie, TIME*DPHI should be kept constant */ -/* However, increasing DPHI too much deterioriates quality of simulation */ -/* NVID tells how often a picture is drawn in the animation, increase it for faster anim */ -/* For a good quality movie, take for instance TIME = 400, DPHI = 0.00005, NVID = 100 */ - -/* Colors and other graphical parameters */ - -#define NCOLORS 400 /* number of colors */ -#define COLORSHIFT 0 /* hue of initial color */ -#define RAINBOW_COLOR 0 /* set to 1 to use different colors for all particles */ -#define FLOWER_COLOR 0 /* set to 1 to adapt initial colors to flower billiard (tracks vs core) */ -#define NSEG 100 /* number of segments of boundary */ -#define LENGTH 0.05 /* length of velocity vectors */ -#define BILLIARD_WIDTH 2 /* width of billiard */ -#define PARTICLE_WIDTH 2 /* width of particles */ -#define FRONT_WIDTH 3 /* width of wave front */ - -#define BLACK 1 /* set to 1 for black background */ -#define COLOR_OUTSIDE 0 /* set to 1 for colored outside */ -#define OUTER_COLOR 270.0 /* color outside billiard */ -#define PAINT_INT 0 /* set to 1 to paint interior in other color (for polygon/Reuleaux) */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1000 /* final sleeping time */ - -``` - -### 11 August 21 - Wave protection comparison 5: Triangular vs "golden mean" lattice ### - -**Program:** `wave_comparison.c` (variant of `wave_billiard.c`) - -**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.00, 0.0, phi, psi, xy_in);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN_A 20 /* choice of domain shape, see list in global_pdes.c */ -#define B_DOMAIN_B 20 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN_A 1 /* pattern of circles, see list in global_pdes.c */ -#define CIRCLE_PATTERN_B 10 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.8 /* parameter controlling the dimensions of domain */ -#define MU 0.03 /* parameter controlling the dimensions of domain */ -#define MUB 0.03 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 15 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 0 /* set to 1 to replace hardcore boundary by medium with different speed */ -#define OSCILLATE_LEFT 0 /* set to 1 to add oscilating boundary condition on the left */ - -#define OMEGA 0.0035 /* frequency of periodic excitation */ -#define AMPLITUDE 1.0 /* amplitude of periodic excitation */ -#define COURANT 0.02 /* Courant number */ -#define COURANTB 0.0075 /* Courant number in medium B */ -#define GAMMA 0.0 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 3 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 6000 /* number of frames of movie */ -#define NVID 20 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 250 /* time after which to start saving frames */ -#define COMPUTE_ENERGIES 1 /* set to 1 to compute and print energies */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 1 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 1500.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -220.0 /* amplitude of variation of hue for color scheme C_HUE */ - -``` - -### 10 August 21 - Collapse of a "golden mean" wave protection under continuous incoming waves ### - -**Program:** `mangrove.c` (variant of `wave_billiard.c`) - -**Initial condition in function `animation()`:** `init_wave_flat(phi, psi, xy_in);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN 20 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN 10 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.75 /* parameter controlling the dimensions of domain */ -#define MU 0.03 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 15 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 1 /* set to 1 to replace hardcore boundary by medium with different speed */ -#define OSCILLATE_LEFT 1 /* set to 1 to add oscilating boundary condition on the left */ -#define OSCILLATE_TOPBOT 0 /* set to 1 to enforce a planar wave on top and bottom boundary */ - -#define OMEGA 0.002 /* frequency of periodic excitation */ -#define K_BC 0.0 /* spatial period of periodic excitation in y direction */ -#define AMPLITUDE 1.0 /* amplitude of periodic excitation */ -#define COURANT 0.02 /* Courant number */ -#define COURANTB 0.015 /* Courant number in medium B */ -#define GAMMA 5.0e-8 /* damping factor in wave equation */ -#define GAMMAB 1.0e-5 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 3 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 5500 /* number of frames of movie */ -#define NVID 20 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 250 /* time after which to start saving frames */ -#define BOUNDARY_WIDTH 2 /* width of billiard boundary */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 0 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 2500.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -50.0 /* amplitude of variation of hue for color scheme C_HUE */ - -/* mangrove colors */ - -#define MANGROVE_HUE_MIN 180.0 /* color of original mangrove */ -#define MANGROVE_HUE_MAX 0.0 /* color of saturated mangrove */ -#define MANGROVE_EMAX 1.2e-3 /* max energy for mangrove to survive */ - -/* For debugging purposes only */ -#define FLOOR 1 /* set to 1 to limit wave amplitude to VMAX */ -#define VMAX 10.0 /* max value of wave amplitude */ - - -``` - -### 9 August 21 - Comparison between a cloaking device and a simple refracting layer ### - -**Program:** `wave_comparison.c` (variant of `wave_billiard.c`) - -**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.00, 0.0, phi, psi, xy_in);` - -**Parameters in function `init_planar_wave()`:** `if ((xy_in[i][j])||(TWOSPEEDS)) phi[i][j] = 0.002*exp(-dist2/0.0005)*cos(-sqrt(dist2)/0.025);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -0.5 -#define XMAX 3.5 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN_A 20 /* choice of domain shape, see list in global_pdes.c */ -#define B_DOMAIN_B 20 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN_A 6 /* pattern of circles, see list in global_pdes.c */ -#define CIRCLE_PATTERN_B 98 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.12 /* parameter controlling the dimensions of domain */ -#define MU 0.1 /* parameter controlling the dimensions of domain */ -#define MUB 0.1 /* parameter controlling the dimensions of domain in lower panel */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 3 /* number of grid point for grid of disks */ -#define NGRIDY 3 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 1 /* set to 1 to replace hardcore boundary by medium with different speed */ -#define OSCILLATE_LEFT 1 /* set to 1 to add oscilating boundary condition on the left */ - -#define OMEGA 0.0035 /* frequency of periodic excitation */ -#define AMPLITUDE 1.0 /* amplitude of periodic excitation */ -#define COURANT 0.02 /* Courant number */ -#define COURANTB 0.0075 /* Courant number in medium B */ -#define GAMMA 0.0 /* damping factor in wave equation */ -#define GAMMA_SIDES 0.0 /* damping factor on boundary */ -#define GAMMA_TOPBOT 0.0 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 0.0 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 0 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 1600 /* number of frames of movie */ -#define NVID 20 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 30 /* time after which to start saving frames */ -#define COMPUTE_ENERGIES 0 /* set to 1 to compute and print energies */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 0 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.4 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 750.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 130.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -130.0 /* amplitude of variation of hue for color scheme C_HUE */ - -``` - -### 8 August 21 - Avoiding a laser in a hexagon with teleporting walls ### - -**Program:** Variant of `particle_billiard.c` (to be published later on) - -**Initial condition in function `animation()`:** `init_drop_config(x_shooter, y_shooter, 0.0, DPI, configs);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define XMIN -1.3 -#define XMAX 2.7 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define SCALING_FACTOR 1.0 /* scaling factor of drawing, needed for flower billiards, otherwise set to 1.0 */ - -/* Choice of the billiard table, see global_particles.c */ - -#define B_DOMAIN 22 /* choice of domain shape */ - -#define CIRCLE_PATTERN 12 /* pattern of circles */ - -#define ABSORBING_CIRCLES 1 /* set to 1 for circular scatterers to be absorbing */ - -#define NMAXCIRCLES 1000 /* total number of circles (must be at least NCX*NCY for square grid) */ -#define NCX 15 /* number of circles in x direction */ -#define NCY 20 /* number of circles in y direction */ - -#define LAMBDA 1.0 /* parameter controlling shape of billiard */ -#define MU 0.015 /* second parameter controlling shape of billiard */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NPOLY 6 /* number of sides of polygon */ -#define APOLY 0.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define DRAW_BILLIARD 1 /* set to 1 to draw billiard */ -#define DRAW_CONSTRUCTION_LINES 1 /* set to 1 to draw additional construction lines for billiard */ -#define PERIODIC_BC 0 /* set to 1 to enforce periodic boundary conditions when drawing particles */ - -#define RESAMPLE 0 /* set to 1 if particles should be added when dispersion too large */ -#define DEBUG 0 /* draw trajectories, for debugging purposes */ - -/* Simulation parameters */ - -#define NPART 5000 /* number of particles */ -#define NPARTMAX 100000 /* maximal number of particles after resampling */ -#define LMAX 0.01 /* minimal segment length triggering resampling */ -#define DMIN 0.02 /* minimal distance to boundary for triggering resampling */ -#define CYCLE 1 /* set to 1 for closed curve (start in all directions) */ -#define SHOWTRAILS 0 /* set to 1 to keep trails of the particles */ -#define SHOWZOOM 1 /* set to 1 to show a zoom (for laser in room of mirrors) */ -#define PRINT_PARTICLE_NUMBER 1 /* set to 1 to print number of non-absorbed particles */ - -#define NSTEPS 9500 /* number of frames of movie */ -#define TIME 1500 /* time between movie frames, for fluidity of real-time simulation */ -#define DPHI 0.000005 /* integration step */ -#define NVID 150 /* number of iterations between images displayed on screen */ - -/* Decreasing TIME accelerates the animation and the movie */ -/* For constant speed of movie, TIME*DPHI should be kept constant */ -/* However, increasing DPHI too much deterioriates quality of simulation */ -/* NVID tells how often a picture is drawn in the animation, increase it for faster anim */ -/* For a good quality movie, take for instance TIME = 400, DPHI = 0.00005, NVID = 100 */ - -/* Colors and other graphical parameters */ - -#define NCOLORS 12 /* number of colors */ -#define COLORSHIFT 0 /* hue of initial color */ -#define RAINBOW_COLOR 1 /* set to 1 to use different colors for all particles */ -#define FLOWER_COLOR 0 /* set to 1 to adapt initial colors to flower billiard (tracks vs core) */ -#define NSEG 100 /* number of segments of boundary */ -#define LENGTH 0.02 /* length of velocity vectors */ -#define BILLIARD_WIDTH 6 /* width of billiard */ -#define PARTICLE_WIDTH 2 /* width of particles */ -#define FRONT_WIDTH 3 /* width of wave front */ - -#define BLACK 1 /* set to 1 for black background */ -#define COLOR_OUTSIDE 0 /* set to 1 for colored outside */ -#define OUTER_COLOR 270.0 /* color outside billiard */ -#define PAINT_INT 0 /* set to 1 to paint interior in other color (for polygon/Reuleaux) */ - - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1000 /* final sleeping time */ - -``` - -### 7 August 21 - Wave protection comparison 4: randomized square grid vs Poisson process ### - -**Program:** `wave_comparison.c` (variant of `wave_billiard.c`) - -**Initial condition in function `animation()`:** `nit_planar_wave(XMIN + 0.01, 0.0, phi, psi, xy_in);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN_A 20 /* choice of domain shape, see list in global_pdes.c */ -#define B_DOMAIN_B 20 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN_A 2 /* pattern of circles, see list in global_pdes.c */ -#define CIRCLE_PATTERN_B 4 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.85 /* parameter controlling the dimensions of domain */ -#define MU 0.03 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 15 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 0 /* set to 1 to replace hardcore boundary by medium with different speed */ - -#define OMEGA 0.9 /* frequency of periodic excitation */ -#define COURANT 0.01 /* Courant number */ -#define COURANTB 0.0075 /* Courant number in medium B */ -#define GAMMA 0.0 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 3 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 5500 /* number of frames of movie */ -#define NVID 40 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 250 /* time after which to start saving frames */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 1 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 750.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -220.0 /* amplitude of variation of hue for color scheme C_HUE */ - -``` - -### 6 August 21 - A wave protection based on the golden mean ### - -**Program:** `wave_billiard.c` - -**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.01, 0.0, phi, psi, xy_in);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -/* setting NX to WINWIDTH and NY to WINHEIGHT increases resolution */ -/* but will multiply run time by 4 */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN 20 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN 10 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.75 /* parameter controlling the dimensions of domain */ -#define MU 0.03 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 15 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 0 /* set to 1 to replace hardcore boundary by medium with different speed */ - -#define OMEGA 0.9 /* frequency of periodic excitation */ -#define COURANT 0.01 /* Courant number */ -#define COURANTB 0.0075 /* Courant number in medium B */ -#define GAMMA 0.0 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 3 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 4500 /* number of frames of movie */ -#define NVID 40 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 250 /* time after which to start saving frames */ -#define BOUNDARY_WIDTH 2 /* width of billiard boundary */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 2 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 750.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -220.0 /* amplitude of variation of hue for color scheme C_HUE */ - -``` - -### 5 August 21 - Reflecting stoppers won't protect you in a laser fight ### - -**Program:** Variant of `particle_billiard.c` (to be published later on) - -**Initial condition in function `animation()`:** `init_drop_config(x_shooter, y_shooter, 0.0, DPI, configs);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -#define WINWIDTH 720 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define XMIN -1.125 -#define XMAX 1.125 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define SCALING_FACTOR 1.0 /* scaling factor of drawing, needed for flower billiards, otherwise set to 1.0 */ - -/* Choice of the billiard table, see global_particles.c */ - -#define B_DOMAIN 21 /* choice of domain shape */ - -#define CIRCLE_PATTERN 11 /* pattern of circles */ - -#define ABSORBING_CIRCLES 0 /* set to 1 for circular scatterers to be absorbing */ - -#define NMAXCIRCLES 1000 /* total number of circles (must be at least NCX*NCY for square grid) */ -#define NCX 15 /* number of circles in x direction */ -#define NCY 20 /* number of circles in y direction */ - -#define LAMBDA 1.0 /* parameter controlling shape of billiard */ -#define MU 0.015 /* second parameter controlling shape of billiard */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NPOLY 8 /* number of sides of polygon */ -#define APOLY 0.25 /* angle by which to turn polygon, in units of Pi/2 */ -#define DRAW_BILLIARD 1 /* set to 1 to draw billiard */ -#define DRAW_CONSTRUCTION_LINES 1 /* set to 1 to draw additional construction lines for billiard */ -#define PERIODIC_BC 0 /* set to 1 to enforce periodic boundary conditions when drawing particles */ - -#define RESAMPLE 0 /* set to 1 if particles should be added when dispersion too large */ -#define DEBUG 0 /* draw trajectories, for debugging purposes */ - -/* Simulation parameters */ - -#define NPART 5000 /* number of particles */ -#define NPARTMAX 100000 /* maximal number of particles after resampling */ -#define LMAX 0.01 /* minimal segment length triggering resampling */ -#define DMIN 0.02 /* minimal distance to boundary for triggering resampling */ -#define CYCLE 1 /* set to 1 for closed curve (start in all directions) */ -#define SHOWTRAILS 0 /* set to 1 to keep trails of the particles */ -#define SHOWZOOM 0 /* set to 1 to show a zoom (for laser in room of mirrors) */ - -#define NSTEPS 1350 /* number of frames of movie */ -#define TIME 1500 /* time between movie frames, for fluidity of real-time simulation */ -#define DPHI 0.000005 /* integration step */ -#define NVID 150 /* number of iterations between images displayed on screen */ - -/* Decreasing TIME accelerates the animation and the movie */ -/* For constant speed of movie, TIME*DPHI should be kept constant */ -/* However, increasing DPHI too much deterioriates quality of simulation */ -/* NVID tells how often a picture is drawn in the animation, increase it for faster anim */ -/* For a good quality movie, take for instance TIME = 400, DPHI = 0.00005, NVID = 100 */ - -/* Colors and other graphical parameters */ - -#define NCOLORS 32 /* number of colors */ -#define COLORSHIFT 0 /* hue of initial color */ -#define RAINBOW_COLOR 1 /* set to 1 to use different colors for all particles */ -#define FLOWER_COLOR 0 /* set to 1 to adapt initial colors to flower billiard (tracks vs core) */ -#define NSEG 100 /* number of segments of boundary */ -#define LENGTH 0.02 /* length of velocity vectors */ -#define BILLIARD_WIDTH 6 /* width of billiard */ -#define PARTICLE_WIDTH 2 /* width of particles */ -#define FRONT_WIDTH 3 /* width of wave front */ - -#define BLACK 1 /* set to 1 for black background */ -#define COLOR_OUTSIDE 0 /* set to 1 for colored outside */ -#define OUTER_COLOR 270.0 /* color outside billiard */ -#define PAINT_INT 0 /* set to 1 to paint interior in other color (for polygon/Reuleaux) */ - - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1000 /* final sleeping time */ - -``` - -### 4 August 21 - Refraction of a wave on a horizontal ellipse ### - -**Program:** `wave_billiard.c` - -**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.01, 0.0, phi, psi, xy_in);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN 1 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN 6 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 1.5 /* parameter controlling the dimensions of domain */ -#define MU 0.005 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 15 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 1 /* set to 1 to replace hardcore boundary by medium with different speed */ - -#define OMEGA 0.9 /* frequency of periodic excitation */ -#define COURANT 0.0075 /* Courant number in medium B */ -#define COURANTB 0.01 /* Courant number */ -#define GAMMA 0.0 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-7 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 2 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 4500 /* number of frames of movie */ -#define NVID 40 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 100 /* time after which to start saving frames */ -#define BOUNDARY_WIDTH 2 /* width of billiard boundary */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 1 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 750.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -220.0 /* amplitude of variation of hue for color scheme C_HUE */ - -``` - -### 3 August 21 - Wave protection comparison 3: regular vs random square grid ### - -**Program:** `wave_comparison.c` (variant of `wave_billiard.c`) - -**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.01, 0.0, phi, psi, xy_in);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -/* setting NX to WINWIDTH and NY to WINHEIGHT increases resolution */ -/* but will multiply run time by 4 */ - -#define XMIN -2.0 -#define XMAX 2.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN_A 20 /* choice of domain shape, see list in global_pdes.c */ -#define B_DOMAIN_B 20 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN_A 0 /* pattern of circles, see list in global_pdes.c */ -#define CIRCLE_PATTERN_B 2 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.75 /* parameter controlling the dimensions of domain */ -#define MU 0.03 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 15 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 0 /* set to 1 to replace hardcore boundary by medium with different speed */ - -#define OMEGA 0.9 /* frequency of periodic excitation */ -#define COURANT 0.01 /* Courant number */ -#define COURANTB 0.0075 /* Courant number in medium B */ -#define GAMMA 0.0 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-6 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 3 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 3000 /* number of frames of movie */ -#define NVID 40 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 250 /* time after which to start saving frames */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 1 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 750.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -220.0 /* amplitude of variation of hue for color scheme C_HUE */ - -``` - -### 2 August 21 - Avoiding a laser in a room of mirrors, long version with close-up and particle counter ### - -**Program:** Variant of `particle_billiard.c` (to be published later on) - -**Initial condition in function `animation()`:** `init_drop_config(x_shooter, y_shooter, 0.0, DPI, configs);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define XMIN -1.3 -#define XMAX 2.7 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define SCALING_FACTOR 1.0 /* scaling factor of drawing, needed for flower billiards, otherwise set to 1.0 */ - - -/* Choice of the billiard table, see global_particles.c */ - -#define B_DOMAIN 21 /* choice of domain shape */ - -#define CIRCLE_PATTERN 11 /* pattern of circles */ - -#define ABSORBING_CIRCLES 1 /* set to 1 for circular scatterers to be absorbing */ - -#define NMAXCIRCLES 1000 /* total number of circles (must be at least NCX*NCY for square grid) */ -#define NCX 15 /* number of circles in x direction */ -#define NCY 20 /* number of circles in y direction */ - -#define LAMBDA 1.0 /* parameter controlling shape of billiard */ -#define MU 0.015 /* second parameter controlling shape of billiard */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NPOLY 8 /* number of sides of polygon */ -#define APOLY 0.25 /* angle by which to turn polygon, in units of Pi/2 */ -#define DRAW_BILLIARD 1 /* set to 1 to draw billiard */ -#define DRAW_CONSTRUCTION_LINES 1 /* set to 1 to draw additional construction lines for billiard */ -#define PERIODIC_BC 0 /* set to 1 to enforce periodic boundary conditions when drawing particles */ - -#define RESAMPLE 0 /* set to 1 if particles should be added when dispersion too large */ -#define DEBUG 0 /* draw trajectories, for debugging purposes */ - -/* Simulation parameters */ - -#define NPART 5000 /* number of particles */ -#define NPARTMAX 100000 /* maximal number of particles after resampling */ -#define LMAX 0.01 /* minimal segment length triggering resampling */ -#define DMIN 0.02 /* minimal distance to boundary for triggering resampling */ -#define CYCLE 1 /* set to 1 for closed curve (start in all directions) */ -#define SHOWTRAILS 0 /* set to 1 to keep trails of the particles */ -#define SHOWZOOM 1 /* set to 1 to show a zoom (for laser in room of mirrors) */ - -#define NSTEPS 8000 /* number of frames of movie */ -#define TIME 1500 /* time between movie frames, for fluidity of real-time simulation */ -#define DPHI 0.000005 /* integration step */ -#define NVID 150 /* number of iterations between images displayed on screen */ - -/* Decreasing TIME accelerates the animation and the movie */ -/* For constant speed of movie, TIME*DPHI should be kept constant */ -/* However, increasing DPHI too much deterioriates quality of simulation */ -/* NVID tells how often a picture is drawn in the animation, increase it for faster anim */ -/* For a good quality movie, take for instance TIME = 400, DPHI = 0.00005, NVID = 100 */ - -/* Colors and other graphical parameters */ - -#define NCOLORS 32 /* number of colors */ -#define COLORSHIFT 0 /* hue of initial color */ -#define RAINBOW_COLOR 1 /* set to 1 to use different colors for all particles */ -#define FLOWER_COLOR 0 /* set to 1 to adapt initial colors to flower billiard (tracks vs core) */ -#define NSEG 100 /* number of segments of boundary */ -#define LENGTH 0.02 /* length of velocity vectors */ -#define BILLIARD_WIDTH 6 /* width of billiard */ -#define PARTICLE_WIDTH 2 /* width of particles */ -#define FRONT_WIDTH 3 /* width of wave front */ - -#define BLACK 1 /* set to 1 for black background */ -#define COLOR_OUTSIDE 0 /* set to 1 for colored outside */ -#define OUTER_COLOR 270.0 /* color outside billiard */ -#define PAINT_INT 0 /* set to 1 to paint interior in other color (for polygon/Reuleaux) */ - - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1000 /* final sleeping time */ - -``` - -### 1 August 21 - A cloaking device, optimized version with longer wavelength ### - -**Program:** `wave_billiard.c` - -**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.00, 0.0, phi, psi, xy_in);` - -**Parameters in `init_planar_wave()`**: -`if ((xy_in[i][j])||(TWOSPEEDS)) phi[i][j] = 0.01*exp(-dist2/0.05)*cos(-sqrt(dist2)/0.025);` - -``` -#define MOVIE 1 /* set to 1 to generate movie */ - -/* General geometrical parameters */ - -#define WINWIDTH 1280 /* window width */ -#define WINHEIGHT 720 /* window height */ - -#define NX 1280 /* number of grid points on x axis */ -#define NY 720 /* number of grid points on y axis */ - -#define XMIN -1.0 -#define XMAX 3.0 /* x interval */ -#define YMIN -1.125 -#define YMAX 1.125 /* y interval for 9/16 aspect ratio */ - -#define JULIA_SCALE 1.0 /* scaling for Julia sets */ - -/* Choice of the billiard table */ - -#define B_DOMAIN 20 /* choice of domain shape, see list in global_pdes.c */ - -#define CIRCLE_PATTERN 6 /* pattern of circles, see list in global_pdes.c */ - -#define P_PERCOL 0.25 /* probability of having a circle in C_RAND_PERCOL arrangement */ -#define NPOISSON 300 /* number of points for Poisson C_RAND_POISSON arrangement */ - -#define LAMBDA 0.2 /* parameter controlling the dimensions of domain */ -#define MU 0.005 /* parameter controlling the dimensions of domain */ -#define NPOLY 3 /* number of sides of polygon */ -#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ -#define MDEPTH 4 /* depth of computation of Menger gasket */ -#define MRATIO 3 /* ratio defining Menger gasket */ -#define MANDELLEVEL 1000 /* iteration level for Mandelbrot set */ -#define MANDELLIMIT 10.0 /* limit value for approximation of Mandelbrot set */ -#define FOCI 1 /* set to 1 to draw focal points of ellipse */ -#define NGRIDX 15 /* number of grid point for grid of disks */ -#define NGRIDY 20 /* number of grid point for grid of disks */ - -/* You can add more billiard tables by adapting the functions */ -/* xy_in_billiard and draw_billiard below */ - -/* Physical parameters of wave equation */ - -#define TWOSPEEDS 0 /* set to 1 to replace hardcore boundary by medium with different speed */ - -#define OMEGA 0.9 /* frequency of periodic excitation */ -#define COURANT 0.01 /* Courant number */ -#define COURANTB 0.0075 /* Courant number in medium B */ -#define GAMMA 0.0 /* damping factor in wave equation */ -#define GAMMA_SIDES 1.0e-4 /* damping factor on boundary */ -#define GAMMA_TOPBOT 1.0e-7 /* damping factor on boundary */ -#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ -#define KAPPA_SIDES 5.0e-4 /* "elasticity" term on absorbing boundary */ -#define KAPPA_TOPBOT 0.0 /* "elasticity" term on absorbing boundary */ -/* The Courant number is given by c*DT/DX, where DT is the time step and DX the lattice spacing */ -/* The physical damping coefficient is given by GAMMA/(DT)^2 */ -/* Increasing COURANT speeds up the simulation, but decreases accuracy */ -/* For similar wave forms, COURANT^2*GAMMA should be kept constant */ - -/* Boundary conditions, see list in global_pdes.c */ - -#define B_COND 2 - -/* Parameters for length and speed of simulation */ - -#define NSTEPS 3500 /* number of frames of movie */ -#define NVID 40 /* number of iterations between images displayed on screen */ -#define NSEG 100 /* number of segments of boundary */ -#define INITIAL_TIME 30 /* time after which to start saving frames */ -#define BOUNDARY_WIDTH 1 /* width of billiard boundary */ - -#define PAUSE 1000 /* number of frames after which to pause */ -#define PSLEEP 1 /* sleep time during pause */ -#define SLEEP1 1 /* initial sleeping time */ -#define SLEEP2 1 /* final sleeping time */ - -/* Plot type, see list in global_pdes.c */ - -#define PLOT 0 - -/* Color schemes */ - -#define BLACK 1 /* background */ - -#define COLOR_SCHEME 1 /* choice of color scheme, see list in global_pdes.c */ - -#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ -#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ -#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ -#define E_SCALE 750.0 /* scaling factor for energy representation */ - -#define COLORHUE 260 /* initial hue of water color for scheme C_LUM */ -#define COLORDRIFT 0.0 /* how much the color hue drifts during the whole simulation */ -#define LUMMEAN 0.5 /* amplitude of luminosity variation for scheme C_LUM */ -#define LUMAMP 0.3 /* amplitude of luminosity variation for scheme C_LUM */ -#define HUEMEAN 220.0 /* mean value of hue for color scheme C_HUE */ -#define HUEAMP -220.0 /* amplitude of variation of hue for color scheme C_HUE */ - -```