# star_job¶

## directories¶

### mesa_dir¶

if set to the empty string, ‘’, then it defaults to using
environment variable `$(MESA_DIR)`

```
mesa_dir = ''
```

### chem_isotopes_filename¶

this file is in `chem_data`

in `mesa_data_dir`

```
chem_isotopes_filename = 'isotopes.data '
```

### pause_before_terminate¶

if true, then will pause before terminate run. this can be useful if you’d like a chance to look at the final model pgstar windows before they go away.

```
pause_before_terminate = .false.
```

#### cache directories¶

### eosDT_cache_dir¶

### kap_cache_dir¶

### rates_cache_dir¶

mesa uses caches to improve performance. the default location for these is in the mesa/data directory, but in some situations it is useful to keep the caches separately so, for example, multiple users can share the code and each can have a separate set of caches. ‘’ means use default location for cache.

The need for separate caches arises in cases where we need to put the main mesa directory in a location that is “read only” for a group of users (such as in a system directory that requires “root” or “superuser” to write). In that case the caches must be moved out of the main directory to locations that the user can write.

if you specify cache directories, use a separate one for each. e.g., something like this

```
eosDT_cache_dir = '/Users/bpaxton/mesa_caches/eosDT_cache'
kap_cache_dir = '/Users/bpaxton/mesa_caches/kap_cache'
rates_cache_dir = '/Users/bpaxton/mesa_caches/rates_cache'
```

If you give an empty string for the `cache_dir`

, then
if you have set the environment variable `MESA_CACHES_DIR`

, then
the cache is a subdirectory of that with one of the following names:
`eosDT_cache`

, `kap_cache`

, `rates_cache`

if `MESA_CACHES_DIR`

is not set or is the empty string, then
the cache is a subdirectory of the corresponding data subdirectory,
such as `data/rates_data/cache`

for the rates cache.

```
eosDT_cache_dir = ''
kap_cache_dir = ''
rates_cache_dir = ''
```

## output¶

### echo_at_start¶

```
echo_at_start = ''
```

### echo_at_end¶

```
echo_at_end = ''
```

### show_log_description_at_start¶

set this false if you want to skip the initial terminal output

```
show_log_description_at_start = .true.
```

### show_net_species_info¶

if true, then output a list of the species in the current net

```
show_net_species_info = .false.
```

### show_net_reactions_info¶

if true, then output information about the reactions in the current net

```
show_net_reactions_info = .false.
```

### list_net_reactions¶

if true, then output a simple list of the reactions in the current net

```
list_net_reactions = .false.
```

### show_eqns_and_vars_names¶

if true, then output a list of the names of the equations and variables

```
show_eqns_and_vars_names = .false.
```

### disable_pgstar_during_relax_flag¶

if true, disables pgplot output during relaxation operations

```
disable_pgstar_during_relax_flag = .true.
```

### clear_initial_pgstar_history¶

### clear_pgstar_history¶

```
clear_initial_pgstar_history = .true.
clear_pgstar_history = .false.
```

### save_pgstar_files_when_terminate¶

if true, then when the run terminates,
pgstar outputs files for plots that have `file_flag = .true.`

independently of the corresponding `file_interval`

.

```
save_pgstar_files_when_terminate = .false.
```

### save_model_number¶

at any point during the run, you can save a model for later use

```
save_model_number = -111
```

### save_model_when_terminate¶

### required_termination_code_string¶

save final model when a run terminates only happens if satisfy required termination code if string is empty, then this matches all termination codes there can be several different alternative termination codes

```
save_model_when_terminate = .false.
required_termination_code_string(:) = ''
```

### save_photo_when_terminate¶

if true, then save photo for last model before terminate the run

```
save_photo_when_terminate = .true.
```

### profile_starting_model¶

### profile_model_number¶

write profile for a specific model number

```
profile_starting_model = .false.
profile_model_number = -1111
```

### show_retry_counts_when_terminate¶

### show_timestep_limit_counts_when_terminate¶

```
show_retry_counts_when_terminate = .true.
show_timestep_limit_counts_when_terminate = .true.
```

### write_profile_when_terminate¶

### filename_for_profile_when_terminate¶

write profile to a given name upon termination

```
write_profile_when_terminate = .false.
filename_for_profile_when_terminate = ''
```

### save_pulse_data_for_model_number¶

### save_pulse_data_when_terminate¶

### save_pulse_data_filename¶

write pulsation data for the model (format given by `s% pulse_data_format`

)

```
save_pulse_data_for_model_number = -111
save_pulse_data_when_terminate = .false.
save_pulse_data_filename = 'undefined'
```

## starting model¶

By default at the start of a run a zams starting model is loaded,
and then the `initial_mass`

, `initial_z`

, and `initial_y`

are adjusted as necessary.
However, there are alternatives. you can use a model you saved previously,
or you can request the system to create a pre-main-sequence model.

BTW: the system finds the zams file by using the control called `zams_filename`

the default zams file is for Z=0.02 and lives in `data/star_data/zams_models`

.
You can create your own zams file and use it instead – see `test_suite/create_zams`

.

### load_saved_model¶

### load_model_filename¶

If `load_saved_model`

is true, then use the specified model.
If `load_saved_model_for_RSP`

is true, then load the specified model and run it with RSP.

```
load_saved_model = .false.
load_model_filename = 'undefined'
```

### create_pre_main_sequence_model¶

If true, the code will create a starting model with uniform composition, a core temperature below 10^6 so no nuclear burning, and uniform contraction for enough luminosity to make it fully convective.

The mass is `initial_mass`

from the controls namelist.

if `initial_y`

is < 0 in the controls,
then code uses `0.24 + 2*initial_z`

for `initial_y`

.

The h1 mass fraction is set to `1 - (initial_y + initial_z)`

.
The he3 and he4 mass fractions are set according to `initial_y`

with relative amounts set according to the AG89 solar mass fractions (from `chem_def`

).

The metallicity is `initial_z`

from the controls namelist
with the metals fractions set according to the GS98 values (from `chem_def`

).

to set the metals fractions, use `initial_zfracs`

(described below)

```
create_pre_main_sequence_model = .false.
```

### pre_ms_T_c¶

Initial center temperature (must be below 1d6).
If you have initial convergence problems creating a pre-ms model,
you might try different values for `pre_ms_T_c`

– that sometimes helps.

```
pre_ms_T_c = 3d5
```

### pre_ms_guess_rho_c¶

Guess for initial center density; set to 0 to let the code pick.

```
pre_ms_guess_rho_c = 0
```

### pre_ms_d_log10_P¶

Suggested spacing in pressure between points; set to 0 to let the code pick.

```
pre_ms_d_log10_P = 0
```

### pre_ms_logT_surf_limit¶

### pre_ms_logP_surf_limit¶

Model construction is from inside out and stops when reaches either of the following limits.

```
pre_ms_logT_surf_limit = 3.7d0
pre_ms_logP_surf_limit = 3.5d0
```

### pre_ms_relax_num_steps¶

Let pre-ms model settle in for this many steps before changing anything else. Make this large enough to allow L and Teff to adjust before starting history log.

```
pre_ms_relax_num_steps = 300
```

### pre_ms_relax_to_start_radiative_core¶

Let pre-ms model contract until just begins to have a tiny radiative core. i.e., keep going until just after stop being fully convective. This test starts after finish pre_ms_relax_num_steps.

```
pre_ms_relax_to_start_radiative_core = .true.
```

### pre_ms_min_steps_before_check_radiative_core¶

### pre_ms_check_radiative_core_start¶

### pre_ms_check_radiative_core_stop¶

### pre_ms_check_radiative_core_Lnuc_div_L_limit¶

### pre_ms_check_radiative_core_min_mass¶

pre_ms_relax_to_start_radiative_core. wait this many steps before start checking for radiative core pre_ms_check_radiative_core_start. only start checking after have encountered min_conv_mx1_bot < this this forces it to wait until after have become fully convective. pre_ms_check_radiative_core_stop. stop when conv_mx1_bot > this (measured in q). The relaxation to a radiative core is stopped if Lnuc/L>pre_ms_check_radiative_core_Lnuc_div_L_limit, or when the mass is below pre_ms_check_radiative_core_min_mass (in Msun).

```
pre_ms_min_steps_before_check_radiative_core = 50
pre_ms_check_radiative_core_start = 1d-6
pre_ms_check_radiative_core_stop = 1d-3
pre_ms_check_radiative_core_Lnuc_div_L_limit = 0.1d0
pre_ms_check_radiative_core_min_mass = 0.3d0
```

