STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
engine.stability_hifi.validation.v1_cylinder Namespace Reference

Classes

class  ModeComparison

Functions

np.ndarray radial_eigenvalues (int m, int n_max)
List[ModeComparison] analytic_frequencies (float c, float L, float R, int m, int n_radial_max=2, int k_max=2)
List[ModeComparison] run_case (*, float c, float L, float R, int m, int nx, int nr, int n_radial_max=2, int k_max=2, int n_compare=4)

Detailed Description

Verification case V1: uniform closed-closed cylinder, passive (paper Section VII.A).

Analytic reference (rigid walls at both ends and the side wall):

    f_{m,n,k} = (c / 2*pi) * sqrt( (alpha'_{m,n} / R_c)^2 + (k*pi / L)^2 )

where ``alpha'_{m,n}`` is the n-th positive zero of ``J'_m`` (hard-wall transverse
eigenvalue — the same zeros used by the lumped model's
``engine.pipeline.stability.core.TRANSVERSE_EIGENVALUES``, cross-checked here from
first principles via a 2-D FEM solve rather than assumed) and ``k`` is the number of
axial half-wavelengths (``k=0`` allowed: a pure transverse mode with no axial
variation). ``m=n=k=0`` is excluded: it is the trivial uniform-pressure mode, an exact
zero eigenvalue of an all-Neumann-boundary problem (constant pressure has zero
gradient, hence zero stiffness) — physically real but not an *acoustic* mode.

This module builds the FEM prediction (via ``eigen.passive.solve_passive_modes`` on a
``synthetic_uniform_cylinder`` mean flow) and reports it against the closed form.

Function Documentation

◆ analytic_frequencies()

List[ModeComparison] engine.stability_hifi.validation.v1_cylinder.analytic_frequencies ( float c,
float L,
float R,
int m,
int n_radial_max = 2,
int k_max = 2 )
All analytic (alpha, k) candidate frequencies for wavenumber ``m``, trivial mode excluded.

Definition at line 59 of file v1_cylinder.py.

References radial_eigenvalues().

Referenced by run_case().

◆ radial_eigenvalues()

np.ndarray engine.stability_hifi.validation.v1_cylinder.radial_eigenvalues ( int m,
int n_max )
Positive zeros of J'_m relevant to azimuthal wavenumber ``m``.

For ``m=0`` the r=0 axis condition is Neumann (natural), so alpha=0 (uniform-in-r)
is an admissible branch, prepended to the true positive zeros of J'_0. For ``m>=1``
the axis condition is Dirichlet (p=0 at r=0, Section III.E), so alpha=0 is not
admissible and only the true positive zeros of J'_m apply.

Definition at line 45 of file v1_cylinder.py.

Referenced by analytic_frequencies().

◆ run_case()

List[ModeComparison] engine.stability_hifi.validation.v1_cylinder.run_case ( * ,
float c,
float L,
float R,
int m,
int nx,
int nr,
int n_radial_max = 2,
int k_max = 2,
int n_compare = 4 )
Run the FEM solve for wavenumber ``m`` and match the lowest ``n_compare`` modes
against the analytic candidates (both lists sorted ascending, matched pairwise).

Definition at line 73 of file v1_cylinder.py.

References analytic_frequencies().