elements.catalog.tapered_duct
elements.catalog.tapered_duct(area, length=None, n_segments=None, name='taper')Tapered duct / horn / con-di nozzle resolved from an (x, A) profile.
Discretizes a continuously area-varying acoustic passage into N segments, each a compact area change A_i -> A_{i+1} followed by a length-(x_{i+1} - x_i) duct at the segment’s downstream area (the catalog has no length-bearing area-change atom, so a segment is two atoms). As N grows the chain converges to the true horn, and a con-di profile chokes at its true throat – the min-area edge – with the isentropic-area-change complementarity engaging on exactly that segment.
The standard input is a table of (x, A) pairs: the axial positions x [m] set the station spacing (which may be non-uniform – cluster stations where the area varies fastest, e.g. near a throat) and the total length is inferred from them. A callable A(x) is also accepted; it is sampled at n_segments + 1 equispaced stations.
Because each segment carries a real :func:duct, the taper propagates acoustic waves through its interior (each duct spans its own station interval); the area-change atoms are compact.
Parameters
| Name | Type | Description | Default |
|---|---|---|---|
| area | sequence of (float, float), or callable | A table of (x, A) station pairs – axial position x [m] (strictly increasing) and area A [m^2] – or a callable A(x) [m^2] sampled at n_segments + 1 equispaced stations over [0, length]. The two external edges must carry A0 (upstream) and AN (downstream). |
required |
| length | float | Total axial length L [m]. Required for a callable area; for an (x, A) table it is inferred as xN - x0 and, if given, checked against that span. |
None |
| n_segments | int | Segment count N – required when area is a callable; for an (x, A) table it is len(table) - 1 (and, if given, checked against it). |
None |
| name | str | Display name. | 'taper' |
Returns
| Name | Type | Description |
|---|---|---|
| CompositeElementSpec |