### create_initial_model¶

This is an alternative to `create_pre_main_sequence_model`

.
If true, creates an adiabatic, contracting model for given mass and radius.
Assumes no nuclear burning and constant entropy. Ignores radiation pressure.
Uses star controls `initial_y`

and `initial_z`

to set X, Y, and Z.
Uses `initial_zfracs`

to set abundances of metals.

Note: if you’d like to do-it-yourself, then you can use `other_build_initial_model`

.
In that case, in addition to setting `create_initial_model`

, also set
star controls `use_other_build_initial_model`

.
Then your `run_star_extras`

routine will be called instead of the standard one.

```
create_initial_model = .false.
```

### create_RSP_model¶

```
create_RSP_model = .false.
```

### radius_in_cm_for_create_initial_model¶

### mass_in_gm_for_create_initial_model¶

Radius in cm and mass in grams.

```
radius_in_cm_for_create_initial_model = 0
mass_in_gm_for_create_initial_model = 0
```

### center_logP_1st_try_for_create_initial_model¶

### entropy_1st_try_for_create_initial_model¶

### max_tries_for_create_initial_model¶

### abs_e01_tolerance_for_create_initial_model¶

### abs_e02_tolerance_for_create_initial_model¶

```
center_logP_1st_try_for_create_initial_model = 10.9d0
entropy_1st_try_for_create_initial_model = 11.5d0
max_tries_for_create_initial_model = 100
abs_e01_tolerance_for_create_initial_model = 1d-4
abs_e02_tolerance_for_create_initial_model = 1d-4
```

### initial_model_relax_num_steps¶

Let initial model settle in for this many steps before changing anything else.

```
initial_model_relax_num_steps = 10
```

## when to stop¶

### steps_to_take_before_terminate¶

If >= 0, stop after taking this many steps.
Sets `max_model_number`

= `model_number`

+ `steps_to_take_before_terminate`

.
Ignore if < 0.

```
steps_to_take_before_terminate = -1
```

### stop_if_this_file_exists¶

Every 100 steps, the code will try to open this file. If the file exists, it will terminate the run. If the file doesn’t exist, it will keep going.

```
stop_if_this_file_exists = 'stop_if_this_file_exists'
```

## modifications to model¶

These controls enable one to alter the MESA model at the
start of a run (`./rn`

) or after a restart (`./re`

). Controls
that only apply to the first model have ‘initial’ in their
names, and are ignored for restarts.

### set_initial_age¶

### set_initial_model_number¶

### initial_model_number¶

if true, set initial model number

```
set_initial_model_number = .false.
initial_model_number = 0
```

### set_initial_number_retries¶

### initial_number_retries¶

if true, set initial number of retries if false, number of retries set from initial model info

```
set_initial_number_retries = .true.
initial_number_retries = 0
```

### set_initial_dt¶

### years_for_initial_dt¶

### seconds_for_initial_dt¶

if true, set initial timestep, dt, in years

```
set_initial_dt = .false.
years_for_initial_dt = -1
seconds_for_initial_dt = -1
```

### limit_initial_dt¶

Like `set_initial_dt`

, but does not increase current value for `dt_next`

.
Used in conjunction with `years_for_initial_dt`

and `seconds_for_initial_dt.`

```
dt_next = min(dt_next, years_for_initial_dt*secyer)
```

```
limit_initial_dt = .false.
```

### set_uniform_initial_composition¶

Set uniform composition.
This is useful with `create_pre_main_sequence_model`

.

```
set_uniform_initial_composition = .false.
```

### initial_h1¶

### initial_h2¶

### initial_he3¶

### initial_he4¶

if `set_uniform_initial_composition`

is true, then
set hydrogen and helium mass fractions according to the following:
If no h2 in current net, then this will be added to h1.
If no he3 in current net, then this will be added to he4.

```
initial_h1 = -1
initial_h2 = -1
initial_he3 = -1
initial_he4 = -1
```

### initial_zfracs¶

if `set_uniform_initial_composition`

is true, then set metal fractions
z fractions – select one of the options defined in `chem/public/chem_def`

:

`AG89_zfracs = 1`

`GN93_zfracs = 2`

`GS98_zfracs = 3`

`L03_zfracs = 4`

`AGS05_zfracs = 5`

`AGSS09_zfracs = 6`

`L09_zfracs = 7`

`A09_Prz_zfracs = 8`

for example, `initial_zfracs = 3`

for `GS98_zfracs`

or set `initial_zfracs = 0`

to use the special list of z fractions specified in controls
(i.e., `z_fraction_li`

, `z_fraction_be`

, `z_fraction_b`

, etc.)

```
initial_zfracs = 3
```

### dump_missing_metals_into_heaviest¶

this controls the treatment metals that are not included in the current net. if this flag is true, then the mass fractions of missing metals are added to the mass fraction of the most massive metal included in the net. if this flag is false, then the mass fractions of the metals in the net are renormalized to make up for the total mass fraction of missing metals.

```
dump_missing_metals_into_heaviest = .true.
```

### file_for_uniform_xa¶

### set_uniform_initial_xa_from_file¶

### set_uniform_xa_from_file¶

an alternative to the above `set_uniform_initial_composition`

method.
if `set_uniform_initial_xa_from_file`

is .true.,
read list of iso name and mass fraction pairs from file `file_for_uniform_xa`

and use them to set uniform composition.
E.g., to convert the star to pure fe56,
a file with just the following line will work.

```
fe56 1.0
```

```
file_for_uniform_xa = ''
set_uniform_initial_xa_from_file = .false.
set_uniform_xa_from_file = .false.
```

### mix_section¶

### mix_initial_section¶

### mix_section_nzlo¶

### mix_section_nzhi¶

fully mix section of model

```
mix_section = .false.
mix_initial_section = .false.
mix_section_nzlo = -1
mix_section_nzhi = -1
```

### mix_envelope_down_to_T¶

### mix_initial_envelope_down_to_T¶

fully mix envelope from surface down to given temperature

```
mix_envelope_down_to_T = 0
mix_initial_envelope_down_to_T = 0
```

### set_abundance¶

### set_initial_abundance¶

### chem_name¶

### new_frac¶

### set_abundance_nzlo¶

### set_abundance_nzhi¶

given a `chem_name`

from `chem_def`

,
set its abundance to be `new_frac`

in a given range of cells, from `set_abundance_nzlo`

to `set_abundance_nzhi`

```
set_abundance = .false.
set_initial_abundance = .false.
chem_name = 'he3'
new_frac = 0
set_abundance_nzlo = -1
set_abundance_nzhi = -1
```

### replace_element¶

### replace_initial_element¶

### chem_name1¶

### chem_name2¶

### replace_element_nzlo¶

### replace_element_nzhi¶

replace one iso by another in a given range of cells
`chem_name1`

and `chem_name2`

from `chem_def`

```
replace_element = .false.
replace_initial_element = .false.
chem_name1 = 'he3'
chem_name2 = 'he4'
replace_element_nzlo = -1
replace_element_nzhi = -1
```

### relax_initial_composition¶

### num_steps_to_relax_composition¶

### relax_composition_filename¶

relax composition from current to specified over number of steps.
`relax_composition_filename`

holds the desired composition profile information
file format for relax composition

1st line: num_points num_species then 1 line for for each point where define desired composition xq xa(1) … xa(num_species) xq = fraction of xmstar exterior to the point where xmstar = mstar - M_center the interpolation routines require that the xq values which appear in your file must be monotonically increasing xa(i) = mass fraction of i’th species

NOTE: it is up to you to ensure that the current net isotopes match
the species in the composition file.
You can set `show_net_species_info = .true.`

to check the isotopes in the net.

If timescale_for_relax_composition is negative, then the model will be adjusted such that in num_steps_to_relax_composition the desired composition is obtained. Otherwise, the abundance of each element will be updated each step as

new_xa = lambda*target_xa + (1-lambda)*current_xa

where lambda = dt/timescale_for_relax_composition. In this way, the target composition is reached when dt>=timescale_for_relax_composition.

```
relax_initial_composition = .false.
num_steps_to_relax_composition = 100
relax_composition_filename = ''
timescale_for_relax_composition = -1d0
```

### relax_initial_to_xaccrete¶

Like `relax_initial_composition`

(and uses `num_steps_to_relax_composition`

),
but new composition is set by current specification of accretion abundances.

