/ challenges-old / cymbal2
Sign in
challenges-old / cymbal2
cymbal2 / MODEL.md
11.5 KBPreviewCodeBlameHistoryRaw

The cymbal2 model#

Every challenge in this repository is an instance of the model defined here. A challenge fixes the mid-surface profile Z(r)Z(r), the thickness h(r)h(r) and the output scale srefs_\text{ref}; its README gives those and nothing else changes. The problem is to compute the pressure signal p(t)p(t) of the output section for seven seconds, during which the cymbal is struck three times, and write it as a wav file.

Geometry#

The cymbal is a thin shell. Its mid-surface is the graph of a function ZZ over the annulus

A={(x,y):rh≤r≤R},r=x2+y2,A = \{ (x, y) : r_h \le r \le R \}, \qquad r = \sqrt{x^2 + y^2},

and its thickness is hh. Both are functions of rr alone and are given per challenge. The rim r=Rr = R and the edge of the hole r=rhr = r_h are free. Below, subscripts xx, yy and tt denote partial derivatives, Greek indices run over x,yx, y, repeated Greek indices are summed, and δαβ\delta_{\alpha\beta} is the Kronecker delta.

Unknowns and strains#

The unknowns are the displacements u(x,y,t)u(x, y, t), v(x,y,t)v(x, y, t), w(x,y,t)w(x, y, t) of the mid-surface point (x,y,Z(x,y))(x, y, Z(x, y)) along the xx, yy and zz axes. The membrane strains are those of shallow-shell theory,

εxx=ux+Zxwx+12wx2,εyy=vy+Zywy+12wy2,εxy=12(uy+vx+Zxwy+Zywx+wxwy),\varepsilon_{xx} = u_x + Z_x w_x + \tfrac{1}{2} w_x^2, \qquad \varepsilon_{yy} = v_y + Z_y w_y + \tfrac{1}{2} w_y^2, \qquad \varepsilon_{xy} = \tfrac{1}{2} \left( u_y + v_x + Z_x w_y + Z_y w_x + w_x w_y \right),

and the bending strains are καβ=wαβ\kappa_{\alpha\beta} = w_{\alpha\beta}.

Stress resultants#

The material is linearly elastic and isotropic, with Young's modulus EE, Poisson's ratio ν\nu and density ρ\rho, and has a small Kelvin-Voigt viscosity of time constant η\eta. The membrane forces and bending moments per unit length are

Nαβ=Eh1−ν2[(1−ν) ε~αβ+ν ε~γγ δαβ],Mαβ=D[(1−ν) κ~αβ+ν κ~γγ δαβ],N_{\alpha\beta} = \frac{E h}{1 - \nu^2} \left[ (1 - \nu)\, \tilde\varepsilon_{\alpha\beta} + \nu\, \tilde\varepsilon_{\gamma\gamma}\, \delta_{\alpha\beta} \right], \qquad M_{\alpha\beta} = D \left[ (1 - \nu)\, \tilde\kappa_{\alpha\beta} + \nu\, \tilde\kappa_{\gamma\gamma}\, \delta_{\alpha\beta} \right],

with ε~=ε+η εt\tilde\varepsilon = \varepsilon + \eta\, \varepsilon_t, κ~=κ+η κt\tilde\kappa = \kappa + \eta\, \kappa_t and D=Eh3/(12(1−ν2))D = E h^3 / (12 (1 - \nu^2)).

Equations of motion#

The motion is defined by its weak form. For all test functions δu,δv∈H1(A)\delta u, \delta v \in H^1(A) and δw∈H2(A)\delta w \in H^2(A), without constraint on either edge,

