diff --git a/Parameters_July21.md b/Parameters_July21.md new file mode 100644 index 0000000..37f5324 --- /dev/null +++ b/Parameters_July21.md @@ -0,0 +1,3682 @@ +### Parameter values for YouTube simulations ### + +Created by **Nils Berglund** and optimized by **Marco Mancini** + +C code for videos on YouTube Channel https://www.youtube.com/c/NilsBerglund + +Below are parameter values used for different simulations, as well as initial conditions used in +function animation. Some simulations use variants of the published code. The list is going to be +updated gradually. + +I changed the way the energy density is computed around 7 July. If you use a recent version of the code, +it may be necessary to modify two constants as follows: +``` +#define SLOPE 1.0 /* sensitivity of color on wave amplitude */ +#define E_SCALE 750.0 /* scaling factor for energy representation */ +``` + +### 31 July 21 - An elliptical lens ### + +**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 0.66666666666 /* 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 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 300 /* 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 */ +``` + + +### 30 July 21 - Wave protection comparison 2: square grid versus triangular 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 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 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 4000 /* 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 */ + +``` + + +### 29 July 21 - Laser in a room of mirrors, with trails and close-up ### + +**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);` + +The effect of showing trails is achieved by switching off double-buffering like this: + +``` +int main(int argc, char** argv) +{ + glutInit(&argc, argv); + if (SHOWTRAILS) glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH); + else glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); + glutInitWindowSize(WINWIDTH,WINHEIGHT); + glutCreateWindow("Billiard animation"); + + init(); + + glutDisplayFunc(display); + + glutMainLoop(); + + return 0; +} +``` + +``` +#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 3 /* 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 1 /* 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 2000 /* 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.007 /* 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 */ + +``` + + +### 28 July 21 - An invisibility cloak (first optimized version) ### + +**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 -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 2000 /* 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 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 */ + +``` + +### 27 July 21 - Wave protection comparison 1: Square grid of obstacles vs nothing ### + +**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 */ + +#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 99 /* pattern of circles, see list in global_pdes.c */ +#define CIRCLE_PATTERN_B 0 /* 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 2250 /* 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 */ + +``` + +### 26 July 21 - Right as rain: Light encountering a raindrop with index of refraction 1.333 ### + +**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 3 /* choice of domain shape, see list in global_pdes.c */ + +#define CIRCLE_PATTERN 5 /* 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.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.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 2 + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 6000 /* 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 */ + +``` + +### 25 July 21 - How to avoid being hit by a laser in a room of mirrors ### + +**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 -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 3 /* 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 NSTEPS 2000 /* 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 16 /* 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 */ + +``` + +### 24 July 21 - A cloaking device (non-optimized version) ### + +**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 -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 5 /* 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.4 /* 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.003 /* 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 2000 /* 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 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 0.7 /* 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 */ + +``` + +### 23 July 21 - There's something in my prism and it's not me: Planar wave refracting through a prism ### + +**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 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 -1.125 +#define XMAX 1.125 /* x interval */ +#define YMIN -0.9 +#define YMAX 1.35 /* y interval for 9/16 aspect ratio */ + +#define JULIA_SCALE 1.0 /* scaling for Julia sets */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 8 /* choice of domain shape, see list in global_pdes.c */ + +#define CIRCLE_PATTERN 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.75 /* parameter controlling the dimensions of domain */ +#define MU 0.025 /* 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.005 /* Courant number */ +#define COURANTB 0.01 /* Courant number in medium B */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define GAMMA_BC 1.0e-6 /* damping factor on boundary */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +#define KAPPA_BC 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 1350 /* number of frames of movie */ +#define NVID 70 /* number of iterations between images displayed on screen */ +#define NSEG 100 /* number of segments of boundary */ +#define INITIAL_TIME 20 /* 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 */ + +``` + +### 22 July 21 - Refraction of a wave on region with higher propagation speed ### + +**Program:** `wave_billiard.c` + +**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.05, 0.0, phi, psi, xy_in);` + +Up to this date, constants were not yet moved to files `global_pdes.c` or `global_particles.c` + +``` +#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.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 3 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_HEX 13 /* haxagonl grid of disks */ +#define D_DISK_PERCOL 14 /* random grid of percolation type */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ +#define D_MENGER_ROTATED 17 /* rotated Menger-Sierpinski carpet */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 0.75 /* parameter controlling the dimensions of domain */ +#define MU 0.025 /* parameter controlling the dimensions of domain */ +#define NPOLY 5 /* number of sides of polygon */ +#define APOLY 2.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.01 /* Courant number */ +#define COURANTB 0.02 /* Courant number in medium B */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define GAMMA_BC 1.0e-4 /* damping factor on boundary */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +#define KAPPA_BC 5.0e-4 /* "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 */ + +#define B_COND 3 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ +#define BC_VPER_HABS 3 /* vertically periodic and horizontally absorbing boundary conditions */ + +/* 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 */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 7000 /* number of frames of movie */ +#define NVID 50 /* 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 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 */ + +#define PLOT 1 + +#define P_AMPLITUDE 0 /* plot amplitude of wave */ +#define P_ENERGY 1 /* plot energy of wave */ +#define P_MIXED 2 /* plot amplitude in upper half, energy in lower half */ + + +/* Color schemes */ + +#define BLACK 1 /* background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ + +#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 */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 21 July 21 - Close encounters of the nerd kind: 30,000 particles smashing into a triangular grid of circles ### + +**Program:** `particle_billiard.c` + +**Initial condition in function `animation()`:** `init_line_config(-1.25, -0.5, -1.25, 0.5, 0.0, configs);` + +``` +#define MOVIE 0 /* 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 2 /* pattern of circles */ + +#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.75 /* parameter controlling shape of billiard */ +#define MU 0.035 /* 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 30000 /* 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 NSTEPS 3000 /* number of frames of movie */ +#define TIME 1000 /* 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 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.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 */ + + +``` + +### 20 July 21 - The amplitude of the fish ### + +**Program:** `wave_billiard.c` + +**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.05, 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.1 /* scaling for Julia sets */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 18 /* choice of domain shape */ +/* superseded in later versions by D_DOMAIN 20 with D_CIRCLES 20 + and CIRCLE_PATTERN 4 with C_RAND_POISSON 4 */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_RANDOM 13 /* grid of randomly displaced disks */ +#define D_DISK_PERCOL 14 /* random grid of percolation type */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ +#define D_MENGER_ROTATED 17 /* rotated Menger-Sierpinski carpet */ + +#define D_DISK_POISSON 18 /* random grid given by Poisson process */ +/* superseded in later versions by D_DOMAIN 20 with D_CIRCLES 20 + and CIRCLE_PATTERN 4 with C_RAND_POISSON 4 */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 0.85 /* parameter controlling the dimensions of domain */ +#define MU 0.02 /* parameter controlling the dimensions of domain */ +#define NPOLY 8 /* 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 30 /* number of grid point for grid of disks */ +#define NGRIDY 40 /* number of grid point for grid of disks */ +#define NSCATTERERS 300 /* number of scatterers for Poisson random grid */ + +/* You can add more billiard tables by adapting the functions */ +/* xy_in_billiard and draw_billiard below */ + +/* Physical parameters of wave equation */ + +#define OMEGA 0.9 /* frequency of periodic excitation */ +#define COURANT 0.01 /* Courant number */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define GAMMA_BC 1.0e-4 /* damping factor on boundary */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +#define KAPPA_BC 5.0e-4 /* "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 */ + +#define B_COND 3 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ +#define BC_VPER_HABS 3 /* vertically periodic and horizontally absorbing boundary conditions */ + + +/* 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 */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 5800 /* 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 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 */ + +#define PLOT 0 + +#define P_AMPLITUDE 0 /* plot amplitude of wave */ +#define P_ENERGY 1 /* plot energy of wave */ +#define P_MIXED 2 /* plot amplitude in upper half, energy in lower half */ + + +/* Color schemes */ + +#define BLACK 1 /* background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ + +#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 1000.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 240.0 /* mean value of hue for color scheme C_HUE */ +#define HUEAMP -240.0 /* amplitude of variation of hue for color scheme C_HUE */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + + +``` + +### 19 July 21 - 10,000 particles on a genus 10 surface ### + +**Program:** `particle_billiard.c` + +**Initial condition in function `animation()`:** `init_drop_config(0.0, 0.0, PI, DPI, 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 */ + +#define B_DOMAIN 14 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_REULEAUX 9 /* Reuleaux and star shapes */ +#define D_FLOWER 10 /* Bunimovich flower */ +#define D_ALT_REU 11 /* alternating between star and Reuleaux */ +#define D_ANGLE 12 /* angular sector */ +#define D_LSHAPE 13 /* L-shaped billiard for conical singularity */ +#define D_GENUSN 14 /* polygon with identifies opposite sides */ + +#define LAMBDA 0.75 /* parameter controlling shape of billiard */ +#define MU 0.1 /* second parameter controlling shape of billiard */ +#define FOCI 1 /* set to 1 to draw focal points of ellipse */ +#define NPOLY 40 /* 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 10002 /* 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 NSTEPS 7650 /* number of frames of movie */ +#define TIME 1000 /* 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 20 /* number of colors */ +#define COLORSHIFT 200 /* 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 3 /* 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 */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 18 July 21 - Refraction (and diffraction) through a raindrop ### + +**Program:** `wave_billiard.c` + +**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.05, 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 -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 3 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_HEX 13 /* haxagonl grid of disks */ +#define D_DISK_PERCOL 14 /* random grid of percolation type */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ +#define D_MENGER_ROTATED 17 /* rotated Menger-Sierpinski carpet */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 0.75 /* parameter controlling the dimensions of domain */ +#define MU 0.025 /* parameter controlling the dimensions of domain */ +#define NPOLY 8 /* 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.01 /* Courant number */ +#define COURANTB 0.003 /* Courant number in medium B */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define GAMMA_BC 1.0e-4 /* damping factor on boundary */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +#define KAPPA_BC 5.0e-4 /* "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 */ + +#define B_COND 3 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ +#define BC_VPER_HABS 3 /* vertically periodic and horizontally absorbing boundary conditions */ + +/* 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 */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 9000 /* number of frames of movie */ +#define NVID 50 /* number of iterations between images displayed on screen */ +#define NSEG 100 /* number of segments of boundary */ +#define INITIAL_TIME 300 /* 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 */ + +#define PLOT 1 + +#define P_AMPLITUDE 0 /* plot amplitude of wave */ +#define P_ENERGY 1 /* plot energy of wave */ +#define P_MIXED 2 /* plot amplitude in upper half, energy in lower half */ + + +/* Color schemes */ + +#define BLACK 1 /* background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ + +#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 */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 17 July 21 - Mystery billiard 8 ### + +**Program:** variant of `particle_billiard.c` + +**Initial condition in function `animation()`:** `init_drop_config(0.0, 0.0, -0.1*PID, 0.1*PID, 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 */ + +#define B_DOMAIN 20 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_REULEAUX 9 /* Reuleaux and star shapes */ +#define D_FLOWER 10 /* Bunimovich flower */ +#define D_ALT_REU 11 /* alternating between star and Reuleaux */ +#define D_ANGLE 12 /* angular sector */ +#define D_LSHAPE 13 /* L-shaped billiard for conical singularity */ +#define D_GENUSN 14 /* polygon with identifies opposite sides */ + +#define D_CIRCLES 20 /* several circles */ + +#define NCIRCLES 4 /* number of circles */ +#define CIRCLE_PATTERN 0 /* pattern of circles */ + +#define C_SQUARE 0 /* square grid of circles */ + +#define LAMBDA 2.0 /* parameter controlling shape of billiard */ +#define MU 0.7 /* 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.0 /* angle by which to turn polygon, in units of Pi/2 */ +#define DRAW_BILLIARD 0 /* 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 4000 /* 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 NSTEPS 1350 /* number of frames of movie */ +#define TIME 750 /* time between movie frames, for fluidity of real-time simulation */ +#define DPHI 0.000015 /* integration step */ +#define NVID 50 /* 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 15 /* 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.02 /* length of velocity vectors */ +#define BILLIARD_WIDTH 3 /* 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 */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 16 July 21 - So long and thanks for all the fish - linear wave hitting a Poisson process of obstacles ### + +**Program:** `wave_billiard.c` + +**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.05, 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.1 /* scaling for Julia sets */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 18 /* choice of domain shape */ +/* superseded in later versions by D_DOMAIN 20 with D_CIRCLES 20 + and CIRCLE_PATTERN 4 with C_RAND_POISSON 4 */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_RANDOM 13 /* grid of randomly displaces disks */ +#define D_DISK_PERCOL 14 /* random grid of percolation type */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ +#define D_MENGER_ROTATED 17 /* rotated Menger-Sierpinski carpet */ + +#define D_DISK_POISSON 18 /* random grid given by Poisson process */ +/* superseded in later versions by D_DOMAIN 20 with D_CIRCLES 20 + and CIRCLE_PATTERN 4 with C_RAND_POISSON 4 */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 0.85 /* parameter controlling the dimensions of domain */ +#define MU 0.02 /* parameter controlling the dimensions of domain */ +#define NPOLY 8 /* 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 30 /* number of grid point for grid of disks */ +#define NGRIDY 40 /* number of grid point for grid of disks */ +#define NSCATTERERS 300 /* number of scatterers for Poisson random grid */ + +/* You can add more billiard tables by adapting the functions */ +/* xy_in_billiard and draw_billiard below */ + +/* Physical parameters of wave equation */ + +#define OMEGA 0.9 /* frequency of periodic excitation */ +#define COURANT 0.01 /* Courant number */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define GAMMA_BC 1.0e-4 /* damping factor on boundary */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +#define KAPPA_BC 5.0e-4 /* "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 */ + +#define B_COND 3 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ +#define BC_VPER_HABS 3 /* vertically periodic and horizontally absorbing boundary conditions */ + + +/* 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 */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 5800 /* 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 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 */ + +#define PLOT 2 + +#define P_AMPLITUDE 0 /* plot amplitude of wave */ +#define P_ENERGY 1 /* plot energy of wave */ +#define P_MIXED 2 /* plot amplitude in upper half, energy in lower half */ + + +/* Color schemes */ + +#define BLACK 1 /* background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ + +#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 1000.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 240.0 /* mean value of hue for color scheme C_HUE */ +#define HUEAMP -240.0 /* amplitude of variation of hue for color scheme C_HUE */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 15 July 21 - Octagonal representation of a genus 2 surface ### + +**Program:** `particle_billiard.c` + +**Initial condition in function `animation()`:** `init_drop_config(0.0, 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 */ + +#define B_DOMAIN 14 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_REULEAUX 9 /* Reuleaux and star shapes */ +#define D_FLOWER 10 /* Bunimovich flower */ +#define D_ALT_REU 11 /* alternating between star and Reuleaux */ +#define D_ANGLE 12 /* angular sector */ +#define D_LSHAPE 13 /* L-shaped billiard for conical singularity */ +#define D_GENUSN 14 /* polygon with identifies opposite sides */ + +#define LAMBDA 0.75 /* parameter controlling shape of billiard */ +#define MU 0.1 /* 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 20002 /* 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 NSTEPS 7000 /* number of frames of movie */ +#define TIME 1000 /* 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 16 /* number of colors */ +#define COLORSHIFT 200 /* 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 3 /* 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 */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 14 July 21 - Young's double-slit experiment, evolution of the phase ### + +**Program:** `schrodinger.c` + +**Initial condition in function `animation()`:** `init_coherent_state(-0.8, 0.0, 20.0, 0.0, 0.25, phi, psi, xy_in);` + +``` +#define MOVIE 1 /* set to 1 to generate movie */ + +/* 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 -1.25 +#define XMAX 1.25 /* x interval */ +#define YMIN -1.25 +#define YMAX 1.25 /* y interval for 9/16 aspect ratio */ + +#define JULIA_SCALE 1.0 /* scaling for Julia sets */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 9 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_HEX 13 /* haxagonl grid of disks */ +#define D_DISK_PERCOL 14 /* random grid of percolation type */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ +#define D_MENGER_ROTATED 17 /* rotated Menger-Sierpinski carpet */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 0.3 /* parameter controlling the dimensions of domain */ +#define MU 0.05 /* parameter controlling the dimensions of domain */ +#define NPOLY 6 /* number of sides of polygon */ +#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ +#define MDEPTH 3 /* 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 in sub_wave.c */ + +/* Physical patameters of wave equation */ + +#define DT 0.000000005 +#define HBAR 1.0 + +/* Boundary conditions */ + +#define B_COND 0 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 1200 /* number of frames of movie */ +#define NVID 1200 /* number of iterations between images displayed on screen */ +#define NSEG 100 /* number of segments of 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 */ + +/* 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 */ + + +/* Plot type */ + +#define PLOT 1 + +#define P_MODULE 0 /* plot module of wave function squared */ +#define P_PHASE 1 /* plot phase of wave function */ +#define P_REAL 2 /* plot real part */ +#define P_IMAGINARY 3 /* plot imaginary part */ + +/* Color schemes */ + +#define BLACK 1 /* black background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ +#define C_PHASE 2 /* color scheme shows phase */ + +#define SCALE 1 /* set to 1 to adjust color scheme to variance of field */ +#define SLOPE 0.75 /* sensitivity of color on wave amplitude */ +#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ + +#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 150.0 /* mean value of hue for color scheme C_HUE */ +#define HUEAMP -150.0 /* amplitude of variation of hue for color scheme C_HUE */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 +``` + +### 13 July 21 - Planar wave hitting a percolation-style random arrangement of obstacles ### + +**Program:** Variant of `wave_billiard.c` + +**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.05, 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.1 /* scaling for Julia sets */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 14 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_RANDOM 13 /* grid of randomly displaces disks */ +#define D_DISK_PERCOL 14 /* random grid of percolation type */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 1.0 /* parameter controlling the dimensions of domain */ +#define MU 0.02 /* parameter controlling the dimensions of domain */ +#define NPOLY 8 /* 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 30 /* number of grid point for grid of disks */ +#define NGRIDY 40 /* 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 OMEGA 0.9 /* frequency of periodic excitation */ +#define COURANT 0.01 /* Courant number */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define GAMMA_BC 1.0e-4 /* damping factor on boundary */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +#define KAPPA_BC 5.0e-4 /* "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 */ + +#define B_COND 3 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ +#define BC_VPER_HABS 3 /* vertically periodic and horizontally absorbing boundary conditions */ + + +/* 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 */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 6000 /* 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 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 */ + +#define PLOT 2 + +#define P_AMPLITUDE 0 /* plot amplitude of wave */ +#define P_ENERGY 1 /* plot energy of wave */ +#define P_MIXED 2 /* plot amplitude in upper half, energy in lower half */ + + +/* Color schemes */ + +#define BLACK 1 /* background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ + +#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 1000.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 240.0 /* mean value of hue for color scheme C_HUE */ +#define HUEAMP -240.0 /* amplitude of variation of hue for color scheme C_HUE */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 12 July 21 - Expanding perfect wave front on a genus 2 surface, generic initial point ### + +**Program:** `drop_billiard.c` + +**Initial condition in function `animation()`:** `init_drop_config(-1.0 + 0.3*sqrt(2.0), -1.0 + 0.5*sqrt(2.0), 0.0, DPI, configs);` + +``` +#define MOVIE 0 /* 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 13 /* choice of domain shape */ + +#define CIRCLE_PATTERN 0 /* pattern of circles */ + +#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.124950941 /* sin(36°)/sin(31.5°) for 5-star shape with 45° angles */ +#define MU 0.1 /* second parameter controlling shape of billiard */ +#define FOCI 1 /* set to 1 to draw focal points of ellipse */ +#define NPOLY 5 /* number of sides of polygon */ +#define APOLY -1.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 NPART 50000 /* number of particles */ +#define NPARTMAX 100000 /* maximal number of particles after resampling */ + +#define NSTEPS 5500 /* number of frames of movie */ +#define TIME 40 /* time between movie frames, for fluidity of real-time simulation */ +#define DPHI 0.0001 /* integration step */ +#define NVID 20 /* 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 */ +/* For a good quality movie, take for instance TIME = 50, DPHI = 0.0002 */ + +/* simulation parameters */ + +#define LMAX 0.01 /* minimal segment length triggering resampling */ +#define LPERIODIC 0.1 /* lines longer than this are not drawn (useful for Sinai billiard) */ +#define LCUT 2.0 /* controls the max size of segments not considered as being cut */ +#define DMIN 0.02 /* minimal distance to boundary for triggering resampling */ +#define CYCLE 0 /* set to 1 for closed curve (start in all directions) */ +#define ORDER_COLORS 1 /* set to 1 if colors should be drawn in order */ + +/* color and other graphical parameters */ + +#define NCOLORS 16 /* number of colors */ +#define COLORSHIFT 200 /* hue of initial color */ +#define RAINBOW_COLOR 1 /* set to 1 to use different colors for all particles */ +#define NSEG 100 /* number of segments of boundary */ +#define BILLIARD_WIDTH 4 /* width of billiard */ +#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 300.0 /* color outside billiard */ +#define PAINT_INT 1 /* set to 1 to paint interior in other color (for polygon) */ + + +#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 100 /* final sleeping time */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 11 July 21 - Wave crashing into a percolation-style random arrangement of obstacles ### + +**Program:** Variant of `wave_billiard.c` + +**Initial condition in function `animation()`:** `init_wave(-1.5, 0.0, phi, psi, phi_tmp, psi_tmp, 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.1 /* scaling for Julia sets */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 14 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_RANDOM 13 /* grid of randomly displaces disks */ +#define D_DISK_PERCOL 14 /* random grid of percolation type */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 1.0 /* parameter controlling the dimensions of domain */ +#define MU 0.02 /* parameter controlling the dimensions of domain */ +#define NPOLY 8 /* 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 30 /* number of grid point for grid of disks */ +#define NGRIDY 40 /* 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 OMEGA 0.9 /* frequency of periodic excitation */ +#define COURANT 0.01 /* Courant number */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +/* 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 */ + +#define B_COND 2 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ +#define BC_VPER_HABS 3 /* vertically periodic and horizontally absorbing boundary conditions */ + + +/* 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 */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 3800 /* 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 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 */ + +#define PLOT 2 + +#define P_AMPLITUDE 0 /* plot amplitude of wave */ +#define P_ENERGY 1 /* plot energy of wave */ +#define P_MIXED 2 /* plot amplitude in upper half, energy in lower half */ + + +/* Color schemes */ + +#define BLACK 1 /* background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ + +#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 1000.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 240.0 /* mean value of hue for color scheme C_HUE */ +#define HUEAMP -240.0 /* amplitude of variation of hue for color scheme C_HUE */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 10 July 21 - Doors and corners, kid - Billiard in a 30 degrees angle ### + +**Program:** Variant of `particle_billiard.c` + +**Initial condition in function `animation()`:** `init_drop_config(-1.2, 0.4, -0.35*PID, -0.15*PID, configs);` + +``` +#define MOVIE 1 /* set to 1 to generate movie */ + +#define WINWIDTH 720 /* window width */ +#define WINHEIGHT 720 /* window height */ + +#define XMIN -1.25 +#define XMAX 1.25 /* x interval */ +#define YMIN -1.25 +#define YMAX 1.25 /* 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 */ + +#define B_DOMAIN 12 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_REULEAUX 9 /* Reuleaux and star shapes */ +#define D_FLOWER 10 /* Bunimovich flower */ +#define D_ALT_REU 11 /* alternating between star and Reuleaux */ +#define D_ANGLE 12 /* angular sector */ +#define D_LSHAPE 13 /* L-shaped billiard for conical singularity */ + +#define LAMBDA 0.166666666666 /* parameter controlling shape of billiard */ +#define MU 0.1 /* 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 2.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 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 NSTEPS 500 /* number of frames of movie */ +#define TIME 1000 /* time between movie frames, for fluidity of real-time simulation */ +#define DPHI 0.000006 /* 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 6 /* number of colors */ +#define COLORSHIFT 0 /* hue of initial color */ +#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.04 /* length of velocity vectors */ +#define BILLIARD_WIDTH 3 /* 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 */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 9 July 21 - Soft obstacles: a wave encountering a grid of refracting circles ### + +**Program:** Variant of `wave_billiard.c` + +**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.02, 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.1 /* scaling for Julia sets */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 13 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_HEX 13 /* haxagonl grid of disks */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 1.0 /* parameter controlling the dimensions of domain */ +#define MU 0.025 /* parameter controlling the dimensions of domain */ +#define NPOLY 8 /* 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 OMEGA 0.9 /* frequency of periodic excitation */ +#define COURANTA 0.01 /* Courant number in medium A */ +#define COURANTB 0.005 /* Courant number in medium B */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +/* 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 */ + +#define B_COND 3 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ +#define BC_VPER_HABS 3 /* vertically periodic and horizontally absorbing boundary conditions */ + +/* 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 */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 5500 /* 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 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 */ + +#define PLOT 2 + +#define P_AMPLITUDE 0 /* plot amplitude of wave */ +#define P_ENERGY 1 /* plot energy of wave */ +#define P_MIXED 2 /* plot amplitude in upper half, energy in lower half */ + + +/* Color schemes */ + +#define BLACK 1 /* background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ + +#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 1000.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 */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 8 July 21 - Expanding perfect wave front on a genus 2 surface ### + +**Program:** `drop_billiard.c` + +**Initial condition in function `animation()`:** `init_drop_config(-0.5, -0.5, 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 -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 */ + +#define B_DOMAIN 13 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_REULEAUX 9 /* Reuleaux and star shapes */ +#define D_FLOWER 10 /* Bunimovich flower */ +#define D_ALT_REU 11 /* alternating between star and Reuleaux */ +#define D_ANGLE 12 /* angular sector */ +#define D_LSHAPE 13 /* L-shaped billiard for conical singularity */ + +#define LAMBDA 1.124950941 /* sin(36°)/sin(31.5°) for 5-star shape with 45° angles */ +#define MU 0.1 /* second parameter controlling shape of billiard */ +#define FOCI 1 /* set to 1 to draw focal points of ellipse */ +#define NPOLY 5 /* number of sides of polygon */ +#define APOLY -1.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 NPART 50000 /* number of particles */ +#define NPARTMAX 100000 /* maximal number of particles after resampling */ + +#define NSTEPS 5000 /* number of frames of movie */ +#define TIME 40 /* time between movie frames, for fluidity of real-time simulation */ +#define DPHI 0.0001 /* integration step */ +#define NVID 20 /* 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 */ +/* For a good quality movie, take for instance TIME = 50, DPHI = 0.0002 */ + +/* simulation parameters */ + +#define LMAX 0.01 /* minimal segment length triggering resampling */ +#define LPERIODIC 0.1 /* lines longer than this are not drawn (useful for Sinai billiard) */ +#define LCUT 2.0 /* controls the max size of segments not considered as being cut */ +#define DMIN 0.02 /* minimal distance to boundary for triggering resampling */ +#define CYCLE 0 /* set to 1 for closed curve (start in all directions) */ +#define ORDER_COLORS 1 /* set to 1 if colors should be drawn in order */ + +/* color and other graphical parameters */ + +#define NCOLORS 16 /* number of colors */ +#define COLORSHIFT 200 /* hue of initial color */ +#define RAINBOW_COLOR 1 /* set to 1 to use different colors for all particles */ +#define NSEG 100 /* number of segments of boundary */ +#define BILLIARD_WIDTH 4 /* width of billiard */ +#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 300.0 /* color outside billiard */ +#define PAINT_INT 1 /* set to 1 to paint interior in other color (for polygon) */ + + +#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 100 /* final sleeping time */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 7 July 21 - Planar wave encountering a hexagonal grid (amplitude and energy) ### + +**Program:** `wave_billiard.c` + +**Initial condition in function `animation()`:** `init_planar_wave(XMIN + 0.02, 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.1 /* scaling for Julia sets */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 13 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_HEX 13 /* haxagonl grid of disks */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 1.0 /* parameter controlling the dimensions of domain */ +#define MU 0.025 /* parameter controlling the dimensions of domain */ +#define NPOLY 8 /* 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 OMEGA 0.9 /* frequency of periodic excitation */ +#define COURANTA 0.01 /* Courant number in medium A */ +#define COURANTB 0.005 /* Courant number in medium B */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +/* 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 */ + +#define B_COND 3 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ +#define BC_VPER_HABS 3 /* vertically periodic and horizontally absorbing boundary conditions */ + +/* 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 */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 5500 /* 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 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 */ + +#define PLOT 2 + +#define P_AMPLITUDE 0 /* plot amplitude of wave */ +#define P_ENERGY 1 /* plot energy of wave */ +#define P_MIXED 2 /* plot amplitude in upper half, energy in lower half */ + + +/* Color schemes */ + +#define BLACK 1 /* background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ + +#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 1000.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 */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + + +### 6 July 21 - Working the angle - 108 degrees, or why regular pentagons cut wave fronts into pieces ### + +**Program:** Variant of `particle_billiard.c` + +**Initial condition in function `animation()`:** `init_drop_config(-1.0, 1.0, -0.65*PID, -0.4*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 */ + +// #define XMIN -1.8 +// #define XMAX 1.8 /* x interval */ +// #define YMIN -0.91 +// #define YMAX 1.115 /* y interval for 9/16 aspect ratio */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 12 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_REULEAUX 9 /* Reuleaux and star shapes */ +#define D_FLOWER 10 /* Bunimovich flower */ +#define D_ALT_REU 11 /* alternating between star and Reuleaux */ +#define D_ANGLE 12 /* angular sector */ + +#define LAMBDA 0.6 /* parameter controlling shape of billiard */ +#define MU 0.1 /* 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 2.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 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 NSTEPS 650 /* number of frames of movie */ +#define TIME 1000 /* time between movie frames, for fluidity of real-time simulation */ +#define DPHI 0.000006 /* 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 6 /* number of colors */ +#define COLORSHIFT 0 /* hue of initial color */ +#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.04 /* length of velocity vectors */ +#define BILLIARD_WIDTH 3 /* 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 */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 5 July 21 - Waves colliding with a hexagonal grid ### + +**Program:** `wave_billiard.c` + +**Initial condition in function `animation()`:** `init_wave(-1.5, 0.0, phi, psi, phi_tmp, psi_tmp, 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.1 /* scaling for Julia sets */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 13 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_HEX 13 /* haxagonl grid of disks */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 1.0 /* parameter controlling the dimensions of domain */ +#define MU 0.025 /* parameter controlling the dimensions of domain */ +#define NPOLY 8 /* 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 OMEGA 0.9 /* frequency of periodic excitation */ +#define COURANT 0.01 /* Courant number */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +/* 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 */ + +#define B_COND 2 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ + + +/* 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 */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 8000 /* 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 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 */ + +#define PLOT 0 + +#define P_AMPLITUDE 0 /* plot amplitude of wave */ +#define P_ENERGY 1 /* plot energy of wave */ + + +/* Color schemes */ + +#define BLACK 1 /* background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ + +#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 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 -240.0 /* amplitude of variation of hue for color scheme C_HUE */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` +### 4 July 21 - A "billiard" with a 1080 degrees angle ### + +**Program:** `particle_billiard.c` + +**Initial condition in function `animation()`:** `init_line_config(0.0, -1.0, -1.0, 1.0, atan(0.5), 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 */ + +#define B_DOMAIN 13 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_REULEAUX 9 /* Reuleaux and star shapes */ +#define D_FLOWER 10 /* Bunimovich flower */ +#define D_ALT_REU 11 /* alternating between star and Reuleaux */ +#define D_ANGLE 12 /* angular sector */ +#define D_LSHAPE 13 /* L-shaped billiard for conical singularity */ + +#define LAMBDA 0.75 /* parameter controlling shape of billiard */ +#define MU 0.1 /* 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 2.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 2001 /* 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 NSTEPS 1788 /* number of frames of movie */ +#define TIME 1000 /* 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.04 /* length of velocity vectors */ +#define BILLIARD_WIDTH 3 /* 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 */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 3 July 21 - Anderson localization: randomly placed mangroves offer better tsunami protection ### + +**Program:** `wave_billiard.c` + +**Initial condition in function `animation()`:** `init_wave(-1.5, 0.0, phi, psi, phi_tmp, psi_tmp, 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.1 /* scaling for Julia sets */ + +/* Choice of the billiard table */ + +#define B_DOMAIN 13 /* choice of domain shape */ +/* superseded in later versions by D_DOMAIN 20 with D_CIRCLES 20 + and CIRCLE_PATTERN 2 with C_RAND_DISPLACED 2 */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ +#define D_DISK_RANDOM 13 /* grid of randomly displaces disks */ +/* superseded in later versions by D_DOMAIN 20 with D_CIRCLES 20 + and CIRCLE_PATTERN 2 with C_RAND_DISPLACED 2 */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 1.0 /* parameter controlling the dimensions of domain */ +#define MU 0.025 /* parameter controlling the dimensions of domain */ +#define NPOLY 8 /* 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 OMEGA 0.9 /* frequency of periodic excitation */ +#define COURANT 0.01 /* Courant number */ +#define GAMMA 0.0 /* damping factor in wave equation */ +#define KAPPA 0.0 /* "elasticity" term enforcing oscillations */ +/* 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 */ + +#define B_COND 2 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ + + +/* 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 */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 5500 /* 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 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 */ + +#define PLOT 1 + +#define P_AMPLITUDE 0 /* plot amplitude of wave */ +#define P_ENERGY 1 /* plot energy of wave */ + + +/* Color schemes */ + +#define BLACK 1 /* background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ + +#define SCALE 0 /* set to 1 to adjust color scheme to variance of field */ +#define SLOPE 0.02 /* sensitivity of color on wave amplitude */ +#define ATTENUATION 0.0 /* exponential attenuation coefficient of contrast with time */ + +#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 240.0 /* mean value of hue for color scheme C_HUE */ +#define HUEAMP -240.0 /* amplitude of variation of hue for color scheme C_HUE */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` +### 2 July 21 - #shorts: Working the angle - 120 degrees ### + +**Program:** Variant of `particle_billiard.c` + +**Initial condition in function `animation()`:** `init_drop_config(-1.0, 1.0, -0.65*PID, -0.4*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 */ + +#define B_DOMAIN 12 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_REULEAUX 9 /* Reuleaux and star shapes */ +#define D_FLOWER 10 /* Bunimovich flower */ +#define D_ALT_REU 11 /* alternating between star and Reuleaux */ +#define D_ANGLE 12 /* angular sector */ + +#define LAMBDA 0.6666666666666666 /* parameter controlling shape of billiard */ +#define MU 0.1 /* 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 2.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 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 NSTEPS 700 /* number of frames of movie */ +#define TIME 1000 /* time between movie frames, for fluidity of real-time simulation */ +#define DPHI 0.000006 /* 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 6 /* number of colors */ +#define COLORSHIFT 0 /* hue of initial color */ +#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.04 /* length of velocity vectors */ +#define BILLIARD_WIDTH 3 /* 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 */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` + +### 1 July 21 - #shorts: Young's double-slit experiment with a quantum particle ### + +**Program:** `schrodinger.c` + +**Initial condition in function `animation()`:** `init_coherent_state(-1.2, 0.0, 20.0, 0.0, 0.25, 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 9 /* choice of domain shape */ + +#define D_RECTANGLE 0 /* rectangular domain */ +#define D_ELLIPSE 1 /* elliptical domain */ +#define D_STADIUM 2 /* stadium-shaped domain */ +#define D_SINAI 3 /* Sinai billiard */ +#define D_DIAMOND 4 /* diamond-shaped billiard */ +#define D_TRIANGLE 5 /* triangular billiard */ +#define D_FLAT 6 /* flat interface */ +#define D_ANNULUS 7 /* annulus */ +#define D_POLYGON 8 /* polygon */ +#define D_YOUNG 9 /* Young diffraction slits */ +#define D_GRATING 10 /* diffraction grating */ +#define D_EHRENFEST 11 /* Ehrenfest urn type geometry */ +#define D_DISK_GRID 12 /* grid of disks */ + +#define D_MENGER 15 /* Menger-Sierpinski carpet */ +#define D_JULIA_INT 16 /* interior of Julia set */ + +/* Billiard tables for heat equation */ + +#define D_ANNULUS_HEATED 21 /* annulus with different temperatures */ +#define D_MENGER_HEATED 22 /* Menger gasket with different temperatures */ +#define D_MENGER_H_OPEN 23 /* Menger gasket with different temperatures and larger domain */ +#define D_MANDELBROT 24 /* Mandelbrot set */ +#define D_JULIA 25 /* Julia set */ +#define D_MANDELBROT_CIRCLE 26 /* Mandelbrot set with circular conductor */ + +#define LAMBDA 0.3 /* parameter controlling the dimensions of domain */ +#define MU 0.05 /* parameter controlling the dimensions of domain */ +#define NPOLY 6 /* number of sides of polygon */ +#define APOLY 1.0 /* angle by which to turn polygon, in units of Pi/2 */ +#define MDEPTH 3 /* 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 in sub_wave.c */ + +/* Physical patameters of wave equation */ + +#define DT 0.000000005 +#define HBAR 1.0 + +/* Boundary conditions */ + +#define B_COND 1 + +#define BC_DIRICHLET 0 /* Dirichlet boundary conditions */ +#define BC_PERIODIC 1 /* periodic boundary conditions */ +#define BC_ABSORBING 2 /* absorbing boundary conditions (beta version) */ + +/* Parameters for length and speed of simulation */ + +#define NSTEPS 1400 /* number of frames of movie */ +#define NVID 1200 /* number of iterations between images displayed on screen */ +#define NSEG 100 /* number of segments of 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 */ + +/* 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 */ + + +/* Plot type */ + +#define PLOT 0 + +#define P_MODULE 0 /* plot module of wave function squared */ +#define P_PHASE 1 /* plot phase of wave function */ +#define P_REAL 2 /* plot real part */ +#define P_IMAGINARY 3 /* plot imaginary part */ + +/* Color schemes */ + +#define BLACK 1 /* black background */ + +#define COLOR_SCHEME 1 /* choice of color scheme */ + +#define C_LUM 0 /* color scheme modifies luminosity (with slow drift of hue) */ +#define C_HUE 1 /* color scheme modifies hue */ +#define C_PHASE 2 /* color scheme shows phase */ + +#define SCALE 1 /* 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 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 150.0 /* mean value of hue for color scheme C_HUE */ +#define HUEAMP -150.0 /* amplitude of variation of hue for color scheme C_HUE */ + +/* Basic math */ + +#define PI 3.141592654 +#define DPI 6.283185307 +#define PID 1.570796327 + +``` +