```
relax_initial_to_xaccrete = .false.
```

some modifications must be done gradually over several steps in “pseudo” evolution these operations have “relax” in their names. many have an alternative, with “set” in name, that simply make the change all at once. the “set” version is fine if star can manage to converge the modified model. but for larger changes where that’s not possible, you’ll need to “relax” instead.

### relax_Y¶

### change_Y¶

### relax_initial_Y¶

### change_initial_Y¶

### relax_Y_minq¶

### relax_Y_maxq¶

### new_Y¶

`relax_Y = .true.`

gradually changes average Y, reconverging at each step.
`change_Y = .true.`

changes abundances; doesn’t reconverge the model.
note: `relax_dY`

in the controls inlist determines the rate of change

```
relax_Y = .false.
change_Y = .false.
relax_initial_Y = .false.
change_initial_Y = .false.
relax_Y_minq = 0d0
relax_Y_maxq = 1d0
new_Y = -1
```

### relax_Z¶

### change_Z¶

### relax_initial_Z¶

### change_initial_Z¶

### relax_Z_minq¶

### relax_Z_maxq¶

### new_Z¶

`relax_Z = .true.`

gradually changes average Z, reconverging at each step.
`change_Z = .true.`

simply changes abundances; doesn’t reconverge the model.
note: `relax_dlnZ`

in the controls inlist determines the rate of change

```
relax_Z = .false.
change_Z = .false.
relax_initial_Z = .false.
change_initial_Z = .false.
relax_Z_minq = 0d0
relax_Z_maxq = 1d0
new_Z = -1
```

### relax_mass¶

### relax_initial_mass¶

### new_mass¶

### lg_max_abs_mdot¶

Gradually change total mass by a wind to `new_mass`

.
`lg_max_abs_mdot = -4`

means max abs mdot 1d-4 msun/year;
Set <= -100 to let code pick.

```
relax_mass = .false.
relax_initial_mass = .false.
new_mass = -1
lg_max_abs_mdot = -100
```

### relax_mass_to_remove_H_env¶

### relax_initial_mass_to_remove_H_env¶

### extra_mass_retained_by_remove_H_env¶

Gradually reduce total mass by a wind to remove the H envelope. Equivalent to relax_mass with new_mass = He_core_mass + extra_mass.

```
relax_mass_to_remove_H_env = .false.
relax_initial_mass_to_remove_H_env = .false.
extra_mass_retained_by_remove_H_env = 5d-3 ! (Msun)
```

### relax_mass_scale¶

### relax_initial_mass_scale¶

### dlgm_per_step¶

### change_mass_years_for_dt¶

Gradually rescale mass of star to `new_mass`

.
Rescales star mass without changing composition as function of m/mstar.

```
relax_mass_scale = .false.
relax_initial_mass_scale = .false.
dlgm_per_step = 1d-3
change_mass_years_for_dt = 1
```

### relax_initial_angular_momentum¶

### max_steps_to_relax_angular_momentum¶

### timescale_for_relax_angular_momentum¶

### max_dt_for_relax_angular_momentum¶

### num_timescales_for_relax_angular_momentum¶

### relax_angular_momentum_filename¶

### relax_angular_momentum_constant_omega_center¶

relax angular momentum from current to specified over a certain amount of relaxation timescales. This is done by adding an extra torque term of the form

```
s% extra_jdot(k) = &
(1d0 - exp(-s% dt/(s% job% timescale_for_relax_angular_momentum*secyer))) * &
(desired_angular_momentum(k) - s% j_rot(k))/s% dt
```

and evolving the star without changing the composition for `num_timescales_for_relax_angular_momentum`

times
`timescale_for_relax_angular_momentum`

. To circumvent convection we limit the acceleration of convective velocities
using `min_T_for_acceleration_limited_conv_velocity = 0`

(see controls.defaults), and the timescale
for relaxation should be very short (less than a second).

`relax_angular_momentum_filename`

holds the desired angular momentum profile information
file format for relax angular momentum

1st line: num_points then 1 line for for each point where define desired angular momentum xq angular_momentum xq = fraction of xmstar exterior to the point where xmstar = mstar - M_center angular_momentum = specific angular momentum in units of cm^2/s

‘relax_angular_momentum_constant_omega_center’ is used to account for points near the center that could be outside the range of the input data. In this case, normally the interpolation routine would just provide a value truncated to the edge of the data that would result in a large spike in central omega. If this option is true, then the innermost regions of the star that are outside of the range of the input data are relaxed such that their omega matches that of the innermost cell within the input data.

```
relax_initial_angular_momentum = .false.
max_steps_to_relax_angular_momentum = 1000
timescale_for_relax_angular_momentum = 1d-10
max_dt_for_relax_angular_momentum = 1d-9
num_timescales_for_relax_angular_momentum = 1000
relax_angular_momentum_filename = ''
relax_angular_momentum_constant_omega_center = .true.
```

### relax_initial_entropy¶

### max_steps_to_relax_entropy¶

### timescale_for_relax_entropy¶

### max_dt_for_relax_entropy¶

### num_timescales_for_relax_entropy¶

### relax_entropy_filename¶

### get_entropy_for_relax_from_eos¶

relax entropy from current to specified over a certain amount of relaxation timescales. This is done by adding an extra heating term of the form

```
s% extra_heat(k) = &
(1d0 - exp(s%lnS(k))/desired_entropy(k))*exp(s%lnE(k))/(timescale_for_relax_entropy*secyer)
```

and evolving the star without changing the composition for `num_timescales_for_relax_entropy`

times
`timescale_for_relax_entropy`

. To circumvent convection we limit the acceleration of convective velocities
using `min_T_for_acceleration_limited_conv_velocity = 0`

(see controls.defaults), and the timescale
for relaxation should be very short (less than a second).

`relax_entropy_filename`

holds the desired entropy profile information
file format for relax entropy

```
1st line: num_points
then 1 line for for each point where define desired entropy
xq entropy
xq = fraction of xmstar exterior to the point
where xmstar = mstar - M_center
entropy = specific entropy in units of erg/gr/K
```

the interpolation routines require that the xq values which appear in your file must be monotonically increasing.

In case the entropy is not readily available, pairs of values of
two other thermodynamic variables can be provided. The entropy is
then computed using the eos module, and the composition of
the stellar model (which can be set using `relax_initial_composition`

).
This is set by the option `get_entropy_for_relax_from_eos which`

can take the values

- ‘’: if empty, then input file directly specifies the entropy
- ‘eosDT’: input file includes density and temperature
- ‘eosPT’: input file includes gas pressure and temperature
- ‘eosDE’: input file includes density and specific internal energy

when any of the eos* options is used, then each line in the input file must contain three columns instead of two, specifying the values of the two thermodynamic variables used in the order specified above. So, for example, when using ‘eosDT’ the format of the input file is

```
1st line: num_points
then 1 line for for each point where define desired entropy
xq density temperature
xq = fraction of xmstar exterior to the point
where xmstar = mstar - M_center
density and temperature in cgs units
```

```
relax_initial_entropy = .false.
max_steps_to_relax_entropy = 1000
timescale_for_relax_entropy = 1d-9
max_dt_for_relax_entropy = 1d-9
num_timescales_for_relax_entropy = 100
relax_entropy_filename = ''
get_entropy_for_relax_from_eos = ''
```

### relax_dxdt_nuc_factor¶

### relax_initial_dxdt_nuc_factor¶

### new_dxdt_nuc_factor¶

### dxdt_nuc_factor_multiplier¶

Gradually rescale `dxdt_nuc_factor`

.
At each step, multiply `dxdt_nuc_factor`

by `dxdt_nuc_factor_multiplier`

,
until reach `new_dxdt_nuc_factor`

.

```
relax_dxdt_nuc_factor = .false.
relax_initial_dxdt_nuc_factor = .false.
new_dxdt_nuc_factor = 0
dxdt_nuc_factor_multiplier = 0
```

### relax_eps_nuc_factor¶

### relax_initial_eps_nuc_factor¶

### new_eps_nuc_factor¶

### eps_nuc_factor_multiplier¶

Gradually rescale `eps_nuc_factor`

.
At each step, multiply `eps_nuc_factor`

by `eps_nuc_factor_multiplier`

until reach `new_eps_nuc_factor`

.

```
relax_eps_nuc_factor = .false.
relax_initial_eps_nuc_factor = .false.
new_eps_nuc_factor = 0
eps_nuc_factor_multiplier = 0
```

