! ========
! 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
      ! ~~~~~~~~~~~~~~~
      ! ionization_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'
      !     ionization_cache_dir = '/Users/bpaxton/mesa_caches/ionization_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``, ``ionization_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 = ''
    ionization_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.


      ! pgstar_flag
      ! ~~~~~~~~~~~

      ! if true, activates pgplot output

      ! ::

    pgstar_flag = .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.


      ! history_columns_file
      ! ~~~~~~~~~~~~~~~~~~~~

      ! if null string, use default.

      ! ::

    history_columns_file = ''


      ! profile_columns_file
      ! ~~~~~~~~~~~~~~~~~~~~

      ! if null string, use default.

      ! ::

    profile_columns_file = ''


      ! 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_model_filename
      ! ~~~~~~~~~~~~~~~~~~~

      ! saved model root filename

      ! ::

    save_model_filename = 'undefined'


      ! 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'


      ! report_retries
      ! ~~~~~~~~~~~~~~

      ! in case you want some extra info about retries

      ! ::

    report_retries = .false.

! 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


      ! initial_model_eps
      ! ~~~~~~~~~~~~~~~~~

      ! Integration accuracy.

      ! ::

    initial_model_eps = 0.05d0

! 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
      ! ~~~~~~~~~~~~~~~
      ! initial_age
      ! ~~~~~~~~~~~

      ! if true, set initial age in years

      ! ::

    set_initial_age = .false.
    initial_age = 0


      ! 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.
      ! When ``set_uniform_initial_composition = .false.``, defer to
      ! composition controls in ``star/defaults/controls.defaults``.

      ! ::

    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_photospheric_zfracs = 6``
      ! + ``L09_zfracs = 7``
      ! + ``A09_Prz_zfracs = 8``
      ! + ``MB22_photospheric_zfracs = 9``
      ! + ``AAG21_photospheric_zfracs = 10``
      !   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
      ! ~~~~~~~~~~~~~~~~~~~~~~~~~~
      ! timescale_for_relax_composition
      ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      ! relax composition from current to specified over number of steps.
      ! ``relax_composition_filename`` holds the desired composition profile information
      ! file format for relax composition

      ! .. code-block:: console

      !     1st line: num_points num_species
      !     then 1 line 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
      ! note: ``initial_zfracs`` are not adjusted when using these controls,
      ! except if ``set_uniform_initial_composition = .true.``, and manually setting abundances.

      ! ::

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

      ! .. code-block:: console

      !     1st line: num_points
      !     then 1 line 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

      ! .. code-block:: console

      !     1st line: num_points
      !     then 1 line 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_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
      ! ~~~~~~~~~~~~~~~~~~~~~~
      ! set_surface_rotation_v
      ! ~~~~~~~~~~~~~~~~~~~~~~
      ! set_initial_surface_rotation_v
      ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      ! as above, but sets surface velocity in km/sec

      ! ::

    new_surface_rotation_v = 0  ! in km/sec
    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_step_limit
      ! ~~~~~~~~~~~~~~~~~~~~

      ! if ``model_number`` is <= this, then do ``set_omega``

      ! ::

    set_omega_step_limit = -1


      ! 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_zams_limit``
      ! ``Lnuc_div_L_zams_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_zams_limit``
      ! ``Lnuc_div_L_zams_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_mass_not_fe56
      ! ~~~~~~~~~~~~~~~~~~~~

      ! reports mass that is not fe56

      ! ::

    report_mass_not_fe56 = .false.


      ! 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_step_if_age_less_than
      ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      ! set_cumulative_energy_error_each_relax
      ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      ! new_cumulative_energy_error
      ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~

      ! 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.
      ! If not specifying a new_net name, the default is to start with
      ! ``basic.net`` (8 isotopes), extended to the ``co_burn.net`` (adding si28)
      ! at helium depletion, and ``approx21.net`` (21 isotopes, including
      ! compound reaction for electron captures) beyond carbon depletion.
      ! The full list of network names and the isotopes and reactions
      ! they include can be found in `$MESA_DIR/data/net_data/nets`.
      ! See also ``enable_adaptive_network`` and ``auto_extend_net`` below,
      ! and ``default_net_name`` in ``controls.defaults``
      ! ::

    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 provided custom rate tables without changing the default for everyone.
      ! Note we still multiply 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:

      !|     for each iso in the current net:
      !|       let Z = number of protons in the iso and N = number of neutrons.
      !|       let x = max mass fraction for the iso in any cell in the model.
      !|       if x >= ``min_x_for_keep`` then include the iso in new net.
      !|       if x >= ``min_x_for_n`` then include following related isos:
      !|         (Z,N+1)   (Z,N-1)     -- add or remove neutron
      !|       if x >= min_x_for_add then include following related isos:
      !|         (Z+1,N)   (Z-1,N)     -- add or remove proton
      !|         (Z+2,N+2) (Z-2,N-2)   -- add or remove alpha
      !|         (Z+2,N+1) (Z-2,N-1)   -- exchange neutron/alpha
      !|         (Z+1,N+2) (Z-1,N-2)   -- exchange proton/alpha
      !|         (Z+1,N-1) (Z-1,N+1)   -- exchange proton/neutron
      !|         (Z+4,N+4) (Z+3,N+4)   -- extend alpha chain

      ! 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) <http://adsabs.harvard.edu/abs/2016ApJ...817..163S>`_:
      ! Electron-capture and $\beta$-decay rates for sd-shell nuclei in stellar environments relevant to high-density O-Ne-Mg cores

      ! 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'

! ionization controls
! ===================


      ! ionization_file_prefix
      ! ~~~~~~~~~~~~~~~~~~~~~~
      ! ionization_Z1_suffix
      ! ~~~~~~~~~~~~~~~~~~~~

      ! Prefix and suffix of ionization files.

      ! ::

    ionization_file_prefix = 'ion'
    ionization_Z1_suffix = ''

! "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.

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


      ! star_job_namelist_name
      ! ~~~~~~~~~~~~~~~~~~~~~~

      ! if empty, uses a default name

      ! ::

    star_job_namelist_name = ''


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