# kap module controls

The MESA/kap parameters are given default values here. The actual values as modified by your inlist are stored in the Kap_General_Info data structure. They can be accessed by code at runtime using the kap_handle to get a pointer to it.

## Base metallicity

### Zbase

The base metallicity for the opacity tables. This provides the reference metallicity necessary to calculate element variations. Physically, this usually corresponds to the initial metallicity of the model and remains static during the entirety of a calculation. Variations in metallicity from nuclear burning and mixing should not alter Zbase as its purpose is to serve as a reference metallicity for C and O enhancement during Helium burning.

See `use_Zbase_for_Type1`

. By default, Zbase does not typically affect the
outer regions of a stellar model when the surface metallicity remains
below the initial metallicity (Z < Zbase). Zbase is typically
only used for Type2 opacities which operate deeper in the stellar interior.

Specific scenarios such as high Z accretion onto a metal poor model
can produce a situation where (Z > Zbase). During this scenario
the surface metallicity can be enhanced beyond the initial metallicity.
Users can opt to exclusively adopt Type1 opacities in this scenario with
the `use_Zbase_for_Type1`

flag.

NOTE: For wind schemes that scale with metallicity, we use Zbase rather than Z (as long as Zbase > 0). This is because wind mass loss rate is primarily determined by iron opacity, which is unlikely to change during the evolution.

Zbase must be set if using kapCN, AESOPUS, or Type2 opacities or else MESA well draw an error.

```
Zbase = -1
```

## Table selection

### kap_file_prefix

Select the set of opacity tables for higher temperature, hydrogen-rich conditions. Also referred to as Type1 tables. See Blend controls to understand precisely when these tables are used.

These tables use the value of `Zbase`

for Z, unless `use_Zbase_for_Type1 = .false.`

.

The Type1 tables cover a wider range of X and have a higher resolution in Z for each X than Type2. The OPAL/OP Type1 tables are for 126 (X,Z) pairs from the following sets:

X: 0.0, 0.1, 0.2, 0.35, 0.5, 0.7, 0.8, 0.9, 0.95, 1-Z

Z: 0.0, 1e-4, 3e-4, 1e-3, 2e-3, 4e-3, 1e-2, 2e-2, 3e-2, 4e-2, 6e-2, 8e-1, 1e-1

The OPLIB Type1 tables offer additional table density, for 1194 (X,Z) pairs from the following sets:

X: 0.0, 0.000001, 0.00001, 0.0001, 0.001, 0.01, 0.05, 0.1,

0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5,

0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9,

0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97,

0.98, 0.99, 1-Z

Z: 0.0, 0.000001, 0.00001, 0.00003, 0.00007, 0.0001,

0.0003, 0.0007, 0.001, 0.002, 0.003, 0.004,0.006,

0.008, 0.01, 0.012, 0.014, 0.015, 0.016, 0.017, 0.018,

0.019, 0.02, 0.021, 0.022, 0.023, 0.024, 0.025, 0.026,

0.028, 0.03, 0.035, 0.04, 0.05, 0.06, 0.07, 0.08,

0.09, 0.1, 0.15, 0.2

Available options:

`'gn93'`

`'gs98'`

`'a09'`

`'OP_gs98'`

`'OP_a09_nans_removed_by_hand'`

`'oplib_gs98`

’`'oplib_agss09`

’`'oplib_aag21`

’`'oplib_mb22`

’

```
kap_file_prefix = 'gs98'
```

### kap_CO_prefix

Select the set of opacity tables for higher temperature, hydrogen-poor/metal-rich conditions.
Also referred to as Type2 tables.
Critically, Type2 tables account for C and O enhancement during and after He burning.
See Blend controls to understand precisely when these tables are used.
abundances previous to any CO enhancement.
Ignored if `use_Type2_opacities = .false.`

.

These tables use the value of `Zbase`

as the base metallicity.

The Type2 tables are for (X,Z) pairs from the following sets:

X: 0.0, 0.03, 0.10, 0.35, 0.70

Z: 0.00, 0.001, 0.004, 0.01, 0.02, 0.03, 0.05, 0.1

Available options:

`'gn93_co'`

`'gs98_co'`

`'a09_co'`

```
kap_CO_prefix = 'gs98_co'
```

### kap_lowT_prefix

Select a set of opacity tables for lower temperatures.

Available options:

`'lowT_fa05_mb22'`

`'lowT_fa05_aag21'`

`'lowT_Freedman11'`

`'lowT_fa05_gs98'`

`'lowT_fa05_gn93'`

`'lowT_fa05_a09p'`

`'lowT_af94_gn93'`

`'lowT_rt14_ag89'`

`'kapCN'`

`'AESOPUS'`

`kap_CN`

uses tables from

Lederer, M. T.; Aringer, B. (2009)Low temperature Rosseland opacities with varied abundances of carbon and nitrogen

`'AESOPUS'`

uses tables from AESOPUS

Marigo, P.; Aringer, B. (2009)Low-temperature gas opacity. ÆSOPUS: a versatile and quick computational tool

Specify which file using `AESOPUS_filename`