### relax_opacity_max¶

### relax_initial_opacity_max¶

### new_opacity_max¶

### opacity_max_multiplier¶

Gradually rescale `opacity_max`

.
At each step, multiply `opacity_max`

by `opacity_max_multiplier`

until reach `new_opacity_max`

.

```
relax_opacity_max = .false.
relax_initial_opacity_max = .false.
new_opacity_max = 0
opacity_max_multiplier = 0
```

### relax_max_surf_dq¶

### relax_initial_max_surf_dq¶

### new_max_surf_dq¶

### max_surf_dq_multiplier¶

Gradually rescale `max_surface_cell_dq`

.
At each step, multiply `max_surface_cell_dq`

by `opacity_max_multiplier`

until reach `new_max_surf_dq`

.

```
relax_max_surf_dq = .false.
relax_initial_max_surf_dq = .false.
new_max_surf_dq = 0
max_surf_dq_multiplier = 0
```

### relax_to_this_tau_factor¶

### dlogtau_factor¶

### relax_tau_factor¶

### relax_initial_tau_factor¶

### relax_tau_factor_after_core_He_burn¶

### relax_tau_factor_after_core_C_burn¶

Must have tau_factor = 1 when atm_option = ‘table’, as surface of the model must always attach at the base of the table. However, these tau_factor settings can be used to place the surface of the model inside or outside the photosphere when atm_option = ‘T_tau’.

`relax_to_this_tau_factor = 1`

puts outer cell at photosphere;
can go much larger or much smaller to move surface in or out from photosphere.

`dlogtau_factor`

changes `log10(tau_factor)`

by at most this amount per step

`relax_tau_factor`

true gradually changes `tau_factor`

, reconverging at each step.

`relax_tau_factor_after_core_He_burn`

ignored if <= 0;
change `tau_factor`

when center H1 < 1e-4 and
center He4 < `relax_tau_factor_after_core_He_burn`

.

`relax_tau_factor_after_core_C_burn`

ignored if <= 0;
change `tau_factor`

when center H1 < 1e-4,
He4 < 1e-4, and center C12 < `relax_tau_factor_after_core_C_burn`

.

```
relax_to_this_tau_factor = -1
dlogtau_factor = 0.1d0
relax_tau_factor = .false.
relax_initial_tau_factor = .false.
relax_tau_factor_after_core_He_burn = -1
relax_tau_factor_after_core_C_burn = -1
```

### set_to_this_tau_factor¶

### set_tau_factor¶

### set_initial_tau_factor¶

### set_tau_factor_after_core_He_burn¶

### set_tau_factor_after_core_C_burn¶

As for `relax_to_this_tau_factor`

, but changes `tau_factor`

without reconverging.

```
set_to_this_tau_factor = -1
set_tau_factor = .false.
set_initial_tau_factor = .false.
set_tau_factor_after_core_He_burn = -1
set_tau_factor_after_core_C_burn = -1
```

### adjust_tau_factor_to_surf_density¶

### base_for_adjust_tau_factor_to_surf_density¶

if `adjust_tau_factor_to_surf_density`

, then at start of each step
set `tau_factor`

to current Rho(1) divided by `base_for_adjust_tau_factor_to_surf_density`

```
adjust_tau_factor_to_surf_density = .false.
base_for_adjust_tau_factor_to_surf_density = 0d0
```

### relax_to_this_opacity_factor¶

### d_opacity_factor¶

### relax_opacity_factor¶

### relax_initial_opacity_factor¶

```
relax_to_this_opacity_factor = -1
d_opacity_factor = 0.1d0
relax_opacity_factor = .false.
relax_initial_opacity_factor = .false.
```

### relax_to_this_Tsurf_factor¶

### dlogTsurf_factor¶

### relax_Tsurf_factor¶

### relax_initial_Tsurf_factor¶

```
relax_to_this_Tsurf_factor = -1
dlogTsurf_factor = 0.1d0
relax_Tsurf_factor = .false.
relax_initial_Tsurf_factor = .false.
```

### set_to_this_Tsurf_factor¶

### set_Tsurf_factor¶

### set_initial_Tsurf_factor¶

As for `relax_to_this_Tsurf_factor`

, but changes `Tsurf_factor`

without reconverging.

```
set_to_this_Tsurf_factor = -1
set_Tsurf_factor = .false.
set_initial_Tsurf_factor = .false.
```

### relax_mass_change¶

### relax_initial_mass_change¶

### relax_mass_change_min_steps¶

### relax_mass_change_max_yrs_dt¶

### relax_mass_change_init_mdot¶

### relax_mass_change_final_mdot¶

`relax_mass_change_max_yrs_dt`

in years
`relax_mass_change_init_mdot`

in Msun/year

```
relax_mass_change = .false.
relax_initial_mass_change = .false.
relax_mass_change_min_steps = 10
relax_mass_change_max_yrs_dt = 10
relax_mass_change_init_mdot = 0
relax_mass_change_final_mdot = 0
```

### relax_irradiation¶

### relax_initial_irradiation¶

### relax_to_this_irrad_flux¶

### relax_irradiation_min_steps¶

### relax_irradiation_max_yrs_dt¶

### irrad_col_depth¶

extra heat near surface to model irradiation.
`relax_to_this_irrad_flux`

is flux in erg s^-1 cm^-2 from companion.
we capture `Pi*R^2`

of that flux and distribute it uniformly
in the outer `4*Pi*R^2*irrad_col_depth`

grams of the star,
where `irrad_col_depth`

is in g cm^-2.

```
relax_irradiation = .false.
relax_initial_irradiation = .false.
relax_to_this_irrad_flux = 0
relax_irradiation_min_steps = 0
relax_irradiation_max_yrs_dt = -1
irrad_col_depth = -1
```

### set_irradiation¶

### set_initial_irradiation¶

### set_to_this_irrad_flux¶

as for `relax_irradiation`

but sets values and does not reconverge

```
set_irradiation = .false.
set_initial_irradiation = .false.
set_to_this_irrad_flux = 0
```

### change_RTI_flag¶

### change_initial_RTI_flag¶

### new_RTI_flag¶

RTI variables
`RTI_flag`

is true if we are doing Rayleigh Taylor Instabilities

```
change_RTI_flag = .false.
change_initial_RTI_flag = .false.
new_RTI_flag = .false.
```

### change_RSP_flag¶

### change_initial_RSP_flag¶

### new_RSP_flag¶

RSP variables
`RSP_flag`

is true if we are doing radial stellar pulsations

```
change_RSP_flag = .false.
change_initial_RSP_flag = .false.
new_RSP_flag = .false.
```

#### velocity variables¶

### change_v_flag¶

### change_initial_v_flag¶

### new_v_flag¶

change whether MESA evolves a (radial) velocity variable, v, defined at cell boundaries

```
change_v_flag = .false.
change_initial_v_flag = .false.
new_v_flag = .false.
```

### center_ye_limit_for_v_flag¶

automatically turn on velocities if `center_ye`

drops below this limit.
this is useful for evolution leading up to core collapse.

```
center_ye_limit_for_v_flag = 0.45d0
```

### change_u_flag¶

### change_initial_u_flag¶

### new_u_flag¶

change whether MESA evolves a (radial) velocity variable, u, defined at cell centers. this is an alternative to v at cell boundaries. can use one or the other, but not both.

```
change_u_flag = .false.
change_initial_u_flag = .false.
new_u_flag = .false.
```

### change_reconstruction_flag¶

### change_initial_reconstruction_flag¶

### new_reconstruction_flag¶

change whether MESA reconstruction variables with Riemann. only applies when u_flag is true.

```
change_reconstruction_flag = .false.
change_initial_reconstruction_flag = .false.
new_reconstruction_flag = .false.
```

#### rotation controls¶

### new_rotation_flag¶

### change_rotation_flag¶

### change_initial_rotation_flag¶

rotation is enabled only if `rotation_flag`

is true
`new_rotation_flag`

is only used if `change_rotation_flag`

is true
if `change_rotation_flag`

true, then change `rotation_flag`

to `new_rotation_flag`

NOTE: why 2 flags? because I want 3 options: set true, set false, and leave it alone. there are of course other ways to get 3 options, but this is what we have.

```
new_rotation_flag = .false.
change_rotation_flag = .false.
change_initial_rotation_flag = .false.
```

the following only apply when rotation is already on (i.e., when `rotation_flag`

is true),
including when you have just done `change_rotation_flag`

