Modes of the Equilateral Triangle Acoustic Cavity

The source for the solution presented here is Matthews & Walker, Mathematical Methods of Physics, 1970. This book very concisely outlines a method useful for such problems, although the specific example is for an equilateral triangular drumhead (two dimensional, but with fixed boundaries).

Two types of symmetries must be considered when forming solutions out of a superposition of plane waves:
	(1) translational symmetries
	(2) rotational symmetries

Consider the x-y plane tiled with copies of the cavity. The free boundaries of the cavities require that the solutions must be even about any line comprised of cavity walls. Assume that the base of the original cavity is parallel to the x-axis. Then this condition requires that every solution must be invariant to a translation of 3 cavity wall lengths in the x-direction and to a translation of 2 cavity heights in the y-direction.

The 120 degree rotational symmetry of the cavity requires that any proposed solution rotated through 120 degrees must yield another valid solution.

All plane waves used to construct a particular solution must, of course, have the same wavelength (so that they are at the same frequency). To construct a solution with the required rotational symmetry, there must be at least two different plane waves that have the same wavelength and with the required translational symmetries which may be added to achieve the rotational symmetry (and in which the rotated sum also maintains the required translational symmetries).

In order to automatically satisfy the translational symmetry requirements the modes will be constructed of sums of plane - wave terms with wave numbers ( (Subscript[k, 0]) l ) and ((Subscript[k, 0])(Sqrt[3])m) in the x and y directions, where (Subscript[k, 0]) is the wave number of a wave with λ = 3 cavity wall lengths; the integer indices l and m will be specified by a pair: { l, m }; f[{ l,m }] is a function of x and y representing a plane-wave term.

k0=2 Pi/3  (* using the side of the cavity as our unit of length *)

f[{l_,m_}]:=Function[{x,y},Exp[I k0 l x]Exp[I k0 Sqrt[3] m y]]

Note, of course, that if the plane-wave f[{ l,m }] satisfies the translational symmetry requirements, then the other waves given by  f[{ ±l,±m }]  do as well and have the same wavelength.

The squared magnitude of the wave vector specified by { l,m } is (k^2)= ((Subscript[k, 0])^2) ((l^2)+3(m^2))

norm[{l_,m_}]:=(l^2)+3(m^2)  (* we leave out the constant factor (k0^2) *)

Create a list of {l, m} and their squared wave vector magnitudes. Remove the first entry {0,0} (we only include nonnegative l and m in this list for now).

pairs=Rest[Flatten[Table[{norm[{l,m}],{l,m}},{l,0,20},{m,0,20}],1]];

Sort the {l, m} pairs into groups with the same wave vector magnitudes; keep only those with more than one pair in a group, since a group of plane-wave terms like {±l,±m} for only a single l and m can't satisfy the 120° rotational symmetry required of the solution.

