## Overview¶

In addition to calculating the frequencies/periods of oscillation modes, GYRE can obtain the corresponding linear growth or damping rates. To do this, it includes non-adiabatic terms in the oscillation equations describing the transfer of heat between neighboring fluid elements. With these terms, the equations and their solutions become complex quantities. The assumed time dependence for perturbations is $$\propto \exp (-\ii \sigma t)$$ (see the Linearized Equations section); therefore, the real part $$\sigmar$$ and imaginary part $$\sigmai$$ of the eigenfrequency are related to the mode period $$\Pi$$ and growth e-folding time $$\tau$$, respectively, via

$\Pi = \frac{2\pi}{\sigmar}, \qquad \tau = \frac{1}{\sigmai}.$

Non-adiabatic calculations proceed using the same general approach as in the adiabatic case, by searching for the roots of a discriminant function $$\Dfunc(\omega)$$ (see the GYRE Fundamentals chapter for more details). However, a challenge is that there is no simple way to bracket roots in the complex plane. Instead, GYRE must generate initial trial roots that are close to the true roots, and then refine them iteratively. Currently, GYRE offers three methods for establishing the trial roots.

The adiabatic method involves adopting the (real) roots found from adiabatic calculations as the initial trial roots for the non-adiabatic problem. This works well as long as the adiabatic and non-adiabatic roots lie close together in the complex plane — typically, when the oscillation modes are only weakly non-adiabatic, with $$|\sigmai/\sigmar| \ll 1$$.

To perform non-adiabatic calculations with the adiabatic method, set the following parameters in the &osc namelist group:

• nonadiabatic=.TRUE.
• adiabatic=.TRUE.

and the following parameters in the &num namelist group:

• ad_search='BRACKET'
• nad_search='AD'

You may also wish to use the following setting in the &num namelist group:

• diff_scheme='MAGNUS_GL2'

This tells GYRE to evaluate the finite-difference equations using the 2nd order Magnus scheme; experience suggests that this gives the most reliable convergence for the root refinement.

## Minmod Method¶

The minmod method involves evaluating the discriminant function along the real-$$\omega$$ axis, and then adopting local minima in its modulus $$|\Dfunc|$$ as the initial trial roots for the non-adiabatic problem. The method is described in full in Goldstein & Townsend (2020); as shown there, it does not perform significantly better than the adiabatic method, and is included in GYRE for the sake of completeness.

To perform non-adiabatic calculations with the adiabatic method, set the following parameters in the &osc namelist group:

• nonadiabatic=.TRUE.
• adiabatic=.FALSE.

and the following parameters in the &num namelist group:

• nad_search='MINMOD'

As with the adiabatic method, you may also wish to use the following setting in the &num namelist group:

• diff_scheme='MAGNUS_GL2'

## Contour Method¶

The contour method involves evaluating the discriminant function on a grid in the complex-$$\omega$$ plane, and then adopting intersections between the real zero-contours $$\Dfuncr=0$$, and the corresponding imaginary ones $$\Dfunci=0$$, as the initial trial roots for the non-adiabatic problem. The method is described in full in Goldstein & Townsend (2020); it is very effective even for strongly non-adiabatic modes with $$|\sigmai/\sigmar| \sim 1$$, although there is an increased computational cost (see here for one strategy for mitigating this cost).

To perform non-adiabatic calculations with the contour method, set the following parameters in the &osc namelist group:

• nonadiabatic=.TRUE.
• adiabatic=.FALSE.

and the following parameters in the &num namelist group:

• nad_search='CONTOUR'

Finally, you must also ensure that at least one &scan namelist group with axis='REAL' is present, and likewise at least one with axis='IMAG'. Together, these groups define the real and imaginary axes of the discriminant grid in the complex-$$\omega$$ plane. As a rule of thumb, the resolution along the imaginary axis should be comparable to that along the real axis; this ensures that the contour-tracing algorithm behaves well.

Finally, as with the adiabatic method, you may also wish to use the following setting in the &num namelist group:

• diff_scheme='MAGNUS_GL2'

Footnotes

  (1, 2) This is the default setting; you don’t need to include it explicitly
  (1, 2) This is optional; leave it out if you want GYRE to perform adiabatic calculations as well