true.
all of these initialize the model to uniform omega (i.e. “solid body”)

### new_omega¶

### set_omega¶

### set_initial_omega¶

`new_omega`

in rad/sec
`set_omega`

applies when do ./rn or ./re; if true, sets uniform omega = `new_omega`

`set_initial_omega`

only applies at start of run, not for restarts
if true, sets uniform omega = `new_omega`

```
new_omega = 0
set_omega = .false.
set_initial_omega = .false.
```

### new_omega_div_omega_crit¶

### set_omega_div_omega_crit¶

### set_initial_omega_div_omega_crit¶

as above, but sets `omega/omega_crit`

`omega_crit`

is defined as:

```
gamma_factor = 1d0 - min(L_div_Ledd, 0.9999d0)
omega_crit = sqrt(gamma_factor*s% cgrav(k)*s% m_grav(k)/pow3(s% r(k)))
```

```
new_omega_div_omega_crit = 0
set_omega_div_omega_crit = .false.
set_initial_omega_div_omega_crit = .false.
```

### new_surface_rotation_v = 0 ! (km sec^1)¶

### set_surface_rotation_v = .false.¶

### set_initial_surface_rotation_v = .false.¶

as above, but sets surface velocity in km/sec

```
new_surface_rotation_v = 0
set_surface_rotation_v = .false.
set_initial_surface_rotation_v = .false.
```

the previous controls are “one shot” – they set omega once and are done. however you might need to set omega for several models in a row in order to give things a chance to adjust to the change. the following controls let you do that.

### set_omega_div_omega_crit_step_limit¶

if `model_number`

is <= this, then do `set_omega_div_omega_crit`

```
set_omega_div_omega_crit_step_limit = -1
```

### set_surf_rotation_v_step_limit¶

if `model_number`

is <= this, then do `set_surface_rotation_v`

```
set_surf_rotation_v_step_limit = -1
```

### set_near_zams_omega_steps¶

### set_near_zams_omega_div_omega_crit_steps¶

### set_near_zams_surface_rotation_v_steps¶

You might want to start a run at pre-ms but only turn on rotation when near zams
rather than force you to stop the run near zams, change the inlist, and restart.
The following will turn on rotation automatically.
The working definition of “near zams” is
`L_nuc_burn_total/L_phot >= Lnuc_div_L_upper_limit`

`Lnuc_div_L_upper_limit`

is in the controls part of the inlist.

The following apply when rotation is off and model satisfies the “near zams” test. Each turns on rotation and sets a step limit

only applies if > 0

```
set_omega_step_limit = model_number + set_near_zams_omega_steps - 1
```

```
set_near_zams_omega_steps = -1
```

only applies if > 0

```
set_omega_div_omega_crit_step_limit =
model_number + set_near_zams_omega_div_omega_crit_steps - 1
```

```
set_near_zams_omega_div_omega_crit_steps = -1
```

only applies if > 0

```
set_surf_rotation_v_step_limit = model_number + set_surf_rotation_v_step_limit - 1
```

```
set_near_zams_surface_rotation_v_steps = -1
```

### num_steps_to_relax_rotation¶

use `num_steps_to_relax_rotation`

steps to relax omega to new value

```
num_steps_to_relax_rotation = 100
```

### relax_omega_max_yrs_dt¶

`relax_omega_max_yrs_dt`

sets a maximum time step used during the relaxation process
< 0 implies MESA chooses the step. Useful number is 1d4 if
`num_steps_to_relax_rotation`

> ~150

```
relax_omega_max_yrs_dt = 1d9
```

### relax_omega¶

### relax_initial_omega¶

### near_zams_relax_omega¶

if `relax_omega`

true, relax to value of `new_omega`

. applies when do ./rn or ./re
`relax_initial_omega`

only applies at start of run, not for restarts.
```
near_zams_relax``+omega applies when "near zams".
The working definition of "near zams" is
``L_nuc_burn_total/L_phot >= Lnuc_div_L_upper_limit
```

`Lnuc_div_L_upper_limit`

is in the controls part of the inlist.

```
relax_omega = .false.
relax_initial_omega = .false.
near_zams_relax_omega = .false.
```

### relax_omega_div_omega_crit¶

### relax_initial_omega_div_omega_crit¶

### near_zams_relax_omega_div_omega_crit¶

as above for `relax_omega`

, but for `omega`

/`omega_crit`

```
relax_omega_div_omega_crit = .false.
relax_initial_omega_div_omega_crit = .false.
near_zams_relax_omega_div_omega_crit = .false.
```

### relax_surface_rotation_v¶

### relax_initial_surface_rotation_v¶

### near_zams_relax_initial_surface_rotation_v¶

as above for `relax_omega`

, but for surface speed

```
relax_surface_rotation_v = .false.
relax_initial_surface_rotation_v = .false.
near_zams_relax_initial_surface_rotation_v = .false.
```

### new_D_omega_flag¶

### change_D_omega_flag¶

### change_initial_D_omega_flag¶

```
new_D_omega_flag = .false.
change_D_omega_flag = .false.
change_initial_D_omega_flag = .false.
```

### new_am_nu_rot_flag¶

### change_am_nu_rot_flag¶

### change_initial_am_nu_rot_flag¶

### use_D_omega_for_am_nu_rot¶

if `am_nu_rot_flag`

is true, use time and space smoothed `am_nu_rot`

like `D_omega`

else if `D_omega_flag`

and `use_D_omega_for_am_nu_rot`

, use `D_omega`

for `am_nu_rot`

else use `am_nu_rot`

from current model with no smoothing

```
new_am_nu_rot_flag = .false.
change_am_nu_rot_flag = .false.
change_initial_am_nu_rot_flag = .false.
use_D_omega_for_am_nu_rot = .true.
```

### relax_core¶

### relax_initial_core¶

### new_core_mass¶

### dlg_core_mass_per_step¶

### relax_core_years_for_dt¶

### core_avg_rho¶

### core_avg_eps¶

controls for nonzero center M (mass), R (radius), L (luminosity)
(e.g., to model neutron star envelope or rocky core planet)
`new_core_mass`

in Msun units.
If you have convergence problems,
you’ll need to reduce the mass/step `dlg_core_mass_per_step`

and timestep `relax_core_years_for_dt`

values.
`core_avg_rho`

in g/cm^3 and `core_avg_eps`

in ergs/g/sec are just examples.
Adjust them to values appropriate for your application.

```
relax_core = .false.
relax_initial_core = .false.
new_core_mass = 0
dlg_core_mass_per_step = 1d-3
relax_core_years_for_dt = 1
core_avg_rho = 10
core_avg_eps = 1d-6
```

### relax_M_center¶

### relax_initial_M_center¶

### relax_M_center_dt¶

Like `relax_mass_scale`

, but all change in mass goes into `M_center`

.
NOTE: `new_mass`

is new total mass for star, not the new `M_center`

value.
uses `dlgm_per_step`

in same way as `relax_mass_scale`

.
`relax_M_center_dt`

in seconds

Example: If you want to end up with total mass = 1.4 and `M_center`

= 1.3,
start with `star_mass`

= total - center = 0.1 = mass exterior to center.
Then `relax_M_center`

with `new_mass`

= 1.4.
That will give a new total mass of 1.4 by changing `M_center`

.
The mass exterior to the center will stay = 0.1,
so the final `M_center`

will be 1.3.

```
relax_M_center = .false.
relax_initial_M_center = .false.
relax_M_center_dt = 3.1558149984d1
```

### relax_R_center¶

### relax_initial_R_center¶

### new_R_center¶

### dlgR_per_step¶

### relax_R_center_dt¶

as above for the mass, but for the radius.
`new_R_center`

in cm.
`relax_R_center_dt`

in seconds.

```
relax_R_center = .false.
relax_initial_R_center = .false.
new_R_center = 0
dlgR_per_step = 3d-3
relax_R_center_dt = 3.1558149984d1
```

### zero_alpha_RTI¶

### zero_initial_alpha_RTI¶

```
zero_alpha_RTI = .false.
zero_initial_alpha_RTI = .false.
```

### set_v_center¶

### set_initial_v_center¶

```
set_v_center = .false.
set_initial_v_center = .false.
```

### relax_v_center¶

### relax_initial_v_center¶

### new_v_center¶

### dv_per_step¶

### relax_v_center_dt¶

`new_v_center`

in cm/s.
`relax_v_center_dt`

