Note
Click here to download the full example code
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
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