∫Aρh[(utt+2σ0ut) δu+(vtt+2σ0vt) δv+(wtt+2σ0wt) δw+2σ1 ∇wt⋅∇δw]dA+∫A(Nαβ δεαβ+Mαβ δκαβ)dA=−∑i=13Fi(t)∫Aϕi δw dA,\int_A \rho h \left[ (u_{tt} + 2 \sigma_0 u_t)\, \delta u + (v_{tt} + 2 \sigma_0 v_t)\, \delta v + (w_{tt} + 2 \sigma_0 w_t)\, \delta w + 2 \sigma_1\, \nabla w_t \cdot \nabla \delta w \right] dA + \int_A \left( N_{\alpha\beta}\, \delta\varepsilon_{\alpha\beta} + M_{\alpha\beta}\, \delta\kappa_{\alpha\beta} \right) dA = - \sum_{i=1}^{3} F_i(t) \int_A \phi_i\, \delta w\, dA,

where σ0\sigma_0 and σ1\sigma_1 are loss coefficients, FiF_i and ϕi\phi_i are the force and footprint of the $i$th strike of the next section, and δε\delta\varepsilon, δκ\delta\kappa are the variations of the strains at the current state,

δεxx=δux+(Zx+wx) δwx,δεyy=δvy+(Zy+wy) δwy,δεxy=12(δuy+δvx+(Zx+wx) δwy+(Zy+wy) δwx),δκαβ=δwαβ.\delta\varepsilon_{xx} = \delta u_x + (Z_x + w_x)\, \delta w_x, \qquad \delta\varepsilon_{yy} = \delta v_y + (Z_y + w_y)\, \delta w_y, \qquad \delta\varepsilon_{xy} = \tfrac{1}{2} \left( \delta u_y + \delta v_x + (Z_x + w_x)\, \delta w_y + (Z_y + w_y)\, \delta w_x \right), \qquad \delta\kappa_{\alpha\beta} = \delta w_{\alpha\beta}.

Where the solution is smooth this is the strong form

ρh (utt+2σ0ut)=∂xNxx+∂yNxy,ρh (vtt+2σ0vt)=∂xNxy+∂yNyy,\rho h\, (u_{tt} + 2 \sigma_0 u_t) = \partial_x N_{xx} + \partial_y N_{xy}, \qquad \rho h\, (v_{tt} + 2 \sigma_0 v_t) = \partial_x N_{xy} + \partial_y N_{yy},
ρh (wtt+2σ0wt)−2σ1 ∇⋅(ρh ∇wt)=∂α[Nαβ(Zβ+wβ)]−∂αβMαβ−∑iFi(t) ϕi,\rho h\, (w_{tt} + 2 \sigma_0 w_t) - 2 \sigma_1\, \nabla \cdot (\rho h\, \nabla w_t) = \partial_\alpha \left[ N_{\alpha\beta} (Z_\beta + w_\beta) \right] - \partial_{\alpha\beta} M_{\alpha\beta} - \sum_i F_i(t)\, \phi_i,

together with the free-edge conditions that the weak form implies at r=Rr = R and r=rhr = r_h. The rigid motions of the shell are suppressed. Let ⟨a,b⟩=∫Aρh a⋅b dA\langle \mathbf{a}, \mathbf{b} \rangle = \int_A \rho h\, \mathbf{a} \cdot \mathbf{b}\, dA be the mass-weighted inner product of displacement fields (u,v,w)(u, v, w), and let R\mathcal{R} be the span of the six rigid fields (1,0,0)(1, 0, 0), (0,1,0)(0, 1, 0), (0,0,1)(0, 0, 1), (0,0,x)(0, 0, x), (0,0,y)(0, 0, y) and (−y,x,0)(-y, x, 0). The solution is orthogonal to R\mathcal{R} at all times, ⟨(u,v,w),r⟩=0\langle (u, v, w), \mathbf{r} \rangle = 0 for every r∈R\mathbf{r} \in \mathcal{R}, and the weak form above is required only for test functions orthogonal to R\mathcal{R}. This is the shell held by an ideal support that fixes its position and orientation and constrains nothing else: the reaction is a body force in R\mathcal{R}, equal to ρh\rho h times the rigid acceleration field that balances the net force and moments of the strikes, and the elastic motion is untouched. The shell is at rest at t=0t = 0: u=v=w=0u = v = w = 0 and ut=vt=wt=0u_t = v_t = w_t = 0.

The strikes#

