Frontiers: PS Particle in Water#

This example corresponds to section 3.1 in our publication. In this example we compute the acoustic radiation force (ARF) on a polystyrene particle suspended in water subjected to a plane standing wave. We compare the theories from Yosioka & Kawasima (1955), Gor’kov (1962), and Settnes & Bruus (2012).

As always we start off by importing the nececassry Python modules. For this example we are only going to need the osaft library.

17 import osaft

The next step is to define the properties for our example, these include the material properties, the properties of the acoustic field, and the radius of the particle. In the osaft library we are always assuming SI-units.

The wave type is set using the osaft.WaveType enum. Currently, there are two options: osaft.WaveType.STANDING and osaft.WaveType.TRAVELLING for a plane standing wave and a plane travelling wave, respectively.

30 # --------
31 # Geometry
32 # --------
33 # Radius
34 R_0 = 1e-6  # [m]
35
36 # -------------------
37 # Properties of Water
38 # -------------------
39 # Speed of sound
40 c_f = 1_498  # [m/s]
41 # Density
42 rho_f = 997  # [kg/m^3]
43 # Viscosity at 25 degC
44 eta_w = 0.89e-3  # [Pa s]
45
46 # -------------------------
47 # Properties of Polystyrene
48 # -------------------------
49 # Speed of sound
50 c_s = 2350  # [m/s]
51 # Density
52 rho_s = 1020  # [kg/m^3]
53
54 # --------------------------------
55 # Properties of the Acoustic Field
56 # --------------------------------
57 # Frequency
58 f = 1e5  # [Hz]
59 # Pressure
60 p_0 = 1e5  # [Pa]
61 # Wave type
62 wave_type = osaft.WaveType.STANDING
63 # Position of the particle in the field
64 position = osaft.pi / 4  # [rad]

Once all properties are defined we can initialize the solution classes. In this example, we use the classes osaft.yosioka1955.ARF(), osaft.gorkov1962.ARF(), and osaft.settnes2012.ARF().

 71 yosioka = osaft.yosioka1955.ARF(
 72     f=f,
 73     R_0=R_0,
 74     rho_s=rho_s,
 75     c_s=c_s,
 76     rho_f=rho_f,
 77     c_f=c_f,
 78     p_0=p_0,
 79     wave_type=wave_type,
 80     position=position,
 81 )
 82
 83 gorkov = osaft.gorkov1962.ARF(
 84     f=f,
 85     R_0=R_0,
 86     rho_s=rho_s,
 87     c_s=c_s,
 88     rho_f=rho_f,
 89     c_f=c_f,
 90     p_0=p_0,
 91     wave_type=wave_type,
 92     position=position,
 93 )
 94
 95 settnes = osaft.settnes2012.ARF(
 96     f=f,
 97     R_0=R_0,
 98     rho_s=rho_s,
 99     c_s=c_s,
100     rho_f=rho_f,
101     c_f=c_f,
102     eta_f=eta_w,
103     p_0=p_0,
104     wave_type=wave_type,
105     position=position,
106 )

Now we want to make sure that the solutions from Gor’kov and Settnes & Bruus are actually applicable. These theories assume a small particle compared to the acoustic wavelength

\[k_\mathrm{f} \cdot R_0 \ll 1\]

We evaluate this expression using osaft

118 print(f"{yosioka.k_f * yosioka.R_0 = :.4f}")
yosioka.k_f * yosioka.R_0 = 0.0004

And indeed, we were able to confirm that this is the case.

Finally, we compute the acoustic radiation force for all models by calling the compute_arf() method on all instances.

126 print(f"{yosioka.compute_arf() = :.3e}")
127 print(f"{gorkov.compute_arf() = :.3e}")
128 print(f"{settnes.compute_arf() = :.3e}")
yosioka.compute_arf() = 1.228e-15
/home/docs/checkouts/readthedocs.org/user_builds/osaft/envs/stable/lib/python3.9/site-packages/memory_profiler.py:379: AssumptionWarning: Theory might not be valid anymore!
  returned = f(*args, **kw)
gorkov.compute_arf() = 1.228e-15
settnes.compute_arf() = 1.229e-15

We have found that all solutions are in excellent agreement.

Total running time of the script: ( 0 minutes 1.340 seconds)

Estimated memory usage: 9 MB

Gallery generated by Sphinx-Gallery