# Non-Adiabatic Calculations¶

## 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

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.

## Adiabatic Method¶

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.`

[1]

and the following parameters in the `&num`

namelist group:

`ad_search`

=`'BRACKET'`

[1]`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.`

[2]

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.`

[2]

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] | (1, 2) This is the default setting; you don’t need to include it explicitly |

[2] | (1, 2) This is optional; leave it out if you want GYRE to perform adiabatic calculations as well |