in seconds.

```
relax_v_center = .false.
relax_initial_v_center = .false.
new_v_center = 0
dv_per_step = 0
relax_v_center_dt = 0
```

### set_L_center¶

### set_initial_L_center¶

```
set_L_center = .false.
set_initial_L_center = .false.
```

### relax_L_center¶

### relax_initial_L_center¶

### new_L_center¶

### dlgL_per_step¶

### relax_L_center_dt¶

as above for the mass, but for the luminosity.
`new_L_center`

in erg/s.
`relax_L_center_dt`

in seconds.

```
relax_L_center = .false.
relax_initial_L_center = .false.
new_L_center = 0
dlgL_per_step = 5d-2
relax_L_center_dt = 3.1558149984d1
```

### remove_initial_center_at_cell_k¶

### remove_initial_center_by_temperature¶

### remove_initial_center_by_mass_fraction_q¶

### remove_initial_center_by_delta_mass_gm¶

### remove_initial_center_by_delta_mass_msun¶

### remove_initial_center_by_mass_gm¶

### remove_initial_center_by_mass_msun¶

### remove_initial_center_by_radius_cm¶

### remove_initial_center_by_radius_Rsun¶

### remove_initial_center_by_he4¶

### remove_initial_center_by_c12_o16¶

### remove_initial_center_by_si28¶

### remove_initial_center_to_reduce_co56_ni56¶

### remove_initial_center_by_ye¶

### remove_initial_center_by_entropy¶

### remove_initial_center_by_infall_kms¶

allows the core to be removed. ignored if <= 0 value for si28 is mass fraction at which to make mass cut i.e. cut at first location going inward where mass fraction of si28 >= this limit value for ye is electron per baryon number for cut value for infall_kms is infall speed in km per sec to make the cut

```
remove_initial_center_at_cell_k = 0
remove_initial_center_by_temperature = 0
remove_initial_center_by_mass_fraction_q = 0
remove_initial_center_by_delta_mass_gm = 0
remove_initial_center_by_delta_mass_Msun = 0
remove_initial_center_by_mass_gm = 0
remove_initial_center_by_mass_Msun = 0
remove_initial_center_by_radius_cm = 0
remove_initial_center_by_radius_Rsun = 0
remove_initial_center_by_he4 = 0
remove_initial_center_by_c12_o16 = 0
remove_initial_center_by_si28 = 0
remove_initial_center_to_reduce_co56_ni56 = 0
remove_initial_center_by_ye = 0
remove_initial_center_by_entropy = 0
remove_initial_center_by_infall_kms = 0
```

### remove_center_at_cell_k¶

### remove_center_by_temperature¶

### remove_center_by_mass_fraction_q¶

### remove_center_by_delta_mass_gm¶

### remove_center_by_delta_mass_Msun¶

### remove_center_by_mass_gm¶

### remove_center_by_mass_Msun¶

### remove_center_by_radius_cm¶

### remove_center_by_radius_Rsun¶

### remove_center_by_he4¶

### remove_center_by_c12_o16¶

### remove_center_by_si28¶

### remove_center_to_reduce_co56_ni56¶

### remove_center_by_ye¶

### remove_center_by_entropy¶

### remove_center_by_infall_kms¶

allows the core to be removed. ignored if <= 0

```
remove_center_at_cell_k = 0
remove_center_by_temperature = 0
remove_center_by_mass_fraction_q = 0
remove_center_by_delta_mass_gm = 0
remove_center_by_delta_mass_Msun = 0
remove_center_by_mass_gm = 0
remove_center_by_mass_Msun = 0
remove_center_by_radius_cm = 0
remove_center_by_radius_Rsun = 0
remove_center_by_he4 = 0
remove_center_by_c12_o16 = 0
remove_center_by_si28 = 0
remove_center_to_reduce_co56_ni56 = 0
remove_center_by_ye = 0
remove_center_by_entropy = 0
remove_center_by_infall_kms = 0
```

### remove_initial_fe_core¶

### remove_fe_core¶

```
remove_initial_fe_core = .false.
remove_fe_core = .false.
```

### remove_initial_center_at_inner_max_abs_v¶

### remove_center_at_inner_max_abs_v¶

### remove_center_set_zero_v_center¶

```
remove_initial_center_at_inner_max_abs_v = .false.
remove_center_at_inner_max_abs_v = .false.
remove_center_set_zero_v_center = .false.
```

### remove_fallback_at_each_step¶

### fallback_check_total_energy¶

### remove_fallback_speed_limit¶

if fallback_check_total_energy is false, starting at innermost cell, remove the region of cells that all have infall speed greater than remove_fallback_speed_limit in units of sound speed.

if fallback_check_total_energy is true, integrate total energy outward from innermost cell. if integral goes negative, then have bound inner region. continue outward until reach a cell that has local pe+ke+ie > 0. delete everything inward of that cell.

```
remove_fallback_at_each_step = .false.
fallback_check_total_energy = .false.
remove_fallback_speed_limit = 0.1d0
```

### remove_center_adjust_L_center¶

```
remove_center_adjust_L_center = .true.
```

### limit_center_logP_at_each_step¶

at start of each step remove center cells if necessary to keep logP at innermost cell >= this limit.

```
limit_center_logP_at_each_step = -1d99
```

### zero_initial_inner_v_by_mass_msun¶

### zero_inner_v_by_mass_Msun¶

```
zero_initial_inner_v_by_mass_Msun = 0
zero_inner_v_by_mass_Msun = 0
```

### remove_center_logRho_limit¶

```
remove_center_logRho_limit = -1d99
```

### remove_initial_surface_at_cell_k¶

### remove_initial_surface_at_he_core_boundary¶

### remove_initial_surface_by_optical_depth¶

### remove_initial_surface_by_density¶

### remove_initial_surface_by_pressure¶

### remove_initial_surface_by_mass_fraction_q¶

### remove_initial_surface_by_mass_gm¶

### remove_initial_surface_by_mass_msun¶

### remove_initial_surface_by_radius_cm¶

### remove_initial_surface_by_radius_Rsun¶

### remove_initial_surface_by_v_surf_km_s¶

### remove_initial_surface_by_v_surf_div_cs¶

### remove_initial_surface_by_v_surf_div_v_escape¶

allows the outer envelope to be removed. ignored if <= 0

```
remove_initial_surface_at_cell_k = 0
remove_initial_surface_at_he_core_boundary = 0
remove_initial_surface_by_optical_depth = 0
remove_initial_surface_by_density = 0
remove_initial_surface_by_pressure = 0
remove_initial_surface_by_mass_fraction_q = 0
remove_initial_surface_by_mass_gm = 0
remove_initial_surface_by_mass_Msun = 0
remove_initial_surface_by_radius_cm = 0
remove_initial_surface_by_radius_Rsun = 0
remove_initial_surface_by_v_surf_km_s = 0
remove_initial_surface_by_v_surf_div_cs = 0
remove_initial_surface_by_v_surf_div_v_escape = 0
```

### remove_surface_at_cell_k¶

### remove_surface_at_he_core_boundary¶

### remove_surface_by_optical_depth¶

### remove_surface_by_density¶

### remove_surface_by_pressure¶

### remove_surface_by_mass_fraction_q¶

### remove_surface_by_mass_gm¶

### remove_surface_by_mass_Msun¶

### remove_surface_by_radius_cm¶

### remove_surface_by_radius_Rsun¶

### remove_surface_by_v_surf_km_s¶

### remove_surface_by_v_surf_div_cs¶

### remove_surface_by_v_surf_div_v_escape¶

### min_q_for_remove_surface_by_v_surf_div_v_escape¶

### max_q_for_remove_surface_by_v_surf_div_v_escape¶

allows the outer envelope to be removed. ignored if <= 0

```
remove_surface_at_cell_k = 0
remove_surface_at_he_core_boundary = 0
remove_surface_by_optical_depth = 0
remove_surface_by_density = 0
remove_surface_by_pressure = 0
remove_surface_by_mass_fraction_q = 0
remove_surface_by_mass_gm = 0
remove_surface_by_mass_Msun = 0
remove_surface_by_radius_cm = 0
remove_surface_by_radius_Rsun = 0
remove_surface_by_v_surf_km_s = 0
remove_surface_by_v_surf_div_cs = 0
remove_surface_by_v_surf_div_v_escape = 0
min_q_for_remove_surface_by_v_surf_div_v_escape = 0d0
max_q_for_remove_surface_by_v_surf_div_v_escape = 1d0
```

