## 2 Dispersion Curve Calculation
### Velocity Dispersion Curves  
The main contribution of this paper is Algorithm 1, which is presented in this section, for obtaining group velocity dispersion curves for periodic structures without finite differentiation using a WFE scheme. The algorithm starts following the basic steps of WFE method, where a periodic section of the structure is modelled in FE software and the \(\mathbf{K},\mathbf{M}\), and \(\mathbf{C}\) matrices are extracted. They are used to calculate the transfer matrix \(\mathfrak{T}\) and obtain its eigenvalues and eigenvectors. ```
1 Model periodic section in FE and extract \(\mathbf{K}\), \(\mathbf{M}\), and \(\mathbf{C}\)
2 Specify angular frequency \(\omega\)
3 Initialise arrays \(\mathbf{k}_{x},\mathbf{k}_{y},\boldsymbol{\theta},and\mathbf{c}_{\mathbf{g}, \mathbf{x}},\mathbf{c}_{\mathbf{g},\mathbf{y}}\)
4 while\(\theta<\theta_{max}\)do
5 Calculate the transformation matrix \(\mathbf{T}\) and transfer matrix \(\mathfrak{T}\)
6 Perform eigenvalue analysis (Equation (4))
7 Sort modes and select a mode of interest with wavenumber \(k_{x}\) and mode shape \(\boldsymbol{\phi}_{x}\)
8 Calculate \(\theta\) for the mode of interest
9 if\(k_{y}\
eq 0\) and \((\theta_{n}-\theta_{n-1})>\Delta\theta\)then
10 Reduce step size \(\Delta k_{y}\)
11 Go to line 5
12 else
13 Append \(k_{x},k_{y},\theta\) to \(\mathbf{k}_{x},\mathbf{k}_{y},\boldsymbol{\theta}\) respectively
14 Update \(k_{y}\gets k_{y}+\Delta k_{y}\)
15 end if
16 Calculate \(c_{g,x}\) using Equations (6)-(9) and append to \(\mathbf{c}_{\mathbf{g},\mathbf{x}}\)
17 end if
18 Append 0 to \(\mathbf{k}_{x}\)
19 foreach\(k_{x}\) in \(\mathbf{k}_{x}\)do
20 Perform steps 5 to 14, but this time with \(\boldsymbol{\phi}_{y}\) as unknowns
21 Calculate \(c_{g,y}\) using Equations (6)-(9) and append to \(\mathbf{c}_{\mathbf{g},\mathbf{y}}\)
22 end if
23 Calculate group velocity \(c_{g}(\theta)\) and phase velocity \(c_{p}(\theta)\) using Equation (10)
```  
**Algorithm 1**Group and phase velocity calculation  
In the while loop starting on line 4, the reduction is performed as shown in Equation (2). The variable \(k_{y}\) is initially assigned zero for a point in the \(k_{x}-k_{y}\) plane lying on the positive \(x-\)axis (\(\theta=0^{\circ}\)). The value of \(k_{y}\) is updated in subsequent iterations of the while loop by a suitable step size \(\Delta k_{y}\), such that the polar angle between two consecutive points is less than a desired angular resolution \(\Delta\theta\). At each step, \(\theta\) is calculated for a particular wave mode by the wavenumbers of that mode using the relation \(\theta=\tan^{-1}(k_{y}/k_{x})\). Note that sorting and identifying a single mode may be difficult especially if a number of propagating modes exist at the excitation frequency. Normally, a modal assurance criterion (MAC) [33] is used to identify modes that can be used here, or a more advanced technique such as the partial wave method presented in [34]. Since a single mode is used for calculating \(\theta\), the algorithm can only be used to extract one mode at a time. The same algorithm can easily be extended to filter multiple modes but that is not presented here. The mode shape vector \(\boldsymbol{\phi}_{x}\) is then used to calculate the \(x-\)component of group velocity \(c_{g,x}(\theta)\). The loop runs until \(\theta\geq\theta_{max}\), where \(\theta_{max}\) is slightly below \(90^{\circ}\). This essentially means that we are looking for part of the dispersion curve that lies in the first quadrant (i.e., between \(0^{\circ}\) and \(90^{\circ}\)). The reason for stopping before reaching \(90^{\circ}\) is the asymptotic behaviour of the tangent function at that angle, which makes it numerically difficult to compute. The exact value at \(90^{\circ}\) is computed later in the algorithm to bypass this issue. The part of the algorithm discussed so far is used for calculating the \(x-\)component of the group velocity. To compute the actual group velocity \(c_{g}(\theta)\) of the mode, \(c_{g,y}(\theta)\) mustalso be calculated.