The cymbal is struck three times by a drum stick, at the times tit_i and points (xi,0)(x_i, 0) of the parameter table: on the outer flank of the bell, then on the bow at 0.59R0.59 R, then near the rim at 0.91R0.91 R, two seconds apart. The stick is a point mass msm_s that moves along zz and interacts with the shell through a Hertz contact force. The $i$th strike has the footprint

ϕi(x,y)=1cϕ πRs2  ϕ0 ⁣(ϱiRs),ϱi=(x−xi)2+y2,ϕ0(s)={12(1+cos⁡πs),0≤s≤1,0,s>1,cϕ=12−2π2,\phi_i(x, y) = \frac{1}{c_\phi\, \pi R_s^2}\; \phi_0\!\left( \frac{\varrho_i}{R_s} \right), \qquad \varrho_i = \sqrt{(x - x_i)^2 + y^2}, \qquad \phi_0(s) = \begin{cases} \tfrac{1}{2} (1 + \cos \pi s), & 0 \le s \le 1, \\ 0, & s > 1, \end{cases} \qquad c_\phi = \tfrac{1}{2} - \tfrac{2}{\pi^2},

which lies inside AA and integrates to one over AA, and the surface height under it is the footprint average wˉi(t)=∫Aϕi w dA\bar w_i(t) = \int_A \phi_i\, w\, dA. Let zi(t)z_i(t), defined for t≥tit \ge t_i, be the height of the tip of the $i$th stick. It meets the surface at tit_i with relative speed v0v_0, wherever the motion of the shell has taken that surface,

zi(ti)=wˉi(ti),z˙i(ti)=∂twˉi(ti)−v0.z_i(t_i) = \bar w_i(t_i), \qquad \dot z_i(t_i) = \partial_t \bar w_i(t_i) - v_0.

The penetration is δi(t)=wˉi(t)−zi(t)\delta_i(t) = \bar w_i(t) - z_i(t) and the contact force is

Fi(t)=kc max⁡(δi(t),0)3/2for t≥ti,Fi(t)=0for t<ti.F_i(t) = k_c\, \max(\delta_i(t), 0)^{3/2} \quad \text{for } t \ge t_i, \qquad F_i(t) = 0 \quad \text{for } t < t_i.

It acts on the stick upward, msz¨i=Fim_s \ddot z_i = F_i, and on the shell downward, as the traction −Fiϕi-F_i \phi_i along zz in the equations of motion. Each stick is otherwise free: there is no gravity and no hand, it stays in the model after its rebound, and contact occurs whenever δi>0\delta_i > 0, including any later contact.

Output#

The output is the acoustic pressure at the listener point xL\mathbf{x}_L given by the Rayleigh integral of the transverse acceleration over the shell,

p(t)=ρa2π∫A1d(x,y)  wtt ⁣(x,y,  t−d(x,y)ca)dA,d(x,y)=∣xL−(x,y,Z(x,y))∣,p(t) = \frac{\rho_a}{2\pi} \int_A \frac{1}{d(x, y)}\; w_{tt}\!\left( x, y,\; t - \frac{d(x, y)}{c_a} \right) dA, \qquad d(x, y) = \left| \mathbf{x}_L - (x, y, Z(x, y)) \right|,

with wttw_{tt} taken as zero at negative times. This is the field of a planar source in a rigid baffle; the acoustic problem is not solved, and the air exerts no load on the shell.

Remarks#

The rigid constraint is not a convenience. The shallow-shell strains are not invariant under finite rotations: a shell that has tilted by an angle θ\theta behaves in this model like a shell of slope θ\theta, with a membrane-bending coupling that a real rotated plate does not have. Left free, the shell tilts by about a radian within half a second of the first strike, its partials glide and its treble drains into in-plane motion, none of it physical. Holding the six rigid components at zero removes the problem exactly, and the strikes' momentum and angular momentum go into the support.

The losses are the three of plate synthesis. In the linear regime about a flat uniform state a bending mode of wavenumber kk and angular frequency ω\omega decays at the rate σ0+σ1k2+ηω2/2\sigma_0 + \sigma_1 k^2 + \eta \omega^2 / 2, with k2=ωρh/Dk^2 = \omega \sqrt{\rho h / D}. With the values below the sixty-decibel decay time is about 5 s below 500 Hz, 3.5 s at 2 kHz, 2 s at 5 kHz, 1.2 s at 10 kHz and 0.8 s at 15 kHz, roughly the ring of a crash cymbal; the viscous term is small in the audible range and gives the model a definite cutoff above it.

Parameters common to all challenges#

Symbol Value Unit Meaning
RR 0.2032 m outer radius (16 in diameter)
rhr_h 0.006 m hole radius
EE 110e9 Pa Young's modulus (B20 bell bronze)
ν\nu 0.34 Poisson's ratio
ρ\rho 8800 kg/m^3 density
σ0\sigma_0 1.1 1/s frequency-independent loss rate
σ1\sigma_1 8e-5 m^2/s loss coefficient of the Laplacian term
η\eta 1e-9 s Kelvin-Voigt time constant
msm_s 0.02 kg stick tip mass
v0v_0 6 m/s stick speed at contact
kck_c 1e9 N/m^(3/2) Hertz contact stiffness
RsR_s 0.005 m footprint radius
t1,t2,t3t_1, t_2, t_3 0, 2, 4 s strike times
x1,x2,x3x_1, x_2, x_3 0.045, 0.12, 0.185 m strike points on the xx axis: bell flank, bow, rim
ρa\rho_a 1.204 kg/m^3 air density
cac_a 343 m/s speed of sound in air
xL\mathbf{x}_L (0.65, 1.125, 0.75) m listener point

All values are exact decimal numbers. The listener is 1.5 m from the origin, 30 degrees above the plane z=0z = 0, at an azimuth of 60 degrees from the xx axis, on which the strike points lie. The strikes are the same in both challenges. On the crash cymbal the first lands on the outer flank of the bell (slope 0.26), the second on the bow, the third 18 mm from the rim on the thin edge; on the flat annulus they land at the same radii. The stick carries 0.36 J, a firm stroke rather than the hardest a drummer gives. The stick values are provisional until the first solutions have been heard; they will be fixed before any solution is published, and a challenge is never changed after that.

Deliverable#

Property Value
channels 1
sample rate fsf_s 48000 Hz
number of samples NN 336000 (7.0 s)
sample format 32-bit IEEE float (WAVE_FORMAT_IEEE_FLOAT)
sample kk, for k=0,…,N−1k = 0, \dots, N-1 p(k/fs)/srefp(k / f_s) / s_\text{ref}
srefs_\text{ref} output.signal_scale in the challenge's challenge.json, in Pa

The first sample is at t=0t = 0, the instant the first stick touches the shell. Samples are pointwise values of pp with no anti-aliasing filter. Do not normalize the signal; absolute amplitude is compared.

Error measures#

Two relative errors against the reference solution are computed over the NN samples: the spectrogram ℓ2\ell^2 error (primary; periodic Hann window of length 2048, hop 512, no padding) and the waveform ℓ2\ell^2 error. The formulas are those of the string challenge. The spectrogram error ranks because the response to this strike is chaotic: solutions that agree in every band still differ in waveform after the first tenth of a second, and the waveform error is then near 2\sqrt{2} for any two of them.

Reference solution#

The reference is chosen automatically among the submitted solutions by the rule described in the repository README, unless reference_solution in challenge.json names one.

Optional field export#

A submission may provide the transverse displacement for visualization; it is not scored. The file is HDF5 with datasets x and y, float64, shape (61,), xi=−R+2R i/60x_i = -R + 2R\, i / 60 and the same for yy; t, float64, shape (3501,), tk=k/500t_k = k / 500; and u, float32, shape (3501, 61, 61), with u[k, j, i] =w(xi,yj,tk)= w(x_i, y_j, t_k) in meters for grid points in AA and NaN elsewhere. Root attributes challenge_id, solution_id, quantity and units are recommended. The file is about 50 MB and belongs in git LFS or at an external URL.

↑↓ move↵openescclose