After I had finished my first horn profiles as 3D models, the question arose whether it is possible to perform a proof of concept by simulation. Doing some research on the web, I soon discovered the simulation software ABEC3 (http://www.randteam.de/ABEC3/Index.html). Fortunately, by a lucky coincidence, I was able to make two contacts through a DIY forum, which were far ahead of me in this area and have supported me with discussions and simulations. In particular, I would like to thank Don for his tireless support in creating and visualizing the respective ABEC3 scripts for the further development of respective horn profiles. Without Don’s involvement in my projects and the encouraging results, I would hardly have pushed the programming and, of course, the creation of this website with this commitment. I was able to motivate Don to summarize his findings in a few articles and I am pleased to present them in this context.
In particular, I would also like to thank Joerg Panzer, who has provided us with free non-commercial ABEC3 licenses. Thus, it was possible that we could easily exchange the results and work much more efficiently.
The challenge was from the beginning that the horn profiles should work especially as free-standing horns. This requires the simulation of specific measures and configurations. Don wrote an article that I would like to publish here.
The BEM simulations shown in this article took several hours to solve on our workstations which are on a quite actual performance level. It should be mentioned that especially the high frequency part beyond 10 kHz is a special challenge and the results still show some artifacts which are clearly related to the underlying model.
Freestanding Horn ABEC model, by DonVK
1. Introduction
This is an overview of constructing a physical horn model for acoustic BEM simulation using R&D Team’s ABEC3™. The horn’s contour (ie. inner horn) has been previously generated by a proprietary tool (DrBA Excel Spreadsheet) that outputs a 3D mesh surface as a point cloud (XYZ) that is converted to mesh PLY using MeshLab. It’s assumed the reader has some basic understanding of ABEC3™ and FreeCad™.
2. Model Components
The minimum components are listed below and are shown in the expanded view in Figure 1. The horn PLY mesh is imported into FreeCad where the additional components are created.
- Driver Membrane : idealized membrane used to drive the horn
- Outer Horn : horn surface facing exterior free space, same basic contour as inner horn
- Horn Edge : joins the inner and outer horn surfaces
- Inner Horn : PLY surface describing the horn contour
- Subdomain Interface : subdomain boundary between the inner horn and free space
A simulation model subdomain is defined by the inner horn’s contour (D), the driver membrane (A) and the horn’s boundary (E). The external subdomain is defined by the outer horn (B), horn edge (C) and boundary (E). The ABEC solver can then solve for the horn’s internal subdomain and then the exterior free space (4Pi) domain. This is a minimalist model to simulate just the horn contour in freespace. A system model would also include the compression driver, crossover, and amplifier models.
When the horn gets physically large it is beneficial to have these components separate to control the mesh resolution per component. The solve time increases dramatically with the #elements and it can get excessive if you are not careful. In general, a relatively finer resolution mesh is required on [A,D], medium mesh on [C,E] and coarse mesh on [B].
The coordinate system orientation is often different between the PLY mesh (horn expansion along Z-axis), and ABEC speaker (height is Z-axis), and FreeCad . Fortunately ABEC allows you to shift and rotate a component to place it in the correct orientation and location.
3. FreeCad Processing
3.1 Inner Horn (D)
The PLY mesh is imported into FreeCad using the Surface Workbench (WB) and converted to a surface in the Parts WB using “create shape from mesh”. The surface is cut into a ¼ symmetry model, to reduce the model size, using the Part WB block primitives (ie. boolean cut). All mesh elements that were cut open are also automatically closed by this operation. The ¼ symmetry inner horn model is used to create the additional parts.
3.2 Driver Membrane (A)
The ¼ symmetry inner horn throat edges are captured using Part WB “shape builder” to select the throat mesh edges to create a throat wire. The wire is converted in Draft WB to a schematic so it can be edited and converted to a surface to form the driver membrane. This ensures the membrane is edge and vertex aligned to the inner horn. The membrane is exported as a STEP file that can be meshed later in Gmsh to the desired resolution.
It is also possible to specify a membrane (flat, dome, etc) using the Diaphragm builder in ABEC3 but it will not be mesh edge and vertex aligned to the throat and may cause issues at higher freq.
3.3 OuterHorn (B)
If there is no horn roll back, the inner horn is copied and shifted 10mm and then cut even to the origin using block primitives. This allows the inner horn to nest in the outer horn.
If the horn has roll back (round over, Figure #2) then the horn must be separated, at the apex, into inner and outer horn surfaces. The mouth wire defines this boundary and section 3.5 (below) describes this separation operation. Once the outer horn surface is separated any open area between outer horn and throat must be closed. The rear facing edge of the rollback is captured using Part WB shape builder to create a wire. The roll back rear wire and throat wire are Part WB “lofted” to complete the outer horn model. In this case there are 2 parts to the outer horn to complete it.
3.4 Horn Edge (C)
In horns without rollback the ¼ symmetry inner horn mouth edges are selected in Part WB “create shape” to create an edge wire. The edge wire is extruded in Part WB extrusion 10mm to form the horn edge to join the inner and outer horn. It is edge and vertex aligned to both.
In horns with rollback there is no need for this horn edge because the inner and outer horn are continuous (see section 3.5 below, and Figure #2).
3.5 Mouth Interface (E)
There are a few methods used to create the mouth boundary and mouth face depending on the shape of the mouth and whether it has rollback.
Flat planer mouths like a baffle mounted horn are the easiest. The mouth boundary is captured using Part WB shape builder to create a wire from edges. The wire is converted to schematic using Draft WD “convert to schematic”. It can then be edited and used to create a face from wire in Part WB. It is exported as a STEP file for use in Gmsh.
Curved mouth boundaries without rollback use the Part WB “create shape” to capture the edge of the mouth. This type of mouth is not planar so it can’t be converted to a schematic. The mouth wire can be extruded and then cut to ¼ symmetry using Part WB. It can be exported as a STEP file.
Method #1 for curved mouth with rollback like shown in Figure#2. Again, the PartWB “create shape” is used to create a mouth wire from the edges. You can find the apex using Part WB “measure” to find the largest Z_value line. I typically create 3 wires (top, side, bottom) and the join them to form a closed wire then form a face from the wire. The mouth face is exported as STEP file. Occasionally this will fail for very irregular surfaces or irregular mesh boundaries so you can alternatively extrude the mouth perimeter wire and cut it to ¼ symmetry or use Method#2 (below).
Method #2 for curved mouth with rollback. First the horn PLY is imported into Meshlab and we use create ConvexHull to create an additional surface made from the mouth apex points of the horn. Then export the convex hull from Meshlab in STL format so it can be read by FreeCad. Import the convex hull STL into FreeCad and use Part WB create shape to capture the mouth boundary and create a wire. The mouth shape will be obvious as the area that is made from long rectangular sections across the mouth. The mouth wire will be extruded and used as a cutting tool to separate the mouth face from the hulled horn. Then the mouth wire is used to separate the inner horn and finally outer horn using the non-hulled horn. You will also need to use Part WB block primitives to remove any residues left from the cutting operation.
3.6 Exporting Components
Each component can be selected and exported individually from FreeCad as a STEP file. It is important to have a STEP file as it enables further processing in Gmesh to define the mesh resolution. You can also define the mesh edge length and export STL from FreeCad but it has less flexibility. All the exported components are ¼ symmetry models.
4. Gmesh Processing
Gmesh seems to be a favoured format by ABEC3™. It is possible to have all the surfaces in a single file and just specify the surface number in ABEC. I have separate component files so the resolution (Gmsh max edge length) can be changed independently. This is a benefit for large horns so you can limit the resolution to where it is needed in order to keep the model mesh #elements to a reasonable size to control simulation time.
For examples a 400Hz horn simulated up to 10Khz, needs the driver membrane meshed at 5mm (150 elements), the inner horn at 10mm (2800 elements), outer horn at 30mm (1000 elements) mouth interface at 10mm (1000 elements), and edge at 20mm (100 elements). This 5050 element model, with 64 frequencies on an 8 thread 3.5Ghz processor takes approx. 3-4 hrs to solve.
Sometimes the outer horn cannot to reduced to an adequate size and quality in Gmsh. In these cases I mesh at 20mm and export the file as STL. The STL file is imported into MeshLab and reduced using “quadratic edge collapse” with “preserve boundary” and you select #elements to reduce to. The reduced mesh is exported back as STL for use in ABEC.
5. Model Assembled
Figure 3, 4 show the components assembled, and Figure 5 shows a ¼ symmetry section view.