### report_cell_for_xm¶

in grams. if > 0 then write smallest k s.t.
mass in cells 1 to k is >= `report_cell_for_xm`

```
report_cell_for_xm = -1
```

### set_to_xa_for_accretion¶

### set_initial_to_xa_for_accretion¶

### set_nzlo¶

### set_nzhi¶

changes the composition to the mass fractions `xa_for_accretion`

.
useful for creating a model with specific uniform composition.
`set_to_xa_for_accretion`

true, means do when start or restart.
`set_initial_to_xa_for_accretion`

true, means do for start but not for restarts.
nzlo and nzhi determine the range of cells that will be changed.
nzlo < 0 means change out to surface.
nzhi < 0 or nzhi > number of cells means change to center.

```
set_to_xa_for_accretion = .false.
set_initial_to_xa_for_accretion = .false.
set_nzlo = -1
set_nzhi = -1
```

### set_initial_cumulative_energy_error¶

### set_cumulative_energy_error¶

### set_cumulative_energy_error_at_step¶

### set_cumulative_energy_error_each_relax¶

set_initial_cumulative_energy_error is done when execute rn script set_cumulative_energy_error is done when execute rn script or re script set_cumulative_energy_error_at_step is done before the specified step in all cases, the value is set to new_cumulative_energy_error

```
set_initial_cumulative_energy_error = .false.
set_cumulative_energy_error = .false.
set_cumulative_energy_error_at_step = -1
set_cumulative_energy_error_each_step_if_age_less_than = -1d99
set_cumulative_energy_error_each_relax = .true.
new_cumulative_energy_error = 0d0
```

## nuclear reactions¶

### change_net¶

### new_net_name¶

### change_initial_net¶

For switching reaction networks.
`new_net_name`

only used if `change_net`

if true. The list of network names can be found in $MESA_DIR/data/net_data/nets.

```
change_net = .false.
new_net_name = ''
change_initial_net = .false.
```

### adjust_abundances_for_new_isos¶

If false, new isos initial abundance set to 0.

```
adjust_abundances_for_new_isos = .true.
```

Users can also provide tabulated rates for any of the reactions. Tabulated rates automatically take priority over any other options for the reaction. e.g., if you provide a rate table for c12ag, those rates will be used

To provide tabulated rates:
create a file of (T8, rate) pairs as in `data/rates_data/rate_tables`

You can give as many pairs as you want with any spacing in T8.
The first uncommented line of the file should be a number giving the
total number of (T8, rate) pairs in the subsequent lines.
The following lines are your specified values of T8 and rate separated
by a single space, one pair per line.
Add the filename to `rate_list.txt`

along with the name of the rate you
want it to govern, either in `data/rates_data/rate_tables`

or in a local
directory specified with the `rate_tables_dir`

control.
Be aware that if you choose to put the modified `rate_list.txt`

in
`data/rates_data/rate_tables`

rather than a local directory,
your custom tabulated rate will override the rate for that reaction
for all future MESA runs.

If the reaction you wish to control does not already have a
name that MESA will recognize, you will also need to add it to
the file specified by `net_reaction_filename`

(defaults to reactions.list).
The default version of this file is located
in `data/rates_data`

. If you place a modified copy of this file
in your work directory, it will take precedence.

### num_special_rate_factors¶

### reaction_for_special_factor¶

### special_rate_factor¶

### filename_of_special_rate¶

For using other special rate factors.
`num_special_rate_factors`

must be <= `max_num_special_rate_factors`

.

```
num_special_rate_factors = 0
reaction_for_special_factor(:) = ''
special_rate_factor(:) = 1
```

If set, we read this filename from the local work directory, then try `data/rates_data/rate_tables`

.
This enables using the MESA provide custom rate tables with out changing the default for everyone.
Note we still multiple the loaded rate by special_rate_factor so leave that as 1 if you want the rate to be unchanged.

- For instance setting:
- num_special_rate_factors = 1 reaction_for_special_factor(1) = ‘r_c12_ag_o16’ special_rate_factor(1) = 1 filename_of_special_rate(1) = ‘r_c12_ag_o16_kunz.txt’

Recovers the old set_rate_c12ag = ‘Kunz’ option

filename_of_special_rate(:) = ‘’

### use_3a_fl87¶

If true then the triple alpha reaction is taken from Fushiki and Lamb, Apj, 317, 368-388, 1987 This replaces the old set_rate_3a = ‘Fl87’ option

use_3a_fl87 = .false.

### auto_extend_net¶

### h_he_net¶

### co_net¶

### adv_net¶

If `auto_extend_net`

true, then automatically extend the net as needed
from `h_he_net`

to `co_net`

and then to `adv_net`

.

```
auto_extend_net = .true.
h_he_net = 'basic.net'
co_net = 'co_burn.net'
adv_net = 'approx21.net'
```

### enable_adaptive_network¶

### min_x_for_keep¶

### min_x_for_n¶

### min_x_for_add¶

### max_Z_for_add¶

### max_N_for_add¶

### max_A_for_add¶

Heger-style adaptive network (Woosley, Heger, et al, ApJSS, 151:75-102, 2004).
If `enable_adaptive_network`

is true, then
at each step, the system calculates a new set of isos according to the following rules:

`min_x_for_keep`

then include the iso in new net.`min_x_for_n`

then include following related isos:Isos in the previous net can be dropped if they have x < `min_x_for_keep`

and
no other iso in the previous net causes them to be included in the new net.
The new net has the included isos and all relevant reactions.
The definition for the new net is saved to a text file in your local “nets” directory.
The file name is composed of the model number and the number of species.

```
enable_adaptive_network = .false.
min_x_for_keep = 1d-5
min_x_for_n = 1d-4
min_x_for_add = 1d-4
max_Z_for_add = 999
max_N_for_add = 999
max_A_for_add = 999
```

### net_reaction_filename¶

Looks first in current directory, then in `mesa_data_dir/rates_data`

.

```
net_reaction_filename = 'reactions.list'
```

### jina_reaclib_filename¶

Empty string means use current standard version. Which is defined in rates/public/rates_def.f90 as reaclib_filename and is currently ‘jina_reaclib_results_20171020_default’

Else give name of file in directory `mesa/data/rates_data`

,
e.g., `jina_reaclib_results_20130213default2`

(which is an 18.8 MB file of rates data).
To use previous version, set to `jina_reaclib_results_v2.2`

.

If you change reaclib version, you should clear the cache
after making the change in order to ensure that cached
rates from the default reaclib version are not being
read. (You can use the script `empty_caches`

in
`$MESA_DIR`

.)

In order to avoid this caching issue, one can also specify
a local rates cache directory via the control
`rates_cache_dir`

.

```
jina_reaclib_filename = ''
```

### jina_reaclib_min_T9¶

set jina reaclib rates to zero for T9 <= this. if this control is <= 0, then use the standard default from rates. need <= 3d-3 for pre-ms li7 burning if change this, must remove old cached rates from data/rates_data/cache

```
jina_reaclib_min_T9 = -1
```

### rate_tables_dir¶

When MESA looks for the files `rate_list.txt`

and `weak_rate_list.txt`

,
it will look in a local directory with this name first.
If doesn’t find one, it will use the one in `data/rates_data/rate_tables`

.

```
rate_tables_dir = 'rate_tables'
```

### rate_cache_suffix¶

If this not empty, then use it when creating names
for cache files for reaction rates from `rate_tables_dir`

.
If empty, the suffix will be ‘0’.

```
rate_cache_suffix = ''
```

### T9_weaklib_full_off¶

### T9_weaklib_full_on¶

Weak rates blend weaklib and reaclib according to temperature.
These can be used to overwrite the defaults in `mesa/rates/public/rates_def`

`T9_weaklib_full_off`

: use pure reaclib for T <= this (ignore if <= 0)`T9_weaklib_full_on`

: use pure weaklib for T >= this (ignore if <= 0)

```
T9_weaklib_full_off = 0.01d0
T9_weaklib_full_on = 0.02d0
```

### weaklib_blend_hi_Z¶

Ignore if <= 0. Blend for intermediate temperatures. For high Z elements, switch to reaclib at temp where no longer fully ionized. As rough approximation for this, we switch at Fe to higher values of T9.

```
weaklib_blend_hi_Z = 26
```

### T9_weaklib_full_off_hi_Z¶

### T9_weaklib_full_on_hi_Z¶