.
The file is first looked for in the work directory. If not found, then data/kap_data is searched.
Currently one set of opacities is provided, with the filename `'AESOPUS_AGSS09.h5'`

.

To see more detail about the composition details of the tables set `show_info = .true.`

.

You can generate your own tables with their web interface at http://stev.oapd.inaf.it/cgi-bin/aesopus . See kap/preprocessor/AESOPUS/README for information on preparing the tables for MESA.

```
kap_lowT_prefix = 'lowT_fa05_gs98'
AESOPUS_filename = '' ! used only if kap_lowT_prefix = 'AESOPUS'
```

## Blend controls

### use_Zbase_for_Type1

If true, then if `use_Type2_opacities = .true.`

, Type1 opacities will be computed
using `Zbase`

instead of `Z`

when Z > Zbase. This helps with blending from Type1 to Type2.
Ignored if `use_Type2_opacities = .false.`

.

```
use_Zbase_for_Type1 = .true.
```

### use_Type2_opacities

Select whether to use Type2 opacity tables (see kap_CO_prefix).
Even when true, in regions where hydrogen is
above a given threshold, or the metallicity is not significantly higher than
`Zbase`

, Type1 tables are used instead, with blending regions to smoothly
transition from one to the other (see following controls).

```
use_Type2_opacities = .true.
```

### kap_Type2_full_off_X

### kap_Type2_full_on_X

Switch to Type1 if X too large.
Type2 is full off for `X >= kap_Type2_full_off_X`

Type2 can be full on for `X <= kap_Type2_full_on_X`

.

```
kap_Type2_full_off_X = 1d-3
kap_Type2_full_on_X = 1d-6
```

### kap_Type2_full_off_dZ

### kap_Type2_full_on_dZ

Switch to Type1 if dZ too small `(dZ = Z - Zbase)`

.
Type2 is full off for `dZ <= kap_Type2_full_off_dZ`

.
Type2 can be full on for `dZ >= kap_Type2_full_on_dZ`

.

```
kap_Type2_full_off_dZ = 0.001d0
kap_Type2_full_on_dZ = 0.01d0
```

X and dZ terms are multiplied to get actual fraction of Type2.
The fraction of Type2 is calculated for each cell depending on the X and dZ for that cell.
So you can be using Type1 in cells where X is large or dZ is small,
while at the same time you can be using Type2 where X is small and dZ is large.
When `frac_Type2`

is > 0 and < 1, then both Type1 and Type2 are evaluated and
combined linearly as `(1-frac_Type2)*kap_type1 + frac_Type2*kap_type2`

.
Add `kap_frac_Type2`

to your profile columns list to see `frac_Type2`

for each cell.

### kap_blend_logT_upper_bdy

### kap_blend_logT_lower_bdy

Region to blend between higher temperature tables (see kap_file_prefix and kap_CO_prefix) and lower temperature tables (see kap_lowT_prefix).

The upper/lower blend boundary will be clipped to the true extent
of the opacity tables. The upper boundary will be min of
`kap_blend_logT_upper_bdy`

and the max logT for lowT tables.
The lower boundary will be max of `kap_blend_logT_lower_bdy`

and min logT for highT tables. The typical min logT of the
higher temperature tables tables is 3.75. Check your tables to
be sure.

It is probably a good idea to keep the blend away from H ionization. logT upper of about 3.9 or a bit less will do that.

```
kap_blend_logT_upper_bdy = 3.88d0
kap_blend_logT_lower_bdy = 3.80d0
```

## Interpolation options

### cubic_interpolation_in_X

type of interpolation in X. true is cubic; false is linear.

```
cubic_interpolation_in_X = .false.
```

### cubic_interpolation_in_Z

type of interpolation in Z. true is cubic; false is linear.

```
cubic_interpolation_in_Z = .false.
```

## Custom tables

If the prefix options in Table selection above do not match one of the available options,
MESA still searches for files in `data/kap_data`

with the given prefix.
This allows for custom tables. However, the user must also indicate
the X and Z values for which the tables are provided.

Separate controls exist for each class of prefix.

### user_num_kap_Xs

Number of X values.

```
! user_num_kap_Xs = 10
```

### user_kap_Xs

X values for the tables (length `user_num_kap_Xs`

).
Values such that X + Z > 1 will have X reduced to 1-Z.
Choose `user_num_kap_Xs_for_this_Z`

such that at most 1 X value for each Z will be reduced in this way.

```
! user_kap_Xs = 0.0d0, 0.1d0, 0.2d0, 0.35d0, 0.5d0, 0.7d0, 0.8d0, 0.9d0, 0.95d0, 1.0d0
```

### user_num_kap_Zs

Number of Z values.

```
! user_num_kap_Zs = 13
```

### user_kap_Zs

Z values for the tables (length `user_num_kap_Zs`

).

```
! user_kap_Zs = 0.000d0, 0.0001d0, 0.0003d0, 0.001d0, 0.002d0, 0.004d0, 0.01d0, 0.02d0, 0.03d0, 0.04d0, 0.06d0, 0.08d0, 0.100d0
```

