conductive_flame

conductive_flame#

This test suite case models a conductively-propagated deflagration wave (“flame”) in a high-density, degenerate carbon-oxygen mixture. It is similar to a calculation presented by Timmes & Woosley (1992).

Warning

Careful modeling of the flame speed requires a much larger nuclear network than the 21 isotope network used in this test. Timmes & Woosley (1992) use a 130 isotope network, Chamulak et al. (2007) use a 430 isotope network, and Schwab et al. (2020) use a 495 isotope network.

Unlike most MESA calculations, this models a small sphere of material (instead of an entire star). The initial model is built in run_star_extras using the other_build_initial_model hook. A spatially uniform model with a given density, temperature, and composition is constructed. A small hot spot is then added at the center of the model. The properties of this initial model can be controlled from the inlist.

   use_other_build_initial_model = .true.
   x_integer_ctrl(1) = 300 ! number of points
   x_ctrl(1) = 10 ! mass (in g)
   x_ctrl(2) = 1d10 ! initial density (cgs)
   x_ctrl(3) = 2d8 ! initial temperature (cgs)

   x_ctrl(4) = 0.0001 ! size (in q) of region to heat
   x_ctrl(5) = 5d9 ! temperature of that region

   x_ctrl(6) = 0.50 ! mass fraction c12
   x_ctrl(7) = 0.50 ! mass fraction o16
   x_ctrl(8) = 0.00 ! mass fraction ne20

The inner boundary is at r = 0. The outer boundary has a fixed temperature and a fixed pressure equal to the initial pressure of the material. This is achieved via the use_other_surface_PT hook, but can also be done using the fixed_Psurf_and_Tsurf atmosphere option.

After an initial transient, the entire flame structure, approximately isobaric, propagates into the upstream fuel with a unique speed and width. The test succeeds if the flame successfully propagates through half of the domain and reports values for the flame width and speed that are within 10% of the specified reference values (see inlist). The flame width and speed are reported to the TestHub.

The flame speed is measured using the time/position when the flame is 30% of the way through the domain and time/position at the end of the test. The flame width is measured at the end of the test as the width over which eps_nuc is greater than 10% of its peak value. See routine flame_properties in the run_star_extras.f90.

../_images/grid1000598.png

pgstar commands used for the plots above:

&pgstar

   file_white_on_black_flag = .true.
   !file_device = 'vcps'    ! postscript
   file_device = 'png'      ! png

   pgstar_interval = 1
   pause_flag = .false.

   Grid1_win_flag = .false.
   Grid1_title = 'TW92 Flame'
   Grid1_win_width = 8
   Grid1_win_aspect_ratio = 0.75 ! aspect_ratio = height/width

   Grid1_xleft = 0.12 ! fraction of full window width for margin on left
   Grid1_xright = 0.95 ! fraction of full window width for margin on right
   Grid1_ybot = 0.08 ! fraction of full window width for margin on bottom
   Grid1_ytop = 0.92 ! fraction of full window width for margin on top

   Grid1_plot_name(:) = ''
   Grid1_plot_row(:) = 1 ! number from 1 at top
   Grid1_plot_rowspan(:) = 1 ! plot spans this number of rows
   Grid1_plot_col(:) =      1 ! number from 1 at left
   Grid1_plot_colspan(:) = 1 ! plot spans this number of columns
   Grid1_plot_pad_left(:) = 0.0 ! fraction of full window width for padding on left
   Grid1_plot_pad_right(:) = 0.0 ! fraction of full window width for padding on right
   Grid1_plot_pad_top(:) = 0.0 ! fraction of full window height for padding at top
   Grid1_plot_pad_bot(:) = 0.0 ! fraction of full window height for padding at bottom
   Grid1_txt_scale_factor(:) = 0.7 ! multiply txt_scale for subplot by this

   ! set default
   Grid1_num_cols = 4 ! divide plotting region into this many equal width cols
   Grid1_num_rows = 3 ! divide plotting region into this many equal height rows
   Grid1_num_plots = 3 ! <= 10

   Grid1_plot_name(:) = ''
   Grid1_plot_row(:) = 1 ! number from 1 at top
   Grid1_plot_rowspan(:) = 1 ! plot spans this number of rows
   Grid1_plot_col(:) =      1 ! number from 1 at left
   Grid1_plot_colspan(:) = 1 ! plot spans this number of columns
   Grid1_plot_pad_left(:) = 0.03 ! fraction of full window width for padding on left
   Grid1_plot_pad_right(:) = 0.03 ! fraction of full window width for padding on right
   Grid1_plot_pad_top(:) = 0.03 ! fraction of full window height for padding at top
   Grid1_plot_pad_bot(:) = 0.03 ! fraction of full window height for padding at bottom
   Grid1_txt_scale_factor(:) = 0.7 ! multiply txt_scale for subplot by this


   Grid1_plot_name(1) = 'Abundance'
   Grid1_plot_row(1) = 1 ! number from 1 at top
   Grid1_plot_rowspan(1) = 2 ! plot spans this number of rows
   Grid1_plot_col(1) =      1 ! number from 1 at left
   Grid1_plot_colspan(1) = 2 ! plot spans this number of columns
   Grid1_plot_pad_left(1) = -0.05 ! fraction of full window width for padding on left
   Grid1_plot_pad_right(1) = 0.05 ! fraction of full window width for padding on right
   Grid1_plot_pad_top(1) = 0.0 ! fraction of full window height for padding at top
   Grid1_plot_pad_bot(1) = 0.05 ! fraction of full window height for padding at bottom
   Grid1_txt_scale_factor(1) = 0.6 ! multiply txt_scale for subplot by this

   ! Grid1_plot_name(2) = 'Abundance'
   ! Grid1_plot_row(2) = 2 ! number from 1 at top
   ! Grid1_plot_rowspan(2) = 1 ! plot spans this number of rows
   ! Grid1_plot_col(2) =      1 ! number from 1 at left
   ! Grid1_plot_colspan(2) = 2 ! plot spans this number of columns
   ! Grid1_plot_pad_left(2) = -0.05 ! fraction of full window width for padding on left
   ! Grid1_plot_pad_right(2) = 0.05 ! fraction of full window width for padding on right
   ! Grid1_plot_pad_top(2) = 0.025 ! fraction of full window height for padding at top
   ! Grid1_plot_pad_bot(2) = 0.025 ! fraction of full window height for padding at bottom
   ! Grid1_txt_scale_factor(2) = 0.65 ! multiply txt_scale for subplot by this

   Grid1_plot_name(2) = 'Profile_Panels1'
   Grid1_plot_row(2) = 3 ! number from 1 at top
   Grid1_plot_rowspan(2) = 1 ! plot spans this number of rows
   Grid1_plot_col(2) =      1 ! number from 1 at left
   Grid1_plot_colspan(2) = 2 ! plot spans this number of columns
   Grid1_plot_pad_left(2) = -0.05 ! fraction of full window width for padding on left
   Grid1_plot_pad_right(2) = 0.05 ! fraction of full window width for padding on right
   Grid1_plot_pad_top(2) = 0.05 ! fraction of full window height for padding at top
   Grid1_plot_pad_bot(2) = 0.0 ! fraction of full window height for padding at bottom
   Grid1_txt_scale_factor(2) = 0.65 ! multiply txt_scale for subplot by this

   Grid1_plot_name(3) = 'History_Panels1'
   Grid1_plot_row(3) = 1 ! number from 1 at top
   Grid1_plot_rowspan(3) = 3 ! plot spans this number of rows
   Grid1_plot_col(3) =      3 ! number from 1 at left
   Grid1_plot_colspan(3) = 2 ! plot spans this number of columns
   Grid1_plot_pad_left(3) = 0.12 ! fraction of full window width for padding on left
   Grid1_plot_pad_right(3) = 0.03 ! fraction of full window width for padding on right
   Grid1_plot_pad_top(3) = 0.0 ! fraction of full window height for padding at top
   Grid1_plot_pad_bot(3) = 0.0 ! fraction of full window height for padding at bottom
   Grid1_txt_scale_factor(3) = 0.65 ! multiply txt_scale for subplot by this


   ! file output
   Grid1_file_flag = .true.
   Grid1_file_dir = 'pgstar_out'
   Grid1_file_prefix = 'grid1'
   Grid1_file_interval = 10000 ! output when mod(model_number,Grid1_file_interval)==0
   Grid1_file_width = 16 ! negative means use same value as for window
   Grid1_file_aspect_ratio = -1 ! negative means use same value as for window


   Abundance_win_flag = .false.
   Abundance_xaxis_name = 'radius_cm'
   Abundance_num_isos_to_show = -1
   Abundance_title = ''

   num_abundance_line_labels = 5
   Abundance_line_txt_scale_factor = 0.8 ! relative to other text

   Abundance_legend_max_cnt = -1
   Abundance_legend_txt_scale_factor = 0.8 ! relative to other text

   !### Profile_Panels1

   Profile_Panels1_win_flag = .false.

   Profile_Panels1_win_width = 6
   Profile_Panels1_win_aspect_ratio = 0.75 ! aspect_ratio = height/width

   Profile_Panels1_xleft = 0.15
   Profile_Panels1_xright = 0.85
   Profile_Panels1_ybot = 0.15
   Profile_Panels1_ytop = 0.85
   Profile_Panels1_txt_scale = 1.0
   Profile_Panels1_title = ''

   Profile_Panels1_xaxis_name = 'radius_cm'
   Profile_Panels1_xaxis_reversed = .false.
   Profile_Panels1_xmin = 0 ! only used if /= -101d0
   Profile_Panels1_xmax = -101d0 ! only used if /= -101d0
   Profile_Panels1_xmargin = 0d0
   Profile_Panels1_show_mix_regions_on_xaxis = .false.

   Profile_Panels1_yaxis_name(:) = ''
   Profile_Panels1_yaxis_reversed(:) = .false.
   Profile_Panels1_yaxis_log(:) = .false. ! show log10 of abs value
   Profile_Panels1_ymin(:) = -101d0 ! only used if /= -101d0
   Profile_Panels1_ymax(:) = -101d0 ! only used if /= -101d0
   Profile_Panels1_ymargin(:) = 0.1
   Profile_Panels1_dymin(:) = -1

   Profile_Panels1_other_yaxis_name(:) = ''
   Profile_Panels1_other_yaxis_reversed(:) = .false.
   Profile_Panels1_other_yaxis_log(:) = .false. ! show log10 of abs value
   Profile_Panels1_other_ymin(:) = -101d0 ! only used if /= -101d0
   Profile_Panels1_other_ymax(:) = -101d0 ! only used if /= -101d0
   Profile_Panels1_other_ymargin(:) = 0.1
   Profile_Panels1_other_dymin(:) = -1

   Profile_Panels1_show_grid = .true.

   ! setup default plot
   Profile_Panels1_num_panels = 1
   Profile_Panels1_yaxis_name(1) = 'logT'
   Profile_Panels1_other_yaxis_name(1) = 'logRho'

   ! file output
   Profile_Panels1_file_flag = .false.
   Profile_Panels1_file_dir = 'png'
   Profile_Panels1_file_prefix = 'profile_panels1_'
   Profile_Panels1_file_interval = 5 ! output when mod(model_number,Profile_Panels1_file_interval)==0
   Profile_Panels1_file_width = -1 ! (inches) negative means use same value as for window
   Profile_Panels1_file_aspect_ratio = -1 ! negative means use same value as for window


   History_Panels1_win_flag = .false.

   History_Panels1_win_width = 6
   History_Panels1_win_aspect_ratio = 0.75 ! aspect_ratio = height/width

   History_Panels1_xleft = 0.15
   History_Panels1_xright = 0.85
   History_Panels1_ybot = 0.15
   History_Panels1_ytop = 0.85
   History_Panels1_txt_scale = 1.0
   History_Panels1_title = ''

   History_Panels1_xaxis_name = 'star_age'
   History_Panels1_xmin = -101d0
   History_Panels1_xmax = -101d0
   History_Panels1_max_width = 100 ! only used if > 0.      causes xmin to move with xmax.
   History_Panels1_dxmin = -1
   History_Panels1_xaxis_reversed = .false.
   History_Panels1_xaxis_log = .false. ! show log10 of abs value

   History_Panels1_yaxis_name(:) = ''
   History_Panels1_yaxis_reversed(:) = .false.
   History_Panels1_yaxis_log(:) = .false. ! show log10 of abs value
   History_Panels1_ymin(:) = -101d0 ! only used if /= -101d0
   History_Panels1_ymax(:) = -101d0 ! only used if /= -101d0
   History_Panels1_ymargin(:) = 0.1
   History_Panels1_dymin(:) = -1

   History_Panels1_other_yaxis_name(:) = ''
   History_Panels1_other_yaxis_reversed(:) = .false.
   History_Panels1_other_yaxis_log(:) = .false. ! show log10 of abs value
   History_Panels1_other_ymin(:) = -101d0 ! only used if /= -101d0
   History_Panels1_other_ymax(:) = -101d0 ! only used if /= -101d0
   History_Panels1_other_ymargin(:) = 0.1
   History_Panels1_other_dymin(:) = -1

   ! setup default
   History_Panels1_num_panels = 2

   History_Panels1_yaxis_name(1) = 'r_flame'
   History_Panels1_yaxis_reversed(1) = .false.
   History_Panels1_ymin(1) = 0 ! only used if /= -101d0
   History_Panels1_ymax(1) = 5e-4 ! only used if /= -101d0
   History_Panels1_dymin(1) = -1

   History_Panels1_other_yaxis_name(1) = ''
   History_Panels1_other_yaxis_reversed(1) = .false.
   History_Panels1_other_ymin(1) = -101d0 ! only used if /= -101d0
   History_Panels1_other_ymax(1) = -101d0 ! only used if /= -101d0
   History_Panels1_other_dymin(1) = -1

   History_Panels1_yaxis_name(2) = 'l_flame'
   History_Panels1_yaxis_reversed(2) = .false.
   History_Panels1_ymin(2) = -101d0 ! only used if /= -101d0
   History_Panels1_ymax(2) = -101d0 ! only used if /= -101d0
   History_Panels1_dymin(2) = -1

   History_Panels1_other_yaxis_name(2) = ''
   History_Panels1_other_yaxis_reversed(2) = .false.
   History_Panels1_other_ymin(2) = -101d0 ! only used if /= -101d0
   History_Panels1_other_ymax(2) = -101d0 ! only used if /= -101d0
   History_Panels1_other_dymin(2) = -1

/ ! end of pgstar namelist

Last-Updated: 2021-06-21 (mesa b2364463) by Josiah Schwab, + documentation 2024-01-22 EbF

Last-Run: 12Apr2026 (MESA c79eae5c5) by vincentva on procyon in 505 seconds using 8 threads.