groups=Split[Sort[pairs,#1[[1]]<#2[[1]]&],#1[[1]]==#2[[1]]&];
groups=Select[groups,Length[#]>1&];
groups=Transpose[{Sqrt[groups[[All,1,1]]],groups[[All,All,2]]}];

Take[groups,10]//MatrixForm

The normalized wave vector magnitudes must be multiplied by 2π/3; the wavelengths are the reciprocals (in units of the length of a side of the triangle).

wavelengths=3/groups[[All,1]];

The frequencies will be evaluated as multiples of the lowest mode frequency.

freqs=groups[[All,1]]/groups[[1,1]];

Here is a plot of all candidate resonant frequencies less than 5 times the lowest frequency:

ListPlot[Select[freqs,#≤5&],Filling->Axis,AxesOrigin-> {0,0}, Ticks->{None,Automatic}]

Now consider the rotational symmetry requirements and construct solutions from these candidate sets of plane-waves.

The rotational symmetry requires that the coefficients of various different {±l,±m} terms included in the solution for a mode must be equal (including (Subscript[a, l m])= (Subscript[a, l -m]))

This function will generate from a given list of mode index {l, m} pairs all pairs with different signs {±l,±m}

pm[{l_Integer,m_Integer}]:=Union[{{l,m},{-l,m},{l,-m},{-l,-m}}]
pm[x:{{_Integer,_Integer}..}]:=Sort[Flatten[Map[pm,x],1]]

This function will generate from a given list of {l, m} pairs all pairs implied by the 120° rotational symmetries and the reflection symmetry about the x-axis

lm2[{l_,m_}]:={-(l+3m)/2,(l-m)/2} (* rotation by +120° *)
lm3[{l_,m_}]:={-(l-3m)/2,(l+m)/2} (* rotation by -120° *)
lm4[{l_,m_}]:={l,-m} (* reflection about y=0 *)

lm[x:{{_Integer,_Integer}..}]:=Sort[Union[Map[lm2,x],Map[lm3,x],Map[lm4,x]]]

Use the symmetry operations to generate solutions for the lowest mode

The frequency of the lowest candidate mode is used as the reference for all entries in freqs[[]], thus it equals 1 by definition. The wavelength is given in terms of the length of a wall of the cavity.

freqs[[1]]
wavelengths[[1]]

Check that the set of  {±l,±m} pairs for this first candidate mode is closed under the symmetry operations

set=pm[groups[[1,2]]]
lm[pm[groups[[1,2]]]]
%==%%

Thus, this first set of waves may be used to construct a solution satisfying all the symmetry requirements. Unfortunately, the set of waves calculated above is not the minimal set required to generate a solution. We want a minimal subset which is closed under the symmetry operations (a subgroup).

Generate a subset of {l,m} pairs from the above set by starting with only the first pair, then applying the symmetry operations repeatedly, until we have generated a subgroup of the {±l,±m} pairs (closed under the symmetry operations) required to build a solution. You could pick some other element of the set to start.

start=set[[1]]

generator[pair_]:=FixedPoint[Union[#,lm[#]]&,{pair}]

terms=generator[start]

Once you've identified the required {l,m} pairs, you can build the solution from a superposition of the plane waves. Use the real and imaginary parts to generate the modes for this resonance. Note that all waves in the solution have the same amplitude.

g[x_,y_]=ComplexExpand[Plus@@Map[f[#][x,y]&,terms]]

The real part generates a mode that is even about the altitude of the triangle (the y-axis)
(the origin of our coordinate system is the top vertex of the triangular cavity)

ContourPlot[Re[g[x,y]],{x,-1/2,1/2},{y,0,-(Sqrt[3])/2},Contours->11,RegionFunction->Function[{x,y},y≤0&&y≤-(Sqrt[3])Abs[x]&&y≥ -(Sqrt[3])/2],AspectRatio->Automatic,Frame->False]

The imaginary part (if not identically zero) generates a mode that is odd about the altitude of the triangle (the y-axis)

ContourPlot[Im[g[x,y]],{x,-1/2,1/2},{y,0,-(Sqrt[3])/2},Contours->11,RegionFunction->Function[{x,y},y≤0&&y≤-(Sqrt[3])Abs[x]&&y≥ -(Sqrt[3])/2],AspectRatio->Automatic,Frame->False]

Here are extensions into the plane showing the symmetry.

Show[ContourPlot[Re[g[x,y]],{x,-1.5,1.5},{y,-2 (Sqrt[3])/2, (Sqrt[3])/2},Contours->11,AspectRatio->Automatic,Frame->False],Graphics[{Red,Thick,Line[{{0,0},{1/2,-(Sqrt[3])/2},{-1/2,-(Sqrt[3])/2},{0,0}}]}]]

Note from the following plot that this mode has the same frequency as that of a triangle with fixed edges of (Sqrt[3]) times the side of the cavity (twice the cavity's height).

Show[ContourPlot[Im[g[x,y]],{x,-1.5,1.5},{y,-2 (Sqrt[3])/2, (Sqrt[3])/2},Contours->11,AspectRatio->Automatic,Frame->False],Graphics[{Red,Thick,Line[{{0,0},{1/2,-(Sqrt[3])/2},{-1/2,-(Sqrt[3])/2},{0,0}}]}]]

These two modes (symmetric and antisymmetric about the y-axis) form a basis which can be used to generate similar modes about the other altitudes of the triangle. For example:

ContourPlot[(Im[g[x,y]]-(Sqrt[3])Re[g[x,y]])/2,{x,-1/2,1/2},{y,0,-(Sqrt[3])/2},Contours->11,RegionFunction->Function[{x,y},y≤0&&y≤-(Sqrt[3])Abs[x]&&y≥ -(Sqrt[3])/2],AspectRatio->Automatic,Frame->False]