Wave propagation across material interface
Based on the wave propagation tutorial, this tutorial features a displacement wave crossing a material interface, as investigated in [PDW24]. This means that a bar containing two sections with different material properties is regarded.
First import the Peridynamics.jl package:
using PeridynamicsThen the geometric parameters are set, which are the same as in the wave propagation tutorial. These are the length lx, width and height lyz of the cuboid as well as the number of points in the width npyz, which determines the point spacing Δx.
lx = 0.2
lyz = 0.002
npyz = 4
Δx = lyz / npyz0.0005With these parameters we now create a body, here using the non-ordinary state-based correspondence formulation.
pos, vol = uniform_box(lx, lyz, lyz, Δx)
body = Body(CMaterial(), pos, vol)6400-point Body{CMaterial}:
1 point set(s):
6400-point set `all_points`Then the material parameters for one half of the body are assigned to the whole body first.
material!(body, horizon=3.015Δx, rho=7850.0, E=210e9, nu=0.25)Now a point set containing the other half of all points is created.
point_set!(x -> x < 0, body, :set1) The parameters for this point set are then overwritten with their new parameters.
material!(body, :set1, horizon=3.015Δx, rho=7850.0, E=105e9, nu=0.25)Except for the Young's modulus, these are the same in both sections:
| material parameter | value |
|---|---|
| Horizon $ δ $ | $3.015 \cdot Δx$ |
| Density $ρ$ | $ 7850\,\mathrm{kg}\,\mathrm{m}^{-3}$ |
| Young's modulus $E_I$ | $ 105 \, \mathrm{GPa}$ |
| Young's modulus $E_{II}$ | $ 210 \, \mathrm{GPa}$ |
| Poisson's ratio $ν$ | $0.25$ |
Again, failure is not allowed in the whole body since no fracture parameters are specified.
To employ the boundary conditions creating a displacement wave, the point set :left is created:
point_set!(x -> x < -lx / 2 + 1.2Δx, body, :left)As in the wave propagation tutorial, the applied velocity boundary condition is
\[ {v}_x (t) = \begin{cases} v_\mathrm{max} \cdot \sin(2\pi \cdot \frac{t}{T}) \qquad & \forall \; 0 \leq t \leq T \\ 0 &\text{else.} \end{cases}\]
T, vmax = 1.0e-5, 2.0
velocity_bc!(t -> t < T ? vmax * sin(2π / T * t) : 0.0, body, :left, :x)The Velocity Verlet algorithm is used as time integration method and 2000 time steps are calculated:
vv = VelocityVerlet(steps=2000)VelocityVerlet:
n_steps 2000
safety_factor 0.7Finally the job is defined and submitted.
job = Job(body, vv; path="results/xwave_interface")
submit(job)