### user_num_kap_Xs_for_this_Z

At different values of Z, the number of values of X may change. In particular, tables with `X > 1-Z`

will not exist.
Use the first N (`<= user_num_kap_Xs`

) X values for the tables of the corresponding Z (length `user_num_kap_Zs`

).

```
! user_num_kap_Xs_for_this_Z = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 8
```

### user_num_kap_CO_Xs

Number of X values.

```
! user_num_kap_CO_Xs = 5
```

### user_kap_CO_Xs

X values for the tables (length `user_num_kap_CO_Xs`

).

```
! user_kap_CO_Xs = 0.00d0, 0.03d0, 0.10d0, 0.35d0, 0.70d0
```

### user_num_kap_CO_Zs

Number of Z values.

```
! user_num_kap_CO_Zs = 8
```

### user_kap_CO_Zs

Z values for the tables (length `user_num_kap_CO_Zs`

).

```
! user_kap_CO_Zs = 0.000d0, 0.001d0, 0.004d0, 0.010d0, 0.020d0, 0.030d0, 0.050d0, 0.100d0
```

### user_num_kap_CO_Xs_for_this_Z

At different values of Z, the number of values of X may change. In particular, tables with `X > 1-Z`

will not exist.
Use the first N (`<= user_num_kap_CO_Xs`

) X values for the tables of the corresponding Z (length `user_num_kap_CO_Zs`

).

```
! user_num_kap_CO_Xs_for_this_Z = 5, 5, 5, 5, 5, 5, 5, 5
```

### user_num_kap_lowT_Xs

Number of X values.

```
! user_num_kap_lowT_Xs = 10
```

### user_kap_lowT_Xs

X values for the tables (length `user_num_kap_lowT_Xs`

).
Values such that X + Z > 1 will have X reduced to 1-Z.
Choose `user_num_kap_lowT_Xs_for_this_Z`

such that at most 1 X value for each Z will be reduced in this way.

```
! user_kap_lowT_Xs = 0.0d0, 0.1d0, 0.2d0, 0.35d0, 0.5d0, 0.7d0, 0.8d0, 0.9d0, 0.95d0, 1.0d0
```

### user_num_kap_lowT_Zs

Number of Z values.

```
! user_num_kap_lowT_Zs = 13
```

### user_kap_lowT_Zs

Z values for the tables (length `user_num_kap_lowT_Zs`

).

```
! user_kap_lowT_Zs = 0.000d0, 0.0001d0, 0.0003d0, 0.001d0, 0.002d0, 0.004d0, 0.01d0, 0.02d0, 0.03d0, 0.04d0, 0.06d0, 0.08d0, 0.100d0
```

### user_num_kap_lowT_Xs_for_this_Z

At different values of Z, the number of values of X may change. In particular, tables with `X > 1-Z`

will not exist.
Use the first N (`<= user_num_kap_lowT_Xs`

) X values for the tables of the corresponding Z (length `user_num_kap_lowT_Zs`

).

```
! user_num_kap_lowT_Xs_for_this_Z = 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 8
```

## Conductive opacity options

### include_electron_conduction

add conduction opacities to radiative opacities

```
include_electron_conduction = .true.
```

### use_blouin_conductive_opacities

Use fits from Blouin et al. (2020) for H and He in the regime of moderate coupling and moderate degeneracy.

```
use_blouin_conductive_opacities = .true.
```

## Miscellaneous controls

### show_info

if true, then output additional information as the opacities are loaded. this is particularly useful to see the detailed composition coverage of the AESOPUS opacity files.

```
show_info = .false.
```

## Other hooks

Control whether to use other hooks. See `kap/other`

.

### use_other_elect_cond_opacity

Replace electron conduction opacity routine

```
use_other_elect_cond_opacity = .false.
```

### use_other_compton_opacity

Replace Compton opacity routine

```
use_other_compton_opacity = .false.
```

### use_other_radiative_opacity

Replace radiative opacity routine. The standard routine evaluates the opacity using the low-T and high-T tables.

```
use_other_radiative_opacity = .false.
```

## User controls

These are arrays of size(10) that can be used to pass in custom information to kap

```
kap_ctrl(:) = 0d0
kap_integer_ctrl(:) = 0
kap_logical_ctrl(:) = .false.
kap_character_ctrl(:) = ''
```

## Extra inlist controls

One can split a kap inlist into pieces using the following parameters. It works recursively, so the extras can read extras too.

### read_extra_kap_inlist(1..5)

### extra_kap_inlist_name(1..5)

If `read_extra_kap_inlist(i)`

is true, then read `&eos`

from the file `extra_kap_inlist_name(i)`

.

```
read_extra_kap_inlist(:) = .false.
extra_kap_inlist_name(:) = 'undefined'
```

## Debugging controls

Specify a range of calls for which to receive debugging information.

```
dbg = .false.
logT_lo = -1d99
logT_hi = 1d99
logRho_lo = -1d99
logRho_hi = 1d99
X_lo = -1d99
X_hi = 1d99
Z_lo = -1d99
Z_hi = 1d99
```