If input element has Z >= `weaklib_blend_hi_Z`

, then use the following T9 limits:

`T9_weaklib_full_off_hi_Z`

: use pure reaclib for T <= this (ignore if <= 0)`T9_weaklib_full_on_hi_Z`

: use pure weaklib for T >= this (ignore if <= 0)

```
T9_weaklib_full_off_hi_Z = 0.063d0
T9_weaklib_full_on_hi_Z = 0.073d0
```

#### use small net for solver iterations only¶

### change_small_net¶

### new_small_net_name¶

### change_initial_small_net¶

For switching reaction networks for use as small net in solver iterations.
small net is only used when also doing split mixing.
if `small_net_name`

is empty string, then solver uses the standard net rather than the small one.
`new_small_net_name`

only used if `change_small_net`

if true.

```
change_small_net = .false.
new_small_net_name = ''
change_initial_small_net = .false.
```

#### controls for other weak rate sources¶

### use_suzuki_weak_rates¶

If this is true, use the A=17-28 weak reaction rates from

Suzuki, Toki, and Nomoto (2016) Electron-capture and $beta$-decay rates for sd-shell nuclei in stellar environments relevant to high-density O-Ne-Mg cores http://adsabs.harvard.edu/abs/2016ApJ…817..163S

If you make use of these rates, please cite the above paper.

```
use_suzuki_weak_rates = .false.
```

### use_special_weak_rates¶

If this is true, calculate special weak rates using the approach described in Section 8 of Paxton et al. (2015).

```
use_special_weak_rates = .false.
```

### special_weak_states_file¶

File specifying which states to include

Provide the low-lying energy levels of a given nucleus. These are needed to calculate the partition function and to indicate which states have allowed transitions. Each isotope should have an entry of the form

```
<name> <nlevels>
<E_1> <J_1>
...
<E_n> <J_n>
```

where E = energy, J = spin.

```
special_weak_states_file = 'special_weak_rates.states'
```

### special_weak_transitions_file¶

File specifying to include

These are the transitions for electron capture / beta decay reactions that should be used.

Each reaction should have and entry of the form

```
<iso1> <iso2> <ntrans>
<si_1> <sf_1> <logft_1>
...
<si_n> <sf_n> <logft_n>
```

where si / sf are the n-th parent / daughter state, counting in the order that you specified in the states file. logft is the comparative half-life of that transition.

```
special_weak_transitions_file = 'special_weak_rates.transitions'
```

### ion_coulomb_corrections¶

select which expression for the ion chemical potential to use to calculate the energy shift associated with changing ion charge

- ‘none’: no corrections
- ‘DGC1973’: Dewitt, Graboske, & Cooper, M. S. 1973, ApJ, 181, 439
- ‘I1993’: Ichimaru, 1993, Reviews of Modern Physics, 65, 255
- ‘PCR2009’: Potekhin, Chabrier, & Rogers, 2009, Phys. Rev. E, 79, 016411

```
ion_coulomb_corrections = 'none'
```

### electron_coulomb_corrections¶

select which expression to use to calculate the shift in the electron chemical potential at the location of the nucleus

- ‘none’: no corrections
- ‘ThomasFermi’: Thomas-Fermi theory
- ‘Itoh2002’: Itoh et al., 2002, ApJ, 579, 380

```
electron_coulomb_corrections = 'none'
```

## “extra” parameters¶

For use by your `run_star_extras`

routines.

### extras_lipar¶

### extras_ipar¶

`extras_lipar`

number of integer parameters in `extras_ipar`

.
Must be <= `max_extras_params`

(defined in `run_star_support`

)

```
extras_lipar = 0
extras_ipar(:) = 0
```

### extras_lrpar¶

### extras_rpar¶

`extras_lrpar`

number of real(dp) parameters in `extras_rpar`

.
Must be <= `max_extras_params`

(defined in `run_star_support`

)

```
extras_lrpar = 0
extras_rpar(:) = 0d0
```

### extras_lcpar¶

### extras_cpar¶

`extras_lcpar`

number of string parameters in `extras_cpar`

.
Must be <= `max_extras_params`

(defined in `run_star_support`

).

```
extras_lcpar = 0
extras_cpar(:) = ''
```

### extras_llpar¶

### extras_lpar¶

`extras_llpar`

number of logical parameters in `extras_lpar`

.
Must be <= `max_extras_params`

(defined in `run_star_support`

).

```
extras_llpar = 0
extras_lpar(:) = .false.
```

## Color Files¶

### color_num_files¶

### color_file_names¶

### color_num_colors¶

Filenames for each bolometric correction (BC) table to load Must set the number of files to load Must be <=

`max_num_color_files`

(defined in`colors_def.f90`

). Must set the number of BC’s in each file (May be different for each file). Must be <=`max_num_bcs_per_file`

(defined in`colors_def.f90`

). Files should be structured as: Teff log_g M_div_h filter1 filter2 …. where filter1 is the name of the filter (No spaces allowed in name) Names must be unique across all files loaded and are case sensitive. For a filter named filter1 history output will be bc_filter1 for bolometric corrections and abs_mag_filter1 for absolute magnitudeDo not name any column with square brackets ([]) for instance [Fe/H] as this breaks the code

```
color_num_files = -1
color_file_names(:) = ''
color_num_colors(:) = -1
```

Default file from Lejeune, Cuisinier, Buser (1998) A&AS 130, 65-75 Can be replaced if need be. The filter names are U B V R I J H K L Lprime M (case sensitive)

```
color_num_files = 1
color_file_names(1) = 'lcb98cor.dat'
color_num_colors(1) = 11
```

Set of blackbody bolometric corrections in UBVRI Can be used at the same time as the lcb98cor.dat file Filter names bb_U bb_b bb_V bb_R bb_I color_num_files=2 color_file_names(2)=’blackbody_johnson.dat’ color_num_colors(2)=5

## misc¶

### first_model_for_timing¶

### steps_before_start_timing¶

To get a breakdown of where the time is going
set `first_model_for_timing`

to determine when the clocks start.
At the end of the run, there will be some output to the terminal showing times.

```
first_model_for_timing = -1
steps_before_start_timing = -1
```

### set_max_dt_to_frac_lifetime¶

### max_frac_of_lifetime_per_step¶

limit max timestep.
If true, set `max_timestep`

and `max_years_for_timestep`

according to expected lifetime as a function of mass.
Use the Iben & Laughlin (1989) formula to estimate lifetime.
Multiply that times the value of `max_frac_of_lifetime_per_step`

to get `max_timestep`

.

```
set_max_dt_to_frac_lifetime = .false.
max_frac_of_lifetime_per_step = -1
```

### astero_just_call_my_extras_check_model¶

Communications flag for astero and star.

```
astero_just_call_my_extras_check_model = .false.
```

### num_steps_for_garbage_collection¶

If > 0 then every `num_steps_for_garbage_collection`

steps we call the garbage collector
This will try to free some memory from data structures that are no longer needed but have
not been deallocated yet. There is no guarantee though that this will save memory and may
slow your code down with additional deallocations/allocations.

For now this primarily targets the EOS data structures.

```
num_steps_for_garbage_collection = 0
```

### report_garbage_collection¶

Whether to print debug information about the garbage collector, output is printed both
when mod(model_number,num_steps_for_garbage_collection)==0 and when
mod(model_number-1,num_steps_for_garbage_collection)==0 (the next step)
only runs if `num_steps_for_garbage_collection`

> 0

```
report_garbage_collection = .false.
```

## include other inlists¶

You can split your `star_job`

inlist into pieces using the following controls.
BTW: it works recursively, so the extras can read extras too.

### read_extra_star_job_inlist(1..5)¶

### extra_star_job_inlist_name(1..5)¶

if `read_extra_star_job_inlist(i)`

is true,
then read &star_job from this namelist file

```
read_extra_star_job_inlist(:) = .false.
extra_star_job_inlist_name(:) = 'undefined'
```

### save_star_job_namelist¶

dumps all values for &star_job controls to file

```
save_star_job_namelist = .false.
```

## private or experimental¶

### warn_run_star_extras¶

Due to changing the `run_star_extras`

functions to hooks, we break existing
`run_star_extras`

files. This flag sets a warning message and stops the MESA run
until it is set to `.false.`

. This way people will hopefully not be
confused as to why their `run_star_extras`

functions are not being called.

```
warn_run_star_extras = .true.
```

### do_special_test¶

do_special_test = .false.