Wave propagation in a thin bar

In this tutorial, a cuboid bar is created. A velocity pulse in the form of one period of a sine wave is applied to create a pressure wave that propagates through the bar.

First import the Peridynamics.jl package:

using Peridynamics

To get started, some parameters used to for this simulation are defined. These are the length of the bar lx, the width and height lyz and the number of points in the width npyz.

lx = 0.2
lyz = 0.002
npyz = 4
4

With these parameters the point spacing can be calculated:

Δx = lyz / npyz
0.0005

A cuboid body according to the ordinary state-based model with the specified dimensions and point spacing is then created:

pos, vol = uniform_box(lx, lyz, lyz, Δx)
body = Body(OSBMaterial(), pos, vol)
6400-point Body{OSBMaterial{NoCorrection}}:
  1 point set(s):
    6400-point set `all_points`

Failure is prohibited throughout the body:

failure_permit!(body, false)

Following material parameters are specified:

material parametervalue
Horizon $ δ $$3.015 \cdot Δx$
Density $ρ$$ 7850\,\mathrm{kg}\,\mathrm{m}^{-3}$
Young's modulus $E$$ 210 \, \mathrm{GPa}$
Poisson's ratio $ν$$0.25$
critical strain $ε_c$$0.01$
material!(body, horizon=3.015Δx, rho=7850.0, E=210e9, nu=0.25, epsilon_c=0.01)

Point set :left including the first row of points in x-direction is created:

point_set!(x -> x < -lx / 2 + 1.2Δx, body, :left)

The velocity boundary condition of the form

\[ {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}\]

is applied to point set :left. The parameters used for this excitation are period length T and amplitude vmax.

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.7

The job is now defined with the specified settings and parameters.

job = Job(body, vv; path="results/xwave")
Job:
  spatial_setup  6400-point Body{OSBMaterial{NoCorrection}}
  time_solver    VelocityVerlet(n_steps=2000, safety_factor=0.7)
  options        export_allowed=true, freq=10

The last step is submitting the job to start the simulation.

submit(job)