1- use std:: f64:: consts:: * ;
21use arrayfire:: * ;
2+ use std:: f64:: consts:: * ;
33
44fn main ( ) {
55 set_device ( 0 ) ;
@@ -8,20 +8,20 @@ fn main() {
88}
99
1010fn normalise ( a : & Array < f32 > ) -> Array < f32 > {
11- ( a/ ( max_all ( & abs ( a) ) . 0 as f32 * 2.0f32 ) ) + 0.5f32
11+ ( a / ( max_all ( & abs ( a) ) . 0 as f32 * 2.0f32 ) ) + 0.5f32
1212}
1313
1414fn acoustic_wave_simulation ( ) {
1515 // Speed of sound
16- let c : f32 = 0.1 ;
16+ let c: f32 = 0.1 ;
1717 // Distance step
18- let dx : f32 = 0.5 ;
18+ let dx: f32 = 0.5 ;
1919 // Time step
20- let dt : f32 = 1.0 ;
20+ let dt: f32 = 1.0 ;
2121
2222 // Grid size.
23- let nx : u64 = 1500 ;
24- let ny : u64 = 1500 ;
23+ let nx: u64 = 1500 ;
24+ let ny: u64 = 1500 ;
2525
2626 // Grid dimensions.
2727 let dims = Dim4 :: new ( & [ nx, ny, 1 , 1 ] ) ;
@@ -32,34 +32,37 @@ fn acoustic_wave_simulation() {
3232 let mut p_dot = p. clone ( ) ;
3333
3434 // Laplacian (Del^2) convolution kernel.
35- let laplacian_values: [ f32 ; 9 ] = [ 0.0 , 1.0 , 0.0 ,
36- 1.0 , -4.0 , 1.0 ,
37- 0.0 , 1.0 , 0.0 ] ;
35+ let laplacian_values: [ f32 ; 9 ] = [ 0.0 , 1.0 , 0.0 , 1.0 , -4.0 , 1.0 , 0.0 , 1.0 , 0.0 ] ;
3836 let laplacian_kernel = Array :: new ( & laplacian_values, Dim4 :: new ( & [ 3 , 3 , 1 , 1 ] ) ) / ( dx * dx) ;
3937
4038 // Create a window to show the waves.
4139 let mut win = Window :: new ( 1000 , 1000 , "Waves" . to_string ( ) ) ;
4240
4341 // Hann windowed pulse.
44- let pulse_time : f32 = 100.0 ;
45- let centre_freq : f32 = 0.05 ;
46- let twopi = PI as f32 * 2.0 ;
42+ let pulse_time: f32 = 100.0 ;
43+ let centre_freq: f32 = 0.05 ;
44+ let twopi = PI as f32 * 2.0 ;
4745
4846 // Number of samples in pulse.
49- let pulse_n = ( pulse_time/ dt) . floor ( ) as u64 ;
47+ let pulse_n = ( pulse_time / dt) . floor ( ) as u64 ;
5048
51- let i = range :: < f32 > ( Dim4 :: new ( & [ pulse_n, 1 , 1 , 1 ] ) , 0 ) ;
52- let t = i. clone ( ) * dt;
49+ let i = range :: < f32 > ( Dim4 :: new ( & [ pulse_n, 1 , 1 , 1 ] ) , 0 ) ;
50+ let t = i. clone ( ) * dt;
5351 let hmg_wnd = cos ( & ( i * ( twopi / pulse_n as f32 ) ) ) * -0.46f32 + 0.54f32 ;
54- let wave = sin ( & ( & t * centre_freq * twopi) ) ;
55- let pulse = wave * hmg_wnd;
52+ let wave = sin ( & ( & t * centre_freq * twopi) ) ;
53+ let pulse = wave * hmg_wnd;
5654
5755 // Iteration count.
5856 let mut it = 0 ;
5957
6058 while !win. is_closed ( ) {
6159 // Convole with laplacian to get spacial second derivative.
62- let lap_p = convolve2 ( & p, & laplacian_kernel, ConvMode :: DEFAULT , ConvDomain :: SPATIAL ) ;
60+ let lap_p = convolve2 (
61+ & p,
62+ & laplacian_kernel,
63+ ConvMode :: DEFAULT ,
64+ ConvDomain :: SPATIAL ,
65+ ) ;
6366 // Calculate the updated pressure and d(pressure)/dt fields.
6467 p_dot += lap_p * ( c * dt) ;
6568 p += & p_dot * dt;
@@ -68,7 +71,11 @@ fn acoustic_wave_simulation() {
6871 // Location of the source.
6972 let seqs = & [ Seq :: new ( 700.0 , 800.0 , 1.0 ) , Seq :: new ( 800.0 , 800.0 , 1.0 ) ] ;
7073 // Set the pressure there.
71- p = assign_seq ( & p, seqs, & index ( & pulse, & [ Seq :: new ( it as f64 , it as f64 , 1.0 ) ] ) ) ;
74+ p = assign_seq (
75+ & p,
76+ seqs,
77+ & index ( & pulse, & [ Seq :: new ( it as f64 , it as f64 , 1.0 ) ] ) ,
78+ ) ;
7279 }
7380
7481 // Draw the image.
0 commit comments