From ce08258d3cbf9690c6d43b8497f38e0b23f5592e Mon Sep 17 00:00:00 2001 From: Ebraheem Farag <63124736+Debraheem@users.noreply.github.com> Date: Tue, 12 May 2026 04:05:03 -0400 Subject: [PATCH 01/15] add example tests --- .../20M_pre_ms_to_cc/Makefile | 1 + .../20M_pre_ms_to_cc/README.rst | 34 + .../20M_pre_ms_to_cc/ck | 7 + .../20M_pre_ms_to_cc/history_columns.list | 1066 +++ .../20M_pre_ms_to_cc/inlist | 288 + .../20M_pre_ms_to_cc/inlist_pgstar | 677 ++ .../20M_pre_ms_to_cc/profile_columns.list | 962 ++ .../20M_pre_ms_to_cc/re | 31 + .../20M_pre_ms_to_cc/rn | 9 + .../20M_pre_ms_to_cc/rn1 | 5 + .../20M_pre_ms_to_cc/src/run.f90 | 15 + .../20M_pre_ms_to_cc/src/run_star_extras.f90 | 231 + .../20M_pre_ms_to_cc/standard_lgTmax.mod | 3 + .../20M_pre_ms_to_cc/testhub.yml | 15 + .../Makefile | 1 + .../README.rst | 21 + .../40M_carbon_burning_envelope_issues/ck | 7 + .../history_columns.list | 1066 +++ .../40M_carbon_burning_envelope_issues/inlist | 292 + .../inlist_pgstar | 677 ++ .../profile_columns.list | 962 ++ .../40M_carbon_burning_envelope_issues/re | 31 + .../40M_carbon_burning_envelope_issues/rn | 9 + .../40M_carbon_burning_envelope_issues/rn1 | 5 + .../src/run.f90 | 15 + .../src/run_star_extras.f90 | 252 + .../testhub.yml | 15 + .../60M_envelope_issues/Makefile | 1 + .../60M_envelope_issues/README.rst | 20 + .../60M_envelope_issues/ck | 7 + .../60M_envelope_issues/history_columns.list | 1066 +++ .../60M_envelope_issues/inlist | 258 + .../60M_envelope_issues/inlist_pgstar | 672 ++ .../60M_envelope_issues/profile_columns.list | 962 ++ .../60M_envelope_issues/re | 31 + .../60M_envelope_issues/rn | 9 + .../60M_envelope_issues/rn1 | 5 + .../60M_envelope_issues/src/run.f90 | 15 + .../src/run_star_extras.f90 | 197 + .../60M_envelope_issues/testhub.yml | 15 + .../wd_nova_burst/1.1M_lgTc_7.7.mod | 3 + .../wd_nova_burst/Makefile | 1 + .../wd_nova_burst/README.rst | 51 + star/dev_cases_massive_stars/wd_nova_burst/ck | 7 + .../wd_nova_burst/docs/grid8_000586.svg | 3140 +++++++ .../wd_nova_burst/docs/wd_nova_burst_grid.svg | 8274 +++++++++++++++++ .../wd_nova_burst/history_columns.list | 1067 +++ .../wd_nova_burst/inlist | 42 + .../wd_nova_burst/inlist_pgstar | 753 ++ .../wd_nova_burst/inlist_setup | 164 + .../wd_nova_burst/inlist_setup_header | 39 + .../wd_nova_burst/inlist_wd_nova_burst | 237 + .../wd_nova_burst/inlist_wd_nova_burst_header | 42 + .../wd_nova_burst/plot.py | 249 + .../wd_nova_burst/profile_columns.list | 963 ++ star/dev_cases_massive_stars/wd_nova_burst/re | 33 + .../wd_nova_burst/ready.mod | 3 + star/dev_cases_massive_stars/wd_nova_burst/rn | 16 + .../dev_cases_massive_stars/wd_nova_burst/rn1 | 7 + .../wd_nova_burst/src/run.f90 | 15 + .../wd_nova_burst/src/run_star_extras.f90 | 257 + .../wd_nova_burst/src/run_star_extras_old.f90 | 198 + .../wd_nova_burst/testhub.yml | 556 ++ 63 files changed, 26072 insertions(+) create mode 100644 star/dev_cases_massive_stars/20M_pre_ms_to_cc/Makefile create mode 100644 star/dev_cases_massive_stars/20M_pre_ms_to_cc/README.rst create mode 100755 star/dev_cases_massive_stars/20M_pre_ms_to_cc/ck create mode 100644 star/dev_cases_massive_stars/20M_pre_ms_to_cc/history_columns.list create mode 100644 star/dev_cases_massive_stars/20M_pre_ms_to_cc/inlist create mode 100644 star/dev_cases_massive_stars/20M_pre_ms_to_cc/inlist_pgstar create mode 100644 star/dev_cases_massive_stars/20M_pre_ms_to_cc/profile_columns.list create mode 100755 star/dev_cases_massive_stars/20M_pre_ms_to_cc/re create mode 100755 star/dev_cases_massive_stars/20M_pre_ms_to_cc/rn create mode 100755 star/dev_cases_massive_stars/20M_pre_ms_to_cc/rn1 create mode 100644 star/dev_cases_massive_stars/20M_pre_ms_to_cc/src/run.f90 create mode 100644 star/dev_cases_massive_stars/20M_pre_ms_to_cc/src/run_star_extras.f90 create mode 100644 star/dev_cases_massive_stars/20M_pre_ms_to_cc/standard_lgTmax.mod create mode 100644 star/dev_cases_massive_stars/20M_pre_ms_to_cc/testhub.yml create mode 100644 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/Makefile create mode 100644 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/README.rst create mode 100755 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/ck create mode 100644 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/history_columns.list create mode 100644 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist create mode 100644 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_pgstar create mode 100644 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/profile_columns.list create mode 100755 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/re create mode 100755 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/rn create mode 100755 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/rn1 create mode 100644 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/src/run.f90 create mode 100644 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/src/run_star_extras.f90 create mode 100644 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/testhub.yml create mode 100644 star/dev_cases_massive_stars/60M_envelope_issues/Makefile create mode 100644 star/dev_cases_massive_stars/60M_envelope_issues/README.rst create mode 100755 star/dev_cases_massive_stars/60M_envelope_issues/ck create mode 100644 star/dev_cases_massive_stars/60M_envelope_issues/history_columns.list create mode 100644 star/dev_cases_massive_stars/60M_envelope_issues/inlist create mode 100644 star/dev_cases_massive_stars/60M_envelope_issues/inlist_pgstar create mode 100644 star/dev_cases_massive_stars/60M_envelope_issues/profile_columns.list create mode 100755 star/dev_cases_massive_stars/60M_envelope_issues/re create mode 100755 star/dev_cases_massive_stars/60M_envelope_issues/rn create mode 100755 star/dev_cases_massive_stars/60M_envelope_issues/rn1 create mode 100644 star/dev_cases_massive_stars/60M_envelope_issues/src/run.f90 create mode 100644 star/dev_cases_massive_stars/60M_envelope_issues/src/run_star_extras.f90 create mode 100644 star/dev_cases_massive_stars/60M_envelope_issues/testhub.yml create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/1.1M_lgTc_7.7.mod create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/Makefile create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/README.rst create mode 100755 star/dev_cases_massive_stars/wd_nova_burst/ck create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/docs/grid8_000586.svg create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/docs/wd_nova_burst_grid.svg create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/history_columns.list create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/inlist create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/inlist_pgstar create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/inlist_setup create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/inlist_setup_header create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/inlist_wd_nova_burst create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/inlist_wd_nova_burst_header create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/plot.py create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/profile_columns.list create mode 100755 star/dev_cases_massive_stars/wd_nova_burst/re create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/ready.mod create mode 100755 star/dev_cases_massive_stars/wd_nova_burst/rn create mode 100755 star/dev_cases_massive_stars/wd_nova_burst/rn1 create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/src/run.f90 create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/src/run_star_extras.f90 create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/src/run_star_extras_old.f90 create mode 100644 star/dev_cases_massive_stars/wd_nova_burst/testhub.yml diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/Makefile b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/Makefile new file mode 100644 index 000000000..c779b9d6d --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/Makefile @@ -0,0 +1 @@ +include $(MESA_DIR)/star/work/Makefile \ No newline at end of file diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/README.rst b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/README.rst new file mode 100644 index 000000000..67d0d5050 --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/README.rst @@ -0,0 +1,34 @@ +.. _20M_pre_ms_to_cc: + +***************** +20M_pre_ms_to_cc +***************** + +This dev case is copied from ``star/test_suite/20M_pre_ms_to_core_collapse``. +It keeps a main ``inlist`` for the final evolution to core collapse, +starting from ``standard_lgTmax.mod``, with pgstar settings in +``inlist_pgstar``. + +The source test suite contains seven parts from pre-main sequence to core +collapse. This dev case flattens the shared settings, mass/Z settings, +and final core-collapse settings into the main ``inlist``. The pgstar +configuration is kept separately in ``inlist_pgstar``. + +This case works with ``split_burn``, not without. + +For production science we recommend adopting tighter mesh and timestep controls, such as those suggested in the comments of ``inlist``. + +Physical checks +=============== + +None + +Inlists +======= + +This dev case has two inlist files. + +* ``inlist`` loads ``standard_lgTmax.mod`` and evolves until ``fe_core_infall_limit``. +* ``inlist_pgstar`` contains the pgstar plot settings loaded by ``inlist``. + +Last-Updated: 12May2026 diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/ck b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/ck new file mode 100755 index 000000000..78ca63a8c --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/ck @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +# this provides the definition of check_one +# check_one +source "${MESA_DIR}/star/test_suite/test_suite_helpers" + +check_one diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/history_columns.list b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/history_columns.list new file mode 100644 index 000000000..4801dcc0e --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/history_columns.list @@ -0,0 +1,1066 @@ +! history_columns.list -- determines the contents of star history logs +! you can use a non-standard version by setting history_columns_file in your inlist + +! units are cgs unless otherwise noted. + +! reorder the following names as desired to reorder columns. +! comment out the name to omit a column (fewer columns => less IO => faster running). +! remove '!' to restore a column. + +! if you have a situation where you want a non-standard set of columns, +! make a copy of this file, edit as desired, and give the new filename in your inlist +! as history_columns_file. if you are just adding columns, you can 'include' this file, +! and just list the additions in your file. note: to include the standard default +! version, use include '' -- the 0 length string means include the default file. + +! blank lines and comments can be used freely. +! if a column name appears more than once in the list, only the first occurrence is used. + +! if you need to have something added to the list of options, let me know.... + + +! the first few lines of the log file contain a few items: + + ! version_number -- for the version of mesa being used + ! burn_min1 -- 1st limit for reported burning, in erg/g/s + ! burn_min2 -- 2nd limit for reported burning, in erg/g/s + + +!# other files + +! note: you can include another list by doing +! include 'filename' +! include '' means include the default standard list file + +! the following lines of the log file contain info about 1 model per row + +!---------------------------------------------------------------------------------------------- + +!# general info about the model + + model_number ! counting from the start of the run + num_zones ! number of zones in the model + + !## age + + star_age ! elapsed simulated time in years since the start of the run + star_age_sec ! elapsed simulated time in seconds since the start of the run + star_age_min ! elapsed simulated time in minutes since the start of the run + star_age_hr ! elapsed simulated time in hours since the start of the run + star_age_day ! elapsed simulated time in days since the start of the run + !day ! elapsed simulated time in days since the start of the run + + !log_star_age + !log_star_age_sec + + !## timestep + + time_step ! timestep in years since previous model + time_step_sec ! timestep in seconds since previous model + time_step_days + log_dt ! log10 time_step in years + log_dt_sec ! log10 time_step in seconds + log_dt_days ! log10 time_step in days + + !## mass + + star_mass ! in Msun units + !log_star_mass + + !star_gravitational_mass ! star_mass is baryonic mass + !star_mass_grav_div_mass + + !delta_mass ! star_mass - initial_mass in Msun units + log_xmstar ! log10 mass exterior to M_center (grams) + + !## mass change + + !star_mdot ! d(star_mass)/dt (in msolar per year) + log_abs_mdot ! log10(abs(star_mdot)) (in msolar per year) + + !## imposed surface conditions + !tau_factor + !tau_surface + + !## imposed center conditions + !m_center + !m_center_gm + !r_center + !r_center_cm + !r_center_km + !L_center + !log_L_center + !log_L_center_ergs_s + !v_center + !v_center_kms + + !logt_max + +!---------------------------------------------------------------------------------------------- + +!# mixing and convection + + !max_conv_vel_div_csound + !max_gradT_div_grada + !max_gradT_sub_grada + !min_log_mlt_Gamma + + + !## mixing regions + + mass_conv_core ! (Msun) mass coord of top of convective core. 0 if core is not convective + + ! mx1 refers to the largest (by mass) convective region. + ! mx2 is the 2nd largest. + + ! conv_mx1_top and conv_mx1_bot are the region where mixing_type == convective_mixing. + ! mx1_top and mx1_bot are the extent of all kinds of mixing, convective and other. + + ! values are m/Mstar + conv_mx1_top + conv_mx1_bot + conv_mx2_top + conv_mx2_bot + mx1_top + mx1_bot + mx2_top + mx2_bot + + ! radius -- values are radii in Rsun units + !conv_mx1_top_r + !conv_mx1_bot_r + !conv_mx2_top_r + !conv_mx2_bot_r + !mx1_top_r + !mx1_bot_r + !mx2_top_r + !mx2_bot_r + + ! you might want to get a more complete list of mixing regions by using the following + + !mixing_regions ! note: this includes regions where the mixing type is no_mixing. + + ! the is the number of regions to report + ! there will be 2* columns for this in the log file, 2 for each region. + ! the first column for a region gives the mixing type as defined in const/public/const_def.f90. + + ! the second column for a region gives the m/mstar location of the top of the region + ! entries for extra columns after the last region in the star will have an invalid mixing_type value of -1. + ! mstar is the total mass of the star, so these locations range from 0 to 1 + ! all regions are include starting from the center, so the bottom of one region + ! is the top of the previous one. since we start at the center, the bottom of the 1st region is 0. + + ! the columns in the log file will have names like 'mix_type_1' and 'mix_qtop_1' + + ! if the star has too many regions to report them all, + ! the smallest regions will be merged with neighbors for reporting purposes only. + + + !mix_relr_regions + ! same as above, but locations given as r/rstar instead of m/mstar. + ! the columns in the log file will have names like 'mix_relr_type_1' and 'mix_relr_top_1' + + + !## conditions at base of largest convection zone (by mass) + !cz_bot_mass ! mass coordinate of base (Msun) + !cz_mass ! mass coordinate of base (Msun) -- same as cz_bot_mass + !cz_log_xmass ! mass exterior to base (g) + !cz_log_xmsun ! mass exterior to base (Msun) + !cz_xm ! mass exterior to base (Msun) + !cz_logT + !cz_logRho + !cz_logP + !cz_bot_radius ! Rsun + !cz_log_column_depth + !cz_log_radial_depth + !cz_luminosity ! Lsun + !cz_opacity + !cz_log_tau + !cz_eta + !cz_log_eps_nuc ! log10(ergs/g/s) + !cz_t_heat ! Cp*T/eps_nuc (seconds) + + !cz_csound + !cz_scale_height + !cz_grav + + !cz_omega + !cz_omega_div_omega_crit + + !cz_zone + + ! mass fractions at base of largest convection zone (by mass) + !cz_log_xa h1 + !cz_log_xa he4 + + !## conditions at top of largest convection zone (by mass) + !cz_top_mass ! mass coordinate of top (Msun) + !cz_top_log_xmass ! mass exterior to top (g) + !cz_top_log_xmsun ! mass exterior to top (Msun) + !cz_top_xm ! mass exterior to top (Msun) + !cz_top_logT + !cz_top_logRho + !cz_top_logP + !cz_top_radius ! Rsun + !cz_top_log_column_depth + !cz_top_log_radial_depth + !cz_top_luminosity ! Lsun + !cz_top_opacity + !cz_top_log_tau + !cz_top_eta + !cz_top_log_eps_nuc ! log10(ergs/g/s) + !cz_top_t_heat ! Cp*T/eps_nuc (seconds) + + !cz_top_csound + !cz_top_scale_height + !cz_top_grav + + !cz_top_omega + !cz_top_omega_div_omega_crit + + !cz_top_zone + !cz_top_zone_logdq + + ! mass fractions at top of largest convection zone (by mass) + !cz_top_log_xa h1 + !cz_top_log_xa he4 + +!---------------------------------------------------------------------------------------------- + +!# nuclear reactions + + !## integrated quantities + + !power_h_burn ! total thermal power from PP and CNO, excluding neutrinos (in Lsun units) + !power_he_burn ! total thermal power from triple-alpha, excluding neutrinos (in Lsun units) + !power_photo + !power_z_burn + !log_power_nuc_burn ! total thermal power from all burning, excluding photodisintegrations + log_LH ! log10 power_h_burn + log_LHe ! log10 power_he_burn + log_LZ ! log10 total burning power including LC, but excluding LH and LHe and photodisintegrations + log_Lnuc ! log(LH + LHe + LZ) + !log_Lnuc_ergs_s + !log_Lnuc_sub_log_L + !lnuc_photo + + !extra_L ! integral of extra_heat in Lsun units + !log_extra_L ! log10 extra_L + + !## neutrino losses + log_Lneu ! log10 power emitted in neutrinos, nuclear and thermal (in Lsun units) + log_Lneu_nuc ! log10 power emitted in neutrinos, nuclear sources only (in Lsun units) + log_Lneu_nonnuc ! log10 power emitted in neutrinos, thermal sources only (in Lsun units) + + !mass_loc_of_max_eps_nuc ! (in Msun units) + !mass_ext_to_max_eps_nuc ! (in Msun units) + !eps_grav_integral ! (in Lsun units) + !log_abs_Lgrav ! log10 abs(eps_grav_integral) (in Lsun units) + + !## information about reactions (by category) + + ! log10 total luminosity for reaction categories (Lsun units) + + pp + cno + tri_alpha + !c_alpha + !n_alpha + !o_alpha + !ne_alpha + !na_alpha + !mg_alpha + !si_alpha + !s_alpha + !ar_alpha + !ca_alpha + !ti_alpha + !fe_co_ni + !c12_c12 + !c12_o16 + !o16_o16 + !photo + !pnhe4 + !other + + !## information about individual reactions + + ! adds columns for all of the reactions that are in the current net + ! Note that if using op_split_burn=.true. then zones which have been split will report 0 for their rates + !add_raw_rates ! raw reaction rates, reactions/second + !add_screened_rates ! screened reaction rates reactions/second + !add_eps_nuc_rates ! Nuclear energy (minus neutrino losses) released erg/s + !add_eps_neu_rates ! Neutrino losses erg/s + + ! individual reactions (as many as desired) + ! use list_net_reactions = .true. in star_job to list all reactions in the current net + ! reactions/second + !raw_rate r_h1_h1_ec_h2 + !raw_rate r_h1_h1_wk_h2 + + + + !## nuclear reactions at center + + ! center log10 burn erg/g/s for reaction categories + + !c_log_eps_burn cno + !c_log_eps_burn tri_alfa + + ! center d_eps_nuc_dlnd for reaction categories + + !c_d_eps_dlnd cno + !c_d_eps_dlnd tri_alfa + + ! center d_eps_nuc_dlnT for reaction categories + + !c_d_eps_dlnT cno + !c_d_eps_dlnT tri_alfa + + !## regions of strong nuclear burning + + ! 2 zones where eps_nuc > burn_min1 erg/g/s + ! for each zone have 4 numbers: start1, start2, end2, end1 + ! start1 is mass of inner edge where first goes > burn_min1 (or -20 if none such) + ! start2 is mass of inner edge where first zone reaches burn_min2 erg/g/sec (or -20 if none such) + ! end2 is mass of outer edge where first zone drops back below burn_min2 erg/g/s + ! end1 is mass of outer edge where first zone ends (i.e. eps_nuc < burn_min1) + ! similar for the second zone + + epsnuc_M_1 ! start1 for 1st zone + epsnuc_M_2 ! start2 + epsnuc_M_3 ! end2 + epsnuc_M_4 ! end1 + + epsnuc_M_5 ! start1 for 2nd zone + epsnuc_M_6 ! start2 + epsnuc_M_7 ! end2 + epsnuc_M_8 ! end1 + + + ! you might want to get a more complete list of burning regions by using the following + + !burning_regions + ! the is the number of regions to report + ! there will be 2* columns for this in the log file, 2 for each region. + ! the first column for a region gives int(sign(val)*log10(max(1,abs(val)))) + ! where val = ergs/gm/sec nuclear energy minus all neutrino losses. + ! the second column for a region gives the q location of the top of the region + ! entries for extra columns after the last region in the star will have a value of -9999 + ! all regions are included starting from the center, so the bottom of one region + ! is the top of the previous one. + ! since we start at the center, the bottom of the 1st region is q=0 and top of last is q=1. + + ! the columns in the log file will have names like 'burn_type_1' and 'burn_qtop_1' + + !burn_relr_regions + ! same as above, but locations given as r/rstar instead of m/mstar. + ! the columns in the log file will have names like 'burn_relr_type_1' and 'burn_relr_top_1' + + + ! if the star has too many regions to report them all, + ! the smallest regions will be merged with neighbors for reporting purposes only. + +!---------------------------------------------------------------------------------------------- + +!# information about core and envelope + + !## helium core + he_core_mass + !he_core_radius + !he_core_lgT + !he_core_lgRho + !he_core_L + !he_core_v + !he_core_omega + !he_core_omega_div_omega_crit + !he_core_k + + !## CO core + co_core_mass + !CO_core + !co_core_radius + !co_core_lgT + !co_core_lgRho + !co_core_L + !co_core_v + !co_core_omega + !co_core_omega_div_omega_crit + !co_core_k + + !## ONe core + one_core_mass + !one_core_radius + !one_core_lgT + !one_core_lgRho + !one_core_L + !one_core_v + !one_core_omega + !one_core_omega_div_omega_crit + !one_core_k + + !## iron core + fe_core_mass + !fe_core_radius + !fe_core_lgT + !fe_core_lgRho + !fe_core_L + !fe_core_v + !fe_core_omega + !fe_core_omega_div_omega_crit + !fe_core_k + + !## neutron rich core + neutron_rich_core_mass + !neutron_rich_core_radius + !neutron_rich_core_lgT + !neutron_rich_core_lgRho + !neutron_rich_core_L + !neutron_rich_core_v + !neutron_rich_core_omega + !neutron_rich_core_omega_div_omega_crit + !neutron_rich_core_k + + !## envelope + + !envelope_mass ! = star_mass - he_core_mass + !envelope_fraction_left ! = envelope_mass / (initial_mass - he_core_mass) + + !h_rich_layer_mass ! = star_mass - he_core_mass + !he_rich_layer_mass ! = he_core_mass - c_core_mass + !co_rich_layer_mass + +!---------------------------------------------------------------------------------------------- + +!# timescales + + !dynamic_timescale ! dynamic timescale (seconds) -- estimated by 2*pi*sqrt(r^3/(G*m)) + kh_timescale ! kelvin-helmholtz timescale (years) + !mdot_timescale ! star_mass/abs(star_mdot) (years) + !kh_div_mdot_timescales ! kh_timescale/mdot_timescale + !nuc_timescale ! nuclear timescale (years) -- proportional to mass divided by luminosity + + !dt_cell_collapse ! min time for any cell to collapse at current velocities + !dt_div_dt_cell_collapse + + !min_dr_div_cs ! min over all cells of dr/csound (seconds) + !min_dr_div_cs_k ! location of min + !log_min_dr_div_cs ! log10 min dr_div_csound (seconds) + !min_dr_div_cs_yr ! min over all cells of dr/csound (years) + !log_min_dr_div_cs_yr ! log10 min dr_div_csound (years) + !dt_div_min_dr_div_cs + !log_dt_div_min_dr_div_cs + + !min_t_eddy ! minimum value of scale_height/conv_velocity + +!---------------------------------------------------------------------------------------------- + +!# conditions at or near the surface of the model + + !## conditions at the photosphere + effective_T + !Teff + log_Teff ! log10 effective temperature + ! Teff is calculated using Stefan-Boltzmann relation L = 4 pi R^2 sigma Teff^4, + ! where L and R are evaluated at the photosphere (tau_factor < 1) + ! or surface of the model (tau_factor >= 1) when photosphere is not inside the model. + + !photosphere_black_body_T + !photosphere_cell_T ! temperature at model location closest to the photosphere, not necessarily Teff + !photosphere_cell_log_T + !photosphere_cell_density + !photosphere_cell_log_density + !photosphere_cell_opacity + !photosphere_cell_log_opacity + !photosphere_L ! Lsun units + !photosphere_log_L ! Lsun units + !photosphere_r ! Rsun units + !photosphere_log_r ! Rsun units + !photosphere_m ! Msun units + !photosphere_v_km_s + !photosphere_cell_k + !photosphere_column_density + !photosphere_csound + !photosphere_log_column_density + !photosphere_opacity + !photosphere_v_div_cs + !photosphere_xm + !photosphere_cell_free_e + !photosphere_cell_log_free_e + !photosphere_logg + !photosphere_T + + !## conditions at or near the surface of the model (outer edge of outer cell) + + luminosity ! luminosity in Lsun units + !luminosity_ergs_s ! luminosity in cgs units + log_L ! log10 luminosity in Lsun units + !log_L_ergs_s ! log10 luminosity in cgs units + radius ! Rsun + log_R ! log10 radius in Rsun units + !radius_cm + !log_R_cm + + log_g ! log10 gravity + !gravity + !log_Ledd + log_L_div_Ledd ! log10(L/Leddington) + lum_div_Ledd + !log_surf_optical_depth + !surface_optical_depth + + !log_surf_cell_opacity ! old name was log_surf_opacity + !log_surf_cell_P ! old name was log_surf_P + !log_surf_cell_pressure ! old name was log_surf_pressure + !log_surf_cell_density ! old name was log_surf_density + !log_surf_cell_temperature ! old name was log_surf_temperature + !surface_cell_temperature ! old name was surface_temperature + !log_surf_cell_z ! old name was log_surf_z + !surface_cell_entropy ! in units of kerg per baryon + ! old name was surface_entropy + + !v_surf ! (cm/s) + v_surf_km_s ! (km/s) + v_div_csound_surf ! velocity divided by sound speed at outermost grid point + !v_div_csound_max ! max value of velocity divided by sound speed at face + !v_div_vesc + !v_phot_km_s + !v_surf_div_escape_v + + !v_surf_div_v_kh ! v_surf/(photosphere_r/kh_timescale) + + surf_avg_j_rot + surf_avg_omega + surf_avg_omega_crit + surf_avg_omega_div_omega_crit + surf_avg_v_rot ! km/sec rotational velocity at equator + surf_avg_v_crit ! critical rotational velocity at equator + surf_avg_v_div_v_crit + surf_avg_Lrad_div_Ledd + !surf_avg_logT + !surf_avg_logRho + !surf_avg_opacity + + ! Gravity Darkening, reports the surface averaged L/Lsun and Teff (K) caused by + ! gravity darkening in rotating stars. Based on the model of Espinosa Lara & Rieutord (2011) + ! 'polar' refers to the line of sight being directed along the rotation axis of the star + ! 'equatorial' refers to the line of sight coincident with the stellar equator + !grav_dark_L_polar !Lsun + !grav_dark_Teff_polar !K + !grav_dark_L_equatorial !Lsun + !grav_dark_Teff_equatorial !K + + !surf_escape_v ! cm/s + + !v_wind_Km_per_s ! Km/s + ! = 1d-5*s% opacity(1)*max(0d0,-s% mstar_dot)/ & + ! (4*pi*s% photosphere_r*Rsun*s% tau_base) + ! Lars says: + ! wind_mdot = 4*pi*R^2*rho*v_wind + ! tau = integral(opacity*rho*dr) from R to infinity + ! so tau = opacity*wind_mdot/(4*pi*R*v_wind) at photosphere + ! or v_wind = opacity*wind_mdot/(4*pi*R*tau) at photosphere + + !rotational_mdot_boost ! factor for increase in mass loss mdot due to rotation + log_rotational_mdot_boost ! log factor for increase in mass loss mdot due to rotation + !surf_r_equatorial_div_r_polar + !surf_r_equatorial_div_r + !surf_r_polar_div_r + +!---------------------------------------------------------------------------------------------- + +!# conditions near center + + log_center_T ! temperature + log_center_Rho ! density + !log_center_P ! pressure + + ! shorter names for above + log_cntr_P + log_cntr_Rho + log_cntr_T + + center_T ! temperature + center_Rho ! density + !center_P ! pressure + + !center_degeneracy ! the electron chemical potential in units of k*T + !center_gamma ! plasma interaction parameter + center_mu + center_ye + center_abar + !center_zbar + + !center_eps_grav + + !center_non_nuc_neu + !center_eps_nuc + !d_center_eps_nuc_dlnT + !d_center_eps_nuc_dlnd + !log_center_eps_nuc + + center_entropy ! in units of kerg per baryon + !max_entropy ! in units of kerg per baryon + !fe_core_infall + !non_fe_core_infall + !non_fe_core_rebound + !max_infall_speed + + !compactness_parameter ! (m/Msun)/(R(m)/1000km) for m = 2.5 Msun + !compactness + !m4 ! Mass co-ordinate where entropy=4 + ! mu4 is sensitive to the choice of how much dm/dr you average over, thus we average dm and dr over M(entropy=4) and M(entropy=4)+0.3Msun + !mu4 ! dM(Msun)/dr(1000km) where entropy=4 + + + center_omega + center_omega_div_omega_crit + +!---------------------------------------------------------------------------------------------- + +!# abundances + + !species ! size of net + + !## mass fractions near center + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_center_abundances + !add_log_center_abundances + + ! individual central mass fractions (as many as desired) + center h1 + center he4 + center c12 + center o16 + + ! individual log10 central mass fractions (as many as desired) + !log_center h1 + !log_center he4 + ! etc. + + + !## mass fractions near surface + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_surface_abundances + !add_log_surface_abundances + + ! individual surface mass fractions (as many as desired) + !surface h1 + !surface he4 + surface c12 + surface o16 + ! etc. + + ! individual log10 surface mass fractions (as many as desired) + + !log_surface h1 + !log_surface he4 + + + !## mass fractions for entire star + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_average_abundances + !add_log_average_abundances + + ! individual average mass fractions (as many as desired) + !average h1 + !average he4 + ! etc. + + ! individual log10 average mass fractions (as many as desired) + !log_average h1 + !log_average he4 + ! etc. + + + !## mass totals for entire star (in Msun units) + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_total_mass + !add_log_total_mass + + ! individual mass totals for entire star (as many as desired) + total_mass h1 + total_mass he4 + ! etc. + + ! individual log10 mass totals for entire star (in Msun units) + !log_total_mass h1 + !log_total_mass he4 + ! etc. + +!---------------------------------------------------------------------------------------------- + +!# info at specific locations + + !## info at location of max temperature + !max_T + log_max_T + + +!---------------------------------------------------------------------------------------------- + +!# information about shocks + + !## info about outermost outward moving shock + ! excluding locations with q > max_q_for_outer_mach1_location + ! returns values at location of max velocity + !shock_mass ! baryonic (Msun) + !shock_mass_gm ! baryonic (grams) + !shock_q + !shock_radius ! (Rsun) + !shock_radius_cm ! (cm) + !shock_velocity + !shock_csound + !shock_v_div_cs + !shock_lgT + !shock_lgRho + !shock_lgP + !shock_gamma1 + !shock_entropy + !shock_tau + !shock_k + !shock_pre_lgRho + +!---------------------------------------------------------------------------------------------- + +!# asteroseismology + + !delta_nu ! large frequency separation for p-modes (microHz) + ! 1e6/(seconds for sound to cross diameter of star) + !delta_Pg ! g-mode period spacing for l=1 (seconds) + ! sqrt(2) pi^2/(integral of brunt_N/r dr) + !log_delta_Pg + !nu_max ! estimate from scaling relation (microHz) + ! nu_max = nu_max_sun * M/Msun / ((R/Rsun)^2 (Teff/astero_Teff_sun)^0.5) + !nu_max_3_4th_div_delta_nu ! nu_max^0.75/delta_nu + !acoustic_cutoff ! 0.5*g*sqrt(gamma1*rho/P) at surface + !acoustic_radius ! integral of dr/csound (seconds) + !ng_for_nu_max ! = 1 / (nu_max*delta_Pg) + ! period for g-mode with frequency nu_max = nu_max_ng*delta_Pg + !gs_per_delta_nu ! delta_nu / (nu_max**2*delta_Pg) + ! number of g-modes per delta_nu at nu_max + + !int_k_r_dr_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=1 + !int_k_r_dr_2pt0_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=1 + !int_k_r_dr_0pt5_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=1 + !int_k_r_dr_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=2 + !int_k_r_dr_2pt0_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=2 + !int_k_r_dr_0pt5_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=2 + !int_k_r_dr_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=3 + !int_k_r_dr_2pt0_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=3 + !int_k_r_dr_0pt5_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=3 + +!---------------------------------------------------------------------------------------------- + +!# energy information + + total_energy ! at end of step + log_total_energy ! log(abs(total_energy)) + !total_energy_after_adjust_mass ! after mass adjustments + + ! shorter versions of above + !tot_E + !log_tot_E + + + !total_gravitational_energy + !log_total_gravitational_energy ! log(abs(total_gravitational_energy)) + !total_gravitational_energy_after_adjust_mass + + ! shorter versions of above + !tot_PE + !log_tot_PE + + !total_internal_energy + !log_total_internal_energy + !total_internal_energy_after_adjust_mass + + ! shorter versions of above + !tot_IE + !log_tot_IE + + !total_radial_kinetic_energy + !log_total_radial_kinetic_energy + !total_radial_kinetic_energy_after_adjust_mass + + ! shorter versions of above (does not include rot KE) + !tot_KE + !log_tot_KE + + !total_turbulent_energy + !log_total_turbulent_energy + !total_turbulent_energy_after_adjust_mass + !tot_Et + !log_tot_Et + + total_energy_foe + + !tot_IE_div_IE_plus_KE + !total_IE_div_IE_plus_KE + + !total_entropy + !total_eps_grav + + !total_energy_sources_and_sinks ! for this step + !total_nuclear_heating + !total_non_nuc_neu_cooling + !total_irradiation_heating + !total_extra_heating ! extra heat integrated over the model times dt (erg) + !total_WD_sedimentation_heating + + !rel_run_E_err + + rel_E_err + !abs_rel_E_err + log_rel_E_err + + !tot_e_equ_err + !tot_e_err + + + !error_in_energy_conservation ! for this step + ! = total_energy - (total_energy_start + total_energy_sources_and_sinks) + !cumulative_energy_error ! = sum over all steps of abs(error_in_energy_conservation) + !rel_cumulative_energy_error ! = cumulative_energy_error/total_energy + !log_rel_cumulative_energy_error ! = log10 of rel_cumulative_energy_error + log_rel_run_E_err ! shorter name for rel_cumulative_energy_error + + !rel_error_in_energy_conservation ! = error_in_energy_conservation/total_energy + !log_rel_error_in_energy_conservation + + !virial_thm_P_avg + !virial_thm_rel_err + !work_inward_at_center + !work_outward_at_surface + + +!---------------------------------------------------------------------------------------------- + + !# rotation + + !total_angular_momentum + log_total_angular_momentum + !i_rot_total ! moment of inertia + + !total_rotational_kinetic_energy + !log_total_rotational_kinetic_energy + !total_rotational_kinetic_energy_after_adjust_mass + +!---------------------------------------------------------------------------------------------- + +!# velocities + + !avg_abs_v_div_cs + !log_avg_abs_v_div_cs + !max_abs_v_div_cs + !log_max_abs_v_div_cs + + !avg_abs_v + !log_avg_abs_v + !max_abs_v + !log_max_abs_v + + !u_surf + !u_surf_km_s + !u_div_csound_surf + !u_div_csound_max + + !infall_div_cs + +!---------------------------------------------------------------------------------------------- + +!# misc + + !e_thermal ! sum over all zones of Cp*T*dm + + !## eos + !logQ_max ! logQ = logRho - 2*logT + 12 + !logQ_min + gamma1_min + + !## core mixing + !mass_semiconv_core + + !## H-He boundary + + !diffusion_time_H_He_bdy + !temperature_H_He_bdy + + + !## optical depth and opacity + + !one_div_yphot + !log_one_div_yphot + + !log_min_opacity + !min_opacity + + !log_tau_center + + !log_max_tau_conv + !max_tau_conv + !log_min_tau_conv + !min_tau_conv + + !tau_qhse_yrs + + !## other + + !Lsurf_m + !dlnR_dlnM + !h1_czb_mass ! location (in Msun units) of base of 1st convection zone above he core + !kh_mdot_limit + !log_cntr_dr_cm + !min_Pgas_div_P + !surf_c12_minus_o16 ! this is useful for seeing effects of dredge up on AGB + !surf_num_c12_div_num_o16 + + !phase_of_evolution ! Integer mapping to the type of evolution see star_data/public/star_data_def.inc for definitions + + !## MLT++ + !gradT_excess_alpha + !gradT_excess_min_beta + !gradT_excess_max_lambda + + !max_L_rad_div_Ledd + !max_L_rad_div_Ledd_div_phi_Joss + + + !## RTI + !rti_regions + + !## Ni & Co + !total_ni_co_56 + + + !## internal structure constants + + ! this is evaluated assuming a spherical star and does not account for rotation + !apsidal_constant_k2 + + +!---------------------------------------------------------------------------------------------- + +!# accretion + + !k_below_const_q + !q_below_const_q + !logxq_below_const_q + + !k_const_mass + !q_const_mass + !logxq_const_mass + + !k_below_just_added + !q_below_just_added + !logxq_below_just_added + + !k_for_test_CpT_absMdot_div_L + !q_for_test_CpT_absMdot_div_L + !logxq_for_test_CpT_absMdot_div_L + +!---------------------------------------------------------------------------------------------- + +!# Color output + + ! Outputs the bolometric correction (bc) for the star in filter band ``filter'' (case sensitive) + !bc filter + + ! Outputs the absolute magnitude for the star in filter band ``filter'' (case sensitive) + !abs_mag filter + + ! Adds all the bc's to the output + !add_bc + + ! Adds all the absolute magnitudes to the output + !add_abs_mag + + ! Outputs luminosity in filter band ``filter'' (erg s^-1) (case sensitive) + ! lum_band filter + + ! Adds all the filter band luminosities to the output (erg s^-1) + ! add_lum_band + + ! Outputs log luminosity in filter band ``filter'' (log erg s^-1) (case sensitive) + ! log_lum_band filter + + ! Adds all the filter band luminosities to the output (log erg s^-1) + ! add_log_lum_band + +!---------------------------------------------------------------------------------------------- + +!# RSP + + !rsp_DeltaMag ! absolute magnitude difference between minimum and maximum light (mag) + !rsp_DeltaR ! R_max - R_min difference in the max and min radius (Rsun) + !rsp_GREKM ! fractional growth of the kinetic energy per pulsation period ("nonlinear growth rate") - see equation 5 in MESA5 + !rsp_num_periods ! Count of the number of pulsation cycles completed + !rsp_period_in_days ! Running period, ie., period between two consecutive values of R_max (days) + !rsp_phase ! Running pulsation phase for a cycle + +!---------------------------------------------------------------------------------------------- +!# debugging + + !## retries + num_retries ! total during the run + + !## solver iterations + + num_iters ! same as num_solver_iterations + num_solver_iterations ! iterations at this step + !total_num_solver_iterations ! total iterations during the run + !avg_num_solver_iters + + !rotation_solver_steps + + !diffusion_solver_steps + !diffusion_solver_iters + + !avg_setvars_per_step + !avg_skipped_setvars_per_step + !avg_solver_setvars_per_step + + !burn_solver_maxsteps + + !total_num_solver_calls_converged + !total_num_solver_calls_failed + !total_num_solver_calls_made + !total_num_solver_relax_calls_converged + !total_num_solver_relax_calls_failed + !total_num_solver_relax_calls_made + !total_num_solver_relax_iterations + + !total_step_attempts + !total_step_redos + !total_step_retries + !total_steps_finished + !total_steps_taken + + !TDC_num_cells + + !## Relaxation steps + !total_relax_step_attempts + !total_relax_step_redos + !total_relax_step_retries + !total_relax_steps_finished + !total_relax_steps_taken + + !## conservation during mesh adjust + !log_mesh_adjust_IE_conservation + !log_mesh_adjust_KE_conservation + !log_mesh_adjust_PE_conservation + + !## amr + !num_hydro_merges + !num_hydro_splits + + !## timing + !elapsed_time ! time since start of run (seconds) + + !## Extras + burning_regions 80 + mixing_regions 40 diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/inlist b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/inlist new file mode 100644 index 000000000..e649a1413 --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/inlist @@ -0,0 +1,288 @@ +! 20M_pre_ms_to_cc +! Main evolution inlist flattened from 20M_pre_ms_to_core_collapse. +! This active inlist starts from standard_lgTmax.mod and evolves to core collapse. + +&star_job + show_log_description_at_start = .false. + + load_saved_model = .true. + load_model_filename = 'standard_lgTmax.mod' + !create_pre_main_sequence_model = .true. + !pre_ms_relax_to_start_radiative_core = .true. + + change_net = .true. + new_net_name = 'approx21_cr60_plus_co56.net' + dump_missing_metals_into_heaviest = .false. + + ! Example ccsn network for properly capturing the energy generation rate during all stages + !change_net_net = .true. + !new_net_name = 'mesa_206.net' + !dump_missing_metals_into_heaviest = .false. + + ! turn on hydrodynamics + change_v_flag = .true. + new_v_flag = .true. + + ! If using a big network, comment out and use a local rate_tables directory + num_special_rate_factors = 2 + reaction_for_special_factor(1) = 'r_c12_ag_o16' + special_rate_factor(1) = 1 + filename_of_special_rate(1) = 'c12ag_deboer_sigma_0p0_2000_Tgrid.dat' + + reaction_for_special_factor(2) = 'r_he4_he4_he4_to_c12' + special_rate_factor(2) = 1 + filename_of_special_rate(2) = 'r_he4_he4_he4_to_c12_cf88.txt' + + show_retry_counts_when_terminate = .true. + show_timestep_limit_counts_when_terminate = .true. + + ! pgstar is recommended for diagnosing issues and understanding the evolution + pgstar_flag = .true. + save_pgstar_files_when_terminate = .true. + + new_Z = 1.42d-2 + initial_zfracs = 6 ! set to asplund 2009 abundance fractions + + save_model_when_terminate = .true. + save_model_filename = 'final.mod' + required_termination_code_string = 'fe_core_infall_limit' + +/ ! end of star_job namelist + +&eos + use_Skye = .true. + mass_fraction_limit_for_Skye = 1d-10 + +/ ! end of eos namelist + +&kap + ! OPAL asplund 2009 opacities, Zbase set in inlist_mass_Z_wind_rotation + kap_file_prefix = 'a09' ! 'gs98' 'a09' 'OP_a09' 'OP_gs98' + kap_CO_prefix = 'a09_co' ! 'gs98_co' 'a09_co' + kap_lowT_prefix = 'lowT_fa05_a09p' + use_Type2_opacities = .true. + + Zbase = 1.42d-2 +/ ! end of kap namelist + +&controls + +! initial model + initial_mass = 20 + initial_z = 1.42d-2 ! solar + initial_y = 0.2703d0 ! from asplund et al. 2009, solar. + +! stopping + fe_core_infall_limit = 1d7 + ! limit max_model_number as part of test_suite + max_model_number = 6000 + !max_number_retries = 37 + +! wind + !Dutch_scaling_factor = 0.4d0 + + cool_wind_full_on_T = 0.8d4 + hot_wind_full_on_T = 1.2d4 + cool_wind_RGB_scheme = 'Dutch' + cool_wind_AGB_scheme = 'Dutch' + hot_wind_scheme = 'Dutch' + Dutch_wind_lowT_scheme = 'de Jager' + + max_T_center_for_any_mass_loss = 1.1d9 + max_tries_for_implicit_wind = 0 + +! atmosphere + atm_option = 'T_tau' + atm_T_tau_relation = 'Eddington' + atm_T_tau_opacity = 'fixed' + Pextra_factor = 2 + +! mlt + mixing_length_alpha = 1.5 + MLT_option = 'TDC' + use_Ledoux_criterion = .true. + + use_other_alpha_mlt = .true. ! implemented in run_star_extras + x_ctrl(21) = 3.0 ! alpha_H + x_ctrl(22) = 1.5 ! alpha_other + x_ctrl(23) = 0.5 ! ! use alpha_H if cell X >= H_limit; else use alpha_other + x_ctrl(24) = 9d0 ! ! use other_alpha_mlt only if star_mass >= this limit. + + thermohaline_option = 'Kippenhahn' + thermohaline_coeff = 0 + + semiconvection_option = 'Langer_85 mixing; gradT = gradr' + alpha_semiconvection = 1d-2 + + mlt_make_surface_no_mixing = .true. + +! superadiabatic convection routines: + + use_superad_reduction = .false. + superad_reduction_Gamma_limit = 0.3d0 ! default is 0.5d0 + superad_reduction_Gamma_limit_scale = 5d0 + superad_reduction_Gamma_inv_scale = 5d0 + superad_reduction_diff_grads_limit = 1d-2 ! default is 1d-3 + superad_reduction_limit = -1d0 + + okay_to_reduce_gradT_excess = .false. + gradT_excess_f1 = 1d-4 + gradT_excess_f2 = 1d-2 + gradT_excess_lambda1 = -1d0 ! full on + +! mixing + !set_min_D_mix = .true. + !min_D_mix = 1d-2 + + ! we use step overshooting in H core + overshoot_scheme(1) = 'step' + overshoot_zone_type(1) = 'burn_H' + overshoot_zone_loc(1) = 'core' + overshoot_bdy_loc(1) = 'top' + overshoot_f(1) = 0.345 ! for M>10 + !overshoot_f(1) = 0.21 ! For M<10 + overshoot_f0(1) = 0.01 + + ! exponential in the H core + overshoot_scheme(2) = 'exponential' + overshoot_zone_type(2) = 'burn_He' + overshoot_zone_loc(2) = 'core' + overshoot_bdy_loc(2) = 'top' + overshoot_f(2) = 0.01 + overshoot_f0(2) = 0.005 + + ! we don't want to deal with He/CO core mergers + ! and there is reason to believe there is little + ! inward overshooting in the shell across compositions boundaries + overshoot_scheme(3) = 'none' + overshoot_zone_type(3) = 'burn_He' + overshoot_zone_loc(3) = 'shell' + overshoot_bdy_loc(3) = 'bottom' + + ! a small amount of overshooting on top of any other convective core + ! avoid spurious numerical behavior + ! perfect amount for degenerate flames + overshoot_scheme(4) = 'exponential' + overshoot_zone_type(4) = 'any' + overshoot_zone_loc(4) = 'any' + overshoot_bdy_loc(4) = 'any' + overshoot_f(4) = 0.005d0 + overshoot_f0(4) = 0.001d0 + +! timesteps + time_delta_coeff = 1.0 + min_timestep_factor = 0.8d0 + max_timestep_factor = 1.05d0 + timestep_factor_for_retries = 0.75 + + limit_for_rel_error_in_energy_conservation = 1d-3 + hard_limit_for_rel_error_in_energy_conservation = 1d-2 + + never_skip_hard_limits = .true. + min_xa_hard_limit = -1d-5 + min_xa_hard_limit_for_highT = -3d-5 + + delta_lgTeff_limit = 0.01 + delta_lgL_limit = 0.1 + delta_lgL_He_limit = 0.1 + + ! Recommend decreasing all three Rho, T, Tmax + ! to 1d-3 or lower in production runs + delta_lgRho_cntr_limit = 0.03 + delta_lgRho_cntr_hard_limit = 0.1 + delta_lgRho_limit = 0.1 + + delta_lgT_cntr_limit_only_after_near_zams = .true. + delta_lgT_cntr_limit = 0.002 + delta_lgT_cntr_hard_limit = 0.1 + + delta_lgT_max_limit_only_after_near_zams = .true. + delta_lgT_max_limit = 0.002 + delta_lgT_max_hard_limit = 0.1 + + dX_div_X_limit(2) = -1 ! for he4 + + ! On the changes in total abundance of each isotope + ! one of the most useful timestep controls, period + dX_nuc_drop_limit = 2d-2 ! Recommend decreasing to 1d-3 or lower in a production run + dX_nuc_drop_limit_at_high_T = 2d-2 ! default = -1 = same as dX_nuc_drop_limit + dX_nuc_drop_min_X_limit = 1d-3 ! try decreasing to 1d-4 or 1d-5 in a production run + dX_nuc_drop_max_A_limit = 70 ! try increasing beyond 60 in a big network run + dX_nuc_drop_hard_limit = 1d99 + + delta_lg_XH_cntr_limit = 0.01d0 + delta_lg_XH_cntr_max = 0.0d0 + delta_lg_XH_cntr_min = 0.5d0 + + delta_lg_XHe_cntr_limit = 0.01d0 + delta_lg_XHe_cntr_max = 0.0d0 + delta_lg_XHe_cntr_min = 0.5d0 + + delta_XSi_cntr_limit = 0.0025 + delta_XSi_cntr_hard_limit = -1!0.02 + delta_Ye_highT_limit = 1d-3 + +! mesh + !max_dq= 1d-3 ! or lower + mesh_delta_coeff = 2.5 ! try 1.0 or below in production run + mesh_delta_coeff_for_highT = 1.5 ! try 1.0 or below in production run + logT_max_for_standard_mesh_delta_coeff = 9.0 + logT_min_for_highT_mesh_delta_coeff = 9.5 + !min_dq_for_xa = 1d-4 ! avoid over-resolving composition changes, bad for bit for bit convergence? + +! solver + + ! damped newton and structure only + scale_max_correction = 0.1d0 + ignore_species_in_max_correction = .true. + + use_gold2_tolerances = .true. + use_gold_tolerances = .true. + gold_solver_iters_timestep_limit = 20 + + max_abs_rel_run_E_err = 1d-2 + energy_eqn_option = 'dedt' + + convergence_ignore_equL_residuals = .true. + make_gradr_sticky_in_solver_iters = .true. + min_logT_for_make_gradr_sticky_in_solver_iters = 8d0 + xa_scale = 1d-5 + min_timestep_limit = 1d-12 ! (seconds) ! 1d-20 if things are sticky + + when_to_stop_rtol = 1d-3 + when_to_stop_atol = 1d-3 + + op_split_burn = .true. + op_split_burn_min_T = 1d9 + burn_steps_limit = 150 + burn_steps_hard_limit = 250 + op_split_burn_eps = 1d-5 + op_split_burn_odescal = 1d-5 + +! output + + !max_model_number = 4000000 + + num_trace_history_values = 4 + trace_history_value_name(1) = 'Fe_core' + trace_history_value_name(2) = 'fe_core_infall' + trace_history_value_name(3) = 'rel_E_err' + trace_history_value_name(4) = 'log_rel_run_E_err' + + photo_interval = 200 + photo_digits = 8 + profile_interval = 100 + max_num_profile_models = 400000 + history_interval = 1 + write_header_frequency = 10 + terminal_interval = 10 + + !report_solver_progress = .true. ! set true to see info about solver iterations + !report_ierr = .true. ! if true, produce terminal output when have some internal error + +/ ! end of controls namelist + +&pgstar + read_extra_pgstar_inlist(1) = .true. + extra_pgstar_inlist_name(1) = 'inlist_pgstar' +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/inlist_pgstar b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/inlist_pgstar new file mode 100644 index 000000000..be0295550 --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/inlist_pgstar @@ -0,0 +1,677 @@ +&pgstar + +!pause_flag = .true. + +pgstar_interval = 1 +pgstar_show_age_in_years = .true. +pgstar_show_age_in_seconds = .false. +pgstar_sleep = 0.0 + +! some global grid plot settings at end + +pgstar_show_model_number = .false. +pgstar_show_age = .false. + +!------------------------------------------------------------------------------------ + +Grid1_win_flag = .true. +Grid1_win_width = 12 +Grid1_win_aspect_ratio = 0.666 + +! file output +Grid1_file_flag = .true. +Grid1_file_dir = 'png' +Grid1_file_prefix = 'Grid1_' +Grid1_file_interval = 25 ! output when mod(model_number,Grid1_file_interval)==0 +Grid1_file_width = 27 ! (inches) negative means use same value as for window +Grid1_file_aspect_ratio = -1 ! negative means use same value as for window + +! reset the defaults + +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 + +Grid1_title = '' + +Grid1_num_cols = 3 ! divide plotting region into this many equal width cols +Grid1_num_rows = 5 ! divide plotting region into this many equal height rows +Grid1_num_plots = 6 ! <= 10 + +Grid1_plot_name(1) = 'Text_Summary1' +Grid1_plot_row(1) = 1 ! number from 1 at top +Grid1_plot_rowspan(1) = 1 ! plot spans this number of rows +Grid1_plot_col(1) = 1 ! number from 1 at left +Grid1_plot_colspan(1) = 3 ! plot spans this number of columns + +Grid1_plot_pad_left(1) = -0.03 ! fraction of full window width for padding on left +Grid1_plot_pad_right(1) = 0.0 ! fraction of full window width for padding on right +Grid1_plot_pad_top(1) = -0.06 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(1) = 0.07 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(1) = 1 ! 0.8 ! multiply txt_scale for subplot by this + +Grid1_plot_name(3) = 'TRho' +Grid1_plot_row(3) = 2 ! number from 1 at top +Grid1_plot_rowspan(3) = 1 ! plot spans this number of rows +Grid1_plot_col(3) = 1 ! number from 1 at left +Grid1_plot_colspan(3) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(3) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(3) = 0.08 ! fraction of full window width for padding on right +Grid1_plot_pad_top(3) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(3) = 0.01 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(3) = 0.7 ! multiply txt_scale for subplot by this + +Grid1_plot_name(5) = 'Profile_Panels1' +Grid1_plot_row(5) = 3 ! number from 1 at top +Grid1_plot_rowspan(5) = 3 ! plot spans this number of rows +Grid1_plot_col(5) = 1 ! number from 1 at left +Grid1_plot_colspan(5) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(5) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(5) = 0.10 ! fraction of full window width for padding on right +Grid1_plot_pad_top(5) = 0.05 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(5) = 0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(5) = 0.6 ! multiply txt_scale for subplot by this + +Grid1_plot_name(2) = 'TRho_Profile' +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) = 2 ! number from 1 at left +Grid1_plot_colspan(2) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(2) = -0.01 ! fraction of full window width for padding on left +Grid1_plot_pad_right(2) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(2) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(2) = 0.01 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(2) = 0.7 ! multiply txt_scale for subplot by this + +Grid1_plot_name(4) = 'History_Panels1' +Grid1_plot_row(4) = 3 ! number from 1 at top +Grid1_plot_rowspan(4) = 3 ! plot spans this number of rows +Grid1_plot_col(4) = 2 ! number from 1 at left +Grid1_plot_colspan(4) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(4) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(4) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(4) = 0.05 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(4) = 0.0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(4) = 0.6 ! multiply txt_scale for subplot by this + +Grid1_plot_name(6) = 'Profile_Panels3' +Grid1_plot_row(6) = 2 ! number from 1 at top +Grid1_plot_rowspan(6) = 4 ! plot spans this number of rows +Grid1_plot_col(6) = 3 ! Number from 1 at left +Grid1_plot_colspan(6) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(6) = 0.04 ! fraction of full window width for padding on left +Grid1_plot_pad_right(6) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(6) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(6) = 0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(6) = 0.6 ! multiply txt_scale for subplot by this + +!------------------------------------------------------------------------------------ + +Profile_Panels3_win_flag = .false. + +Profile_Panels3_title = '' + +Profile_Panels3_num_panels = 5 + +Profile_Panels3_yaxis_name(1) = 'Abundance' + +Profile_Panels3_yaxis_name(2) = 'Power' + +Profile_Panels3_yaxis_name(3) = 'Mixing' +Mixing_legend_txt_scale_factor = 0.9 + +Profile_Panels3_yaxis_name(4) = 'logRho' +Profile_Panels3_other_yaxis_name(4) = 'v_div_cs' ! 'vel_km_per_s' ! 'entropy' +Profile_Panels3_other_dymin(4) = 0.14 + +Profile_Panels3_yaxis_name(5) = 'logT' +Profile_Panels3_other_yaxis_name(5) = 'burn_num_iters' + +! x-axis limits and properties +Profile_Panels3_xaxis_name = 'mass' +Profile_Panels3_xmin = 0.0 +Profile_Panels3_xmax = -101d0 ! 2.2 +Profile_Panels3_xaxis_reversed = .false. + +Profile_Panels3_txt_scale = 0.7 + +!Profile_Panels3_xaxis_name = 'zone' +!Profile_Panels3_xmin = 800 +!Profile_Panels3_xmax = 1100 +!Profile_Panels3_xaxis_reversed = .true. + +!Profile_Panels3_show_grid = .true. +Profile_Panels3_show_mix_regions_on_xaxis = .true. + +!------------------------------------------------------------------------------------ + +!Profile_Panels1_win_flag = .true. +!Profile_Panels1_file_flag = .true. + Profile_Panels1_file_dir = 'png' + Profile_Panels1_file_prefix = 'profile_panels1_' + Profile_Panels1_file_interval = 1 + Profile_Panels1_file_width = -1 + Profile_Panels1_file_aspect_ratio = -1 + +Profile_Panels1_title = '' + +Profile_Panels1_txt_scale = 0.7 +Profile_Panels1_num_panels = 4 + +Profile_Panels1_yaxis_name(1) = 'logRho' +Profile_Panels1_dymin(1) = 0.14 +Profile_Panels1_other_yaxis_name(1) = 'logT' +Profile_Panels1_other_dymin(1) = 0.14 + +Profile_Panels1_yaxis_name(2) = 'entropy' +Profile_Panels1_other_yaxis_name(2) = 'pgas_div_p' + +Profile_Panels1_yaxis_name(3) = 'gradT' +Profile_Panels1_other_yaxis_name(3) = 'grada' +Profile_Panels1_same_yaxis_range(3) = .true. +Profile_Panels1_other_dymin(3) = 0.08 + +Profile_Panels1_yaxis_name(4) = 'log_opacity' +Profile_Panels1_dymin(1) = 0.14 +Profile_Panels1_other_yaxis_name(4) = 'gradr' +Profile_Panels1_other_dymin(1) = 0.14 + +! x-axis limits and properties +Profile_Panels1_xaxis_name = 'logtau' +Profile_Panels1_xmin = -101d0 +Profile_Panels1_xmax = 8.1 +Profile_Panels1_xaxis_reversed = .true. + +!Profile_Panels1_xaxis_name = 'zone' +!Profile_Panels1_xmin = 15 +!Profile_Panels1_xmax = 270 +!Profile_Panels1_xaxis_reversed = .true. + +!Profile_Panels1_show_grid = .true. +Profile_Panels1_show_mix_regions_on_xaxis = .true. + +!------------------------------------------------------------------------------------ + +!TRho_Profile_win_flag = .true. +TRho_Profile_win_width = 8 +TRho_Profile_win_aspect_ratio = 0.75 ! aspect_ratio = height/width + +! file output +!TRho_Profile_file_flag = .true. +TRho_Profile_file_dir = 'TRho' +TRho_Profile_file_prefix = 'trho_' +TRho_Profile_file_interval = 10 ! output when `mod(model_number,TRho_Profile_file_interval)==0` +TRho_Profile_file_width = -1 ! (inches) negative means use same value as for window +TRho_Profile_file_aspect_ratio = -1 ! negative means use same value as for window + +TRho_Profile_xleft = 0.15 +TRho_Profile_xright = 0.85 +TRho_Profile_ybot = 0.15 +TRho_Profile_ytop = 0.85 +TRho_Profile_txt_scale = 0.7 +TRho_Profile_title = ' ' + +TRho_switch_to_Column_Depth = .false. +TRho_switch_to_mass = .false. + +show_TRho_Profile_legend = .false. + TRho_Profile_legend_coord = 0.07 + TRho_Profile_legend_fjust = 0.0 + TRho_Profile_legend_disp1 = -2.0 + TRho_Profile_legend_del_disp = -1.3 + TRho_Profile_legend_txt_scale = 1.1 + +show_TRho_Profile_text_info = .false. + TRho_Profile_text_info_xfac = 0.77 ! controls x location + TRho_Profile_text_info_dxfac = 0.02 ! controls x spacing to value from text + TRho_Profile_text_info_yfac = 0.6 ! controls y location of 1st line + TRho_Profile_text_info_dyfac = -0.04 ! controls line spacing + +show_TRho_Profile_mass_locs = .false. +show_TRho_accretion_mesh_borders = .false. +show_TRho_Profile_kap_regions = .false. +show_TRho_Profile_gamma1_4_3rd = .true. +show_TRho_Profile_eos_regions = .false. +show_TRho_Profile_degeneracy_line = .true. +show_TRho_Profile_Pgas_Prad_line = .true. +show_TRho_Profile_burn_lines = .true. +show_TRho_Profile_burn_labels = .true. + +! axis limits +TRho_Profile_xmin = -12.0 +TRho_Profile_xmax = 10.0 +TRho_Profile_ymin = 3.0 +TRho_Profile_ymax = 10.0 + +! these are shown if show_TRho_Profile_mass_locs = .true. +! set all the entries +profile_mass_point_q = -1 +profile_mass_point_color_index = 1 +profile_mass_point_symbol = -6 +profile_mass_point_symbol_scale = 1.7 +profile_mass_point_str = '' +profile_mass_point_str_clr = 1 +profile_mass_point_str_scale = 1.0 + +! set defaults +num_profile_mass_points = 3 ! max is defined in star_def (max_num_profile_mass_points) + +profile_mass_point_q(1) = 0.5 +profile_mass_point_color_index(1) = 1 +profile_mass_point_symbol(1) = -6 +profile_mass_point_str(1) = ' 0.5 M\d\(0844)\u' +profile_mass_point_str_clr(1) = 1 + +profile_mass_point_q(2) = 0.95 +profile_mass_point_color_index(2) = 1 +profile_mass_point_symbol(2) = -6 +profile_mass_point_str(2) = ' 0.95 M\d\(0844)\u' +profile_mass_point_str_clr(3) = 1 + +profile_mass_point_q(3) = 0.999 +profile_mass_point_color_index(3) = 1 +profile_mass_point_symbol(3) = -6 +profile_mass_point_str(3) = ' 0.999 M\d\(0844)\u' +profile_mass_point_str_clr(3) = 1 + +!------------------------------------------------------------------------------------ + +! Text_Summary windows + +Text_Summary1_win_flag = .false. +Text_Summary1_win_width = 10 +Text_Summary1_win_aspect_ratio = 0.15 + +Text_Summary1_xleft = 0.01 +Text_Summary1_xright = 0.99 +Text_Summary1_ybot = 0.0 +Text_Summary1_ytop = 1.0 +Text_Summary1_txt_scale = 0.95 +Text_Summary1_title = '' + +Text_Summary1_num_rows = 6 ! <= 20 +Text_Summary1_num_cols = 5 ! <= 20 +Text_Summary1_name(:,:) = '' + +Text_Summary1_name(1,1) = 'model_number' +Text_Summary1_name(1,2) = 'log_dt' +Text_Summary1_name(1,3) = 'Mass' +Text_Summary1_name(1,4) = 'H_cntr' +Text_Summary1_name(1,5) = 'H_rich' + +Text_Summary1_name(2,1) = 'non_fe_core_infall' +Text_Summary1_name(2,2) = 'star_age' +Text_Summary1_name(2,3) = 'lg_Mdot' +Text_Summary1_name(2,4) = 'He_cntr' +Text_Summary1_name(2,5) = 'He_core' + +Text_Summary1_name(3,1) = 'fe_core_infall' +Text_Summary1_name(3,2) = 'gamma1_min' +Text_Summary1_name(3,3) = 'eta_cntr' +Text_Summary1_name(3,4) = 'C_cntr' +Text_Summary1_name(3,5) = 'CO_core' + +Text_Summary1_name(4,1) = 'log_max_T' +Text_Summary1_name(4,2) = 'log_LH' +Text_Summary1_name(4,3) = 'lg_Lnuc_tot' +Text_Summary1_name(4,4) = 'O_cntr' +Text_Summary1_name(4,5) = 'Fe_core' + +Text_Summary1_name(5,1) = 'log_cntr_T' +Text_Summary1_name(5,2) = 'log_LHe' +Text_Summary1_name(5,3) = 'lg_Lneu' +Text_Summary1_name(5,4) = 'Ne_cntr' +Text_Summary1_name(5,5) = 'zones' + +Text_Summary1_name(6,1) = 'log_cntr_Rho' +Text_Summary1_name(6,2) = 'log_LZ' +Text_Summary1_name(6,3) = 'lg_Lphoto' +Text_Summary1_name(6,4) = 'Si_cntr' +Text_Summary1_name(6,5) = 'retries' + +!------------------------------------------------------------------------------------ + +! Abundance profile plot + +Abundance_win_flag = .false. + +! window properties +Abundance_win_width = 10 +Abundance_win_aspect_ratio = 0.75 + +Abundance_xleft = 0.15 +Abundance_xright = 0.85 +Abundance_ybot = 0.15 +Abundance_ytop = 0.85 +Abundance_txt_scale = 1.1 +Abundance_title = '' + +! isotopes to plot + +Abundance_num_isos_to_show = 20 + +Abundance_which_isos_to_show(1) = 'h1' +Abundance_which_isos_to_show(2) = 'he3' +Abundance_which_isos_to_show(3) = 'he4' +Abundance_which_isos_to_show(4) = 'c12' +Abundance_which_isos_to_show(5) = 'n14' +Abundance_which_isos_to_show(6) = 'o16' +Abundance_which_isos_to_show(7) = 'ne20' +Abundance_which_isos_to_show(8) = 'mg24' +Abundance_which_isos_to_show(9) = 'si28' +Abundance_which_isos_to_show(10) = 's32' +Abundance_which_isos_to_show(11) = 'ar36' +Abundance_which_isos_to_show(12) = 'ca40' +Abundance_which_isos_to_show(13) = 'ti44' +Abundance_which_isos_to_show(14) = 'cr48' +Abundance_which_isos_to_show(15) = 'cr56' +Abundance_which_isos_to_show(16) = 'fe52' +Abundance_which_isos_to_show(17) = 'fe54' +Abundance_which_isos_to_show(18) = 'fe56' +Abundance_which_isos_to_show(19) = 'ni56' +Abundance_which_isos_to_show(20) = 'neut' +!Abundance_which_isos_to_show(22) = 'ne22' + +! number and size of isotope labels along curves +num_abundance_line_labels = 4 +Abundance_line_txt_scale_factor = 1.1 + +! number and size of isotopes on legend +Abundance_legend_max_cnt = 10 +Abundance_legend_txt_scale_factor = 1.3 + +! yaxis limits +Abundance_log_mass_frac_min = -4!-6.4 ! -3.5 +Abundance_log_mass_frac_max = 0.3 + +! file output +Abundance_file_flag = .false. +Abundance_file_dir = 'Abundance' +Abundance_file_prefix = 'abund_' +Abundance_file_width = -1 ! (inches) negative means use same value as for window +Abundance_file_aspect_ratio = -1 ! negative means use same value as for window + +!------------------------------------------------------------------------------------ + +! power plot + +Power_win_flag = .false. +Power_win_width = 10 +Power_win_aspect_ratio = 0.75 +Power_title = '' + +Power_xleft = 0.15 +Power_xright = 0.85 +Power_ybot = 0.15 +Power_ytop = 0.85 +Power_txt_scale = 1.1 +Power_title = ' ' + +Power_legend_max_cnt = 10 +Power_legend_txt_scale_factor = 1.3 ! relative to other text + +! power yaxis limits -- to override system default selections +Power_ymin = -5.0 ! -101d0 ! only used if /= -101d0 +Power_ymax = 25.0 ! -101d0 ! only used if /= -101d0 + +! file output +Power_file_flag = .false. +Power_file_dir = 'png' +Power_file_prefix = 'power_' +Power_file_interval = 5 ! output when mod(model_number,Power_file_interval)==0 +Power_file_width = -1 ! (inches) negative means use same value as for window +Power_file_aspect_ratio = -1 ! negative means use same value as for window + +!------------------------------------------------------------------------------------ + +! mixing plot + +Mixing_xmin = 0.0 +Mixing_xmax = 1.6 ! -101d0 +Mixing_legend_txt_scale_factor = 1.4 ! relative to other text + +Mixing_show_rotation_details = .false. + +!Mixing_win_flag = .true. +!Mixing_file_flag = .true. +Mixing_file_dir = 'png' +Mixing_file_prefix = 'mixing_' +Mixing_file_interval = 1 ! output when `mod(model_number,Mixing_file_interval)==0` +Mixing_file_width = -1 ! (inches) negative means use same value as for window +Mixing_file_aspect_ratio = -1 ! negative means use same value as for window + +!----------------------------------------------------------------------- + +! TRho window + ! history of central temperature vs. density + + TRho_txt_scale = 0.7 + TRho_title = '' + + TRho_logT_min = -101d0 + TRho_logT_max = -101d0 + TRho_logRho_min = -101d0 + TRho_logRho_max = -101d0 + show_TRho_degeneracy_line = .true. + +!----------------------------------------------------------------------- + + !# HR window + ! history of `lg_L` vs. `lg_Teff` + + HR_win_flag = .true. + + HR_win_width = 6 + HR_win_aspect_ratio = 0.75 ! aspect_ratio = height/width + + HR_xleft = 0.15 + HR_xright = 0.85 + HR_ybot = 0.15 + HR_ytop = 0.85 + HR_txt_scale = 0.7 !1.0 + HR_title = '' + + ! axis limits -- to override system default selections + HR_logT_min = -101d0 ! only used if /= -101d0 + HR_logT_max = -101d0 ! only used if /= -101d0 + HR_logL_min = -101d0 ! only used if /= -101d0 + HR_logL_max = -101d0 ! only used if /= -101d0 + + HR_logL_margin = 0.1 + HR_logT_margin = 0.1 + HR_dlogT_min = -1 + HR_dlogL_min = -1 + + HR_step_min = -1 ! only plot models with model number >= this + HR_step_max = -1 ! only plot models with model number <= this + + show_HR_classical_instability_strip = .true. + show_HR_Mira_instability_region = .false. + show_HR_WD_instabilities = .false. + + show_HR_target_box = .false. + HR_target_n_sigma = -3 ! -n means show sig 1..n + HR_target_logL = 0 + HR_target_logL_sigma = 0 + HR_target_logT = 0 + HR_target_logT_sigma = 0 + + show_HR_annotation1 = .false. + show_HR_annotation2 = .false. + show_HR_annotation3 = .false. + + HR_fname = '' ! file name for extra HR data + + ! Enables calling a subroutine to add extra information to a plot + ! see `$MESA_DIR/star/other/pgstar_decorator.f90` + HR_use_decorator = .false. + + ! file output + HR_file_flag = .false. + HR_file_dir = 'png' + HR_file_prefix = 'hr_' + HR_file_interval = 5 ! output when `mod(model_number,HR_file_interval)==0` + HR_file_width = -1 ! (inches) negative means use same value as for window + HR_file_aspect_ratio = -1 ! negative means use same value as for window + +!----------------------------------------------------------------------- + + History_Panels1_title = '' + + History_Panels1_xaxis_name = 'model_number' + History_Panels1_max_width = -1 + + !History_Panels1_xaxis_name = 'star_age' + !History_Panels1_max_width = 10 + + History_Panels1_txt_scale = 0.75 + History_Panels1_xmin = -101d0 + History_Panels1_xmax = -101d0 + History_Panels1_dxmin = -1 + History_Panels1_xaxis_reversed = .false. + History_Panels1_xaxis_log = .false. + History_Panels1_xmargin = 0.0 + + ! :: + + History_Panels1_num_panels = 4 + + ! :: + + History_Panels1_yaxis_name(1) = 'log_L' + History_Panels1_yaxis_reversed(1) = .false. + History_Panels1_ymin(1) = -101d0 + History_Panels1_ymax(1) = -101d0 + History_Panels1_dymin(1) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(1) = 'log_Teff' + History_Panels1_other_yaxis_reversed(1) = .false. + History_Panels1_other_ymin(1) = -101d0 + History_Panels1_other_ymax(1) = -101d0 + History_Panels1_other_dymin(1) = 0.14 + + ! :: + + History_Panels1_yaxis_name(2) = 'lum_div_Ledd' + History_Panels1_yaxis_reversed(2) = .false. + History_Panels1_ymin(2) = -101d0 + History_Panels1_ymax(2) = -101d0 + History_Panels1_dymin(2) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(2) = 'log_max_T' ! 'v_surf_km_s' + History_Panels1_other_yaxis_reversed(2) = .false. + History_Panels1_other_ymin(2) = -101d0 + History_Panels1_other_ymax(2) = -101d0 + History_Panels1_other_dymin(2) = 0.14 + + ! :: + + History_Panels1_yaxis_name(3) = 'radius' + History_Panels1_yaxis_reversed(3) = .false. + History_Panels1_ymin(3) = -101d0 + History_Panels1_ymax(3) = -101d0 + History_Panels1_dymin(3) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(3) = 'log_cntr_Rho' + History_Panels1_other_yaxis_reversed(3) = .false. + History_Panels1_other_ymin(3) = -101d0 + History_Panels1_other_ymax(3) = -101d0 + History_Panels1_other_dymin(3) = 0.14 + ! :: + + History_Panels1_yaxis_name(4) = 'log_dt' + History_Panels1_yaxis_reversed(4) = .false. + History_Panels1_ymin(4) = -101d0 + History_Panels1_ymax(4) = -101d0 + History_Panels1_dymin(4) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(4) = '' + History_Panels1_other_yaxis_reversed(4) = .false. + History_Panels1_other_ymin(4) = -101d0 + History_Panels1_other_ymax(4) = -101d0 + History_Panels1_other_dymin(4) = 0.14 + +!----------------------------------------------------------------------- + +! some global grid plot settings + +pgstar_grid_show_title = .true. +pgstar_grid_title_scale = 1.0 +pgstar_grid_title_lw = 3 +pgstar_grid_title_disp = 2.5 ! 1.8 +pgstar_grid_title_coord = 0.5 +pgstar_grid_title_fjust = 0.5 + +pgstar_age_scale = 0.8 +pgstar_age_disp = 3.0 +pgstar_age_coord = 0.0 +pgstar_age_fjust = 0.0 + +pgstar_xaxis_label_scale = 1.3 +pgstar_left_yaxis_label_scale = 1.3 +pgstar_xaxis_label_disp = 2.2 +pgstar_left_yaxis_label_disp = 3.1 +pgstar_right_yaxis_label_disp = 4.1 + +pgstar_model_scale = 0.8 +pgstar_model_disp = 3.0 +pgstar_model_coord = 1.0 +pgstar_model_fjust = 1.0 + +! white_on_black flags -- true means white foreground color on black background +file_white_on_black_flag = .true. +file_device = 'png' ! options 'png' and 'vcps' for png and postscript respectively + +kipp_win_flag=.true. +kipp_file_flag=.true. +Kipp_mix_interval = 1 +Kipp_show_luminosities = .true. + +!Grid1_file_flag = .true. + +!pause_flag = .true. + +Profile_Panels3_xaxis_name = 'mass' +Profile_Panels3_xmin = 0 ! -101d0 +Profile_Panels3_xmax = 5 ! +Profile_Panels3_xaxis_reversed = .false. + +Profile_Panels3_yaxis_name(4) = 'gamma1' +Profile_Panels3_dymin(4) = 0.14 +Profile_Panels3_other_yaxis_name(4) = 'vel_km_per_s' +Profile_Panels3_dymin(4) = 0.14 + +TRho_Profile_xmin = -15 !3.0 +TRho_Profile_xmax = 10 +TRho_Profile_ymin = 3.35 !8.5 +TRho_Profile_ymax = 10.1 + +TRho_logT_min = 9.2d0 +TRho_logRho_min = 6d0 +TRho_logRho_max = 10d0 +TRho_logT_max = 10d0 + +Text_Summary1_name(1,2) = 'time_step_sec' +Text_Summary1_name(2,2) = 'star_age_sec' + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/profile_columns.list b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/profile_columns.list new file mode 100644 index 000000000..f05af0c37 --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/profile_columns.list @@ -0,0 +1,962 @@ +! profile_columns.list -- determines the contents of star model profiles +! you can use a non-standard version by setting profile_columns_file in your inlist + +! units are cgs unless otherwise noted. + +! reorder the following names as desired to reorder columns. +! comment out the name to omit a column (fewer columns => less IO => faster running). +! remove '!' to restore a column. + +! if you have a situation where you want a non-standard set of columns, +! make a copy of this file, edit as desired, and give the new filename in your inlist +! as profile_columns_file. if you are just adding columns, you can 'include' this file, +! and just list the additions in your file. note: to include the standard default +! version, use include '' -- the 0 length string means include the default file. + +! if you need to have something added to the list of options, let me know.... + +! the first few lines of the profile contain general info about the model. +! for completeness, those items are described at the end of this file. + + +! note: you can include another list by doing +! include 'filename' +! include '' means include the default standard list file + + +! the following lines of the profile contain info for 1 zone per row, surface to center. + +! minimal set of enabled columns: + + zone ! numbers start with 1 at the surface + mass ! m/Msun. mass coordinate of outer boundary of cell. + logR ! log10(radius/Rsun) at outer boundary of zone + logT ! log10(temperature) at center of zone + logRho ! log10(density) at center of zone + logP ! log10(pressure) at center of zone + x_mass_fraction_H + y_mass_fraction_He + z_mass_fraction_metals + + +! everything below this line is deactivated + + +!# Structure + !logM ! log10(m/Msun) + !log_mass + dm ! cell mass (grams) + !dm_bar ! boundary mass (grams) average of adjacent dm's + logdq ! log10(dq) + !log_dq + dq_ratio ! dq(k-1)/dq(k) + q ! fraction of star mass interior to outer boundary of this zone + !log_q ! log10(q) + !xq + + !grav ! gravitational acceleration (cm sec^2) + !log_g ! log10 gravitational acceleration (cm sec^2) + !g_div_r ! grav/radius (sec^2) + !r_div_g ! radius/grav (sec^-2) + !cgrav_factor ! = cgrav(k)/standard_cgrav + vel_km_per_s ! velocity at outer boundary of zone (km/s) -- 0 if no velocity variable + + radius ! radius at outer boundary of zone (in Rsun units) + radius_cm ! radius at outer boundary of zone (in centimeters) + !radius_km ! radius at outer boundary of zone (in kilometers) + logR_cm ! log10 radius at outer boundary of zone (in centimeters) + rmid ! radius at center by mass of zone (in Rsun units) + !r_div_R ! fraction of total radius + + velocity ! velocity at outer boundary of zone (cm/s) -- 0 if no velocity variable + v_div_r ! velocity divided by radius + !v_times_t_div_r + !rho_times_r3 ! at face + !log_rho_times_r3 ! at face + !scale_height ! in Rsun units + pressure_scale_height ! in Rsun units + + !m_div_r ! gm/cm + !dmbar_m_div_r + !log_dmbar_m_div_r + !mass_grams ! mass coordinate of outer boundary of cell in grams + mmid ! mass at midpoint of cell (average of mass coords of the cell boundaries) Msun units. + + !m_grav ! total enclosed gravitational mass. Msun units. + !m_grav_div_m_baryonic ! mass_gravitational/mass at cell boundary + !mass_correction_factor ! dm_gravitational/dm (dm is baryonic mass of cell) + + !xm ! mass exterior to point (Msun units) + !dq ! mass of zone as a fraction of total star mass + logxq ! log10(1-q) + !logxm ! log10(xm) + + !xr ! radial distance from point to surface (Rsun) + !xr_cm ! radial distance from point to surface (cm) + !xr_div_R ! radial distance from point to surface in units of star radius + !log_xr ! log10 radial distance from point to surface (Rsun) + !log_xr_cm ! log10 radial distance from point to surface (cm) + !log_xr_div_R ! log10 radial distance from point to surface in units of star radius + + dr ! r(outer edge) - r(inner edge); radial extent of cell in cm. + log_dr ! log10 cell width (cm) + !dv ! v(inner edge) - v(outer edge); rate at which delta_r is shrinking (cm/sec). + + !dt_dv_div_dr ! dt*dv/dr; need to have this << 1 for every cell + !dr_div_R ! cell width divided by star R + !log_dr_div_R ! log10 cell width divided by star R + !dr_div_rmid ! cell width divided by rmid + !log_dr_div_rmid ! log(dr_div_rmid) + + dr_div_cs ! cell sound crossing time (sec) + log_dr_div_cs ! log10 cell sound crossing time (sec) + !dr_div_cs_yr ! cell sound crossing time (years) + !log_dr_div_cs_yr ! log10 cell sound crossing time (years) + + !acoustic_radius ! sound time from center to outer cell boundary (sec) + !log_acoustic_radius ! log10(acoustic_radius) (sec) + acoustic_depth ! sound time from surface to outer cell boundary (sec) + !log_acoustic_depth ! log10(acoustic_depth) (sec) + !acoustic_r_div_R_phot + + !cell_collapse_time ! only set if doing explicit hydro + ! time (seconds) for cell inner edge to catch cell outer edge at current velocities + ! 0 if distance between inner and outer is increasing + log_cell_collapse_time ! log of cell_collapse_time + + !compression_gradient + + + +!# Thermodynamics + temperature ! temperature at center of zone + !logT_face ! log10(temperature) at outer boundary of zone + !logT_bb ! log10(black body temperature) at outer boundary of zone + !logT_face_div_logT_bb + + energy ! internal energy (ergs/g) + logE ! log10(specific internal energy) at center of zone + rho ! density + !density ! rho + + entropy ! specific entropy divided by (avo*kerg) + !logS ! log10(specific entropy) + !logS_per_baryon ! log10(specific entropy per baryon / kerg) + + pressure ! total pressure at center of zone (pgas + prad) + !prad ! radiation pressure at center of zone + !pgas ! gas pressure at center of zone (electrons and ions) + logPgas ! log10(pgas) + pgas_div_ptotal ! pgas/pressure + + eta ! electron degeneracy parameter (eta >> 1 for significant degeneracy) + mu ! mean molecular weight per gas particle (ions + free electrons) + + grada ! dlnT_dlnP at constant S + !dE_dRho ! at constant T + !cv ! specific heat at constant volume + !cp ! specific heat at constant total pressure + + !log_CpT + gamma1 ! dlnP_dlnRho at constant S + !gamma3 ! gamma3 - 1 = dlnT_dlnRho at constant S + !gam ! plasma interaction parameter (> 160 or so means starting crystallization) + free_e ! free_e is mean number of free electrons per nucleon + !logfree_e ! log10(free_e), free_e is mean number of free electrons per nucleon + !chiRho ! dlnP_dlnRho at constant T + !chiT ! dlnP_dlnT at constant Rho + + csound ! sound speed + log_csound + !csound_face ! sound speed (was previously called csound_at_face) + !cs_at_cell_bdy ! sound speed at cell boundary (csound is at cell center) + !v_div_cs ! velocity divided by sound speed + v_div_csound ! velocity divided by sound speed + !div_v + + !thermal_time_to_surface ! in seconds + !log_thermal_time_to_surface + !t_rad + !log_t_rad + !log_t_sound + !log_t_thermal + + !eos_phase + !eos_frac_OPAL_SCVH + !eos_frac_HELM + !eos_frac_Skye + !eos_frac_PC + !eos_frac_FreeEOS + !eos_frac_CMS + !eos_frac_ideal + + !pgas_div_p + !prad_div_pgas + !prad_div_pgas_div_L_div_Ledd + !pressure_scale_height_cm + + !eps_grav_composition_term + !eps_grav_plus_eps_mdot + + !chiRho_for_partials + !chiT_for_partials + !rel_diff_chiRho_for_partials + !rel_diff_chiT_for_partials + + !latent_ddlnRho + !latent_ddlnT + + !log_P_face + !log_Ptrb + !log_cp_T_div_t_sound + + !QQ + + +!# Mass accretion + eps_grav ! -T*ds/dt (negative for expansion) + !log_abs_eps_grav_dm_div_L + !log_abs_v ! log10(abs(velocity)) (cm/s) + !log_mdot_cs + !log_mdot_v + !eps_mdot + !env_eps_grav + !xm_div_delta_m + !log_xm_div_delta_m + + +!# Nuclear energy generation + !signed_log_eps_grav ! sign(eps_grav)*log10(max(1,abs(eps_grav))) + !signed_log_eps_nuc + !net_nuclear_energy ! erg/gm/s from nuclear reactions minus all neutrino losses + ! The value plotted is net_nuclear_energy = sign(val)*log10(max(1,abs(val))) + ! where val = net nuclear energy minus all neutrino losses. + !net_energy ! net_energy + eps_grav. + ! The value plotted is net_energy = sign(val)*log10(max(1,abs(val))) + ! where val = net nuclear energy plus eps_grav minus all neutrino losses. + !eps_nuc_plus_nuc_neu + !eps_nuc_minus_non_nuc_neu + !eps_nuc_start + + eps_nuc ! ergs/g/sec from nuclear reactions (including losses to reaction neutrinos) + !log_abs_eps_nuc + !d_lnepsnuc_dlnd + !d_epsnuc_dlnd + !deps_dlnd_face + ! (was previously called deps_dlnd_at_face) + !d_lnepsnuc_dlnT + !d_epsnuc_dlnT + !deps_dlnT_face + ! (was previously called deps_dlnT_at_face) + !eps_nuc_neu_total ! erg/gm/sec as neutrinos from nuclear reactions + + non_nuc_neu ! non-nuclear-reaction neutrino losses + !nonnucneu_plas ! plasmon neutrinos (for collective reactions like gamma_plasmon => nu_e + nubar_e) + !nonnucneu_brem ! bremsstrahlung (for reactions like e- + (z,a) => e- + (z,a) + nu + nubar) + !nonnucneu_phot ! photon neutrinos (for reactions like e- + gamma => e- + nu_e + nubar_e) + !nonnucneu_pair ! pair production (for reactions like e+ + e- => nu_e + nubar_e) + !nonnucneu_reco ! recombination neutrinos (for reactions like e- (continuum) => e- (bound) + nu_e + nubar_e) + + ! ergs/g/sec for reaction categories + add_reaction_categories ! this adds all the reaction categories + ! NOTE: you can list specific categories by giving their names (from chem_def) + pp + cno + tri_alpha + !c_alpha + !n_alpha + !o_alpha + !ne_alpha + !na_alpha + !mg_alpha + !si_alpha + !s_alpha + !ar_alpha + !ca_alpha + !ti_alpha + !fe_co_ni + !c12_c12 + !c12_o16 + !o16_o16 + !photo + !pnhe4 + !other + + ! adds columns for all of the reactions that are in the current net + ! Note that if using op_split_burn=.true. then zones which have been split will report 0 for their rates + !add_raw_rates ! raw reaction rates, reactions/second + !add_screened_rates ! screened reaction rates reactions/second + !add_eps_nuc_rates ! Nuclear energy (minus neutrino losses) released erg/s + !add_eps_neu_rates ! Neutrino losses erg/s + + ! individual reactions (as many as desired) + ! use list_net_reactions = .true. in star_job to list all reactions in the current net + ! reactions/second + !raw_rate r_h1_h1_ec_h2 + !raw_rate r_h1_h1_wk_h2 + + burn_num_iters ! Number of split_burn iterations taken + !burn_avg_epsnuc + !log_burn_avg_epsnuc + +!# Composition + !x_mass_fraction_H + !y_mass_fraction_He + !z_mass_fraction_metals + abar ! average atomic weight (g/mole) + zbar ! average charge + z2bar ! average charge^2 + ye ! average charge per baryon = proton fraction + + x ! hydrogen mass fraction + !log_x + y ! helium mass fraction + !log_y + z ! metallicity + log_z ! metallicity + + add_abundances ! this adds all of the isos that are in the current net + ! NOTE: you can list specific isotopes by giving their names (from chem_def) + !h1 + !he3 + !he4 + !c12 + !n14 + !o16 + + add_log_abundances ! this adds log10 of all of the isos that are in the current net + ! NOTE: you can list specific isotopes by giving their names (from chem_def) + !log h1 + !log he3 + !log he4 + !log c12 + !log n14 + !log o16 + + ! log concentration of species + ! concentration = number density / number density of electrons + ! Ci = (Xi/Ai) / sum(Zi*Xi/Ai) [see Thoul et al, ApJ 421:828-842, 1994] + !log_concentration h1 + !log_concentration he4 + + + ! typical charge for given species + ! (used by diffusion) + !typical_charge he4 + !typical_charge c12 + !typical_charge fe52 + + ! ionization state for given species + ! (same as typical charge, except that it's unsmoothed) + !ionization he4 + !ionization c12 + !ionization fe52 + + !cno_div_z ! abundance of c12, n14, and o16 as a fraction of total z + + + + +!# Opacity + opacity ! opacity measured at center of zone + log_opacity ! log10(opacity) + !dkap_dlnrho_face ! partial derivative of opacity wrt. ln rho (at T=const) at outer edge of cell + ! (was previously called dkap_dlnrho_at_face) + !dkap_dlnT_face ! partial derivative of opacity wrt. ln T (at rho=const) at outer edge of cell + ! (was previously called dkap_dlnT_at_face) + !kap_frac_lowT ! fraction of opacity from lowT tables + !kap_frac_highT ! fraction of opacity from highT tables + !kap_frac_Type2 ! fraction of opacity from Type2 tables + !kap_frac_Compton ! fraction of opacity from Compton_Opacity + !kap_frac_op_mono ! fraction of opacity from OP mono + + !log_kap + log_kap_times_factor + + !log_c_div_tau + !xtau + !xlogtau + !logtau_sub_xlogtau + +!# Luminosity + luminosity ! luminosity at outer boundary of zone (in Lsun units) + logL ! log10(max(1d-2,L/Lsun)) + !log_Lrad + !log_Ledd ! log10(Leddington/Lsun) -- local Ledd, 4 pi clight G m / kap + log_L_div_Ledd ! log10(max(1d-12,L/Leddington)) + !log_Lrad_div_Ledd + !log_Lrad_div_L + !signed_log_power ! sign(L)*log10(max(1,abs(L))) + + lum_adv + lum_conv + !lum_conv_MLT + !lum_div_Ledd + lum_erg_s + lum_plus_lum_adv + lum_rad + + !log_L_div_CpTMdot + log_abs_lum_erg_s + + !L + !Lc + !Lc_div_L + !Lr + !Lr_div_L + !Lt + !Lt_div_L + +!# Energetics + total_energy ! specific total energy of cell (ergs/g). internal+potential+kinetic+rotation. + !cell_specific_IE + !cell_specific_KE + !cell_IE_div_IE_plus_KE + !cell_KE_div_IE_plus_KE + + !cell_ie_div_star_ie + !cell_internal_energy_fraction + !cell_internal_energy_fraction_start + !cell_specific_PE + + !log_cell_ie_div_star_ie + !log_cell_specific_IE + + !ergs_eps_grav_plus_eps_mdot + !ergs_error + !ergs_error_integral + !ergs_mdot + !ergs_rel_error_integral + !dm_eps_grav + + !dE + + !etrb + !log_etrb + !extra_grav + !log_rel_E_err + + !total_energy_sign + +!# Convection + mlt_mixing_length ! mixing length for mlt (cm) + !mlt_mixing_type ! value returned by mlt + !mlt_Pturb + !alpha_mlt + + conv_vel ! convection velocity (cm/sec) + log_conv_vel ! log10 convection velocity (cm/sec) + + conv_L_div_L + log_conv_L_div_L + !lum_conv_div_lum_rad + !lum_rad_div_L_Edd + !lum_conv_div_lum_Edd + !lum_conv_div_L + !lum_rad_div_L + !lum_rad_div_L_Edd_sub_fourPrad_div_PchiT ! density increases outward if this is > 0 + ! see Joss, Salpeter, and Ostriker, "Critical Luminosity", ApJ 181:429-438, 1973. + + gradT ! mlt value for required temperature gradient dlnT/dlnP + + gradr ! dlnT/dlnP required for purely radiative transport + !grad_temperature ! smoothed dlnT/dlnP at cell boundary + !grad_density ! smoothed dlnRho/dlnP at cell boundary + + !gradL ! gradient for Ledoux criterion for convection + !sch_stable ! 1 if grada > gradr, 0 otherwise + !ledoux_stable ! 1 if gradL > gradr, 0 otherwise + + !grada_sub_gradT + gradT_sub_grada ! gradT-grada at cell boundary + !gradT_div_grada ! gradT/grada at cell boundary + + !gradr_sub_gradT + !gradT_sub_gradr ! gradT-gradr at cell boundary + !gradT_div_gradr ! gradT/gradr at cell boundary + + !log_gradT_div_gradr ! log10 gradT/gradr at cell boundary + !log_mlt_Gamma ! convective efficiency + conv_vel_div_csound ! convection velocity divided by sound speed + !conv_vel_div_L_vel ! L_vel is velocity needed to carry L by convection; L = 4*pi*r^2*rho*vel**3 + log_mlt_D_mix ! log10 diffusion coefficient for mixing from mlt (cm^2/sec) + + !gradr_div_grada ! gradr/grada_face; > 1 => Schwarzschild unstable for convection + !gradr_sub_grada ! gradr - grada_face; > 0 => Schwarzschild unstable for convection + + !gradL_sub_gradr + !gradP_div_rho + !gradT_excess_effect + !gradT_rel_err + !gradT_sub_a + !grada_face + !grada_sub_gradr + !diff_grads + !log_diff_grads + + !mlt_D + !mlt_Gamma + !mlt_Y_face + !mlt_Zeta + !mlt_gradT + !mlt_log_abs_Y + !mlt_vc + !log_mlt_vc + !dvc_dt_TDC_div_g + + !superad_reduction_factor + !conv_vel_div_mlt_vc + + !log_Lconv + !log_Lconv_div_L + +!# Mixing + !mixing_type ! mixing types are defined in mesa/const/public/const_def + log_D_mix ! log10 diffusion coefficient for mixing in units of cm^2/second (Eulerian) + !log_D_mix_non_rotation + !log_D_mix_rotation + + log_D_conv ! D_mix for regions where mix_type = convective_mixing + !log_D_leftover ! D_mix for regions where mix_type = leftover_convective_mixing + log_D_semi ! D_mix for regions where mix_type = semiconvective_mixing + log_D_ovr ! D_mix for regions where mix_type = overshoot_mixing + log_D_thrm ! D_mix for regions where mix_type = thermohaline_mixing + log_D_minimum ! D_mix for regions where mix_type = minimum_mixing + log_D_rayleigh_taylor ! D_mix for regions where mix_type = rayleigh_taylor_mixing + !log_D_anon ! D_mix for regions where mix_type = anonymous_mixing + log_D_omega + + log_sig_mix ! sig(k) is mixing flow across face k in (gm sec^1) + ! sig(k) = D_mix*(4*pi*r(k)**2*rho_face)**2/dmavg + + !dominant_isoA_for_thermohaline + !dominant_isoZ_for_thermohaline + !gradL_composition_term + + mix_type + + + +!# Optical Depth + tau ! optical depth + !log_column_depth ! log10 column depth, exterior mass / area (g cm^-2) + !log_radial_depth ! log10 radial distance to surface (cm) + logtau ! log10(optical depth) at cell face + !tau_eff ! tau that gives the local P == P_atm if this location at surface + ! tau_eff = kap*(P/g - Pextra_factor*(L/M)/(6*pi*clight*cgrav)) + !tau_eff_div_tau + + + +!# Rotation + omega ! angular velocity = j_rot/i_rot + log_omega + log_j_rot + log_J_div_M53 ! J is j*1e-15 integrated from center; M53 is m^(5/3) + log_J_inside ! J_inside is j_rot integrated from center + !shear ! -dlnomega/dlnR + log_abs_shear ! log10(abs(dlnomega/dlnR)) + !richardson_number + i_rot ! specific moment of inertia at cell boundary + j_rot ! specific angular momentum at cell boundary + v_rot ! rotation velocity at cell boundary (km/sec) + !w_div_w_crit_roche !ratio of rotational velocity to keplerian at the equator + !without the contribution from the Eddington factor + fp_rot ! rotation factor for pressure + ft_rot ! rotation factor for temperature + !ft_rot_div_fp_rot ! gradr factor + + !log_am_nu_non_rot ! log10(am_nu_non_rot) + !log_am_nu_rot ! log10(am_nu_rot) + log_am_nu ! log10(am_nu_non_rot + am_nu_rot) + + r_polar ! (Rsun) + log_r_polar ! log10 (Rsun) + r_equatorial ! (Rsun) + log_r_equatorial ! log10 (Rsun) + r_e_div_r_p ! equatorial/r_polar + omega_crit ! breakup angular velocity = sqrt(G M / equatorial^3) + omega_div_omega_crit + + !am_log_nu_omega ! for diffusion of omega + !am_log_nu_j ! for diffusion of angular momentum + + !am_log_nu_rot ! diffusion of angular momentum driven by rotation + !am_log_nu_non_rot ! diffusion driven by other sources, e.g. convection + + !am_log_sig_omega ! for diffusion of omega + !am_log_sig_j ! for diffusion of angular momentum + am_log_sig ! == am_log_sig_omega + + !am_log_D_visc ! diffusion coeff for kinematic viscosity + am_log_D_DSI ! diffusion coeff for dynamical shear instability + am_log_D_SH ! diffusion coeff for Solberg-Hoiland instability + am_log_D_SSI ! diffusion coeff for secular shear instability + am_log_D_ES ! diffusion coeff for Eddington-Sweet circulation + am_log_D_GSF ! diffusion coeff for Goldreich-Schubert-Fricke instability + am_log_D_ST ! Spruit dynamo mixing diffusivity + am_log_nu_ST ! Spruit dynamo effective viscosity + + dynamo_log_B_r ! (Gauss) + dynamo_log_B_phi ! (Gauss) + + !am_domega_dlnR + !log_abs_dlnR_domega + + !w_div_w_crit_roche2 + + +!# Diffusion + ! electric field from element diffusion calculation + !e_field + !log_e_field + + ! gravitational field from element diffusion calculation + !g_field_element_diffusion + !log_g_field_element_diffusion + + !eE_div_mg_element_diffusion + !log_eE_div_mg_element_diffusion + + ! element diffusion velocity for species + !edv h1 + !edv he4 + !edv o16 + + ! Energy generated by Ne22 sedimentation. + !eps_WD_sedimentation + !log_eps_WD_sedimentation + + !eps_diffusion + !log_eps_diffusion + + !diffusion_D h1 ! self diffusion coeff + !diffusion_dX h1 ! change in h1 mass fraction from diffusion + !diffusion_dX he4 ! change in he4 mass fraction from diffusion + !diffusion_dX n20 ! change in n20 mass fraction from diffusion + + !v_rad h1 ! velocity from radiative levitation + !v_rad he4 ! velocity from radiative levitation + !v_rad ne20 ! velocity from radiative levitation + + !log_g_rad h1 ! log10 acceleration from radiative levitation + !log_g_rad he4 ! log10 acceleration from radiative levitation + !log_g_rad ne20 ! log10 acceleration from radiative levitation + +!# Phase Separation + !eps_phase_separation + +!# Oscillations + !brunt_N2 ! brunt-vaisala frequency squared + !brunt_N2_structure_term + !brunt_N2_composition_term + !log_brunt_N2_structure_term + !log_brunt_N2_composition_term + !brunt_A ! = N^2*r/g + !brunt_A_div_x2 ! x = r(k)/r(1) + !brunt_N2_dimensionless ! N2 in units of 3GM/R^3 + !brunt_N_dimensionless ! N in units of sqrt(3GM/R^3) + !brunt_frequency ! cycles per day + !brunt_N ! sqrt(abs(brunt_N2)) + !log_brunt_N ! log10(brunt_N) + !log_brunt_N2 ! log10(brunt_N2) + !log_brunt_N2_dimensionless ! log10(brunt_N2_dimensionless) + + !brunt_B ! smoothed numerical difference + !brunt_nonB ! = grada - gradT + !log_brunt_B ! smoothed numerical difference + !log_brunt_nonB ! = grada - gradT + + !sign_brunt_N2 ! sign of brunt_N2 (+1 for Ledoux stable; -1 for Ledoux unstable) + !brunt_nu ! brunt_frequency in microHz + !log_brunt_nu ! brunt_frequency in microHz + + !lamb_S ! lamb frequency for l=1: S = sqrt(2)*csound/r (rad/s) + !lamb_S2 ! squared lamb frequency for l=1: S2 = 2*(csound/r)^2 (rad^2/s^2) + + !lamb_Sl1 ! lamb frequency for l=1; = sqrt(2)*csound/r (microHz) + !lamb_Sl2 ! lamb frequency for l=2; = sqrt(6)*csound/r (microHz) + !lamb_Sl3 ! lamb frequency for l=3; = sqrt(12)*csound/r (microHz) + !lamb_Sl10 ! lamb frequency for l=10; = sqrt(110)*csound/r (microHz) + + !log_lamb_Sl1 ! log10(lamb_Sl1) + !log_lamb_Sl2 ! log10(lamb_Sl2) + !log_lamb_Sl3 ! log10(lamb_Sl3) + !log_lamb_Sl10 ! log10(lamb_Sl10) + + !brunt_N_div_r_integral ! integral from center of N*dr/r + !k_r_integral ! integral from center of k_r*dr + !brunt_N2_sub_omega2 + !sl2_sub_omega2 + + +!# RSP + + !rsp_Chi ! dlnP_dlnRho + !rsp_Et ! Specific turbulent energy + !rsp_logEt ! Log specific turbulent energy + !rsp_erad ! Specific internal (radiative) energy + !rsp_log_erad ! Log specific internal (radiative) energy + !rsp_Hp_face ! Pressure scale height at cell face + !rsp_Lc ! Convective luminosity + !rsp_Lc_div_L ! Convective luminosity div total luminosity + !rsp_Lr ! Radiative luminosity + !rsp_Lr_div_L ! Radiative luminosity div total luminosity + !rsp_Lt ! Turbulent luminosity + !rsp_Lt_div_L ! Turbulent luminosity div total luminosity + !rsp_Pt ! Turbulent pressure, p_t, see Table 1 in MESA5 + !rsp_Uq ! Viscous momentum transfer rate, U_q, see Table 1 in MESA5 + !rsp_Eq ! Viscous energy transfer rate, epsilon_q, see Table 1 in MESA5 + !rsp_Pvsc ! Artificial viscosity, p_av, see Table 1 in MESA5 + !rsp_gradT ! Temperature gradient + !rsp_Y_face ! Superadiabatic gradient at cell face, Y_sag, see Table 1 in MESA5 + !rsp_damp ! Turbulent dissipation, D, see Table 1 in MESA5 + !rsp_dampR ! Radiative cooling, D_r, see Table 1 in MESA5 + !rsp_sink ! Sum of turbulent dissipation and radiative cooling terms + !rsp_src ! Source function, S, see Table 1 in MESA5 + !rsp_src_snk ! Convective coupling, C, see Table 1 in MESA5 + !rsp_heat_exchange_timescale ! 1d0/(clight * opacity * density) + !rsp_log_heat_exchange_timescale + !rsp_log_dt_div_heat_exchange_timescale ! Ratio of time step to heat exchange timescale + !w + !log_w + + !COUPL + !DAMP + !DAMPR + !SOURCE + !Chi + !Eq + !Hp_face + !PII_face + !Ptrb + !Pvsc + !Uq + !Y_face + +!# RTI + + RTI_du_diffusion_kick + alpha_RTI + boost_for_eta_RTI + dedt_RTI + dudt_RTI + eta_RTI + log_alpha_RTI + !log_boost_for_eta_RTI + log_eta_RTI + !log_etamid_RTI + log_lambda_RTI_div_Hrho + log_sig_RTI + !log_sigmid_RTI + !log_source_RTI + log_source_minus_alpha_RTI + log_source_plus_alpha_RTI + !source_minus_alpha_RTI + !source_plus_alpha_RTI + lambda_RTI + +!# Hydrodynamics + + + !v + v_div_v_escape + !v_div_vesc + !v_kms + !log_v_escape + + u + u_face + + P_face + + +!# Extras + extra_heat + !extra_L ! extra_heat integrated from center (Lsun) + !log_extra_L ! log10 integrated from center (Lsun) + !log_irradiation_heat + + !extra_jdot ! set in other_torque routine + !extra_omegadot ! set in other_torque routine + + extra_opacity_factor ! set in other_opacity_factor routine + + ! diffusion factor profile for species, set in other_diffusion_factor routine + !extra_diffusion_factor h1 + !extra_diffusion_factor he4 + !extra_diffusion_factor o16 + + + +!# Miscellaneous + + !dlog_h1_dlogP ! (log(h1(k)) - log(h1(k-1)))/(log(P(k)) - log(P(k-1))) + !dlog_he3_dlogP + !dlog_he4_dlogP + !dlog_c12_dlogP + !dlog_c13_dlogP + !dlog_n14_dlogP + !dlog_o16_dlogP + !dlog_ne20_dlogP + !dlog_mg24_dlogP + !dlog_si28_dlogP + + !dlog_pp_dlogP + !dlog_cno_dlogP + !dlog_3alf_dlogP + + !dlog_burn_c_dlogP + !dlog_burn_n_dlogP + !dlog_burn_o_dlogP + + !dlog_burn_ne_dlogP + !dlog_burn_na_dlogP + !dlog_burn_mg_dlogP + + !dlog_cc_dlogP + !dlog_co_dlogP + !dlog_oo_dlogP + + !dlog_burn_si_dlogP + !dlog_burn_s_dlogP + !dlog_burn_ar_dlogP + !dlog_burn_ca_dlogP + !dlog_burn_ti_dlogP + !dlog_burn_cr_dlogP + !dlog_burn_fe_dlogP + + !dlog_pnhe4_dlogP + !dlog_photo_dlogP + !dlog_other_dlogP + + !logR_kap ! logR = logRho - 3*logT + 18 ; used in kap tables + !logW ! logW = logPgas - 4*logT + !logQ ! logQ = logRho - 2*logT + 12 + !logV ! logV = logRho - 0.7*logE + 20 + + !log_CpT_absMdot_div_L ! log10(s% Cp(k)*s% T(k)*abs(s% mstar_dot)/s% L(k)) + + !delta_r ! r - r_start, change during step + !delta_L ! L - L_start, change during step + !delta_cell_vol ! cell_vol - cell_vol_start, change during step + !delta_entropy ! entropy - entropy_start, change during step (does not include effects of diffusion) + !delta_T ! T - T_start, change during step + !delta_rho ! rho - rho_start, change during step + !delta_eps_nuc ! eps_nuc - eps_nuc_start, change during step + !delta_mu ! mu - mu_start, change during step + + zFe ! mass fraction of "Fe" = Fe+Co+Ni + !log_zFe + dPdr_dRhodr_info + !log_sig_raw_mix + + !d_u_div_rmid + !d_u_div_rmid_start + !d_v_div_r_dm + !d_v_div_r_dr + + !dlnP_dlnR + !dlnRho_dlnR + !dlnRho_dr + !dlnX_dr + !dlnY_dr + dlogR + !dPdr_div_grav + dPdr_info + dRhodr_info + !dRstar_div_dr + !dr_ratio + !dm_eps_grav + !dr_ratio + !dt_cs_div_dr + !dt_div_tau_conv + !dt_times_conv_vel_div_mixing_length + !log_dt_cs_div_dr + !log_dt_div_tau_conv + !log_dt_times_conv_vel_div_mixing_length + log_du_kick_div_du + !du + !dvdt_dPdm + !dvdt_grav + + !tau_conv + !tau_cool + !tau_epsnuc + !tau_qhse + + !max_abs_xa_corr + + !tdc_num_iters + + !k + + +! the first few lines of the profile contain general info about the model. +! for completeness, those items are described here. + + ! initial mass and Z + ! initial_mass + ! initial_z + ! general properties of the current state + ! model_number + ! num_zones + ! star_age + ! time_step + ! properties at the photosphere + ! Teff + ! photosphere_L + ! photosphere_r + ! properties at the outermost zone of the model + ! log_surface_L + ! log_surface_radius + ! log_surface_temp + ! properties near the center of the model + ! log_center_temp + ! log_center_density + ! log_center_P + ! center_eta + ! abundances near the center + ! center_h1 + ! center_he3 + ! center_he4 + ! center_c12 + ! center_n14 + ! center_o16 + ! center_ne20 + ! information about total mass + ! star_mass + ! star_mdot + ! star_mass_h1 + ! star_mass_he3 + ! star_mass_he4 + ! star_mass_c12 + ! star_mass_n14 + ! star_mass_o16 + ! star_mass_ne20 + ! locations of abundance transitions + ! he_core_mass + ! c_core_mass + ! o_core_mass + ! si_core_mass + ! fe_core_mass + ! location of optical depths 10 and 100 + ! tau10_mass + ! tau10_radius + ! tau100_mass + ! tau100_radius + ! time scales + ! dynamic_time + ! kh_timescale + ! nuc_timescale + ! various kinds of total power + ! power_nuc_burn + ! power_h_burn + ! power_he_burn + ! power_neu + ! a few control parameter values + ! h1_boundary_limit + ! he4_boundary_limit + ! c12_boundary_limit + ! burn_min1 + ! burn_min2 diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/re b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/re new file mode 100755 index 000000000..7093783a3 --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/re @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +shopt -u expand_aliases + +photo_directory=photos + +function most_recent_photo { + ls -tp "$photo_directory" | grep -v / | head -1 +} + +if [ $# -eq 0 ] +then + photo=$(most_recent_photo) +else + photo=$1 +fi + +if [ -z "$photo" ] || ! [ -f "$photo_directory/$photo" ] +then + echo "specified photo ($photo) does not exist" + exit 1 +fi + +echo "restart from $photo" +if ! cp "$photo_directory/$photo" restart_photo +then + echo "failed to copy photo ($photo)" + exit 1 +fi + +make run diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/rn b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/rn new file mode 100755 index 000000000..68233efd1 --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/rn @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" + +make run + +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" + +echo 'finished' diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/rn1 b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/rn1 new file mode 100755 index 000000000..f4ce7695f --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/rn1 @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +rm -f restart_photo + +make run diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/src/run.f90 b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/src/run.f90 new file mode 100644 index 000000000..76d423f1a --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/src/run.f90 @@ -0,0 +1,15 @@ +program run + use run_star_support, only: do_read_star_job + use run_star, only: do_run_star + + implicit none + + integer :: ierr + + ierr = 0 + call do_read_star_job('inlist', ierr) + if (ierr /= 0) stop 1 + + call do_run_star + +end program run diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/src/run_star_extras.f90 b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/src/run_star_extras.f90 new file mode 100644 index 000000000..a745a5e67 --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/src/run_star_extras.f90 @@ -0,0 +1,231 @@ +! *********************************************************************** +! +! Copyright (C) 2010 The MESA Team +! +! This program is free software: you can redistribute it and/or modify +! it under the terms of the GNU Lesser General Public License +! as published by the Free Software Foundation, +! either version 3 of the License, or (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +! See the GNU Lesser General Public License for more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with this program. If not, see . +! +! *********************************************************************** + + module run_star_extras + + use star_lib + use star_def + use const_def + use math_lib + use auto_diff + + implicit none + + include "test_suite_extras_def.inc" + +! here are the x controls used below + +!alpha_mlt_routine + !alpha_H = s% x_ctrl(21) + !alpha_other = s% x_ctrl(22) + !H_limit = s% x_ctrl(23) + +! Example of one extra value to preserve across photo restarts. +! real(dp) :: example_photo_value + + contains + + include "test_suite_extras.inc" + + + subroutine extras_controls(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + s% extras_startup => extras_startup + s% extras_check_model => extras_check_model + s% extras_finish_step => extras_finish_step + s% extras_after_evolve => extras_after_evolve + s% how_many_extra_history_columns => how_many_extra_history_columns + s% data_for_extra_history_columns => data_for_extra_history_columns + s% how_many_extra_profile_columns => how_many_extra_profile_columns + s% data_for_extra_profile_columns => data_for_extra_profile_columns + s% other_photo_read => extras_photo_read + s% other_photo_write => extras_photo_write + s% other_alpha_mlt => alpha_mlt_routine + end subroutine extras_controls + + + subroutine extras_photo_read(id, iounit, ierr) + integer, intent(in) :: id, iounit + integer, intent(out) :: ierr + ierr = 0 + !read(iounit, iostat=ierr) example_photo_value + end subroutine extras_photo_read + + + subroutine extras_photo_write(id, iounit) + integer, intent(in) :: id, iounit + !write(iounit) example_photo_value + end subroutine extras_photo_write + + + subroutine alpha_mlt_routine(id, ierr) + use chem_def, only: ih1 + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + integer :: k, h1 + real(dp) :: alpha_H, alpha_other, H_limit + include 'formats' + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + alpha_H = s% x_ctrl(21) + alpha_other = s% x_ctrl(22) + H_limit = s% x_ctrl(23) + h1 = s% net_iso(ih1) + !write(*,1) 'alpha_H', alpha_H + !write(*,1) 'alpha_other', alpha_other + !write(*,1) 'H_limit', H_limit + !write(*,2) 'h1', h1 + !write(*,2) 's% nz', s% nz + if (alpha_H <= 0 .or. alpha_other <= 0 .or. h1 <= 0) return + do k=1,s% nz + if (s% xa(h1,k) >= H_limit) then + s% alpha_mlt(k) = alpha_H + else + s% alpha_mlt(k) = alpha_other + end if + !write(*,2) 'alpha_mlt', k, s% alpha_mlt(k), + end do + !stop + end subroutine alpha_mlt_routine + + + subroutine extras_startup(id, restart, ierr) + integer, intent(in) :: id + logical, intent(in) :: restart + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + call test_suite_startup(s, restart, ierr) + + end subroutine extras_startup + + + subroutine extras_after_evolve(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + include 'formats' + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + write(*,'(A)') + ! put target info in TestHub output + testhub_extras_names(1) = 'fe_core_mass'; testhub_extras_vals(1) = s% fe_core_mass + + if(s% fe_core_mass < 1d0) then + write(*,1) "Bad fe_core_mass", s%fe_core_mass + else + if(s% fe_core_infall > s% fe_core_infall_limit) then + write(*,'(a)') 'all values are within tolerance' + else + write(*,'(a)') "Bad fe core infall" + end if + end if + call test_suite_after_evolve(s, ierr) + end subroutine extras_after_evolve + + + ! returns either keep_going, retry, or terminate. + integer function extras_check_model(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_check_model = keep_going + end function extras_check_model + + + integer function how_many_extra_history_columns(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_history_columns = 0 + end function how_many_extra_history_columns + + + subroutine data_for_extra_history_columns(id, n, names, vals, ierr) + integer, intent(in) :: id, n + character (len=maxlen_history_column_name) :: names(n) + real(dp) :: vals(n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + end subroutine data_for_extra_history_columns + + + integer function how_many_extra_profile_columns(id) + use star_def, only: star_info + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_profile_columns = 1 + end function how_many_extra_profile_columns + + + subroutine data_for_extra_profile_columns(id, n, nz, names, vals, ierr) + use star_def, only: star_info, maxlen_profile_column_name + use const_def, only: dp + integer, intent(in) :: id, n, nz + character (len=maxlen_profile_column_name) :: names(n) + real(dp) :: vals(nz,n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + integer :: k + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + names(1) = 'zbar_div_abar' + do k=1,s% nz + vals(k,1) = s% zbar(k)/s% abar(k) + end do + end subroutine data_for_extra_profile_columns + + ! returns either keep_going or terminate. + integer function extras_finish_step(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_finish_step = keep_going + if (extras_finish_step == terminate) & + s% termination_code = t_extras_finish_step + end function extras_finish_step + + end module run_star_extras diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/standard_lgTmax.mod b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/standard_lgTmax.mod new file mode 100644 index 000000000..543e1555d --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/standard_lgTmax.mod @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808de00ef2b333e36afbbf0a8dda7ebc146e78560f8faf79a8b12ce6288e4acf +size 1428461 diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/testhub.yml b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/testhub.yml new file mode 100644 index 000000000..2b486a02c --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/testhub.yml @@ -0,0 +1,15 @@ + runtime_minutes: 16.71 + model_number: 2344 + star_age: 1.0136396734299462E+07 + num_retries: 11 + log_rel_run_E_err: -4.5194878652040105 + steps: 266 + retries: 11 + redos: 0 + solver_calls_made: 277 + solver_calls_failed: 11 + solver_iterations: 2052 + extra_testhub_names: + - 'fe_core_mass' + extra_testhub_vals: + - 1.6762420545401346E+00 diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/Makefile b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/Makefile new file mode 100644 index 000000000..c779b9d6d --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/Makefile @@ -0,0 +1 @@ +include $(MESA_DIR)/star/work/Makefile \ No newline at end of file diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/README.rst b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/README.rst new file mode 100644 index 000000000..9c5cea164 --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/README.rst @@ -0,0 +1,21 @@ +.. _40M_carbon_burning_envelope_issues: + +************************************ +40M_carbon_burning_envelope_issues +************************************ + +(To do) Example massive star with dynamical envelope issues during carbon +burning. + +This dev case starts from a ZAMS model, relaxes the initial composition, and +evolves a 40 |Msun| model with pgstar settings in ``inlist_pgstar``. + +Inlists +======= + +This dev case has two inlist files. + +* ``inlist`` contains the model setup and evolution controls. +* ``inlist_pgstar`` contains the pgstar plot settings loaded by ``inlist``. + +Last-Updated: 12May2026 diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/ck b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/ck new file mode 100755 index 000000000..78ca63a8c --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/ck @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +# this provides the definition of check_one +# check_one +source "${MESA_DIR}/star/test_suite/test_suite_helpers" + +check_one diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/history_columns.list b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/history_columns.list new file mode 100644 index 000000000..4801dcc0e --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/history_columns.list @@ -0,0 +1,1066 @@ +! history_columns.list -- determines the contents of star history logs +! you can use a non-standard version by setting history_columns_file in your inlist + +! units are cgs unless otherwise noted. + +! reorder the following names as desired to reorder columns. +! comment out the name to omit a column (fewer columns => less IO => faster running). +! remove '!' to restore a column. + +! if you have a situation where you want a non-standard set of columns, +! make a copy of this file, edit as desired, and give the new filename in your inlist +! as history_columns_file. if you are just adding columns, you can 'include' this file, +! and just list the additions in your file. note: to include the standard default +! version, use include '' -- the 0 length string means include the default file. + +! blank lines and comments can be used freely. +! if a column name appears more than once in the list, only the first occurrence is used. + +! if you need to have something added to the list of options, let me know.... + + +! the first few lines of the log file contain a few items: + + ! version_number -- for the version of mesa being used + ! burn_min1 -- 1st limit for reported burning, in erg/g/s + ! burn_min2 -- 2nd limit for reported burning, in erg/g/s + + +!# other files + +! note: you can include another list by doing +! include 'filename' +! include '' means include the default standard list file + +! the following lines of the log file contain info about 1 model per row + +!---------------------------------------------------------------------------------------------- + +!# general info about the model + + model_number ! counting from the start of the run + num_zones ! number of zones in the model + + !## age + + star_age ! elapsed simulated time in years since the start of the run + star_age_sec ! elapsed simulated time in seconds since the start of the run + star_age_min ! elapsed simulated time in minutes since the start of the run + star_age_hr ! elapsed simulated time in hours since the start of the run + star_age_day ! elapsed simulated time in days since the start of the run + !day ! elapsed simulated time in days since the start of the run + + !log_star_age + !log_star_age_sec + + !## timestep + + time_step ! timestep in years since previous model + time_step_sec ! timestep in seconds since previous model + time_step_days + log_dt ! log10 time_step in years + log_dt_sec ! log10 time_step in seconds + log_dt_days ! log10 time_step in days + + !## mass + + star_mass ! in Msun units + !log_star_mass + + !star_gravitational_mass ! star_mass is baryonic mass + !star_mass_grav_div_mass + + !delta_mass ! star_mass - initial_mass in Msun units + log_xmstar ! log10 mass exterior to M_center (grams) + + !## mass change + + !star_mdot ! d(star_mass)/dt (in msolar per year) + log_abs_mdot ! log10(abs(star_mdot)) (in msolar per year) + + !## imposed surface conditions + !tau_factor + !tau_surface + + !## imposed center conditions + !m_center + !m_center_gm + !r_center + !r_center_cm + !r_center_km + !L_center + !log_L_center + !log_L_center_ergs_s + !v_center + !v_center_kms + + !logt_max + +!---------------------------------------------------------------------------------------------- + +!# mixing and convection + + !max_conv_vel_div_csound + !max_gradT_div_grada + !max_gradT_sub_grada + !min_log_mlt_Gamma + + + !## mixing regions + + mass_conv_core ! (Msun) mass coord of top of convective core. 0 if core is not convective + + ! mx1 refers to the largest (by mass) convective region. + ! mx2 is the 2nd largest. + + ! conv_mx1_top and conv_mx1_bot are the region where mixing_type == convective_mixing. + ! mx1_top and mx1_bot are the extent of all kinds of mixing, convective and other. + + ! values are m/Mstar + conv_mx1_top + conv_mx1_bot + conv_mx2_top + conv_mx2_bot + mx1_top + mx1_bot + mx2_top + mx2_bot + + ! radius -- values are radii in Rsun units + !conv_mx1_top_r + !conv_mx1_bot_r + !conv_mx2_top_r + !conv_mx2_bot_r + !mx1_top_r + !mx1_bot_r + !mx2_top_r + !mx2_bot_r + + ! you might want to get a more complete list of mixing regions by using the following + + !mixing_regions ! note: this includes regions where the mixing type is no_mixing. + + ! the is the number of regions to report + ! there will be 2* columns for this in the log file, 2 for each region. + ! the first column for a region gives the mixing type as defined in const/public/const_def.f90. + + ! the second column for a region gives the m/mstar location of the top of the region + ! entries for extra columns after the last region in the star will have an invalid mixing_type value of -1. + ! mstar is the total mass of the star, so these locations range from 0 to 1 + ! all regions are include starting from the center, so the bottom of one region + ! is the top of the previous one. since we start at the center, the bottom of the 1st region is 0. + + ! the columns in the log file will have names like 'mix_type_1' and 'mix_qtop_1' + + ! if the star has too many regions to report them all, + ! the smallest regions will be merged with neighbors for reporting purposes only. + + + !mix_relr_regions + ! same as above, but locations given as r/rstar instead of m/mstar. + ! the columns in the log file will have names like 'mix_relr_type_1' and 'mix_relr_top_1' + + + !## conditions at base of largest convection zone (by mass) + !cz_bot_mass ! mass coordinate of base (Msun) + !cz_mass ! mass coordinate of base (Msun) -- same as cz_bot_mass + !cz_log_xmass ! mass exterior to base (g) + !cz_log_xmsun ! mass exterior to base (Msun) + !cz_xm ! mass exterior to base (Msun) + !cz_logT + !cz_logRho + !cz_logP + !cz_bot_radius ! Rsun + !cz_log_column_depth + !cz_log_radial_depth + !cz_luminosity ! Lsun + !cz_opacity + !cz_log_tau + !cz_eta + !cz_log_eps_nuc ! log10(ergs/g/s) + !cz_t_heat ! Cp*T/eps_nuc (seconds) + + !cz_csound + !cz_scale_height + !cz_grav + + !cz_omega + !cz_omega_div_omega_crit + + !cz_zone + + ! mass fractions at base of largest convection zone (by mass) + !cz_log_xa h1 + !cz_log_xa he4 + + !## conditions at top of largest convection zone (by mass) + !cz_top_mass ! mass coordinate of top (Msun) + !cz_top_log_xmass ! mass exterior to top (g) + !cz_top_log_xmsun ! mass exterior to top (Msun) + !cz_top_xm ! mass exterior to top (Msun) + !cz_top_logT + !cz_top_logRho + !cz_top_logP + !cz_top_radius ! Rsun + !cz_top_log_column_depth + !cz_top_log_radial_depth + !cz_top_luminosity ! Lsun + !cz_top_opacity + !cz_top_log_tau + !cz_top_eta + !cz_top_log_eps_nuc ! log10(ergs/g/s) + !cz_top_t_heat ! Cp*T/eps_nuc (seconds) + + !cz_top_csound + !cz_top_scale_height + !cz_top_grav + + !cz_top_omega + !cz_top_omega_div_omega_crit + + !cz_top_zone + !cz_top_zone_logdq + + ! mass fractions at top of largest convection zone (by mass) + !cz_top_log_xa h1 + !cz_top_log_xa he4 + +!---------------------------------------------------------------------------------------------- + +!# nuclear reactions + + !## integrated quantities + + !power_h_burn ! total thermal power from PP and CNO, excluding neutrinos (in Lsun units) + !power_he_burn ! total thermal power from triple-alpha, excluding neutrinos (in Lsun units) + !power_photo + !power_z_burn + !log_power_nuc_burn ! total thermal power from all burning, excluding photodisintegrations + log_LH ! log10 power_h_burn + log_LHe ! log10 power_he_burn + log_LZ ! log10 total burning power including LC, but excluding LH and LHe and photodisintegrations + log_Lnuc ! log(LH + LHe + LZ) + !log_Lnuc_ergs_s + !log_Lnuc_sub_log_L + !lnuc_photo + + !extra_L ! integral of extra_heat in Lsun units + !log_extra_L ! log10 extra_L + + !## neutrino losses + log_Lneu ! log10 power emitted in neutrinos, nuclear and thermal (in Lsun units) + log_Lneu_nuc ! log10 power emitted in neutrinos, nuclear sources only (in Lsun units) + log_Lneu_nonnuc ! log10 power emitted in neutrinos, thermal sources only (in Lsun units) + + !mass_loc_of_max_eps_nuc ! (in Msun units) + !mass_ext_to_max_eps_nuc ! (in Msun units) + !eps_grav_integral ! (in Lsun units) + !log_abs_Lgrav ! log10 abs(eps_grav_integral) (in Lsun units) + + !## information about reactions (by category) + + ! log10 total luminosity for reaction categories (Lsun units) + + pp + cno + tri_alpha + !c_alpha + !n_alpha + !o_alpha + !ne_alpha + !na_alpha + !mg_alpha + !si_alpha + !s_alpha + !ar_alpha + !ca_alpha + !ti_alpha + !fe_co_ni + !c12_c12 + !c12_o16 + !o16_o16 + !photo + !pnhe4 + !other + + !## information about individual reactions + + ! adds columns for all of the reactions that are in the current net + ! Note that if using op_split_burn=.true. then zones which have been split will report 0 for their rates + !add_raw_rates ! raw reaction rates, reactions/second + !add_screened_rates ! screened reaction rates reactions/second + !add_eps_nuc_rates ! Nuclear energy (minus neutrino losses) released erg/s + !add_eps_neu_rates ! Neutrino losses erg/s + + ! individual reactions (as many as desired) + ! use list_net_reactions = .true. in star_job to list all reactions in the current net + ! reactions/second + !raw_rate r_h1_h1_ec_h2 + !raw_rate r_h1_h1_wk_h2 + + + + !## nuclear reactions at center + + ! center log10 burn erg/g/s for reaction categories + + !c_log_eps_burn cno + !c_log_eps_burn tri_alfa + + ! center d_eps_nuc_dlnd for reaction categories + + !c_d_eps_dlnd cno + !c_d_eps_dlnd tri_alfa + + ! center d_eps_nuc_dlnT for reaction categories + + !c_d_eps_dlnT cno + !c_d_eps_dlnT tri_alfa + + !## regions of strong nuclear burning + + ! 2 zones where eps_nuc > burn_min1 erg/g/s + ! for each zone have 4 numbers: start1, start2, end2, end1 + ! start1 is mass of inner edge where first goes > burn_min1 (or -20 if none such) + ! start2 is mass of inner edge where first zone reaches burn_min2 erg/g/sec (or -20 if none such) + ! end2 is mass of outer edge where first zone drops back below burn_min2 erg/g/s + ! end1 is mass of outer edge where first zone ends (i.e. eps_nuc < burn_min1) + ! similar for the second zone + + epsnuc_M_1 ! start1 for 1st zone + epsnuc_M_2 ! start2 + epsnuc_M_3 ! end2 + epsnuc_M_4 ! end1 + + epsnuc_M_5 ! start1 for 2nd zone + epsnuc_M_6 ! start2 + epsnuc_M_7 ! end2 + epsnuc_M_8 ! end1 + + + ! you might want to get a more complete list of burning regions by using the following + + !burning_regions + ! the is the number of regions to report + ! there will be 2* columns for this in the log file, 2 for each region. + ! the first column for a region gives int(sign(val)*log10(max(1,abs(val)))) + ! where val = ergs/gm/sec nuclear energy minus all neutrino losses. + ! the second column for a region gives the q location of the top of the region + ! entries for extra columns after the last region in the star will have a value of -9999 + ! all regions are included starting from the center, so the bottom of one region + ! is the top of the previous one. + ! since we start at the center, the bottom of the 1st region is q=0 and top of last is q=1. + + ! the columns in the log file will have names like 'burn_type_1' and 'burn_qtop_1' + + !burn_relr_regions + ! same as above, but locations given as r/rstar instead of m/mstar. + ! the columns in the log file will have names like 'burn_relr_type_1' and 'burn_relr_top_1' + + + ! if the star has too many regions to report them all, + ! the smallest regions will be merged with neighbors for reporting purposes only. + +!---------------------------------------------------------------------------------------------- + +!# information about core and envelope + + !## helium core + he_core_mass + !he_core_radius + !he_core_lgT + !he_core_lgRho + !he_core_L + !he_core_v + !he_core_omega + !he_core_omega_div_omega_crit + !he_core_k + + !## CO core + co_core_mass + !CO_core + !co_core_radius + !co_core_lgT + !co_core_lgRho + !co_core_L + !co_core_v + !co_core_omega + !co_core_omega_div_omega_crit + !co_core_k + + !## ONe core + one_core_mass + !one_core_radius + !one_core_lgT + !one_core_lgRho + !one_core_L + !one_core_v + !one_core_omega + !one_core_omega_div_omega_crit + !one_core_k + + !## iron core + fe_core_mass + !fe_core_radius + !fe_core_lgT + !fe_core_lgRho + !fe_core_L + !fe_core_v + !fe_core_omega + !fe_core_omega_div_omega_crit + !fe_core_k + + !## neutron rich core + neutron_rich_core_mass + !neutron_rich_core_radius + !neutron_rich_core_lgT + !neutron_rich_core_lgRho + !neutron_rich_core_L + !neutron_rich_core_v + !neutron_rich_core_omega + !neutron_rich_core_omega_div_omega_crit + !neutron_rich_core_k + + !## envelope + + !envelope_mass ! = star_mass - he_core_mass + !envelope_fraction_left ! = envelope_mass / (initial_mass - he_core_mass) + + !h_rich_layer_mass ! = star_mass - he_core_mass + !he_rich_layer_mass ! = he_core_mass - c_core_mass + !co_rich_layer_mass + +!---------------------------------------------------------------------------------------------- + +!# timescales + + !dynamic_timescale ! dynamic timescale (seconds) -- estimated by 2*pi*sqrt(r^3/(G*m)) + kh_timescale ! kelvin-helmholtz timescale (years) + !mdot_timescale ! star_mass/abs(star_mdot) (years) + !kh_div_mdot_timescales ! kh_timescale/mdot_timescale + !nuc_timescale ! nuclear timescale (years) -- proportional to mass divided by luminosity + + !dt_cell_collapse ! min time for any cell to collapse at current velocities + !dt_div_dt_cell_collapse + + !min_dr_div_cs ! min over all cells of dr/csound (seconds) + !min_dr_div_cs_k ! location of min + !log_min_dr_div_cs ! log10 min dr_div_csound (seconds) + !min_dr_div_cs_yr ! min over all cells of dr/csound (years) + !log_min_dr_div_cs_yr ! log10 min dr_div_csound (years) + !dt_div_min_dr_div_cs + !log_dt_div_min_dr_div_cs + + !min_t_eddy ! minimum value of scale_height/conv_velocity + +!---------------------------------------------------------------------------------------------- + +!# conditions at or near the surface of the model + + !## conditions at the photosphere + effective_T + !Teff + log_Teff ! log10 effective temperature + ! Teff is calculated using Stefan-Boltzmann relation L = 4 pi R^2 sigma Teff^4, + ! where L and R are evaluated at the photosphere (tau_factor < 1) + ! or surface of the model (tau_factor >= 1) when photosphere is not inside the model. + + !photosphere_black_body_T + !photosphere_cell_T ! temperature at model location closest to the photosphere, not necessarily Teff + !photosphere_cell_log_T + !photosphere_cell_density + !photosphere_cell_log_density + !photosphere_cell_opacity + !photosphere_cell_log_opacity + !photosphere_L ! Lsun units + !photosphere_log_L ! Lsun units + !photosphere_r ! Rsun units + !photosphere_log_r ! Rsun units + !photosphere_m ! Msun units + !photosphere_v_km_s + !photosphere_cell_k + !photosphere_column_density + !photosphere_csound + !photosphere_log_column_density + !photosphere_opacity + !photosphere_v_div_cs + !photosphere_xm + !photosphere_cell_free_e + !photosphere_cell_log_free_e + !photosphere_logg + !photosphere_T + + !## conditions at or near the surface of the model (outer edge of outer cell) + + luminosity ! luminosity in Lsun units + !luminosity_ergs_s ! luminosity in cgs units + log_L ! log10 luminosity in Lsun units + !log_L_ergs_s ! log10 luminosity in cgs units + radius ! Rsun + log_R ! log10 radius in Rsun units + !radius_cm + !log_R_cm + + log_g ! log10 gravity + !gravity + !log_Ledd + log_L_div_Ledd ! log10(L/Leddington) + lum_div_Ledd + !log_surf_optical_depth + !surface_optical_depth + + !log_surf_cell_opacity ! old name was log_surf_opacity + !log_surf_cell_P ! old name was log_surf_P + !log_surf_cell_pressure ! old name was log_surf_pressure + !log_surf_cell_density ! old name was log_surf_density + !log_surf_cell_temperature ! old name was log_surf_temperature + !surface_cell_temperature ! old name was surface_temperature + !log_surf_cell_z ! old name was log_surf_z + !surface_cell_entropy ! in units of kerg per baryon + ! old name was surface_entropy + + !v_surf ! (cm/s) + v_surf_km_s ! (km/s) + v_div_csound_surf ! velocity divided by sound speed at outermost grid point + !v_div_csound_max ! max value of velocity divided by sound speed at face + !v_div_vesc + !v_phot_km_s + !v_surf_div_escape_v + + !v_surf_div_v_kh ! v_surf/(photosphere_r/kh_timescale) + + surf_avg_j_rot + surf_avg_omega + surf_avg_omega_crit + surf_avg_omega_div_omega_crit + surf_avg_v_rot ! km/sec rotational velocity at equator + surf_avg_v_crit ! critical rotational velocity at equator + surf_avg_v_div_v_crit + surf_avg_Lrad_div_Ledd + !surf_avg_logT + !surf_avg_logRho + !surf_avg_opacity + + ! Gravity Darkening, reports the surface averaged L/Lsun and Teff (K) caused by + ! gravity darkening in rotating stars. Based on the model of Espinosa Lara & Rieutord (2011) + ! 'polar' refers to the line of sight being directed along the rotation axis of the star + ! 'equatorial' refers to the line of sight coincident with the stellar equator + !grav_dark_L_polar !Lsun + !grav_dark_Teff_polar !K + !grav_dark_L_equatorial !Lsun + !grav_dark_Teff_equatorial !K + + !surf_escape_v ! cm/s + + !v_wind_Km_per_s ! Km/s + ! = 1d-5*s% opacity(1)*max(0d0,-s% mstar_dot)/ & + ! (4*pi*s% photosphere_r*Rsun*s% tau_base) + ! Lars says: + ! wind_mdot = 4*pi*R^2*rho*v_wind + ! tau = integral(opacity*rho*dr) from R to infinity + ! so tau = opacity*wind_mdot/(4*pi*R*v_wind) at photosphere + ! or v_wind = opacity*wind_mdot/(4*pi*R*tau) at photosphere + + !rotational_mdot_boost ! factor for increase in mass loss mdot due to rotation + log_rotational_mdot_boost ! log factor for increase in mass loss mdot due to rotation + !surf_r_equatorial_div_r_polar + !surf_r_equatorial_div_r + !surf_r_polar_div_r + +!---------------------------------------------------------------------------------------------- + +!# conditions near center + + log_center_T ! temperature + log_center_Rho ! density + !log_center_P ! pressure + + ! shorter names for above + log_cntr_P + log_cntr_Rho + log_cntr_T + + center_T ! temperature + center_Rho ! density + !center_P ! pressure + + !center_degeneracy ! the electron chemical potential in units of k*T + !center_gamma ! plasma interaction parameter + center_mu + center_ye + center_abar + !center_zbar + + !center_eps_grav + + !center_non_nuc_neu + !center_eps_nuc + !d_center_eps_nuc_dlnT + !d_center_eps_nuc_dlnd + !log_center_eps_nuc + + center_entropy ! in units of kerg per baryon + !max_entropy ! in units of kerg per baryon + !fe_core_infall + !non_fe_core_infall + !non_fe_core_rebound + !max_infall_speed + + !compactness_parameter ! (m/Msun)/(R(m)/1000km) for m = 2.5 Msun + !compactness + !m4 ! Mass co-ordinate where entropy=4 + ! mu4 is sensitive to the choice of how much dm/dr you average over, thus we average dm and dr over M(entropy=4) and M(entropy=4)+0.3Msun + !mu4 ! dM(Msun)/dr(1000km) where entropy=4 + + + center_omega + center_omega_div_omega_crit + +!---------------------------------------------------------------------------------------------- + +!# abundances + + !species ! size of net + + !## mass fractions near center + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_center_abundances + !add_log_center_abundances + + ! individual central mass fractions (as many as desired) + center h1 + center he4 + center c12 + center o16 + + ! individual log10 central mass fractions (as many as desired) + !log_center h1 + !log_center he4 + ! etc. + + + !## mass fractions near surface + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_surface_abundances + !add_log_surface_abundances + + ! individual surface mass fractions (as many as desired) + !surface h1 + !surface he4 + surface c12 + surface o16 + ! etc. + + ! individual log10 surface mass fractions (as many as desired) + + !log_surface h1 + !log_surface he4 + + + !## mass fractions for entire star + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_average_abundances + !add_log_average_abundances + + ! individual average mass fractions (as many as desired) + !average h1 + !average he4 + ! etc. + + ! individual log10 average mass fractions (as many as desired) + !log_average h1 + !log_average he4 + ! etc. + + + !## mass totals for entire star (in Msun units) + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_total_mass + !add_log_total_mass + + ! individual mass totals for entire star (as many as desired) + total_mass h1 + total_mass he4 + ! etc. + + ! individual log10 mass totals for entire star (in Msun units) + !log_total_mass h1 + !log_total_mass he4 + ! etc. + +!---------------------------------------------------------------------------------------------- + +!# info at specific locations + + !## info at location of max temperature + !max_T + log_max_T + + +!---------------------------------------------------------------------------------------------- + +!# information about shocks + + !## info about outermost outward moving shock + ! excluding locations with q > max_q_for_outer_mach1_location + ! returns values at location of max velocity + !shock_mass ! baryonic (Msun) + !shock_mass_gm ! baryonic (grams) + !shock_q + !shock_radius ! (Rsun) + !shock_radius_cm ! (cm) + !shock_velocity + !shock_csound + !shock_v_div_cs + !shock_lgT + !shock_lgRho + !shock_lgP + !shock_gamma1 + !shock_entropy + !shock_tau + !shock_k + !shock_pre_lgRho + +!---------------------------------------------------------------------------------------------- + +!# asteroseismology + + !delta_nu ! large frequency separation for p-modes (microHz) + ! 1e6/(seconds for sound to cross diameter of star) + !delta_Pg ! g-mode period spacing for l=1 (seconds) + ! sqrt(2) pi^2/(integral of brunt_N/r dr) + !log_delta_Pg + !nu_max ! estimate from scaling relation (microHz) + ! nu_max = nu_max_sun * M/Msun / ((R/Rsun)^2 (Teff/astero_Teff_sun)^0.5) + !nu_max_3_4th_div_delta_nu ! nu_max^0.75/delta_nu + !acoustic_cutoff ! 0.5*g*sqrt(gamma1*rho/P) at surface + !acoustic_radius ! integral of dr/csound (seconds) + !ng_for_nu_max ! = 1 / (nu_max*delta_Pg) + ! period for g-mode with frequency nu_max = nu_max_ng*delta_Pg + !gs_per_delta_nu ! delta_nu / (nu_max**2*delta_Pg) + ! number of g-modes per delta_nu at nu_max + + !int_k_r_dr_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=1 + !int_k_r_dr_2pt0_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=1 + !int_k_r_dr_0pt5_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=1 + !int_k_r_dr_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=2 + !int_k_r_dr_2pt0_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=2 + !int_k_r_dr_0pt5_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=2 + !int_k_r_dr_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=3 + !int_k_r_dr_2pt0_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=3 + !int_k_r_dr_0pt5_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=3 + +!---------------------------------------------------------------------------------------------- + +!# energy information + + total_energy ! at end of step + log_total_energy ! log(abs(total_energy)) + !total_energy_after_adjust_mass ! after mass adjustments + + ! shorter versions of above + !tot_E + !log_tot_E + + + !total_gravitational_energy + !log_total_gravitational_energy ! log(abs(total_gravitational_energy)) + !total_gravitational_energy_after_adjust_mass + + ! shorter versions of above + !tot_PE + !log_tot_PE + + !total_internal_energy + !log_total_internal_energy + !total_internal_energy_after_adjust_mass + + ! shorter versions of above + !tot_IE + !log_tot_IE + + !total_radial_kinetic_energy + !log_total_radial_kinetic_energy + !total_radial_kinetic_energy_after_adjust_mass + + ! shorter versions of above (does not include rot KE) + !tot_KE + !log_tot_KE + + !total_turbulent_energy + !log_total_turbulent_energy + !total_turbulent_energy_after_adjust_mass + !tot_Et + !log_tot_Et + + total_energy_foe + + !tot_IE_div_IE_plus_KE + !total_IE_div_IE_plus_KE + + !total_entropy + !total_eps_grav + + !total_energy_sources_and_sinks ! for this step + !total_nuclear_heating + !total_non_nuc_neu_cooling + !total_irradiation_heating + !total_extra_heating ! extra heat integrated over the model times dt (erg) + !total_WD_sedimentation_heating + + !rel_run_E_err + + rel_E_err + !abs_rel_E_err + log_rel_E_err + + !tot_e_equ_err + !tot_e_err + + + !error_in_energy_conservation ! for this step + ! = total_energy - (total_energy_start + total_energy_sources_and_sinks) + !cumulative_energy_error ! = sum over all steps of abs(error_in_energy_conservation) + !rel_cumulative_energy_error ! = cumulative_energy_error/total_energy + !log_rel_cumulative_energy_error ! = log10 of rel_cumulative_energy_error + log_rel_run_E_err ! shorter name for rel_cumulative_energy_error + + !rel_error_in_energy_conservation ! = error_in_energy_conservation/total_energy + !log_rel_error_in_energy_conservation + + !virial_thm_P_avg + !virial_thm_rel_err + !work_inward_at_center + !work_outward_at_surface + + +!---------------------------------------------------------------------------------------------- + + !# rotation + + !total_angular_momentum + log_total_angular_momentum + !i_rot_total ! moment of inertia + + !total_rotational_kinetic_energy + !log_total_rotational_kinetic_energy + !total_rotational_kinetic_energy_after_adjust_mass + +!---------------------------------------------------------------------------------------------- + +!# velocities + + !avg_abs_v_div_cs + !log_avg_abs_v_div_cs + !max_abs_v_div_cs + !log_max_abs_v_div_cs + + !avg_abs_v + !log_avg_abs_v + !max_abs_v + !log_max_abs_v + + !u_surf + !u_surf_km_s + !u_div_csound_surf + !u_div_csound_max + + !infall_div_cs + +!---------------------------------------------------------------------------------------------- + +!# misc + + !e_thermal ! sum over all zones of Cp*T*dm + + !## eos + !logQ_max ! logQ = logRho - 2*logT + 12 + !logQ_min + gamma1_min + + !## core mixing + !mass_semiconv_core + + !## H-He boundary + + !diffusion_time_H_He_bdy + !temperature_H_He_bdy + + + !## optical depth and opacity + + !one_div_yphot + !log_one_div_yphot + + !log_min_opacity + !min_opacity + + !log_tau_center + + !log_max_tau_conv + !max_tau_conv + !log_min_tau_conv + !min_tau_conv + + !tau_qhse_yrs + + !## other + + !Lsurf_m + !dlnR_dlnM + !h1_czb_mass ! location (in Msun units) of base of 1st convection zone above he core + !kh_mdot_limit + !log_cntr_dr_cm + !min_Pgas_div_P + !surf_c12_minus_o16 ! this is useful for seeing effects of dredge up on AGB + !surf_num_c12_div_num_o16 + + !phase_of_evolution ! Integer mapping to the type of evolution see star_data/public/star_data_def.inc for definitions + + !## MLT++ + !gradT_excess_alpha + !gradT_excess_min_beta + !gradT_excess_max_lambda + + !max_L_rad_div_Ledd + !max_L_rad_div_Ledd_div_phi_Joss + + + !## RTI + !rti_regions + + !## Ni & Co + !total_ni_co_56 + + + !## internal structure constants + + ! this is evaluated assuming a spherical star and does not account for rotation + !apsidal_constant_k2 + + +!---------------------------------------------------------------------------------------------- + +!# accretion + + !k_below_const_q + !q_below_const_q + !logxq_below_const_q + + !k_const_mass + !q_const_mass + !logxq_const_mass + + !k_below_just_added + !q_below_just_added + !logxq_below_just_added + + !k_for_test_CpT_absMdot_div_L + !q_for_test_CpT_absMdot_div_L + !logxq_for_test_CpT_absMdot_div_L + +!---------------------------------------------------------------------------------------------- + +!# Color output + + ! Outputs the bolometric correction (bc) for the star in filter band ``filter'' (case sensitive) + !bc filter + + ! Outputs the absolute magnitude for the star in filter band ``filter'' (case sensitive) + !abs_mag filter + + ! Adds all the bc's to the output + !add_bc + + ! Adds all the absolute magnitudes to the output + !add_abs_mag + + ! Outputs luminosity in filter band ``filter'' (erg s^-1) (case sensitive) + ! lum_band filter + + ! Adds all the filter band luminosities to the output (erg s^-1) + ! add_lum_band + + ! Outputs log luminosity in filter band ``filter'' (log erg s^-1) (case sensitive) + ! log_lum_band filter + + ! Adds all the filter band luminosities to the output (log erg s^-1) + ! add_log_lum_band + +!---------------------------------------------------------------------------------------------- + +!# RSP + + !rsp_DeltaMag ! absolute magnitude difference between minimum and maximum light (mag) + !rsp_DeltaR ! R_max - R_min difference in the max and min radius (Rsun) + !rsp_GREKM ! fractional growth of the kinetic energy per pulsation period ("nonlinear growth rate") - see equation 5 in MESA5 + !rsp_num_periods ! Count of the number of pulsation cycles completed + !rsp_period_in_days ! Running period, ie., period between two consecutive values of R_max (days) + !rsp_phase ! Running pulsation phase for a cycle + +!---------------------------------------------------------------------------------------------- +!# debugging + + !## retries + num_retries ! total during the run + + !## solver iterations + + num_iters ! same as num_solver_iterations + num_solver_iterations ! iterations at this step + !total_num_solver_iterations ! total iterations during the run + !avg_num_solver_iters + + !rotation_solver_steps + + !diffusion_solver_steps + !diffusion_solver_iters + + !avg_setvars_per_step + !avg_skipped_setvars_per_step + !avg_solver_setvars_per_step + + !burn_solver_maxsteps + + !total_num_solver_calls_converged + !total_num_solver_calls_failed + !total_num_solver_calls_made + !total_num_solver_relax_calls_converged + !total_num_solver_relax_calls_failed + !total_num_solver_relax_calls_made + !total_num_solver_relax_iterations + + !total_step_attempts + !total_step_redos + !total_step_retries + !total_steps_finished + !total_steps_taken + + !TDC_num_cells + + !## Relaxation steps + !total_relax_step_attempts + !total_relax_step_redos + !total_relax_step_retries + !total_relax_steps_finished + !total_relax_steps_taken + + !## conservation during mesh adjust + !log_mesh_adjust_IE_conservation + !log_mesh_adjust_KE_conservation + !log_mesh_adjust_PE_conservation + + !## amr + !num_hydro_merges + !num_hydro_splits + + !## timing + !elapsed_time ! time since start of run (seconds) + + !## Extras + burning_regions 80 + mixing_regions 40 diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist new file mode 100644 index 000000000..b0933579b --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist @@ -0,0 +1,292 @@ +! 40M_carbon_burning_envelope_issues +! Main evolution inlist flattened from 20M_pre_ms_to_core_collapse. +! This active inlist starts from ZAMS and evolves to core collapse. + +&star_job + show_log_description_at_start = .false. + + load_saved_model = .false. + !load_model_filename = 'standard_lgTmax.mod' + !create_pre_main_sequence_model = .true. + !pre_ms_relax_to_start_radiative_core = .true. + relax_initial_Y = .true. + new_Y = 0.2703d0 + relax_initial_Z = .true. + new_Z = 1.42d-2 + + change_net = .true. + new_net_name = 'approx21_cr60_plus_co56.net' + dump_missing_metals_into_heaviest = .false. + + ! Example ccsn network for properly capturing the energy generation rate during all stages + !change_net_net = .true. + !new_net_name = 'mesa_206.net' + !dump_missing_metals_into_heaviest = .false. + + ! turn on hydrodynamics + change_v_flag = .true. + new_v_flag = .true. + + ! If using a big network, comment out and use a local rate_tables directory + num_special_rate_factors = 2 + reaction_for_special_factor(1) = 'r_c12_ag_o16' + special_rate_factor(1) = 1 + filename_of_special_rate(1) = 'c12ag_deboer_sigma_0p0_2000_Tgrid.dat' + + reaction_for_special_factor(2) = 'r_he4_he4_he4_to_c12' + special_rate_factor(2) = 1 + filename_of_special_rate(2) = 'r_he4_he4_he4_to_c12_cf88.txt' + + show_retry_counts_when_terminate = .true. + show_timestep_limit_counts_when_terminate = .true. + + ! pgstar is recommended for diagnosing issues and understanding the evolution + pgstar_flag = .true. + save_pgstar_files_when_terminate = .true. + + initial_zfracs = 6 ! set to asplund 2009 abundance fractions + + save_model_when_terminate = .true. + save_model_filename = 'final.mod' + required_termination_code_string = 'fe_core_infall_limit' + +/ ! end of star_job namelist + +&eos + use_Skye = .true. + mass_fraction_limit_for_Skye = 1d-10 + +/ ! end of eos namelist + +&kap + ! OPAL asplund 2009 opacities, Zbase set in inlist_mass_Z_wind_rotation + kap_file_prefix = 'a09' ! 'gs98' 'a09' 'OP_a09' 'OP_gs98' + kap_CO_prefix = 'a09_co' ! 'gs98_co' 'a09_co' + kap_lowT_prefix = 'lowT_fa05_a09p' + use_Type2_opacities = .true. + + Zbase = 1.42d-2 +/ ! end of kap namelist + +&controls + +! initial model + initial_mass = 40 + initial_z = 1.42d-2 ! solar + initial_y = 0.2703d0 ! from asplund et al. 2009, solar. + +! stopping + fe_core_infall_limit = 1d7 + ! limit max_model_number as part of test_suite + max_model_number = 10000 + !max_number_retries = 37 + +! wind + Dutch_scaling_factor = 0d0 + x_ctrl(25) = 0.4d0 ! Dutch_scaling_factor after ZAMS + + cool_wind_full_on_T = 0.8d4 + hot_wind_full_on_T = 1.2d4 + cool_wind_RGB_scheme = 'Dutch' + cool_wind_AGB_scheme = 'Dutch' + hot_wind_scheme = 'Dutch' + Dutch_wind_lowT_scheme = 'de Jager' + + max_T_center_for_any_mass_loss = 1.1d9 + max_tries_for_implicit_wind = 0 + +! atmosphere + atm_option = 'T_tau' + atm_T_tau_relation = 'Eddington' + atm_T_tau_opacity = 'fixed' + Pextra_factor = 2 + +! mlt + mixing_length_alpha = 1.5 + MLT_option = 'TDC' + use_Ledoux_criterion = .true. + + use_other_alpha_mlt = .true. ! implemented in run_star_extras + x_ctrl(21) = 3.0 ! alpha_H + x_ctrl(22) = 1.5 ! alpha_other + x_ctrl(23) = 0.5 ! ! use alpha_H if cell X >= H_limit; else use alpha_other + x_ctrl(24) = 9d0 ! ! use other_alpha_mlt only if star_mass >= this limit. + + thermohaline_option = 'Kippenhahn' + thermohaline_coeff = 0 + + semiconvection_option = 'Langer_85 mixing; gradT = gradr' + alpha_semiconvection = 1d-2 + + mlt_make_surface_no_mixing = .true. + +! superadiabatic convection routines: + + use_superad_reduction = .false. + superad_reduction_Gamma_limit = 0.3d0 ! default is 0.5d0 + superad_reduction_Gamma_limit_scale = 5d0 + superad_reduction_Gamma_inv_scale = 5d0 + superad_reduction_diff_grads_limit = 1d-2 ! default is 1d-3 + superad_reduction_limit = -1d0 + + okay_to_reduce_gradT_excess = .false. + gradT_excess_f1 = 1d-4 + gradT_excess_f2 = 1d-2 + gradT_excess_lambda1 = -1d0 ! full on + +! mixing + !set_min_D_mix = .true. + !min_D_mix = 1d-2 + + ! we use step overshooting in H core + overshoot_scheme(1) = 'step' + overshoot_zone_type(1) = 'burn_H' + overshoot_zone_loc(1) = 'core' + overshoot_bdy_loc(1) = 'top' + overshoot_f(1) = 0.345 ! for M>10 + !overshoot_f(1) = 0.21 ! For M<10 + overshoot_f0(1) = 0.01 + + ! exponential in the H core + overshoot_scheme(2) = 'exponential' + overshoot_zone_type(2) = 'burn_He' + overshoot_zone_loc(2) = 'core' + overshoot_bdy_loc(2) = 'top' + overshoot_f(2) = 0.01 + overshoot_f0(2) = 0.005 + + ! we don't want to deal with He/CO core mergers + ! and there is reason to believe there is little + ! inward overshooting in the shell across compositions boundaries + overshoot_scheme(3) = 'none' + overshoot_zone_type(3) = 'burn_He' + overshoot_zone_loc(3) = 'shell' + overshoot_bdy_loc(3) = 'bottom' + + ! a small amount of overshooting on top of any other convective core + ! avoid spurious numerical behavior + ! perfect amount for degenerate flames + overshoot_scheme(4) = 'exponential' + overshoot_zone_type(4) = 'any' + overshoot_zone_loc(4) = 'any' + overshoot_bdy_loc(4) = 'any' + overshoot_f(4) = 0.005d0 + overshoot_f0(4) = 0.001d0 + +! timesteps + time_delta_coeff = 1.0 + min_timestep_factor = 0.8d0 + max_timestep_factor = 1.05d0 + timestep_factor_for_retries = 0.75 + + limit_for_rel_error_in_energy_conservation = 1d-3 + hard_limit_for_rel_error_in_energy_conservation = 1d-2 + + never_skip_hard_limits = .true. + min_xa_hard_limit = -1d-5 + min_xa_hard_limit_for_highT = -3d-5 + + delta_lgTeff_limit = 0.01 + delta_lgL_limit = 0.1 + delta_lgL_He_limit = 0.1 + + ! Recommend decreasing all three Rho, T, Tmax + ! to 1d-3 or lower in production runs + delta_lgRho_cntr_limit = 0.03 + delta_lgRho_cntr_hard_limit = 0.1 + delta_lgRho_limit = 0.1 + + delta_lgT_cntr_limit_only_after_near_zams = .true. + delta_lgT_cntr_limit = 0.002 + delta_lgT_cntr_hard_limit = 0.1 + + delta_lgT_max_limit_only_after_near_zams = .true. + delta_lgT_max_limit = 0.002 + delta_lgT_max_hard_limit = 0.1 + + dX_div_X_limit(2) = -1 ! for he4 + + ! On the changes in total abundance of each isotope + ! one of the most useful timestep controls, period + dX_nuc_drop_limit = 2d-2 ! Recommend decreasing to 1d-3 or lower in a production run + dX_nuc_drop_limit_at_high_T = 2d-2 ! default = -1 = same as dX_nuc_drop_limit + dX_nuc_drop_min_X_limit = 1d-3 ! try decreasing to 1d-4 or 1d-5 in a production run + dX_nuc_drop_max_A_limit = 70 ! try increasing beyond 60 in a big network run + dX_nuc_drop_hard_limit = 1d99 + + delta_lg_XH_cntr_limit = 0.01d0 + delta_lg_XH_cntr_max = 0.0d0 + delta_lg_XH_cntr_min = 0.5d0 + + delta_lg_XHe_cntr_limit = 0.01d0 + delta_lg_XHe_cntr_max = 0.0d0 + delta_lg_XHe_cntr_min = 0.5d0 + + delta_XSi_cntr_limit = 0.0025 + delta_XSi_cntr_hard_limit = -1!0.02 + delta_Ye_highT_limit = 1d-3 + +! mesh + !max_dq= 1d-3 ! or lower + mesh_delta_coeff = 2.5 ! try 1.0 or below in production run + mesh_delta_coeff_for_highT = 1.5 ! try 1.0 or below in production run + logT_max_for_standard_mesh_delta_coeff = 9.0 + logT_min_for_highT_mesh_delta_coeff = 9.5 + !min_dq_for_xa = 1d-4 ! avoid over-resolving composition changes, bad for bit for bit convergence? + +! solver + + ! damped newton and structure only + scale_max_correction = 0.1d0 + ignore_species_in_max_correction = .true. + + use_gold2_tolerances = .true. + use_gold_tolerances = .true. + gold_solver_iters_timestep_limit = 20 + + max_abs_rel_run_E_err = 1d-2 + energy_eqn_option = 'dedt' + + convergence_ignore_equL_residuals = .true. + make_gradr_sticky_in_solver_iters = .true. + min_logT_for_make_gradr_sticky_in_solver_iters = 8d0 + xa_scale = 1d-5 + min_timestep_limit = 1d-12 ! (seconds) ! 1d-20 if things are sticky + + when_to_stop_rtol = 1d-3 + when_to_stop_atol = 1d-3 + + op_split_burn = .true. + op_split_burn_min_T = 1d9 + burn_steps_limit = 150 + burn_steps_hard_limit = 250 + op_split_burn_eps = 1d-5 + op_split_burn_odescal = 1d-5 + +! output + + !max_model_number = 4000000 + + num_trace_history_values = 4 + trace_history_value_name(1) = 'Fe_core' + trace_history_value_name(2) = 'fe_core_infall' + trace_history_value_name(3) = 'rel_E_err' + trace_history_value_name(4) = 'log_rel_run_E_err' + + photo_interval = 200 + photo_digits = 8 + profile_interval = 100 + max_num_profile_models = 400000 + history_interval = 1 + write_header_frequency = 10 + terminal_interval = 10 + + !report_solver_progress = .true. ! set true to see info about solver iterations + !report_ierr = .true. ! if true, produce terminal output when have some internal error + +/ ! end of controls namelist + +&pgstar + read_extra_pgstar_inlist(1) = .true. + extra_pgstar_inlist_name(1) = 'inlist_pgstar' +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_pgstar b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_pgstar new file mode 100644 index 000000000..be0295550 --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_pgstar @@ -0,0 +1,677 @@ +&pgstar + +!pause_flag = .true. + +pgstar_interval = 1 +pgstar_show_age_in_years = .true. +pgstar_show_age_in_seconds = .false. +pgstar_sleep = 0.0 + +! some global grid plot settings at end + +pgstar_show_model_number = .false. +pgstar_show_age = .false. + +!------------------------------------------------------------------------------------ + +Grid1_win_flag = .true. +Grid1_win_width = 12 +Grid1_win_aspect_ratio = 0.666 + +! file output +Grid1_file_flag = .true. +Grid1_file_dir = 'png' +Grid1_file_prefix = 'Grid1_' +Grid1_file_interval = 25 ! output when mod(model_number,Grid1_file_interval)==0 +Grid1_file_width = 27 ! (inches) negative means use same value as for window +Grid1_file_aspect_ratio = -1 ! negative means use same value as for window + +! reset the defaults + +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 + +Grid1_title = '' + +Grid1_num_cols = 3 ! divide plotting region into this many equal width cols +Grid1_num_rows = 5 ! divide plotting region into this many equal height rows +Grid1_num_plots = 6 ! <= 10 + +Grid1_plot_name(1) = 'Text_Summary1' +Grid1_plot_row(1) = 1 ! number from 1 at top +Grid1_plot_rowspan(1) = 1 ! plot spans this number of rows +Grid1_plot_col(1) = 1 ! number from 1 at left +Grid1_plot_colspan(1) = 3 ! plot spans this number of columns + +Grid1_plot_pad_left(1) = -0.03 ! fraction of full window width for padding on left +Grid1_plot_pad_right(1) = 0.0 ! fraction of full window width for padding on right +Grid1_plot_pad_top(1) = -0.06 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(1) = 0.07 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(1) = 1 ! 0.8 ! multiply txt_scale for subplot by this + +Grid1_plot_name(3) = 'TRho' +Grid1_plot_row(3) = 2 ! number from 1 at top +Grid1_plot_rowspan(3) = 1 ! plot spans this number of rows +Grid1_plot_col(3) = 1 ! number from 1 at left +Grid1_plot_colspan(3) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(3) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(3) = 0.08 ! fraction of full window width for padding on right +Grid1_plot_pad_top(3) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(3) = 0.01 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(3) = 0.7 ! multiply txt_scale for subplot by this + +Grid1_plot_name(5) = 'Profile_Panels1' +Grid1_plot_row(5) = 3 ! number from 1 at top +Grid1_plot_rowspan(5) = 3 ! plot spans this number of rows +Grid1_plot_col(5) = 1 ! number from 1 at left +Grid1_plot_colspan(5) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(5) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(5) = 0.10 ! fraction of full window width for padding on right +Grid1_plot_pad_top(5) = 0.05 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(5) = 0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(5) = 0.6 ! multiply txt_scale for subplot by this + +Grid1_plot_name(2) = 'TRho_Profile' +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) = 2 ! number from 1 at left +Grid1_plot_colspan(2) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(2) = -0.01 ! fraction of full window width for padding on left +Grid1_plot_pad_right(2) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(2) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(2) = 0.01 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(2) = 0.7 ! multiply txt_scale for subplot by this + +Grid1_plot_name(4) = 'History_Panels1' +Grid1_plot_row(4) = 3 ! number from 1 at top +Grid1_plot_rowspan(4) = 3 ! plot spans this number of rows +Grid1_plot_col(4) = 2 ! number from 1 at left +Grid1_plot_colspan(4) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(4) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(4) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(4) = 0.05 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(4) = 0.0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(4) = 0.6 ! multiply txt_scale for subplot by this + +Grid1_plot_name(6) = 'Profile_Panels3' +Grid1_plot_row(6) = 2 ! number from 1 at top +Grid1_plot_rowspan(6) = 4 ! plot spans this number of rows +Grid1_plot_col(6) = 3 ! Number from 1 at left +Grid1_plot_colspan(6) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(6) = 0.04 ! fraction of full window width for padding on left +Grid1_plot_pad_right(6) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(6) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(6) = 0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(6) = 0.6 ! multiply txt_scale for subplot by this + +!------------------------------------------------------------------------------------ + +Profile_Panels3_win_flag = .false. + +Profile_Panels3_title = '' + +Profile_Panels3_num_panels = 5 + +Profile_Panels3_yaxis_name(1) = 'Abundance' + +Profile_Panels3_yaxis_name(2) = 'Power' + +Profile_Panels3_yaxis_name(3) = 'Mixing' +Mixing_legend_txt_scale_factor = 0.9 + +Profile_Panels3_yaxis_name(4) = 'logRho' +Profile_Panels3_other_yaxis_name(4) = 'v_div_cs' ! 'vel_km_per_s' ! 'entropy' +Profile_Panels3_other_dymin(4) = 0.14 + +Profile_Panels3_yaxis_name(5) = 'logT' +Profile_Panels3_other_yaxis_name(5) = 'burn_num_iters' + +! x-axis limits and properties +Profile_Panels3_xaxis_name = 'mass' +Profile_Panels3_xmin = 0.0 +Profile_Panels3_xmax = -101d0 ! 2.2 +Profile_Panels3_xaxis_reversed = .false. + +Profile_Panels3_txt_scale = 0.7 + +!Profile_Panels3_xaxis_name = 'zone' +!Profile_Panels3_xmin = 800 +!Profile_Panels3_xmax = 1100 +!Profile_Panels3_xaxis_reversed = .true. + +!Profile_Panels3_show_grid = .true. +Profile_Panels3_show_mix_regions_on_xaxis = .true. + +!------------------------------------------------------------------------------------ + +!Profile_Panels1_win_flag = .true. +!Profile_Panels1_file_flag = .true. + Profile_Panels1_file_dir = 'png' + Profile_Panels1_file_prefix = 'profile_panels1_' + Profile_Panels1_file_interval = 1 + Profile_Panels1_file_width = -1 + Profile_Panels1_file_aspect_ratio = -1 + +Profile_Panels1_title = '' + +Profile_Panels1_txt_scale = 0.7 +Profile_Panels1_num_panels = 4 + +Profile_Panels1_yaxis_name(1) = 'logRho' +Profile_Panels1_dymin(1) = 0.14 +Profile_Panels1_other_yaxis_name(1) = 'logT' +Profile_Panels1_other_dymin(1) = 0.14 + +Profile_Panels1_yaxis_name(2) = 'entropy' +Profile_Panels1_other_yaxis_name(2) = 'pgas_div_p' + +Profile_Panels1_yaxis_name(3) = 'gradT' +Profile_Panels1_other_yaxis_name(3) = 'grada' +Profile_Panels1_same_yaxis_range(3) = .true. +Profile_Panels1_other_dymin(3) = 0.08 + +Profile_Panels1_yaxis_name(4) = 'log_opacity' +Profile_Panels1_dymin(1) = 0.14 +Profile_Panels1_other_yaxis_name(4) = 'gradr' +Profile_Panels1_other_dymin(1) = 0.14 + +! x-axis limits and properties +Profile_Panels1_xaxis_name = 'logtau' +Profile_Panels1_xmin = -101d0 +Profile_Panels1_xmax = 8.1 +Profile_Panels1_xaxis_reversed = .true. + +!Profile_Panels1_xaxis_name = 'zone' +!Profile_Panels1_xmin = 15 +!Profile_Panels1_xmax = 270 +!Profile_Panels1_xaxis_reversed = .true. + +!Profile_Panels1_show_grid = .true. +Profile_Panels1_show_mix_regions_on_xaxis = .true. + +!------------------------------------------------------------------------------------ + +!TRho_Profile_win_flag = .true. +TRho_Profile_win_width = 8 +TRho_Profile_win_aspect_ratio = 0.75 ! aspect_ratio = height/width + +! file output +!TRho_Profile_file_flag = .true. +TRho_Profile_file_dir = 'TRho' +TRho_Profile_file_prefix = 'trho_' +TRho_Profile_file_interval = 10 ! output when `mod(model_number,TRho_Profile_file_interval)==0` +TRho_Profile_file_width = -1 ! (inches) negative means use same value as for window +TRho_Profile_file_aspect_ratio = -1 ! negative means use same value as for window + +TRho_Profile_xleft = 0.15 +TRho_Profile_xright = 0.85 +TRho_Profile_ybot = 0.15 +TRho_Profile_ytop = 0.85 +TRho_Profile_txt_scale = 0.7 +TRho_Profile_title = ' ' + +TRho_switch_to_Column_Depth = .false. +TRho_switch_to_mass = .false. + +show_TRho_Profile_legend = .false. + TRho_Profile_legend_coord = 0.07 + TRho_Profile_legend_fjust = 0.0 + TRho_Profile_legend_disp1 = -2.0 + TRho_Profile_legend_del_disp = -1.3 + TRho_Profile_legend_txt_scale = 1.1 + +show_TRho_Profile_text_info = .false. + TRho_Profile_text_info_xfac = 0.77 ! controls x location + TRho_Profile_text_info_dxfac = 0.02 ! controls x spacing to value from text + TRho_Profile_text_info_yfac = 0.6 ! controls y location of 1st line + TRho_Profile_text_info_dyfac = -0.04 ! controls line spacing + +show_TRho_Profile_mass_locs = .false. +show_TRho_accretion_mesh_borders = .false. +show_TRho_Profile_kap_regions = .false. +show_TRho_Profile_gamma1_4_3rd = .true. +show_TRho_Profile_eos_regions = .false. +show_TRho_Profile_degeneracy_line = .true. +show_TRho_Profile_Pgas_Prad_line = .true. +show_TRho_Profile_burn_lines = .true. +show_TRho_Profile_burn_labels = .true. + +! axis limits +TRho_Profile_xmin = -12.0 +TRho_Profile_xmax = 10.0 +TRho_Profile_ymin = 3.0 +TRho_Profile_ymax = 10.0 + +! these are shown if show_TRho_Profile_mass_locs = .true. +! set all the entries +profile_mass_point_q = -1 +profile_mass_point_color_index = 1 +profile_mass_point_symbol = -6 +profile_mass_point_symbol_scale = 1.7 +profile_mass_point_str = '' +profile_mass_point_str_clr = 1 +profile_mass_point_str_scale = 1.0 + +! set defaults +num_profile_mass_points = 3 ! max is defined in star_def (max_num_profile_mass_points) + +profile_mass_point_q(1) = 0.5 +profile_mass_point_color_index(1) = 1 +profile_mass_point_symbol(1) = -6 +profile_mass_point_str(1) = ' 0.5 M\d\(0844)\u' +profile_mass_point_str_clr(1) = 1 + +profile_mass_point_q(2) = 0.95 +profile_mass_point_color_index(2) = 1 +profile_mass_point_symbol(2) = -6 +profile_mass_point_str(2) = ' 0.95 M\d\(0844)\u' +profile_mass_point_str_clr(3) = 1 + +profile_mass_point_q(3) = 0.999 +profile_mass_point_color_index(3) = 1 +profile_mass_point_symbol(3) = -6 +profile_mass_point_str(3) = ' 0.999 M\d\(0844)\u' +profile_mass_point_str_clr(3) = 1 + +!------------------------------------------------------------------------------------ + +! Text_Summary windows + +Text_Summary1_win_flag = .false. +Text_Summary1_win_width = 10 +Text_Summary1_win_aspect_ratio = 0.15 + +Text_Summary1_xleft = 0.01 +Text_Summary1_xright = 0.99 +Text_Summary1_ybot = 0.0 +Text_Summary1_ytop = 1.0 +Text_Summary1_txt_scale = 0.95 +Text_Summary1_title = '' + +Text_Summary1_num_rows = 6 ! <= 20 +Text_Summary1_num_cols = 5 ! <= 20 +Text_Summary1_name(:,:) = '' + +Text_Summary1_name(1,1) = 'model_number' +Text_Summary1_name(1,2) = 'log_dt' +Text_Summary1_name(1,3) = 'Mass' +Text_Summary1_name(1,4) = 'H_cntr' +Text_Summary1_name(1,5) = 'H_rich' + +Text_Summary1_name(2,1) = 'non_fe_core_infall' +Text_Summary1_name(2,2) = 'star_age' +Text_Summary1_name(2,3) = 'lg_Mdot' +Text_Summary1_name(2,4) = 'He_cntr' +Text_Summary1_name(2,5) = 'He_core' + +Text_Summary1_name(3,1) = 'fe_core_infall' +Text_Summary1_name(3,2) = 'gamma1_min' +Text_Summary1_name(3,3) = 'eta_cntr' +Text_Summary1_name(3,4) = 'C_cntr' +Text_Summary1_name(3,5) = 'CO_core' + +Text_Summary1_name(4,1) = 'log_max_T' +Text_Summary1_name(4,2) = 'log_LH' +Text_Summary1_name(4,3) = 'lg_Lnuc_tot' +Text_Summary1_name(4,4) = 'O_cntr' +Text_Summary1_name(4,5) = 'Fe_core' + +Text_Summary1_name(5,1) = 'log_cntr_T' +Text_Summary1_name(5,2) = 'log_LHe' +Text_Summary1_name(5,3) = 'lg_Lneu' +Text_Summary1_name(5,4) = 'Ne_cntr' +Text_Summary1_name(5,5) = 'zones' + +Text_Summary1_name(6,1) = 'log_cntr_Rho' +Text_Summary1_name(6,2) = 'log_LZ' +Text_Summary1_name(6,3) = 'lg_Lphoto' +Text_Summary1_name(6,4) = 'Si_cntr' +Text_Summary1_name(6,5) = 'retries' + +!------------------------------------------------------------------------------------ + +! Abundance profile plot + +Abundance_win_flag = .false. + +! window properties +Abundance_win_width = 10 +Abundance_win_aspect_ratio = 0.75 + +Abundance_xleft = 0.15 +Abundance_xright = 0.85 +Abundance_ybot = 0.15 +Abundance_ytop = 0.85 +Abundance_txt_scale = 1.1 +Abundance_title = '' + +! isotopes to plot + +Abundance_num_isos_to_show = 20 + +Abundance_which_isos_to_show(1) = 'h1' +Abundance_which_isos_to_show(2) = 'he3' +Abundance_which_isos_to_show(3) = 'he4' +Abundance_which_isos_to_show(4) = 'c12' +Abundance_which_isos_to_show(5) = 'n14' +Abundance_which_isos_to_show(6) = 'o16' +Abundance_which_isos_to_show(7) = 'ne20' +Abundance_which_isos_to_show(8) = 'mg24' +Abundance_which_isos_to_show(9) = 'si28' +Abundance_which_isos_to_show(10) = 's32' +Abundance_which_isos_to_show(11) = 'ar36' +Abundance_which_isos_to_show(12) = 'ca40' +Abundance_which_isos_to_show(13) = 'ti44' +Abundance_which_isos_to_show(14) = 'cr48' +Abundance_which_isos_to_show(15) = 'cr56' +Abundance_which_isos_to_show(16) = 'fe52' +Abundance_which_isos_to_show(17) = 'fe54' +Abundance_which_isos_to_show(18) = 'fe56' +Abundance_which_isos_to_show(19) = 'ni56' +Abundance_which_isos_to_show(20) = 'neut' +!Abundance_which_isos_to_show(22) = 'ne22' + +! number and size of isotope labels along curves +num_abundance_line_labels = 4 +Abundance_line_txt_scale_factor = 1.1 + +! number and size of isotopes on legend +Abundance_legend_max_cnt = 10 +Abundance_legend_txt_scale_factor = 1.3 + +! yaxis limits +Abundance_log_mass_frac_min = -4!-6.4 ! -3.5 +Abundance_log_mass_frac_max = 0.3 + +! file output +Abundance_file_flag = .false. +Abundance_file_dir = 'Abundance' +Abundance_file_prefix = 'abund_' +Abundance_file_width = -1 ! (inches) negative means use same value as for window +Abundance_file_aspect_ratio = -1 ! negative means use same value as for window + +!------------------------------------------------------------------------------------ + +! power plot + +Power_win_flag = .false. +Power_win_width = 10 +Power_win_aspect_ratio = 0.75 +Power_title = '' + +Power_xleft = 0.15 +Power_xright = 0.85 +Power_ybot = 0.15 +Power_ytop = 0.85 +Power_txt_scale = 1.1 +Power_title = ' ' + +Power_legend_max_cnt = 10 +Power_legend_txt_scale_factor = 1.3 ! relative to other text + +! power yaxis limits -- to override system default selections +Power_ymin = -5.0 ! -101d0 ! only used if /= -101d0 +Power_ymax = 25.0 ! -101d0 ! only used if /= -101d0 + +! file output +Power_file_flag = .false. +Power_file_dir = 'png' +Power_file_prefix = 'power_' +Power_file_interval = 5 ! output when mod(model_number,Power_file_interval)==0 +Power_file_width = -1 ! (inches) negative means use same value as for window +Power_file_aspect_ratio = -1 ! negative means use same value as for window + +!------------------------------------------------------------------------------------ + +! mixing plot + +Mixing_xmin = 0.0 +Mixing_xmax = 1.6 ! -101d0 +Mixing_legend_txt_scale_factor = 1.4 ! relative to other text + +Mixing_show_rotation_details = .false. + +!Mixing_win_flag = .true. +!Mixing_file_flag = .true. +Mixing_file_dir = 'png' +Mixing_file_prefix = 'mixing_' +Mixing_file_interval = 1 ! output when `mod(model_number,Mixing_file_interval)==0` +Mixing_file_width = -1 ! (inches) negative means use same value as for window +Mixing_file_aspect_ratio = -1 ! negative means use same value as for window + +!----------------------------------------------------------------------- + +! TRho window + ! history of central temperature vs. density + + TRho_txt_scale = 0.7 + TRho_title = '' + + TRho_logT_min = -101d0 + TRho_logT_max = -101d0 + TRho_logRho_min = -101d0 + TRho_logRho_max = -101d0 + show_TRho_degeneracy_line = .true. + +!----------------------------------------------------------------------- + + !# HR window + ! history of `lg_L` vs. `lg_Teff` + + HR_win_flag = .true. + + HR_win_width = 6 + HR_win_aspect_ratio = 0.75 ! aspect_ratio = height/width + + HR_xleft = 0.15 + HR_xright = 0.85 + HR_ybot = 0.15 + HR_ytop = 0.85 + HR_txt_scale = 0.7 !1.0 + HR_title = '' + + ! axis limits -- to override system default selections + HR_logT_min = -101d0 ! only used if /= -101d0 + HR_logT_max = -101d0 ! only used if /= -101d0 + HR_logL_min = -101d0 ! only used if /= -101d0 + HR_logL_max = -101d0 ! only used if /= -101d0 + + HR_logL_margin = 0.1 + HR_logT_margin = 0.1 + HR_dlogT_min = -1 + HR_dlogL_min = -1 + + HR_step_min = -1 ! only plot models with model number >= this + HR_step_max = -1 ! only plot models with model number <= this + + show_HR_classical_instability_strip = .true. + show_HR_Mira_instability_region = .false. + show_HR_WD_instabilities = .false. + + show_HR_target_box = .false. + HR_target_n_sigma = -3 ! -n means show sig 1..n + HR_target_logL = 0 + HR_target_logL_sigma = 0 + HR_target_logT = 0 + HR_target_logT_sigma = 0 + + show_HR_annotation1 = .false. + show_HR_annotation2 = .false. + show_HR_annotation3 = .false. + + HR_fname = '' ! file name for extra HR data + + ! Enables calling a subroutine to add extra information to a plot + ! see `$MESA_DIR/star/other/pgstar_decorator.f90` + HR_use_decorator = .false. + + ! file output + HR_file_flag = .false. + HR_file_dir = 'png' + HR_file_prefix = 'hr_' + HR_file_interval = 5 ! output when `mod(model_number,HR_file_interval)==0` + HR_file_width = -1 ! (inches) negative means use same value as for window + HR_file_aspect_ratio = -1 ! negative means use same value as for window + +!----------------------------------------------------------------------- + + History_Panels1_title = '' + + History_Panels1_xaxis_name = 'model_number' + History_Panels1_max_width = -1 + + !History_Panels1_xaxis_name = 'star_age' + !History_Panels1_max_width = 10 + + History_Panels1_txt_scale = 0.75 + History_Panels1_xmin = -101d0 + History_Panels1_xmax = -101d0 + History_Panels1_dxmin = -1 + History_Panels1_xaxis_reversed = .false. + History_Panels1_xaxis_log = .false. + History_Panels1_xmargin = 0.0 + + ! :: + + History_Panels1_num_panels = 4 + + ! :: + + History_Panels1_yaxis_name(1) = 'log_L' + History_Panels1_yaxis_reversed(1) = .false. + History_Panels1_ymin(1) = -101d0 + History_Panels1_ymax(1) = -101d0 + History_Panels1_dymin(1) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(1) = 'log_Teff' + History_Panels1_other_yaxis_reversed(1) = .false. + History_Panels1_other_ymin(1) = -101d0 + History_Panels1_other_ymax(1) = -101d0 + History_Panels1_other_dymin(1) = 0.14 + + ! :: + + History_Panels1_yaxis_name(2) = 'lum_div_Ledd' + History_Panels1_yaxis_reversed(2) = .false. + History_Panels1_ymin(2) = -101d0 + History_Panels1_ymax(2) = -101d0 + History_Panels1_dymin(2) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(2) = 'log_max_T' ! 'v_surf_km_s' + History_Panels1_other_yaxis_reversed(2) = .false. + History_Panels1_other_ymin(2) = -101d0 + History_Panels1_other_ymax(2) = -101d0 + History_Panels1_other_dymin(2) = 0.14 + + ! :: + + History_Panels1_yaxis_name(3) = 'radius' + History_Panels1_yaxis_reversed(3) = .false. + History_Panels1_ymin(3) = -101d0 + History_Panels1_ymax(3) = -101d0 + History_Panels1_dymin(3) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(3) = 'log_cntr_Rho' + History_Panels1_other_yaxis_reversed(3) = .false. + History_Panels1_other_ymin(3) = -101d0 + History_Panels1_other_ymax(3) = -101d0 + History_Panels1_other_dymin(3) = 0.14 + ! :: + + History_Panels1_yaxis_name(4) = 'log_dt' + History_Panels1_yaxis_reversed(4) = .false. + History_Panels1_ymin(4) = -101d0 + History_Panels1_ymax(4) = -101d0 + History_Panels1_dymin(4) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(4) = '' + History_Panels1_other_yaxis_reversed(4) = .false. + History_Panels1_other_ymin(4) = -101d0 + History_Panels1_other_ymax(4) = -101d0 + History_Panels1_other_dymin(4) = 0.14 + +!----------------------------------------------------------------------- + +! some global grid plot settings + +pgstar_grid_show_title = .true. +pgstar_grid_title_scale = 1.0 +pgstar_grid_title_lw = 3 +pgstar_grid_title_disp = 2.5 ! 1.8 +pgstar_grid_title_coord = 0.5 +pgstar_grid_title_fjust = 0.5 + +pgstar_age_scale = 0.8 +pgstar_age_disp = 3.0 +pgstar_age_coord = 0.0 +pgstar_age_fjust = 0.0 + +pgstar_xaxis_label_scale = 1.3 +pgstar_left_yaxis_label_scale = 1.3 +pgstar_xaxis_label_disp = 2.2 +pgstar_left_yaxis_label_disp = 3.1 +pgstar_right_yaxis_label_disp = 4.1 + +pgstar_model_scale = 0.8 +pgstar_model_disp = 3.0 +pgstar_model_coord = 1.0 +pgstar_model_fjust = 1.0 + +! white_on_black flags -- true means white foreground color on black background +file_white_on_black_flag = .true. +file_device = 'png' ! options 'png' and 'vcps' for png and postscript respectively + +kipp_win_flag=.true. +kipp_file_flag=.true. +Kipp_mix_interval = 1 +Kipp_show_luminosities = .true. + +!Grid1_file_flag = .true. + +!pause_flag = .true. + +Profile_Panels3_xaxis_name = 'mass' +Profile_Panels3_xmin = 0 ! -101d0 +Profile_Panels3_xmax = 5 ! +Profile_Panels3_xaxis_reversed = .false. + +Profile_Panels3_yaxis_name(4) = 'gamma1' +Profile_Panels3_dymin(4) = 0.14 +Profile_Panels3_other_yaxis_name(4) = 'vel_km_per_s' +Profile_Panels3_dymin(4) = 0.14 + +TRho_Profile_xmin = -15 !3.0 +TRho_Profile_xmax = 10 +TRho_Profile_ymin = 3.35 !8.5 +TRho_Profile_ymax = 10.1 + +TRho_logT_min = 9.2d0 +TRho_logRho_min = 6d0 +TRho_logRho_max = 10d0 +TRho_logT_max = 10d0 + +Text_Summary1_name(1,2) = 'time_step_sec' +Text_Summary1_name(2,2) = 'star_age_sec' + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/profile_columns.list b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/profile_columns.list new file mode 100644 index 000000000..f05af0c37 --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/profile_columns.list @@ -0,0 +1,962 @@ +! profile_columns.list -- determines the contents of star model profiles +! you can use a non-standard version by setting profile_columns_file in your inlist + +! units are cgs unless otherwise noted. + +! reorder the following names as desired to reorder columns. +! comment out the name to omit a column (fewer columns => less IO => faster running). +! remove '!' to restore a column. + +! if you have a situation where you want a non-standard set of columns, +! make a copy of this file, edit as desired, and give the new filename in your inlist +! as profile_columns_file. if you are just adding columns, you can 'include' this file, +! and just list the additions in your file. note: to include the standard default +! version, use include '' -- the 0 length string means include the default file. + +! if you need to have something added to the list of options, let me know.... + +! the first few lines of the profile contain general info about the model. +! for completeness, those items are described at the end of this file. + + +! note: you can include another list by doing +! include 'filename' +! include '' means include the default standard list file + + +! the following lines of the profile contain info for 1 zone per row, surface to center. + +! minimal set of enabled columns: + + zone ! numbers start with 1 at the surface + mass ! m/Msun. mass coordinate of outer boundary of cell. + logR ! log10(radius/Rsun) at outer boundary of zone + logT ! log10(temperature) at center of zone + logRho ! log10(density) at center of zone + logP ! log10(pressure) at center of zone + x_mass_fraction_H + y_mass_fraction_He + z_mass_fraction_metals + + +! everything below this line is deactivated + + +!# Structure + !logM ! log10(m/Msun) + !log_mass + dm ! cell mass (grams) + !dm_bar ! boundary mass (grams) average of adjacent dm's + logdq ! log10(dq) + !log_dq + dq_ratio ! dq(k-1)/dq(k) + q ! fraction of star mass interior to outer boundary of this zone + !log_q ! log10(q) + !xq + + !grav ! gravitational acceleration (cm sec^2) + !log_g ! log10 gravitational acceleration (cm sec^2) + !g_div_r ! grav/radius (sec^2) + !r_div_g ! radius/grav (sec^-2) + !cgrav_factor ! = cgrav(k)/standard_cgrav + vel_km_per_s ! velocity at outer boundary of zone (km/s) -- 0 if no velocity variable + + radius ! radius at outer boundary of zone (in Rsun units) + radius_cm ! radius at outer boundary of zone (in centimeters) + !radius_km ! radius at outer boundary of zone (in kilometers) + logR_cm ! log10 radius at outer boundary of zone (in centimeters) + rmid ! radius at center by mass of zone (in Rsun units) + !r_div_R ! fraction of total radius + + velocity ! velocity at outer boundary of zone (cm/s) -- 0 if no velocity variable + v_div_r ! velocity divided by radius + !v_times_t_div_r + !rho_times_r3 ! at face + !log_rho_times_r3 ! at face + !scale_height ! in Rsun units + pressure_scale_height ! in Rsun units + + !m_div_r ! gm/cm + !dmbar_m_div_r + !log_dmbar_m_div_r + !mass_grams ! mass coordinate of outer boundary of cell in grams + mmid ! mass at midpoint of cell (average of mass coords of the cell boundaries) Msun units. + + !m_grav ! total enclosed gravitational mass. Msun units. + !m_grav_div_m_baryonic ! mass_gravitational/mass at cell boundary + !mass_correction_factor ! dm_gravitational/dm (dm is baryonic mass of cell) + + !xm ! mass exterior to point (Msun units) + !dq ! mass of zone as a fraction of total star mass + logxq ! log10(1-q) + !logxm ! log10(xm) + + !xr ! radial distance from point to surface (Rsun) + !xr_cm ! radial distance from point to surface (cm) + !xr_div_R ! radial distance from point to surface in units of star radius + !log_xr ! log10 radial distance from point to surface (Rsun) + !log_xr_cm ! log10 radial distance from point to surface (cm) + !log_xr_div_R ! log10 radial distance from point to surface in units of star radius + + dr ! r(outer edge) - r(inner edge); radial extent of cell in cm. + log_dr ! log10 cell width (cm) + !dv ! v(inner edge) - v(outer edge); rate at which delta_r is shrinking (cm/sec). + + !dt_dv_div_dr ! dt*dv/dr; need to have this << 1 for every cell + !dr_div_R ! cell width divided by star R + !log_dr_div_R ! log10 cell width divided by star R + !dr_div_rmid ! cell width divided by rmid + !log_dr_div_rmid ! log(dr_div_rmid) + + dr_div_cs ! cell sound crossing time (sec) + log_dr_div_cs ! log10 cell sound crossing time (sec) + !dr_div_cs_yr ! cell sound crossing time (years) + !log_dr_div_cs_yr ! log10 cell sound crossing time (years) + + !acoustic_radius ! sound time from center to outer cell boundary (sec) + !log_acoustic_radius ! log10(acoustic_radius) (sec) + acoustic_depth ! sound time from surface to outer cell boundary (sec) + !log_acoustic_depth ! log10(acoustic_depth) (sec) + !acoustic_r_div_R_phot + + !cell_collapse_time ! only set if doing explicit hydro + ! time (seconds) for cell inner edge to catch cell outer edge at current velocities + ! 0 if distance between inner and outer is increasing + log_cell_collapse_time ! log of cell_collapse_time + + !compression_gradient + + + +!# Thermodynamics + temperature ! temperature at center of zone + !logT_face ! log10(temperature) at outer boundary of zone + !logT_bb ! log10(black body temperature) at outer boundary of zone + !logT_face_div_logT_bb + + energy ! internal energy (ergs/g) + logE ! log10(specific internal energy) at center of zone + rho ! density + !density ! rho + + entropy ! specific entropy divided by (avo*kerg) + !logS ! log10(specific entropy) + !logS_per_baryon ! log10(specific entropy per baryon / kerg) + + pressure ! total pressure at center of zone (pgas + prad) + !prad ! radiation pressure at center of zone + !pgas ! gas pressure at center of zone (electrons and ions) + logPgas ! log10(pgas) + pgas_div_ptotal ! pgas/pressure + + eta ! electron degeneracy parameter (eta >> 1 for significant degeneracy) + mu ! mean molecular weight per gas particle (ions + free electrons) + + grada ! dlnT_dlnP at constant S + !dE_dRho ! at constant T + !cv ! specific heat at constant volume + !cp ! specific heat at constant total pressure + + !log_CpT + gamma1 ! dlnP_dlnRho at constant S + !gamma3 ! gamma3 - 1 = dlnT_dlnRho at constant S + !gam ! plasma interaction parameter (> 160 or so means starting crystallization) + free_e ! free_e is mean number of free electrons per nucleon + !logfree_e ! log10(free_e), free_e is mean number of free electrons per nucleon + !chiRho ! dlnP_dlnRho at constant T + !chiT ! dlnP_dlnT at constant Rho + + csound ! sound speed + log_csound + !csound_face ! sound speed (was previously called csound_at_face) + !cs_at_cell_bdy ! sound speed at cell boundary (csound is at cell center) + !v_div_cs ! velocity divided by sound speed + v_div_csound ! velocity divided by sound speed + !div_v + + !thermal_time_to_surface ! in seconds + !log_thermal_time_to_surface + !t_rad + !log_t_rad + !log_t_sound + !log_t_thermal + + !eos_phase + !eos_frac_OPAL_SCVH + !eos_frac_HELM + !eos_frac_Skye + !eos_frac_PC + !eos_frac_FreeEOS + !eos_frac_CMS + !eos_frac_ideal + + !pgas_div_p + !prad_div_pgas + !prad_div_pgas_div_L_div_Ledd + !pressure_scale_height_cm + + !eps_grav_composition_term + !eps_grav_plus_eps_mdot + + !chiRho_for_partials + !chiT_for_partials + !rel_diff_chiRho_for_partials + !rel_diff_chiT_for_partials + + !latent_ddlnRho + !latent_ddlnT + + !log_P_face + !log_Ptrb + !log_cp_T_div_t_sound + + !QQ + + +!# Mass accretion + eps_grav ! -T*ds/dt (negative for expansion) + !log_abs_eps_grav_dm_div_L + !log_abs_v ! log10(abs(velocity)) (cm/s) + !log_mdot_cs + !log_mdot_v + !eps_mdot + !env_eps_grav + !xm_div_delta_m + !log_xm_div_delta_m + + +!# Nuclear energy generation + !signed_log_eps_grav ! sign(eps_grav)*log10(max(1,abs(eps_grav))) + !signed_log_eps_nuc + !net_nuclear_energy ! erg/gm/s from nuclear reactions minus all neutrino losses + ! The value plotted is net_nuclear_energy = sign(val)*log10(max(1,abs(val))) + ! where val = net nuclear energy minus all neutrino losses. + !net_energy ! net_energy + eps_grav. + ! The value plotted is net_energy = sign(val)*log10(max(1,abs(val))) + ! where val = net nuclear energy plus eps_grav minus all neutrino losses. + !eps_nuc_plus_nuc_neu + !eps_nuc_minus_non_nuc_neu + !eps_nuc_start + + eps_nuc ! ergs/g/sec from nuclear reactions (including losses to reaction neutrinos) + !log_abs_eps_nuc + !d_lnepsnuc_dlnd + !d_epsnuc_dlnd + !deps_dlnd_face + ! (was previously called deps_dlnd_at_face) + !d_lnepsnuc_dlnT + !d_epsnuc_dlnT + !deps_dlnT_face + ! (was previously called deps_dlnT_at_face) + !eps_nuc_neu_total ! erg/gm/sec as neutrinos from nuclear reactions + + non_nuc_neu ! non-nuclear-reaction neutrino losses + !nonnucneu_plas ! plasmon neutrinos (for collective reactions like gamma_plasmon => nu_e + nubar_e) + !nonnucneu_brem ! bremsstrahlung (for reactions like e- + (z,a) => e- + (z,a) + nu + nubar) + !nonnucneu_phot ! photon neutrinos (for reactions like e- + gamma => e- + nu_e + nubar_e) + !nonnucneu_pair ! pair production (for reactions like e+ + e- => nu_e + nubar_e) + !nonnucneu_reco ! recombination neutrinos (for reactions like e- (continuum) => e- (bound) + nu_e + nubar_e) + + ! ergs/g/sec for reaction categories + add_reaction_categories ! this adds all the reaction categories + ! NOTE: you can list specific categories by giving their names (from chem_def) + pp + cno + tri_alpha + !c_alpha + !n_alpha + !o_alpha + !ne_alpha + !na_alpha + !mg_alpha + !si_alpha + !s_alpha + !ar_alpha + !ca_alpha + !ti_alpha + !fe_co_ni + !c12_c12 + !c12_o16 + !o16_o16 + !photo + !pnhe4 + !other + + ! adds columns for all of the reactions that are in the current net + ! Note that if using op_split_burn=.true. then zones which have been split will report 0 for their rates + !add_raw_rates ! raw reaction rates, reactions/second + !add_screened_rates ! screened reaction rates reactions/second + !add_eps_nuc_rates ! Nuclear energy (minus neutrino losses) released erg/s + !add_eps_neu_rates ! Neutrino losses erg/s + + ! individual reactions (as many as desired) + ! use list_net_reactions = .true. in star_job to list all reactions in the current net + ! reactions/second + !raw_rate r_h1_h1_ec_h2 + !raw_rate r_h1_h1_wk_h2 + + burn_num_iters ! Number of split_burn iterations taken + !burn_avg_epsnuc + !log_burn_avg_epsnuc + +!# Composition + !x_mass_fraction_H + !y_mass_fraction_He + !z_mass_fraction_metals + abar ! average atomic weight (g/mole) + zbar ! average charge + z2bar ! average charge^2 + ye ! average charge per baryon = proton fraction + + x ! hydrogen mass fraction + !log_x + y ! helium mass fraction + !log_y + z ! metallicity + log_z ! metallicity + + add_abundances ! this adds all of the isos that are in the current net + ! NOTE: you can list specific isotopes by giving their names (from chem_def) + !h1 + !he3 + !he4 + !c12 + !n14 + !o16 + + add_log_abundances ! this adds log10 of all of the isos that are in the current net + ! NOTE: you can list specific isotopes by giving their names (from chem_def) + !log h1 + !log he3 + !log he4 + !log c12 + !log n14 + !log o16 + + ! log concentration of species + ! concentration = number density / number density of electrons + ! Ci = (Xi/Ai) / sum(Zi*Xi/Ai) [see Thoul et al, ApJ 421:828-842, 1994] + !log_concentration h1 + !log_concentration he4 + + + ! typical charge for given species + ! (used by diffusion) + !typical_charge he4 + !typical_charge c12 + !typical_charge fe52 + + ! ionization state for given species + ! (same as typical charge, except that it's unsmoothed) + !ionization he4 + !ionization c12 + !ionization fe52 + + !cno_div_z ! abundance of c12, n14, and o16 as a fraction of total z + + + + +!# Opacity + opacity ! opacity measured at center of zone + log_opacity ! log10(opacity) + !dkap_dlnrho_face ! partial derivative of opacity wrt. ln rho (at T=const) at outer edge of cell + ! (was previously called dkap_dlnrho_at_face) + !dkap_dlnT_face ! partial derivative of opacity wrt. ln T (at rho=const) at outer edge of cell + ! (was previously called dkap_dlnT_at_face) + !kap_frac_lowT ! fraction of opacity from lowT tables + !kap_frac_highT ! fraction of opacity from highT tables + !kap_frac_Type2 ! fraction of opacity from Type2 tables + !kap_frac_Compton ! fraction of opacity from Compton_Opacity + !kap_frac_op_mono ! fraction of opacity from OP mono + + !log_kap + log_kap_times_factor + + !log_c_div_tau + !xtau + !xlogtau + !logtau_sub_xlogtau + +!# Luminosity + luminosity ! luminosity at outer boundary of zone (in Lsun units) + logL ! log10(max(1d-2,L/Lsun)) + !log_Lrad + !log_Ledd ! log10(Leddington/Lsun) -- local Ledd, 4 pi clight G m / kap + log_L_div_Ledd ! log10(max(1d-12,L/Leddington)) + !log_Lrad_div_Ledd + !log_Lrad_div_L + !signed_log_power ! sign(L)*log10(max(1,abs(L))) + + lum_adv + lum_conv + !lum_conv_MLT + !lum_div_Ledd + lum_erg_s + lum_plus_lum_adv + lum_rad + + !log_L_div_CpTMdot + log_abs_lum_erg_s + + !L + !Lc + !Lc_div_L + !Lr + !Lr_div_L + !Lt + !Lt_div_L + +!# Energetics + total_energy ! specific total energy of cell (ergs/g). internal+potential+kinetic+rotation. + !cell_specific_IE + !cell_specific_KE + !cell_IE_div_IE_plus_KE + !cell_KE_div_IE_plus_KE + + !cell_ie_div_star_ie + !cell_internal_energy_fraction + !cell_internal_energy_fraction_start + !cell_specific_PE + + !log_cell_ie_div_star_ie + !log_cell_specific_IE + + !ergs_eps_grav_plus_eps_mdot + !ergs_error + !ergs_error_integral + !ergs_mdot + !ergs_rel_error_integral + !dm_eps_grav + + !dE + + !etrb + !log_etrb + !extra_grav + !log_rel_E_err + + !total_energy_sign + +!# Convection + mlt_mixing_length ! mixing length for mlt (cm) + !mlt_mixing_type ! value returned by mlt + !mlt_Pturb + !alpha_mlt + + conv_vel ! convection velocity (cm/sec) + log_conv_vel ! log10 convection velocity (cm/sec) + + conv_L_div_L + log_conv_L_div_L + !lum_conv_div_lum_rad + !lum_rad_div_L_Edd + !lum_conv_div_lum_Edd + !lum_conv_div_L + !lum_rad_div_L + !lum_rad_div_L_Edd_sub_fourPrad_div_PchiT ! density increases outward if this is > 0 + ! see Joss, Salpeter, and Ostriker, "Critical Luminosity", ApJ 181:429-438, 1973. + + gradT ! mlt value for required temperature gradient dlnT/dlnP + + gradr ! dlnT/dlnP required for purely radiative transport + !grad_temperature ! smoothed dlnT/dlnP at cell boundary + !grad_density ! smoothed dlnRho/dlnP at cell boundary + + !gradL ! gradient for Ledoux criterion for convection + !sch_stable ! 1 if grada > gradr, 0 otherwise + !ledoux_stable ! 1 if gradL > gradr, 0 otherwise + + !grada_sub_gradT + gradT_sub_grada ! gradT-grada at cell boundary + !gradT_div_grada ! gradT/grada at cell boundary + + !gradr_sub_gradT + !gradT_sub_gradr ! gradT-gradr at cell boundary + !gradT_div_gradr ! gradT/gradr at cell boundary + + !log_gradT_div_gradr ! log10 gradT/gradr at cell boundary + !log_mlt_Gamma ! convective efficiency + conv_vel_div_csound ! convection velocity divided by sound speed + !conv_vel_div_L_vel ! L_vel is velocity needed to carry L by convection; L = 4*pi*r^2*rho*vel**3 + log_mlt_D_mix ! log10 diffusion coefficient for mixing from mlt (cm^2/sec) + + !gradr_div_grada ! gradr/grada_face; > 1 => Schwarzschild unstable for convection + !gradr_sub_grada ! gradr - grada_face; > 0 => Schwarzschild unstable for convection + + !gradL_sub_gradr + !gradP_div_rho + !gradT_excess_effect + !gradT_rel_err + !gradT_sub_a + !grada_face + !grada_sub_gradr + !diff_grads + !log_diff_grads + + !mlt_D + !mlt_Gamma + !mlt_Y_face + !mlt_Zeta + !mlt_gradT + !mlt_log_abs_Y + !mlt_vc + !log_mlt_vc + !dvc_dt_TDC_div_g + + !superad_reduction_factor + !conv_vel_div_mlt_vc + + !log_Lconv + !log_Lconv_div_L + +!# Mixing + !mixing_type ! mixing types are defined in mesa/const/public/const_def + log_D_mix ! log10 diffusion coefficient for mixing in units of cm^2/second (Eulerian) + !log_D_mix_non_rotation + !log_D_mix_rotation + + log_D_conv ! D_mix for regions where mix_type = convective_mixing + !log_D_leftover ! D_mix for regions where mix_type = leftover_convective_mixing + log_D_semi ! D_mix for regions where mix_type = semiconvective_mixing + log_D_ovr ! D_mix for regions where mix_type = overshoot_mixing + log_D_thrm ! D_mix for regions where mix_type = thermohaline_mixing + log_D_minimum ! D_mix for regions where mix_type = minimum_mixing + log_D_rayleigh_taylor ! D_mix for regions where mix_type = rayleigh_taylor_mixing + !log_D_anon ! D_mix for regions where mix_type = anonymous_mixing + log_D_omega + + log_sig_mix ! sig(k) is mixing flow across face k in (gm sec^1) + ! sig(k) = D_mix*(4*pi*r(k)**2*rho_face)**2/dmavg + + !dominant_isoA_for_thermohaline + !dominant_isoZ_for_thermohaline + !gradL_composition_term + + mix_type + + + +!# Optical Depth + tau ! optical depth + !log_column_depth ! log10 column depth, exterior mass / area (g cm^-2) + !log_radial_depth ! log10 radial distance to surface (cm) + logtau ! log10(optical depth) at cell face + !tau_eff ! tau that gives the local P == P_atm if this location at surface + ! tau_eff = kap*(P/g - Pextra_factor*(L/M)/(6*pi*clight*cgrav)) + !tau_eff_div_tau + + + +!# Rotation + omega ! angular velocity = j_rot/i_rot + log_omega + log_j_rot + log_J_div_M53 ! J is j*1e-15 integrated from center; M53 is m^(5/3) + log_J_inside ! J_inside is j_rot integrated from center + !shear ! -dlnomega/dlnR + log_abs_shear ! log10(abs(dlnomega/dlnR)) + !richardson_number + i_rot ! specific moment of inertia at cell boundary + j_rot ! specific angular momentum at cell boundary + v_rot ! rotation velocity at cell boundary (km/sec) + !w_div_w_crit_roche !ratio of rotational velocity to keplerian at the equator + !without the contribution from the Eddington factor + fp_rot ! rotation factor for pressure + ft_rot ! rotation factor for temperature + !ft_rot_div_fp_rot ! gradr factor + + !log_am_nu_non_rot ! log10(am_nu_non_rot) + !log_am_nu_rot ! log10(am_nu_rot) + log_am_nu ! log10(am_nu_non_rot + am_nu_rot) + + r_polar ! (Rsun) + log_r_polar ! log10 (Rsun) + r_equatorial ! (Rsun) + log_r_equatorial ! log10 (Rsun) + r_e_div_r_p ! equatorial/r_polar + omega_crit ! breakup angular velocity = sqrt(G M / equatorial^3) + omega_div_omega_crit + + !am_log_nu_omega ! for diffusion of omega + !am_log_nu_j ! for diffusion of angular momentum + + !am_log_nu_rot ! diffusion of angular momentum driven by rotation + !am_log_nu_non_rot ! diffusion driven by other sources, e.g. convection + + !am_log_sig_omega ! for diffusion of omega + !am_log_sig_j ! for diffusion of angular momentum + am_log_sig ! == am_log_sig_omega + + !am_log_D_visc ! diffusion coeff for kinematic viscosity + am_log_D_DSI ! diffusion coeff for dynamical shear instability + am_log_D_SH ! diffusion coeff for Solberg-Hoiland instability + am_log_D_SSI ! diffusion coeff for secular shear instability + am_log_D_ES ! diffusion coeff for Eddington-Sweet circulation + am_log_D_GSF ! diffusion coeff for Goldreich-Schubert-Fricke instability + am_log_D_ST ! Spruit dynamo mixing diffusivity + am_log_nu_ST ! Spruit dynamo effective viscosity + + dynamo_log_B_r ! (Gauss) + dynamo_log_B_phi ! (Gauss) + + !am_domega_dlnR + !log_abs_dlnR_domega + + !w_div_w_crit_roche2 + + +!# Diffusion + ! electric field from element diffusion calculation + !e_field + !log_e_field + + ! gravitational field from element diffusion calculation + !g_field_element_diffusion + !log_g_field_element_diffusion + + !eE_div_mg_element_diffusion + !log_eE_div_mg_element_diffusion + + ! element diffusion velocity for species + !edv h1 + !edv he4 + !edv o16 + + ! Energy generated by Ne22 sedimentation. + !eps_WD_sedimentation + !log_eps_WD_sedimentation + + !eps_diffusion + !log_eps_diffusion + + !diffusion_D h1 ! self diffusion coeff + !diffusion_dX h1 ! change in h1 mass fraction from diffusion + !diffusion_dX he4 ! change in he4 mass fraction from diffusion + !diffusion_dX n20 ! change in n20 mass fraction from diffusion + + !v_rad h1 ! velocity from radiative levitation + !v_rad he4 ! velocity from radiative levitation + !v_rad ne20 ! velocity from radiative levitation + + !log_g_rad h1 ! log10 acceleration from radiative levitation + !log_g_rad he4 ! log10 acceleration from radiative levitation + !log_g_rad ne20 ! log10 acceleration from radiative levitation + +!# Phase Separation + !eps_phase_separation + +!# Oscillations + !brunt_N2 ! brunt-vaisala frequency squared + !brunt_N2_structure_term + !brunt_N2_composition_term + !log_brunt_N2_structure_term + !log_brunt_N2_composition_term + !brunt_A ! = N^2*r/g + !brunt_A_div_x2 ! x = r(k)/r(1) + !brunt_N2_dimensionless ! N2 in units of 3GM/R^3 + !brunt_N_dimensionless ! N in units of sqrt(3GM/R^3) + !brunt_frequency ! cycles per day + !brunt_N ! sqrt(abs(brunt_N2)) + !log_brunt_N ! log10(brunt_N) + !log_brunt_N2 ! log10(brunt_N2) + !log_brunt_N2_dimensionless ! log10(brunt_N2_dimensionless) + + !brunt_B ! smoothed numerical difference + !brunt_nonB ! = grada - gradT + !log_brunt_B ! smoothed numerical difference + !log_brunt_nonB ! = grada - gradT + + !sign_brunt_N2 ! sign of brunt_N2 (+1 for Ledoux stable; -1 for Ledoux unstable) + !brunt_nu ! brunt_frequency in microHz + !log_brunt_nu ! brunt_frequency in microHz + + !lamb_S ! lamb frequency for l=1: S = sqrt(2)*csound/r (rad/s) + !lamb_S2 ! squared lamb frequency for l=1: S2 = 2*(csound/r)^2 (rad^2/s^2) + + !lamb_Sl1 ! lamb frequency for l=1; = sqrt(2)*csound/r (microHz) + !lamb_Sl2 ! lamb frequency for l=2; = sqrt(6)*csound/r (microHz) + !lamb_Sl3 ! lamb frequency for l=3; = sqrt(12)*csound/r (microHz) + !lamb_Sl10 ! lamb frequency for l=10; = sqrt(110)*csound/r (microHz) + + !log_lamb_Sl1 ! log10(lamb_Sl1) + !log_lamb_Sl2 ! log10(lamb_Sl2) + !log_lamb_Sl3 ! log10(lamb_Sl3) + !log_lamb_Sl10 ! log10(lamb_Sl10) + + !brunt_N_div_r_integral ! integral from center of N*dr/r + !k_r_integral ! integral from center of k_r*dr + !brunt_N2_sub_omega2 + !sl2_sub_omega2 + + +!# RSP + + !rsp_Chi ! dlnP_dlnRho + !rsp_Et ! Specific turbulent energy + !rsp_logEt ! Log specific turbulent energy + !rsp_erad ! Specific internal (radiative) energy + !rsp_log_erad ! Log specific internal (radiative) energy + !rsp_Hp_face ! Pressure scale height at cell face + !rsp_Lc ! Convective luminosity + !rsp_Lc_div_L ! Convective luminosity div total luminosity + !rsp_Lr ! Radiative luminosity + !rsp_Lr_div_L ! Radiative luminosity div total luminosity + !rsp_Lt ! Turbulent luminosity + !rsp_Lt_div_L ! Turbulent luminosity div total luminosity + !rsp_Pt ! Turbulent pressure, p_t, see Table 1 in MESA5 + !rsp_Uq ! Viscous momentum transfer rate, U_q, see Table 1 in MESA5 + !rsp_Eq ! Viscous energy transfer rate, epsilon_q, see Table 1 in MESA5 + !rsp_Pvsc ! Artificial viscosity, p_av, see Table 1 in MESA5 + !rsp_gradT ! Temperature gradient + !rsp_Y_face ! Superadiabatic gradient at cell face, Y_sag, see Table 1 in MESA5 + !rsp_damp ! Turbulent dissipation, D, see Table 1 in MESA5 + !rsp_dampR ! Radiative cooling, D_r, see Table 1 in MESA5 + !rsp_sink ! Sum of turbulent dissipation and radiative cooling terms + !rsp_src ! Source function, S, see Table 1 in MESA5 + !rsp_src_snk ! Convective coupling, C, see Table 1 in MESA5 + !rsp_heat_exchange_timescale ! 1d0/(clight * opacity * density) + !rsp_log_heat_exchange_timescale + !rsp_log_dt_div_heat_exchange_timescale ! Ratio of time step to heat exchange timescale + !w + !log_w + + !COUPL + !DAMP + !DAMPR + !SOURCE + !Chi + !Eq + !Hp_face + !PII_face + !Ptrb + !Pvsc + !Uq + !Y_face + +!# RTI + + RTI_du_diffusion_kick + alpha_RTI + boost_for_eta_RTI + dedt_RTI + dudt_RTI + eta_RTI + log_alpha_RTI + !log_boost_for_eta_RTI + log_eta_RTI + !log_etamid_RTI + log_lambda_RTI_div_Hrho + log_sig_RTI + !log_sigmid_RTI + !log_source_RTI + log_source_minus_alpha_RTI + log_source_plus_alpha_RTI + !source_minus_alpha_RTI + !source_plus_alpha_RTI + lambda_RTI + +!# Hydrodynamics + + + !v + v_div_v_escape + !v_div_vesc + !v_kms + !log_v_escape + + u + u_face + + P_face + + +!# Extras + extra_heat + !extra_L ! extra_heat integrated from center (Lsun) + !log_extra_L ! log10 integrated from center (Lsun) + !log_irradiation_heat + + !extra_jdot ! set in other_torque routine + !extra_omegadot ! set in other_torque routine + + extra_opacity_factor ! set in other_opacity_factor routine + + ! diffusion factor profile for species, set in other_diffusion_factor routine + !extra_diffusion_factor h1 + !extra_diffusion_factor he4 + !extra_diffusion_factor o16 + + + +!# Miscellaneous + + !dlog_h1_dlogP ! (log(h1(k)) - log(h1(k-1)))/(log(P(k)) - log(P(k-1))) + !dlog_he3_dlogP + !dlog_he4_dlogP + !dlog_c12_dlogP + !dlog_c13_dlogP + !dlog_n14_dlogP + !dlog_o16_dlogP + !dlog_ne20_dlogP + !dlog_mg24_dlogP + !dlog_si28_dlogP + + !dlog_pp_dlogP + !dlog_cno_dlogP + !dlog_3alf_dlogP + + !dlog_burn_c_dlogP + !dlog_burn_n_dlogP + !dlog_burn_o_dlogP + + !dlog_burn_ne_dlogP + !dlog_burn_na_dlogP + !dlog_burn_mg_dlogP + + !dlog_cc_dlogP + !dlog_co_dlogP + !dlog_oo_dlogP + + !dlog_burn_si_dlogP + !dlog_burn_s_dlogP + !dlog_burn_ar_dlogP + !dlog_burn_ca_dlogP + !dlog_burn_ti_dlogP + !dlog_burn_cr_dlogP + !dlog_burn_fe_dlogP + + !dlog_pnhe4_dlogP + !dlog_photo_dlogP + !dlog_other_dlogP + + !logR_kap ! logR = logRho - 3*logT + 18 ; used in kap tables + !logW ! logW = logPgas - 4*logT + !logQ ! logQ = logRho - 2*logT + 12 + !logV ! logV = logRho - 0.7*logE + 20 + + !log_CpT_absMdot_div_L ! log10(s% Cp(k)*s% T(k)*abs(s% mstar_dot)/s% L(k)) + + !delta_r ! r - r_start, change during step + !delta_L ! L - L_start, change during step + !delta_cell_vol ! cell_vol - cell_vol_start, change during step + !delta_entropy ! entropy - entropy_start, change during step (does not include effects of diffusion) + !delta_T ! T - T_start, change during step + !delta_rho ! rho - rho_start, change during step + !delta_eps_nuc ! eps_nuc - eps_nuc_start, change during step + !delta_mu ! mu - mu_start, change during step + + zFe ! mass fraction of "Fe" = Fe+Co+Ni + !log_zFe + dPdr_dRhodr_info + !log_sig_raw_mix + + !d_u_div_rmid + !d_u_div_rmid_start + !d_v_div_r_dm + !d_v_div_r_dr + + !dlnP_dlnR + !dlnRho_dlnR + !dlnRho_dr + !dlnX_dr + !dlnY_dr + dlogR + !dPdr_div_grav + dPdr_info + dRhodr_info + !dRstar_div_dr + !dr_ratio + !dm_eps_grav + !dr_ratio + !dt_cs_div_dr + !dt_div_tau_conv + !dt_times_conv_vel_div_mixing_length + !log_dt_cs_div_dr + !log_dt_div_tau_conv + !log_dt_times_conv_vel_div_mixing_length + log_du_kick_div_du + !du + !dvdt_dPdm + !dvdt_grav + + !tau_conv + !tau_cool + !tau_epsnuc + !tau_qhse + + !max_abs_xa_corr + + !tdc_num_iters + + !k + + +! the first few lines of the profile contain general info about the model. +! for completeness, those items are described here. + + ! initial mass and Z + ! initial_mass + ! initial_z + ! general properties of the current state + ! model_number + ! num_zones + ! star_age + ! time_step + ! properties at the photosphere + ! Teff + ! photosphere_L + ! photosphere_r + ! properties at the outermost zone of the model + ! log_surface_L + ! log_surface_radius + ! log_surface_temp + ! properties near the center of the model + ! log_center_temp + ! log_center_density + ! log_center_P + ! center_eta + ! abundances near the center + ! center_h1 + ! center_he3 + ! center_he4 + ! center_c12 + ! center_n14 + ! center_o16 + ! center_ne20 + ! information about total mass + ! star_mass + ! star_mdot + ! star_mass_h1 + ! star_mass_he3 + ! star_mass_he4 + ! star_mass_c12 + ! star_mass_n14 + ! star_mass_o16 + ! star_mass_ne20 + ! locations of abundance transitions + ! he_core_mass + ! c_core_mass + ! o_core_mass + ! si_core_mass + ! fe_core_mass + ! location of optical depths 10 and 100 + ! tau10_mass + ! tau10_radius + ! tau100_mass + ! tau100_radius + ! time scales + ! dynamic_time + ! kh_timescale + ! nuc_timescale + ! various kinds of total power + ! power_nuc_burn + ! power_h_burn + ! power_he_burn + ! power_neu + ! a few control parameter values + ! h1_boundary_limit + ! he4_boundary_limit + ! c12_boundary_limit + ! burn_min1 + ! burn_min2 diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/re b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/re new file mode 100755 index 000000000..7093783a3 --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/re @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +shopt -u expand_aliases + +photo_directory=photos + +function most_recent_photo { + ls -tp "$photo_directory" | grep -v / | head -1 +} + +if [ $# -eq 0 ] +then + photo=$(most_recent_photo) +else + photo=$1 +fi + +if [ -z "$photo" ] || ! [ -f "$photo_directory/$photo" ] +then + echo "specified photo ($photo) does not exist" + exit 1 +fi + +echo "restart from $photo" +if ! cp "$photo_directory/$photo" restart_photo +then + echo "failed to copy photo ($photo)" + exit 1 +fi + +make run diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/rn b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/rn new file mode 100755 index 000000000..68233efd1 --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/rn @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" + +make run + +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" + +echo 'finished' diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/rn1 b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/rn1 new file mode 100755 index 000000000..f4ce7695f --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/rn1 @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +rm -f restart_photo + +make run diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/src/run.f90 b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/src/run.f90 new file mode 100644 index 000000000..76d423f1a --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/src/run.f90 @@ -0,0 +1,15 @@ +program run + use run_star_support, only: do_read_star_job + use run_star, only: do_run_star + + implicit none + + integer :: ierr + + ierr = 0 + call do_read_star_job('inlist', ierr) + if (ierr /= 0) stop 1 + + call do_run_star + +end program run diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/src/run_star_extras.f90 b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/src/run_star_extras.f90 new file mode 100644 index 000000000..9cb24ae6e --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/src/run_star_extras.f90 @@ -0,0 +1,252 @@ +! *********************************************************************** +! +! Copyright (C) 2010 The MESA Team +! +! This program is free software: you can redistribute it and/or modify +! it under the terms of the GNU Lesser General Public License +! as published by the Free Software Foundation, +! either version 3 of the License, or (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +! See the GNU Lesser General Public License for more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with this program. If not, see . +! +! *********************************************************************** + + module run_star_extras + + use star_lib + use star_def + use const_def + use math_lib + use auto_diff + + implicit none + + include "test_suite_extras_def.inc" + + integer, parameter :: i_dutch_scaling_factor_after_zams = 25 + real(dp), parameter :: zams_h1_depletion = 0.03d0 + +! here are the x controls used below + +!alpha_mlt_routine + !alpha_H = s% x_ctrl(21) + !alpha_other = s% x_ctrl(22) + !H_limit = s% x_ctrl(23) + +! Example of one extra value to preserve across photo restarts. +! real(dp) :: example_photo_value + + contains + + include "test_suite_extras.inc" + + + subroutine extras_controls(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + s% extras_startup => extras_startup + s% extras_start_step => extras_start_step + s% extras_check_model => extras_check_model + s% extras_finish_step => extras_finish_step + s% extras_after_evolve => extras_after_evolve + s% how_many_extra_history_columns => how_many_extra_history_columns + s% data_for_extra_history_columns => data_for_extra_history_columns + s% how_many_extra_profile_columns => how_many_extra_profile_columns + s% data_for_extra_profile_columns => data_for_extra_profile_columns + s% other_photo_read => extras_photo_read + s% other_photo_write => extras_photo_write + s% other_alpha_mlt => alpha_mlt_routine + end subroutine extras_controls + + + subroutine extras_photo_read(id, iounit, ierr) + integer, intent(in) :: id, iounit + integer, intent(out) :: ierr + ierr = 0 + !read(iounit, iostat=ierr) example_photo_value + end subroutine extras_photo_read + + + subroutine extras_photo_write(id, iounit) + integer, intent(in) :: id, iounit + !write(iounit) example_photo_value + end subroutine extras_photo_write + + + subroutine alpha_mlt_routine(id, ierr) + use chem_def, only: ih1 + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + integer :: k, h1 + real(dp) :: alpha_H, alpha_other, H_limit + include 'formats' + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + alpha_H = s% x_ctrl(21) + alpha_other = s% x_ctrl(22) + H_limit = s% x_ctrl(23) + h1 = s% net_iso(ih1) + !write(*,1) 'alpha_H', alpha_H + !write(*,1) 'alpha_other', alpha_other + !write(*,1) 'H_limit', H_limit + !write(*,2) 'h1', h1 + !write(*,2) 's% nz', s% nz + if (alpha_H <= 0 .or. alpha_other <= 0 .or. h1 <= 0) return + do k=1,s% nz + if (s% xa(h1,k) >= H_limit) then + s% alpha_mlt(k) = alpha_H + else + s% alpha_mlt(k) = alpha_other + end if + !write(*,2) 'alpha_mlt', k, s% alpha_mlt(k), + end do + !stop + end subroutine alpha_mlt_routine + + + subroutine extras_startup(id, restart, ierr) + integer, intent(in) :: id + logical, intent(in) :: restart + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + call test_suite_startup(s, restart, ierr) + + end subroutine extras_startup + + + integer function extras_start_step(id) + integer, intent(in) :: id + integer :: ierr + real(dp) :: zams_h1_limit + type (star_info), pointer :: s + ierr = 0 + extras_start_step = keep_going + call star_ptr(id, s, ierr) + if (ierr /= 0) return + if (s% Dutch_scaling_factor > 0d0) return + zams_h1_limit = max(0d0, min(1d0, 1d0 - (s% initial_z + s% initial_y))) - & + zams_h1_depletion + if (s% center_h1 < zams_h1_limit) & + s% Dutch_scaling_factor = s% x_ctrl(i_dutch_scaling_factor_after_zams) + end function extras_start_step + + + subroutine extras_after_evolve(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + include 'formats' + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + write(*,'(A)') + ! put target info in TestHub output + testhub_extras_names(1) = 'fe_core_mass'; testhub_extras_vals(1) = s% fe_core_mass + + if(s% fe_core_mass < 1d0) then + write(*,1) "Bad fe_core_mass", s%fe_core_mass + else + if(s% fe_core_infall > s% fe_core_infall_limit) then + write(*,'(a)') 'all values are within tolerance' + else + write(*,'(a)') "Bad fe core infall" + end if + end if + call test_suite_after_evolve(s, ierr) + end subroutine extras_after_evolve + + + ! returns either keep_going, retry, or terminate. + integer function extras_check_model(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_check_model = keep_going + end function extras_check_model + + + integer function how_many_extra_history_columns(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_history_columns = 0 + end function how_many_extra_history_columns + + + subroutine data_for_extra_history_columns(id, n, names, vals, ierr) + integer, intent(in) :: id, n + character (len=maxlen_history_column_name) :: names(n) + real(dp) :: vals(n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + end subroutine data_for_extra_history_columns + + + integer function how_many_extra_profile_columns(id) + use star_def, only: star_info + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_profile_columns = 1 + end function how_many_extra_profile_columns + + + subroutine data_for_extra_profile_columns(id, n, nz, names, vals, ierr) + use star_def, only: star_info, maxlen_profile_column_name + use const_def, only: dp + integer, intent(in) :: id, n, nz + character (len=maxlen_profile_column_name) :: names(n) + real(dp) :: vals(nz,n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + integer :: k + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + names(1) = 'zbar_div_abar' + do k=1,s% nz + vals(k,1) = s% zbar(k)/s% abar(k) + end do + end subroutine data_for_extra_profile_columns + + ! returns either keep_going or terminate. + integer function extras_finish_step(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_finish_step = keep_going + if (extras_finish_step == terminate) & + s% termination_code = t_extras_finish_step + end function extras_finish_step + + end module run_star_extras diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/testhub.yml b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/testhub.yml new file mode 100644 index 000000000..2b486a02c --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/testhub.yml @@ -0,0 +1,15 @@ + runtime_minutes: 16.71 + model_number: 2344 + star_age: 1.0136396734299462E+07 + num_retries: 11 + log_rel_run_E_err: -4.5194878652040105 + steps: 266 + retries: 11 + redos: 0 + solver_calls_made: 277 + solver_calls_failed: 11 + solver_iterations: 2052 + extra_testhub_names: + - 'fe_core_mass' + extra_testhub_vals: + - 1.6762420545401346E+00 diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/Makefile b/star/dev_cases_massive_stars/60M_envelope_issues/Makefile new file mode 100644 index 000000000..c779b9d6d --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/Makefile @@ -0,0 +1 @@ +include $(MESA_DIR)/star/work/Makefile \ No newline at end of file diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/README.rst b/star/dev_cases_massive_stars/60M_envelope_issues/README.rst new file mode 100644 index 000000000..8fbfe981e --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/README.rst @@ -0,0 +1,20 @@ +.. _60M_envelope_issues: + +******************* +60M_envelope_issues +******************* + +This dev case targets a superadiabatic envelope during H/He burning. + +The case creates a 60 |Msun| pre-main-sequence model and evolves it with +pgstar settings in ``inlist_pgstar``. + +Inlists +======= + +This dev case has two inlist files. + +* ``inlist`` contains the model setup and evolution controls. +* ``inlist_pgstar`` contains the pgstar plot settings loaded by ``inlist``. + +Last-Updated: 12May2026 diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/ck b/star/dev_cases_massive_stars/60M_envelope_issues/ck new file mode 100755 index 000000000..78ca63a8c --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/ck @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +# this provides the definition of check_one +# check_one +source "${MESA_DIR}/star/test_suite/test_suite_helpers" + +check_one diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/history_columns.list b/star/dev_cases_massive_stars/60M_envelope_issues/history_columns.list new file mode 100644 index 000000000..3aec493a2 --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/history_columns.list @@ -0,0 +1,1066 @@ +! history_columns.list -- determines the contents of star history logs +! you can use a non-standard version by setting history_columns_file in your inlist + +! units are cgs unless otherwise noted. + +! reorder the following names as desired to reorder columns. +! comment out the name to omit a column (fewer columns => less IO => faster running). +! remove '!' to restore a column. + +! if you have a situation where you want a non-standard set of columns, +! make a copy of this file, edit as desired, and give the new filename in your inlist +! as history_columns_file. if you are just adding columns, you can 'include' this file, +! and just list the additions in your file. note: to include the standard default +! version, use include '' -- the 0 length string means include the default file. + +! blank lines and comments can be used freely. +! if a column name appears more than once in the list, only the first occurrence is used. + +! if you need to have something added to the list of options, let me know.... + + +! the first few lines of the log file contain a few items: + + ! version_number -- for the version of mesa being used + ! burn_min1 -- 1st limit for reported burning, in erg/g/s + ! burn_min2 -- 2nd limit for reported burning, in erg/g/s + + +!# other files + +! note: you can include another list by doing +! include 'filename' +! include '' means include the default standard list file + +! the following lines of the log file contain info about 1 model per row + +!---------------------------------------------------------------------------------------------- + +!# general info about the model + + model_number ! counting from the start of the run + num_zones ! number of zones in the model + + !## age + + star_age ! elapsed simulated time in years since the start of the run + star_age_sec ! elapsed simulated time in seconds since the start of the run + star_age_min ! elapsed simulated time in minutes since the start of the run + star_age_hr ! elapsed simulated time in hours since the start of the run + star_age_day ! elapsed simulated time in days since the start of the run + !day ! elapsed simulated time in days since the start of the run + + !log_star_age + !log_star_age_sec + + !## timestep + + time_step ! timestep in years since previous model + time_step_sec ! timestep in seconds since previous model + time_step_days + log_dt ! log10 time_step in years + log_dt_sec ! log10 time_step in seconds + log_dt_days ! log10 time_step in days + + !## mass + + star_mass ! in Msun units + !log_star_mass + + !star_gravitational_mass ! star_mass is baryonic mass + !star_mass_grav_div_mass + + !delta_mass ! star_mass - initial_mass in Msun units + log_xmstar ! log10 mass exterior to M_center (grams) + + !## mass change + + !star_mdot ! d(star_mass)/dt (in msolar per year) + log_abs_mdot ! log10(abs(star_mdot)) (in msolar per year) + + !## imposed surface conditions + !tau_factor + !tau_surface + + !## imposed center conditions + !m_center + !m_center_gm + !r_center + !r_center_cm + !r_center_km + !L_center + !log_L_center + !log_L_center_ergs_s + !v_center + !v_center_kms + + !logt_max + +!---------------------------------------------------------------------------------------------- + +!# mixing and convection + + !max_conv_vel_div_csound + !max_gradT_div_grada + !max_gradT_sub_grada + !min_log_mlt_Gamma + + + !## mixing regions + + mass_conv_core ! (Msun) mass coord of top of convective core. 0 if core is not convective + + ! mx1 refers to the largest (by mass) convective region. + ! mx2 is the 2nd largest. + + ! conv_mx1_top and conv_mx1_bot are the region where mixing_type == convective_mixing. + ! mx1_top and mx1_bot are the extent of all kinds of mixing, convective and other. + + ! values are m/Mstar + conv_mx1_top + conv_mx1_bot + conv_mx2_top + conv_mx2_bot + mx1_top + mx1_bot + mx2_top + mx2_bot + + ! radius -- values are radii in Rsun units + !conv_mx1_top_r + !conv_mx1_bot_r + !conv_mx2_top_r + !conv_mx2_bot_r + !mx1_top_r + !mx1_bot_r + !mx2_top_r + !mx2_bot_r + + ! you might want to get a more complete list of mixing regions by using the following + + !mixing_regions ! note: this includes regions where the mixing type is no_mixing. + + ! the is the number of regions to report + ! there will be 2* columns for this in the log file, 2 for each region. + ! the first column for a region gives the mixing type as defined in const/public/const_def.f90. + + ! the second column for a region gives the m/mstar location of the top of the region + ! entries for extra columns after the last region in the star will have an invalid mixing_type value of -1. + ! mstar is the total mass of the star, so these locations range from 0 to 1 + ! all regions are include starting from the center, so the bottom of one region + ! is the top of the previous one. since we start at the center, the bottom of the 1st region is 0. + + ! the columns in the log file will have names like 'mix_type_1' and 'mix_qtop_1' + + ! if the star has too many regions to report them all, + ! the smallest regions will be merged with neighbors for reporting purposes only. + + + !mix_relr_regions + ! same as above, but locations given as r/rstar instead of m/mstar. + ! the columns in the log file will have names like 'mix_relr_type_1' and 'mix_relr_top_1' + + + !## conditions at base of largest convection zone (by mass) + !cz_bot_mass ! mass coordinate of base (Msun) + !cz_mass ! mass coordinate of base (Msun) -- same as cz_bot_mass + !cz_log_xmass ! mass exterior to base (g) + !cz_log_xmsun ! mass exterior to base (Msun) + !cz_xm ! mass exterior to base (Msun) + !cz_logT + !cz_logRho + !cz_logP + !cz_bot_radius ! Rsun + !cz_log_column_depth + !cz_log_radial_depth + !cz_luminosity ! Lsun + !cz_opacity + !cz_log_tau + !cz_eta + !cz_log_eps_nuc ! log10(ergs/g/s) + !cz_t_heat ! Cp*T/eps_nuc (seconds) + + !cz_csound + !cz_scale_height + !cz_grav + + !cz_omega + !cz_omega_div_omega_crit + + !cz_zone + + ! mass fractions at base of largest convection zone (by mass) + !cz_log_xa h1 + !cz_log_xa he4 + + !## conditions at top of largest convection zone (by mass) + !cz_top_mass ! mass coordinate of top (Msun) + !cz_top_log_xmass ! mass exterior to top (g) + !cz_top_log_xmsun ! mass exterior to top (Msun) + !cz_top_xm ! mass exterior to top (Msun) + !cz_top_logT + !cz_top_logRho + !cz_top_logP + !cz_top_radius ! Rsun + !cz_top_log_column_depth + !cz_top_log_radial_depth + !cz_top_luminosity ! Lsun + !cz_top_opacity + !cz_top_log_tau + !cz_top_eta + !cz_top_log_eps_nuc ! log10(ergs/g/s) + !cz_top_t_heat ! Cp*T/eps_nuc (seconds) + + !cz_top_csound + !cz_top_scale_height + !cz_top_grav + + !cz_top_omega + !cz_top_omega_div_omega_crit + + !cz_top_zone + !cz_top_zone_logdq + + ! mass fractions at top of largest convection zone (by mass) + !cz_top_log_xa h1 + !cz_top_log_xa he4 + +!---------------------------------------------------------------------------------------------- + +!# nuclear reactions + + !## integrated quantities + + !power_h_burn ! total thermal power from PP and CNO, excluding neutrinos (in Lsun units) + !power_he_burn ! total thermal power from triple-alpha, excluding neutrinos (in Lsun units) + !power_photo + !power_z_burn + !log_power_nuc_burn ! total thermal power from all burning, excluding photodisintegrations + log_LH ! log10 power_h_burn + log_LHe ! log10 power_he_burn + log_LZ ! log10 total burning power including LC, but excluding LH and LHe and photodisintegrations + log_Lnuc ! log(LH + LHe + LZ) + !log_Lnuc_ergs_s + !log_Lnuc_sub_log_L + !lnuc_photo + + !extra_L ! integral of extra_heat in Lsun units + !log_extra_L ! log10 extra_L + + !## neutrino losses + log_Lneu ! log10 power emitted in neutrinos, nuclear and thermal (in Lsun units) + log_Lneu_nuc ! log10 power emitted in neutrinos, nuclear sources only (in Lsun units) + log_Lneu_nonnuc ! log10 power emitted in neutrinos, thermal sources only (in Lsun units) + + !mass_loc_of_max_eps_nuc ! (in Msun units) + !mass_ext_to_max_eps_nuc ! (in Msun units) + !eps_grav_integral ! (in Lsun units) + !log_abs_Lgrav ! log10 abs(eps_grav_integral) (in Lsun units) + + !## information about reactions (by category) + + ! log10 total luminosity for reaction categories (Lsun units) + + pp + cno + tri_alpha + !c_alpha + !n_alpha + !o_alpha + !ne_alpha + !na_alpha + !mg_alpha + !si_alpha + !s_alpha + !ar_alpha + !ca_alpha + !ti_alpha + !fe_co_ni + !c12_c12 + !c12_o16 + !o16_o16 + !photo + !pnhe4 + !other + + !## information about individual reactions + + ! adds columns for all of the reactions that are in the current net + ! Note that if using op_split_burn=.true. then zones which have been split will report 0 for their rates + !add_raw_rates ! raw reaction rates, reactions/second + !add_screened_rates ! screened reaction rates reactions/second + !add_eps_nuc_rates ! Nuclear energy (minus neutrino losses) released erg/s + !add_eps_neu_rates ! Neutrino losses erg/s + + ! individual reactions (as many as desired) + ! use list_net_reactions = .true. in star_job to list all reactions in the current net + ! reactions/second + !raw_rate r_h1_h1_ec_h2 + !raw_rate r_h1_h1_wk_h2 + + + + !## nuclear reactions at center + + ! center log10 burn erg/g/s for reaction categories + + !c_log_eps_burn cno + !c_log_eps_burn tri_alfa + + ! center d_eps_nuc_dlnd for reaction categories + + !c_d_eps_dlnd cno + !c_d_eps_dlnd tri_alfa + + ! center d_eps_nuc_dlnT for reaction categories + + !c_d_eps_dlnT cno + !c_d_eps_dlnT tri_alfa + + !## regions of strong nuclear burning + + ! 2 zones where eps_nuc > burn_min1 erg/g/s + ! for each zone have 4 numbers: start1, start2, end2, end1 + ! start1 is mass of inner edge where first goes > burn_min1 (or -20 if none such) + ! start2 is mass of inner edge where first zone reaches burn_min2 erg/g/sec (or -20 if none such) + ! end2 is mass of outer edge where first zone drops back below burn_min2 erg/g/s + ! end1 is mass of outer edge where first zone ends (i.e. eps_nuc < burn_min1) + ! similar for the second zone + + epsnuc_M_1 ! start1 for 1st zone + epsnuc_M_2 ! start2 + epsnuc_M_3 ! end2 + epsnuc_M_4 ! end1 + + epsnuc_M_5 ! start1 for 2nd zone + epsnuc_M_6 ! start2 + epsnuc_M_7 ! end2 + epsnuc_M_8 ! end1 + + + ! you might want to get a more complete list of burning regions by using the following + + !burning_regions + ! the is the number of regions to report + ! there will be 2* columns for this in the log file, 2 for each region. + ! the first column for a region gives int(sign(val)*log10(max(1,abs(val)))) + ! where val = ergs/gm/sec nuclear energy minus all neutrino losses. + ! the second column for a region gives the q location of the top of the region + ! entries for extra columns after the last region in the star will have a value of -9999 + ! all regions are included starting from the center, so the bottom of one region + ! is the top of the previous one. + ! since we start at the center, the bottom of the 1st region is q=0 and top of last is q=1. + + ! the columns in the log file will have names like 'burn_type_1' and 'burn_qtop_1' + + !burn_relr_regions + ! same as above, but locations given as r/rstar instead of m/mstar. + ! the columns in the log file will have names like 'burn_relr_type_1' and 'burn_relr_top_1' + + + ! if the star has too many regions to report them all, + ! the smallest regions will be merged with neighbors for reporting purposes only. + +!---------------------------------------------------------------------------------------------- + +!# information about core and envelope + + !## helium core + he_core_mass + !he_core_radius + !he_core_lgT + !he_core_lgRho + !he_core_L + !he_core_v + !he_core_omega + !he_core_omega_div_omega_crit + !he_core_k + + !## CO core + co_core_mass + !CO_core + !co_core_radius + !co_core_lgT + !co_core_lgRho + !co_core_L + !co_core_v + !co_core_omega + !co_core_omega_div_omega_crit + !co_core_k + + !## ONe core + one_core_mass + !one_core_radius + !one_core_lgT + !one_core_lgRho + !one_core_L + !one_core_v + !one_core_omega + !one_core_omega_div_omega_crit + !one_core_k + + !## iron core + !fe_core_mass + !fe_core_radius + !fe_core_lgT + !fe_core_lgRho + !fe_core_L + !fe_core_v + !fe_core_omega + !fe_core_omega_div_omega_crit + !fe_core_k + + !## neutron rich core + neutron_rich_core_mass + !neutron_rich_core_radius + !neutron_rich_core_lgT + !neutron_rich_core_lgRho + !neutron_rich_core_L + !neutron_rich_core_v + !neutron_rich_core_omega + !neutron_rich_core_omega_div_omega_crit + !neutron_rich_core_k + + !## envelope + + !envelope_mass ! = star_mass - he_core_mass + !envelope_fraction_left ! = envelope_mass / (initial_mass - he_core_mass) + + !h_rich_layer_mass ! = star_mass - he_core_mass + !he_rich_layer_mass ! = he_core_mass - c_core_mass + !co_rich_layer_mass + +!---------------------------------------------------------------------------------------------- + +!# timescales + + !dynamic_timescale ! dynamic timescale (seconds) -- estimated by 2*pi*sqrt(r^3/(G*m)) + kh_timescale ! kelvin-helmholtz timescale (years) + !mdot_timescale ! star_mass/abs(star_mdot) (years) + !kh_div_mdot_timescales ! kh_timescale/mdot_timescale + !nuc_timescale ! nuclear timescale (years) -- proportional to mass divided by luminosity + + !dt_cell_collapse ! min time for any cell to collapse at current velocities + !dt_div_dt_cell_collapse + + !min_dr_div_cs ! min over all cells of dr/csound (seconds) + !min_dr_div_cs_k ! location of min + !log_min_dr_div_cs ! log10 min dr_div_csound (seconds) + !min_dr_div_cs_yr ! min over all cells of dr/csound (years) + !log_min_dr_div_cs_yr ! log10 min dr_div_csound (years) + !dt_div_min_dr_div_cs + !log_dt_div_min_dr_div_cs + + !min_t_eddy ! minimum value of scale_height/conv_velocity + +!---------------------------------------------------------------------------------------------- + +!# conditions at or near the surface of the model + + !## conditions at the photosphere + effective_T + !Teff + log_Teff ! log10 effective temperature + ! Teff is calculated using Stefan-Boltzmann relation L = 4 pi R^2 sigma Teff^4, + ! where L and R are evaluated at the photosphere (tau_factor < 1) + ! or surface of the model (tau_factor >= 1) when photosphere is not inside the model. + + !photosphere_black_body_T + !photosphere_cell_T ! temperature at model location closest to the photosphere, not necessarily Teff + !photosphere_cell_log_T + !photosphere_cell_density + !photosphere_cell_log_density + !photosphere_cell_opacity + !photosphere_cell_log_opacity + !photosphere_L ! Lsun units + !photosphere_log_L ! Lsun units + !photosphere_r ! Rsun units + !photosphere_log_r ! Rsun units + !photosphere_m ! Msun units + !photosphere_v_km_s + !photosphere_cell_k + !photosphere_column_density + !photosphere_csound + !photosphere_log_column_density + !photosphere_opacity + !photosphere_v_div_cs + !photosphere_xm + !photosphere_cell_free_e + !photosphere_cell_log_free_e + !photosphere_logg + !photosphere_T + + !## conditions at or near the surface of the model (outer edge of outer cell) + + luminosity ! luminosity in Lsun units + !luminosity_ergs_s ! luminosity in cgs units + log_L ! log10 luminosity in Lsun units + !log_L_ergs_s ! log10 luminosity in cgs units + radius ! Rsun + log_R ! log10 radius in Rsun units + !radius_cm + !log_R_cm + + log_g ! log10 gravity + !gravity + !log_Ledd + log_L_div_Ledd ! log10(L/Leddington) + lum_div_Ledd + !log_surf_optical_depth + !surface_optical_depth + + !log_surf_cell_opacity ! old name was log_surf_opacity + !log_surf_cell_P ! old name was log_surf_P + !log_surf_cell_pressure ! old name was log_surf_pressure + !log_surf_cell_density ! old name was log_surf_density + !log_surf_cell_temperature ! old name was log_surf_temperature + !surface_cell_temperature ! old name was surface_temperature + !log_surf_cell_z ! old name was log_surf_z + !surface_cell_entropy ! in units of kerg per baryon + ! old name was surface_entropy + + !v_surf ! (cm/s) + v_surf_km_s ! (km/s) + v_div_csound_surf ! velocity divided by sound speed at outermost grid point + !v_div_csound_max ! max value of velocity divided by sound speed at face + !v_div_vesc + !v_phot_km_s + !v_surf_div_escape_v + + !v_surf_div_v_kh ! v_surf/(photosphere_r/kh_timescale) + + surf_avg_j_rot + surf_avg_omega + surf_avg_omega_crit + surf_avg_omega_div_omega_crit + surf_avg_v_rot ! km/sec rotational velocity at equator + surf_avg_v_crit ! critical rotational velocity at equator + surf_avg_v_div_v_crit + surf_avg_Lrad_div_Ledd + !surf_avg_logT + !surf_avg_logRho + !surf_avg_opacity + + ! Gravity Darkening, reports the surface averaged L/Lsun and Teff (K) caused by + ! gravity darkening in rotating stars. Based on the model of Espinosa Lara & Rieutord (2011) + ! 'polar' refers to the line of sight being directed along the rotation axis of the star + ! 'equatorial' refers to the line of sight coincident with the stellar equator + !grav_dark_L_polar !Lsun + !grav_dark_Teff_polar !K + !grav_dark_L_equatorial !Lsun + !grav_dark_Teff_equatorial !K + + !surf_escape_v ! cm/s + + !v_wind_Km_per_s ! Km/s + ! = 1d-5*s% opacity(1)*max(0d0,-s% mstar_dot)/ & + ! (4*pi*s% photosphere_r*Rsun*s% tau_base) + ! Lars says: + ! wind_mdot = 4*pi*R^2*rho*v_wind + ! tau = integral(opacity*rho*dr) from R to infinity + ! so tau = opacity*wind_mdot/(4*pi*R*v_wind) at photosphere + ! or v_wind = opacity*wind_mdot/(4*pi*R*tau) at photosphere + + !rotational_mdot_boost ! factor for increase in mass loss mdot due to rotation + log_rotational_mdot_boost ! log factor for increase in mass loss mdot due to rotation + !surf_r_equatorial_div_r_polar + !surf_r_equatorial_div_r + !surf_r_polar_div_r + +!---------------------------------------------------------------------------------------------- + +!# conditions near center + + log_center_T ! temperature + log_center_Rho ! density + !log_center_P ! pressure + + ! shorter names for above + log_cntr_P + log_cntr_Rho + log_cntr_T + + center_T ! temperature + center_Rho ! density + !center_P ! pressure + + !center_degeneracy ! the electron chemical potential in units of k*T + !center_gamma ! plasma interaction parameter + center_mu + center_ye + center_abar + !center_zbar + + !center_eps_grav + + !center_non_nuc_neu + !center_eps_nuc + !d_center_eps_nuc_dlnT + !d_center_eps_nuc_dlnd + !log_center_eps_nuc + + center_entropy ! in units of kerg per baryon + !max_entropy ! in units of kerg per baryon + !fe_core_infall + !non_fe_core_infall + !non_fe_core_rebound + !max_infall_speed + + !compactness_parameter ! (m/Msun)/(R(m)/1000km) for m = 2.5 Msun + !compactness + !m4 ! Mass co-ordinate where entropy=4 + ! mu4 is sensitive to the choice of how much dm/dr you average over, thus we average dm and dr over M(entropy=4) and M(entropy=4)+0.3Msun + !mu4 ! dM(Msun)/dr(1000km) where entropy=4 + + + center_omega + center_omega_div_omega_crit + +!---------------------------------------------------------------------------------------------- + +!# abundances + + !species ! size of net + + !## mass fractions near center + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_center_abundances + !add_log_center_abundances + + ! individual central mass fractions (as many as desired) + center h1 + center he4 + center c12 + center o16 + + ! individual log10 central mass fractions (as many as desired) + !log_center h1 + !log_center he4 + ! etc. + + + !## mass fractions near surface + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_surface_abundances + !add_log_surface_abundances + + ! individual surface mass fractions (as many as desired) + !surface h1 + !surface he4 + surface c12 + surface o16 + ! etc. + + ! individual log10 surface mass fractions (as many as desired) + + !log_surface h1 + !log_surface he4 + + + !## mass fractions for entire star + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_average_abundances + !add_log_average_abundances + + ! individual average mass fractions (as many as desired) + !average h1 + !average he4 + ! etc. + + ! individual log10 average mass fractions (as many as desired) + !log_average h1 + !log_average he4 + ! etc. + + + !## mass totals for entire star (in Msun units) + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_total_mass + !add_log_total_mass + + ! individual mass totals for entire star (as many as desired) + total_mass h1 + total_mass he4 + ! etc. + + ! individual log10 mass totals for entire star (in Msun units) + !log_total_mass h1 + !log_total_mass he4 + ! etc. + +!---------------------------------------------------------------------------------------------- + +!# info at specific locations + + !## info at location of max temperature + !max_T + log_max_T + + +!---------------------------------------------------------------------------------------------- + +!# information about shocks + + !## info about outermost outward moving shock + ! excluding locations with q > max_q_for_outer_mach1_location + ! returns values at location of max velocity + !shock_mass ! baryonic (Msun) + !shock_mass_gm ! baryonic (grams) + !shock_q + !shock_radius ! (Rsun) + !shock_radius_cm ! (cm) + !shock_velocity + !shock_csound + !shock_v_div_cs + !shock_lgT + !shock_lgRho + !shock_lgP + !shock_gamma1 + !shock_entropy + !shock_tau + !shock_k + !shock_pre_lgRho + +!---------------------------------------------------------------------------------------------- + +!# asteroseismology + + !delta_nu ! large frequency separation for p-modes (microHz) + ! 1e6/(seconds for sound to cross diameter of star) + !delta_Pg ! g-mode period spacing for l=1 (seconds) + ! sqrt(2) pi^2/(integral of brunt_N/r dr) + !log_delta_Pg + !nu_max ! estimate from scaling relation (microHz) + ! nu_max = nu_max_sun * M/Msun / ((R/Rsun)^2 (Teff/astero_Teff_sun)^0.5) + !nu_max_3_4th_div_delta_nu ! nu_max^0.75/delta_nu + !acoustic_cutoff ! 0.5*g*sqrt(gamma1*rho/P) at surface + !acoustic_radius ! integral of dr/csound (seconds) + !ng_for_nu_max ! = 1 / (nu_max*delta_Pg) + ! period for g-mode with frequency nu_max = nu_max_ng*delta_Pg + !gs_per_delta_nu ! delta_nu / (nu_max**2*delta_Pg) + ! number of g-modes per delta_nu at nu_max + + !int_k_r_dr_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=1 + !int_k_r_dr_2pt0_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=1 + !int_k_r_dr_0pt5_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=1 + !int_k_r_dr_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=2 + !int_k_r_dr_2pt0_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=2 + !int_k_r_dr_0pt5_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=2 + !int_k_r_dr_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=3 + !int_k_r_dr_2pt0_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=3 + !int_k_r_dr_0pt5_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=3 + +!---------------------------------------------------------------------------------------------- + +!# energy information + + total_energy ! at end of step + log_total_energy ! log(abs(total_energy)) + !total_energy_after_adjust_mass ! after mass adjustments + + ! shorter versions of above + !tot_E + !log_tot_E + + + !total_gravitational_energy + !log_total_gravitational_energy ! log(abs(total_gravitational_energy)) + !total_gravitational_energy_after_adjust_mass + + ! shorter versions of above + !tot_PE + !log_tot_PE + + !total_internal_energy + !log_total_internal_energy + !total_internal_energy_after_adjust_mass + + ! shorter versions of above + !tot_IE + !log_tot_IE + + !total_radial_kinetic_energy + !log_total_radial_kinetic_energy + !total_radial_kinetic_energy_after_adjust_mass + + ! shorter versions of above (does not include rot KE) + !tot_KE + !log_tot_KE + + !total_turbulent_energy + !log_total_turbulent_energy + !total_turbulent_energy_after_adjust_mass + !tot_Et + !log_tot_Et + + total_energy_foe + + !tot_IE_div_IE_plus_KE + !total_IE_div_IE_plus_KE + + !total_entropy + !total_eps_grav + + !total_energy_sources_and_sinks ! for this step + !total_nuclear_heating + !total_non_nuc_neu_cooling + !total_irradiation_heating + !total_extra_heating ! extra heat integrated over the model times dt (erg) + !total_WD_sedimentation_heating + + !rel_run_E_err + + rel_E_err + !abs_rel_E_err + log_rel_E_err + + !tot_e_equ_err + !tot_e_err + + + !error_in_energy_conservation ! for this step + ! = total_energy - (total_energy_start + total_energy_sources_and_sinks) + !cumulative_energy_error ! = sum over all steps of abs(error_in_energy_conservation) + !rel_cumulative_energy_error ! = cumulative_energy_error/total_energy + !log_rel_cumulative_energy_error ! = log10 of rel_cumulative_energy_error + log_rel_run_E_err ! shorter name for rel_cumulative_energy_error + + !rel_error_in_energy_conservation ! = error_in_energy_conservation/total_energy + !log_rel_error_in_energy_conservation + + !virial_thm_P_avg + !virial_thm_rel_err + !work_inward_at_center + !work_outward_at_surface + + +!---------------------------------------------------------------------------------------------- + + !# rotation + + !total_angular_momentum + log_total_angular_momentum + !i_rot_total ! moment of inertia + + !total_rotational_kinetic_energy + !log_total_rotational_kinetic_energy + !total_rotational_kinetic_energy_after_adjust_mass + +!---------------------------------------------------------------------------------------------- + +!# velocities + + !avg_abs_v_div_cs + !log_avg_abs_v_div_cs + !max_abs_v_div_cs + !log_max_abs_v_div_cs + + !avg_abs_v + !log_avg_abs_v + !max_abs_v + !log_max_abs_v + + !u_surf + !u_surf_km_s + !u_div_csound_surf + !u_div_csound_max + + !infall_div_cs + +!---------------------------------------------------------------------------------------------- + +!# misc + + !e_thermal ! sum over all zones of Cp*T*dm + + !## eos + !logQ_max ! logQ = logRho - 2*logT + 12 + !logQ_min + gamma1_min + + !## core mixing + !mass_semiconv_core + + !## H-He boundary + + !diffusion_time_H_He_bdy + !temperature_H_He_bdy + + + !## optical depth and opacity + + !one_div_yphot + !log_one_div_yphot + + !log_min_opacity + !min_opacity + + !log_tau_center + + !log_max_tau_conv + !max_tau_conv + !log_min_tau_conv + !min_tau_conv + + !tau_qhse_yrs + + !## other + + !Lsurf_m + !dlnR_dlnM + !h1_czb_mass ! location (in Msun units) of base of 1st convection zone above he core + !kh_mdot_limit + !log_cntr_dr_cm + !min_Pgas_div_P + !surf_c12_minus_o16 ! this is useful for seeing effects of dredge up on AGB + !surf_num_c12_div_num_o16 + + !phase_of_evolution ! Integer mapping to the type of evolution see star_data/public/star_data_def.inc for definitions + + !## MLT++ + !gradT_excess_alpha + !gradT_excess_min_beta + !gradT_excess_max_lambda + + !max_L_rad_div_Ledd + !max_L_rad_div_Ledd_div_phi_Joss + + + !## RTI + !rti_regions + + !## Ni & Co + !total_ni_co_56 + + + !## internal structure constants + + ! this is evaluated assuming a spherical star and does not account for rotation + !apsidal_constant_k2 + + +!---------------------------------------------------------------------------------------------- + +!# accretion + + !k_below_const_q + !q_below_const_q + !logxq_below_const_q + + !k_const_mass + !q_const_mass + !logxq_const_mass + + !k_below_just_added + !q_below_just_added + !logxq_below_just_added + + !k_for_test_CpT_absMdot_div_L + !q_for_test_CpT_absMdot_div_L + !logxq_for_test_CpT_absMdot_div_L + +!---------------------------------------------------------------------------------------------- + +!# Color output + + ! Outputs the bolometric correction (bc) for the star in filter band ``filter'' (case sensitive) + !bc filter + + ! Outputs the absolute magnitude for the star in filter band ``filter'' (case sensitive) + !abs_mag filter + + ! Adds all the bc's to the output + !add_bc + + ! Adds all the absolute magnitudes to the output + !add_abs_mag + + ! Outputs luminosity in filter band ``filter'' (erg s^-1) (case sensitive) + ! lum_band filter + + ! Adds all the filter band luminosities to the output (erg s^-1) + ! add_lum_band + + ! Outputs log luminosity in filter band ``filter'' (log erg s^-1) (case sensitive) + ! log_lum_band filter + + ! Adds all the filter band luminosities to the output (log erg s^-1) + ! add_log_lum_band + +!---------------------------------------------------------------------------------------------- + +!# RSP + + !rsp_DeltaMag ! absolute magnitude difference between minimum and maximum light (mag) + !rsp_DeltaR ! R_max - R_min difference in the max and min radius (Rsun) + !rsp_GREKM ! fractional growth of the kinetic energy per pulsation period ("nonlinear growth rate") - see equation 5 in MESA5 + !rsp_num_periods ! Count of the number of pulsation cycles completed + !rsp_period_in_days ! Running period, ie., period between two consecutive values of R_max (days) + !rsp_phase ! Running pulsation phase for a cycle + +!---------------------------------------------------------------------------------------------- +!# debugging + + !## retries + num_retries ! total during the run + + !## solver iterations + + num_iters ! same as num_solver_iterations + num_solver_iterations ! iterations at this step + !total_num_solver_iterations ! total iterations during the run + !avg_num_solver_iters + + !rotation_solver_steps + + !diffusion_solver_steps + !diffusion_solver_iters + + !avg_setvars_per_step + !avg_skipped_setvars_per_step + !avg_solver_setvars_per_step + + !burn_solver_maxsteps + + !total_num_solver_calls_converged + !total_num_solver_calls_failed + !total_num_solver_calls_made + !total_num_solver_relax_calls_converged + !total_num_solver_relax_calls_failed + !total_num_solver_relax_calls_made + !total_num_solver_relax_iterations + + !total_step_attempts + !total_step_redos + !total_step_retries + !total_steps_finished + !total_steps_taken + + !TDC_num_cells + + !## Relaxation steps + !total_relax_step_attempts + !total_relax_step_redos + !total_relax_step_retries + !total_relax_steps_finished + !total_relax_steps_taken + + !## conservation during mesh adjust + !log_mesh_adjust_IE_conservation + !log_mesh_adjust_KE_conservation + !log_mesh_adjust_PE_conservation + + !## amr + !num_hydro_merges + !num_hydro_splits + + !## timing + !elapsed_time ! time since start of run (seconds) + + !## Extras + burning_regions 80 + mixing_regions 40 diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/inlist b/star/dev_cases_massive_stars/60M_envelope_issues/inlist new file mode 100644 index 000000000..fcce0831d --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/inlist @@ -0,0 +1,258 @@ +! 60M_envelope_issues + +&star_job + show_log_description_at_start = .false. + + create_pre_main_sequence_model = .true. + pre_ms_relax_to_start_radiative_core = .true. + + change_net = .true. + new_net_name = 'approx21_cr60_plus_co56.net' + dump_missing_metals_into_heaviest = .false. + + ! If using a big network, comment out and use a local rate_tables directory + num_special_rate_factors = 2 + reaction_for_special_factor(1) = 'r_c12_ag_o16' + special_rate_factor(1) = 1 + filename_of_special_rate(1) = 'c12ag_deboer_sigma_0p0_2000_Tgrid.dat' + + reaction_for_special_factor(2) = 'r_he4_he4_he4_to_c12' + special_rate_factor(2) = 1 + filename_of_special_rate(2) = 'r_he4_he4_he4_to_c12_cf88.txt' + + show_retry_counts_when_terminate = .true. + show_timestep_limit_counts_when_terminate = .true. + + ! pgstar is recommended for diagnosing issues and understanding the evolution + pgstar_flag = .true. + save_pgstar_files_when_terminate = .true. + + new_Z = 1.42d-2 + initial_zfracs = 6 ! set to asplund 2009 abundance fractions + + save_model_when_terminate = .true. + save_model_filename = 'after_core_he_burn.mod' + required_termination_code_string = 'xa_central_lower_limit' + +/ ! end of star_job namelist + +&eos + use_Skye = .true. + mass_fraction_limit_for_Skye = 1d-10 + +/ ! end of eos namelist + +&kap + ! OPAL asplund 2009 opacities, Zbase set in inlist_mass_Z_wind_rotation + kap_file_prefix = 'a09' ! 'gs98' 'a09' 'OP_a09' 'OP_gs98' + kap_CO_prefix = 'a09_co' ! 'gs98_co' 'a09_co' + kap_lowT_prefix = 'lowT_fa05_a09p' + use_Type2_opacities = .true. + + Zbase = 1.42d-2 +/ ! end of kap namelist + +&controls + +! initial model + initial_mass = 60 + initial_z = 1.42d-2 ! solar + initial_y = 0.2703d0 ! from asplund et al. 2009, solar. + +! stopping + xa_central_lower_limit_species(1) = 'he4' + xa_central_lower_limit(1) = 1d-12 + ! limit max_model_number as part of test_suite + max_model_number = 6000 + !max_number_retries = 37 + +! wind + Dutch_scaling_factor = 0d0 + x_ctrl(21) = 0.4d0 ! Dutch_scaling_factor after ZAMS + + cool_wind_full_on_T = 0.8d4 + hot_wind_full_on_T = 1.2d4 + cool_wind_RGB_scheme = 'Dutch' + cool_wind_AGB_scheme = 'Dutch' + hot_wind_scheme = 'Dutch' + Dutch_wind_lowT_scheme = 'de Jager' + + max_T_center_for_any_mass_loss = 1.1d9 + max_tries_for_implicit_wind = 0 + +! atmosphere + atm_option = 'T_tau' + atm_T_tau_relation = 'Eddington' + atm_T_tau_opacity = 'fixed' + Pextra_factor = 1 + +! mlt + mixing_length_alpha = 1.5 + MLT_option = 'TDC' + steps_before_use_TDC = 50 + use_Ledoux_criterion = .true. + + thermohaline_option = 'Kippenhahn' + thermohaline_coeff = 0 + + semiconvection_option = 'Langer_85 mixing; gradT = gradr' + alpha_semiconvection = 1d-2 + + mlt_make_surface_no_mixing = .true. + +! superadiabatic convection routines: + + use_superad_reduction = .false. + superad_reduction_Gamma_limit = 0.3d0 ! default is 0.5d0 + superad_reduction_Gamma_limit_scale = 5d0 + superad_reduction_Gamma_inv_scale = 5d0 + superad_reduction_diff_grads_limit = 1d-2 ! default is 1d-3 + superad_reduction_limit = -1d0 + + okay_to_reduce_gradT_excess = .false. + gradT_excess_f1 = 1d-4 + gradT_excess_f2 = 1d-2 + gradT_excess_lambda1 = -1d0 ! full on + +! mixing + + ! we use step overshooting in H core + overshoot_scheme(1) = 'step' + overshoot_zone_type(1) = 'burn_H' + overshoot_zone_loc(1) = 'core' + overshoot_bdy_loc(1) = 'top' + overshoot_f(1) = 0.345 ! for M>10 + !overshoot_f(1) = 0.21 ! For M<10 + overshoot_f0(1) = 0.01 + + ! exponential in the H core + overshoot_scheme(2) = 'exponential' + overshoot_zone_type(2) = 'burn_He' + overshoot_zone_loc(2) = 'core' + overshoot_bdy_loc(2) = 'top' + overshoot_f(2) = 0.01 + overshoot_f0(2) = 0.005 + + ! we don't want to deal with He/CO core mergers + ! and there is reason to believe there is little + ! inward overshooting in the shell across compositions boundaries + overshoot_scheme(3) = 'none' + overshoot_zone_type(3) = 'burn_He' + overshoot_zone_loc(3) = 'shell' + overshoot_bdy_loc(3) = 'bottom' + + ! a small amount of overshooting on top of any other convective core + ! avoid spurious numerical behavior + ! perfect amount for degenerate flames + overshoot_scheme(4) = 'exponential' + overshoot_zone_type(4) = 'any' + overshoot_zone_loc(4) = 'any' + overshoot_bdy_loc(4) = 'any' + overshoot_f(4) = 0.005d0 + overshoot_f0(4) = 0.001d0 + +! timesteps + time_delta_coeff = 1.0 + min_timestep_factor = 0.8d0 + max_timestep_factor = 1.05d0 + timestep_factor_for_retries = 0.75 + + limit_for_rel_error_in_energy_conservation = 1d-3 + hard_limit_for_rel_error_in_energy_conservation = 1d-2 + + never_skip_hard_limits = .true. + min_xa_hard_limit = -1d-5 + min_xa_hard_limit_for_highT = -3d-5 + + delta_lgTeff_limit = 0.01 + delta_lgL_limit = 0.1 + delta_lgL_He_limit = 0.1 + + ! Recommend decreasing all three Rho, T, Tmax + ! to 1d-3 or lower in production runs + delta_lgRho_cntr_limit = 0.03 + delta_lgRho_cntr_hard_limit = 0.1 + delta_lgRho_limit = 0.1 + + delta_lgT_cntr_limit_only_after_near_zams = .true. + delta_lgT_cntr_limit = 0.002 + delta_lgT_cntr_hard_limit = 0.1 + + delta_lgT_max_limit_only_after_near_zams = .true. + delta_lgT_max_limit = 0.002 + delta_lgT_max_hard_limit = 0.1 + + dX_div_X_limit(2) = -1 ! for he4 + + ! On the changes in total abundance of each isotope + ! one of the most useful timestep controls, period + dX_nuc_drop_limit = 2d-2 ! Recommend decreasing to 1d-3 or lower in a production run + dX_nuc_drop_limit_at_high_T = 2d-2 ! default = -1 = same as dX_nuc_drop_limit + dX_nuc_drop_min_X_limit = 1d-3 ! try decreasing to 1d-4 or 1d-5 in a production run + dX_nuc_drop_max_A_limit = 70 ! try increasing beyond 60 in a big network run + dX_nuc_drop_hard_limit = 1d99 + + delta_lg_XH_cntr_limit = 0.01d0 + delta_lg_XH_cntr_max = 0.0d0 + delta_lg_XH_cntr_min = -2.0d0 + + delta_lg_XHe_cntr_limit = 0.01d0 + delta_lg_XHe_cntr_max = 0.0d0 + delta_lg_XHe_cntr_min = -12.0d0 + +! mesh + !max_dq= 1d-3 ! or lower + mesh_delta_coeff = 2.5 ! try 1.0 or below in production run + mesh_delta_coeff_for_highT = 1.5 ! try 1.0 or below in production run + logT_max_for_standard_mesh_delta_coeff = 9.0 + logT_min_for_highT_mesh_delta_coeff = 9.5 + !min_dq_for_xa = 1d-4 ! avoid over-resolving composition changes, bad for bit for bit convergence? + +! solver + + ! damped newton and structure only + scale_max_correction = 0.1d0 + ignore_species_in_max_correction = .true. + + use_gold2_tolerances = .true. + use_gold_tolerances = .true. + gold_solver_iters_timestep_limit = 20 + + max_abs_rel_run_E_err = 1d-2 + energy_eqn_option = 'dedt' + + convergence_ignore_equL_residuals = .true. + make_gradr_sticky_in_solver_iters = .true. + min_logT_for_make_gradr_sticky_in_solver_iters = 8d0 + xa_scale = 1d-5 + min_timestep_limit = 1d-12 ! (seconds) ! 1d-20 if things are sticky + + when_to_stop_rtol = 1d-3 + when_to_stop_atol = 1d-3 + +! output + + !max_model_number = 4000000 + + num_trace_history_values = 3 + trace_history_value_name(1) = 'He_cntr' + trace_history_value_name(2) = 'rel_E_err' + trace_history_value_name(3) = 'log_rel_run_E_err' + + photo_interval = 200 + photo_digits = 8 + profile_interval = 100 + max_num_profile_models = 400000 + history_interval = 1 + write_header_frequency = 10 + terminal_interval = 10 + + !report_solver_progress = .true. ! set true to see info about solver iterations + !report_ierr = .true. ! if true, produce terminal output when have some internal error + +/ ! end of controls namelist + +&pgstar + read_extra_pgstar_inlist(1) = .true. + extra_pgstar_inlist_name(1) = 'inlist_pgstar' +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/inlist_pgstar b/star/dev_cases_massive_stars/60M_envelope_issues/inlist_pgstar new file mode 100644 index 000000000..62d291cd0 --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/inlist_pgstar @@ -0,0 +1,672 @@ +&pgstar + +!pause_flag = .true. + +pgstar_interval = 1 +pgstar_show_age_in_years = .true. +pgstar_show_age_in_seconds = .false. +pgstar_sleep = 0.0 + +! some global grid plot settings at end + +pgstar_show_model_number = .false. +pgstar_show_age = .false. + +!------------------------------------------------------------------------------------ + +Grid1_win_flag = .true. +Grid1_win_width = 12 +Grid1_win_aspect_ratio = 0.666 + +! file output +Grid1_file_flag = .true. +Grid1_file_dir = 'png' +Grid1_file_prefix = 'Grid1_' +Grid1_file_interval = 25 ! output when mod(model_number,Grid1_file_interval)==0 +Grid1_file_width = 27 ! (inches) negative means use same value as for window +Grid1_file_aspect_ratio = -1 ! negative means use same value as for window + +! reset the defaults + +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 + +Grid1_title = '' + +Grid1_num_cols = 3 ! divide plotting region into this many equal width cols +Grid1_num_rows = 5 ! divide plotting region into this many equal height rows +Grid1_num_plots = 6 ! <= 10 + +Grid1_plot_name(1) = 'Text_Summary1' +Grid1_plot_row(1) = 1 ! number from 1 at top +Grid1_plot_rowspan(1) = 1 ! plot spans this number of rows +Grid1_plot_col(1) = 1 ! number from 1 at left +Grid1_plot_colspan(1) = 3 ! plot spans this number of columns + +Grid1_plot_pad_left(1) = -0.03 ! fraction of full window width for padding on left +Grid1_plot_pad_right(1) = 0.0 ! fraction of full window width for padding on right +Grid1_plot_pad_top(1) = -0.06 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(1) = 0.07 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(1) = 1 ! 0.8 ! multiply txt_scale for subplot by this + +Grid1_plot_name(3) = 'HR' +Grid1_plot_row(3) = 2 ! number from 1 at top +Grid1_plot_rowspan(3) = 1 ! plot spans this number of rows +Grid1_plot_col(3) = 1 ! number from 1 at left +Grid1_plot_colspan(3) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(3) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(3) = 0.08 ! fraction of full window width for padding on right +Grid1_plot_pad_top(3) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(3) = 0.01 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(3) = 0.7 ! multiply txt_scale for subplot by this + +Grid1_plot_name(5) = 'Profile_Panels1' +Grid1_plot_row(5) = 3 ! number from 1 at top +Grid1_plot_rowspan(5) = 3 ! plot spans this number of rows +Grid1_plot_col(5) = 1 ! number from 1 at left +Grid1_plot_colspan(5) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(5) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(5) = 0.10 ! fraction of full window width for padding on right +Grid1_plot_pad_top(5) = 0.05 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(5) = 0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(5) = 0.6 ! multiply txt_scale for subplot by this + +Grid1_plot_name(2) = 'TRho_Profile' +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) = 2 ! number from 1 at left +Grid1_plot_colspan(2) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(2) = -0.01 ! fraction of full window width for padding on left +Grid1_plot_pad_right(2) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(2) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(2) = 0.01 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(2) = 0.7 ! multiply txt_scale for subplot by this + +Grid1_plot_name(4) = 'History_Panels1' +Grid1_plot_row(4) = 3 ! number from 1 at top +Grid1_plot_rowspan(4) = 3 ! plot spans this number of rows +Grid1_plot_col(4) = 2 ! number from 1 at left +Grid1_plot_colspan(4) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(4) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(4) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(4) = 0.05 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(4) = 0.0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(4) = 0.6 ! multiply txt_scale for subplot by this + +Grid1_plot_name(6) = 'Profile_Panels3' +Grid1_plot_row(6) = 2 ! number from 1 at top +Grid1_plot_rowspan(6) = 4 ! plot spans this number of rows +Grid1_plot_col(6) = 3 ! Number from 1 at left +Grid1_plot_colspan(6) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(6) = 0.04 ! fraction of full window width for padding on left +Grid1_plot_pad_right(6) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(6) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(6) = 0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(6) = 0.6 ! multiply txt_scale for subplot by this + +!------------------------------------------------------------------------------------ + +Profile_Panels3_win_flag = .false. + +Profile_Panels3_title = '' + +Profile_Panels3_num_panels = 5 + +Profile_Panels3_yaxis_name(1) = 'Abundance' + +Profile_Panels3_yaxis_name(2) = 'Power' + +Profile_Panels3_yaxis_name(3) = 'Mixing' +Mixing_legend_txt_scale_factor = 0.9 + +Profile_Panels3_yaxis_name(4) = 'logRho' +Profile_Panels3_other_yaxis_name(4) = 'v_div_cs' ! 'vel_km_per_s' ! 'entropy' +Profile_Panels3_other_dymin(4) = 0.14 + +Profile_Panels3_yaxis_name(5) = 'logT' + +! x-axis limits and properties +Profile_Panels3_xaxis_name = 'mass' +Profile_Panels3_xmin = 0.0 +Profile_Panels3_xmax = -101d0 ! 2.2 +Profile_Panels3_xaxis_reversed = .false. + +Profile_Panels3_txt_scale = 0.7 + +!Profile_Panels3_xaxis_name = 'zone' +!Profile_Panels3_xmin = 800 +!Profile_Panels3_xmax = 1100 +!Profile_Panels3_xaxis_reversed = .true. + +!Profile_Panels3_show_grid = .true. +Profile_Panels3_show_mix_regions_on_xaxis = .true. + +!------------------------------------------------------------------------------------ + +!Profile_Panels1_win_flag = .true. +!Profile_Panels1_file_flag = .true. + Profile_Panels1_file_dir = 'png' + Profile_Panels1_file_prefix = 'profile_panels1_' + Profile_Panels1_file_interval = 1 + Profile_Panels1_file_width = -1 + Profile_Panels1_file_aspect_ratio = -1 + +Profile_Panels1_title = '' + +Profile_Panels1_txt_scale = 0.7 +Profile_Panels1_num_panels = 4 + +Profile_Panels1_yaxis_name(1) = 'logRho' +Profile_Panels1_dymin(1) = 0.14 +Profile_Panels1_other_yaxis_name(1) = 'logT' +Profile_Panels1_other_dymin(1) = 0.14 + +Profile_Panels1_yaxis_name(2) = 'entropy' +Profile_Panels1_other_yaxis_name(2) = 'pgas_div_p' + +Profile_Panels1_yaxis_name(3) = 'gradT' +Profile_Panels1_other_yaxis_name(3) = 'grada' +Profile_Panels1_same_yaxis_range(3) = .true. +Profile_Panels1_other_dymin(3) = 0.08 + +Profile_Panels1_yaxis_name(4) = 'log_opacity' +Profile_Panels1_dymin(1) = 0.14 +Profile_Panels1_other_yaxis_name(4) = 'gradr' +Profile_Panels1_other_dymin(1) = 0.14 + +! x-axis limits and properties +Profile_Panels1_xaxis_name = 'logtau' +Profile_Panels1_xmin = -101d0 +Profile_Panels1_xmax = 8.1 +Profile_Panels1_xaxis_reversed = .true. + +!Profile_Panels1_xaxis_name = 'zone' +!Profile_Panels1_xmin = 15 +!Profile_Panels1_xmax = 270 +!Profile_Panels1_xaxis_reversed = .true. + +!Profile_Panels1_show_grid = .true. +Profile_Panels1_show_mix_regions_on_xaxis = .true. + +!------------------------------------------------------------------------------------ + +!TRho_Profile_win_flag = .true. +TRho_Profile_win_width = 8 +TRho_Profile_win_aspect_ratio = 0.75 ! aspect_ratio = height/width + +! file output +!TRho_Profile_file_flag = .true. +TRho_Profile_file_dir = 'TRho' +TRho_Profile_file_prefix = 'trho_' +TRho_Profile_file_interval = 10 ! output when `mod(model_number,TRho_Profile_file_interval)==0` +TRho_Profile_file_width = -1 ! (inches) negative means use same value as for window +TRho_Profile_file_aspect_ratio = -1 ! negative means use same value as for window + +TRho_Profile_xleft = 0.15 +TRho_Profile_xright = 0.85 +TRho_Profile_ybot = 0.15 +TRho_Profile_ytop = 0.85 +TRho_Profile_txt_scale = 0.7 +TRho_Profile_title = ' ' + +TRho_switch_to_Column_Depth = .false. +TRho_switch_to_mass = .false. + +show_TRho_Profile_legend = .false. + TRho_Profile_legend_coord = 0.07 + TRho_Profile_legend_fjust = 0.0 + TRho_Profile_legend_disp1 = -2.0 + TRho_Profile_legend_del_disp = -1.3 + TRho_Profile_legend_txt_scale = 1.1 + +show_TRho_Profile_text_info = .false. + TRho_Profile_text_info_xfac = 0.77 ! controls x location + TRho_Profile_text_info_dxfac = 0.02 ! controls x spacing to value from text + TRho_Profile_text_info_yfac = 0.6 ! controls y location of 1st line + TRho_Profile_text_info_dyfac = -0.04 ! controls line spacing + +show_TRho_Profile_mass_locs = .false. +show_TRho_accretion_mesh_borders = .false. +show_TRho_Profile_kap_regions = .false. +show_TRho_Profile_gamma1_4_3rd = .true. +show_TRho_Profile_eos_regions = .false. +show_TRho_Profile_degeneracy_line = .true. +show_TRho_Profile_Pgas_Prad_line = .true. +show_TRho_Profile_burn_lines = .true. +show_TRho_Profile_burn_labels = .true. + +! axis limits +TRho_Profile_xmin = -12.0 +TRho_Profile_xmax = 10.0 +TRho_Profile_ymin = 3.0 +TRho_Profile_ymax = 10.0 + +! these are shown if show_TRho_Profile_mass_locs = .true. +! set all the entries +profile_mass_point_q = -1 +profile_mass_point_color_index = 1 +profile_mass_point_symbol = -6 +profile_mass_point_symbol_scale = 1.7 +profile_mass_point_str = '' +profile_mass_point_str_clr = 1 +profile_mass_point_str_scale = 1.0 + +! set defaults +num_profile_mass_points = 3 ! max is defined in star_def (max_num_profile_mass_points) + +profile_mass_point_q(1) = 0.5 +profile_mass_point_color_index(1) = 1 +profile_mass_point_symbol(1) = -6 +profile_mass_point_str(1) = ' 0.5 M\d\(0844)\u' +profile_mass_point_str_clr(1) = 1 + +profile_mass_point_q(2) = 0.95 +profile_mass_point_color_index(2) = 1 +profile_mass_point_symbol(2) = -6 +profile_mass_point_str(2) = ' 0.95 M\d\(0844)\u' +profile_mass_point_str_clr(3) = 1 + +profile_mass_point_q(3) = 0.999 +profile_mass_point_color_index(3) = 1 +profile_mass_point_symbol(3) = -6 +profile_mass_point_str(3) = ' 0.999 M\d\(0844)\u' +profile_mass_point_str_clr(3) = 1 + +!------------------------------------------------------------------------------------ + +! Text_Summary windows + +Text_Summary1_win_flag = .false. +Text_Summary1_win_width = 10 +Text_Summary1_win_aspect_ratio = 0.15 + +Text_Summary1_xleft = 0.01 +Text_Summary1_xright = 0.99 +Text_Summary1_ybot = 0.0 +Text_Summary1_ytop = 1.0 +Text_Summary1_txt_scale = 0.95 +Text_Summary1_title = '' + +Text_Summary1_num_rows = 6 ! <= 20 +Text_Summary1_num_cols = 5 ! <= 20 +Text_Summary1_name(:,:) = '' + +Text_Summary1_name(1,1) = 'model_number' +Text_Summary1_name(1,2) = 'log_dt' +Text_Summary1_name(1,3) = 'Mass' +Text_Summary1_name(1,4) = 'H_cntr' +Text_Summary1_name(1,5) = 'H_rich' + +Text_Summary1_name(2,2) = 'star_age' +Text_Summary1_name(2,3) = 'lg_Mdot' +Text_Summary1_name(2,4) = 'He_cntr' +Text_Summary1_name(2,5) = 'He_core' + +Text_Summary1_name(3,2) = 'gamma1_min' +Text_Summary1_name(3,3) = 'eta_cntr' +Text_Summary1_name(3,4) = 'C_cntr' +Text_Summary1_name(3,5) = 'CO_core' + +Text_Summary1_name(4,1) = 'log_max_T' +Text_Summary1_name(4,2) = 'log_LH' +Text_Summary1_name(4,3) = 'lg_Lnuc_tot' +Text_Summary1_name(4,4) = 'O_cntr' + +Text_Summary1_name(5,1) = 'log_cntr_T' +Text_Summary1_name(5,2) = 'log_LHe' +Text_Summary1_name(5,3) = 'lg_Lneu' +Text_Summary1_name(5,4) = 'Ne_cntr' +Text_Summary1_name(5,5) = 'zones' + +Text_Summary1_name(6,1) = 'log_cntr_Rho' +Text_Summary1_name(6,2) = 'log_LZ' +Text_Summary1_name(6,3) = 'lg_Lphoto' +Text_Summary1_name(6,5) = 'retries' + +!------------------------------------------------------------------------------------ + +! Abundance profile plot + +Abundance_win_flag = .false. + +! window properties +Abundance_win_width = 10 +Abundance_win_aspect_ratio = 0.75 + +Abundance_xleft = 0.15 +Abundance_xright = 0.85 +Abundance_ybot = 0.15 +Abundance_ytop = 0.85 +Abundance_txt_scale = 1.1 +Abundance_title = '' + +! isotopes to plot + +Abundance_num_isos_to_show = 20 + +Abundance_which_isos_to_show(1) = 'h1' +Abundance_which_isos_to_show(2) = 'he3' +Abundance_which_isos_to_show(3) = 'he4' +Abundance_which_isos_to_show(4) = 'c12' +Abundance_which_isos_to_show(5) = 'n14' +Abundance_which_isos_to_show(6) = 'o16' +Abundance_which_isos_to_show(7) = 'ne20' +Abundance_which_isos_to_show(8) = 'mg24' +Abundance_which_isos_to_show(9) = 'si28' +Abundance_which_isos_to_show(10) = 's32' +Abundance_which_isos_to_show(11) = 'ar36' +Abundance_which_isos_to_show(12) = 'ca40' +Abundance_which_isos_to_show(13) = 'ti44' +Abundance_which_isos_to_show(14) = 'cr48' +Abundance_which_isos_to_show(15) = 'cr56' +Abundance_which_isos_to_show(16) = 'fe52' +Abundance_which_isos_to_show(17) = 'fe54' +Abundance_which_isos_to_show(18) = 'fe56' +Abundance_which_isos_to_show(19) = 'ni56' +Abundance_which_isos_to_show(20) = 'neut' +!Abundance_which_isos_to_show(22) = 'ne22' + +! number and size of isotope labels along curves +num_abundance_line_labels = 4 +Abundance_line_txt_scale_factor = 1.1 + +! number and size of isotopes on legend +Abundance_legend_max_cnt = 10 +Abundance_legend_txt_scale_factor = 1.3 + +! yaxis limits +Abundance_log_mass_frac_min = -4!-6.4 ! -3.5 +Abundance_log_mass_frac_max = 0.3 + +! file output +Abundance_file_flag = .false. +Abundance_file_dir = 'Abundance' +Abundance_file_prefix = 'abund_' +Abundance_file_width = -1 ! (inches) negative means use same value as for window +Abundance_file_aspect_ratio = -1 ! negative means use same value as for window + +!------------------------------------------------------------------------------------ + +! power plot + +Power_win_flag = .false. +Power_win_width = 10 +Power_win_aspect_ratio = 0.75 +Power_title = '' + +Power_xleft = 0.15 +Power_xright = 0.85 +Power_ybot = 0.15 +Power_ytop = 0.85 +Power_txt_scale = 1.1 +Power_title = ' ' + +Power_legend_max_cnt = 10 +Power_legend_txt_scale_factor = 1.3 ! relative to other text + +! power yaxis limits -- to override system default selections +Power_ymin = -5.0 ! -101d0 ! only used if /= -101d0 +Power_ymax = 25.0 ! -101d0 ! only used if /= -101d0 + +! file output +Power_file_flag = .false. +Power_file_dir = 'png' +Power_file_prefix = 'power_' +Power_file_interval = 5 ! output when mod(model_number,Power_file_interval)==0 +Power_file_width = -1 ! (inches) negative means use same value as for window +Power_file_aspect_ratio = -1 ! negative means use same value as for window + +!------------------------------------------------------------------------------------ + +! mixing plot + +Mixing_xmin = 0.0 +Mixing_xmax = 1.6 ! -101d0 +Mixing_legend_txt_scale_factor = 1.4 ! relative to other text + +Mixing_show_rotation_details = .false. + +!Mixing_win_flag = .true. +!Mixing_file_flag = .true. +Mixing_file_dir = 'png' +Mixing_file_prefix = 'mixing_' +Mixing_file_interval = 1 ! output when `mod(model_number,Mixing_file_interval)==0` +Mixing_file_width = -1 ! (inches) negative means use same value as for window +Mixing_file_aspect_ratio = -1 ! negative means use same value as for window + +!----------------------------------------------------------------------- + +! TRho window + ! history of central temperature vs. density + + TRho_txt_scale = 0.7 + TRho_title = '' + + TRho_logT_min = -101d0 + TRho_logT_max = -101d0 + TRho_logRho_min = -101d0 + TRho_logRho_max = -101d0 + show_TRho_degeneracy_line = .true. + +!----------------------------------------------------------------------- + + !# HR window + ! history of `lg_L` vs. `lg_Teff` + + HR_win_flag = .true. + + HR_win_width = 6 + HR_win_aspect_ratio = 0.75 ! aspect_ratio = height/width + + HR_xleft = 0.15 + HR_xright = 0.85 + HR_ybot = 0.15 + HR_ytop = 0.85 + HR_txt_scale = 0.7 !1.0 + HR_title = '' + + ! axis limits -- to override system default selections + HR_logT_min = -101d0 ! only used if /= -101d0 + HR_logT_max = -101d0 ! only used if /= -101d0 + HR_logL_min = -101d0 ! only used if /= -101d0 + HR_logL_max = -101d0 ! only used if /= -101d0 + + HR_logL_margin = 0.1 + HR_logT_margin = 0.1 + HR_dlogT_min = -1 + HR_dlogL_min = -1 + + HR_step_min = -1 ! only plot models with model number >= this + HR_step_max = -1 ! only plot models with model number <= this + + show_HR_classical_instability_strip = .true. + show_HR_Mira_instability_region = .false. + show_HR_WD_instabilities = .false. + + show_HR_target_box = .false. + HR_target_n_sigma = -3 ! -n means show sig 1..n + HR_target_logL = 0 + HR_target_logL_sigma = 0 + HR_target_logT = 0 + HR_target_logT_sigma = 0 + + show_HR_annotation1 = .false. + show_HR_annotation2 = .false. + show_HR_annotation3 = .false. + + HR_fname = '' ! file name for extra HR data + + ! Enables calling a subroutine to add extra information to a plot + ! see `$MESA_DIR/star/other/pgstar_decorator.f90` + HR_use_decorator = .false. + + ! file output + HR_file_flag = .false. + HR_file_dir = 'png' + HR_file_prefix = 'hr_' + HR_file_interval = 5 ! output when `mod(model_number,HR_file_interval)==0` + HR_file_width = -1 ! (inches) negative means use same value as for window + HR_file_aspect_ratio = -1 ! negative means use same value as for window + +!----------------------------------------------------------------------- + + History_Panels1_title = '' + + History_Panels1_xaxis_name = 'model_number' + History_Panels1_max_width = -1 + + !History_Panels1_xaxis_name = 'star_age' + !History_Panels1_max_width = 10 + + History_Panels1_txt_scale = 0.75 + History_Panels1_xmin = -101d0 + History_Panels1_xmax = -101d0 + History_Panels1_dxmin = -1 + History_Panels1_xaxis_reversed = .false. + History_Panels1_xaxis_log = .false. + History_Panels1_xmargin = 0.0 + + ! :: + + History_Panels1_num_panels = 4 + + ! :: + + History_Panels1_yaxis_name(1) = 'log_L' + History_Panels1_yaxis_reversed(1) = .false. + History_Panels1_ymin(1) = -101d0 + History_Panels1_ymax(1) = -101d0 + History_Panels1_dymin(1) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(1) = 'log_Teff' + History_Panels1_other_yaxis_reversed(1) = .false. + History_Panels1_other_ymin(1) = -101d0 + History_Panels1_other_ymax(1) = -101d0 + History_Panels1_other_dymin(1) = 0.14 + + ! :: + + History_Panels1_yaxis_name(2) = 'lum_div_Ledd' + History_Panels1_yaxis_reversed(2) = .false. + History_Panels1_ymin(2) = -101d0 + History_Panels1_ymax(2) = -101d0 + History_Panels1_dymin(2) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(2) = 'log_max_T' ! 'v_surf_km_s' + History_Panels1_other_yaxis_reversed(2) = .false. + History_Panels1_other_ymin(2) = -101d0 + History_Panels1_other_ymax(2) = -101d0 + History_Panels1_other_dymin(2) = 0.14 + + ! :: + + History_Panels1_yaxis_name(3) = 'radius' + History_Panels1_yaxis_reversed(3) = .false. + History_Panels1_ymin(3) = -101d0 + History_Panels1_ymax(3) = -101d0 + History_Panels1_dymin(3) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(3) = 'log_cntr_Rho' + History_Panels1_other_yaxis_reversed(3) = .false. + History_Panels1_other_ymin(3) = -101d0 + History_Panels1_other_ymax(3) = -101d0 + History_Panels1_other_dymin(3) = 0.14 + ! :: + + History_Panels1_yaxis_name(4) = 'log_dt' + History_Panels1_yaxis_reversed(4) = .false. + History_Panels1_ymin(4) = -101d0 + History_Panels1_ymax(4) = -101d0 + History_Panels1_dymin(4) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(4) = '' + History_Panels1_other_yaxis_reversed(4) = .false. + History_Panels1_other_ymin(4) = -101d0 + History_Panels1_other_ymax(4) = -101d0 + History_Panels1_other_dymin(4) = 0.14 + +!----------------------------------------------------------------------- + +! some global grid plot settings + +pgstar_grid_show_title = .true. +pgstar_grid_title_scale = 1.0 +pgstar_grid_title_lw = 3 +pgstar_grid_title_disp = 2.5 ! 1.8 +pgstar_grid_title_coord = 0.5 +pgstar_grid_title_fjust = 0.5 + +pgstar_age_scale = 0.8 +pgstar_age_disp = 3.0 +pgstar_age_coord = 0.0 +pgstar_age_fjust = 0.0 + +pgstar_xaxis_label_scale = 1.3 +pgstar_left_yaxis_label_scale = 1.3 +pgstar_xaxis_label_disp = 2.2 +pgstar_left_yaxis_label_disp = 3.1 +pgstar_right_yaxis_label_disp = 4.1 + +pgstar_model_scale = 0.8 +pgstar_model_disp = 3.0 +pgstar_model_coord = 1.0 +pgstar_model_fjust = 1.0 + +! white_on_black flags -- true means white foreground color on black background +file_white_on_black_flag = .true. +file_device = 'png' ! options 'png' and 'vcps' for png and postscript respectively + +kipp_win_flag=.true. +kipp_file_flag=.true. +Kipp_mix_interval = 1 +Kipp_show_luminosities = .true. + +!Grid1_file_flag = .true. + +!pause_flag = .true. + +Profile_Panels3_xaxis_name = 'mass' +Profile_Panels3_xmin = 0d0 +Profile_Panels3_xmax = -101d0 +Profile_Panels3_xaxis_reversed = .false. + +Profile_Panels3_yaxis_name(4) = 'gamma1' +Profile_Panels3_dymin(4) = 0.14 +Profile_Panels3_other_yaxis_name(4) = 'vel_km_per_s' +Profile_Panels3_dymin(4) = 0.14 + +TRho_Profile_xmin = -15 !3.0 +TRho_Profile_xmax = 10 +TRho_Profile_ymin = 3.35 !8.5 +TRho_Profile_ymax = 10.1 + +TRho_logT_min = 9.2d0 +TRho_logRho_min = 6d0 +TRho_logRho_max = 10d0 +TRho_logT_max = 10d0 + +Text_Summary1_name(1,2) = 'time_step_sec' +Text_Summary1_name(2,2) = 'star_age_sec' + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/profile_columns.list b/star/dev_cases_massive_stars/60M_envelope_issues/profile_columns.list new file mode 100644 index 000000000..1b1e2fed2 --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/profile_columns.list @@ -0,0 +1,962 @@ +! profile_columns.list -- determines the contents of star model profiles +! you can use a non-standard version by setting profile_columns_file in your inlist + +! units are cgs unless otherwise noted. + +! reorder the following names as desired to reorder columns. +! comment out the name to omit a column (fewer columns => less IO => faster running). +! remove '!' to restore a column. + +! if you have a situation where you want a non-standard set of columns, +! make a copy of this file, edit as desired, and give the new filename in your inlist +! as profile_columns_file. if you are just adding columns, you can 'include' this file, +! and just list the additions in your file. note: to include the standard default +! version, use include '' -- the 0 length string means include the default file. + +! if you need to have something added to the list of options, let me know.... + +! the first few lines of the profile contain general info about the model. +! for completeness, those items are described at the end of this file. + + +! note: you can include another list by doing +! include 'filename' +! include '' means include the default standard list file + + +! the following lines of the profile contain info for 1 zone per row, surface to center. + +! minimal set of enabled columns: + + zone ! numbers start with 1 at the surface + mass ! m/Msun. mass coordinate of outer boundary of cell. + logR ! log10(radius/Rsun) at outer boundary of zone + logT ! log10(temperature) at center of zone + logRho ! log10(density) at center of zone + logP ! log10(pressure) at center of zone + x_mass_fraction_H + y_mass_fraction_He + z_mass_fraction_metals + + +! everything below this line is deactivated + + +!# Structure + !logM ! log10(m/Msun) + !log_mass + dm ! cell mass (grams) + !dm_bar ! boundary mass (grams) average of adjacent dm's + logdq ! log10(dq) + !log_dq + dq_ratio ! dq(k-1)/dq(k) + q ! fraction of star mass interior to outer boundary of this zone + !log_q ! log10(q) + !xq + + !grav ! gravitational acceleration (cm sec^2) + !log_g ! log10 gravitational acceleration (cm sec^2) + !g_div_r ! grav/radius (sec^2) + !r_div_g ! radius/grav (sec^-2) + !cgrav_factor ! = cgrav(k)/standard_cgrav + vel_km_per_s ! velocity at outer boundary of zone (km/s) -- 0 if no velocity variable + + radius ! radius at outer boundary of zone (in Rsun units) + radius_cm ! radius at outer boundary of zone (in centimeters) + !radius_km ! radius at outer boundary of zone (in kilometers) + logR_cm ! log10 radius at outer boundary of zone (in centimeters) + rmid ! radius at center by mass of zone (in Rsun units) + !r_div_R ! fraction of total radius + + velocity ! velocity at outer boundary of zone (cm/s) -- 0 if no velocity variable + v_div_r ! velocity divided by radius + !v_times_t_div_r + !rho_times_r3 ! at face + !log_rho_times_r3 ! at face + !scale_height ! in Rsun units + pressure_scale_height ! in Rsun units + + !m_div_r ! gm/cm + !dmbar_m_div_r + !log_dmbar_m_div_r + !mass_grams ! mass coordinate of outer boundary of cell in grams + mmid ! mass at midpoint of cell (average of mass coords of the cell boundaries) Msun units. + + !m_grav ! total enclosed gravitational mass. Msun units. + !m_grav_div_m_baryonic ! mass_gravitational/mass at cell boundary + !mass_correction_factor ! dm_gravitational/dm (dm is baryonic mass of cell) + + !xm ! mass exterior to point (Msun units) + !dq ! mass of zone as a fraction of total star mass + logxq ! log10(1-q) + !logxm ! log10(xm) + + !xr ! radial distance from point to surface (Rsun) + !xr_cm ! radial distance from point to surface (cm) + !xr_div_R ! radial distance from point to surface in units of star radius + !log_xr ! log10 radial distance from point to surface (Rsun) + !log_xr_cm ! log10 radial distance from point to surface (cm) + !log_xr_div_R ! log10 radial distance from point to surface in units of star radius + + dr ! r(outer edge) - r(inner edge); radial extent of cell in cm. + log_dr ! log10 cell width (cm) + !dv ! v(inner edge) - v(outer edge); rate at which delta_r is shrinking (cm/sec). + + !dt_dv_div_dr ! dt*dv/dr; need to have this << 1 for every cell + !dr_div_R ! cell width divided by star R + !log_dr_div_R ! log10 cell width divided by star R + !dr_div_rmid ! cell width divided by rmid + !log_dr_div_rmid ! log(dr_div_rmid) + + dr_div_cs ! cell sound crossing time (sec) + log_dr_div_cs ! log10 cell sound crossing time (sec) + !dr_div_cs_yr ! cell sound crossing time (years) + !log_dr_div_cs_yr ! log10 cell sound crossing time (years) + + !acoustic_radius ! sound time from center to outer cell boundary (sec) + !log_acoustic_radius ! log10(acoustic_radius) (sec) + acoustic_depth ! sound time from surface to outer cell boundary (sec) + !log_acoustic_depth ! log10(acoustic_depth) (sec) + !acoustic_r_div_R_phot + + !cell_collapse_time ! only set if doing explicit hydro + ! time (seconds) for cell inner edge to catch cell outer edge at current velocities + ! 0 if distance between inner and outer is increasing + !log_cell_collapse_time ! log of cell_collapse_time + + !compression_gradient + + + +!# Thermodynamics + temperature ! temperature at center of zone + !logT_face ! log10(temperature) at outer boundary of zone + !logT_bb ! log10(black body temperature) at outer boundary of zone + !logT_face_div_logT_bb + + energy ! internal energy (ergs/g) + logE ! log10(specific internal energy) at center of zone + rho ! density + !density ! rho + + entropy ! specific entropy divided by (avo*kerg) + !logS ! log10(specific entropy) + !logS_per_baryon ! log10(specific entropy per baryon / kerg) + + pressure ! total pressure at center of zone (pgas + prad) + !prad ! radiation pressure at center of zone + !pgas ! gas pressure at center of zone (electrons and ions) + logPgas ! log10(pgas) + pgas_div_ptotal ! pgas/pressure + + eta ! electron degeneracy parameter (eta >> 1 for significant degeneracy) + mu ! mean molecular weight per gas particle (ions + free electrons) + + grada ! dlnT_dlnP at constant S + !dE_dRho ! at constant T + !cv ! specific heat at constant volume + !cp ! specific heat at constant total pressure + + !log_CpT + gamma1 ! dlnP_dlnRho at constant S + !gamma3 ! gamma3 - 1 = dlnT_dlnRho at constant S + !gam ! plasma interaction parameter (> 160 or so means starting crystallization) + free_e ! free_e is mean number of free electrons per nucleon + !logfree_e ! log10(free_e), free_e is mean number of free electrons per nucleon + !chiRho ! dlnP_dlnRho at constant T + !chiT ! dlnP_dlnT at constant Rho + + csound ! sound speed + log_csound + !csound_face ! sound speed (was previously called csound_at_face) + !cs_at_cell_bdy ! sound speed at cell boundary (csound is at cell center) + !v_div_cs ! velocity divided by sound speed + v_div_csound ! velocity divided by sound speed + !div_v + + !thermal_time_to_surface ! in seconds + !log_thermal_time_to_surface + !t_rad + !log_t_rad + !log_t_sound + !log_t_thermal + + !eos_phase + !eos_frac_OPAL_SCVH + !eos_frac_HELM + !eos_frac_Skye + !eos_frac_PC + !eos_frac_FreeEOS + !eos_frac_CMS + !eos_frac_ideal + + !pgas_div_p + !prad_div_pgas + !prad_div_pgas_div_L_div_Ledd + !pressure_scale_height_cm + + !eps_grav_composition_term + !eps_grav_plus_eps_mdot + + !chiRho_for_partials + !chiT_for_partials + !rel_diff_chiRho_for_partials + !rel_diff_chiT_for_partials + + !latent_ddlnRho + !latent_ddlnT + + !log_P_face + !log_Ptrb + !log_cp_T_div_t_sound + + !QQ + + +!# Mass accretion + eps_grav ! -T*ds/dt (negative for expansion) + !log_abs_eps_grav_dm_div_L + !log_abs_v ! log10(abs(velocity)) (cm/s) + !log_mdot_cs + !log_mdot_v + !eps_mdot + !env_eps_grav + !xm_div_delta_m + !log_xm_div_delta_m + + +!# Nuclear energy generation + !signed_log_eps_grav ! sign(eps_grav)*log10(max(1,abs(eps_grav))) + !signed_log_eps_nuc + !net_nuclear_energy ! erg/gm/s from nuclear reactions minus all neutrino losses + ! The value plotted is net_nuclear_energy = sign(val)*log10(max(1,abs(val))) + ! where val = net nuclear energy minus all neutrino losses. + !net_energy ! net_energy + eps_grav. + ! The value plotted is net_energy = sign(val)*log10(max(1,abs(val))) + ! where val = net nuclear energy plus eps_grav minus all neutrino losses. + !eps_nuc_plus_nuc_neu + !eps_nuc_minus_non_nuc_neu + !eps_nuc_start + + eps_nuc ! ergs/g/sec from nuclear reactions (including losses to reaction neutrinos) + !log_abs_eps_nuc + !d_lnepsnuc_dlnd + !d_epsnuc_dlnd + !deps_dlnd_face + ! (was previously called deps_dlnd_at_face) + !d_lnepsnuc_dlnT + !d_epsnuc_dlnT + !deps_dlnT_face + ! (was previously called deps_dlnT_at_face) + !eps_nuc_neu_total ! erg/gm/sec as neutrinos from nuclear reactions + + non_nuc_neu ! non-nuclear-reaction neutrino losses + !nonnucneu_plas ! plasmon neutrinos (for collective reactions like gamma_plasmon => nu_e + nubar_e) + !nonnucneu_brem ! bremsstrahlung (for reactions like e- + (z,a) => e- + (z,a) + nu + nubar) + !nonnucneu_phot ! photon neutrinos (for reactions like e- + gamma => e- + nu_e + nubar_e) + !nonnucneu_pair ! pair production (for reactions like e+ + e- => nu_e + nubar_e) + !nonnucneu_reco ! recombination neutrinos (for reactions like e- (continuum) => e- (bound) + nu_e + nubar_e) + + ! ergs/g/sec for reaction categories + add_reaction_categories ! this adds all the reaction categories + ! NOTE: you can list specific categories by giving their names (from chem_def) + pp + cno + tri_alpha + !c_alpha + !n_alpha + !o_alpha + !ne_alpha + !na_alpha + !mg_alpha + !si_alpha + !s_alpha + !ar_alpha + !ca_alpha + !ti_alpha + !fe_co_ni + !c12_c12 + !c12_o16 + !o16_o16 + !photo + !pnhe4 + !other + + ! adds columns for all of the reactions that are in the current net + ! Note that if using op_split_burn=.true. then zones which have been split will report 0 for their rates + !add_raw_rates ! raw reaction rates, reactions/second + !add_screened_rates ! screened reaction rates reactions/second + !add_eps_nuc_rates ! Nuclear energy (minus neutrino losses) released erg/s + !add_eps_neu_rates ! Neutrino losses erg/s + + ! individual reactions (as many as desired) + ! use list_net_reactions = .true. in star_job to list all reactions in the current net + ! reactions/second + !raw_rate r_h1_h1_ec_h2 + !raw_rate r_h1_h1_wk_h2 + + !burn_num_iters ! Number of split_burn iterations taken + !burn_avg_epsnuc + !log_burn_avg_epsnuc + +!# Composition + !x_mass_fraction_H + !y_mass_fraction_He + !z_mass_fraction_metals + abar ! average atomic weight (g/mole) + zbar ! average charge + z2bar ! average charge^2 + ye ! average charge per baryon = proton fraction + + x ! hydrogen mass fraction + !log_x + y ! helium mass fraction + !log_y + z ! metallicity + log_z ! metallicity + + add_abundances ! this adds all of the isos that are in the current net + ! NOTE: you can list specific isotopes by giving their names (from chem_def) + !h1 + !he3 + !he4 + !c12 + !n14 + !o16 + + add_log_abundances ! this adds log10 of all of the isos that are in the current net + ! NOTE: you can list specific isotopes by giving their names (from chem_def) + !log h1 + !log he3 + !log he4 + !log c12 + !log n14 + !log o16 + + ! log concentration of species + ! concentration = number density / number density of electrons + ! Ci = (Xi/Ai) / sum(Zi*Xi/Ai) [see Thoul et al, ApJ 421:828-842, 1994] + !log_concentration h1 + !log_concentration he4 + + + ! typical charge for given species + ! (used by diffusion) + !typical_charge he4 + !typical_charge c12 + !typical_charge fe52 + + ! ionization state for given species + ! (same as typical charge, except that it's unsmoothed) + !ionization he4 + !ionization c12 + !ionization fe52 + + !cno_div_z ! abundance of c12, n14, and o16 as a fraction of total z + + + + +!# Opacity + opacity ! opacity measured at center of zone + log_opacity ! log10(opacity) + !dkap_dlnrho_face ! partial derivative of opacity wrt. ln rho (at T=const) at outer edge of cell + ! (was previously called dkap_dlnrho_at_face) + !dkap_dlnT_face ! partial derivative of opacity wrt. ln T (at rho=const) at outer edge of cell + ! (was previously called dkap_dlnT_at_face) + !kap_frac_lowT ! fraction of opacity from lowT tables + !kap_frac_highT ! fraction of opacity from highT tables + !kap_frac_Type2 ! fraction of opacity from Type2 tables + !kap_frac_Compton ! fraction of opacity from Compton_Opacity + !kap_frac_op_mono ! fraction of opacity from OP mono + + !log_kap + log_kap_times_factor + + !log_c_div_tau + !xtau + !xlogtau + !logtau_sub_xlogtau + +!# Luminosity + luminosity ! luminosity at outer boundary of zone (in Lsun units) + logL ! log10(max(1d-2,L/Lsun)) + !log_Lrad + !log_Ledd ! log10(Leddington/Lsun) -- local Ledd, 4 pi clight G m / kap + log_L_div_Ledd ! log10(max(1d-12,L/Leddington)) + !log_Lrad_div_Ledd + !log_Lrad_div_L + !signed_log_power ! sign(L)*log10(max(1,abs(L))) + + lum_adv + lum_conv + !lum_conv_MLT + !lum_div_Ledd + lum_erg_s + lum_plus_lum_adv + lum_rad + + !log_L_div_CpTMdot + log_abs_lum_erg_s + + !L + !Lc + !Lc_div_L + !Lr + !Lr_div_L + !Lt + !Lt_div_L + +!# Energetics + total_energy ! specific total energy of cell (ergs/g). internal+potential+kinetic+rotation. + !cell_specific_IE + !cell_specific_KE + !cell_IE_div_IE_plus_KE + !cell_KE_div_IE_plus_KE + + !cell_ie_div_star_ie + !cell_internal_energy_fraction + !cell_internal_energy_fraction_start + !cell_specific_PE + + !log_cell_ie_div_star_ie + !log_cell_specific_IE + + !ergs_eps_grav_plus_eps_mdot + !ergs_error + !ergs_error_integral + !ergs_mdot + !ergs_rel_error_integral + !dm_eps_grav + + !dE + + !etrb + !log_etrb + !extra_grav + !log_rel_E_err + + !total_energy_sign + +!# Convection + mlt_mixing_length ! mixing length for mlt (cm) + !mlt_mixing_type ! value returned by mlt + !mlt_Pturb + !alpha_mlt + + conv_vel ! convection velocity (cm/sec) + log_conv_vel ! log10 convection velocity (cm/sec) + + conv_L_div_L + log_conv_L_div_L + !lum_conv_div_lum_rad + !lum_rad_div_L_Edd + !lum_conv_div_lum_Edd + !lum_conv_div_L + !lum_rad_div_L + !lum_rad_div_L_Edd_sub_fourPrad_div_PchiT ! density increases outward if this is > 0 + ! see Joss, Salpeter, and Ostriker, "Critical Luminosity", ApJ 181:429-438, 1973. + + gradT ! mlt value for required temperature gradient dlnT/dlnP + + gradr ! dlnT/dlnP required for purely radiative transport + !grad_temperature ! smoothed dlnT/dlnP at cell boundary + !grad_density ! smoothed dlnRho/dlnP at cell boundary + + !gradL ! gradient for Ledoux criterion for convection + !sch_stable ! 1 if grada > gradr, 0 otherwise + !ledoux_stable ! 1 if gradL > gradr, 0 otherwise + + !grada_sub_gradT + gradT_sub_grada ! gradT-grada at cell boundary + !gradT_div_grada ! gradT/grada at cell boundary + + !gradr_sub_gradT + !gradT_sub_gradr ! gradT-gradr at cell boundary + !gradT_div_gradr ! gradT/gradr at cell boundary + + !log_gradT_div_gradr ! log10 gradT/gradr at cell boundary + !log_mlt_Gamma ! convective efficiency + conv_vel_div_csound ! convection velocity divided by sound speed + !conv_vel_div_L_vel ! L_vel is velocity needed to carry L by convection; L = 4*pi*r^2*rho*vel**3 + log_mlt_D_mix ! log10 diffusion coefficient for mixing from mlt (cm^2/sec) + + !gradr_div_grada ! gradr/grada_face; > 1 => Schwarzschild unstable for convection + !gradr_sub_grada ! gradr - grada_face; > 0 => Schwarzschild unstable for convection + + !gradL_sub_gradr + !gradP_div_rho + !gradT_excess_effect + !gradT_rel_err + !gradT_sub_a + !grada_face + !grada_sub_gradr + !diff_grads + !log_diff_grads + + !mlt_D + !mlt_Gamma + !mlt_Y_face + !mlt_Zeta + !mlt_gradT + !mlt_log_abs_Y + !mlt_vc + !log_mlt_vc + !dvc_dt_TDC_div_g + + !superad_reduction_factor + !conv_vel_div_mlt_vc + + !log_Lconv + !log_Lconv_div_L + +!# Mixing + !mixing_type ! mixing types are defined in mesa/const/public/const_def + log_D_mix ! log10 diffusion coefficient for mixing in units of cm^2/second (Eulerian) + !log_D_mix_non_rotation + !log_D_mix_rotation + + log_D_conv ! D_mix for regions where mix_type = convective_mixing + !log_D_leftover ! D_mix for regions where mix_type = leftover_convective_mixing + log_D_semi ! D_mix for regions where mix_type = semiconvective_mixing + log_D_ovr ! D_mix for regions where mix_type = overshoot_mixing + log_D_thrm ! D_mix for regions where mix_type = thermohaline_mixing + log_D_minimum ! D_mix for regions where mix_type = minimum_mixing + log_D_rayleigh_taylor ! D_mix for regions where mix_type = rayleigh_taylor_mixing + !log_D_anon ! D_mix for regions where mix_type = anonymous_mixing + log_D_omega + + log_sig_mix ! sig(k) is mixing flow across face k in (gm sec^1) + ! sig(k) = D_mix*(4*pi*r(k)**2*rho_face)**2/dmavg + + !dominant_isoA_for_thermohaline + !dominant_isoZ_for_thermohaline + !gradL_composition_term + + mix_type + + + +!# Optical Depth + tau ! optical depth + !log_column_depth ! log10 column depth, exterior mass / area (g cm^-2) + !log_radial_depth ! log10 radial distance to surface (cm) + logtau ! log10(optical depth) at cell face + !tau_eff ! tau that gives the local P == P_atm if this location at surface + ! tau_eff = kap*(P/g - Pextra_factor*(L/M)/(6*pi*clight*cgrav)) + !tau_eff_div_tau + + + +!# Rotation + omega ! angular velocity = j_rot/i_rot + log_omega + log_j_rot + log_J_div_M53 ! J is j*1e-15 integrated from center; M53 is m^(5/3) + log_J_inside ! J_inside is j_rot integrated from center + !shear ! -dlnomega/dlnR + log_abs_shear ! log10(abs(dlnomega/dlnR)) + !richardson_number + i_rot ! specific moment of inertia at cell boundary + j_rot ! specific angular momentum at cell boundary + v_rot ! rotation velocity at cell boundary (km/sec) + !w_div_w_crit_roche !ratio of rotational velocity to keplerian at the equator + !without the contribution from the Eddington factor + fp_rot ! rotation factor for pressure + ft_rot ! rotation factor for temperature + !ft_rot_div_fp_rot ! gradr factor + + !log_am_nu_non_rot ! log10(am_nu_non_rot) + !log_am_nu_rot ! log10(am_nu_rot) + log_am_nu ! log10(am_nu_non_rot + am_nu_rot) + + r_polar ! (Rsun) + log_r_polar ! log10 (Rsun) + r_equatorial ! (Rsun) + log_r_equatorial ! log10 (Rsun) + r_e_div_r_p ! equatorial/r_polar + omega_crit ! breakup angular velocity = sqrt(G M / equatorial^3) + omega_div_omega_crit + + !am_log_nu_omega ! for diffusion of omega + !am_log_nu_j ! for diffusion of angular momentum + + !am_log_nu_rot ! diffusion of angular momentum driven by rotation + !am_log_nu_non_rot ! diffusion driven by other sources, e.g. convection + + !am_log_sig_omega ! for diffusion of omega + !am_log_sig_j ! for diffusion of angular momentum + am_log_sig ! == am_log_sig_omega + + !am_log_D_visc ! diffusion coeff for kinematic viscosity + am_log_D_DSI ! diffusion coeff for dynamical shear instability + am_log_D_SH ! diffusion coeff for Solberg-Hoiland instability + am_log_D_SSI ! diffusion coeff for secular shear instability + am_log_D_ES ! diffusion coeff for Eddington-Sweet circulation + am_log_D_GSF ! diffusion coeff for Goldreich-Schubert-Fricke instability + am_log_D_ST ! Spruit dynamo mixing diffusivity + am_log_nu_ST ! Spruit dynamo effective viscosity + + dynamo_log_B_r ! (Gauss) + dynamo_log_B_phi ! (Gauss) + + !am_domega_dlnR + !log_abs_dlnR_domega + + !w_div_w_crit_roche2 + + +!# Diffusion + ! electric field from element diffusion calculation + !e_field + !log_e_field + + ! gravitational field from element diffusion calculation + !g_field_element_diffusion + !log_g_field_element_diffusion + + !eE_div_mg_element_diffusion + !log_eE_div_mg_element_diffusion + + ! element diffusion velocity for species + !edv h1 + !edv he4 + !edv o16 + + ! Energy generated by Ne22 sedimentation. + !eps_WD_sedimentation + !log_eps_WD_sedimentation + + !eps_diffusion + !log_eps_diffusion + + !diffusion_D h1 ! self diffusion coeff + !diffusion_dX h1 ! change in h1 mass fraction from diffusion + !diffusion_dX he4 ! change in he4 mass fraction from diffusion + !diffusion_dX n20 ! change in n20 mass fraction from diffusion + + !v_rad h1 ! velocity from radiative levitation + !v_rad he4 ! velocity from radiative levitation + !v_rad ne20 ! velocity from radiative levitation + + !log_g_rad h1 ! log10 acceleration from radiative levitation + !log_g_rad he4 ! log10 acceleration from radiative levitation + !log_g_rad ne20 ! log10 acceleration from radiative levitation + +!# Phase Separation + !eps_phase_separation + +!# Oscillations + !brunt_N2 ! brunt-vaisala frequency squared + !brunt_N2_structure_term + !brunt_N2_composition_term + !log_brunt_N2_structure_term + !log_brunt_N2_composition_term + !brunt_A ! = N^2*r/g + !brunt_A_div_x2 ! x = r(k)/r(1) + !brunt_N2_dimensionless ! N2 in units of 3GM/R^3 + !brunt_N_dimensionless ! N in units of sqrt(3GM/R^3) + !brunt_frequency ! cycles per day + !brunt_N ! sqrt(abs(brunt_N2)) + !log_brunt_N ! log10(brunt_N) + !log_brunt_N2 ! log10(brunt_N2) + !log_brunt_N2_dimensionless ! log10(brunt_N2_dimensionless) + + !brunt_B ! smoothed numerical difference + !brunt_nonB ! = grada - gradT + !log_brunt_B ! smoothed numerical difference + !log_brunt_nonB ! = grada - gradT + + !sign_brunt_N2 ! sign of brunt_N2 (+1 for Ledoux stable; -1 for Ledoux unstable) + !brunt_nu ! brunt_frequency in microHz + !log_brunt_nu ! brunt_frequency in microHz + + !lamb_S ! lamb frequency for l=1: S = sqrt(2)*csound/r (rad/s) + !lamb_S2 ! squared lamb frequency for l=1: S2 = 2*(csound/r)^2 (rad^2/s^2) + + !lamb_Sl1 ! lamb frequency for l=1; = sqrt(2)*csound/r (microHz) + !lamb_Sl2 ! lamb frequency for l=2; = sqrt(6)*csound/r (microHz) + !lamb_Sl3 ! lamb frequency for l=3; = sqrt(12)*csound/r (microHz) + !lamb_Sl10 ! lamb frequency for l=10; = sqrt(110)*csound/r (microHz) + + !log_lamb_Sl1 ! log10(lamb_Sl1) + !log_lamb_Sl2 ! log10(lamb_Sl2) + !log_lamb_Sl3 ! log10(lamb_Sl3) + !log_lamb_Sl10 ! log10(lamb_Sl10) + + !brunt_N_div_r_integral ! integral from center of N*dr/r + !k_r_integral ! integral from center of k_r*dr + !brunt_N2_sub_omega2 + !sl2_sub_omega2 + + +!# RSP + + !rsp_Chi ! dlnP_dlnRho + !rsp_Et ! Specific turbulent energy + !rsp_logEt ! Log specific turbulent energy + !rsp_erad ! Specific internal (radiative) energy + !rsp_log_erad ! Log specific internal (radiative) energy + !rsp_Hp_face ! Pressure scale height at cell face + !rsp_Lc ! Convective luminosity + !rsp_Lc_div_L ! Convective luminosity div total luminosity + !rsp_Lr ! Radiative luminosity + !rsp_Lr_div_L ! Radiative luminosity div total luminosity + !rsp_Lt ! Turbulent luminosity + !rsp_Lt_div_L ! Turbulent luminosity div total luminosity + !rsp_Pt ! Turbulent pressure, p_t, see Table 1 in MESA5 + !rsp_Uq ! Viscous momentum transfer rate, U_q, see Table 1 in MESA5 + !rsp_Eq ! Viscous energy transfer rate, epsilon_q, see Table 1 in MESA5 + !rsp_Pvsc ! Artificial viscosity, p_av, see Table 1 in MESA5 + !rsp_gradT ! Temperature gradient + !rsp_Y_face ! Superadiabatic gradient at cell face, Y_sag, see Table 1 in MESA5 + !rsp_damp ! Turbulent dissipation, D, see Table 1 in MESA5 + !rsp_dampR ! Radiative cooling, D_r, see Table 1 in MESA5 + !rsp_sink ! Sum of turbulent dissipation and radiative cooling terms + !rsp_src ! Source function, S, see Table 1 in MESA5 + !rsp_src_snk ! Convective coupling, C, see Table 1 in MESA5 + !rsp_heat_exchange_timescale ! 1d0/(clight * opacity * density) + !rsp_log_heat_exchange_timescale + !rsp_log_dt_div_heat_exchange_timescale ! Ratio of time step to heat exchange timescale + !w + !log_w + + !COUPL + !DAMP + !DAMPR + !SOURCE + !Chi + !Eq + !Hp_face + !PII_face + !Ptrb + !Pvsc + !Uq + !Y_face + +!# RTI + + RTI_du_diffusion_kick + alpha_RTI + boost_for_eta_RTI + dedt_RTI + dudt_RTI + eta_RTI + log_alpha_RTI + !log_boost_for_eta_RTI + log_eta_RTI + !log_etamid_RTI + log_lambda_RTI_div_Hrho + log_sig_RTI + !log_sigmid_RTI + !log_source_RTI + log_source_minus_alpha_RTI + log_source_plus_alpha_RTI + !source_minus_alpha_RTI + !source_plus_alpha_RTI + lambda_RTI + +!# Hydrodynamics + + + !v + v_div_v_escape + !v_div_vesc + !v_kms + !log_v_escape + + u + u_face + + P_face + + +!# Extras + extra_heat + !extra_L ! extra_heat integrated from center (Lsun) + !log_extra_L ! log10 integrated from center (Lsun) + !log_irradiation_heat + + !extra_jdot ! set in other_torque routine + !extra_omegadot ! set in other_torque routine + + extra_opacity_factor ! set in other_opacity_factor routine + + ! diffusion factor profile for species, set in other_diffusion_factor routine + !extra_diffusion_factor h1 + !extra_diffusion_factor he4 + !extra_diffusion_factor o16 + + + +!# Miscellaneous + + !dlog_h1_dlogP ! (log(h1(k)) - log(h1(k-1)))/(log(P(k)) - log(P(k-1))) + !dlog_he3_dlogP + !dlog_he4_dlogP + !dlog_c12_dlogP + !dlog_c13_dlogP + !dlog_n14_dlogP + !dlog_o16_dlogP + !dlog_ne20_dlogP + !dlog_mg24_dlogP + !dlog_si28_dlogP + + !dlog_pp_dlogP + !dlog_cno_dlogP + !dlog_3alf_dlogP + + !dlog_burn_c_dlogP + !dlog_burn_n_dlogP + !dlog_burn_o_dlogP + + !dlog_burn_ne_dlogP + !dlog_burn_na_dlogP + !dlog_burn_mg_dlogP + + !dlog_cc_dlogP + !dlog_co_dlogP + !dlog_oo_dlogP + + !dlog_burn_si_dlogP + !dlog_burn_s_dlogP + !dlog_burn_ar_dlogP + !dlog_burn_ca_dlogP + !dlog_burn_ti_dlogP + !dlog_burn_cr_dlogP + !dlog_burn_fe_dlogP + + !dlog_pnhe4_dlogP + !dlog_photo_dlogP + !dlog_other_dlogP + + !logR_kap ! logR = logRho - 3*logT + 18 ; used in kap tables + !logW ! logW = logPgas - 4*logT + !logQ ! logQ = logRho - 2*logT + 12 + !logV ! logV = logRho - 0.7*logE + 20 + + !log_CpT_absMdot_div_L ! log10(s% Cp(k)*s% T(k)*abs(s% mstar_dot)/s% L(k)) + + !delta_r ! r - r_start, change during step + !delta_L ! L - L_start, change during step + !delta_cell_vol ! cell_vol - cell_vol_start, change during step + !delta_entropy ! entropy - entropy_start, change during step (does not include effects of diffusion) + !delta_T ! T - T_start, change during step + !delta_rho ! rho - rho_start, change during step + !delta_eps_nuc ! eps_nuc - eps_nuc_start, change during step + !delta_mu ! mu - mu_start, change during step + + zFe ! mass fraction of "Fe" = Fe+Co+Ni + !log_zFe + dPdr_dRhodr_info + !log_sig_raw_mix + + !d_u_div_rmid + !d_u_div_rmid_start + !d_v_div_r_dm + !d_v_div_r_dr + + !dlnP_dlnR + !dlnRho_dlnR + !dlnRho_dr + !dlnX_dr + !dlnY_dr + dlogR + !dPdr_div_grav + dPdr_info + dRhodr_info + !dRstar_div_dr + !dr_ratio + !dm_eps_grav + !dr_ratio + !dt_cs_div_dr + !dt_div_tau_conv + !dt_times_conv_vel_div_mixing_length + !log_dt_cs_div_dr + !log_dt_div_tau_conv + !log_dt_times_conv_vel_div_mixing_length + log_du_kick_div_du + !du + !dvdt_dPdm + !dvdt_grav + + !tau_conv + !tau_cool + !tau_epsnuc + !tau_qhse + + !max_abs_xa_corr + + !tdc_num_iters + + !k + + +! the first few lines of the profile contain general info about the model. +! for completeness, those items are described here. + + ! initial mass and Z + ! initial_mass + ! initial_z + ! general properties of the current state + ! model_number + ! num_zones + ! star_age + ! time_step + ! properties at the photosphere + ! Teff + ! photosphere_L + ! photosphere_r + ! properties at the outermost zone of the model + ! log_surface_L + ! log_surface_radius + ! log_surface_temp + ! properties near the center of the model + ! log_center_temp + ! log_center_density + ! log_center_P + ! center_eta + ! abundances near the center + ! center_h1 + ! center_he3 + ! center_he4 + ! center_c12 + ! center_n14 + ! center_o16 + ! center_ne20 + ! information about total mass + ! star_mass + ! star_mdot + ! star_mass_h1 + ! star_mass_he3 + ! star_mass_he4 + ! star_mass_c12 + ! star_mass_n14 + ! star_mass_o16 + ! star_mass_ne20 + ! locations of abundance transitions + ! he_core_mass + ! c_core_mass + ! o_core_mass + ! si_core_mass + ! fe_core_mass + ! location of optical depths 10 and 100 + ! tau10_mass + ! tau10_radius + ! tau100_mass + ! tau100_radius + ! time scales + ! dynamic_time + ! kh_timescale + ! nuc_timescale + ! various kinds of total power + ! power_nuc_burn + ! power_h_burn + ! power_he_burn + ! power_neu + ! a few control parameter values + ! h1_boundary_limit + ! he4_boundary_limit + ! c12_boundary_limit + ! burn_min1 + ! burn_min2 diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/re b/star/dev_cases_massive_stars/60M_envelope_issues/re new file mode 100755 index 000000000..7093783a3 --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/re @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +shopt -u expand_aliases + +photo_directory=photos + +function most_recent_photo { + ls -tp "$photo_directory" | grep -v / | head -1 +} + +if [ $# -eq 0 ] +then + photo=$(most_recent_photo) +else + photo=$1 +fi + +if [ -z "$photo" ] || ! [ -f "$photo_directory/$photo" ] +then + echo "specified photo ($photo) does not exist" + exit 1 +fi + +echo "restart from $photo" +if ! cp "$photo_directory/$photo" restart_photo +then + echo "failed to copy photo ($photo)" + exit 1 +fi + +make run diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/rn b/star/dev_cases_massive_stars/60M_envelope_issues/rn new file mode 100755 index 000000000..68233efd1 --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/rn @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" + +make run + +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" + +echo 'finished' diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/rn1 b/star/dev_cases_massive_stars/60M_envelope_issues/rn1 new file mode 100755 index 000000000..f4ce7695f --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/rn1 @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +rm -f restart_photo + +make run diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/src/run.f90 b/star/dev_cases_massive_stars/60M_envelope_issues/src/run.f90 new file mode 100644 index 000000000..76d423f1a --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/src/run.f90 @@ -0,0 +1,15 @@ +program run + use run_star_support, only: do_read_star_job + use run_star, only: do_run_star + + implicit none + + integer :: ierr + + ierr = 0 + call do_read_star_job('inlist', ierr) + if (ierr /= 0) stop 1 + + call do_run_star + +end program run diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/src/run_star_extras.f90 b/star/dev_cases_massive_stars/60M_envelope_issues/src/run_star_extras.f90 new file mode 100644 index 000000000..baac47443 --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/src/run_star_extras.f90 @@ -0,0 +1,197 @@ +! *********************************************************************** +! +! Copyright (C) 2010 The MESA Team +! +! This program is free software: you can redistribute it and/or modify +! it under the terms of the GNU Lesser General Public License +! as published by the Free Software Foundation, +! either version 3 of the License, or (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +! See the GNU Lesser General Public License for more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with this program. If not, see . +! +! *********************************************************************** + + module run_star_extras + + use star_lib + use star_def + use const_def + use math_lib + use auto_diff + + implicit none + + include "test_suite_extras_def.inc" + + integer, parameter :: i_dutch_scaling_factor_after_zams = 21 + real(dp), parameter :: zams_h1_depletion = 0.03d0 + +! Example of one extra value to preserve across photo restarts. +! real(dp) :: example_photo_value + + contains + + include "test_suite_extras.inc" + + + subroutine extras_controls(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + s% extras_startup => extras_startup + s% extras_start_step => extras_start_step + s% extras_check_model => extras_check_model + s% extras_finish_step => extras_finish_step + s% extras_after_evolve => extras_after_evolve + s% how_many_extra_history_columns => how_many_extra_history_columns + s% data_for_extra_history_columns => data_for_extra_history_columns + s% how_many_extra_profile_columns => how_many_extra_profile_columns + s% data_for_extra_profile_columns => data_for_extra_profile_columns + s% other_photo_read => extras_photo_read + s% other_photo_write => extras_photo_write + end subroutine extras_controls + + + subroutine extras_photo_read(id, iounit, ierr) + integer, intent(in) :: id, iounit + integer, intent(out) :: ierr + ierr = 0 + !read(iounit, iostat=ierr) example_photo_value + end subroutine extras_photo_read + + + subroutine extras_photo_write(id, iounit) + integer, intent(in) :: id, iounit + !write(iounit) example_photo_value + end subroutine extras_photo_write + + subroutine extras_startup(id, restart, ierr) + integer, intent(in) :: id + logical, intent(in) :: restart + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + call test_suite_startup(s, restart, ierr) + + end subroutine extras_startup + + + integer function extras_start_step(id) + integer, intent(in) :: id + integer :: ierr + real(dp) :: zams_h1_limit + type (star_info), pointer :: s + ierr = 0 + extras_start_step = keep_going + call star_ptr(id, s, ierr) + if (ierr /= 0) return + if (s% Dutch_scaling_factor > 0d0) return + zams_h1_limit = max(0d0, min(1d0, 1d0 - (s% initial_z + s% initial_y))) - & + zams_h1_depletion + if (s% center_h1 < zams_h1_limit) & + s% Dutch_scaling_factor = s% x_ctrl(i_dutch_scaling_factor_after_zams) + end function extras_start_step + + + subroutine extras_after_evolve(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + write(*,'(A)') + call test_suite_after_evolve(s, ierr) + end subroutine extras_after_evolve + + + ! returns either keep_going, retry, or terminate. + integer function extras_check_model(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_check_model = keep_going + end function extras_check_model + + + integer function how_many_extra_history_columns(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_history_columns = 0 + end function how_many_extra_history_columns + + + subroutine data_for_extra_history_columns(id, n, names, vals, ierr) + integer, intent(in) :: id, n + character (len=maxlen_history_column_name) :: names(n) + real(dp) :: vals(n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + end subroutine data_for_extra_history_columns + + + integer function how_many_extra_profile_columns(id) + use star_def, only: star_info + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_profile_columns = 1 + end function how_many_extra_profile_columns + + + subroutine data_for_extra_profile_columns(id, n, nz, names, vals, ierr) + use star_def, only: star_info, maxlen_profile_column_name + use const_def, only: dp + integer, intent(in) :: id, n, nz + character (len=maxlen_profile_column_name) :: names(n) + real(dp) :: vals(nz,n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + integer :: k + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + names(1) = 'zbar_div_abar' + do k=1,s% nz + vals(k,1) = s% zbar(k)/s% abar(k) + end do + end subroutine data_for_extra_profile_columns + + ! returns either keep_going or terminate. + integer function extras_finish_step(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_finish_step = keep_going + if (extras_finish_step == terminate) & + s% termination_code = t_extras_finish_step + end function extras_finish_step + + end module run_star_extras diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/testhub.yml b/star/dev_cases_massive_stars/60M_envelope_issues/testhub.yml new file mode 100644 index 000000000..2b486a02c --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/testhub.yml @@ -0,0 +1,15 @@ + runtime_minutes: 16.71 + model_number: 2344 + star_age: 1.0136396734299462E+07 + num_retries: 11 + log_rel_run_E_err: -4.5194878652040105 + steps: 266 + retries: 11 + redos: 0 + solver_calls_made: 277 + solver_calls_failed: 11 + solver_iterations: 2052 + extra_testhub_names: + - 'fe_core_mass' + extra_testhub_vals: + - 1.6762420545401346E+00 diff --git a/star/dev_cases_massive_stars/wd_nova_burst/1.1M_lgTc_7.7.mod b/star/dev_cases_massive_stars/wd_nova_burst/1.1M_lgTc_7.7.mod new file mode 100644 index 000000000..de01735f9 --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/1.1M_lgTc_7.7.mod @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd251d75bbee527d82e5b34e069e305bc6a15c5edc05c339f0efe77ae81529a4 +size 432140 diff --git a/star/dev_cases_massive_stars/wd_nova_burst/Makefile b/star/dev_cases_massive_stars/wd_nova_burst/Makefile new file mode 100644 index 000000000..c779b9d6d --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/Makefile @@ -0,0 +1 @@ +include $(MESA_DIR)/star/work/Makefile \ No newline at end of file diff --git a/star/dev_cases_massive_stars/wd_nova_burst/README.rst b/star/dev_cases_massive_stars/wd_nova_burst/README.rst new file mode 100644 index 000000000..24721f2ec --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/README.rst @@ -0,0 +1,51 @@ +.. _wd_nova_burst: + +************* +wd_nova_burst +************* + +This is a violent nova burst envelope test case. + +This test case has 2 parts. Click to see a larger version of a plot. + +* Part 1 (``inlist_setup``) loads ``1.1M_lgTc_7.7.mod``, a prebuilt carbon-oxygen white dwarf from the :ref:`make_o_ne_wd` test suite, sets the topical depth to 30, evolves for a few steps to an age of 1e7 year and terminates. + +* Part 2 (``inlist_wd_nova_burst``) continues the evolution with the accretion of a hydrogen-helium mixture at a rate of 1e-9 Msun/yr. Eventually hydrogen burning in the accerted envelope causes the luminosity to exceed 1e4 Lsun and an alert is written to the terminate via the ``run_star_extras.f90``: + + +.. code-block:: console + + num_bursts 1 + 405 8.277879 4.365E+05 8.624940 8.625037 1.115473 0.000025 0.000000 0.000000 0.309197 329.049014 1497 36 + -5.0945E+00 7.679057 -1.661720 -2.464781 7.731723 -9.000000 1.115449 0.000000 0.400729 0.019380 65.113954 10 + 2.4766E+04 7.926520 4.191187 4.972103 -6.862099 -4.289137 1.115442 0.038204 0.474628 1.000000 0.327E-01 max increase + rel_E_err -1.9543755810854924D-08 + log_rel_run_E_err -6.0755826271591920 + + +and when the luminosity falls below 1e3 Lsun a nova cycle is considered finished and the run terminates: + +.. code-block:: console + + 585 7.835616 3.884E+05 1.624521 1.624523 1.115450 0.000001 0.000000 0.000000 0.332277 329.045159 1617 48 + -1.4608E+00 7.679051 -2.147858 -16.859525 0.457865 -9.000000 1.115449 0.000000 0.400729 0.019454 65.113548 5 + 2.4768E+04 7.926494 3.015873 -3.748867 -67.588316 -3.897373 1.115442 0.038204 0.474628 1.000000 -0.133E-06 Lnuc_H + rel_E_err -5.3661942520223188D-10 + log_rel_run_E_err -5.9590177286527863 + + have finished burst + + +.. image:: ../../../star/test_suite/wd_nova_burst/docs/wd_nova_burst_grid.svg + :width: 100% + + +The Python script used to create the figures above: + +.. literalinclude:: ../../../star/test_suite/wd_nova_burst/plot.py + :language: python + + +Last-Updated: 07Aug2024 (MESA 0b40398b) by wmwolf. + +Last-Run: 22Dec2025 (MESA fede5937) by pmocz on C916PXT6XW in 586 seconds using 8 threads. diff --git a/star/dev_cases_massive_stars/wd_nova_burst/ck b/star/dev_cases_massive_stars/wd_nova_burst/ck new file mode 100755 index 000000000..78ca63a8c --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/ck @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +# this provides the definition of check_one +# check_one +source "${MESA_DIR}/star/test_suite/test_suite_helpers" + +check_one diff --git a/star/dev_cases_massive_stars/wd_nova_burst/docs/grid8_000586.svg b/star/dev_cases_massive_stars/wd_nova_burst/docs/grid8_000586.svg new file mode 100644 index 000000000..74b7386b6 --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/docs/grid8_000586.svg @@ -0,0 +1,3140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/star/dev_cases_massive_stars/wd_nova_burst/docs/wd_nova_burst_grid.svg b/star/dev_cases_massive_stars/wd_nova_burst/docs/wd_nova_burst_grid.svg new file mode 100644 index 000000000..19d95d224 --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/docs/wd_nova_burst_grid.svg @@ -0,0 +1,8274 @@ + + + + + + + + 2025-12-22T14:20:43.347081 + image/svg+xml + + + Matplotlib v3.10.0, https://matplotlib.org/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/star/dev_cases_massive_stars/wd_nova_burst/history_columns.list b/star/dev_cases_massive_stars/wd_nova_burst/history_columns.list new file mode 100644 index 000000000..6af3df1ce --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/history_columns.list @@ -0,0 +1,1067 @@ +! history_columns.list -- determines the contents of star history logs +! you can use a non-standard version by setting history_columns_file in your inlist + +! units are cgs unless otherwise noted. + +! reorder the following names as desired to reorder columns. +! comment out the name to omit a column (fewer columns => less IO => faster running). +! remove '!' to restore a column. + +! if you have a situation where you want a non-standard set of columns, +! make a copy of this file, edit as desired, and give the new filename in your inlist +! as history_columns_file. if you are just adding columns, you can 'include' this file, +! and just list the additions in your file. note: to include the standard default +! version, use include '' -- the 0 length string means include the default file. + +! blank lines and comments can be used freely. +! if a column name appears more than once in the list, only the first occurrence is used. + +! if you need to have something added to the list of options, let me know.... + + +! the first few lines of the log file contain a few items: + + ! version_number -- for the version of mesa being used + ! burn_min1 -- 1st limit for reported burning, in erg/g/s + ! burn_min2 -- 2nd limit for reported burning, in erg/g/s + + +!# other files + +! note: you can include another list by doing +! include 'filename' +! include '' means include the default standard list file + +! the following lines of the log file contain info about 1 model per row + +!---------------------------------------------------------------------------------------------- + +!# general info about the model + + model_number ! counting from the start of the run + num_zones ! number of zones in the model + + !## age + + star_age ! elapsed simulated time in years since the start of the run + !star_age_sec ! elapsed simulated time in seconds since the start of the run + !star_age_min ! elapsed simulated time in minutes since the start of the run + !star_age_hr ! elapsed simulated time in hours since the start of the run + !star_age_day ! elapsed simulated time in days since the start of the run + !day ! elapsed simulated time in days since the start of the run + + !log_star_age + !log_star_age_sec + + !## timestep + + !time_step ! timestep in years since previous model + time_step_sec ! timestep in seconds since previous model + !time_step_days + log_dt ! log10 time_step in years + !log_dt_sec ! log10 time_step in seconds + !log_dt_days ! log10 time_step in days + + !## mass + + star_mass ! in Msun units + !log_star_mass + + !star_gravitational_mass ! star_mass is baryonic mass + !star_mass_grav_div_mass + + !delta_mass ! star_mass - initial_mass in Msun units + log_xmstar ! log10 mass exterior to M_center (grams) + + !## mass change + + !star_mdot ! d(star_mass)/dt (in msolar per year) + log_abs_mdot ! log10(abs(star_mdot)) (in msolar per year) + + !## imposed surface conditions + !Tsurf_factor + !tau_factor + !tau_surface + + !## imposed center conditions + !m_center + !m_center_gm + !r_center + !r_center_cm + !r_center_km + !L_center + !log_L_center + !log_L_center_ergs_s + !v_center + !v_center_kms + + !logt_max + +!---------------------------------------------------------------------------------------------- + +!# mixing and convection + + !max_conv_vel_div_csound + !max_gradT_div_grada + !max_gradT_sub_grada + !min_log_mlt_Gamma + + + !## mixing regions + + mass_conv_core ! (Msun) mass coord of top of convective core. 0 if core is not convective + + ! mx1 refers to the largest (by mass) convective region. + ! mx2 is the 2nd largest. + + ! conv_mx1_top and conv_mx1_bot are the region where mixing_type == convective_mixing. + ! mx1_top and mx1_bot are the extent of all kinds of mixing, convective and other. + + ! values are m/Mstar + conv_mx1_top + conv_mx1_bot + conv_mx2_top + conv_mx2_bot + mx1_top + mx1_bot + mx2_top + mx2_bot + + ! radius -- values are radii in Rsun units + !conv_mx1_top_r + !conv_mx1_bot_r + !conv_mx2_top_r + !conv_mx2_bot_r + !mx1_top_r + !mx1_bot_r + !mx2_top_r + !mx2_bot_r + + ! you might want to get a more complete list of mixing regions by using the following + + !mixing_regions ! note: this includes regions where the mixing type is no_mixing. + + ! the is the number of regions to report + ! there will be 2* columns for this in the log file, 2 for each region. + ! the first column for a region gives the mixing type as defined in const/public/const_def.f90. + + ! the second column for a region gives the m/mstar location of the top of the region + ! entries for extra columns after the last region in the star will have an invalid mixing_type value of -1. + ! mstar is the total mass of the star, so these locations range from 0 to 1 + ! all regions are include starting from the center, so the bottom of one region + ! is the top of the previous one. since we start at the center, the bottom of the 1st region is 0. + + ! the columns in the log file will have names like 'mix_type_1' and 'mix_qtop_1' + + ! if the star has too many regions to report them all, + ! the smallest regions will be merged with neighbors for reporting purposes only. + + + !mix_relr_regions + ! same as above, but locations given as r/rstar instead of m/mstar. + ! the columns in the log file will have names like 'mix_relr_type_1' and 'mix_relr_top_1' + + + !## conditions at base of largest convection zone (by mass) + !cz_bot_mass ! mass coordinate of base (Msun) + !cz_mass ! mass coordinate of base (Msun) -- same as cz_bot_mass + !cz_log_xmass ! mass exterior to base (g) + !cz_log_xmsun ! mass exterior to base (Msun) + !cz_xm ! mass exterior to base (Msun) + !cz_logT + !cz_logRho + !cz_logP + !cz_bot_radius ! Rsun + !cz_log_column_depth + !cz_log_radial_depth + !cz_luminosity ! Lsun + !cz_opacity + !cz_log_tau + !cz_eta + !cz_log_eps_nuc ! log10(ergs/g/s) + !cz_t_heat ! Cp*T/eps_nuc (seconds) + + !cz_csound + !cz_scale_height + !cz_grav + + !cz_omega + !cz_omega_div_omega_crit + + !cz_zone + + ! mass fractions at base of largest convection zone (by mass) + !cz_log_xa h1 + !cz_log_xa he4 + + !## conditions at top of largest convection zone (by mass) + !cz_top_mass ! mass coordinate of top (Msun) + !cz_top_log_xmass ! mass exterior to top (g) + !cz_top_log_xmsun ! mass exterior to top (Msun) + !cz_top_xm ! mass exterior to top (Msun) + !cz_top_logT + !cz_top_logRho + !cz_top_logP + !cz_top_radius ! Rsun + !cz_top_log_column_depth + !cz_top_log_radial_depth + !cz_top_luminosity ! Lsun + !cz_top_opacity + !cz_top_log_tau + !cz_top_eta + !cz_top_log_eps_nuc ! log10(ergs/g/s) + !cz_top_t_heat ! Cp*T/eps_nuc (seconds) + + !cz_top_csound + !cz_top_scale_height + !cz_top_grav + + !cz_top_omega + !cz_top_omega_div_omega_crit + + !cz_top_zone + !cz_top_zone_logdq + + ! mass fractions at top of largest convection zone (by mass) + !cz_top_log_xa h1 + !cz_top_log_xa he4 + +!---------------------------------------------------------------------------------------------- + +!# nuclear reactions + + !## integrated quantities + + !power_h_burn ! total thermal power from PP and CNO, excluding neutrinos (in Lsun units) + !power_he_burn ! total thermal power from triple-alpha, excluding neutrinos (in Lsun units) + !power_photo + !power_z_burn + !log_power_nuc_burn ! total thermal power from all burning, excluding photodisintegrations + log_LH ! log10 power_h_burn + log_LHe ! log10 power_he_burn + log_LZ ! log10 total burning power including LC, but excluding LH and LHe and photodisintegrations + log_Lnuc ! log(LH + LHe + LZ) + !log_Lnuc_ergs_s + !log_Lnuc_sub_log_L + !lnuc_photo + + !extra_L ! integral of extra_heat in Lsun units + !log_extra_L ! log10 extra_L + + !## neutrino losses + !log_Lneu ! log10 power emitted in neutrinos, nuclear and thermal (in Lsun units) + !log_Lneu_nuc ! log10 power emitted in neutrinos, nuclear sources only (in Lsun units) + !log_Lneu_nonnuc ! log10 power emitted in neutrinos, thermal sources only (in Lsun units) + + !mass_loc_of_max_eps_nuc ! (in Msun units) + !mass_ext_to_max_eps_nuc ! (in Msun units) + !eps_grav_integral ! (in Lsun units) + !log_abs_Lgrav ! log10 abs(eps_grav_integral) (in Lsun units) + + !## information about reactions (by category) + + ! log10 total luminosity for reaction categories (Lsun units) + + pp + cno + tri_alpha + !c_alpha + !n_alpha + !o_alpha + !ne_alpha + !na_alpha + !mg_alpha + !si_alpha + !s_alpha + !ar_alpha + !ca_alpha + !ti_alpha + !fe_co_ni + !c12_c12 + !c12_o16 + !o16_o16 + !photo + !pnhe4 + !other + + !## information about individual reactions + + ! adds columns for all of the reactions that are in the current net + ! Note that if using op_split_burn=.true. then zones which have been split will report 0 for their rates + !add_raw_rates ! raw reaction rates, reactions/second + !add_screened_rates ! screened reaction rates reactions/second + !add_eps_nuc_rates ! Nuclear energy (minus neutrino losses) released erg/s + !add_eps_neu_rates ! Neutrino losses erg/s + + ! individual reactions (as many as desired) + ! use list_net_reactions = .true. in star_job to list all reactions in the current net + ! reactions/second + !raw_rate r_h1_h1_ec_h2 + !raw_rate r_h1_h1_wk_h2 + + + + !## nuclear reactions at center + + ! center log10 burn erg/g/s for reaction categories + + !c_log_eps_burn cno + !c_log_eps_burn tri_alfa + + ! center d_eps_nuc_dlnd for reaction categories + + !c_d_eps_dlnd cno + !c_d_eps_dlnd tri_alfa + + ! center d_eps_nuc_dlnT for reaction categories + + !c_d_eps_dlnT cno + !c_d_eps_dlnT tri_alfa + + !## regions of strong nuclear burning + + ! 2 zones where eps_nuc > burn_min1 erg/g/s + ! for each zone have 4 numbers: start1, start2, end2, end1 + ! start1 is mass of inner edge where first goes > burn_min1 (or -20 if none such) + ! start2 is mass of inner edge where first zone reaches burn_min2 erg/g/sec (or -20 if none such) + ! end2 is mass of outer edge where first zone drops back below burn_min2 erg/g/s + ! end1 is mass of outer edge where first zone ends (i.e. eps_nuc < burn_min1) + ! similar for the second zone + + epsnuc_M_1 ! start1 for 1st zone + epsnuc_M_2 ! start2 + epsnuc_M_3 ! end2 + epsnuc_M_4 ! end1 + + epsnuc_M_5 ! start1 for 2nd zone + epsnuc_M_6 ! start2 + epsnuc_M_7 ! end2 + epsnuc_M_8 ! end1 + + + ! you might want to get a more complete list of burning regions by using the following + + !burning_regions + ! the is the number of regions to report + ! there will be 2* columns for this in the log file, 2 for each region. + ! the first column for a region gives int(sign(val)*log10(max(1,abs(val)))) + ! where val = ergs/gm/sec nuclear energy minus all neutrino losses. + ! the second column for a region gives the q location of the top of the region + ! entries for extra columns after the last region in the star will have a value of -9999 + ! all regions are included starting from the center, so the bottom of one region + ! is the top of the previous one. + ! since we start at the center, the bottom of the 1st region is q=0 and top of last is q=1. + + ! the columns in the log file will have names like 'burn_type_1' and 'burn_qtop_1' + + !burn_relr_regions + ! same as above, but locations given as r/rstar instead of m/mstar. + ! the columns in the log file will have names like 'burn_relr_type_1' and 'burn_relr_top_1' + + + ! if the star has too many regions to report them all, + ! the smallest regions will be merged with neighbors for reporting purposes only. + +!---------------------------------------------------------------------------------------------- + +!# information about core and envelope + + !## helium core + he_core_mass + !he_core_radius + !he_core_lgT + !he_core_lgRho + !he_core_L + !he_core_v + !he_core_omega + !he_core_omega_div_omega_crit + !he_core_k + + !## CO core + co_core_mass + !CO_core + !co_core_radius + !co_core_lgT + !co_core_lgRho + !co_core_L + !co_core_v + !co_core_omega + !co_core_omega_div_omega_crit + !co_core_k + + !## ONe core + one_core_mass + !one_core_radius + !one_core_lgT + !one_core_lgRho + !one_core_L + !one_core_v + !one_core_omega + !one_core_omega_div_omega_crit + !one_core_k + + !## iron core + fe_core_mass + !fe_core_radius + !fe_core_lgT + !fe_core_lgRho + !fe_core_L + !fe_core_v + !fe_core_omega + !fe_core_omega_div_omega_crit + !fe_core_k + + !## neutron rich core + neutron_rich_core_mass + !neutron_rich_core_radius + !neutron_rich_core_lgT + !neutron_rich_core_lgRho + !neutron_rich_core_L + !neutron_rich_core_v + !neutron_rich_core_omega + !neutron_rich_core_omega_div_omega_crit + !neutron_rich_core_k + + !## envelope + + !envelope_mass ! = star_mass - he_core_mass + !envelope_fraction_left ! = envelope_mass / (initial_mass - he_core_mass) + + !h_rich_layer_mass ! = star_mass - he_core_mass + !he_rich_layer_mass ! = he_core_mass - c_core_mass + !co_rich_layer_mass + +!---------------------------------------------------------------------------------------------- + +!# timescales + + !dynamic_timescale ! dynamic timescale (seconds) -- estimated by 2*pi*sqrt(r^3/(G*m)) + kh_timescale ! kelvin-helmholtz timescale (years) + !mdot_timescale ! star_mass/abs(star_mdot) (years) + !kh_div_mdot_timescales ! kh_timescale/mdot_timescale + !nuc_timescale ! nuclear timescale (years) -- proportional to mass divided by luminosity + + !dt_cell_collapse ! min time for any cell to collapse at current velocities + !dt_div_dt_cell_collapse + + !dt_div_max_tau_conv ! dt/ maximum conv timescale + !dt_div_min_tau_conv ! dt/ minimum conv timescale + + + !min_dr_div_cs ! min over all cells of dr/csound (seconds) + !min_dr_div_cs_k ! location of min + !log_min_dr_div_cs ! log10 min dr_div_csound (seconds) + !min_dr_div_cs_yr ! min over all cells of dr/csound (years) + !log_min_dr_div_cs_yr ! log10 min dr_div_csound (years) + !dt_div_min_dr_div_cs + !log_dt_div_min_dr_div_cs + + !min_t_eddy ! minimum value of scale_height/conv_velocity + +!---------------------------------------------------------------------------------------------- + +!# conditions at or near the surface of the model + + !## conditions at the photosphere + effective_T + !Teff + log_Teff ! log10 effective temperature + ! Teff is calculated using Stefan-Boltzmann relation L = 4 pi R^2 sigma Teff^4, + ! where L and R are evaluated at the photosphere (tau_factor < 1) + ! or surface of the model (tau_factor >= 1) when photosphere is not inside the model. + + !photosphere_black_body_T + !photosphere_cell_T ! temperature at model location closest to the photosphere, not necessarily Teff + !photosphere_cell_log_T + !photosphere_cell_density + !photosphere_cell_log_density + !photosphere_cell_opacity + !photosphere_cell_log_opacity + !photosphere_L ! Lsun units + !photosphere_log_L ! Lsun units + !photosphere_r ! Rsun units + !photosphere_log_r ! Rsun units + !photosphere_m ! Msun units + !photosphere_v_km_s + !photosphere_cell_k + !photosphere_column_density + !photosphere_csound + !photosphere_log_column_density + !photosphere_opacity + !photosphere_v_div_cs + !photosphere_xm + !photosphere_cell_free_e + !photosphere_cell_log_free_e + !photosphere_logg + !photosphere_T + + !## conditions at or near the surface of the model (outer edge of outer cell) + + !luminosity ! luminosity in Lsun units + !luminosity_ergs_s ! luminosity in cgs units + log_L ! log10 luminosity in Lsun units + !log_L_ergs_s ! log10 luminosity in cgs units + radius ! Rsun + log_R ! log10 radius in Rsun units + radius_cm + log_R_cm + + log_g ! log10 gravity + !gravity + !log_Ledd + !log_L_div_Ledd ! log10(L/Leddington) + lum_div_Ledd + !log_surf_optical_depth + !surface_optical_depth + + !log_surf_cell_opacity ! old name was log_surf_opacity + !log_surf_cell_P ! old name was log_surf_P + !log_surf_cell_pressure ! old name was log_surf_pressure + !log_surf_cell_density ! old name was log_surf_density + !log_surf_cell_temperature ! old name was log_surf_temperature + !surface_cell_temperature ! old name was surface_temperature + !log_surf_cell_z ! old name was log_surf_z + !surface_cell_entropy ! in units of kerg per baryon + ! old name was surface_entropy + + !v_surf ! (cm/s) + v_surf_km_s ! (km/s) + v_div_csound_surf ! velocity divided by sound speed at outermost grid point + !v_div_csound_max ! max value of velocity divided by sound speed at face + !v_div_vesc + !v_phot_km_s + !v_surf_div_escape_v + + !v_surf_div_v_kh ! v_surf/(photosphere_r/kh_timescale) + + !surf_avg_j_rot + !surf_avg_omega + !surf_avg_omega_crit + !surf_avg_omega_div_omega_crit + !surf_avg_v_rot ! km/sec rotational velocity at equator + !surf_avg_v_crit ! critical rotational velocity at equator + !surf_avg_v_div_v_crit + !surf_avg_Lrad_div_Ledd + !surf_avg_logT + !surf_avg_logRho + !surf_avg_opacity + + ! Gravity Darkening, reports the surface averaged L/Lsun and Teff (K) caused by + ! gravity darkening in rotating stars. Based on the model of Espinosa Lara & Rieutord (2011) + ! 'polar' refers to the line of sight being directed along the rotation axis of the star + ! 'equatorial' refers to the line of sight coincident with the stellar equator + !grav_dark_L_polar !Lsun + !grav_dark_Teff_polar !K + !grav_dark_L_equatorial !Lsun + !grav_dark_Teff_equatorial !K + + !surf_escape_v ! cm/s + + !v_wind_Km_per_s ! Km/s + ! = 1d-5*s% opacity(1)*max(0d0,-s% mstar_dot)/ & + ! (4*pi*s% photosphere_r*Rsun*s% tau_base) + ! Lars says: + ! wind_mdot = 4*pi*R^2*rho*v_wind + ! tau = integral(opacity*rho*dr) from R to infinity + ! so tau = opacity*wind_mdot/(4*pi*R*v_wind) at photosphere + ! or v_wind = opacity*wind_mdot/(4*pi*R*tau) at photosphere + + !rotational_mdot_boost ! factor for increase in mass loss mdot due to rotation + !log_rotational_mdot_boost ! log factor for increase in mass loss mdot due to rotation + !surf_r_equatorial_div_r_polar + !surf_r_equatorial_div_r + !surf_r_polar_div_r + +!---------------------------------------------------------------------------------------------- + +!# conditions near center + + log_center_T ! temperature + log_center_Rho ! density + log_center_P ! pressure + + ! shorter names for above + log_cntr_P + log_cntr_Rho + log_cntr_T + + !center_T ! temperature + !center_Rho ! density + !center_P ! pressure + + !center_degeneracy ! the electron chemical potential in units of k*T + !center_gamma ! plasma interaction parameter + center_mu + center_ye + center_abar + !center_zbar + + !center_eps_grav + + !center_non_nuc_neu + !center_eps_nuc + !d_center_eps_nuc_dlnT + !d_center_eps_nuc_dlnd + !log_center_eps_nuc + + !center_entropy ! in units of kerg per baryon + !max_entropy ! in units of kerg per baryon + !fe_core_infall + !non_fe_core_infall + !non_fe_core_rebound + !max_infall_speed + + !compactness_parameter ! (m/Msun)/(R(m)/1000km) for m = 2.5 Msun + !compactness + !m4 ! Mass coordinate where entropy=4 + ! mu4 is sensitive to the choice of how much dm/dr you average over, thus we average dm and dr over M(entropy=4) and M(entropy=4)+0.3Msun + !mu4 ! dM(Msun)/dr(1000km) where entropy=4 + + + !center_omega + !center_omega_div_omega_crit + +!---------------------------------------------------------------------------------------------- + +!# abundances + + !species ! size of net + + !## mass fractions near center + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_center_abundances + !add_log_center_abundances + + ! individual central mass fractions (as many as desired) + center h1 + center he4 + center c12 + center o16 + + ! individual log10 central mass fractions (as many as desired) + !log_center h1 + !log_center he4 + ! etc. + + + !## mass fractions near surface + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_surface_abundances + !add_log_surface_abundances + + ! individual surface mass fractions (as many as desired) + !surface h1 + !surface he4 + surface c12 + surface o16 + ! etc. + + ! individual log10 surface mass fractions (as many as desired) + + !log_surface h1 + !log_surface he4 + + + !## mass fractions for entire star + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_average_abundances + !add_log_average_abundances + + ! individual average mass fractions (as many as desired) + !average h1 + !average he4 + ! etc. + + ! individual log10 average mass fractions (as many as desired) + !log_average h1 + !log_average he4 + ! etc. + + + !## mass totals for entire star (in Msun units) + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_total_mass + !add_log_total_mass + + ! individual mass totals for entire star (as many as desired) + total_mass h1 + total_mass he4 + ! etc. + + ! individual log10 mass totals for entire star (in Msun units) + !log_total_mass h1 + !log_total_mass he4 + ! etc. + +!---------------------------------------------------------------------------------------------- + +!# info at specific locations + + !## info at location of max temperature + !max_T + !log_max_T + + +!---------------------------------------------------------------------------------------------- + +!# information about shocks + + !## info about outermost outward moving shock + ! excluding locations with q > max_q_for_outer_mach1_location + ! returns values at location of max velocity + !shock_mass ! baryonic (Msun) + !shock_mass_gm ! baryonic (grams) + !shock_q + !shock_radius ! (Rsun) + !shock_radius_cm ! (cm) + !shock_velocity + !shock_csound + !shock_v_div_cs + !shock_lgT + !shock_lgRho + !shock_lgP + !shock_gamma1 + !shock_entropy + !shock_tau + !shock_k + !shock_pre_lgRho + +!---------------------------------------------------------------------------------------------- + +!# asteroseismology + + !delta_nu ! large frequency separation for p-modes (microHz) + ! 1e6/(seconds for sound to cross diameter of star) + !delta_Pg ! g-mode period spacing for l=1 (seconds) + ! sqrt(2) pi^2/(integral of brunt_N/r dr) + !log_delta_Pg + !nu_max ! estimate from scaling relation (microHz) + ! nu_max = nu_max_sun * M/Msun / ((R/Rsun)^2 (Teff/astero_Teff_sun)^0.5) + !nu_max_3_4th_div_delta_nu ! nu_max^0.75/delta_nu + !acoustic_cutoff ! 0.5*g*sqrt(gamma1*rho/P) at surface + !acoustic_radius ! integral of dr/csound (seconds) + !ng_for_nu_max ! = 1 / (nu_max*delta_Pg) + ! period for g-mode with frequency nu_max = nu_max_ng*delta_Pg + !gs_per_delta_nu ! delta_nu / (nu_max**2*delta_Pg) + ! number of g-modes per delta_nu at nu_max + + !int_k_r_dr_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=1 + !int_k_r_dr_2pt0_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=1 + !int_k_r_dr_0pt5_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=1 + !int_k_r_dr_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=2 + !int_k_r_dr_2pt0_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=2 + !int_k_r_dr_0pt5_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=2 + !int_k_r_dr_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=3 + !int_k_r_dr_2pt0_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=3 + !int_k_r_dr_0pt5_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=3 + +!---------------------------------------------------------------------------------------------- + +!# energy information + + !total_energy ! at end of step + !log_total_energy ! log(abs(total_energy)) + !total_energy_after_adjust_mass ! after mass adjustments + + ! shorter versions of above + !tot_E + !log_tot_E + + + !total_gravitational_energy + !log_total_gravitational_energy ! log(abs(total_gravitational_energy)) + !total_gravitational_energy_after_adjust_mass + + ! shorter versions of above + !tot_PE + !log_tot_PE + + !total_internal_energy + !log_total_internal_energy + !total_internal_energy_after_adjust_mass + + ! shorter versions of above + !tot_IE + !log_tot_IE + + !total_radial_kinetic_energy + !log_total_radial_kinetic_energy + !total_radial_kinetic_energy_after_adjust_mass + + ! shorter versions of above (does not include rot KE) + !tot_KE + !log_tot_KE + + !total_turbulent_energy + !log_total_turbulent_energy + !total_turbulent_energy_after_adjust_mass + !tot_Et + !log_tot_Et + + !total_energy_foe + + !tot_IE_div_IE_plus_KE + !total_IE_div_IE_plus_KE + + !total_entropy + !total_eps_grav + + !total_energy_sources_and_sinks ! for this step + !total_nuclear_heating + !total_non_nuc_neu_cooling + !total_irradiation_heating + !total_extra_heating ! extra heat integrated over the model times dt (erg) + !total_WD_sedimentation_heating + + !rel_run_E_err + + !rel_E_err + !abs_rel_E_err + !log_rel_E_err + + !tot_e_equ_err + !tot_e_err + + + !error_in_energy_conservation ! for this step + ! = total_energy - (total_energy_start + total_energy_sources_and_sinks) + !cumulative_energy_error ! = sum over all steps of abs(error_in_energy_conservation) + !rel_cumulative_energy_error ! = cumulative_energy_error/total_energy + !log_rel_cumulative_energy_error ! = log10 of rel_cumulative_energy_error + !log_rel_run_E_err ! shorter name for rel_cumulative_energy_error + + !rel_error_in_energy_conservation ! = error_in_energy_conservation/total_energy + !log_rel_error_in_energy_conservation + + !virial_thm_P_avg + !virial_thm_rel_err + !work_inward_at_center + !work_outward_at_surface + + +!---------------------------------------------------------------------------------------------- + + !# rotation + + !total_angular_momentum + !log_total_angular_momentum + !i_rot_total ! moment of inertia + + !total_rotational_kinetic_energy + !log_total_rotational_kinetic_energy + !total_rotational_kinetic_energy_after_adjust_mass + +!---------------------------------------------------------------------------------------------- + +!# velocities + + !avg_abs_v_div_cs + !log_avg_abs_v_div_cs + !max_abs_v_div_cs + !log_max_abs_v_div_cs + + !avg_abs_v + !log_avg_abs_v + !max_abs_v + !log_max_abs_v + + !u_surf + !u_surf_km_s + !u_div_csound_surf + !u_div_csound_max + + !infall_div_cs + +!---------------------------------------------------------------------------------------------- + +!# misc + + !e_thermal ! sum over all zones of Cp*T*dm + + !## eos + !logQ_max ! logQ = logRho - 2*logT + 12 + !logQ_min + !gamma1_min + + !## core mixing + !mass_semiconv_core + + !## H-He boundary + + !diffusion_time_H_He_bdy + !temperature_H_He_bdy + + + !## optical depth and opacity + + !one_div_yphot + !log_one_div_yphot + + !log_min_opacity + !min_opacity + + !log_tau_center + + !log_max_tau_conv + max_tau_conv + !log_min_tau_conv + !min_tau_conv + + !tau_qhse_yrs + + !## other + + !Lsurf_m + !dlnR_dlnM + !h1_czb_mass ! location (in Msun units) of base of 1st convection zone above he core + !kh_mdot_limit + !log_cntr_dr_cm + !min_Pgas_div_P + !surf_c12_minus_o16 ! this is useful for seeing effects of dredge up on AGB + !surf_num_c12_div_num_o16 + + !phase_of_evolution ! Integer mapping to the type of evolution see star_data/public/star_data_def.inc for definitions + + !## MLT++ + !gradT_excess_alpha + !gradT_excess_min_beta + !gradT_excess_max_lambda + + !max_L_rad_div_Ledd + !max_L_rad_div_Ledd_div_phi_Joss + + + !## RTI + !rti_regions + + !## Ni & Co + !total_ni_co_56 + + + !## internal structure constants + + ! this is evaluated assuming a spherical star and does not account for rotation + !apsidal_constant_k2 + + +!---------------------------------------------------------------------------------------------- + +!# accretion + + !k_below_const_q + !q_below_const_q + !logxq_below_const_q + + !k_const_mass + !q_const_mass + !logxq_const_mass + + !k_below_just_added + !q_below_just_added + !logxq_below_just_added + + !k_for_test_CpT_absMdot_div_L + !q_for_test_CpT_absMdot_div_L + !logxq_for_test_CpT_absMdot_div_L + +!---------------------------------------------------------------------------------------------- + +!# Color output + + ! Outputs the bolometric correction (bc) for the star in filter band ``filter'' (case sensitive) + !bc filter + + ! Outputs the absolute magnitude for the star in filter band ``filter'' (case sensitive) + !abs_mag filter + + ! Adds all the bc's to the output + !add_bc + + ! Adds all the absolute magnitudes to the output + !add_abs_mag + + ! Outputs luminosity in filter band ``filter'' (erg s^-1) (case sensitive) + ! lum_band filter + + ! Adds all the filter band luminosities to the output (erg s^-1) + ! add_lum_band + + ! Outputs log luminosity in filter band ``filter'' (log erg s^-1) (case sensitive) + ! log_lum_band filter + + ! Adds all the filter band luminosities to the output (log erg s^-1) + ! add_log_lum_band + +!---------------------------------------------------------------------------------------------- + +!# RSP + + !rsp_DeltaMag ! absolute magnitude difference between minimum and maximum light (mag) + !rsp_DeltaR ! R_max - R_min difference in the max and min radius (Rsun) + !rsp_GREKM ! fractional growth of the kinetic energy per pulsation period ("nonlinear growth rate") - see equation 5 in MESA5 + !rsp_num_periods ! Count of the number of pulsation cycles completed + !rsp_period_in_days ! Running period, ie., period between two consecutive values of R_max (days) + !rsp_phase ! Running pulsation phase for a cycle + +!---------------------------------------------------------------------------------------------- +!# debugging + + !## retries + num_retries ! total during the run + + !## solver iterations + + num_iters ! same as num_solver_iterations + !num_solver_iterations ! iterations at this step + !total_num_solver_iterations ! total iterations during the run + !avg_num_solver_iters + + !rotation_solver_steps + + !diffusion_solver_steps + !diffusion_solver_iters + + !avg_setvars_per_step + !avg_skipped_setvars_per_step + !avg_solver_setvars_per_step + + !burn_solver_maxsteps + + !total_num_solver_calls_converged + !total_num_solver_calls_failed + !total_num_solver_calls_made + !total_num_solver_relax_calls_converged + !total_num_solver_relax_calls_failed + !total_num_solver_relax_calls_made + !total_num_solver_relax_iterations + + !total_step_attempts + !total_step_redos + !total_step_retries + !total_steps_finished + !total_steps_taken + + !TDC_num_cells + + !## Relaxation steps + !total_relax_step_attempts + !total_relax_step_redos + !total_relax_step_retries + !total_relax_steps_finished + !total_relax_steps_taken + + !## conservation during mesh adjust + !log_mesh_adjust_IE_conservation + !log_mesh_adjust_KE_conservation + !log_mesh_adjust_PE_conservation + + !## amr + !num_hydro_merges + !num_hydro_splits + + !## timing + !elapsed_time ! time since start of run (seconds) diff --git a/star/dev_cases_massive_stars/wd_nova_burst/inlist b/star/dev_cases_massive_stars/wd_nova_burst/inlist new file mode 100644 index 000000000..7dd6091da --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/inlist @@ -0,0 +1,42 @@ + +&star_job + + read_extra_star_job_inlist(1) = .true. + extra_star_job_inlist_name(1) = 'inlist_wd_nova_burst' + +/ ! end of star_job namelist + + +&eos + + read_extra_eos_inlist(1) = .true. + extra_eos_inlist_name(1) = 'inlist_wd_nova_burst' + +/ ! end of eos namelist + + +&kap + + read_extra_kap_inlist(1) = .true. + extra_kap_inlist_name(1) = 'inlist_wd_nova_burst' + +/ ! end of kap namelist + + +&controls + + read_extra_controls_inlist(2) = .true. + extra_controls_inlist_name(2) = 'inlist_wd_nova_burst' + +/ ! end of controls namelist + + +&pgstar + + read_extra_pgstar_inlist(1) = .true. + extra_pgstar_inlist_name(1) = 'inlist_pgstar' + + read_extra_pgstar_inlist(2) = .true. + extra_pgstar_inlist_name(2) = 'inlist_wd_nova_burst' + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/wd_nova_burst/inlist_pgstar b/star/dev_cases_massive_stars/wd_nova_burst/inlist_pgstar new file mode 100644 index 000000000..c3004cd56 --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/inlist_pgstar @@ -0,0 +1,753 @@ + +&pgstar + +!pause = .true. + +pgstar_interval = 10 ! making this too small slows the model down. +pgstar_show_age_in_years = .true. +pgstar_show_age_in_seconds = .false. +pgstar_sleep = 0.0 + +! some global grid plot settings at end + +pgstar_show_model_number = .false. +pgstar_show_age = .false. + +!------------------------------------------------------------------------------------ + +Grid1_win_flag = .true. +Grid1_win_width = 12 +Grid1_win_aspect_ratio = 0.666 + +! file output +Grid1_file_flag = .true. +Grid1_file_dir = 'png' +Grid1_file_prefix = 'Grid1_' +Grid1_file_interval = 10 ! output when mod(model_number,Grid1_file_interval)==0 +Grid1_file_width = 27 ! (inches) negative means use same value as for window +Grid1_file_aspect_ratio = -1 ! negative means use same value as for window + +! reset the defaults + +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 + + +Grid1_title = '' + +Grid1_num_cols = 3 ! divide plotting region into this many equal width cols +Grid1_num_rows = 5 ! divide plotting region into this many equal height rows +Grid1_num_plots = 6 ! <= 10 + + +Grid1_plot_name(1) = 'Text_Summary1' +Grid1_plot_row(1) = 1 ! number from 1 at top +Grid1_plot_rowspan(1) = 1 ! plot spans this number of rows +Grid1_plot_col(1) = 1 ! number from 1 at left +Grid1_plot_colspan(1) = 3 ! plot spans this number of columns + +Grid1_plot_pad_left(1) = -0.03 ! fraction of full window width for padding on left +Grid1_plot_pad_right(1) = 0.0 ! fraction of full window width for padding on right +Grid1_plot_pad_top(1) = -0.06 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(1) = 0.07 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(1) = 1 ! 0.8 ! multiply txt_scale for subplot by this + + +Grid1_plot_name(3) = 'HR' +Grid1_plot_row(3) = 2 ! number from 1 at top +Grid1_plot_rowspan(3) = 1 ! plot spans this number of rows +Grid1_plot_col(3) = 1 ! number from 1 at left +Grid1_plot_colspan(3) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(3) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(3) = 0.08 ! fraction of full window width for padding on right +Grid1_plot_pad_top(3) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(3) = 0.01 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(3) = 0.7 ! multiply txt_scale for subplot by this + + +Grid1_plot_name(5) = 'Profile_Panels1' +Grid1_plot_row(5) = 3 ! number from 1 at top +Grid1_plot_rowspan(5) = 3 ! plot spans this number of rows +Grid1_plot_col(5) = 1 ! number from 1 at left +Grid1_plot_colspan(5) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(5) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(5) = 0.10 ! fraction of full window width for padding on right +Grid1_plot_pad_top(5) = 0.05 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(5) = 0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(5) = 0.6 ! multiply txt_scale for subplot by this + + +Grid1_plot_name(2) = 'TRho_Profile' +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) = 2 ! number from 1 at left +Grid1_plot_colspan(2) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(2) = -0.01 ! fraction of full window width for padding on left +Grid1_plot_pad_right(2) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(2) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(2) = 0.01 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(2) = 0.7 ! multiply txt_scale for subplot by this + + +Grid1_plot_name(4) = 'History_Panels1' +Grid1_plot_row(4) = 3 ! number from 1 at top +Grid1_plot_rowspan(4) = 3 ! plot spans this number of rows +Grid1_plot_col(4) = 2 ! number from 1 at left +Grid1_plot_colspan(4) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(4) = 0.00 ! fraction of full window width for padding on left +Grid1_plot_pad_right(4) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(4) = 0.05 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(4) = 0.0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(4) = 0.6 ! multiply txt_scale for subplot by this + + +Grid1_plot_name(6) = 'Profile_Panels3' +Grid1_plot_row(6) = 2 ! number from 1 at top +Grid1_plot_rowspan(6) = 4 ! plot spans this number of rows +Grid1_plot_col(6) = 3 ! Number from 1 at left +Grid1_plot_colspan(6) = 1 ! plot spans this number of columns + +Grid1_plot_pad_left(6) = 0.04 ! fraction of full window width for padding on left +Grid1_plot_pad_right(6) = 0.06 ! fraction of full window width for padding on right +Grid1_plot_pad_top(6) = -0.04 ! fraction of full window height for padding at top +Grid1_plot_pad_bot(6) = 0 ! fraction of full window height for padding at bottom +Grid1_txt_scale_factor(6) = 0.6 ! multiply txt_scale for subplot by this + + +!------------------------------------------------------------------------------------ + +Profile_Panels3_win_flag = .false. + +Profile_Panels3_title = '' + +Profile_Panels3_num_panels = 5 + +Profile_Panels3_yaxis_name(1) = 'Abundance' + +Profile_Panels3_yaxis_name(2) = 'Power' + +Profile_Panels3_yaxis_name(3) = 'Mixing' +Mixing_legend_txt_scale_factor = 0.9 + +Profile_Panels3_yaxis_name(4) = 'conv_vel_div_csound'!'conv_vel'!'logRho' +Profile_Panels3_other_yaxis_name(4) = 'v_div_cs' ! 'vel_km_per_s' ! 'entropy' +Profile_Panels3_other_dymin(4) = 0.14 + +Profile_Panels3_yaxis_name(5) = 'v_div_vesc'!'lum_div_Ledd'!'log_csound'!'logT' +Profile_Panels3_other_yaxis_name(5) = 'vel_km_per_s'!'burn_num_iters' + Profile_Panels3_yaxis_log(5) = .false. + +! x-axis limits and properties +Profile_Panels3_xaxis_name = 'logxq'!'zone'!'zone'!'radius' +Profile_Panels3_xmin = -101d0 +Profile_Panels3_xmax = -101d0 !1700! -101d0 ! 2.2 +Profile_Panels3_xaxis_reversed = .true. + + +Profile_Panels3_txt_scale = 0.7 + +!Profile_Panels3_xaxis_name = 'zone' +!Profile_Panels3_xmin = 800 +!Profile_Panels3_xmax = 1100 +!Profile_Panels3_xaxis_reversed = .true. + +!Profile_Panels3_show_grid = .true. +Profile_Panels3_show_mix_regions_on_xaxis = .true. + +!------------------------------------------------------------------------------------ + +!Profile_Panels1_win_flag = .true. +!Profile_Panels1_file_flag = .true. + Profile_Panels1_file_dir = 'png' + Profile_Panels1_file_prefix = 'profile_panels1_' + Profile_Panels1_file_interval = 1 + Profile_Panels1_file_width = -1 + Profile_Panels1_file_aspect_ratio = -1 + +Profile_Panels1_title = '' + +Profile_Panels1_txt_scale = 0.7 +Profile_Panels1_num_panels = 4 + +Profile_Panels1_yaxis_name(1) = 'conv_vel' +!Profile_Panels1_dymin(1) = 0.14 +Profile_Panels1_other_yaxis_name(1) = 'lum_conv'!'lum_conv' +!Profile_Panels1_other_dymin(1) = 0.14 + +Profile_Panels1_yaxis_name(2) = 'logT'!'logdq'!'radius'!'entropy' +Profile_Panels1_other_yaxis_name(2) = 'mlt_Y_face'! 'Lc_div_L'!'log_dt_cs_div_dr'!'pgas_div_p' +Profile_Panels1_other_yaxis_log(2) = .false. + +!Profile_Panels1_ymax(2) = 210 +!Profile_Panels1_ymin(2) = 160 + +Profile_Panels1_yaxis_name(3) = 'luminosity'!'conv_vel'!'Lc_div_L'!'gradT' +Profile_Panels1_other_yaxis_name(3) = 'logdq' !'conv_vel'!'lum_div_Ledd'!'grada' +Profile_Panels1_same_yaxis_range(3) = .false. +Profile_Panels1_other_dymin(3) = 0.08 +!Profile_Panels1_yaxis_log(3) = .false. +Profile_Panels1_ymax(3) =-101d0 + +Profile_Panels1_yaxis_name(4) = 'log_opacity' +Profile_Panels1_ymin(4) = -101d0 +Profile_Panels1_dymin(4) = 0.14 +Profile_Panels1_other_yaxis_name(4) = 'gradr' +Profile_Panels1_other_dymin(4) = 0.14 + +! x-axis limits and properties +Profile_Panels1_xaxis_name = 'logtau'!'zone' +Profile_Panels1_xmin = -101d0!-101d0 +Profile_Panels1_xmax = -101d0!9d0 !-101d0 !8.1 +Profile_Panels1_xaxis_reversed = .true. + +!Profile_Panels1_xaxis_name = 'zone' +!Profile_Panels1_xmin = 15 +!Profile_Panels1_xmax = 270 +!Profile_Panels1_xaxis_reversed = .true. + +!Profile_Panels1_show_grid = .true. +Profile_Panels1_show_mix_regions_on_xaxis = .true. + +!------------------------------------------------------------------------------------ + + +!TRho_Profile_win_flag = .true. +TRho_Profile_win_width = 8 +TRho_Profile_win_aspect_ratio = 0.75 ! aspect_ratio = height/width + +! file output +!TRho_Profile_file_flag = .true. +TRho_Profile_file_dir = 'TRho' +TRho_Profile_file_prefix = 'trho_' +TRho_Profile_file_interval = 10 ! output when `mod(model_number,TRho_Profile_file_interval)==0` +TRho_Profile_file_width = -1 ! (inches) negative means use same value as for window +TRho_Profile_file_aspect_ratio = -1 ! negative means use same value as for window + +TRho_Profile_xleft = 0.15 +TRho_Profile_xright = 0.85 +TRho_Profile_ybot = 0.15 +TRho_Profile_ytop = 0.85 +TRho_Profile_txt_scale = 0.7 +TRho_Profile_title = ' ' + +TRho_switch_to_Column_Depth = .false. +TRho_switch_to_mass = .false. + +show_TRho_Profile_legend = .false. + TRho_Profile_legend_coord = 0.07 + TRho_Profile_legend_fjust = 0.0 + TRho_Profile_legend_disp1 = -2.0 + TRho_Profile_legend_del_disp = -1.3 + TRho_Profile_legend_txt_scale = 1.1 + + +show_TRho_Profile_text_info = .false. + TRho_Profile_text_info_xfac = 0.77 ! controls x location + TRho_Profile_text_info_dxfac = 0.02 ! controls x spacing to value from text + TRho_Profile_text_info_yfac = 0.6 ! controls y location of 1st line + TRho_Profile_text_info_dyfac = -0.04 ! controls line spacing + +show_TRho_Profile_mass_locs = .false. +show_TRho_accretion_mesh_borders = .false. +show_TRho_Profile_kap_regions = .false. +show_TRho_Profile_gamma1_4_3rd = .true. +show_TRho_Profile_eos_regions = .true. +show_TRho_Profile_degeneracy_line = .true. +show_TRho_Profile_Pgas_Prad_line = .true. +show_TRho_Profile_burn_lines = .true. +show_TRho_Profile_burn_labels = .true. + +! axis limits +TRho_Profile_xmin = -15.0 +TRho_Profile_xmax = 10!5d0!10.0 +TRho_Profile_ymin = 2.5 +TRho_Profile_ymax = 9!8.5d0!10.0 + +! these are shown if show_TRho_Profile_mass_locs = .true. +! set all the entries +profile_mass_point_q = -1 +profile_mass_point_color_index = 1 +profile_mass_point_symbol = -6 +profile_mass_point_symbol_scale = 1.7 +profile_mass_point_str = '' +profile_mass_point_str_clr = 1 +profile_mass_point_str_scale = 1.0 + +! set defaults +num_profile_mass_points = 3 ! max is defined in star_def (max_num_profile_mass_points) + +profile_mass_point_q(1) = 0.5 +profile_mass_point_color_index(1) = 1 +profile_mass_point_symbol(1) = -6 +profile_mass_point_str(1) = ' 0.5 M\d\(0844)\u' +profile_mass_point_str_clr(1) = 1 + +profile_mass_point_q(2) = 0.95 +profile_mass_point_color_index(2) = 1 +profile_mass_point_symbol(2) = -6 +profile_mass_point_str(2) = ' 0.95 M\d\(0844)\u' +profile_mass_point_str_clr(3) = 1 + +profile_mass_point_q(3) = 0.999 +profile_mass_point_color_index(3) = 1 +profile_mass_point_symbol(3) = -6 +profile_mass_point_str(3) = ' 0.999 M\d\(0844)\u' +profile_mass_point_str_clr(3) = 1 + +!------------------------------------------------------------------------------------ + + +! Text_Summary windows + +Text_Summary1_win_flag = .false. +Text_Summary1_win_width = 10 +Text_Summary1_win_aspect_ratio = 0.15 + +Text_Summary1_xleft = 0.01 +Text_Summary1_xright = 0.99 +Text_Summary1_ybot = 0.0 +Text_Summary1_ytop = 1.0 +Text_Summary1_txt_scale = 0.95 +Text_Summary1_title = '' + +Text_Summary1_num_rows = 6 ! <= 20 +Text_Summary1_num_cols = 5 ! <= 20 +Text_Summary1_name(:,:) = '' + + +Text_Summary1_name(1,1) = 'model_number' +Text_Summary1_name(1,2) = 'log_dt' +Text_Summary1_name(1,3) = 'Mass' +Text_Summary1_name(1,4) = 'H_cntr' +Text_Summary1_name(1,5) = 'H_rich' + +Text_Summary1_name(2,1) = 'non_fe_core_infall' +Text_Summary1_name(2,2) = 'star_age' +Text_Summary1_name(2,3) = 'lg_Mdot' +Text_Summary1_name(2,4) = 'He_cntr' +Text_Summary1_name(2,5) = 'He_core' + +Text_Summary1_name(3,1) = '' +Text_Summary1_name(3,2) = 'log_Teff' +Text_Summary1_name(3,3) = 'eta_cntr' +Text_Summary1_name(3,4) = 'C_cntr' +Text_Summary1_name(3,5) = 'CO_core' + +Text_Summary1_name(4,1) = ''!'log_max_T' +Text_Summary1_name(4,2) = 'log_LH' +Text_Summary1_name(4,3) = 'lg_Lnuc_tot' +Text_Summary1_name(4,4) = 'O_cntr' +Text_Summary1_name(4,5) = 'radius' + +Text_Summary1_name(5,1) = '' +Text_Summary1_name(5,2) = 'log_LHe' +Text_Summary1_name(5,3) = 'lg_Lneu' +Text_Summary1_name(5,4) = 'Ne_cntr' +Text_Summary1_name(5,5) = 'zones' + +Text_Summary1_name(6,1) = 'log_cntr_Rho' +Text_Summary1_name(6,2) = 'log_LZ' +Text_Summary1_name(6,3) = 'lg_Lphoto' +Text_Summary1_name(6,4) = 'retries' +Text_Summary1_name(6,5) = 'log_cntr_T' + + +!------------------------------------------------------------------------------------ + +! Abundance profile plot + +Abundance_win_flag = .false. + +! window properties +Abundance_win_width = 10 +Abundance_win_aspect_ratio = 0.75 + +Abundance_xleft = 0.15 +Abundance_xright = 0.85 +Abundance_ybot = 0.15 +Abundance_ytop = 0.85 +Abundance_txt_scale = 1.1 +Abundance_title = '' + +! isotopes to plot + +Abundance_num_isos_to_show = 20 + +Abundance_which_isos_to_show(1) = 'h1' +Abundance_which_isos_to_show(2) = 'he3' +Abundance_which_isos_to_show(3) = 'he4' +Abundance_which_isos_to_show(4) = 'c12' +Abundance_which_isos_to_show(5) = 'n14' +Abundance_which_isos_to_show(6) = 'o16' +Abundance_which_isos_to_show(7) = 'ne20' +Abundance_which_isos_to_show(8) = 'mg24' +Abundance_which_isos_to_show(9) = 'si28' +Abundance_which_isos_to_show(10) = 's32' +Abundance_which_isos_to_show(11) = 'ar36' +Abundance_which_isos_to_show(12) = 'ca40' +Abundance_which_isos_to_show(13) = 'ti44' +Abundance_which_isos_to_show(14) = 'cr48' +Abundance_which_isos_to_show(15) = 'cr56' +Abundance_which_isos_to_show(16) = 'fe52' +Abundance_which_isos_to_show(17) = 'fe54' +Abundance_which_isos_to_show(18) = 'fe56' +Abundance_which_isos_to_show(19) = 'ni56' +Abundance_which_isos_to_show(20) = 'neut' +!Abundance_which_isos_to_show(22) = 'ne22' + + + +! number and size of isotope labels along curves +num_abundance_line_labels = 4 +Abundance_line_txt_scale_factor = 1.1 + + +! number and size of isotopes on legend +Abundance_legend_max_cnt = 10 +Abundance_legend_txt_scale_factor = 1.3 + +! yaxis limits +Abundance_log_mass_frac_min = -4!-6.4 ! -3.5 +Abundance_log_mass_frac_max = 0.3 + +! file output +Abundance_file_flag = .false. +Abundance_file_dir = 'Abundance' +Abundance_file_prefix = 'abund_' +Abundance_file_width = -1 ! (inches) negative means use same value as for window +Abundance_file_aspect_ratio = -1 ! negative means use same value as for window + + +!------------------------------------------------------------------------------------ + +! power plot + +Power_win_flag = .false. +Power_win_width = 10 +Power_win_aspect_ratio = 0.75 +Power_title = '' + +Power_xleft = 0.15 +Power_xright = 0.85 +Power_ybot = 0.15 +Power_ytop = 0.85 +Power_txt_scale = 1.1 +Power_title = ' ' + +Power_legend_max_cnt = 10 +Power_legend_txt_scale_factor = 1.3 ! relative to other text + +! power yaxis limits -- to override system default selections +Power_ymin = -5.0 ! -101d0 ! only used if /= -101d0 +Power_ymax = 25.0 ! -101d0 ! only used if /= -101d0 + +! file output +Power_file_flag = .false. +Power_file_dir = 'png' +Power_file_prefix = 'power_' +Power_file_interval = 5 ! output when mod(model_number,Power_file_interval)==0 +Power_file_width = -1 ! (inches) negative means use same value as for window +Power_file_aspect_ratio = -1 ! negative means use same value as for window + + +!------------------------------------------------------------------------------------ + +! mixing plot + +Mixing_xmin = 0.0 +Mixing_xmax = 1.6 ! -101d0 +Mixing_legend_txt_scale_factor = 1.4 ! relative to other text + +Mixing_show_rotation_details = .false. + +!Mixing_win_flag = .true. +!Mixing_file_flag = .true. +Mixing_file_dir = 'png' +Mixing_file_prefix = 'mixing_' +Mixing_file_interval = 1 ! output when `mod(model_number,Mixing_file_interval)==0` +Mixing_file_width = -1 ! (inches) negative means use same value as for window +Mixing_file_aspect_ratio = -1 ! negative means use same value as for window + + +!----------------------------------------------------------------------- + +! TRho window + ! history of central temperature vs. density + + TRho_txt_scale = 0.7 + TRho_title = '' + + TRho_logT_min = -101d0 + TRho_logT_max = -101d0 + TRho_logRho_min = -101d0 + TRho_logRho_max = -101d0 + show_TRho_degeneracy_line = .true. + + + +!----------------------------------------------------------------------- + + !# HR window + ! history of `lg_L` vs. `lg_Teff` + + HR_win_flag = .false. + + HR_win_width = 12 + HR_win_aspect_ratio = 0.75 ! aspect_ratio = height/width + + HR_xleft = 0.15 + HR_xright = 0.85 + HR_ybot = 0.15 + HR_ytop = 0.85 + HR_txt_scale = 0.7 !1.0 + HR_title = '' + + ! axis limits -- to override system default selections + ! HR_logT_min = -101d0 ! only used if /= -101d0 + ! HR_logT_max = -101d0 ! only used if /= -101d0 + ! HR_logL_min = -101d0 ! only used if /= -101d0 + ! HR_logL_max = -101d0 ! only used if /= -101d0 + + + + History_Panels1_xaxis_name = 'yr_since_coll' + + + ! axis limits -- to override system default selections + HR_logT_min = -101d0!3.3 !-101d0 ! only used if /= -101d0 + HR_logT_max = -101d0!3.9!-101d0 ! only used if /= -101d0 + HR_logL_min = -101d0!4.4!-101d0 ! only used if /= -101d0 + HR_logL_max = -101d0!5.5!-101d0 ! only used if /= -101d0 + + ! axis limits -- to override system default selections + HR_logT_min = -101d0 ! only used if /= -101d0 + HR_logT_max = -101d0 ! only used if /= -101d0 + HR_logL_min = -101d0 ! only used if /= -101d0 + HR_logL_max = -101d0 ! only used if /= -101d0 + + HR_logL_margin = 0.1 + HR_logT_margin = 0.1 + HR_dlogT_min = -1 + HR_dlogL_min = -1 + + HR_step_min = -1 ! only plot models with model number >= this + HR_step_max = -1 ! only plot models with model number <= this + + show_HR_classical_instability_strip = .true. + show_HR_Mira_instability_region = .false. + show_HR_WD_instabilities = .false. + + show_HR_target_box = .false. + HR_target_n_sigma = -3 ! -n means show sig 1..n + HR_target_logL = 0 + HR_target_logL_sigma = 0 + HR_target_logT = 0 + HR_target_logT_sigma = 0 + + show_HR_annotation1 = .false. + show_HR_annotation2 = .false. + show_HR_annotation3 = .false. + + HR_fname = '' ! file name for extra HR data + + ! Enables calling a subroutine to add extra information to a plot + ! see `$MESA_DIR/star/other/pgstar_decorator.f90` + HR_use_decorator = .false. + + + ! file output + HR_file_flag = .false. + HR_file_dir = 'hr_png' + HR_file_prefix = 'hr_' + HR_file_interval = 10 ! output when `mod(model_number,HR_file_interval)==0` + HR_file_width = 27 ! (inches) negative means use same value as for window + HR_file_aspect_ratio = -1 ! negative means use same value as for window + +!----------------------------------------------------------------------- + + History_Panels1_title = '' + + History_Panels1_xaxis_name = 'model_number'!'model_number'!'model_number' + History_Panels1_max_width = 3000! 10000 + + !History_Panels1_xaxis_name = 'star_age' + !History_Panels1_max_width = 10 + + History_Panels1_txt_scale = 0.75 + History_Panels1_xmin = -101d0!1300!200!500 + History_Panels1_xmax = -101d0 + History_Panels1_dxmin = -1 + History_Panels1_xaxis_reversed = .false. + History_Panels1_xaxis_log = .false. + History_Panels1_xmargin = 0.0 + + ! :: + + History_Panels1_num_panels = 4 + + ! :: + + History_Panels1_yaxis_name(1) = 'log_L' + History_Panels1_yaxis_reversed(1) = .false. + History_Panels1_ymin(1) = -101d0 + History_Panels1_ymax(1) = -101d0 + History_Panels1_dymin(1) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(1) = 'log_Teff' + History_Panels1_other_yaxis_reversed(1) = .false. + History_Panels1_other_ymin(1) = -101d0 + History_Panels1_other_ymax(1) = -101d0 + History_Panels1_other_dymin(1) = 0.14 + + ! :: + + History_Panels1_yaxis_name(2) = 'lum_div_Ledd' + !'log_total_gravitational_energy'!'growth'!'lum_div_Ledd' + History_Panels1_yaxis_reversed(2) = .false. + History_Panels1_ymin(2) = -101d0 + History_Panels1_ymax(2) = -101d0 + !History_Panels1_dymin(2) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(2) = 'log_g' + !'log_total_energy' !'center_entropy'!'luminosity'!'log_g'!'log_max_T' ! 'v_surf_km_s' + History_Panels1_other_yaxis_reversed(2) = .false. + History_Panels1_other_ymin(2) = -101d0 + History_Panels1_other_ymax(2) = -101d0 + History_Panels1_other_dymin(2) = 1d-3!0.14 + + ! :: + + History_Panels1_yaxis_name(3) = 'radius' + History_Panels1_yaxis_reversed(3) = .false. + History_Panels1_ymin(3) = -101d0 + History_Panels1_ymax(3) = -101d0 + History_Panels1_dymin(3) = 0.01d0 + + ! :: + + History_Panels1_other_yaxis_name(3) = 'v_surf_km_s'!'log_cntr_Rho' + History_Panels1_other_yaxis_reversed(3) = .false. + History_Panels1_other_ymin(3) = -101d0 + History_Panels1_other_ymax(3) = -101d0 + History_Panels1_other_dymin(3) = 0.01d0 + ! :: + + History_Panels1_yaxis_name(4) = 'log_dt'!'log_dt' + History_Panels1_yaxis_reversed(4) = .false. + History_Panels1_ymin(4) = -101d0 + History_Panels1_ymax(4) = -101d0 + !History_Panels1_dymin(4) = 0.14 + + ! :: + + History_Panels1_other_yaxis_name(4) = 'log_abs_mdot' + History_Panels1_other_yaxis_reversed(4) = .false. + History_Panels1_other_ymin(4) = -101d0 + History_Panels1_other_ymax(4) = -101d0 + History_Panels1_other_dymin(4) = 0.14 + + +!----------------------------------------------------------------------- + +! some global grid plot settings + +pgstar_grid_show_title = .true. +pgstar_grid_title_scale = 1.0 +pgstar_grid_title_lw = 3 +pgstar_grid_title_disp = 2.5 ! 1.8 +pgstar_grid_title_coord = 0.5 +pgstar_grid_title_fjust = 0.5 + +pgstar_age_scale = 0.8 +pgstar_age_disp = 3.0 +pgstar_age_coord = 0.0 +pgstar_age_fjust = 0.0 + +pgstar_xaxis_label_scale = 1.3 +pgstar_left_yaxis_label_scale = 1.3 +pgstar_xaxis_label_disp = 2.2 +pgstar_left_yaxis_label_disp = 3.1 +pgstar_right_yaxis_label_disp = 4.1 + +pgstar_model_scale = 0.8 +pgstar_model_disp = 3.0 +pgstar_model_coord = 1.0 +pgstar_model_fjust = 1.0 + +! white_on_black flags -- true means white foreground color on black background +file_white_on_black_flag = .true. +file_device = 'png' ! options 'png' and 'vcps' for png and postscript respectively + + +!file_white_on_black_flag = .false. +!file_device = 'vcps' ! options 'png' and 'vcps' for png and postscript respectively + + +kipp_win_flag=.false. +kipp_file_flag=.false. +Kipp_mix_interval = 1 +Kipp_show_luminosities = .true. + + + +! history tracks for pulsations + + +! history tracks + History_Track1_file_flag = .false. + History_Track2_file_flag = .false. + + +History_Track1_win_flag = .false. +History_Track1_file_interval = 50 +History_Track1_win_width = 12 +History_Track1_win_aspect_ratio = 0.75 + +History_Track1_xname = 'v_surf_km_s' +History_Track1_yname = 'log_L' +History_Track1_xaxis_label = 'Vsurf' +History_Track1_yaxis_label = 'log L/L\d\(2281)' +History_Track1_reverse_xaxis = .false. + + +!History_Track1_xmin = -50d0 +!History_Track1_xmax = 50d0 +!History_Track1_ymin = 3.50d0 +!History_Track1_ymax = 3.98d0 + + +History_Track2_win_flag = .false. +History_Track2_file_interval = 50 + +History_Track2_win_width = 12 +History_Track2_win_aspect_ratio = 0.75 + +History_Track2_xname = 'radius' !'v_surf_km_s' +History_Track2_yname = 'log_L' +History_Track2_xaxis_label = 'Radius' +History_Track2_yaxis_label = 'log L/L\d\(2281)' +History_Track2_reverse_xaxis = .false. + +!History_Track2_xmin = 72d0 +!History_Track2_xmax = 96d0 +!History_Track2_ymin = 3.50d0 +!History_Track2_ymax = 3.98d0 + +/ ! end of pgstar namelist + diff --git a/star/dev_cases_massive_stars/wd_nova_burst/inlist_setup b/star/dev_cases_massive_stars/wd_nova_burst/inlist_setup new file mode 100644 index 000000000..115236af8 --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/inlist_setup @@ -0,0 +1,164 @@ + +! inlist_setup + + +&star_job + + show_log_description_at_start = .false. + + load_saved_model = .true. + load_model_filename = '1.1M_lgTc_7.7.mod' ! from make_o_ne_wd test case + + save_model_when_terminate = .true. + save_model_filename = 'ready.mod' + required_termination_code_string = 'max_age' + + change_initial_net = .true. + new_net_name = 'cno_extras_o18_to_mg26_plus_fe56.net' + auto_extend_net = .false. + + change_v_flag = .true. + new_v_flag = .true. + + set_tau_factor = .true. + set_to_this_tau_factor = 30 + + set_initial_dt = .true. + years_for_initial_dt = 1d6 + + set_initial_age = .true. + initial_age = 0 + + set_initial_model_number = .true. + initial_model_number = 0 + + pgstar_flag = .true. + + +/ ! end of star_job namelist + + +&eos +/ + +&kap + + Zbase = 0.02d0 + + use_Type2_opacities = .true. + +/ ! end of kap namelist + + +&controls + + ! limit max_model_number as part of test_suite + max_model_number = 1800 ! 1300 + + max_age = 1d7 + +! solver + energy_eqn_option = 'eps_grav' + use_gold2_tolerances = .true. + + limit_for_rel_error_in_energy_conservation = 1d-5 + hard_limit_for_rel_error_in_energy_conservation = 1d-3 + + use_gold_tolerances = .false. + warning_limit_for_max_residual = 1d99 + convergence_ignore_equL_residuals = .true. + + + mass_change_full_on_dt = 1d-6 ! (seconds) + mass_change_full_off_dt = 1d-6 ! (seconds) + + ! NOTE: for super eddington wind, + ! we use Ledd averaged over mass to optical depth tau = 100 + super_eddington_scaling_factor = 1 + ! parameter for mass loss driven by super Eddington luminosity + super_eddington_wind_Ledd_factor = 1 + ! multiply Ledd by this factor when computing super Eddington wind + ! e.g., if this is 2, then only get wind when L > 2*Ledd + + mixing_length_alpha = 1.9 + MLT_option = 'Henyey' + + use_Ledoux_criterion = .true. + alpha_semiconvection = 1d-3 + thermohaline_coeff = 1d3 + + star_mass_max_limit = 1.301d0 + + !mass_change = 1d-9 + accrete_same_as_surface = .false. + accretion_h1 = 0.7000 ! Estimate Nomoto 2007 + accretion_h2 = 0 + accretion_he3 = 0.292910D-04 + accretion_he4 = 0.279971 ! Estimated Nomoto 2007 + accretion_zfracs = 4 ! Lodders 03 + + min_timestep_limit = 1d-12 + + xa_function_species(1) = 'h1' ! name of nuclide as defined in chem_def + xa_function_weight(1) = 20 + xa_function_param(1) = 1d-6 + xa_function_species(2) = 'he4' ! name of nuclide as defined in chem_def + xa_function_weight(2) = 20 + xa_function_param(2) = 1d-2 + + delta_lgL_H_limit = 0.1 ! limit for magnitude of change in lgL_H + lgL_H_burn_min = -0.5 ! ignore changes in lgL_H if value is less than this + + delta_lgL_He_limit = 0.25 ! limit for magnitude of change in lgL_He + lgL_He_burn_min = 2.5 ! ignore changes in lgL_He if value is less than this + + delta_lgRho_limit = 1 ! limit for magnitude of max change in log10 density at any point + delta_lgRho_hard_limit = -1 + + delta_lgT_limit = 0.5 + delta_lgL_limit = 0.05 + delta_lgTeff_limit = 0.10 + + delta_lgL_nuc_limit = 0.05 + delta_lgL_nuc_hard_limit = 0.10 + lgL_nuc_burn_min = -3d0 + + + atm_option = 'T_tau' + atm_T_tau_relation = 'Eddington' + atm_T_tau_opacity = 'fixed' + Pextra_factor = 4 + + !varcontrol_target = 3d-4 + + mesh_delta_coeff = 1.0 + max_allowed_nz = 20000 + + + num_trace_history_values = 2 + trace_history_value_name(1) = 'rel_E_err' + trace_history_value_name(2) = 'log_rel_run_E_err' + + photo_interval = 50 + profile_interval = 50 + history_interval = 5 + terminal_interval = 10 + write_header_frequency = 10 + +/ ! end of controls namelist + + +&pgstar + + Grid8_win_flag = .true. + Grid8_win_width = 7 + Summary_Burn_xaxis_name = 'logxq' + Summary_Burn_xaxis_reversed = .true. + Summary_Burn_xmin = -14 ! -101d0 ! only used if /= -101d0 + Summary_Burn_xmax = -3 ! -101d0 ! only used if /= -101d0 + Abundance_xaxis_name = 'logxq' + Abundance_xaxis_reversed = .true. + Abundance_xmin = -14 ! -101d0 ! only used if /= -101d0 + Abundance_xmax = -3 ! -101d0 ! only used if /= -101d0 + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/wd_nova_burst/inlist_setup_header b/star/dev_cases_massive_stars/wd_nova_burst/inlist_setup_header new file mode 100644 index 000000000..a346bcb97 --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/inlist_setup_header @@ -0,0 +1,39 @@ + +&star_job + + read_extra_star_job_inlist(1) = .true. + extra_star_job_inlist_name(1) = 'inlist_setup' + +/ ! end of star_job namelist + + +&eos + + read_extra_eos_inlist(1) = .true. + extra_eos_inlist_name(1) = 'inlist_setup' + +/ ! end of eos namelist + + +&kap + + read_extra_kap_inlist(1) = .true. + extra_kap_inlist_name(1) = 'inlist_setup' + +/ ! end of kap namelist + + +&controls + + read_extra_controls_inlist(2) = .true. + extra_controls_inlist_name(2) = 'inlist_setup' + +/ ! end of controls namelist + + +&pgstar + + read_extra_pgstar_inlist(2) = .true. + extra_pgstar_inlist_name(2) = 'inlist_setup' + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/wd_nova_burst/inlist_wd_nova_burst b/star/dev_cases_massive_stars/wd_nova_burst/inlist_wd_nova_burst new file mode 100644 index 000000000..7e69fbe0f --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/inlist_wd_nova_burst @@ -0,0 +1,237 @@ + +! inlist_wd_nova_burst + + +&star_job + + show_log_description_at_start = .false. + + load_saved_model = .true. + load_model_filename = 'ready.mod' ! from running inlist_setup + + save_model_when_terminate = .true. + save_model_filename = 'final.mod' + required_termination_code_string = 'extras_check_model' + +! save_model_when_terminate = .true. +! save_model_filename = 'start_of_wd_nova_burst.mod' +! required_termination_code_string = 'max_model_number' + + set_initial_age = .true. + initial_age = 0 + + set_initial_model_number = .true. + initial_model_number = 0 + +relax_tau_factor = .true. +relax_to_this_tau_factor = 1d0 +dlogtau_factor = 0.1d0 + + set_tau_factor = .false. + !set_to_this_tau_factor = 30 + + set_initial_cumulative_energy_error = .true. + new_cumulative_energy_error = 0d0 + + set_initial_dt = .true. + years_for_initial_dt = 1d0 !1d-5 + + change_v_flag = .true. + new_v_flag = .true. + + pgstar_flag = .true. + +/ ! end of star_job namelist + + +&eos + mass_fraction_limit_for_Skye = 1d-16 + +/ ! end of eos namelist + + +&kap + Zbase = 0.02d0 + + use_Type2_opacities = .true. + +/ ! end of kap namelist + + +&controls + + ! limit max_model_number as part of test_suite + !max_model_number = 223 + !max_model_number = 2250 + +! solver + min_dq = 1d-26 + min_dq_for_split = 1d-24 + max_surface_cell_dq = 1d0 + min_dq_for_xa = 1d-4 + + + ! have used these values to do run to saturation, but may not be necessary ~ Bill P. + dt_div_min_dr_div_cs_limit = 5d3 !500d0 !50d0 ! 100d0 + dt_div_min_dr_div_cs_hard_limit = -1 !10d0! i don't like hard limits ~ EbF + min_abs_u_div_cs_for_dt_div_min_dr_div_cs_limit = 0d0 !0.8d0 + min_q_for_dt_div_min_dr_div_cs_limit = 0d0 !0d0 + max_q_for_dt_div_min_dr_div_cs_limit = 1d0 + min_k_for_dt_div_min_dr_div_cs_limit = 1 + min_abs_du_div_cs_for_dt_div_min_dr_div_cs_limit = 0.001d0 ! lower to 1d-4 for massive stars. + + report_solver_progress = .false. + + energy_eqn_option = 'dedt' + + use_gold2_tolerances = .false. + + limit_for_rel_error_in_energy_conservation = 1d-5 + hard_limit_for_rel_error_in_energy_conservation = 1d-3 + + warning_limit_for_max_residual = 1d99 + convergence_ignore_equL_residuals = .true. + make_gradr_sticky_in_solver_iters = .true. + + + mass_change_full_on_dt = 1d-6 ! (seconds) + mass_change_full_off_dt = 1d-6 ! (seconds) + + ! NOTE: for super eddington wind, + ! we use Ledd averaged over mass to optical depth tau = 100 + !super_eddington_scaling_factor = 0 + ! parameter for mass loss driven by super Eddington luminosity + !super_eddington_wind_Ledd_factor = 1 + ! multiply Ledd by this factor when computing super Eddington wind + ! e.g., if this is 2, then only get wind when L > 2*Ledd + + use_other_wind = .true. + max_tries_for_implicit_wind = 10 + !surf_avg_tau = 10 + !eps_mdot_leak_frac_factor = 0d0 !1d0 + + mixing_length_alpha = 1.9 + MLT_option = 'TDC' + include_mlt_corr_to_TDC = .false. ! true K. 1986 model, no mlt limiting + TDC_include_eturb_in_energy_equation = .true. + TDC_alpha_M = 0.25d0 + TDC_alpha_M_use_explicit_mlt_vc_in_momentum_equation = .true. + use_superad_reduction = .false. + okay_to_reduce_gradT_excess = .false. + + !set_rho_to_dm_div_dV = .false. + + !include_mlt_Pturb_in_thermodynamic_gradients = .false. + + + ! artificial viscosity if necessary, v_flag only + use_Pvsc_art_visc = .true. + Pvsc_cq = 4.0d0 ! try 100d0 if shocks become an issue. + Pvsc_zsh = 0.1d0 + + max_num_merge_surface_cells = 30 + P_function_weight = 0 ! must be set 0 if doing remesh, when using Pvsc, or risk resolving single zone art visc P. + !log_tau_function_weight = 40 + +okay_to_remesh = .true. +max_conv_vel_div_csound = 1d0 +max_conv_vel_div_csound_maxq = 1d0 + +! controls for shock capturing, relaxed for pulsations + ! main purpose is to force radiative in shock face + max_abs_du_div_cs_for_convection = 1d1 !0.03d0 + max_v_div_cs_for_convection = 1d2 + max_v_for_convection = 1d4 + + + use_Ledoux_criterion = .true. + alpha_semiconvection = 1d-3 + thermohaline_coeff = 1d3 + + ! we only include a bit of exponential overshooting to smooth things out + + mass_change = 1d-9!1d-9 + accrete_same_as_surface = .false. + accretion_h1 = 0.7000 ! Estimate Nomoto 2007 + accretion_h2 = 0 + accretion_he3 = 0.292910D-04 + accretion_he4 = 0.279971 ! Estimated Nomoto 2007 + accretion_zfracs = 4 ! Lodders 03 + + min_timestep_limit = 1d-12 + + xa_function_species(1) = 'h1' ! name of nuclide as defined in chem_def + xa_function_weight(1) = 20 + xa_function_param(1) = 1d-6 + xa_function_species(2) = 'he4' ! name of nuclide as defined in chem_def + xa_function_weight(2) = 20 + xa_function_param(2) = 1d-2 + + delta_lgL_H_limit = 0.1 ! limit for magnitude of change in lgL_H + lgL_H_burn_min = -0.5 ! ignore changes in lgL_H if value is less than this + + delta_lgL_He_limit = 0.25 ! limit for magnitude of change in lgL_He + lgL_He_burn_min = 2.5 ! ignore changes in lgL_He if value is less than this + + delta_lgRho_limit = 1 ! limit for magnitude of max change in log10 density at any point + delta_lgRho_hard_limit = -1 + + delta_lgRho_cntr_limit = 1d-2 + + delta_lgT_limit = 0.5 + delta_lgL_limit = 0.1d0 !0.05 + delta_lgTeff_limit = 0.10 + + delta_lgL_nuc_limit = 0.02 + delta_lgL_nuc_hard_limit = 0.20 + lgL_nuc_burn_min = -3d0 + + delta_lgR_limit = 1d-1 + delta_lgR_limit_min_lgR = 1d-1 + + atm_option = 'T_tau' + atm_T_tau_relation = 'Eddington' + atm_T_tau_opacity = 'fixed' + Pextra_factor = 1.1d0 ! 4 * tau_factor + use_momentum_outer_BC = .true. + + !varcontrol_target = 3d-4 + + max_q_for_conv_timescale = 0.999999999d0 + + mesh_delta_coeff = 1.0 + max_allowed_nz = 20000 + + num_trace_history_values = 2 + trace_history_value_name(1) = 'rel_E_err' + trace_history_value_name(2) = 'log_rel_run_E_err' + + photo_interval = 100 + profile_interval = 50 + history_interval = 1 + photo_digits = 8 + terminal_interval = 1 + write_header_frequency = 10 + +/ ! end of controls namelist + + +&pgstar + + ! Grid8_win_flag = .true. + ! Grid8_win_width = 7 + ! Summary_Burn_xaxis_name = 'logxq' + ! Summary_Burn_xaxis_reversed = .true. + ! Summary_Burn_xmin = -14 ! -101d0 ! only used if /= -101d0 + ! Summary_Burn_xmax = -3 ! -101d0 ! only used if /= -101d0 + ! Abundance_xaxis_name = 'logxq' + ! Abundance_xaxis_reversed = .true. + ! Abundance_xmin = -14 ! -101d0 ! only used if /= -101d0 + ! Abundance_xmax = -3 ! -101d0 ! only used if /= -101d0 + + ! Text_Summary1_name(5,2) = 'time_step_sec' + ! Text_Summary1_name(6,2) = 'max_tau_conv' + !Text_Summary1_name(7,2) = 'cz_bot_radius' + !Text_Summary1_name(8,2) = 'cz_top_radius' + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/wd_nova_burst/inlist_wd_nova_burst_header b/star/dev_cases_massive_stars/wd_nova_burst/inlist_wd_nova_burst_header new file mode 100644 index 000000000..7dd6091da --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/inlist_wd_nova_burst_header @@ -0,0 +1,42 @@ + +&star_job + + read_extra_star_job_inlist(1) = .true. + extra_star_job_inlist_name(1) = 'inlist_wd_nova_burst' + +/ ! end of star_job namelist + + +&eos + + read_extra_eos_inlist(1) = .true. + extra_eos_inlist_name(1) = 'inlist_wd_nova_burst' + +/ ! end of eos namelist + + +&kap + + read_extra_kap_inlist(1) = .true. + extra_kap_inlist_name(1) = 'inlist_wd_nova_burst' + +/ ! end of kap namelist + + +&controls + + read_extra_controls_inlist(2) = .true. + extra_controls_inlist_name(2) = 'inlist_wd_nova_burst' + +/ ! end of controls namelist + + +&pgstar + + read_extra_pgstar_inlist(1) = .true. + extra_pgstar_inlist_name(1) = 'inlist_pgstar' + + read_extra_pgstar_inlist(2) = .true. + extra_pgstar_inlist_name(2) = 'inlist_wd_nova_burst' + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/wd_nova_burst/plot.py b/star/dev_cases_massive_stars/wd_nova_burst/plot.py new file mode 100644 index 000000000..a0bfd4b5c --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/plot.py @@ -0,0 +1,249 @@ +import matplotlib.pyplot as plt +import numpy as np +import os +import mesa_reader as mr + +# if the directory plt_out/ does not exits, make it +if not os.path.exists("plt_out"): + os.makedirs("plt_out") + +# "MESA" styles for plotting +# note that this requires having a LaTeX installation locally. +# If you don't have that, you can comment out the "text.usetex" line. +plt.rcParams["figure.figsize"] = (3.38, 2.535) +plt.rcParams["lines.markersize"] = 4 +plt.rcParams["lines.linewidth"] = 1.5 +plt.rcParams["text.usetex"] = True +plt.rcParams["font.size"] = 10 +plt.rcParams["font.family"] = "serif" +plt.rcParams["font.serif"] = "Computer Modern Roman" +plt.rcParams["axes.titlesize"] = "medium" +plt.rcParams["axes.labelsize"] = "medium" +plt.rcParams["legend.fontsize"] = 8 +plt.rcParams["legend.frameon"] = False +plt.rcParams["figure.dpi"] = 300 + +plt.rcParams["xtick.direction"] = "in" +plt.rcParams["ytick.direction"] = "in" +plt.rcParams["xtick.top"] = True +plt.rcParams["ytick.right"] = True +plt.rcParams["xtick.minor.visible"] = True +plt.rcParams["ytick.minor.visible"] = True + +plt.rcParams["savefig.bbox"] = "tight" +plt.rcParams["savefig.pad_inches"] = 0.1 +plt.rcParams["savefig.dpi"] = 300 +plt.rcParams["savefig.format"] = "svg" + +plt.rcParams["axes.formatter.use_mathtext"] = True + +# read in the history data from MESA +logs = mr.MesaLogDir("LOGS") +h = logs.history +p = logs.profile_data() + +# Create a figure +fig = plt.figure(figsize=(10, 6)) + +# Create a GridSpec with 6 rows and 3 columns +gs_outer = fig.add_gridspec(1, 2, width_ratios=[1, 2]) +gs_left = gs_outer[0].subgridspec(2, 1, hspace=0.3) +gs_right = gs_outer[1].subgridspec(3, 2, hspace=0, wspace=0.75) + +# First column: Two plots of roughly equal height +ax1 = fig.add_subplot(gs_left[0]) +ax2 = fig.add_subplot(gs_left[1]) + +# Second column: Three stacked axes sharing the same x-axis +ax3 = fig.add_subplot(gs_right[0, 0]) +ax4 = fig.add_subplot(gs_right[1, 0]) +ax5 = fig.add_subplot(gs_right[2, 0]) + +# Third column: Three stacked axes sharing a different x-axis +ax6 = fig.add_subplot(gs_right[0, 1]) +ax7 = fig.add_subplot(gs_right[1, 1]) +ax8 = fig.add_subplot(gs_right[2, 1]) + +# HR diagram +ax1.loglog(h.Teff, h.L) +ax1.set_xlabel(r"Effective Temperature [K]") +ax1.set_ylabel(r"Luminosity [$L_{\odot}$]") +ax1.invert_xaxis() +# add marker to last point +ax1.plot(h.Teff[-1], h.L[-1], "o", color="C3") + +# T-Rho Profile +# load data from MESA_DIR and save to arrays in T-Rho space +plot_info_dir = os.path.join(os.environ["MESA_DIR"], "data/star_data/plot_info") + +# degeneracy data +psi4_file = os.path.join(plot_info_dir, "psi4.data") +psi4_data = np.genfromtxt(psi4_file) +psi4_xs = 10 ** np.array(psi4_data.T[0]) +psi4_ys = 10 ** np.array(psi4_data.T[1]) + +# hydrogen burn line +hydrogen_burn_file = os.path.join(plot_info_dir, "hydrogen_burn.data") +hydrogen_burn_data = np.genfromtxt(hydrogen_burn_file) +hydrogen_burn_xs = 10 ** np.array(hydrogen_burn_data.T[0]) +hydrogen_burn_ys = 10 ** np.array(hydrogen_burn_data.T[1]) + +# helium burn line +helium_burn_file = os.path.join(plot_info_dir, "helium_burn.data") +helium_burn_data = np.genfromtxt(helium_burn_file) +helium_burn_xs = 10 ** np.array(helium_burn_data.T[0]) +helium_burn_ys = 10 ** np.array(helium_burn_data.T[1]) + +# plot raw T-Rho data; sets limits for us +ax2.loglog(p.Rho, p.T) + +# plot psi4 and hydrogen burn lines +# preserve limits... shouldn't have to do it like this, but +# autoscale commands always seem to fail +x_left, x_right = ax2.get_xlim() +y_bottom, y_top = ax2.get_ylim() +ax2.plot(psi4_xs, psi4_ys, color="lightgrey", ls=":", zorder=-5) +ax2.plot(hydrogen_burn_xs, hydrogen_burn_ys, ls="--", color="lightgrey", zorder=-5) +ax2.plot(helium_burn_xs, helium_burn_ys, ls="--", color="lightgrey", zorder=-5) +ax2.set_xlim(x_left, x_right) +ax2.set_ylim(y_bottom, y_top) +ax2.set_xlabel(r"Density [g/cm$^3$]") +ax2.set_ylabel(r"Temperature [K]") + +# plot strong burning zones +high_burning = np.where(p.eps_nuc > 1e7, True, False) +mid_burning = np.where((p.eps_nuc > 1e3) & (p.eps_nuc < 1e7), True, False) +low_burning = np.where((p.eps_nuc > 1) & (p.eps_nuc < 1e3), True, False) +# temporarily set cap style to round +save_capstyle = plt.rcParams["lines.solid_capstyle"] +plt.rcParams["lines.solid_capstyle"] = "round" +ax2.plot( + p.Rho[high_burning], + p.T[high_burning], + marker="o", + ls="", + ms=6, + color="C3", + zorder=-1, +) +ax2.plot( + [], + [], + lw=6, + color="C3", + label=r"$\epsilon_{\mathrm{nuc}} > 10^7\,\mathrm{erg/g/s}$", +) +ax2.plot( + p.Rho[mid_burning], + p.T[mid_burning], + marker="o", + ls="", + ms=4.5, + color="C1", + zorder=-2, +) +ax2.plot( + [], + [], + color="C1", + lw=4.5, + label=r"$\epsilon_{\mathrm{nuc}} > 10^3\,\mathrm{erg/g/s}$", +) +ax2.plot( + p.Rho[low_burning], + p.T[low_burning], + marker="o", + ls="", + ms=3, + color="goldenrod", + zorder=-3, +) +ax2.plot( + [], + [], + color="goldenrod", + lw=3, + label=r"$\epsilon_{\mathrm{nuc}} > 1\,\mathrm{erg/g/s}$", +) +ax2.legend(loc="lower right") +# restore capstyle +plt.rcParams["lines.solid_capstyle"] = save_capstyle + +# time series for last 5 years +window = 5 + +# top panel: photospheric and H-burning luminosities +mask = h.star_age > (max(h.star_age) - window) +ax3.set_title("Last 5 Years") +ax3.semilogy(h.star_age[mask], h.L[mask], label=r"$L$") +ax3.semilogy(h.star_age[mask], h.LH[mask], ls="--", label=r"$L_{\mathrm{H}}$") +ax3.set_ylabel(r"Luminosity [$L_{\odot}$]") +ax3.legend(loc="upper left") +ax3.set_xticklabels([]) + +# temperature and radius +ax4.semilogy(h.star_age[mask], h.Teff[mask], label=r"$T_{\mathrm{eff}}$") +ax4.semilogy([], [], label=r"$R$", ls="--", color="C1") +ax4.legend(loc="upper left") +ax4b = ax4.twinx() +ax4b.semilogy(h.star_age[mask], h.R[mask], ls="--", color="C1") +ax4.set_ylabel(r"Eff. Temp. [K]", color="C0") +ax4b.set_ylabel(r"Radius [$R_{\odot}$]", color="C1") +ax4.set_xticklabels([]) + +# mass loss and envelope mass +ax5.semilogy( + h.star_age[mask], + h.star_mass[mask] - h.he_core_mass[mask], + label=r"$\Delta M_{\mathrm{H}}$", +) +ax5.semilogy([], [], ls="--", label=r"$|\dot{M}|$") +ax5.legend(loc="center left") +ax5.set_ylabel(r"Envelope Mass [$M_{\odot}$]", color="C0") +ax5b = ax5.twinx() +ax5b.semilogy(h.star_age[mask], h.abs_mdot[mask], ls="--", color="C1") +ax5b.set_ylabel(r"$\left\vert\dot{M}\right\vert$ [$M_{\odot}$/yr]", color="C1") + +ax5.set_xlabel(r"Star Age [yr]") + +# profile at the end of the simulation +# first up, common isotope mass fractions +xm = p.star_mass - p.mass +for iso in ["h1", "he4", "c12", "n14", "o16"]: + element = "".join([i for i in iso if not i.isdigit()]).capitalize() + mass_number = "".join([i for i in iso if i.isdigit()]) + tex_iso = r"${}^{" + mass_number + r"}$" + element + ax6.loglog(xm, p.data(iso), label=tex_iso) + +ax6.set_title("Final Profile") +ax6.set_ylim(4e-5, 1.5) +ax6.legend(loc="lower left") +ax6.set_ylabel(r"Mass Fraction") +ax6.set_xticklabels([]) + +# nuclear energy generation rates +ax7.loglog(xm, p.eps_nuc, label=r"$\epsilon_{\mathrm{nuc}}$") +ax7.loglog(xm, p.pp, ls="--", label=r"$\epsilon_{\mathrm{pp}}$") +ax7.loglog(xm, p.cno, ls=":", label=r"$\epsilon_{\mathrm{CNO}}$") +ax7.legend(loc="upper right") +ax7.set_ylabel(r"Specific Power [erg/g/s]") +ax7.set_xticklabels([]) +ax7.set_ylim(1e-6, 1e10) + +# basic thermodynamic quantities +ax8.loglog(xm, p.Rho, label="$\\rho$") +ax8.loglog([], [], ls="--", label="$T$") +ax8.set_ylim(2e-3, 2e6) +ax8.set_ylabel(r"Density [g/cm$^3$]", color="C0") +ax8b = ax8.twinx() +ax8b.loglog(xm, p.T, ls="--", color="C1") +ax8b.set_ylim(2e6, 1.25e8) +ax8b.set_ylabel(r"Temperature [K]", color="C1") +ax8.legend(loc="upper right") + +for ax in [ax6, ax7, ax8]: + ax.set_xlim(8e-4, 1e-10) +ax8.set_xlabel(r"Exterior Mass Coordinate [M$_{\odot}$]") + + +fig.savefig("plt_out/wd_nova_burst_grid.svg") diff --git a/star/dev_cases_massive_stars/wd_nova_burst/profile_columns.list b/star/dev_cases_massive_stars/wd_nova_burst/profile_columns.list new file mode 100644 index 000000000..dbd1dda57 --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/profile_columns.list @@ -0,0 +1,963 @@ +! profile_columns.list -- determines the contents of star model profiles +! you can use a non-standard version by setting profile_columns_file in your inlist + +! units are cgs unless otherwise noted. + +! reorder the following names as desired to reorder columns. +! comment out the name to omit a column (fewer columns => less IO => faster running). +! remove '!' to restore a column. + +! if you have a situation where you want a non-standard set of columns, +! make a copy of this file, edit as desired, and give the new filename in your inlist +! as profile_columns_file. if you are just adding columns, you can 'include' this file, +! and just list the additions in your file. note: to include the standard default +! version, use include '' -- the 0 length string means include the default file. + +! if you need to have something added to the list of options, let me know.... + +! the first few lines of the profile contain general info about the model. +! for completeness, those items are described at the end of this file. + + +! note: you can include another list by doing +! include 'filename' +! include '' means include the default standard list file + + +! the following lines of the profile contain info for 1 zone per row, surface to center. + +! minimal set of enabled columns: + + zone ! numbers start with 1 at the surface + mass ! m/Msun. mass coordinate of outer boundary of cell. + logR ! log10(radius/Rsun) at outer boundary of zone + logT ! log10(temperature) at center of zone + logRho ! log10(density) at center of zone + logP ! log10(pressure) at center of zone + x_mass_fraction_H + y_mass_fraction_He + z_mass_fraction_metals + + Frad_div_cUrad ! Frad/(C*Urad), must be < 1 to not violate c. + flux_limit_lambda + flux_limit_R ! everything below this line is deactivated + + +!# Structure + !logM ! log10(m/Msun) + !log_mass + !dm ! cell mass (grams) + !dm_bar ! boundary mass (grams) average of adjacent dm's + logdq ! log10(dq) + !log_dq + dq_ratio ! dq(k-1)/dq(k) + q ! fraction of star mass interior to outer boundary of this zone + !log_q ! log10(q) + !xq + + !grav ! gravitational acceleration (cm sec^2) + !log_g ! log10 gravitational acceleration (cm sec^2) + !g_div_r ! grav/radius (sec^2) + !r_div_g ! radius/grav (sec^-2) + !cgrav_factor ! = cgrav(k)/standard_cgrav + !vel_km_per_s ! velocity at outer boundary of zone (km/s) -- 0 if no velocity variable + + radius ! radius at outer boundary of zone (in Rsun units) + !radius_cm ! radius at outer boundary of zone (in centimeters) + !radius_km ! radius at outer boundary of zone (in kilometers) + !logR_cm ! log10 radius at outer boundary of zone (in centimeters) + !rmid ! radius at center by mass of zone (in Rsun units) + !r_div_R ! fraction of total radius + + velocity ! velocity at outer boundary of zone (cm/s) -- 0 if no velocity variable + v_div_r ! velocity divided by radius + !v_times_t_div_r + !rho_times_r3 ! at face + !log_rho_times_r3 ! at face + !scale_height ! in Rsun units + pressure_scale_height ! in Rsun units + + !m_div_r ! gm/cm + !dmbar_m_div_r + !log_dmbar_m_div_r + !mass_grams ! mass coordinate of outer boundary of cell in grams + mmid ! mass at midpoint of cell (average of mass coords of the cell boundaries) Msun units. + + !m_grav ! total enclosed gravitational mass. Msun units. + !m_grav_div_m_baryonic ! mass_gravitational/mass at cell boundary + !mass_correction_factor ! dm_gravitational/dm (dm is baryonic mass of cell) + + !xm ! mass exterior to point (Msun units) + !dq ! mass of zone as a fraction of total star mass + logxq ! log10(1-q) + !logxm ! log10(xm) + + !xr ! radial distance from point to surface (Rsun) + !xr_cm ! radial distance from point to surface (cm) + !xr_div_R ! radial distance from point to surface in units of star radius + !log_xr ! log10 radial distance from point to surface (Rsun) + !log_xr_cm ! log10 radial distance from point to surface (cm) + !log_xr_div_R ! log10 radial distance from point to surface in units of star radius + + !dr ! r(outer edge) - r(inner edge); radial extent of cell in cm. + !log_dr ! log10 cell width (cm) + !dv ! v(inner edge) - v(outer edge); rate at which delta_r is shrinking (cm/sec). + + !dt_dv_div_dr ! dt*dv/dr; need to have this << 1 for every cell + !dr_div_R ! cell width divided by star R + !log_dr_div_R ! log10 cell width divided by star R + !dr_div_rmid ! cell width divided by rmid + !log_dr_div_rmid ! log(dr_div_rmid) + + !dr_div_cs ! cell sound crossing time (sec) + !log_dr_div_cs ! log10 cell sound crossing time (sec) + !dr_div_cs_yr ! cell sound crossing time (years) + !log_dr_div_cs_yr ! log10 cell sound crossing time (years) + + !acoustic_radius ! sound time from center to outer cell boundary (sec) + !log_acoustic_radius ! log10(acoustic_radius) (sec) + !acoustic_depth ! sound time from surface to outer cell boundary (sec) + !log_acoustic_depth ! log10(acoustic_depth) (sec) + !acoustic_r_div_R_phot + + !cell_collapse_time ! only set if doing explicit hydro + ! time (seconds) for cell inner edge to catch cell outer edge at current velocities + ! 0 if distance between inner and outer is increasing + !log_cell_collapse_time ! log of cell_collapse_time + + !compression_gradient + + + +!# Thermodynamics + temperature ! temperature at center of zone + !logT_face ! log10(temperature) at outer boundary of zone + !logT_bb ! log10(black body temperature) at outer boundary of zone + !logT_face_div_logT_bb + + !energy ! internal energy (ergs/g) + !logE ! log10(specific internal energy) at center of zone + !rho ! density + !density ! rho + + entropy ! specific entropy divided by (avo*kerg) + !logS ! log10(specific entropy) + !logS_per_baryon ! log10(specific entropy per baryon / kerg) + + pressure ! total pressure at center of zone (pgas + prad) + !prad ! radiation pressure at center of zone + !pgas ! gas pressure at center of zone (electrons and ions) + logPgas ! log10(pgas) + pgas_div_ptotal ! pgas/pressure + + eta ! electron degeneracy parameter (eta >> 1 for significant degeneracy) + mu ! mean molecular weight per gas particle (ions + free electrons) + + grada ! dlnT_dlnP at constant S + !dE_dRho ! at constant T + !cv ! specific heat at constant volume + !cp ! specific heat at constant total pressure + + !log_CpT + !gamma1 ! dlnP_dlnRho at constant S + !gamma3 ! gamma3 - 1 = dlnT_dlnRho at constant S + !gam ! plasma interaction parameter (> 160 or so means starting crystallization) + free_e ! free_e is mean number of free electrons per nucleon + !logfree_e ! log10(free_e), free_e is mean number of free electrons per nucleon + !chiRho ! dlnP_dlnRho at constant T + !chiT ! dlnP_dlnT at constant Rho + + csound ! sound speed + !log_csound + !csound_face ! sound speed (was previously called csound_at_face) + !cs_at_cell_bdy ! sound speed at cell boundary (csound is at cell center) + !v_div_cs ! velocity divided by sound speed + v_div_csound ! velocity divided by sound speed + !div_v + + !thermal_time_to_surface ! in seconds + !log_thermal_time_to_surface + !t_rad + !log_t_rad + !log_t_sound + !log_t_thermal + + !eos_phase + !eos_frac_OPAL_SCVH + !eos_frac_HELM + !eos_frac_Skye + !eos_frac_PC + !eos_frac_FreeEOS + !eos_frac_CMS + !eos_frac_ideal + + !pgas_div_p + !prad_div_pgas + !prad_div_pgas_div_L_div_Ledd + !pressure_scale_height_cm + + !eps_grav_composition_term + eps_grav_plus_eps_mdot + + !chiRho_for_partials + !chiT_for_partials + !rel_diff_chiRho_for_partials + !rel_diff_chiT_for_partials + + !latent_ddlnRho + !latent_ddlnT + + !log_P_face + !log_Ptrb + !log_cp_T_div_t_sound + + !QQ + + +!# Mass accretion + eps_grav ! -T*ds/dt (negative for expansion) + !log_abs_eps_grav_dm_div_L + !log_abs_v ! log10(abs(velocity)) (cm/s) + !log_mdot_cs + !log_mdot_v + eps_mdot + !env_eps_grav + !xm_div_delta_m + !log_xm_div_delta_m + + +!# Nuclear energy generation + !signed_log_eps_grav ! sign(eps_grav)*log10(max(1,abs(eps_grav))) + !signed_log_eps_nuc + !net_nuclear_energy ! erg/gm/s from nuclear reactions minus all neutrino losses + ! The value plotted is net_nuclear_energy = sign(val)*log10(max(1,abs(val))) + ! where val = net nuclear energy minus all neutrino losses. + !net_energy ! net_energy + eps_grav. + ! The value plotted is net_energy = sign(val)*log10(max(1,abs(val))) + ! where val = net nuclear energy plus eps_grav minus all neutrino losses. + !eps_nuc_plus_nuc_neu + !eps_nuc_minus_non_nuc_neu + !eps_nuc_start + + eps_nuc ! ergs/g/sec from nuclear reactions (including losses to reaction neutrinos) + !log_abs_eps_nuc + !d_lnepsnuc_dlnd + !d_epsnuc_dlnd + !deps_dlnd_face + ! (was previously called deps_dlnd_at_face) + !d_lnepsnuc_dlnT + !d_epsnuc_dlnT + !deps_dlnT_face + ! (was previously called deps_dlnT_at_face) + !eps_nuc_neu_total ! erg/gm/sec as neutrinos from nuclear reactions + + non_nuc_neu ! non-nuclear-reaction neutrino losses + !nonnucneu_plas ! plasmon neutrinos (for collective reactions like gamma_plasmon => nu_e + nubar_e) + !nonnucneu_brem ! bremsstrahlung (for reactions like e- + (z,a) => e- + (z,a) + nu + nubar) + !nonnucneu_phot ! photon neutrinos (for reactions like e- + gamma => e- + nu_e + nubar_e) + !nonnucneu_pair ! pair production (for reactions like e+ + e- => nu_e + nubar_e) + !nonnucneu_reco ! recombination neutrinos (for reactions like e- (continuum) => e- (bound) + nu_e + nubar_e) + + ! ergs/g/sec for reaction categories + add_reaction_categories ! this adds all the reaction categories + ! NOTE: you can list specific categories by giving their names (from chem_def) + pp + cno + tri_alpha + !c_alpha + !n_alpha + !o_alpha + !ne_alpha + !na_alpha + !mg_alpha + !si_alpha + !s_alpha + !ar_alpha + !ca_alpha + !ti_alpha + !fe_co_ni + !c12_c12 + !c12_o16 + !o16_o16 + !photo + !pnhe4 + !other + + ! adds columns for all of the reactions that are in the current net + ! Note that if using op_split_burn=.true. then zones which have been split will report 0 for their rates + !add_raw_rates ! raw reaction rates, reactions/second + !add_screened_rates ! screened reaction rates reactions/second + !add_eps_nuc_rates ! Nuclear energy (minus neutrino losses) released erg/s + !add_eps_neu_rates ! Neutrino losses erg/s + + ! individual reactions (as many as desired) + ! use list_net_reactions = .true. in star_job to list all reactions in the current net + ! reactions/second + !raw_rate r_h1_h1_ec_h2 + !raw_rate r_h1_h1_wk_h2 + + !burn_num_iters ! Number of split_burn iterations taken + !burn_avg_epsnuc + !log_burn_avg_epsnuc + +!# Composition + !x_mass_fraction_H + !y_mass_fraction_He + !z_mass_fraction_metals + abar ! average atomic weight (g/mole) + zbar ! average charge + !z2bar ! average charge^2 + ye ! average charge per baryon = proton fraction + + !x ! hydrogen mass fraction + !log_x + !y ! helium mass fraction + !log_y + !z ! metallicity + !log_z ! metallicity + + add_abundances ! this adds all of the isos that are in the current net + ! NOTE: you can list specific isotopes by giving their names (from chem_def) + !h1 + !he3 + !he4 + !c12 + !n14 + !o16 + + !add_log_abundances ! this adds log10 of all of the isos that are in the current net + ! NOTE: you can list specific isotopes by giving their names (from chem_def) + !log h1 + !log he3 + !log he4 + !log c12 + !log n14 + !log o16 + + ! log concentration of species + ! concentration = number density / number density of electrons + ! Ci = (Xi/Ai) / sum(Zi*Xi/Ai) [see Thoul et al, ApJ 421:828-842, 1994] + !log_concentration h1 + !log_concentration he4 + + + ! typical charge for given species + ! (used by diffusion) + !typical_charge he4 + !typical_charge c12 + !typical_charge fe52 + + ! ionization state for given species + ! (same as typical charge, except that it's unsmoothed) + !ionization he4 + !ionization c12 + !ionization fe52 + + !cno_div_z ! abundance of c12, n14, and o16 as a fraction of total z + + + + +!# Opacity + !opacity ! opacity measured at center of zone + log_opacity ! log10(opacity) + !dkap_dlnrho_face ! partial derivative of opacity wrt. ln rho (at T=const) at outer edge of cell + ! (was previously called dkap_dlnrho_at_face) + !dkap_dlnT_face ! partial derivative of opacity wrt. ln T (at rho=const) at outer edge of cell + ! (was previously called dkap_dlnT_at_face) + !kap_frac_lowT ! fraction of opacity from lowT tables + !kap_frac_highT ! fraction of opacity from highT tables + !kap_frac_Type2 ! fraction of opacity from Type2 tables + !kap_frac_Compton ! fraction of opacity from Compton_Opacity + !kap_frac_op_mono ! fraction of opacity from OP mono + + !log_kap + !log_kap_times_factor + + !log_c_div_tau + !xtau + !xlogtau + !logtau_sub_xlogtau + +!# Luminosity + luminosity ! luminosity at outer boundary of zone (in Lsun units) + logL ! log10(max(1d-2,L/Lsun)) + !log_Lrad + !log_Ledd ! log10(Leddington/Lsun) -- local Ledd, 4 pi clight G m / kap + !log_L_div_Ledd ! log10(max(1d-12,L/Leddington)) + !log_Lrad_div_Ledd + !log_Lrad_div_L + !signed_log_power ! sign(L)*log10(max(1,abs(L))) + + !lum_adv + !lum_conv + !lum_conv_MLT + !lum_div_Ledd + !lum_erg_s + !lum_plus_lum_adv + !lum_rad + + !log_L_div_CpTMdot + !log_abs_lum_erg_s + + !L + !Lc + !Lc_div_L + !Lr + !Lr_div_L + !Lt + !Lt_div_L + +!# Energetics + !total_energy ! specific total energy of cell (ergs/g). internal+potential+kinetic+rotation. + !cell_specific_IE + !cell_specific_KE + !cell_IE_div_IE_plus_KE + !cell_KE_div_IE_plus_KE + + !cell_ie_div_star_ie + !cell_internal_energy_fraction + !cell_internal_energy_fraction_start + !cell_specific_PE + + !log_cell_ie_div_star_ie + !log_cell_specific_IE + + ergs_eps_grav_plus_eps_mdot + ergs_error + !ergs_error_integral + ergs_mdot + !ergs_rel_error_integral + !dm_eps_grav + + !dE + + !etrb + !log_etrb + !extra_grav + !log_rel_E_err + + !total_energy_sign + +!# Convection + mlt_mixing_length ! mixing length for mlt (cm) + !mlt_mixing_type ! value returned by mlt + !mlt_Pturb + !alpha_mlt + + !conv_vel ! convection velocity (cm/sec) + log_conv_vel ! log10 convection velocity (cm/sec) + + !conv_L_div_L + !log_conv_L_div_L + !lum_conv_div_lum_rad + !lum_rad_div_L_Edd + !lum_conv_div_lum_Edd + !lum_conv_div_L + !lum_rad_div_L + !lum_rad_div_L_Edd_sub_fourPrad_div_PchiT ! density increases outward if this is > 0 + ! see Joss, Salpeter, and Ostriker, "Critical Luminosity", ApJ 181:429-438, 1973. + + gradT ! mlt value for required temperature gradient dlnT/dlnP + + gradr ! dlnT/dlnP required for purely radiative transport + !grad_temperature ! smoothed dlnT/dlnP at cell boundary + !grad_density ! smoothed dlnRho/dlnP at cell boundary + + !gradL ! gradient for Ledoux criterion for convection + !sch_stable ! 1 if grada > gradr, 0 otherwise + !ledoux_stable ! 1 if gradL > gradr, 0 otherwise + + !grada_sub_gradT + !gradT_sub_grada ! gradT-grada at cell boundary + !gradT_div_grada ! gradT/grada at cell boundary + + !gradr_sub_gradT + !gradT_sub_gradr ! gradT-gradr at cell boundary + !gradT_div_gradr ! gradT/gradr at cell boundary + + !log_gradT_div_gradr ! log10 gradT/gradr at cell boundary + !log_mlt_Gamma ! convective efficiency + conv_vel_div_csound ! convection velocity divided by sound speed + !conv_vel_div_L_vel ! L_vel is velocity needed to carry L by convection; L = 4*pi*r^2*rho*vel**3 + log_mlt_D_mix ! log10 diffusion coefficient for mixing from mlt (cm^2/sec) + + !gradr_div_grada ! gradr/grada_face; > 1 => Schwarzschild unstable for convection + gradr_sub_grada ! gradr - grada_face; > 0 => Schwarzschild unstable for convection + + !gradL_sub_gradr + !gradP_div_rho + !gradT_excess_effect + !gradT_rel_err + !gradT_sub_a + !grada_face + !grada_sub_gradr + !diff_grads + !log_diff_grads + + !mlt_D + !mlt_Gamma + !mlt_Y_face + !mlt_Zeta + !mlt_gradT + !mlt_log_abs_Y + !mlt_vc + !log_mlt_vc + !dvc_dt_TDC_div_g + + !superad_reduction_factor + !conv_vel_div_mlt_vc + + !log_Lconv + !log_Lconv_div_L + +!# Mixing + !mixing_type ! mixing types are defined in mesa/const/public/const_def + log_D_mix ! log10 diffusion coefficient for mixing in units of cm^2/second (Eulerian) + !log_D_mix_non_rotation + !log_D_mix_rotation + + !log_D_conv ! D_mix for regions where mix_type = convective_mixing + !log_D_leftover ! D_mix for regions where mix_type = leftover_convective_mixing + !log_D_semi ! D_mix for regions where mix_type = semiconvective_mixing + !log_D_ovr ! D_mix for regions where mix_type = overshoot_mixing + !log_D_thrm ! D_mix for regions where mix_type = thermohaline_mixing + !log_D_minimum ! D_mix for regions where mix_type = minimum_mixing + !log_D_rayleigh_taylor ! D_mix for regions where mix_type = rayleigh_taylor_mixing + !log_D_anon ! D_mix for regions where mix_type = anonymous_mixing + !log_D_omega + + !log_sig_mix ! sig(k) is mixing flow across face k in (gm sec^1) + ! sig(k) = D_mix*(4*pi*r(k)**2*rho_face)**2/dmavg + + !dominant_isoA_for_thermohaline + !dominant_isoZ_for_thermohaline + !gradL_composition_term + + mix_type + + + +!# Optical Depth + tau ! optical depth + !log_column_depth ! log10 column depth, exterior mass / area (g cm^-2) + !log_radial_depth ! log10 radial distance to surface (cm) + logtau ! log10(optical depth) at cell face + !tau_eff ! tau that gives the local P == P_atm if this location at surface + ! tau_eff = kap*(P/g - Pextra_factor*(L/M)/(6*pi*clight*cgrav)) + !tau_eff_div_tau + + + +!# Rotation + !omega ! angular velocity = j_rot/i_rot + !log_omega + !log_j_rot + !log_J_div_M53 ! J is j*1e-15 integrated from center; M53 is m^(5/3) + !log_J_inside ! J_inside is j_rot integrated from center + !shear ! -dlnomega/dlnR + !log_abs_shear ! log10(abs(dlnomega/dlnR)) + !richardson_number + !i_rot ! specific moment of inertia at cell boundary + !j_rot ! specific angular momentum at cell boundary + !v_rot ! rotation velocity at cell boundary (km/sec) + !w_div_w_crit_roche !ratio of rotational velocity to keplerian at the equator + !without the contribution from the Eddington factor + !fp_rot ! rotation factor for pressure + !ft_rot ! rotation factor for temperature + !ft_rot_div_fp_rot ! gradr factor + + !log_am_nu_non_rot ! log10(am_nu_non_rot) + !log_am_nu_rot ! log10(am_nu_rot) + !log_am_nu ! log10(am_nu_non_rot + am_nu_rot) + + !r_polar ! (Rsun) + !log_r_polar ! log10 (Rsun) + !r_equatorial ! (Rsun) + !log_r_equatorial ! log10 (Rsun) + !r_e_div_r_p ! equatorial/r_polar + !omega_crit ! breakup angular velocity = sqrt(G M / equatorial^3) + !omega_div_omega_crit + + !am_log_nu_omega ! for diffusion of omega + !am_log_nu_j ! for diffusion of angular momentum + + !am_log_nu_rot ! diffusion of angular momentum driven by rotation + !am_log_nu_non_rot ! diffusion driven by other sources, e.g. convection + + !am_log_sig_omega ! for diffusion of omega + !am_log_sig_j ! for diffusion of angular momentum + !am_log_sig ! == am_log_sig_omega + + !am_log_D_visc ! diffusion coeff for kinematic viscosity + !am_log_D_DSI ! diffusion coeff for dynamical shear instability + !am_log_D_SH ! diffusion coeff for Solberg-Hoiland instability + !am_log_D_SSI ! diffusion coeff for secular shear instability + !am_log_D_ES ! diffusion coeff for Eddington-Sweet circulation + !am_log_D_GSF ! diffusion coeff for Goldreich-Schubert-Fricke instability + !am_log_D_ST ! Spruit dynamo mixing diffusivity + !am_log_nu_ST ! Spruit dynamo effective viscosity + + !dynamo_log_B_r ! (Gauss) + !dynamo_log_B_phi ! (Gauss) + + !am_domega_dlnR + !log_abs_dlnR_domega + + !w_div_w_crit_roche2 + + +!# Diffusion + ! electric field from element diffusion calculation + !e_field + !log_e_field + + ! gravitational field from element diffusion calculation + !g_field_element_diffusion + !log_g_field_element_diffusion + + !eE_div_mg_element_diffusion + !log_eE_div_mg_element_diffusion + + ! element diffusion velocity for species + !edv h1 + !edv he4 + !edv o16 + + ! Energy generated by Ne22 sedimentation. + !eps_WD_sedimentation + !log_eps_WD_sedimentation + + !eps_diffusion + !log_eps_diffusion + + !diffusion_D h1 ! self diffusion coeff + !diffusion_dX h1 ! change in h1 mass fraction from diffusion + !diffusion_dX he4 ! change in he4 mass fraction from diffusion + !diffusion_dX n20 ! change in n20 mass fraction from diffusion + + !v_rad h1 ! velocity from radiative levitation + !v_rad he4 ! velocity from radiative levitation + !v_rad ne20 ! velocity from radiative levitation + + !log_g_rad h1 ! log10 acceleration from radiative levitation + !log_g_rad he4 ! log10 acceleration from radiative levitation + !log_g_rad ne20 ! log10 acceleration from radiative levitation + +!# Phase Separation + !eps_phase_separation + +!# Oscillations + !brunt_N2 ! brunt-vaisala frequency squared + !brunt_N2_structure_term + !brunt_N2_composition_term + !log_brunt_N2_structure_term + !log_brunt_N2_composition_term + !brunt_A ! = N^2*r/g + !brunt_A_div_x2 ! x = r(k)/r(1) + !brunt_N2_dimensionless ! N2 in units of 3GM/R^3 + !brunt_N_dimensionless ! N in units of sqrt(3GM/R^3) + !brunt_frequency ! cycles per day + !brunt_N ! sqrt(abs(brunt_N2)) + !log_brunt_N ! log10(brunt_N) + !log_brunt_N2 ! log10(brunt_N2) + !log_brunt_N2_dimensionless ! log10(brunt_N2_dimensionless) + + !brunt_B ! smoothed numerical difference + !brunt_nonB ! = grada - gradT + !log_brunt_B ! smoothed numerical difference + !log_brunt_nonB ! = grada - gradT + + !sign_brunt_N2 ! sign of brunt_N2 (+1 for Ledoux stable; -1 for Ledoux unstable) + !brunt_nu ! brunt_frequency in microHz + !log_brunt_nu ! brunt_frequency in microHz + + !lamb_S ! lamb frequency for l=1: S = sqrt(2)*csound/r (rad/s) + !lamb_S2 ! squared lamb frequency for l=1: S2 = 2*(csound/r)^2 (rad^2/s^2) + + !lamb_Sl1 ! lamb frequency for l=1; = sqrt(2)*csound/r (microHz) + !lamb_Sl2 ! lamb frequency for l=2; = sqrt(6)*csound/r (microHz) + !lamb_Sl3 ! lamb frequency for l=3; = sqrt(12)*csound/r (microHz) + !lamb_Sl10 ! lamb frequency for l=10; = sqrt(110)*csound/r (microHz) + + !log_lamb_Sl1 ! log10(lamb_Sl1) + !log_lamb_Sl2 ! log10(lamb_Sl2) + !log_lamb_Sl3 ! log10(lamb_Sl3) + !log_lamb_Sl10 ! log10(lamb_Sl10) + + !brunt_N_div_r_integral ! integral from center of N*dr/r + !k_r_integral ! integral from center of k_r*dr + !brunt_N2_sub_omega2 + !sl2_sub_omega2 + + +!# RSP + + !rsp_Chi ! dlnP_dlnRho + !rsp_Et ! Specific turbulent energy + !rsp_logEt ! Log specific turbulent energy + !rsp_erad ! Specific internal (radiative) energy + !rsp_log_erad ! Log specific internal (radiative) energy + !rsp_Hp_face ! Pressure scale height at cell face + !rsp_Lc ! Convective luminosity + !rsp_Lc_div_L ! Convective luminosity div total luminosity + !rsp_Lr ! Radiative luminosity + !rsp_Lr_div_L ! Radiative luminosity div total luminosity + !rsp_Lt ! Turbulent luminosity + !rsp_Lt_div_L ! Turbulent luminosity div total luminosity + !rsp_Pt ! Turbulent pressure, p_t, see Table 1 in MESA5 + !rsp_Uq ! Viscous momentum transfer rate, U_q, see Table 1 in MESA5 + !rsp_Eq ! Viscous energy transfer rate, epsilon_q, see Table 1 in MESA5 + !rsp_Pvsc ! Artificial viscosity, p_av, see Table 1 in MESA5 + !rsp_gradT ! Temperature gradient + !rsp_Y_face ! Superadiabatic gradient at cell face, Y_sag, see Table 1 in MESA5 + !rsp_damp ! Turbulent dissipation, D, see Table 1 in MESA5 + !rsp_dampR ! Radiative cooling, D_r, see Table 1 in MESA5 + !rsp_sink ! Sum of turbulent dissipation and radiative cooling terms + !rsp_src ! Source function, S, see Table 1 in MESA5 + !rsp_src_snk ! Convective coupling, C, see Table 1 in MESA5 + !rsp_heat_exchange_timescale ! 1d0/(clight * opacity * density) + !rsp_log_heat_exchange_timescale + !rsp_log_dt_div_heat_exchange_timescale ! Ratio of time step to heat exchange timescale + !w + !log_w + + !COUPL + !DAMP + !DAMPR + !SOURCE + !Chi + !Eq + !Hp_face + !PII_face + !Ptrb + !Pvsc + !Uq + !Y_face + +!# RTI + + !RTI_du_diffusion_kick + !alpha_RTI + !boost_for_eta_RTI + !dedt_RTI + !dudt_RTI + !eta_RTI + !log_alpha_RTI + !log_boost_for_eta_RTI + !log_eta_RTI + !log_etamid_RTI + !log_lambda_RTI_div_Hrho + !log_sig_RTI + !log_sigmid_RTI + !log_source_RTI + !log_source_minus_alpha_RTI + !log_source_plus_alpha_RTI + !source_minus_alpha_RTI + !source_plus_alpha_RTI + !lambda_RTI + +!# Hydrodynamics + + + !v + !v_div_v_escape + !v_div_vesc + !v_kms + !log_v_escape + + !u + !u_face + + !P_face + + +!# Extras + !extra_heat + !extra_L ! extra_heat integrated from center (Lsun) + !log_extra_L ! log10 integrated from center (Lsun) + !log_irradiation_heat + + !extra_jdot ! set in other_torque routine + !extra_omegadot ! set in other_torque routine + + !extra_opacity_factor ! set in other_opacity_factor routine + + ! diffusion factor profile for species, set in other_diffusion_factor routine + !extra_diffusion_factor h1 + !extra_diffusion_factor he4 + !extra_diffusion_factor o16 + + + +!# Miscellaneous + + !dlog_h1_dlogP ! (log(h1(k)) - log(h1(k-1)))/(log(P(k)) - log(P(k-1))) + !dlog_he3_dlogP + !dlog_he4_dlogP + !dlog_c12_dlogP + !dlog_c13_dlogP + !dlog_n14_dlogP + !dlog_o16_dlogP + !dlog_ne20_dlogP + !dlog_mg24_dlogP + !dlog_si28_dlogP + + !dlog_pp_dlogP + !dlog_cno_dlogP + !dlog_3alf_dlogP + + !dlog_burn_c_dlogP + !dlog_burn_n_dlogP + !dlog_burn_o_dlogP + + !dlog_burn_ne_dlogP + !dlog_burn_na_dlogP + !dlog_burn_mg_dlogP + + !dlog_cc_dlogP + !dlog_co_dlogP + !dlog_oo_dlogP + + !dlog_burn_si_dlogP + !dlog_burn_s_dlogP + !dlog_burn_ar_dlogP + !dlog_burn_ca_dlogP + !dlog_burn_ti_dlogP + !dlog_burn_cr_dlogP + !dlog_burn_fe_dlogP + + !dlog_pnhe4_dlogP + !dlog_photo_dlogP + !dlog_other_dlogP + + !logR_kap ! logR = logRho - 3*logT + 18 ; used in kap tables + !logW ! logW = logPgas - 4*logT + logQ ! logQ = logRho - 2*logT + 12 + !logV ! logV = logRho - 0.7*logE + 20 + + !log_CpT_absMdot_div_L ! log10(s% Cp(k)*s% T(k)*abs(s% mstar_dot)/s% L(k)) + + !delta_r ! r - r_start, change during step + !delta_L ! L - L_start, change during step + !delta_cell_vol ! cell_vol - cell_vol_start, change during step + !delta_entropy ! entropy - entropy_start, change during step (does not include effects of diffusion) + !delta_T ! T - T_start, change during step + !delta_rho ! rho - rho_start, change during step + !delta_eps_nuc ! eps_nuc - eps_nuc_start, change during step + !delta_mu ! mu - mu_start, change during step + + !zFe ! mass fraction of "Fe" = Fe+Co+Ni + !log_zFe + !dPdr_dRhodr_info + !log_sig_raw_mix + + !d_u_div_rmid + !d_u_div_rmid_start + !d_v_div_r_dm + !d_v_div_r_dr + + !dlnP_dlnR + !dlnRho_dlnR + !dlnRho_dr + !dlnX_dr + !dlnY_dr + !dlogR + !dPdr_div_grav + !dPdr_info + !dRhodr_info + !dRstar_div_dr + !dr_ratio + !dm_eps_grav + !dr_ratio + !dt_cs_div_dr + !dt_div_tau_conv + !dt_times_conv_vel_div_mixing_length + !log_dt_cs_div_dr + !log_dt_div_tau_conv + !log_dt_times_conv_vel_div_mixing_length + !log_du_kick_div_du + !du + !dvdt_dPdm + !dvdt_grav + + !tau_conv + !tau_cool + !tau_epsnuc + !tau_qhse + + !max_abs_xa_corr + + !tdc_num_iters + + !k + + +! the first few lines of the profile contain general info about the model. +! for completeness, those items are described here. + + ! initial mass and Z + ! initial_mass + ! initial_z + ! general properties of the current state + ! model_number + ! num_zones + ! star_age + ! time_step + ! properties at the photosphere + ! Teff + ! photosphere_L + ! photosphere_r + ! properties at the outermost zone of the model + ! log_surface_L + ! log_surface_radius + ! log_surface_temp + ! properties near the center of the model + ! log_center_temp + ! log_center_density + ! log_center_P + ! center_eta + ! abundances near the center + ! center_h1 + ! center_he3 + ! center_he4 + ! center_c12 + ! center_n14 + ! center_o16 + ! center_ne20 + ! information about total mass + ! star_mass + ! star_mdot + ! star_mass_h1 + ! star_mass_he3 + ! star_mass_he4 + ! star_mass_c12 + ! star_mass_n14 + ! star_mass_o16 + ! star_mass_ne20 + ! locations of abundance transitions + ! he_core_mass + ! c_core_mass + ! o_core_mass + ! si_core_mass + ! fe_core_mass + ! location of optical depths 10 and 100 + ! tau10_mass + ! tau10_radius + ! tau100_mass + ! tau100_radius + ! time scales + ! dynamic_time + ! kh_timescale + ! nuc_timescale + ! various kinds of total power + ! power_nuc_burn + ! power_h_burn + ! power_he_burn + ! power_neu + ! a few control parameter values + ! h1_boundary_limit + ! he4_boundary_limit + ! c12_boundary_limit + ! burn_min1 + ! burn_min2 diff --git a/star/dev_cases_massive_stars/wd_nova_burst/re b/star/dev_cases_massive_stars/wd_nova_burst/re new file mode 100755 index 000000000..7fd60020a --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/re @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +shopt -u expand_aliases + +photo_directory=photos + +function most_recent_photo { + ls -tp "$photo_directory" | grep -v / | head -1 +} + +if [ $# -eq 0 ] +then + photo=$(most_recent_photo) +else + photo=$1 +fi + +if [ -z "$photo" ] || ! [ -f "$photo_directory/$photo" ] +then + echo "specified photo ($photo) does not exist" + exit 1 +fi + +echo "restart from $photo" +if ! cp "$photo_directory/$photo" restart_photo +then + echo "failed to copy photo ($photo)" + exit 1 +fi + +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" +./star +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" diff --git a/star/dev_cases_massive_stars/wd_nova_burst/ready.mod b/star/dev_cases_massive_stars/wd_nova_burst/ready.mod new file mode 100644 index 000000000..ce93af2ed --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/ready.mod @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02b0b743d60317e7e7bc8ff38a01859f84de36b01454a30284bfbcaf43dc2cc5 +size 754640 diff --git a/star/dev_cases_massive_stars/wd_nova_burst/rn b/star/dev_cases_massive_stars/wd_nova_burst/rn new file mode 100755 index 000000000..733034962 --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/rn @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +# this provides the definition of do_one (run one part of test) +# do_one [inlist] [output model] [LOGS directory] +source "${MESA_DIR}/star/test_suite/test_suite_helpers" + +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" + +do_one inlist_setup_header ready.mod +do_one inlist_wd_nova_burst_header final.mod + +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" + +echo 'finished inlists' + + diff --git a/star/dev_cases_massive_stars/wd_nova_burst/rn1 b/star/dev_cases_massive_stars/wd_nova_burst/rn1 new file mode 100755 index 000000000..25a1a7b16 --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/rn1 @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +rm -f restart_photo + +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" +./star +date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" diff --git a/star/dev_cases_massive_stars/wd_nova_burst/src/run.f90 b/star/dev_cases_massive_stars/wd_nova_burst/src/run.f90 new file mode 100644 index 000000000..76d423f1a --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/src/run.f90 @@ -0,0 +1,15 @@ +program run + use run_star_support, only: do_read_star_job + use run_star, only: do_run_star + + implicit none + + integer :: ierr + + ierr = 0 + call do_read_star_job('inlist', ierr) + if (ierr /= 0) stop 1 + + call do_run_star + +end program run diff --git a/star/dev_cases_massive_stars/wd_nova_burst/src/run_star_extras.f90 b/star/dev_cases_massive_stars/wd_nova_burst/src/run_star_extras.f90 new file mode 100644 index 000000000..8a298da01 --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/src/run_star_extras.f90 @@ -0,0 +1,257 @@ +! *********************************************************************** +! +! Copyright (C) 2010 The MESA Team +! +! this file is part of mesa. +! +! mesa is free software; you can redistribute it and/or modify +! it under the terms of the gnu general library public license as published +! by the free software foundation; either version 2 of the license, or +! (at your option) any later version. +! +! mesa is distributed in the hope that it will be useful, +! but without any warranty; without even the implied warranty of +! merchantability or fitness for a particular purpose. see the +! gnu library general public license for more details. +! +! you should have received a copy of the gnu library general public license +! along with this software; if not, write to the free software +! foundation, inc., 59 temple place, suite 330, boston, ma 02111-1307 usa +! +! *********************************************************************** + + module run_star_extras + + use star_lib + use star_def + use const_def + use math_lib + use auto_diff + use interp_1d_lib + + implicit none + + include "test_suite_extras_def.inc" + + integer :: num_bursts + logical :: waiting_for_burst + real(dp) :: L_burst = 1d4, L_between = 1d3 ! Lsun units + + + contains + + include "test_suite_extras.inc" + + subroutine nova_wind(id, Lsurf, Msurf, Rsurf, Tsurf, X, Y, Z, w, ierr) + use star_def + integer, intent(in) :: id + real(dp), intent(in) :: Lsurf, Msurf, Rsurf, Tsurf, X, Y, Z ! surface values (cgs) + real(dp) :: b + ! NOTE: surface is outermost cell. not necessarily at photosphere. + ! NOTE: don't assume that vars are set at this point. + ! so if you want values other than those given as args, + ! you should use values from s% xh(:,:) and s% xa(:,:) only. + ! rather than things like s% Teff or s% lnT(:) which have not been set yet. + real(dp), intent(out) :: w ! wind in units of Msun/year (value is >= 0) + integer, intent(out) :: ierr + w = 0 + ierr = 0 + b = nova_wind_b(Msurf / Msun) + if (Lsurf / Lsun > 1d3) then + w = exp10(-1.49 * safe_log10(Tsurf / 1d5) + b) / (Msun / secyer) + if (w < 1d-6) then + w = 0 + else + write(*,'(A,ES10.3,A)') ' nova wind ', w, ' Msun/year' + end if + end if + end subroutine nova_wind + + function nova_wind_b(m) result(b_out) + use interp_1d_def, only: pm_work_size + real(dp), intent(in) :: m + real(dp) :: b_out + integer, parameter :: n = 9 + real(dp) :: m_interp(n), b_interp(n) + real(dp) :: v_new(1), x_new(1) + real(dp), pointer :: work1(:) => null() + integer :: ierr + + m_interp = [0.5d0, 0.6d0, 0.7d0, 0.8d0, 0.9d0, 1.0d0, 1.1d0, 1.2d0, 1.33d0] + b_interp = [10.01d0, 20.24d0, 20.38d0, 20.49d0, 20.55d0, 20.62d0, 20.67d0, 20.72d0, 20.78d0] + + x_new(1) = m + + allocate(work1(n * pm_work_size)) + call interpolate_vector_pm( & + n, m_interp, 1, x_new, b_interp, v_new, work1, 'nova_wind_b', ierr) + if (ierr /= 0) then + write(*,*) 'ERROR in nova_wind_b interpolation', ierr + b_out = 0d0 + return + end if + + b_out = v_new(1) + deallocate(work1) + end function nova_wind_b + + subroutine extras_photo_read(id, iounit, ierr) + integer, intent(in) :: id, iounit + integer, intent(out) :: ierr + ierr = 0 + read(iounit,iostat=ierr) num_bursts, waiting_for_burst + end subroutine extras_photo_read + + + subroutine extras_photo_write(id, iounit) + integer, intent(in) :: id, iounit + write(iounit) num_bursts, waiting_for_burst + end subroutine extras_photo_write + + + subroutine extras_controls(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + + s% other_photo_read => extras_photo_read + s% other_photo_write => extras_photo_write + s% other_wind => nova_wind + + s% extras_startup => extras_startup + s% extras_check_model => extras_check_model + s% extras_finish_step => extras_finish_step + s% extras_after_evolve => extras_after_evolve + s% how_many_extra_history_columns => how_many_extra_history_columns + s% data_for_extra_history_columns => data_for_extra_history_columns + s% how_many_extra_profile_columns => how_many_extra_profile_columns + s% data_for_extra_profile_columns => data_for_extra_profile_columns + end subroutine extras_controls + + + subroutine extras_startup(id, restart, ierr) + integer, intent(in) :: id + logical, intent(in) :: restart + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + call test_suite_startup(s, restart, ierr) + if (.not. restart) then + num_bursts = 0 + waiting_for_burst = .true. + end if + end subroutine extras_startup + + + subroutine extras_after_evolve(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + real(dp) :: dt + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + call test_suite_after_evolve(s, ierr) + end subroutine extras_after_evolve + + + ! returns either keep_going, retry, or terminate. + integer function extras_check_model(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + include 'formats' + extras_check_model = keep_going +! if (s% L_phot > L_burst) then +! if (waiting_for_burst) then +! num_bursts = num_bursts + 1 +! write(*,2) 'num_bursts', num_bursts +! waiting_for_burst = .false. +! end if +! else if (s% L_phot < L_between) then +! if (num_bursts >= 1) then +! write(*,*) 'have finished burst' +! extras_check_model = terminate +! s% termination_code = t_extras_check_model +! end if +! waiting_for_burst = .true. +! end if + end function extras_check_model + + + integer function how_many_extra_history_columns(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_history_columns = 0 + end function how_many_extra_history_columns + + + subroutine data_for_extra_history_columns(id, n, names, vals, ierr) + integer, intent(in) :: id, n + character (len=maxlen_history_column_name) :: names(n) + real(dp) :: vals(n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + end subroutine data_for_extra_history_columns + + + integer function how_many_extra_profile_columns(id) + use star_def, only: star_info + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_profile_columns = 1 + end function how_many_extra_profile_columns + + + subroutine data_for_extra_profile_columns(id, n, nz, names, vals, ierr) + use star_def, only: star_info, maxlen_profile_column_name + use const_def, only: dp + integer, intent(in) :: id, n, nz + character (len=maxlen_profile_column_name) :: names(n) + real(dp) :: vals(nz,n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + integer :: k + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + names(1) = 'zbar_div_abar' + do k=1,s% nz + vals(k,1) = s% zbar(k)/s% abar(k) + end do + end subroutine data_for_extra_profile_columns + + + ! returns either keep_going or terminate. + integer function extras_finish_step(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_finish_step = keep_going + + end function extras_finish_step + + + end module run_star_extras diff --git a/star/dev_cases_massive_stars/wd_nova_burst/src/run_star_extras_old.f90 b/star/dev_cases_massive_stars/wd_nova_burst/src/run_star_extras_old.f90 new file mode 100644 index 000000000..9f35a2c6b --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/src/run_star_extras_old.f90 @@ -0,0 +1,198 @@ +! *********************************************************************** +! +! Copyright (C) 2010 The MESA Team +! +! This program is free software: you can redistribute it and/or modify +! it under the terms of the GNU Lesser General Public License +! as published by the Free Software Foundation, +! either version 3 of the License, or (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +! See the GNU Lesser General Public License for more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with this program. If not, see . +! +! *********************************************************************** + + module run_star_extras + + use star_lib + use star_def + use const_def + use math_lib + use auto_diff + + implicit none + + include "test_suite_extras_def.inc" + + integer :: num_bursts + logical :: waiting_for_burst + real(dp) :: L_burst = 1d4, L_between = 1d3 ! Lsun units + + contains + + include "test_suite_extras.inc" + + subroutine extras_photo_read(id, iounit, ierr) + integer, intent(in) :: id, iounit + integer, intent(out) :: ierr + ierr = 0 + read(iounit,iostat=ierr) num_bursts, waiting_for_burst + end subroutine extras_photo_read + + + subroutine extras_photo_write(id, iounit) + integer, intent(in) :: id, iounit + write(iounit) num_bursts, waiting_for_burst + end subroutine extras_photo_write + + + subroutine extras_controls(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + + s% other_photo_read => extras_photo_read + s% other_photo_write => extras_photo_write + + s% extras_startup => extras_startup + s% extras_check_model => extras_check_model + s% extras_finish_step => extras_finish_step + s% extras_after_evolve => extras_after_evolve + s% how_many_extra_history_columns => how_many_extra_history_columns + s% data_for_extra_history_columns => data_for_extra_history_columns + s% how_many_extra_profile_columns => how_many_extra_profile_columns + s% data_for_extra_profile_columns => data_for_extra_profile_columns + end subroutine extras_controls + + + subroutine extras_startup(id, restart, ierr) + integer, intent(in) :: id + logical, intent(in) :: restart + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + call test_suite_startup(s, restart, ierr) + if (.not. restart) then + num_bursts = 0 + waiting_for_burst = .true. + end if + end subroutine extras_startup + + + subroutine extras_after_evolve(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + real(dp) :: dt + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + call test_suite_after_evolve(s, ierr) + end subroutine extras_after_evolve + + + ! returns either keep_going, retry, or terminate. + integer function extras_check_model(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + include 'formats' + extras_check_model = keep_going +! if (s% L_phot > L_burst) then +! if (waiting_for_burst) then +! num_bursts = num_bursts + 1 +! write(*,2) 'num_bursts', num_bursts +! waiting_for_burst = .false. +! end if +! else if (s% L_phot < L_between) then +! if (num_bursts >= 1) then +! write(*,*) 'have finished burst' +! extras_check_model = terminate +! s% termination_code = t_extras_check_model +! end if +! waiting_for_burst = .true. +! end if + end function extras_check_model + + + integer function how_many_extra_history_columns(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_history_columns = 0 + end function how_many_extra_history_columns + + + subroutine data_for_extra_history_columns(id, n, names, vals, ierr) + integer, intent(in) :: id, n + character (len=maxlen_history_column_name) :: names(n) + real(dp) :: vals(n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + end subroutine data_for_extra_history_columns + + + integer function how_many_extra_profile_columns(id) + use star_def, only: star_info + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_profile_columns = 1 + end function how_many_extra_profile_columns + + + subroutine data_for_extra_profile_columns(id, n, nz, names, vals, ierr) + use star_def, only: star_info, maxlen_profile_column_name + use const_def, only: dp + integer, intent(in) :: id, n, nz + character (len=maxlen_profile_column_name) :: names(n) + real(dp) :: vals(nz,n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + integer :: k + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + names(1) = 'zbar_div_abar' + do k=1,s% nz + vals(k,1) = s% zbar(k)/s% abar(k) + end do + end subroutine data_for_extra_profile_columns + + + ! returns either keep_going or terminate. + integer function extras_finish_step(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_finish_step = keep_going + end function extras_finish_step + + + end module run_star_extras + diff --git a/star/dev_cases_massive_stars/wd_nova_burst/testhub.yml b/star/dev_cases_massive_stars/wd_nova_burst/testhub.yml new file mode 100644 index 000000000..17c742daf --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/testhub.yml @@ -0,0 +1,556 @@ + - inlist: inlist_setup_header + runtime_minutes: 0.17 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + runtime_minutes: 10.86 + model_number: 479 + star_age: 2.6162041751077975E+05 + num_retries: 22 + log_rel_run_E_err: -6.7542920773037940 + steps: 485 + retries: 16 + redos: 0 + solver_calls_made: 501 + solver_calls_failed: 16 + solver_iterations: 3245 + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + runtime_minutes: 9.16 + model_number: 421 + star_age: 2.6159276863960436E+05 + num_retries: 72 + log_rel_run_E_err: -9.8826692184686564 + steps: 428 + retries: 65 + redos: 0 + solver_calls_made: 493 + solver_calls_failed: 65 + solver_iterations: 2414 + - inlist: inlist_setup_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.16 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.14 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header + - inlist: inlist_setup_header + runtime_minutes: 0.15 + model_number: 11 + star_age: 1.0000000000000000E+07 + num_retries: 1 + log_rel_run_E_err: -2.0804518883152472 + steps: 11 + retries: 1 + redos: 0 + solver_calls_made: 12 + solver_calls_failed: 1 + solver_iterations: 67 + - inlist: inlist_wd_nova_burst_header From 3774808030b4c75d6910ad8fb7ba3008a895010b Mon Sep 17 00:00:00 2001 From: Mathieu Renzo Date: Tue, 12 May 2026 12:12:37 -0700 Subject: [PATCH 02/15] [skip ci] restructure inlist, use default composition --- .../40M_carbon_burning_envelope_issues/inlist | 286 +---------------- .../inlist_project | 295 ++++++++++++++++++ 2 files changed, 311 insertions(+), 270 deletions(-) create mode 100644 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_project diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist index b0933579b..48bbd9471 100644 --- a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist @@ -1,292 +1,38 @@ -! 40M_carbon_burning_envelope_issues -! Main evolution inlist flattened from 20M_pre_ms_to_core_collapse. -! This active inlist starts from ZAMS and evolves to core collapse. - &star_job - show_log_description_at_start = .false. - - load_saved_model = .false. - !load_model_filename = 'standard_lgTmax.mod' - !create_pre_main_sequence_model = .true. - !pre_ms_relax_to_start_radiative_core = .true. - relax_initial_Y = .true. - new_Y = 0.2703d0 - relax_initial_Z = .true. - new_Z = 1.42d-2 - - change_net = .true. - new_net_name = 'approx21_cr60_plus_co56.net' - dump_missing_metals_into_heaviest = .false. - - ! Example ccsn network for properly capturing the energy generation rate during all stages - !change_net_net = .true. - !new_net_name = 'mesa_206.net' - !dump_missing_metals_into_heaviest = .false. - - ! turn on hydrodynamics - change_v_flag = .true. - new_v_flag = .true. - - ! If using a big network, comment out and use a local rate_tables directory - num_special_rate_factors = 2 - reaction_for_special_factor(1) = 'r_c12_ag_o16' - special_rate_factor(1) = 1 - filename_of_special_rate(1) = 'c12ag_deboer_sigma_0p0_2000_Tgrid.dat' - - reaction_for_special_factor(2) = 'r_he4_he4_he4_to_c12' - special_rate_factor(2) = 1 - filename_of_special_rate(2) = 'r_he4_he4_he4_to_c12_cf88.txt' - - show_retry_counts_when_terminate = .true. - show_timestep_limit_counts_when_terminate = .true. - ! pgstar is recommended for diagnosing issues and understanding the evolution - pgstar_flag = .true. - save_pgstar_files_when_terminate = .true. - - initial_zfracs = 6 ! set to asplund 2009 abundance fractions - - save_model_when_terminate = .true. - save_model_filename = 'final.mod' - required_termination_code_string = 'fe_core_infall_limit' + read_extra_star_job_inlist(1) = .true. + extra_star_job_inlist_name(1) = 'inlist_project' / ! end of star_job namelist -&eos - use_Skye = .true. - mass_fraction_limit_for_Skye = 1d-10 - -/ ! end of eos namelist - -&kap - ! OPAL asplund 2009 opacities, Zbase set in inlist_mass_Z_wind_rotation - kap_file_prefix = 'a09' ! 'gs98' 'a09' 'OP_a09' 'OP_gs98' - kap_CO_prefix = 'a09_co' ! 'gs98_co' 'a09_co' - kap_lowT_prefix = 'lowT_fa05_a09p' - use_Type2_opacities = .true. - - Zbase = 1.42d-2 -/ ! end of kap namelist - -&controls - -! initial model - initial_mass = 40 - initial_z = 1.42d-2 ! solar - initial_y = 0.2703d0 ! from asplund et al. 2009, solar. - -! stopping - fe_core_infall_limit = 1d7 - ! limit max_model_number as part of test_suite - max_model_number = 10000 - !max_number_retries = 37 - -! wind - Dutch_scaling_factor = 0d0 - x_ctrl(25) = 0.4d0 ! Dutch_scaling_factor after ZAMS - - cool_wind_full_on_T = 0.8d4 - hot_wind_full_on_T = 1.2d4 - cool_wind_RGB_scheme = 'Dutch' - cool_wind_AGB_scheme = 'Dutch' - hot_wind_scheme = 'Dutch' - Dutch_wind_lowT_scheme = 'de Jager' - - max_T_center_for_any_mass_loss = 1.1d9 - max_tries_for_implicit_wind = 0 - -! atmosphere - atm_option = 'T_tau' - atm_T_tau_relation = 'Eddington' - atm_T_tau_opacity = 'fixed' - Pextra_factor = 2 - -! mlt - mixing_length_alpha = 1.5 - MLT_option = 'TDC' - use_Ledoux_criterion = .true. - - use_other_alpha_mlt = .true. ! implemented in run_star_extras - x_ctrl(21) = 3.0 ! alpha_H - x_ctrl(22) = 1.5 ! alpha_other - x_ctrl(23) = 0.5 ! ! use alpha_H if cell X >= H_limit; else use alpha_other - x_ctrl(24) = 9d0 ! ! use other_alpha_mlt only if star_mass >= this limit. - - thermohaline_option = 'Kippenhahn' - thermohaline_coeff = 0 - - semiconvection_option = 'Langer_85 mixing; gradT = gradr' - alpha_semiconvection = 1d-2 - - mlt_make_surface_no_mixing = .true. - -! superadiabatic convection routines: - use_superad_reduction = .false. - superad_reduction_Gamma_limit = 0.3d0 ! default is 0.5d0 - superad_reduction_Gamma_limit_scale = 5d0 - superad_reduction_Gamma_inv_scale = 5d0 - superad_reduction_diff_grads_limit = 1d-2 ! default is 1d-3 - superad_reduction_limit = -1d0 - - okay_to_reduce_gradT_excess = .false. - gradT_excess_f1 = 1d-4 - gradT_excess_f2 = 1d-2 - gradT_excess_lambda1 = -1d0 ! full on - -! mixing - !set_min_D_mix = .true. - !min_D_mix = 1d-2 - - ! we use step overshooting in H core - overshoot_scheme(1) = 'step' - overshoot_zone_type(1) = 'burn_H' - overshoot_zone_loc(1) = 'core' - overshoot_bdy_loc(1) = 'top' - overshoot_f(1) = 0.345 ! for M>10 - !overshoot_f(1) = 0.21 ! For M<10 - overshoot_f0(1) = 0.01 - - ! exponential in the H core - overshoot_scheme(2) = 'exponential' - overshoot_zone_type(2) = 'burn_He' - overshoot_zone_loc(2) = 'core' - overshoot_bdy_loc(2) = 'top' - overshoot_f(2) = 0.01 - overshoot_f0(2) = 0.005 - - ! we don't want to deal with He/CO core mergers - ! and there is reason to believe there is little - ! inward overshooting in the shell across compositions boundaries - overshoot_scheme(3) = 'none' - overshoot_zone_type(3) = 'burn_He' - overshoot_zone_loc(3) = 'shell' - overshoot_bdy_loc(3) = 'bottom' - - ! a small amount of overshooting on top of any other convective core - ! avoid spurious numerical behavior - ! perfect amount for degenerate flames - overshoot_scheme(4) = 'exponential' - overshoot_zone_type(4) = 'any' - overshoot_zone_loc(4) = 'any' - overshoot_bdy_loc(4) = 'any' - overshoot_f(4) = 0.005d0 - overshoot_f0(4) = 0.001d0 - -! timesteps - time_delta_coeff = 1.0 - min_timestep_factor = 0.8d0 - max_timestep_factor = 1.05d0 - timestep_factor_for_retries = 0.75 - - limit_for_rel_error_in_energy_conservation = 1d-3 - hard_limit_for_rel_error_in_energy_conservation = 1d-2 - - never_skip_hard_limits = .true. - min_xa_hard_limit = -1d-5 - min_xa_hard_limit_for_highT = -3d-5 - - delta_lgTeff_limit = 0.01 - delta_lgL_limit = 0.1 - delta_lgL_He_limit = 0.1 - - ! Recommend decreasing all three Rho, T, Tmax - ! to 1d-3 or lower in production runs - delta_lgRho_cntr_limit = 0.03 - delta_lgRho_cntr_hard_limit = 0.1 - delta_lgRho_limit = 0.1 - - delta_lgT_cntr_limit_only_after_near_zams = .true. - delta_lgT_cntr_limit = 0.002 - delta_lgT_cntr_hard_limit = 0.1 - - delta_lgT_max_limit_only_after_near_zams = .true. - delta_lgT_max_limit = 0.002 - delta_lgT_max_hard_limit = 0.1 - - dX_div_X_limit(2) = -1 ! for he4 - - ! On the changes in total abundance of each isotope - ! one of the most useful timestep controls, period - dX_nuc_drop_limit = 2d-2 ! Recommend decreasing to 1d-3 or lower in a production run - dX_nuc_drop_limit_at_high_T = 2d-2 ! default = -1 = same as dX_nuc_drop_limit - dX_nuc_drop_min_X_limit = 1d-3 ! try decreasing to 1d-4 or 1d-5 in a production run - dX_nuc_drop_max_A_limit = 70 ! try increasing beyond 60 in a big network run - dX_nuc_drop_hard_limit = 1d99 - - delta_lg_XH_cntr_limit = 0.01d0 - delta_lg_XH_cntr_max = 0.0d0 - delta_lg_XH_cntr_min = 0.5d0 - - delta_lg_XHe_cntr_limit = 0.01d0 - delta_lg_XHe_cntr_max = 0.0d0 - delta_lg_XHe_cntr_min = 0.5d0 - - delta_XSi_cntr_limit = 0.0025 - delta_XSi_cntr_hard_limit = -1!0.02 - delta_Ye_highT_limit = 1d-3 - -! mesh - !max_dq= 1d-3 ! or lower - mesh_delta_coeff = 2.5 ! try 1.0 or below in production run - mesh_delta_coeff_for_highT = 1.5 ! try 1.0 or below in production run - logT_max_for_standard_mesh_delta_coeff = 9.0 - logT_min_for_highT_mesh_delta_coeff = 9.5 - !min_dq_for_xa = 1d-4 ! avoid over-resolving composition changes, bad for bit for bit convergence? - -! solver - - ! damped newton and structure only - scale_max_correction = 0.1d0 - ignore_species_in_max_correction = .true. - - use_gold2_tolerances = .true. - use_gold_tolerances = .true. - gold_solver_iters_timestep_limit = 20 +&eos - max_abs_rel_run_E_err = 1d-2 - energy_eqn_option = 'dedt' + read_extra_eos_inlist(1) = .true. + extra_eos_inlist_name(1) = 'inlist_project' - convergence_ignore_equL_residuals = .true. - make_gradr_sticky_in_solver_iters = .true. - min_logT_for_make_gradr_sticky_in_solver_iters = 8d0 - xa_scale = 1d-5 - min_timestep_limit = 1d-12 ! (seconds) ! 1d-20 if things are sticky +/ ! end of eos namelist - when_to_stop_rtol = 1d-3 - when_to_stop_atol = 1d-3 - op_split_burn = .true. - op_split_burn_min_T = 1d9 - burn_steps_limit = 150 - burn_steps_hard_limit = 250 - op_split_burn_eps = 1d-5 - op_split_burn_odescal = 1d-5 +&kap -! output + read_extra_kap_inlist(1) = .true. + extra_kap_inlist_name(1) = 'inlist_project' - !max_model_number = 4000000 +/ ! end of kap namelist - num_trace_history_values = 4 - trace_history_value_name(1) = 'Fe_core' - trace_history_value_name(2) = 'fe_core_infall' - trace_history_value_name(3) = 'rel_E_err' - trace_history_value_name(4) = 'log_rel_run_E_err' - photo_interval = 200 - photo_digits = 8 - profile_interval = 100 - max_num_profile_models = 400000 - history_interval = 1 - write_header_frequency = 10 - terminal_interval = 10 +&controls - !report_solver_progress = .true. ! set true to see info about solver iterations - !report_ierr = .true. ! if true, produce terminal output when have some internal error + read_extra_controls_inlist(1) = .true. + extra_controls_inlist_name(1) = 'inlist_project' / ! end of controls namelist + &pgstar + read_extra_pgstar_inlist(1) = .true. extra_pgstar_inlist_name(1) = 'inlist_pgstar' + / ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_project b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_project new file mode 100644 index 000000000..f4838047f --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_project @@ -0,0 +1,295 @@ +! 40M_carbon_burning_envelope_issues +! Main evolution inlist flattened from 20M_pre_ms_to_core_collapse. +! This active inlist starts from ZAMS and evolves to core collapse. + +&star_job + show_log_description_at_start = .false. + + load_saved_model = .false. + !load_model_filename = 'standard_lgTmax.mod' + ! create_pre_main_sequence_model = .true. + ! pre_ms_relax_to_start_radiative_core = .true. + ! relax_initial_Y = .true. + ! new_Y = 0.2703d0 + ! relax_initial_Z = .true. + ! new_Z = 1.42d-2 + + change_net = .true. + new_net_name = 'approx21_cr60_plus_co56.net' + dump_missing_metals_into_heaviest = .false. + + ! Example ccsn network for properly capturing the energy generation rate during all stages + !change_net_net = .true. + !new_net_name = 'mesa_206.net' + !dump_missing_metals_into_heaviest = .false. + + ! turn on hydrodynamics + change_v_flag = .true. + new_v_flag = .true. + + ! If using a big network, comment out and use a local rate_tables directory + num_special_rate_factors = 2 + reaction_for_special_factor(1) = 'r_c12_ag_o16' + special_rate_factor(1) = 1 + filename_of_special_rate(1) = 'c12ag_deboer_sigma_0p0_2000_Tgrid.dat' + + reaction_for_special_factor(2) = 'r_he4_he4_he4_to_c12' + special_rate_factor(2) = 1 + filename_of_special_rate(2) = 'r_he4_he4_he4_to_c12_cf88.txt' + + show_retry_counts_when_terminate = .true. + show_timestep_limit_counts_when_terminate = .true. + + ! pgstar is recommended for diagnosing issues and understanding the evolution + pgstar_flag = .true. + save_pgstar_files_when_terminate = .true. + + initial_zfracs = 6 ! set to asplund 2009 abundance fractions + + save_model_when_terminate = .true. + save_model_filename = 'final.mod' + required_termination_code_string = 'fe_core_infall_limit' + +/ ! end of star_job namelist + +&eos + use_Skye = .true. + mass_fraction_limit_for_Skye = 1d-10 + +/ ! end of eos namelist + +&kap + ! OPAL asplund 2009 opacities, Zbase set in inlist_mass_Z_wind_rotation + kap_file_prefix = 'a09' ! 'gs98' 'a09' 'OP_a09' 'OP_gs98' + kap_CO_prefix = 'a09_co' ! 'gs98_co' 'a09_co' + kap_lowT_prefix = 'lowT_fa05_a09p' + use_Type2_opacities = .true. + + Zbase = 0.02d0 !1.42d-2 ! +/ ! end of kap namelist + +&controls + +! initial model + initial_mass = 40 + ! initial_z = 1.42d-2 ! solar + ! initial_y = 0.2703d0 ! from asplund et al. 2009, solar. + +! stopping + fe_core_infall_limit = 1d7 + ! limit max_model_number as part of test_suite + max_model_number = 10000 + !max_number_retries = 37 + +! wind + Dutch_scaling_factor = 0d0 + x_ctrl(25) = 0.4d0 ! Dutch_scaling_factor after ZAMS + + cool_wind_full_on_T = 0.8d4 + hot_wind_full_on_T = 1.2d4 + cool_wind_RGB_scheme = 'Dutch' + cool_wind_AGB_scheme = 'Dutch' + hot_wind_scheme = 'Dutch' + Dutch_wind_lowT_scheme = 'de Jager' + + max_T_center_for_any_mass_loss = 1.1d9 + max_tries_for_implicit_wind = 0 + +! atmosphere + atm_option = 'T_tau' + atm_T_tau_relation = 'Eddington' + atm_T_tau_opacity = 'fixed' + Pextra_factor = 2 + +! mlt + mixing_length_alpha = 1.5 + MLT_option = 'TDC' + use_Ledoux_criterion = .true. + + use_other_alpha_mlt = .true. ! implemented in run_star_extras + x_ctrl(21) = 3.0 ! alpha_H + x_ctrl(22) = 1.5 ! alpha_other + x_ctrl(23) = 0.5 ! ! use alpha_H if cell X >= H_limit; else use alpha_other + x_ctrl(24) = 9d0 ! ! use other_alpha_mlt only if star_mass >= this limit. + + thermohaline_option = 'Kippenhahn' + thermohaline_coeff = 0 + + semiconvection_option = 'Langer_85 mixing; gradT = gradr' + alpha_semiconvection = 1d-2 + + mlt_make_surface_no_mixing = .true. + +! superadiabatic convection routines: + + use_superad_reduction = .false. + superad_reduction_Gamma_limit = 0.3d0 ! default is 0.5d0 + superad_reduction_Gamma_limit_scale = 5d0 + superad_reduction_Gamma_inv_scale = 5d0 + superad_reduction_diff_grads_limit = 1d-2 ! default is 1d-3 + superad_reduction_limit = -1d0 + + okay_to_reduce_gradT_excess = .false. + gradT_excess_f1 = 1d-4 + gradT_excess_f2 = 1d-2 + gradT_excess_lambda1 = -1d0 ! full on + +! mixing + !set_min_D_mix = .true. + !min_D_mix = 1d-2 + + ! we use step overshooting in H core + overshoot_scheme(1) = 'step' + overshoot_zone_type(1) = 'burn_H' + overshoot_zone_loc(1) = 'core' + overshoot_bdy_loc(1) = 'top' + overshoot_f(1) = 0.345 ! for M>10 + !overshoot_f(1) = 0.21 ! For M<10 + overshoot_f0(1) = 0.01 + + ! exponential in the H core + overshoot_scheme(2) = 'exponential' + overshoot_zone_type(2) = 'burn_He' + overshoot_zone_loc(2) = 'core' + overshoot_bdy_loc(2) = 'top' + overshoot_f(2) = 0.01 + overshoot_f0(2) = 0.005 + + ! we don't want to deal with He/CO core mergers + ! and there is reason to believe there is little + ! inward overshooting in the shell across compositions boundaries + overshoot_scheme(3) = 'none' + overshoot_zone_type(3) = 'burn_He' + overshoot_zone_loc(3) = 'shell' + overshoot_bdy_loc(3) = 'bottom' + + ! a small amount of overshooting on top of any other convective core + ! avoid spurious numerical behavior + ! perfect amount for degenerate flames + overshoot_scheme(4) = 'exponential' + overshoot_zone_type(4) = 'any' + overshoot_zone_loc(4) = 'any' + overshoot_bdy_loc(4) = 'any' + overshoot_f(4) = 0.005d0 + overshoot_f0(4) = 0.001d0 + +! timesteps + time_delta_coeff = 1.0 + min_timestep_factor = 0.8d0 + max_timestep_factor = 1.05d0 + timestep_factor_for_retries = 0.75 + + limit_for_rel_error_in_energy_conservation = 1d-3 + hard_limit_for_rel_error_in_energy_conservation = 1d-2 + + never_skip_hard_limits = .true. + min_xa_hard_limit = -1d-5 + min_xa_hard_limit_for_highT = -3d-5 + + delta_lgTeff_limit = 0.01 + delta_lgL_limit = 0.1 + delta_lgL_He_limit = 0.1 + + ! Recommend decreasing all three Rho, T, Tmax + ! to 1d-3 or lower in production runs + delta_lgRho_cntr_limit = 0.03 + delta_lgRho_cntr_hard_limit = 0.1 + delta_lgRho_limit = 0.1 + + delta_lgT_cntr_limit_only_after_near_zams = .true. + delta_lgT_cntr_limit = 0.002 + delta_lgT_cntr_hard_limit = 0.1 + + delta_lgT_max_limit_only_after_near_zams = .true. + delta_lgT_max_limit = 0.002 + delta_lgT_max_hard_limit = 0.1 + + dX_div_X_limit(2) = -1 ! for he4 + + ! On the changes in total abundance of each isotope + ! one of the most useful timestep controls, period + dX_nuc_drop_limit = 2d-2 ! Recommend decreasing to 1d-3 or lower in a production run + dX_nuc_drop_limit_at_high_T = 2d-2 ! default = -1 = same as dX_nuc_drop_limit + dX_nuc_drop_min_X_limit = 1d-3 ! try decreasing to 1d-4 or 1d-5 in a production run + dX_nuc_drop_max_A_limit = 70 ! try increasing beyond 60 in a big network run + dX_nuc_drop_hard_limit = 1d99 + + delta_lg_XH_cntr_limit = 0.01d0 + delta_lg_XH_cntr_max = 0.0d0 + delta_lg_XH_cntr_min = 0.5d0 + + delta_lg_XHe_cntr_limit = 0.01d0 + delta_lg_XHe_cntr_max = 0.0d0 + delta_lg_XHe_cntr_min = 0.5d0 + + delta_XSi_cntr_limit = 0.0025 + delta_XSi_cntr_hard_limit = -1!0.02 + delta_Ye_highT_limit = 1d-3 + +! mesh + !max_dq= 1d-3 ! or lower + mesh_delta_coeff = 2.5 ! try 1.0 or below in production run + mesh_delta_coeff_for_highT = 1.5 ! try 1.0 or below in production run + logT_max_for_standard_mesh_delta_coeff = 9.0 + logT_min_for_highT_mesh_delta_coeff = 9.5 + !min_dq_for_xa = 1d-4 ! avoid over-resolving composition changes, bad for bit for bit convergence? + +! solver + + ! damped newton and structure only + scale_max_correction = 0.1d0 + ignore_species_in_max_correction = .true. + + use_gold2_tolerances = .true. + use_gold_tolerances = .true. + gold_solver_iters_timestep_limit = 20 + + max_abs_rel_run_E_err = 1d-2 + energy_eqn_option = 'dedt' + + convergence_ignore_equL_residuals = .true. + make_gradr_sticky_in_solver_iters = .true. + min_logT_for_make_gradr_sticky_in_solver_iters = 8d0 + xa_scale = 1d-5 + min_timestep_limit = 1d-12 ! (seconds) ! 1d-20 if things are sticky + + when_to_stop_rtol = 1d-3 + when_to_stop_atol = 1d-3 + + op_split_burn = .true. + op_split_burn_min_T = 1d9 + burn_steps_limit = 150 + burn_steps_hard_limit = 250 + op_split_burn_eps = 1d-5 + op_split_burn_odescal = 1d-5 + +! output + + !max_model_number = 4000000 + + num_trace_history_values = 4 + trace_history_value_name(1) = 'Fe_core' + trace_history_value_name(2) = 'fe_core_infall' + trace_history_value_name(3) = 'rel_E_err' + trace_history_value_name(4) = 'log_rel_run_E_err' + + photo_interval = 200 + photo_digits = 8 + profile_interval = 100 + max_num_profile_models = 400000 + history_interval = 1 + write_header_frequency = 10 + terminal_interval = 10 + + !report_solver_progress = .true. ! set true to see info about solver iterations + !report_ierr = .true. ! if true, produce terminal output when have some internal error + +/ ! end of controls namelist + +&pgstar + read_extra_pgstar_inlist(1) = .true. + extra_pgstar_inlist_name(1) = 'inlist_pgstar' +/ ! end of pgstar namelist + +&colors +/ From 6120e28940bc333053ff0e0e80ee63e2994f4c93 Mon Sep 17 00:00:00 2001 From: Mathieu Renzo Date: Sun, 17 May 2026 08:27:53 -0700 Subject: [PATCH 03/15] add binary template --- .../14Msun_donor/.gitignore | 8 + .../14Msun_donor/Makefile | 21 + .../14Msun_donor/README.md | 47 + .../14Msun_donor/clean | 2 + .../14Msun_donor/history_columns.list | 1071 +++++++++++++++++ .../14Msun_donor/inlist1 | 51 + .../14Msun_donor/inlist2 | 68 ++ .../14Msun_donor/inlist_binary | 85 ++ .../14Msun_donor/inlist_both | 315 +++++ .../14Msun_donor/inlist_pgbinary | 106 ++ .../14Msun_donor/inlist_pgstar | 356 ++++++ .../14Msun_donor/inlist_to_cc | 200 +++ .../14Msun_donor/profile_columns.list | 962 +++++++++++++++ .../rate_tables/S13_r_be7_wk_li7.h5 | 3 + star/dev_cases_massive_stars/14Msun_donor/re | 28 + star/dev_cases_massive_stars/14Msun_donor/rn | 5 + .../14Msun_donor/src/binary_run.f90 | 6 + .../14Msun_donor/src/run_binary_extras.f90 | 401 ++++++ .../14Msun_donor/src/run_star_extras.f90 | 314 +++++ .../inlist_project | 2 +- .../testhub.yml | 15 + 21 files changed, 4065 insertions(+), 1 deletion(-) create mode 100644 star/dev_cases_massive_stars/14Msun_donor/.gitignore create mode 100644 star/dev_cases_massive_stars/14Msun_donor/Makefile create mode 100644 star/dev_cases_massive_stars/14Msun_donor/README.md create mode 100755 star/dev_cases_massive_stars/14Msun_donor/clean create mode 100644 star/dev_cases_massive_stars/14Msun_donor/history_columns.list create mode 100644 star/dev_cases_massive_stars/14Msun_donor/inlist1 create mode 100644 star/dev_cases_massive_stars/14Msun_donor/inlist2 create mode 100644 star/dev_cases_massive_stars/14Msun_donor/inlist_binary create mode 100644 star/dev_cases_massive_stars/14Msun_donor/inlist_both create mode 100644 star/dev_cases_massive_stars/14Msun_donor/inlist_pgbinary create mode 100644 star/dev_cases_massive_stars/14Msun_donor/inlist_pgstar create mode 100644 star/dev_cases_massive_stars/14Msun_donor/inlist_to_cc create mode 100644 star/dev_cases_massive_stars/14Msun_donor/profile_columns.list create mode 100644 star/dev_cases_massive_stars/14Msun_donor/rate_tables/S13_r_be7_wk_li7.h5 create mode 100755 star/dev_cases_massive_stars/14Msun_donor/re create mode 100755 star/dev_cases_massive_stars/14Msun_donor/rn create mode 100644 star/dev_cases_massive_stars/14Msun_donor/src/binary_run.f90 create mode 100644 star/dev_cases_massive_stars/14Msun_donor/src/run_binary_extras.f90 create mode 100644 star/dev_cases_massive_stars/14Msun_donor/src/run_star_extras.f90 diff --git a/star/dev_cases_massive_stars/14Msun_donor/.gitignore b/star/dev_cases_massive_stars/14Msun_donor/.gitignore new file mode 100644 index 000000000..ee95d4cc2 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/.gitignore @@ -0,0 +1,8 @@ +*.mod +*.data +*.dat +png/* +LOGS*/* +photos/* +*cache* +build/* \ No newline at end of file diff --git a/star/dev_cases_massive_stars/14Msun_donor/Makefile b/star/dev_cases_massive_stars/14Msun_donor/Makefile new file mode 100644 index 000000000..6bcac01cc --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/Makefile @@ -0,0 +1,21 @@ +ifeq ($(MESA_DIR),) + $(error MESA_DIR environment variable is not set) +endif + +include $(MESA_DIR)/make/defaults-module.mk + +MODULE_NAME := binary +SRCS := \ + src/binary_run.f90 \ + src/run_star_extras.f90 \ + src/run_binary_extras.f90 \ + $(MESA_DIR)/binary/job/run_binary.f90 + +include $(MAKE_DIR)/work.mk + +run: $(OBJ_OUT) + @date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" + @$(OBJ_OUT) + @date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S" + +.PHONY: run diff --git a/star/dev_cases_massive_stars/14Msun_donor/README.md b/star/dev_cases_massive_stars/14Msun_donor/README.md new file mode 100644 index 000000000..05020520b --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/README.md @@ -0,0 +1,47 @@ +# MESA setup for Stripped Envelope Supernova Progenitor + +Developed for the [TARDIS connector workshop 2025](https://kasukabedefenceforce.github.io/tardis-con/2025) at CCA/Flatiron. + +The setup template is in <./template_binary>. It computes the +evolution of a 15M☉ donor star + 12M☉ point-mass +companion with an initial period of 20 days through case B (post +donor-main-sequence) fully conservative mass transfer until carbon +core depletion and core-collapse. + +Originally developed for [Renzo et al. +2021](https://ui.adsabs.harvard.edu/abs/2021ApJ...923..277R/abstract), +[2023](https://ui.adsabs.harvard.edu/abs/2023ApJ...942L..32R/abstract), +ported to MESA `r24.03.1` or later by +[@neevshah101](https://github.com/neevshah101). The post-carbon +depletion evolution (see below) is based on a template inlist provided +by [@Debraheem](https://github.com/Debraheem). These have been +iterated upon by trial-and-error until viable models run. + +Output files generated by using this setup are saved in the +runoutputs dir for each directory. + + +# Note on evolution beyond C depletion + +At carbon depletion ($X_{center}(^{12}C)_{} <0.01$, defined in +`extras_finish_step` in `run_star_extras.f90`) we read on-the-fly a +`star_job` and `controls` from an inlist whose path is **hard coded**. +This inlist lives in +[inlisttocc](./template_binary/inlist_to_cc). +and it helps to reach the onset of core collapse. + +As usual, most computing time is spent post-carbon depletion. This +model uses `use_drag = .true.` post-carbon depletion to successfully go +to core-collapse without spurious envelope velocities. It also uses +`op_split = .true.` for T≥4×109 K, and changes overshooting parameters +for late burning (this has been found to be necessary through a +non-systematic but extensive experimentation). + + +# TODO + +- test it reaches onset of core-collapse with MESA `r24.08.1` + - [X] 22 iso network + - [ ] large network (work in progress in separate folder/branches) +- [ ] check CPUh cost: ∼ 3h on 12 cores + diff --git a/star/dev_cases_massive_stars/14Msun_donor/clean b/star/dev_cases_massive_stars/14Msun_donor/clean new file mode 100755 index 000000000..fe8d63c0c --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/clean @@ -0,0 +1,2 @@ +cd make +make clean diff --git a/star/dev_cases_massive_stars/14Msun_donor/history_columns.list b/star/dev_cases_massive_stars/14Msun_donor/history_columns.list new file mode 100644 index 000000000..10a60812c --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/history_columns.list @@ -0,0 +1,1071 @@ +! history_columns.list -- determines the contents of star history logs +! you can use a non-standard version by setting history_columns_file in your inlist + +! units are cgs unless otherwise noted. + +! reorder the following names as desired to reorder columns. +! comment out the name to omit a column (fewer columns => less IO => faster running). +! remove '!' to restore a column. + +! if you have a situation where you want a non-standard set of columns, +! make a copy of this file, edit as desired, and give the new filename in your inlist +! as history_columns_file. if you are just adding columns, you can 'include' this file, +! and just list the additions in your file. note: to include the standard default +! version, use include '' -- the 0 length string means include the default file. + +! blank lines and comments can be used freely. +! if a column name appears more than once in the list, only the first occurrence is used. + +! if you need to have something added to the list of options, let me know.... + + +! the first few lines of the log file contain a few items: + + ! version_number -- for the version of mesa being used + ! burn_min1 -- 1st limit for reported burning, in erg/g/s + ! burn_min2 -- 2nd limit for reported burning, in erg/g/s + + +!# other files + +! note: you can include another list by doing +! include 'filename' +! include '' means include the default standard list file + +! the following lines of the log file contain info about 1 model per row + +!---------------------------------------------------------------------------------------------- + +!# general info about the model + + model_number ! counting from the start of the run + num_zones ! number of zones in the model + + !## age + + star_age ! elapsed simulated time in years since the start of the run + star_age_sec ! elapsed simulated time in seconds since the start of the run + star_age_min ! elapsed simulated time in minutes since the start of the run + star_age_hr ! elapsed simulated time in hours since the start of the run + star_age_day ! elapsed simulated time in days since the start of the run + !day ! elapsed simulated time in days since the start of the run + + !log_star_age + !log_star_age_sec + + !## timestep + + time_step ! timestep in years since previous model + time_step_sec ! timestep in seconds since previous model + time_step_days + log_dt ! log10 time_step in years + log_dt_sec ! log10 time_step in seconds + log_dt_days ! log10 time_step in days + + !## mass + + star_mass ! in Msun units + !log_star_mass + + !star_gravitational_mass ! star_mass is baryonic mass + !star_mass_grav_div_mass + + !delta_mass ! star_mass - initial_mass in Msun units + log_xmstar ! log10 mass exterior to M_center (grams) + + !## mass change + + !star_mdot ! d(star_mass)/dt (in msolar per year) + log_abs_mdot ! log10(abs(star_mdot)) (in msolar per year) + + !## imposed surface conditions + !Tsurf_factor + !tau_factor + !tau_surface + + !## imposed center conditions + !m_center + !m_center_gm + !r_center + !r_center_cm + !r_center_km + !L_center + !log_L_center + !log_L_center_ergs_s + !v_center + !v_center_kms + + !logt_max + +!---------------------------------------------------------------------------------------------- + +!# mixing and convection + + !max_conv_vel_div_csound + !max_gradT_div_grada + !max_gradT_sub_grada + !min_log_mlt_Gamma + + + !## mixing regions + + mass_conv_core ! (Msun) mass coord of top of convective core. 0 if core is not convective + + ! mx1 refers to the largest (by mass) convective region. + ! mx2 is the 2nd largest. + + ! conv_mx1_top and conv_mx1_bot are the region where mixing_type == convective_mixing. + ! mx1_top and mx1_bot are the extent of all kinds of mixing, convective and other. + + ! values are m/Mstar + conv_mx1_top + conv_mx1_bot + conv_mx2_top + conv_mx2_bot + mx1_top + mx1_bot + mx2_top + mx2_bot + + ! radius -- values are radii in Rsun units + !conv_mx1_top_r + !conv_mx1_bot_r + !conv_mx2_top_r + !conv_mx2_bot_r + !mx1_top_r + !mx1_bot_r + !mx2_top_r + !mx2_bot_r + + ! you might want to get a more complete list of mixing regions by using the following + + !mixing_regions ! note: this includes regions where the mixing type is no_mixing. + + ! the is the number of regions to report + ! there will be 2* columns for this in the log file, 2 for each region. + ! the first column for a region gives the mixing type as defined in const/public/const_def.f90. + + ! the second column for a region gives the m/mstar location of the top of the region + ! entries for extra columns after the last region in the star will have an invalid mixing_type value of -1. + ! mstar is the total mass of the star, so these locations range from 0 to 1 + ! all regions are include starting from the center, so the bottom of one region + ! is the top of the previous one. since we start at the center, the bottom of the 1st region is 0. + + ! the columns in the log file will have names like 'mix_type_1' and 'mix_qtop_1' + + ! if the star has too many regions to report them all, + ! the smallest regions will be merged with neighbors for reporting purposes only. + + + !mix_relr_regions + ! same as above, but locations given as r/rstar instead of m/mstar. + ! the columns in the log file will have names like 'mix_relr_type_1' and 'mix_relr_top_1' + + + !## conditions at base of largest convection zone (by mass) + !cz_bot_mass ! mass coordinate of base (Msun) + !cz_mass ! mass coordinate of base (Msun) -- same as cz_bot_mass + !cz_log_xmass ! mass exterior to base (g) + !cz_log_xmsun ! mass exterior to base (Msun) + !cz_xm ! mass exterior to base (Msun) + !cz_logT + !cz_logRho + !cz_logP + !cz_bot_radius ! Rsun + !cz_log_column_depth + !cz_log_radial_depth + !cz_luminosity ! Lsun + !cz_opacity + !cz_log_tau + !cz_eta + !cz_log_eps_nuc ! log10(ergs/g/s) + !cz_t_heat ! Cp*T/eps_nuc (seconds) + + !cz_csound + !cz_scale_height + !cz_grav + + !cz_omega + !cz_omega_div_omega_crit + + !cz_zone + + ! mass fractions at base of largest convection zone (by mass) + !cz_log_xa h1 + !cz_log_xa he4 + + !## conditions at top of largest convection zone (by mass) + !cz_top_mass ! mass coordinate of top (Msun) + !cz_top_log_xmass ! mass exterior to top (g) + !cz_top_log_xmsun ! mass exterior to top (Msun) + !cz_top_xm ! mass exterior to top (Msun) + !cz_top_logT + !cz_top_logRho + !cz_top_logP + !cz_top_radius ! Rsun + !cz_top_log_column_depth + !cz_top_log_radial_depth + !cz_top_luminosity ! Lsun + !cz_top_opacity + !cz_top_log_tau + !cz_top_eta + !cz_top_log_eps_nuc ! log10(ergs/g/s) + !cz_top_t_heat ! Cp*T/eps_nuc (seconds) + + !cz_top_csound + !cz_top_scale_height + !cz_top_grav + + !cz_top_omega + !cz_top_omega_div_omega_crit + + !cz_top_zone + !cz_top_zone_logdq + + ! mass fractions at top of largest convection zone (by mass) + !cz_top_log_xa h1 + !cz_top_log_xa he4 + +!---------------------------------------------------------------------------------------------- + +!# nuclear reactions + + !## integrated quantities + + !power_h_burn ! total thermal power from PP and CNO, excluding neutrinos (in Lsun units) + !power_he_burn ! total thermal power from triple-alpha, excluding neutrinos (in Lsun units) + !power_photo + !power_z_burn + !log_power_nuc_burn ! total thermal power from all burning, excluding photodisintegrations + log_LH ! log10 power_h_burn + log_LHe ! log10 power_he_burn + log_LZ ! log10 total burning power including LC, but excluding LH and LHe and photodisintegrations + log_Lnuc ! log(LH + LHe + LZ) + !log_Lnuc_ergs_s + !log_Lnuc_sub_log_L + !lnuc_photo + + !extra_L ! integral of extra_heat in Lsun units + !log_extra_L ! log10 extra_L + + !## neutrino losses + log_Lneu ! log10 power emitted in neutrinos, nuclear and thermal (in Lsun units) + log_Lneu_nuc ! log10 power emitted in neutrinos, nuclear sources only (in Lsun units) + log_Lneu_nonnuc ! log10 power emitted in neutrinos, thermal sources only (in Lsun units) + + !mass_loc_of_max_eps_nuc ! (in Msun units) + !mass_ext_to_max_eps_nuc ! (in Msun units) + !eps_grav_integral ! (in Lsun units) + !log_abs_Lgrav ! log10 abs(eps_grav_integral) (in Lsun units) + + !## information about reactions (by category) + + ! log10 total luminosity for reaction categories (Lsun units) + + pp + cno + tri_alpha + !c_alpha + !n_alpha + !o_alpha + !ne_alpha + !na_alpha + !mg_alpha + !si_alpha + !s_alpha + !ar_alpha + !ca_alpha + !ti_alpha + !fe_co_ni + !c12_c12 + !c12_o16 + !o16_o16 + !photo + !pnhe4 + !other + + !## information about individual reactions + + ! adds columns for all of the reactions that are in the current net + ! Note that if using op_split_burn=.true. then zones which have been split will report 0 for thier rates + !add_raw_rates ! raw reaction rates, reactions/second + !add_screened_rates ! screened reaction rates reactions/second + !add_eps_nuc_rates ! Nuclear energy (minus neutrino losses) released erg/s + !add_eps_neu_rates ! Neutrino losses erg/s + + ! individual reactions (as many as desired) + ! use list_net_reactions = .true. in star_job to list all reactions in the current net + ! reactions/second + !raw_rate r_h1_h1_ec_h2 + !raw_rate r_h1_h1_wk_h2 + + + + !## nuclear reactions at center + + ! center log10 burn erg/g/s for reaction categories + + !c_log_eps_burn cno + !c_log_eps_burn tri_alfa + + ! center d_eps_nuc_dlnd for reaction categories + + !c_d_eps_dlnd cno + !c_d_eps_dlnd tri_alfa + + ! center d_eps_nuc_dlnT for reaction categories + + !c_d_eps_dlnT cno + !c_d_eps_dlnT tri_alfa + + !## regions of strong nuclear burning + + ! 2 zones where eps_nuc > burn_min1 erg/g/s + ! for each zone have 4 numbers: start1, start2, end2, end1 + ! start1 is mass of inner edge where first goes > burn_min1 (or -20 if none such) + ! start2 is mass of inner edge where first zone reaches burn_min2 erg/g/sec (or -20 if none such) + ! end2 is mass of outer edge where first zone drops back below burn_min2 erg/g/s + ! end1 is mass of outer edge where first zone ends (i.e. eps_nuc < burn_min1) + ! similar for the second zone + + epsnuc_M_1 ! start1 for 1st zone + epsnuc_M_2 ! start2 + epsnuc_M_3 ! end2 + epsnuc_M_4 ! end1 + + epsnuc_M_5 ! start1 for 2nd zone + epsnuc_M_6 ! start2 + epsnuc_M_7 ! end2 + epsnuc_M_8 ! end1 + + + ! you might want to get a more complete list of burning regions by using the following + + !burning_regions + ! the is the number of regions to report + ! there will be 2* columns for this in the log file, 2 for each region. + ! the first column for a region gives int(sign(val)*log10(max(1,abs(val)))) + ! where val = ergs/gm/sec nuclear energy minus all neutrino losses. + ! the second column for a region gives the q location of the top of the region + ! entries for extra columns after the last region in the star will have a value of -9999 + ! all regions are included starting from the center, so the bottom of one region + ! is the top of the previous one. + ! since we start at the center, the bottom of the 1st region is q=0 and top of last is q=1. + + ! the columns in the log file will have names like 'burn_type_1' and 'burn_qtop_1' + + !burn_relr_regions + ! same as above, but locations given as r/rstar instead of m/mstar. + ! the columns in the log file will have names like 'burn_relr_type_1' and 'burn_relr_top_1' + + + ! if the star has too many regions to report them all, + ! the smallest regions will be merged with neighbors for reporting purposes only. + +!---------------------------------------------------------------------------------------------- + +!# information about core and envelope + + !## helium core + he_core_mass + !he_core_radius + !he_core_lgT + !he_core_lgRho + !he_core_L + !he_core_v + !he_core_omega + !he_core_omega_div_omega_crit + !he_core_k + + !## CO core + co_core_mass + !CO_core + !co_core_radius + !co_core_lgT + !co_core_lgRho + !co_core_L + !co_core_v + !co_core_omega + !co_core_omega_div_omega_crit + !co_core_k + + !## ONe core + one_core_mass + !one_core_radius + !one_core_lgT + !one_core_lgRho + !one_core_L + !one_core_v + !one_core_omega + !one_core_omega_div_omega_crit + !one_core_k + + !## iron core + fe_core_mass + !fe_core_radius + !fe_core_lgT + !fe_core_lgRho + !fe_core_L + !fe_core_v + !fe_core_omega + !fe_core_omega_div_omega_crit + !fe_core_k + + !## neuton rich core + neutron_rich_core_mass + !neutron_rich_core_radius + !neutron_rich_core_lgT + !neutron_rich_core_lgRho + !neutron_rich_core_L + !neutron_rich_core_v + !neutron_rich_core_omega + !neutron_rich_core_omega_div_omega_crit + !neutron_rich_core_k + + !## envelope + + !envelope_mass ! = star_mass - he_core_mass + !envelope_fraction_left ! = envelope_mass / (initial_mass - he_core_mass) + + !h_rich_layer_mass ! = star_mass - he_core_mass + !he_rich_layer_mass ! = he_core_mass - c_core_mass + !co_rich_layer_mass + +!---------------------------------------------------------------------------------------------- + +!# timescales + + !dynamic_timescale ! dynamic timescale (seconds) -- estimated by 2*pi*sqrt(r^3/(G*m)) + kh_timescale ! kelvin-helmholtz timescale (years) + !mdot_timescale ! star_mass/abs(star_mdot) (years) + !kh_div_mdot_timescales ! kh_timescale/mdot_timescale + !nuc_timescale ! nuclear timescale (years) -- proportional to mass divided by luminosity + + !dt_cell_collapse ! min time for any cell to collapse at current velocities + !dt_div_dt_cell_collapse + + !dt_div_max_tau_conv ! dt/ maximum conv timescale + !dt_div_min_tau_conv ! dt/ minimum conv timescale + + + !min_dr_div_cs ! min over all cells of dr/csound (seconds) + !min_dr_div_cs_k ! location of min + !log_min_dr_div_cs ! log10 min dr_div_csound (seconds) + !min_dr_div_cs_yr ! min over all cells of dr/csound (years) + !log_min_dr_div_cs_yr ! log10 min dr_div_csound (years) + !dt_div_min_dr_div_cs + !log_dt_div_min_dr_div_cs + + !min_t_eddy ! minimum value of scale_height/conv_velocity + +!---------------------------------------------------------------------------------------------- + +!# conditions at or near the surface of the model + + !## conditions at the photosphere + effective_T + !Teff + log_Teff ! log10 effective temperature + ! Teff is calculated using Stefan-Boltzmann relation L = 4 pi R^2 sigma Teff^4, + ! where L and R are evaluated at the photosphere (tau_factor < 1) + ! or surface of the model (tau_factor >= 1) when photosphere is not inside the model. + + !photosphere_black_body_T + !photosphere_cell_T ! temperature at model location closest to the photosphere, not necessarily Teff + !photosphere_cell_log_T + !photosphere_cell_density + !photosphere_cell_log_density + !photosphere_cell_opacity + !photosphere_cell_log_opacity + !photosphere_L ! Lsun units + !photosphere_log_L ! Lsun units + !photosphere_r ! Rsun units + !photosphere_log_r ! Rsun units + !photosphere_m ! Msun units + !photosphere_v_km_s + !photosphere_cell_k + !photosphere_column_density + !photosphere_csound + !photosphere_log_column_density + !photosphere_opacity + !photosphere_v_div_cs + !photosphere_xm + !photosphere_cell_free_e + !photosphere_cell_log_free_e + !photosphere_logg + !photosphere_T + + !## conditions at or near the surface of the model (outer edge of outer cell) + + luminosity ! luminosity in Lsun units + !luminosity_ergs_s ! luminosity in cgs units + log_L ! log10 luminosity in Lsun units + !log_L_ergs_s ! log10 luminosity in cgs units + radius ! Rsun + log_R ! log10 radius in Rsun units + !radius_cm + !log_R_cm + + log_g ! log10 gravity + !gravity + !log_Ledd + log_L_div_Ledd ! log10(L/Leddington) + lum_div_Ledd + !log_surf_optical_depth + !surface_optical_depth + + !log_surf_cell_opacity ! old name was log_surf_opacity + !log_surf_cell_P ! old name was log_surf_P + !log_surf_cell_pressure ! old name was log_surf_pressure + !log_surf_cell_density ! old name was log_surf_density + !log_surf_cell_temperature ! old name was log_surf_temperature + !surface_cell_temperature ! old name was surface_temperature + !log_surf_cell_z ! old name was log_surf_z + !surface_cell_entropy ! in units of kerg per baryon + ! old name was surface_entropy + + !v_surf ! (cm/s) + v_surf_km_s ! (km/s) + v_div_csound_surf ! velocity divided by sound speed at outermost grid point + !v_div_csound_max ! max value of velocity divided by sound speed at face + !v_div_vesc + !v_phot_km_s + !v_surf_div_escape_v + + !v_surf_div_v_kh ! v_surf/(photosphere_r/kh_timescale) + + surf_avg_j_rot + surf_avg_omega + surf_avg_omega_crit + surf_avg_omega_div_omega_crit + surf_avg_v_rot ! km/sec rotational velocity at equator + surf_avg_v_crit ! critical rotational velocity at equator + surf_avg_v_div_v_crit + surf_avg_Lrad_div_Ledd + !surf_avg_logT + !surf_avg_logRho + !surf_avg_opacity + + ! Gravity Darkening, reports the surface averaged L/Lsun and Teff (K) caused by + ! gravity darkening in rotating stars. Based on the model of Espinosa Lara & Rieutord (2011) + ! 'polar' refers to the line of sight being directed along the rotation axis of the star + ! 'equatorial' refers to the line of sight coincident with the stellar equator + !grav_dark_L_polar !Lsun + !grav_dark_Teff_polar !K + !grav_dark_L_equatorial !Lsun + !grav_dark_Teff_equatorial !K + + !surf_escape_v ! cm/s + + !v_wind_Km_per_s ! Km/s + ! = 1d-5*s% opacity(1)*max(0d0,-s% mstar_dot)/ & + ! (4*pi*s% photosphere_r*Rsun*s% tau_base) + ! Lars says: + ! wind_mdot = 4*pi*R^2*rho*v_wind + ! tau = integral(opacity*rho*dr) from R to infinity + ! so tau = opacity*wind_mdot/(4*pi*R*v_wind) at photosphere + ! or v_wind = opacity*wind_mdot/(4*pi*R*tau) at photosphere + + !rotational_mdot_boost ! factor for increase in mass loss mdot due to rotation + log_rotational_mdot_boost ! log factor for increase in mass loss mdot due to rotation + !surf_r_equatorial_div_r_polar + !surf_r_equatorial_div_r + !surf_r_polar_div_r + +!---------------------------------------------------------------------------------------------- + +!# conditions near center + + log_center_T ! temperature + log_center_Rho ! density + !log_center_P ! pressure + + ! shorter names for above + log_cntr_P + log_cntr_Rho + log_cntr_T + + center_T ! temperature + center_Rho ! density + !center_P ! pressure + + !center_degeneracy ! the electron chemical potential in units of k*T + !center_gamma ! plasma interaction parameter + center_mu + center_ye + center_abar + !center_zbar + + !center_eps_grav + + !center_non_nuc_neu + !center_eps_nuc + !d_center_eps_nuc_dlnT + !d_center_eps_nuc_dlnd + !log_center_eps_nuc + + center_entropy ! in units of kerg per baryon + !max_entropy ! in units of kerg per baryon + !fe_core_infall + !non_fe_core_infall + !non_fe_core_rebound + !max_infall_speed + + !compactness_parameter ! (m/Msun)/(R(m)/1000km) for m = 2.5 Msun + !compactness + !m4 ! Mass co-ordinate where entropy=4 + ! mu4 is sensitive to the choice of how much dm/dr you average over, thus we average dm and dr over M(entropy=4) and M(entropy=4)+0.3Msun + !mu4 ! dM(Msun)/dr(1000km) where entropy=4 + + + center_omega + center_omega_div_omega_crit + +!---------------------------------------------------------------------------------------------- + +!# abundances + + !species ! size of net + + !## mass fractions near center + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_center_abundances + !add_log_center_abundances + + ! individual central mass fractions (as many as desired) + center h1 + center he4 + center c12 + center o16 + + ! individual log10 central mass fractions (as many as desired) + !log_center h1 + !log_center he4 + ! etc. + + + !## mass fractions near surface + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_surface_abundances + !add_log_surface_abundances + + ! individual surface mass fractions (as many as desired) + surface h1 + surface he4 + surface c12 + surface o16 + ! etc. + + ! individual log10 surface mass fractions (as many as desired) + + !log_surface h1 + !log_surface he4 + + + !## mass fractions for entire star + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_average_abundances + !add_log_average_abundances + + ! individual average mass fractions (as many as desired) + !average h1 + !average he4 + ! etc. + + ! individual log10 average mass fractions (as many as desired) + !log_average h1 + !log_average he4 + ! etc. + + + !## mass totals for entire star (in Msun units) + + ! the following controls automatically add columns for all of the isos that are in the current net + !add_total_mass + !add_log_total_mass + + ! individual mass totals for entire star (as many as desired) + total_mass h1 + total_mass he4 + ! etc. + + ! individial log10 mass totals for entire star (in Msun units) + !log_total_mass h1 + !log_total_mass he4 + ! etc. + +!---------------------------------------------------------------------------------------------- + +!# info at specific locations + + !## info at location of max temperature + !max_T + log_max_T + + +!---------------------------------------------------------------------------------------------- + +!# information about shocks + + !## info about outermost outward moving shock + ! excluding locations with q > max_q_for_outer_mach1_location + ! returns values at location of max velocity + !shock_mass ! baryonic (Msun) + !shock_mass_gm ! baryonic (grams) + !shock_q + !shock_radius ! (Rsun) + !shock_radius_cm ! (cm) + !shock_velocity + !shock_csound + !shock_v_div_cs + !shock_lgT + !shock_lgRho + !shock_lgP + !shock_gamma1 + !shock_entropy + !shock_tau + !shock_k + !shock_pre_lgRho + +!---------------------------------------------------------------------------------------------- + +!# asteroseismology + + !delta_nu ! large frequency separation for p-modes (microHz) + ! 1e6/(seconds for sound to cross diameter of star) + !delta_Pg ! g-mode period spacing for l=1 (seconds) + ! sqrt(2) pi^2/(integral of brunt_N/r dr) + !log_delta_Pg + !nu_max ! estimate from scaling relation (microHz) + ! nu_max = nu_max_sun * M/Msun / ((R/Rsun)^2 (Teff/astero_Teff_sun)^0.5) + !nu_max_3_4th_div_delta_nu ! nu_max^0.75/delta_nu + !acoustic_cutoff ! 0.5*g*sqrt(gamma1*rho/P) at surface + !acoustic_radius ! integral of dr/csound (seconds) + !ng_for_nu_max ! = 1 / (nu_max*delta_Pg) + ! period for g-mode with frequency nu_max = nu_max_ng*delta_Pg + !gs_per_delta_nu ! delta_nu / (nu_max**2*delta_Pg) + ! number of g-modes per delta_nu at nu_max + + !int_k_r_dr_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=1 + !int_k_r_dr_2pt0_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=1 + !int_k_r_dr_0pt5_nu_max_Sl1 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=1 + !int_k_r_dr_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=2 + !int_k_r_dr_2pt0_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=2 + !int_k_r_dr_0pt5_nu_max_Sl2 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=2 + !int_k_r_dr_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max, l=3 + !int_k_r_dr_2pt0_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max*2, l=3 + !int_k_r_dr_0pt5_nu_max_Sl3 ! integral of k_r*dr where nu < N < Sl for nu = nu_max/2, l=3 + +!---------------------------------------------------------------------------------------------- + +!# energy information + + total_energy ! at end of step + log_total_energy ! log(abs(total_energy)) + !total_energy_after_adjust_mass ! after mass adjustments + + ! shorter versions of above + !tot_E + !log_tot_E + + + !total_gravitational_energy + !log_total_gravitational_energy ! log(abs(total_gravitational_energy)) + !total_gravitational_energy_after_adjust_mass + + ! shorter versions of above + !tot_PE + !log_tot_PE + + !total_internal_energy + !log_total_internal_energy + !total_internal_energy_after_adjust_mass + + ! shorter versions of above + !tot_IE + !log_tot_IE + + !total_radial_kinetic_energy + !log_total_radial_kinetic_energy + !total_radial_kinetic_energy_after_adjust_mass + + ! shorter versions of above (does not include rot KE) + !tot_KE + !log_tot_KE + + !total_turbulent_energy + !log_total_turbulent_energy + !total_turbulent_energy_after_adjust_mass + !tot_Et + !log_tot_Et + + total_energy_foe + + !tot_IE_div_IE_plus_KE + !total_IE_div_IE_plus_KE + + !total_entropy + !total_eps_grav + + !total_energy_sources_and_sinks ! for this step + !total_nuclear_heating + !total_non_nuc_neu_cooling + !total_irradiation_heating + !total_extra_heating ! extra heat integrated over the model times dt (erg) + !total_WD_sedimentation_heating + + !rel_run_E_err + + rel_E_err + !abs_rel_E_err + log_rel_E_err + + !tot_e_equ_err + !tot_e_err + + + !error_in_energy_conservation ! for this step + ! = total_energy - (total_energy_start + total_energy_sources_and_sinks) + !cumulative_energy_error ! = sum over all steps of abs(error_in_energy_conservation) + !rel_cumulative_energy_error ! = cumulative_energy_error/total_energy + !log_rel_cumulative_energy_error ! = log10 of rel_cumulative_energy_error + log_rel_run_E_err ! shorter name for rel_cumulative_energy_error + + !rel_error_in_energy_conservation ! = error_in_energy_conservation/total_energy + !log_rel_error_in_energy_conservation + + !virial_thm_P_avg + !virial_thm_rel_err + !work_inward_at_center + !work_outward_at_surface + + +!---------------------------------------------------------------------------------------------- + + !# rotation + + !total_angular_momentum + log_total_angular_momentum + !i_rot_total ! moment of inertia + + !total_rotational_kinetic_energy + !log_total_rotational_kinetic_energy + !total_rotational_kinetic_energy_after_adjust_mass + +!---------------------------------------------------------------------------------------------- + +!# velocities + + !avg_abs_v_div_cs + !log_avg_abs_v_div_cs + !max_abs_v_div_cs + !log_max_abs_v_div_cs + + !avg_abs_v + !log_avg_abs_v + !max_abs_v + !log_max_abs_v + + !u_surf + !u_surf_km_s + !u_div_csound_surf + !u_div_csound_max + + !infall_div_cs + +!---------------------------------------------------------------------------------------------- + +!# misc + + !e_thermal ! sum over all zones of Cp*T*dm + + !## eos + !logQ_max ! logQ = logRho - 2*logT + 12 + !logQ_min + gamma1_min + + !## core mixing + !mass_semiconv_core + + !## H-He boundary + + !diffusion_time_H_He_bdy + !temperature_H_He_bdy + + + !## optical depth and opacity + + !one_div_yphot + !log_one_div_yphot + + !log_min_opacity + !min_opacity + + !log_tau_center + + !log_max_tau_conv + !max_tau_conv + !log_min_tau_conv + !min_tau_conv + + !tau_qhse_yrs + + !## other + + !Lsurf_m + !dlnR_dlnM + !h1_czb_mass ! location (in Msun units) of base of 1st convection zone above he core + !kh_mdot_limit + !log_cntr_dr_cm + !min_Pgas_div_P + !surf_c12_minus_o16 ! this is useful for seeing effects of dredge up on AGB + !surf_num_c12_div_num_o16 + + !phase_of_evolution ! Integer mapping to the type of evolution see star_data/public/star_data_def.inc for definitions + + !## MLT++ + !gradT_excess_alpha + !gradT_excess_min_beta + !gradT_excess_max_lambda + + !max_L_rad_div_Ledd + !max_L_rad_div_Ledd_div_phi_Joss + + + !## RTI + !rti_regions + + !## Ni & Co + !total_ni_co_56 + + + !## internal structure constants + + ! this is evaluated assuming a spherical star and does not account for rotation + !apsidal_constant_k2 + + +!---------------------------------------------------------------------------------------------- + +!# accretion + + !k_below_const_q + !q_below_const_q + !logxq_below_const_q + + !k_const_mass + !q_const_mass + !logxq_const_mass + + !k_below_just_added + !q_below_just_added + !logxq_below_just_added + + !k_for_test_CpT_absMdot_div_L + !q_for_test_CpT_absMdot_div_L + !logxq_for_test_CpT_absMdot_div_L + +!---------------------------------------------------------------------------------------------- + +!# Color output + + ! Outputs the bolometric correction (bc) for the star in filter band ``filter'' (case sensitive) + !bc filter + + ! Outputs the absolute magnitude for the star in filter band ``filter'' (case sensitive) + !abs_mag filter + + ! Adds all the bc's to the output + !add_bc + + ! Adds all the absolute magnitudes to the output + !add_abs_mag + + ! Outputs luminosity in filter band ``filter'' (erg s^-1) (case sensitive) + ! lum_band filter + + ! Adds all the filter band luminosities to the output (erg s^-1) + ! add_lum_band + + ! Outputs log luminosity in filter band ``filter'' (log erg s^-1) (case sensitive) + ! log_lum_band filter + + ! Adds all the filter band luminosities to the output (log erg s^-1) + ! add_log_lum_band + +!---------------------------------------------------------------------------------------------- + +!# RSP + + !rsp_DeltaMag ! absolute magnitude difference between minimum and maximum light (mag) + !rsp_DeltaR ! R_max - R_min difference in the max and min radius (Rsun) + !rsp_GREKM ! fractional growth of the kinetic energy per pulsation period ("nonlinear growth rate") - see equation 5 in MESA5 + !rsp_num_periods ! Count of the number of pulsation cycles completed + !rsp_period_in_days ! Running period, ie., period between two consecutive values of R_max (days) + !rsp_phase ! Running pulsation phase for a cycle + +!---------------------------------------------------------------------------------------------- +!# debugging + + !## retries + num_retries ! total during the run + + !## solver iterations + + num_iters ! same as num_solver_iterations + num_solver_iterations ! iterations at this step + !total_num_solver_iterations ! total iterations during the run + !avg_num_solver_iters + + !rotation_solver_steps + + !diffusion_solver_steps + !diffusion_solver_iters + + !avg_setvars_per_step + !avg_skipped_setvars_per_step + !avg_solver_setvars_per_step + + !burn_solver_maxsteps + + !total_num_solver_calls_converged + !total_num_solver_calls_failed + !total_num_solver_calls_made + !total_num_solver_relax_calls_converged + !total_num_solver_relax_calls_failed + !total_num_solver_relax_calls_made + !total_num_solver_relax_iterations + + !total_step_attempts + !total_step_redos + !total_step_retries + !total_steps_finished + !total_steps_taken + + !TDC_num_cells + + !## Relaxation steps + !total_relax_step_attempts + !total_relax_step_redos + !total_relax_step_retries + !total_relax_steps_finished + !total_relax_steps_taken + + !## conservation during mesh adjust + !log_mesh_adjust_IE_conservation + !log_mesh_adjust_KE_conservation + !log_mesh_adjust_PE_conservation + + !## amr + !num_hydro_merges + !num_hydro_splits + + !## timing + !elapsed_time ! time since start of run (seconds) + + !## Extras + burning_regions 80 + mixing_regions 80 diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist1 b/star/dev_cases_massive_stars/14Msun_donor/inlist1 new file mode 100644 index 000000000..e06a5a64f --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/inlist1 @@ -0,0 +1,51 @@ +&star_job + +read_extra_star_job_inlist(1) = .true. +extra_star_job_inlist_name(1) = 'inlist_both' + +save_model_filename = 'donor_final.mod' + +!pgstar_flag = .true. + +/ ! end of star_job namelist + +&eos + +read_extra_eos_inlist(1) = .true. +extra_eos_inlist_name(1) = 'inlist_both' + +/ ! end of eos namelist + + +&kap + +read_extra_kap_inlist(1) = .true. +extra_kap_inlist_name(1) = 'inlist_both' + +/ ! end of kap namelist + + +&controls + +read_extra_controls_inlist(1) = .true. +extra_controls_inlist_name(1) = 'inlist_both' + +! set this to .true. to continue post-C depl +! otherwise see stopping condition in inlist_both or run_star_extras.f +x_logical_ctrl(1) = .true. + +log_directory = 'LOGS1' + +/ ! end of controls namelist + + +&pgstar + +read_extra_pgstar_inlist(1) = .true. +extra_pgstar_inlist_name(1) = 'inlist_pgstar' + +! filenames to avoid overlap with accretor: not needed if using pgbinary +! HR_file_prefix = 'hr_donor_' +! Grid2_file_prefix = 'donor_' + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist2 b/star/dev_cases_massive_stars/14Msun_donor/inlist2 new file mode 100644 index 000000000..3545fff4d --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/inlist2 @@ -0,0 +1,68 @@ +&star_job + +read_extra_star_job_inlist(1) = .true. +extra_star_job_inlist_name(1) = 'inlist_both' + +save_model_filename = 'accretor_final.mod' + +!pgstar_flag = .true. + +/ ! end of star_job namelist + +&eos + +read_extra_eos_inlist(1) = .true. +extra_eos_inlist_name(1) = 'inlist_both' + +/ ! end of eos namelist + + +&kap + +read_extra_kap_inlist(1) = .true. +extra_kap_inlist_name(1) = 'inlist_both' + +/ ! end of kap namelist + + +&controls + +read_extra_controls_inlist(1) = .true. +extra_controls_inlist_name(1) = 'inlist_both' + +! extra_terminal_output_file = 'log2' +log_directory = 'LOGS2' + + +! If doing accretor star models without rotation +! the settings below will enforce non-conservative evolution +! If also having rotation, these will help with convergence +! assuming rotationally-limited accretion efficienty + +! max_mdot_redo_cnt = 100 +! min_years_dt_for_redo_mdot = 1d-2 +! !surf_w_div_w_crit_limit = 0.95d0 +! !surf_w_div_w_crit_tol = 0.05d0 +! rotational_mdot_boost_fac = 1.2d10 +! rotational_mdot_kh_fac = 1d10 +! mdot_revise_factor = 1.2 +! implicit_mdot_boost = 0.1 +! max_mdot_jump_for_rotation = 10d0 + +!max_num_profile_models = 100000 +!profile_interval = 100 +!photo_interval = 500 + +/ ! end of controls namelist + + +&pgstar + +read_extra_pgstar_inlist(1) = .true. +extra_pgstar_inlist_name(1) = 'inlist_pgstar' + +! ! filenames to avoid overlap with accretor +! HR_file_prefix = 'hr_accretor_' +! Grid2_file_prefix = 'accretor_' + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist_binary b/star/dev_cases_massive_stars/14Msun_donor/inlist_binary new file mode 100644 index 000000000..879dbd675 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/inlist_binary @@ -0,0 +1,85 @@ +&binary_job + +inlist_names(1) = 'inlist1' +inlist_names(2) = 'inlist2' + +evolve_both_stars = .false. +pgbinary_flag = .true. + +/ ! end of binary_job namelist + +&binary_controls + +m1 = 15.0d0 ! donor mass in Msun +m2 = 12.0d0 ! companion mass in Msun +initial_period_in_days = 20.0d0 + +limit_retention_by_mdot_edd = .false. ! this is for BH secondaries +mass_transfer_alpha = 0.0d0 +mass_transfer_beta = 0.0d0 +mass_transfer_delta = 0.0d0 +mass_transfer_gamma = 0.0d0 + +mdot_scheme = "Kolb" ! !"Ritter" ! +initial_change_factor = 1.2d0 +change_factor_fraction = 0.8d0 +min_mdot_for_implicit = 1d-10 +implicit_scheme_tiny_factor = 1d-6 +! report_rlo_solver_progress = .true. +do_tidal_sync = .true. +do_j_accretion = .false. ! if .true. use A.3.3 of de Mink et al. 2013, ApJ, 764, 166 +! be 100% sure MB is always off +do_jdot_mb = .false. +do_jdot_missing_wind = .true. + +! ! timestep controls +varcontrol_case_a = 1d-4 +varcontrol_case_b = 2.5d-4 +varcontrol_ms = 1d-3 +varcontrol_post_ms = 5d-3 + +fr = 1d-2 +fr_limit = 0.025d0 +fr_dt_limit = 10d0 +fa = 0.01d0 +fa_hard = 0.02d0 +fm = 0.01d0 +fm_limit = 1d-1 +fj = 0.001d0 +fj_hard = 1d-2 +dt_softening_factor = 0.1d0 + +implicit_scheme_tolerance = 2.5d-4 +max_tries_to_achieve = 200 +min_change_factor = 1.02d0 +max_change_factor = 1.2d0 +initial_change_factor = 1.2d0 +change_factor_fraction = 0.8d0 +implicit_lambda = 0.4d0 + +min_mdot_for_implicit = 1d-10 + +sync_mode_1 = "Uniform" +sync_type_1 = "Hut_rad" +Ftid_1 = 1 +sync_mode_2 = "Uniform" +sync_type_2 = "Hut_rad" +Ftid_2 = 1 +do_initial_orbit_sync_1 = .true. +do_initial_orbit_sync_2 = .true. + +accretor_overflow_terminate = 2d0 + +photo_interval = 200 +!photo_digits = 8 +append_to_star_history = .false. + +! terminal output +write_header_frequency = 100 !1 +history_interval = 1 +terminal_interval = 10 + + + + +/ ! end of binary_controls namelist diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist_both b/star/dev_cases_massive_stars/14Msun_donor/inlist_both new file mode 100644 index 000000000..b08e7a8f6 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/inlist_both @@ -0,0 +1,315 @@ +&star_job + +! local directories data: this is done to use some custom rates, see rate_tables/rate_list.txt +! Specifically we adopt the median c12(a,g)o16 rate from deBoer+17, other estimates +! are available in $MESA_DIR/data/rates_data/rate_tables +rate_tables_dir = './rate_tables' +rates_cache_dir = './rates_cache' +eosDT_cache_dir = './eosDT_cache' +kap_cache_dir = './kap_cache' + +! messages and info +echo_at_start = 'MESA model has begun running' +echo_at_end = 'MESA model has finished running' +show_retry_counts_when_terminate = .true. + +show_log_description_at_start = .false. +show_timestep_limit_counts_when_terminate = .true. +save_model_when_terminate = .false. + +! initial model: we do not generate a pre_ms model here. +load_saved_model = .false. +! load_model_filename = 'zams.mod' + +! change initial Z but don't relax. +change_initial_Z = .true. +new_Z = 0.02d0 + +! network +change_net = .true. +change_initial_net = .true. +new_net_name = 'approx21_cr60_plus_co56.net' ! "approx21_plus_co56.net" ! "mesa_128.net" ! 'mesa_206.net' +!dump_missing_metals_into_heaviest = .true. + +! we want to use weaklib all the time, so we toggle at lowT. +T9_weaklib_full_off = 0.0001d0 +T9_weaklib_full_on = 0.00011d0 + +change_v_flag = .true. +new_v_flag = .true. + +set_initial_age = .true. +initial_age = 0 + +set_initial_model_number = .true. +initial_model_number = 0 + +! rotation +! change_rotation_flag = .true. +! change_initial_rotation_flag = .true. +! new_rotation_flag = .true. + +! set_omega_div_omega_crit = .true. +! set_initial_omega_div_omega_crit = .true. +! new_omega_div_omega_crit = 0 + +show_retry_counts_when_terminate = .true. +show_timestep_limit_counts_when_terminate = .true. + +pgstar_flag = .true. +save_pgstar_files_when_terminate = .true. + +/ ! end of star_job namelist + + +&eos + +/ ! end of eos namelist + + +&kap + +! MESA offers newer opacity tables for differing abundances, see kap controls. +kap_file_prefix = 'gs98' ! 'oplib_gs98' +kap_CO_prefix = 'gs98_co' ! 'gs98_co' +kap_lowT_prefix = 'lowT_fa05_gs98' +use_Type2_opacities = .true. +Zbase = 0.02 + +! Zbase set in inlist_extra +/ + +&controls + +! set approx22 fake factor to reproduce Ye ~ 0.43-0.44 at CC. +fe56ec_fake_factor = 1d-4 +min_T_for_fe56ec_fake_factor = 3d9 + +! to stop at C depletion +x_logical_ctrl(2) = .true. +max_model_number = 50000 ! if true above, and the binary detaches, this will be overwritten in run_star_extras.f90 +redo_limit = 300 + + +! atmosphere +! 1 for isotropic radiation field, and 1.5 for radial radiation field? +Pextra_factor = 2 ! <= 1.5 to stay physical +atm_option = 'T_tau' +atm_T_tau_relation = 'Eddington' +atm_T_tau_opacity = 'fixed' ! next best is 'iterated' + +!wind +hot_wind_scheme = 'Dutch' +cool_wind_RGB_scheme = 'Dutch' +cool_wind_AGB_scheme = 'Dutch' +Dutch_scaling_factor = 1.0 ! this is LARGE, should try <0.8 (probably 0.5-0.3) +max_T_center_for_any_mass_loss = 1.1d9 + +! if doing rotation, uncomment below for rotational boost +! mdot_omega_power = 0.43d0 +! max_tries_for_implicit_wind = 10 + +! mlt +MLT_option = 'TDC' +mixing_length_alpha = 1.5d0 + +! mixing +use_ledoux_criterion = .true. +alpha_semiconvection = 1.0d0 +thermohaline_coeff = 1.0d0 +semiconvection_option = 'Langer_85 mixing; gradT = gradr' +thermohaline_option = 'Kippenhahn' + +!! superadiabatic convection routines, it's a choice: +! superadiabatic reduction, implicit, new +use_superad_reduction = .true. +superad_reduction_Gamma_limit = 0.5d0 ! default is 0.5d0 +superad_reduction_Gamma_limit_scale = 5d0 +superad_reduction_Gamma_inv_scale = 5d0 +superad_reduction_limit = -1d0 +superad_reduction_diff_grads_limit = 1d-2 ! default is 1d-3 + +! MLT ++, explicit, well tested +okay_to_reduce_gradT_excess = .false. +gradT_excess_f1 = 1d-4 +gradT_excess_f2 = 1d-2 +gradT_excess_lambda1 = -1d0 ! full on + +! drag to prevent the development of radial pulses. +use_drag_energy = .false. +drag_coefficient = 0.9d0 +min_q_for_drag = 0.8d0 + +! overshoot controls , lowest (#) take priority +overshoot_scheme(1) = 'exponential' +overshoot_zone_type(1) = 'any' +overshoot_zone_loc(1) = 'core' +overshoot_bdy_loc(1) = 'any' +overshoot_f(1) = 4.15d-2 +overshoot_f0(1) = 0.008d0 + +overshoot_scheme(2) = 'exponential' +overshoot_zone_type(2) = 'any' +overshoot_zone_loc(2) = 'any' +overshoot_bdy_loc(2) = 'any' +overshoot_f(2) = 0.005d0 +overshoot_f0(2) = 0.001d0 + +! Alternative overshooting: step function similar to Brott+11 +! overshoot_scheme(1) = 'step' +! overshoot_zone_type(1) = 'any' +! overshoot_zone_loc(1) = 'core' +! overshoot_bdy_loc(1) = 'any' +! overshoot_f(1) = 0.345d0 +! overshoot_f0(1) = 0.01d0 + +dX_nuc_drop_limit = 1d-2 ! 1d-3 for production +dX_nuc_drop_limit_at_high_T = 2d-2 ! 1d-2 for production ! for center logT > 9.45 +dX_nuc_drop_min_X_limit = 1d-4 !1d-3 ! try decreasing to 1d-4 or 1d-5 in a production run +dX_nuc_drop_max_A_limit = 70 ! try increasing beyond 60 in a big network run +dX_nuc_drop_hard_limit = 1d99 + +delta_Ye_highT_limit = 1d-3 + +! Ignore cumulative energy residuals for the entire run to avoid premature exits +hard_limit_for_rel_error_in_energy_conservation = -1d0 +! MESA will still warn if it grows above ~1% +max_abs_rel_run_E_err = 1d-2 ! maximum energy error before model is terminated. + + +! The following controls below for rotation are untested in these inlists +! but they should work in theory, if one turns them on and turns on rotation +! in starjob. +! ! rotation and mixing: +! ! rotation is initialized by orbital synchronization +! am_nu_ST_factor = 1.0 !! 1.0 !default +! D_visc_factor = 0.0 +! am_nu_SH_factor = 0.0 +! D_ST_factor = 0.0 +! D_SH_factor = 0.0 +! D_GSF_factor = 1.0 +! D_ES_factor = 1.0 +! D_SSI_factor = 1.0 +! D_DSI_factor = 1.0 +! am_D_mix_factor = 0.03333d0 +! am_gradmu_factor = 0.1d0 +! premix_omega = .true. +! remove_small_D_limit = 1d-10 +! mixing_D_limit_for_log = 1d-10 +! max_mdot_jump_for_rotation = 1d99 + +! max_mdot_redo_cnt = 100 +! min_years_dt_for_redo_mdot = 1d-2 +! !surf_w_div_w_crit_limit = 0.95d0 +! !surf_w_div_w_crit_tol = 0.05d0 +! rotational_mdot_boost_fac = 1.2d10 +! rotational_mdot_kh_fac = 1d10 +! mdot_revise_factor = 1.2 +! implicit_mdot_boost = 0.1 +! max_mdot_jump_for_rotation = 10d0 + +! mesh +max_dq = 5d-3!1d-3 ! lower for production runs +max_allowed_nz = 50000 +mesh_delta_coeff = 1.5d0 ! 1.0 for a production. +mesh_delta_coeff_for_highT = 1.5d0 !1.5 ! try 1.0 or below in production run +logT_max_for_standard_mesh_delta_coeff = 9.0 +logT_min_for_highT_mesh_delta_coeff = 9.5 + +! timesteps +time_delta_coeff = 1d0 +min_timestep_limit = 1e-20 !sec ! 1e-10 !to be able to reach CC +varcontrol_target = 1d-3 !1d-4 +max_timestep_factor = 1.05d0 +retry_hold = 2 +min_J_div_delta_J = 5d0 + +! time step resolution on fuel depletion +delta_lg_XH_cntr_limit = 0.01d0 +delta_lg_XH_cntr_max = 0.0d0 +delta_lg_XH_cntr_min = -4.0d0 +delta_lg_XH_cntr_hard_limit = 0.02d0 +delta_lg_XHe_cntr_limit = 0.01d0 +delta_lg_XHe_cntr_max = 0.0d0 +delta_lg_XHe_cntr_min = -4.0d0 +delta_lg_XHe_cntr_hard_limit = 0.02d0 +delta_lg_XC_cntr_limit = 0.02d0 +delta_lg_XC_cntr_max = 0.2d0 +delta_lg_XC_cntr_min = -2.0d0 ! -3.0d0 +delta_lg_XC_cntr_hard_limit = 0.02d0 +delta_lg_XO_cntr_limit = 0.01d0 +delta_lg_XO_cntr_max = 0.0d0 +delta_lg_XO_cntr_min = -3.0d0 +delta_lg_XO_cntr_hard_limit = 0.02d0 + +delta_lgL_limit = 0.01d0 +delta_lgL_hard_limit = 0.1d0 + +delta_lgTeff_limit = 0.008d0 +delta_lgTeff_hard_limit = 0.01d0 + + +! Recommend decreasing all three Rho, T, Tmax +! to 1d-3 or lower in production runs +delta_lgRho_cntr_limit = 2.5d-3 !0.03 ! 1d-3 +delta_lgRho_cntr_hard_limit = 0.1 +delta_lgRho_limit = 0.1 + +delta_lgT_cntr_limit_only_after_near_zams = .true. +delta_lgT_cntr_limit = 2d-3 !0.002 ! 1d-3 +delta_lgT_cntr_hard_limit = 0.1 + +delta_lgT_max_limit_only_after_near_zams = .true. +delta_lgT_max_limit = 2d-3 !0.002 ! 1d-3 +delta_lgT_max_hard_limit = 0.1 + +delta_lgT_limit = 0.025d0 ! default 0.5 +delta_lgRho_limit = 0.5d0 ! default 1.0 + +delta_lgL_He_limit = 0.01d0 +delta_lgL_He_hard_limit = 0.025d0 +delta_HR_ds_Teff = 1d-5 + +delta_lgL_H_limit = 0.01d0 +delta_lgL_H_hard_limit = 0.025d0 + +! spatial increase resolution during He core burning +!T_function2_weight = 100d0 +!T_function2_param = 2.4d8 + +! increase resolution for omega +! omega_function_weight = 100d0 + +! Jim Fuller's suggestion +set_min_D_mix = .true. +min_D_mix =1d-2 + +! solver controls +energy_eqn_option = 'dedt' +use_gold2_tolerances = .true. +gold2_tol_max_residual2 = 5d-7 +gold2_tol_max_residual3 = 5d-4 + +! gold solver +use_gold_tolerances = .true. +gold_tol_max_residual2 = 5d-4 +!gold_tol_max_residual3 = 1d-4 ! Default in controls is 1d-5 +tol_correction_high_T_limit = 1d9 ! Switch to lower tol at high temp for large Mass +solver_iters_timestep_limit = 20 +gold_solver_iters_timestep_limit = 20 +iter_for_resid_tol2 = 10 + +convergence_ignore_equL_residuals = .true. +make_gradr_sticky_in_solver_iters = .true. +xa_scale = 1d-5 +iter_for_resid_tol2 = 10 + +! output +photo_interval = -1 ! photos are saved from inlist_binary +profile_interval = 1000 +max_num_profile_models = 52 +history_interval = 1 +write_header_frequency = 10 +terminal_interval = 10 + +/ ! end of controls namelist diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist_pgbinary b/star/dev_cases_massive_stars/14Msun_donor/inlist_pgbinary new file mode 100644 index 000000000..5cee49060 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/inlist_pgbinary @@ -0,0 +1,106 @@ +&pgbinary + +! this only updates the right panel for the binary, not the star panels +pgbinary_interval = 10 + +!pause = .true. + +pgbinary_age_disp = 1.7 +pgbinary_age_fjust = -0.5 +pgbinary_model_disp = 1.7 +pgbinary_model_fjust = 1.4 + +pgbinary_grid_title_disp = 0.2 +pgbinary_title_disp = 0.2 + + +Orbit_win_flag = .true. +Orbit_win_width = 8 + + +Grid1_win_flag = .true. + +Grid1_win_width = 13 +Grid1_win_aspect_ratio = 0.58 + +Grid1_xleft = 0.0 +Grid1_xright = 1.0 +Grid1_ybot = 0.0 +Grid1_ytop = 0.95 +Grid1_title = '' + +Grid1_num_cols = 5 +Grid1_num_rows = 3 +Grid1_num_plots = 4 + +Grid1_plot_name(1) = 'Star1' +Grid1_plot_col(1) = 1 +Grid1_plot_colspan(1) = 2 +Grid1_plot_row(1) = 1 +Grid1_plot_rowspan(1) = 3 +Grid1_plot_pad_left(1) = 0.02 +Grid1_plot_pad_right(1) = 0.02 +Grid1_plot_pad_bot(1) = 0.01 +Grid1_plot_pad_top(1) = 0.00 +Grid1_txt_scale_factor(1) = 0.9 +Star1_plot_name = 'Grid2' +do_star1_box = .true. +star1_box_pad_left = -0.02 +star1_box_pad_right = 0.02 +star1_box_pad_bot = 0.0 +star1_box_pad_top = 0.001 + +Grid1_plot_name(2) = 'Star2' +Grid1_plot_col(2) = 3 +Grid1_plot_colspan(2) = 2 +Grid1_plot_row(2) = 1 +Grid1_plot_rowspan(2) = 3 +Grid1_plot_pad_left(2) = 0.02 +Grid1_plot_pad_right(2) = 0.02 +Grid1_plot_pad_bot(2) = 0.01 +Grid1_plot_pad_top(2) = 0.00 +Grid1_txt_scale_factor(2) = 0.9 +Star2_plot_name = 'Grid2' +do_star2_box = .true. +star2_box_pad_left = -0.018 +star2_box_pad_right = 0.02 +star2_box_pad_bot = 0.0 +star2_box_pad_top = 0.001 + +Grid1_plot_name(3) = 'history_panels1' +Grid1_plot_col(3) = 5 +Grid1_plot_colspan(3) = 1 +Grid1_plot_row(3) = 2 +Grid1_plot_rowspan(3) = 2 +Grid1_plot_pad_left(3) = 0.04 +Grid1_plot_pad_right(3) = 0.04 +Grid1_plot_pad_bot(3) = 0.04 +Grid1_plot_pad_top(3) = 0.00 +Grid1_txt_scale_factor(3) = 0.4 + +History_panels1_title = '' +History_panels1_num_panels = 2 +History_panels1_xaxis_name = 'model_number' +History_panels1_yaxis_name(1) = 'rl_relative_overflow_1' +History_panels1_other_yaxis_name(1) = 'rl_relative_overflow_2' +History_panels1_yaxis_name(2) = 'period_days' +History_panels1_other_yaxis_name(2) = 'lg_mtransfer_rate' +History_panels1_other_ymin(2) = -10 +History_panels1_max_width = -1 + +Grid1_plot_name(4) = 'Orbit' +Grid1_plot_col(4) = 5 +Grid1_plot_colspan(4) = 1 +Grid1_plot_row(4) = 1 +Grid1_plot_rowspan(4) = 1 +Grid1_plot_pad_left(4) = 0.04 +Grid1_plot_pad_right(4) = 0.04 +Grid1_plot_pad_bot(4) = 0.03 +Grid1_plot_pad_top(4) = 0.00 +Grid1_txt_scale_factor(4) = 0.4 + +Grid1_file_flag = .true. +Grid1_file_interval = 10 +Grid1_file_width = 27 +Grid1_file_aspect_ratio = -1 +/ ! end of pgbinary namelist diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist_pgstar b/star/dev_cases_massive_stars/14Msun_donor/inlist_pgstar new file mode 100644 index 000000000..deb0ded08 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/inlist_pgstar @@ -0,0 +1,356 @@ +&pgstar + +! this updates the panels for each star but not the binary panel on the right, see inlist_pgbinary +pgstar_interval = 10 +!pause = .true. + +pgstar_age_disp = 2.5 +pgstar_model_disp = 2.5 + +!### scale for axis labels +pgstar_xaxis_label_scale = 1. +pgstar_left_yaxis_label_scale = 1. +pgstar_right_yaxis_label_scale = 1. + +Grid2_num_cols = 4 ! divide plotting region into this many equal width cols +Grid2_num_rows = 8 ! divide plotting region into this many equal height rows + +Grid2_num_plots = 7 ! <= 10 + +Grid2_plot_name(1) = 'Profile_Panels1' +Grid2_plot_row(1) = 1 ! number from 1 at top +Grid2_plot_rowspan(1) = 2 ! plot spans this number of rows +Grid2_plot_col(1) = 1 ! number from 1 at left +Grid2_plot_colspan(1) = 2 ! plot spans this number of columns +Grid2_plot_pad_left(1) = 0.01 ! fraction of full window width for padding on left +Grid2_plot_pad_right(1) = 0.05 ! fraction of full window width for padding on right +Grid2_plot_pad_top(1) = 0.01 ! fraction of full window height for padding at top +Grid2_plot_pad_bot(1) = 0.02 ! fraction of full window height for padding at bottom +Grid2_txt_scale_factor(1) = 0.7 ! multiply txt_scale for subplot by this + +Profile_Panels1_title = '' +Profile_Panels1_num_panels = 1 +Profile_Panels1_xaxis_name = 'zone'!'mass' ! 'logtau' +Profile_Panels1_yaxis_name(1) = 'vel_km_per_s' !'vel_km_per_s' ! 'opacity' +Profile_Panels1_other_yaxis_name(1) = 'logdq'!'v_div_csound' !'conv_L_div_L' +Profile_Panels1_xaxis_reversed = .true. ! .false. +Profile_Panels1_dymin(1) = 0.05 +Profile_Panels1_other_dymin(1) = 0.01 + + +!Profile_Panels1_other_yaxis_name(2) = 'Y_mass_fraction_He' +! Profile_Panels1_yaxis_name(3) = 'log' +! Profile_Panels1_other_yaxis_name(3) = 'ft_rot' + + +Grid2_plot_name(2) = 'Kipp' +Grid2_plot_row(2) = 3 ! number from 1 at top +Grid2_plot_rowspan(2) = 3 ! plot spans this number of rows +Grid2_plot_col(2) = 1 ! number from 1 at left +Grid2_plot_colspan(2) = 2 ! plot spans this number of columns +Grid2_plot_pad_left(2) = 0.01 ! fraction of full window width for padding on left +Grid2_plot_pad_right(2) = 0.05 ! fraction of full window width for padding on right +Grid2_plot_pad_top(2) = 0.03 ! fraction of full window height for padding at top +Grid2_plot_pad_bot(2) = 0.04 ! fraction of full window height for padding at bottom +Grid2_txt_scale_factor(2) = 0.7 ! multiply txt_scale for subplot by this + + +!------------------------------------------------------------------------------------ + +! Kippenhahn diagram history plot + +Kipp_win_flag = .false. + +! window properties +Kipp_win_width = 16 +Kipp_win_aspect_ratio = 0.75 +Kipp_txt_scale = 0.9 +Kipp_title = '' + +! y axis limits +Kipp_mass_max = -101d0 +Kipp_mass_min = 0 +Kipp_show_mass_boundaries = .true. + +! x axis limits +Kipp_xmax = -101 ! maximum step number. negative means use default. +Kipp_xmin = 0 ! minimum step number. negative means use default. +Kipp_max_width = 2000 ! only used if > 0. causes xmin to move with xmax. + +Kipp_show_mixing = .true. +Kipp_show_burn = .true. +Kipp_show_luminosities = .true. +Kipp_mix_interval = 4 + +! file output +Kipp_file_flag = .false. +Kipp_file_dir = 'kipp_png' +Kipp_file_prefix = 'kipp_' +Kipp_file_interval = 10 ! output when mod(model_number,file_interval)==0 +!Kipp_file_width = -1 ! (inches) negative means use same value as for window +Kipp_file_width = 16 ! (inches) negative means use same value as for window +Kipp_file_aspect_ratio = -1 ! negative means use same value as for window + + +!------------------------------------------------------------------------------------ + + + + + + +!Mixing_title = '' + +Grid2_plot_name(3) = 'TRho_profile' +Grid2_plot_row(3) = 6 ! number from 1 at top +Grid2_plot_rowspan(3) = 2 ! plot spans this number of rows +Grid2_plot_col(3) = 1 ! number from 1 at left +Grid2_plot_colspan(3) = 2 ! plot spans this number of columns +Grid2_plot_pad_left(3) = 0.01 ! fraction of full window width for padding on left +Grid2_plot_pad_right(3) = 0.03 ! fraction of full window width for padding on right +Grid2_plot_pad_top(3) = 0.01 ! fraction of full window height for padding at top +Grid2_plot_pad_bot(3) = 0.02 ! fraction of full window height for padding at bottom +Grid2_txt_scale_factor(3) = 0.7 ! multiply txt_scale for subplot by this + +TRho_Profile_title = '' + +! TRho axis limits +TRho_Profile_xmin = -12.0 +TRho_Profile_xmax = 10.0 +TRho_Profile_ymin = 3.0 +TRho_Profile_ymax = 10.0 + + + +Grid2_plot_name(5) = 'HR' +HR_title = '' +Grid2_plot_row(5) = 6 ! number from 1 at top +Grid2_plot_rowspan(5) = 2 ! plot spans this number of rows +Grid2_plot_col(5) = 3 ! number from 1 at left +Grid2_plot_colspan(5) = 2 ! plot spans this number of columns +Grid2_plot_pad_left(5) = 0.01 ! fraction of full window width for padding on left +Grid2_plot_pad_right(5) = 0.01 ! fraction of full window width for padding on right +Grid2_plot_pad_top(5) = 0.01 ! fraction of full window height for padding at top +Grid2_plot_pad_bot(5) = 0.02 ! fraction of full window height for padding at bottom +Grid2_txt_scale_factor(5) = 0.7 ! multiply txt_scale for subplot by this + +Grid2_plot_name(4) = 'TRho'!'History_Panels1' +Grid2_plot_row(4) = 1 ! number from 1 at top +Grid2_plot_rowspan(4) = 2 ! plot spans this number of rows +Grid2_plot_col(4) = 3 ! number from 1 at left +Grid2_plot_colspan(4) = 2 ! plot spans this number of columns +Grid2_plot_pad_left(4) = 0.01 ! fraction of full window width for padding on left +Grid2_plot_pad_right(4) = 0.01 ! fraction of full window width for padding on right +Grid2_plot_pad_top(4) = 0.01 ! fraction of full window height for padding at top +Grid2_plot_pad_bot(4) = 0.02 ! fraction of full window height for padding at bottom +Grid2_txt_scale_factor(4) = 0.7 ! multiply txt_scale for subplot by this + +History_Panels1_title = '' +History_Panels1_num_panels = 1 +History_Panels1_max_width = -1 +History_Panels1_xaxis_name = 'model_number' + +History_Panels1_yaxis_name(1) = 'surface_h1'!'log_R' +History_Panels1_other_yaxis_name(1) = 'surface_he4'! 'log_L' +History_Panels1_ymin(1) = 0.9 +History_Panels1_ymax(1) = 0 +History_Panels1_other_ymin(1) = 0.9 +History_Panels1_other_ymax(1) = 0 + + +!History_Panels1_yaxis_name(2) = 'surface_h1' +!History_Panels1_other_yaxis_name(2) = 'surface_he4' + +Grid2_plot_name(6) = 'Text_Summary1' +Grid2_plot_row(6) = 8 ! number from 1 at top +Grid2_plot_rowspan(6) = 1 ! plot spans this number of rows +Grid2_plot_col(6) = 1 ! number from 1 at left +Grid2_plot_colspan(6) = 4 ! plot spans this number of columns +Grid2_plot_pad_left(6) = -0.01 ! fraction of full window width for padding on left +Grid2_plot_pad_right(6) = -0.01 ! fraction of full window width for padding on right +Grid2_plot_pad_top(6) = 0.01 ! fraction of full window height for padding at top +Grid2_plot_pad_bot(6) = 0.00 ! fraction of full window height for padding at bottom +Grid2_txt_scale_factor(6) = 0.2 ! multiply txt_scale for subplot by this + + + + + +! abundance plots +Grid2_plot_name(7) = 'Abundance' + +Grid2_plot_row(7) = 3 ! number from 1 at top +Grid2_plot_rowspan(7) = 3 ! plot spans this number of rows +Grid2_plot_col(7) = 3 ! number from 1 at left +Grid2_plot_colspan(7) = 2 ! plot spans this number of columns +Grid2_plot_pad_left(7) = 0.01 ! fraction of full window width for padding on left +Grid2_plot_pad_right(7) = 0.01 ! fraction of full window width for padding on right +Grid2_plot_pad_top(7) = 0.01 ! fraction of full window height for padding at top +Grid2_plot_pad_bot(7) = 0.02 ! fraction of full window height for padding at bottom +Grid2_txt_scale_factor(7) = 0.7 ! multiply txt_scale for subplot by this + + + + +!------------------------------------------------------------------------------------ + +! Abundance profile plot + +Abundance_win_flag = .false. + +! window properties +Abundance_win_width = 10 +Abundance_win_aspect_ratio = 0.75 + +Abundance_xleft = 0.15 +Abundance_xright = 0.85 +Abundance_ybot = 0.15 +Abundance_ytop = 0.85 +Abundance_txt_scale = 0.8 +Abundance_title = '' + +! isotopes to plot + +Abundance_num_isos_to_show = 20 + +Abundance_which_isos_to_show(1) = 'h1' +Abundance_which_isos_to_show(2) = 'he3' +Abundance_which_isos_to_show(3) = 'he4' +Abundance_which_isos_to_show(4) = 'c12' +Abundance_which_isos_to_show(5) = 'n14' +Abundance_which_isos_to_show(6) = 'o16' +Abundance_which_isos_to_show(7) = 'ne20' +Abundance_which_isos_to_show(8) = 'mg24' +Abundance_which_isos_to_show(9) = 'si28' +Abundance_which_isos_to_show(10) = 's32' +Abundance_which_isos_to_show(11) = 'ar36' +Abundance_which_isos_to_show(12) = 'ca40' +Abundance_which_isos_to_show(13) = 'ti44' +Abundance_which_isos_to_show(14) = 'cr48' +Abundance_which_isos_to_show(15) = 'cr56' +Abundance_which_isos_to_show(16) = 'fe52' +Abundance_which_isos_to_show(17) = 'fe54' +Abundance_which_isos_to_show(18) = 'fe56' +Abundance_which_isos_to_show(19) = 'ni56' +Abundance_which_isos_to_show(20) = 'neut' +!Abundance_which_isos_to_show(22) = 'ne22' + +!Abundance_which_isos_to_show(1) = 'h1' +!Abundance_which_isos_to_show(2) = 'h2' +!Abundance_which_isos_to_show(3) = 'he3' +!Abundance_which_isos_to_show(4) = 'he4' +!Abundance_which_isos_to_show(5) = 'li7' +!Abundance_which_isos_to_show(6) = 'be7' +!Abundance_which_isos_to_show(7) = 'be9' +!Abundance_which_isos_to_show(8) = 'be10' +!Abundance_which_isos_to_show(9) = 'b8' +!Abundance_which_isos_to_show(10) = 'c12' +!Abundance_which_isos_to_show(11) = 'c12' +!Abundance_which_isos_to_show(12) = 'c13' +!Abundance_which_isos_to_show(13) = 'n13' +!Abundance_which_isos_to_show(14) = 'n14' +!Abundance_which_isos_to_show(15) = 'n15' +!Abundance_which_isos_to_show(16) = 'o14' +!Abundance_which_isos_to_show(17) = 'o15' +!Abundance_which_isos_to_show(18) = 'o16' +!Abundance_which_isos_to_show(19) = 'o17' +!Abundance_which_isos_to_show(20) = 'o18' +!Abundance_which_isos_to_show(21) = 'ne22' +!Abundance_which_isos_to_show(21) = 'ne20' +!Abundance_which_isos_to_show(22) = 'mg24' + + +!Abundance_which_isos_to_show(1) = 'neut' +!Abundance_which_isos_to_show(2) = 'h1' +!Abundance_which_isos_to_show(3) = 'h2' +!Abundance_which_isos_to_show(4) = 'he3' +!Abundance_which_isos_to_show(5) = 'he4' +!Abundance_which_isos_to_show(6) = 'li7' +!Abundance_which_isos_to_show(7) = 'be7' +!Abundance_which_isos_to_show(8) = 'be9' +!Abundance_which_isos_to_show(9) = 'be10' +!Abundance_which_isos_to_show(10) = 'b8' +!Abundance_which_isos_to_show(11) = 'c12' +!Abundance_which_isos_to_show(12) = 'c13' +!Abundance_which_isos_to_show(13) = 'n13' +!Abundance_which_isos_to_show(14) = 'n14' +!Abundance_which_isos_to_show(15) = 'n15' +!Abundance_which_isos_to_show(16) = 'o14' +!Abundance_which_isos_to_show(17) = 'o15' +!Abundance_which_isos_to_show(18) = 'o16' +!Abundance_which_isos_to_show(19) = 'o17' +!Abundance_which_isos_to_show(20) = 'o18' +!Abundance_which_isos_to_show(21) = 'f17' +!Abundance_which_isos_to_show(22) = 'f18' +!Abundance_which_isos_to_show(23) = 'f19' +!Abundance_which_isos_to_show(24) = 'ne18' +!Abundance_which_isos_to_show(25) = 'ne19' +!Abundance_which_isos_to_show(26) = 'ne20' +!Abundance_which_isos_to_show(27) = 'ne21' +!Abundance_which_isos_to_show(28) = 'ne22' +!Abundance_which_isos_to_show(29) = 'na21' +!Abundance_which_isos_to_show(30) = 'na22' +!Abundance_which_isos_to_show(31) = 'na23' +!Abundance_which_isos_to_show(32) = 'na24' +!Abundance_which_isos_to_show(33) = 'mg23' +!Abundance_which_isos_to_show(34) = 'mg24' +!Abundance_which_isos_to_show(35) = 'mg25' +!Abundance_which_isos_to_show(36) = 'mg26' +!Abundance_which_isos_to_show(37) = 'al25' +!Abundance_which_isos_to_show(38) = 'al26' +!Abundance_which_isos_to_show(39) = 'al27' +!Abundance_which_isos_to_show(40) = 'si27' +!Abundance_which_isos_to_show(41) = 'si28' +!Abundance_which_isos_to_show(42) = 'p30' +!Abundance_which_isos_to_show(43) = 'p31' +!Abundance_which_isos_to_show(44) = 's31' +!Abundance_which_isos_to_show(45) = 's32' + + + + +! number and size of isotope labels along curves +num_abundance_line_labels = 4 +Abundance_line_txt_scale_factor = 0.8 + + +! number and size of isotopes on legend +Abundance_legend_max_cnt = 0 +Abundance_legend_txt_scale_factor = 0.6 + +! xaxis name and orientation +Abundance_xaxis_name = 'mass' +Abundance_xaxis_reversed = .false. + +! xaxis limits +Abundance_xmin = 0.0 +Abundance_xmax = -101d0 + +! yaxis limits +Abundance_log_mass_frac_min = -4.0 +Abundance_log_mass_frac_max = 0.3 + + +! file output +Abundance_file_flag = .false. +Abundance_file_dir = 'abund_png' +Abundance_file_prefix = 'abund_' +Abundance_file_interval = 10 ! output when mod(model_number,file_interval)==0 +!Abundance_file_width = -1 ! (inches) negative means use same value as for window +Abundance_file_width = 16 ! (inches) negative means use same value as for window +Abundance_file_aspect_ratio = -1 ! negative means use same value as for window + +! TRho window +! history of central temperature vs. density + +TRho_txt_scale = 0.7 +TRho_title = '' + +TRho_logT_min = 8.8d0 +TRho_logT_max = 10.2d0 +TRho_logRho_min = 5d0 +TRho_logRho_max = 10d0 +show_TRho_degeneracy_line = .true. + + +/ diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist_to_cc b/star/dev_cases_massive_stars/14Msun_donor/inlist_to_cc new file mode 100644 index 000000000..4bd28df1a --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/inlist_to_cc @@ -0,0 +1,200 @@ +! the contents of this are set to match the needs of pre_ms_to_cc_12_20 +! so local inlist_common files show differences from what is used for that case. + +&star_job + +save_model_when_terminate = .true. +save_model_filename = 'CC.mod' + +!! You can change the nuclear reaction network from here this will +!! only act after this inlist is read, that is at "C depletion" +!! defined as center_c12 < 0.01, see extras_start_step in +!! src/run_star_extras.f90. Example ccsn network for properly +!! capturing the energy generation rate and deleptonization during all +!! stages requires users to lower op_split_burn_min_T threshold for +!! decoupling. +!change_net_net = .true. +!new_net_name = 'mesa_206.net' +!dump_missing_metals_into_heaviest = .false. + +! If not already on, turn on hydrodynamics by uncommenting these +! change_v_flag = .true. +! new_v_flag = .true. + +/ ! end of star_job namelist + + +&controls + +! stopping condition reimplemented in src/run_star_extras.f90 extras_finish_step +! Be careful trying to enforce a 1000 km/s infall condition for larger +! nuclear reaction networks. You might need to relax to 600-800 km/s to +! avoid difficult numerics. +x_ctrl(1) = 1000d0 ! km/s infall. +fe_core_infall_limit = 1d99 +non_fe_core_infall_limit = 1d99 + +! Suggested by Jim Fuller, can be useful for convergence see also (Farag et al. 2022). +set_min_D_mix = .true. +min_D_mix = 1d-2 + +! Can be helpful to decrease op_split_burn_min_T +! 4d9 has been well tested with the approx21 network +! lower to 2.5d9 or worst case 1d9 for large networks to help with +! numerical stability and speed, see MESA VI (Jermyn 2023) +op_split_burn = .true. +op_split_burn_min_T = 4d9 +burn_steps_limit = 150 +burn_steps_hard_limit = 250 + +! tightening either of the two controls below will substantially increase the runtime, +! but should improve the network accuracy. +op_split_burn_eps = 1d-5 ! prefer 1d-6 or 1d-7 for production +op_split_burn_odescal = 1d-5 ! prefer 1d-7 or 1d-8 for production + +! artificial viscosity , might not be necessary but just in case. +use_Pvsc_art_visc = .true. +Pvsc_cq = 4.0d0 +Pvsc_zsh = 0.1d0 + +! drag to prevent the development of radial pulses. +use_drag_energy = .false. ! means don't include energy from drag in energy equation +drag_coefficient = 1.0d0 +min_q_for_drag = 0.8d0 + +! wind +! no winds in this. see inlist_both + +! atmosphere +! if you run into issues, you can increase Pextra +! extra pressure helps stabilize the atmosphere during core He burning + +! We switch the pressure boundary condition to a hydrodynamic one after +! core-Si burning in the run_star_extras. +Pextra_factor = 2 ! easy to lower with mass loss ! ideally 1.5 is most physical +atm_option = 'T_tau' +atm_T_tau_relation = 'Eddington' +atm_T_tau_opacity = 'fixed' ! next best is 'iterated' + +! can be important for preventing huge energy deposition in small +! cell at the surface from an incoming wave. +max_surface_cell_dq = 1d0 !1d-12 is MESA default for hydrostatic models. + +! turn off thermohaline mixing +thermohaline_coeff = 0 +mlt_make_surface_no_mixing = .true. + +! allow for stronger superadiabaticity_reduction +superad_reduction_diff_grads_limit = 5d-2 ! default is 1d-3 + +! timesteps +min_timestep_limit = 1d-20 !(seconds) +time_delta_coeff = 1.0 +varcontrol_target = 1d-3 + +min_timestep_factor = 0.8d0 +max_timestep_factor = 1.05d0 +timestep_factor_for_retries = 0.75 + +limit_for_rel_error_in_energy_conservation = 1d2!1d-7 +hard_limit_for_rel_error_in_energy_conservation = 1d2!1d-6 + +min_xa_hard_limit = -1d-5 +min_xa_hard_limit_for_highT = -3d-5 + +delta_lgTeff_limit = 1d-1!0.01 +delta_lgL_limit = 0.1 +delta_lgL_He_limit = 0.1 +delta_lgR_limit = 1d-2 + +! tighten to 1d-3 in a production run. See inlist_both. +!delta_lgT_cntr_limit = 0.002 +!delta_lgT_max_limit = 0.002 + +dX_div_X_limit(2) = -1 ! for he4 + +delta_XSi_cntr_hard_limit = -1!0.02 +delta_XSi_cntr_limit = 0.0025 +delta_lg_XH_cntr_min = 0.5d0 +delta_lg_XO_cntr_min = 0.5d0 +delta_lg_XC_cntr_min = 0.5d0 +delta_lg_XHe_cntr_min = 0.5d0 + +! for evolving to cc, turn off hard limits. +never_skip_hard_limits = .true. ! this can bomb a run. +delta_lgTeff_hard_limit = -1 +delta_lgL_hard_limit = -1 +delta_lg_XH_cntr_hard_limit = -1 +delta_lg_XHe_cntr_hard_limit = -1 +delta_lg_XC_cntr_hard_limit = -1 +delta_lg_XO_cntr_hard_limit = -1 +delta_lgL_He_hard_limit = -1 +delta_lgL_H_hard_limit = -1 +delta_lgL_nuc_limit = -1 ! see controls.defaults before changing this +! if splitting error is an issue, you can relax the below three items to -1. +delta_lgT_cntr_hard_limit = 0.1 +delta_lgT_max_hard_limit = 0.1 +delta_lgRho_hard_limit = 0.1 + +! mesh, other defaults are in inlist_both. +R_function_weight = 40 +R_function3_weight = 40 +M_function_weight = 40 +log_tau_function_weight = 40 + +! Fixing the position of the Lagrangian region of the mesh helps +! convergence near the Eddington limit -- you can try turning these off +max_logT_for_k_below_const_q = 100 +max_q_for_k_below_const_q = 0.99 +min_q_for_k_below_const_q = 0.99 +max_logT_for_k_const_mass = 100 +max_q_for_k_const_mass = 0.98 +min_q_for_k_const_mass = 0.98 + +! solver and Equations +! damped newton and structure only +scale_max_correction = 0.1d0 +ignore_species_in_max_correction = .true. + + +xa_scale = 1d-5 +iter_for_resid_tol2 = 10 + +use_gold_tolerances = .true. +gold_tol_max_residual2 = 5d-4 +!gold_tol_max_residual3 = 1d-4 ! Default in controls is 1d-5 +tol_correction_high_T_limit = 1d9 ! Switch to lower tol at high temp for large Mass +solver_iters_timestep_limit = 20 +gold_solver_iters_timestep_limit = 20 +iter_for_resid_tol2 = 10 + +use_gold2_tolerances = .false. +gold2_tol_max_residual2 = 5d-7 +gold2_tol_max_residual3 = 5d-4 + +!defaults +when_to_stop_rtol = 1d-3 +when_to_stop_atol = 1d-3 + +! defaults +sig_min_factor_for_high_Tcenter = 0.01 +Tcenter_min_for_sig_min_factor_full_on = 3.2d9 +Tcenter_max_for_sig_min_factor_full_off = 2.8d9 + +num_trace_history_values = 4 +trace_history_value_name(1) = 'Fe_core' +trace_history_value_name(2) = 'rel_E_err' +trace_history_value_name(3) = 'log_rel_run_E_err' +trace_history_value_name(4) = 'dt_div_max_tau_conv' + +! output +terminal_show_log_dt = .false. + +! debugging +!report_solver_progress = .false. ! set true to see info about solver iterations +!report_ierr = .true. ! if true, produce terminal output when have some internal error + +/ + +&pgstar + +/ ! end of pgstar namelist diff --git a/star/dev_cases_massive_stars/14Msun_donor/profile_columns.list b/star/dev_cases_massive_stars/14Msun_donor/profile_columns.list new file mode 100644 index 000000000..7f6c0749c --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/profile_columns.list @@ -0,0 +1,962 @@ +! profile_columns.list -- determines the contents of star model profiles +! you can use a non-standard version by setting profile_columns_file in your inlist + +! units are cgs unless otherwise noted. + +! reorder the following names as desired to reorder columns. +! comment out the name to omit a column (fewer columns => less IO => faster running). +! remove '!' to restore a column. + +! if you have a situation where you want a non-standard set of columns, +! make a copy of this file, edit as desired, and give the new filename in your inlist +! as profile_columns_file. if you are just adding columns, you can 'include' this file, +! and just list the additions in your file. note: to include the standard default +! version, use include '' -- the 0 length string means include the default file. + +! if you need to have something added to the list of options, let me know.... + +! the first few lines of the profile contain general info about the model. +! for completeness, those items are described at the end of this file. + + +! note: you can include another list by doing +! include 'filename' +! include '' means include the default standard list file + + +! the following lines of the profile contain info for 1 zone per row, surface to center. + +! minimal set of enabled columns: + + zone ! numbers start with 1 at the surface + mass ! m/Msun. mass coordinate of outer boundary of cell. + logR ! log10(radius/Rsun) at outer boundary of zone + logT ! log10(temperature) at center of zone + logRho ! log10(density) at center of zone + logP ! log10(pressure) at center of zone + x_mass_fraction_H + y_mass_fraction_He + z_mass_fraction_metals + + +! everything below this line is deactivated + + +!# Structure + !logM ! log10(m/Msun) + !log_mass + dm ! cell mass (grams) + !dm_bar ! boundary mass (grams) average of adjacent dm's + logdq ! log10(dq) + !log_dq + dq_ratio ! dq(k-1)/dq(k) + q ! fraction of star mass interior to outer boundary of this zone + !log_q ! log10(q) + !xq + + !grav ! gravitational acceleration (cm sec^2) + !log_g ! log10 gravitational acceleration (cm sec^2) + !g_div_r ! grav/radius (sec^2) + !r_div_g ! radius/grav (sec^-2) + !cgrav_factor ! = cgrav(k)/standard_cgrav + vel_km_per_s ! velocity at outer boundary of zone (km/s) -- 0 if no velocity variable + + radius ! radius at outer boundary of zone (in Rsun units) + radius_cm ! radius at outer boundary of zone (in centimeters) + !radius_km ! radius at outer boundary of zone (in kilometers) + logR_cm ! log10 radius at outer boundary of zone (in centimeters) + rmid ! radius at center by mass of zone (in Rsun units) + !r_div_R ! fraction of total radius + + velocity ! velocity at outer boundary of zone (cm/s) -- 0 if no velocity variable + v_div_r ! velocity divided by radius + !v_times_t_div_r + !rho_times_r3 ! at face + !log_rho_times_r3 ! at face + !scale_height ! in Rsun units + pressure_scale_height ! in Rsun units + + !m_div_r ! gm/cm + !dmbar_m_div_r + !log_dmbar_m_div_r + !mass_grams ! mass coordinate of outer boundary of cell in grams + mmid ! mass at midpoint of cell (average of mass coords of the cell boundaries) Msun units. + + !m_grav ! total enclosed gravitational mass. Msun units. + !m_grav_div_m_baryonic ! mass_gravitational/mass at cell boundary + !mass_correction_factor ! dm_gravitational/dm (dm is baryonic mass of cell) + + !xm ! mass exterior to point (Msun units) + !dq ! mass of zone as a fraction of total star mass + logxq ! log10(1-q) + !logxm ! log10(xm) + + !xr ! radial distance from point to surface (Rsun) + !xr_cm ! radial distance from point to surface (cm) + !xr_div_R ! radial distance from point to surface in units of star radius + !log_xr ! log10 radial distance from point to surface (Rsun) + !log_xr_cm ! log10 radial distance from point to surface (cm) + !log_xr_div_R ! log10 radial distance from point to surface in units of star radius + + dr ! r(outer edge) - r(inner edge); radial extent of cell in cm. + log_dr ! log10 cell width (cm) + !dv ! v(inner edge) - v(outer edge); rate at which delta_r is shrinking (cm/sec). + + !dt_dv_div_dr ! dt*dv/dr; need to have this << 1 for every cell + !dr_div_R ! cell width divided by star R + !log_dr_div_R ! log10 cell width divided by star R + !dr_div_rmid ! cell width divided by rmid + !log_dr_div_rmid ! log(dr_div_rmid) + + dr_div_cs ! cell sound crossing time (sec) + log_dr_div_cs ! log10 cell sound crossing time (sec) + !dr_div_cs_yr ! cell sound crossing time (years) + !log_dr_div_cs_yr ! log10 cell sound crossing time (years) + + !acoustic_radius ! sound time from center to outer cell boundary (sec) + !log_acoustic_radius ! log10(acoustic_radius) (sec) + acoustic_depth ! sound time from surface to outer cell boundary (sec) + !log_acoustic_depth ! log10(acoustic_depth) (sec) + !acoustic_r_div_R_phot + + !cell_collapse_time ! only set if doing explicit hydro + ! time (seconds) for cell inner edge to catch cell outer edge at current velocities + ! 0 if distance between inner and outer is increasing + log_cell_collapse_time ! log of cell_collapse_time + + !compression_gradient + + + +!# Thermodynamics + temperature ! temperature at center of zone + !logT_face ! log10(temperature) at outer boundary of zone + !logT_bb ! log10(black body temperature) at outer boundary of zone + !logT_face_div_logT_bb + + energy ! internal energy (ergs/g) + logE ! log10(specific internal energy) at center of zone + rho ! density + !density ! rho + + entropy ! specific entropy divided by (avo*kerg) + !logS ! log10(specific entropy) + !logS_per_baryon ! log10(specific entropy per baryon / kerg) + + pressure ! total pressure at center of zone (pgas + prad) + !prad ! radiation pressure at center of zone + !pgas ! gas pressure at center of zone (electrons and ions) + logPgas ! log10(pgas) + pgas_div_ptotal ! pgas/pressure + + eta ! electron degeneracy parameter (eta >> 1 for significant degeneracy) + mu ! mean molecular weight per gas particle (ions + free electrons) + + grada ! dlnT_dlnP at constant S + !dE_dRho ! at constant T + !cv ! specific heat at constant volume + !cp ! specific heat at constant total pressure + + !log_CpT + gamma1 ! dlnP_dlnRho at constant S + !gamma3 ! gamma3 - 1 = dlnT_dlnRho at constant S + !gam ! plasma interaction parameter (> 160 or so means starting crystallization) + free_e ! free_e is mean number of free electrons per nucleon + !logfree_e ! log10(free_e), free_e is mean number of free electrons per nucleon + !chiRho ! dlnP_dlnRho at constant T + !chiT ! dlnP_dlnT at constant Rho + + csound ! sound speed + log_csound + !csound_face ! sound speed (was previously called csound_at_face) + !cs_at_cell_bdy ! sound speed at cell boundary (csound is at cell center) + !v_div_cs ! velocity divided by sound speed + v_div_csound ! velocity divided by sound speed + !div_v + + !thermal_time_to_surface ! in seconds + !log_thermal_time_to_surface + !t_rad + !log_t_rad + !log_t_sound + !log_t_thermal + + !eos_phase + !eos_frac_OPAL_SCVH + !eos_frac_HELM + !eos_frac_Skye + !eos_frac_PC + !eos_frac_FreeEOS + !eos_frac_CMS + !eos_frac_ideal + + !pgas_div_p + !prad_div_pgas + !prad_div_pgas_div_L_div_Ledd + !pressure_scale_height_cm + + !eps_grav_composition_term + !eps_grav_plus_eps_mdot + + !chiRho_for_partials + !chiT_for_partials + !rel_diff_chiRho_for_partials + !rel_diff_chiT_for_partials + + !latent_ddlnRho + !latent_ddlnT + + !log_P_face + !log_Ptrb + !log_cp_T_div_t_sound + + !QQ + + +!# Mass accretion + eps_grav ! -T*ds/dt (negative for expansion) + !log_abs_eps_grav_dm_div_L + !log_abs_v ! log10(abs(velocity)) (cm/s) + !log_mdot_cs + !log_mdot_v + !eps_mdot + !env_eps_grav + !xm_div_delta_m + !log_xm_div_delta_m + + +!# Nuclear energy generation + !signed_log_eps_grav ! sign(eps_grav)*log10(max(1,abs(eps_grav))) + !signed_log_eps_nuc + !net_nuclear_energy ! erg/gm/s from nuclear reactions minus all neutrino losses + ! The value plotted is net_nuclear_energy = sign(val)*log10(max(1,abs(val))) + ! where val = net nuclear energy minus all neutrino losses. + !net_energy ! net_energy + eps_grav. + ! The value plotted is net_energy = sign(val)*log10(max(1,abs(val))) + ! where val = net nuclear energy plus eps_grav minus all neutrino losses. + !eps_nuc_plus_nuc_neu + !eps_nuc_minus_non_nuc_neu + !eps_nuc_start + + eps_nuc ! ergs/g/sec from nuclear reactions (including losses to reaction neutrinos) + !log_abs_eps_nuc + !d_lnepsnuc_dlnd + !d_epsnuc_dlnd + !deps_dlnd_face + ! (was previously called deps_dlnd_at_face) + !d_lnepsnuc_dlnT + !d_epsnuc_dlnT + !deps_dlnT_face + ! (was previously called deps_dlnT_at_face) + !eps_nuc_neu_total ! erg/gm/sec as neutrinos from nuclear reactions + + non_nuc_neu ! non-nuclear-reaction neutrino losses + !nonnucneu_plas ! plasmon neutrinos (for collective reactions like gamma_plasmon => nu_e + nubar_e) + !nonnucneu_brem ! bremsstrahlung (for reactions like e- + (z,a) => e- + (z,a) + nu + nubar) + !nonnucneu_phot ! photon neutrinos (for reactions like e- + gamma => e- + nu_e + nubar_e) + !nonnucneu_pair ! pair production (for reactions like e+ + e- => nu_e + nubar_e) + !nonnucneu_reco ! recombination neutrinos (for reactions like e- (continuum) => e- (bound) + nu_e + nubar_e) + + ! ergs/g/sec for reaction categories + add_reaction_categories ! this adds all the reaction categories + ! NOTE: you can list specific categories by giving their names (from chem_def) + pp + cno + tri_alpha + !c_alpha + !n_alpha + !o_alpha + !ne_alpha + !na_alpha + !mg_alpha + !si_alpha + !s_alpha + !ar_alpha + !ca_alpha + !ti_alpha + !fe_co_ni + !c12_c12 + !c12_o16 + !o16_o16 + !photo + !pnhe4 + !other + + ! adds columns for all of the reactions that are in the current net + ! Note that if using op_split_burn=.true. then zones which have been split will report 0 for thier rates + !add_raw_rates ! raw reaction rates, reactions/second + !add_screened_rates ! screened reaction rates reactions/second + !add_eps_nuc_rates ! Nuclear energy (minus neutrino losses) released erg/s + !add_eps_neu_rates ! Neutrino losses erg/s + + ! individual reactions (as many as desired) + ! use list_net_reactions = .true. in star_job to list all reactions in the current net + ! reactions/second + !raw_rate r_h1_h1_ec_h2 + !raw_rate r_h1_h1_wk_h2 + + burn_num_iters ! Number of split_burn iterations taken + !burn_avg_epsnuc + !log_burn_avg_epsnuc + +!# Composition + !x_mass_fraction_H + !y_mass_fraction_He + !z_mass_fraction_metals + abar ! average atomic weight (g/mole) + zbar ! average charge + z2bar ! average charge^2 + ye ! average charge per baryon = proton fraction + + x ! hydrogen mass fraction + !log_x + y ! helium mass fraction + !log_y + z ! metallicity + log_z ! metallicity + + add_abundances ! this adds all of the isos that are in the current net + ! NOTE: you can list specific isotopes by giving their names (from chem_def) + !h1 + !he3 + !he4 + !c12 + !n14 + !o16 + + add_log_abundances ! this adds log10 of all of the isos that are in the current net + ! NOTE: you can list specific isotopes by giving their names (from chem_def) + !log h1 + !log he3 + !log he4 + !log c12 + !log n14 + !log o16 + + ! log concentration of species + ! concentration = number density / number density of electrons + ! Ci = (Xi/Ai) / sum(Zi*Xi/Ai) [see Thoul et al, ApJ 421:828-842, 1994] + !log_concentration h1 + !log_concentration he4 + + + ! typical charge for given species + ! (used by diffusion) + !typical_charge he4 + !typical_charge c12 + !typical_charge fe52 + + ! ionization state for given species + ! (same as typical charge, except that it's unsmoothed) + !ionization he4 + !ionization c12 + !ionization fe52 + + !cno_div_z ! abundance of c12, n14, and o16 as a fraction of total z + + + + +!# Opacity + opacity ! opacity measured at center of zone + log_opacity ! log10(opacity) + !dkap_dlnrho_face ! partial derivative of opacity wrt. ln rho (at T=const) at outer edge of cell + ! (was previously called dkap_dlnrho_at_face) + !dkap_dlnT_face ! partial derivative of opacity wrt. ln T (at rho=const) at outer edge of cell + ! (was previously called dkap_dlnT_at_face) + !kap_frac_lowT ! fraction of opacity from lowT tables + !kap_frac_highT ! fraction of opacity from highT tables + !kap_frac_Type2 ! fraction of opacity from Type2 tables + !kap_frac_Compton ! fraction of opacity from Compton_Opacity + !kap_frac_op_mono ! fraction of opacity from OP mono + + !log_kap + log_kap_times_factor + + !log_c_div_tau + !xtau + !xlogtau + !logtau_sub_xlogtau + +!# Luminosity + luminosity ! luminosity at outer boundary of zone (in Lsun units) + logL ! log10(max(1d-2,L/Lsun)) + !log_Lrad + !log_Ledd ! log10(Leddington/Lsun) -- local Ledd, 4 pi clight G m / kap + log_L_div_Ledd ! log10(max(1d-12,L/Leddington)) + !log_Lrad_div_Ledd + !log_Lrad_div_L + !signed_log_power ! sign(L)*log10(max(1,abs(L))) + + lum_adv + lum_conv + !lum_conv_MLT + !lum_div_Ledd + lum_erg_s + lum_plus_lum_adv + lum_rad + + !log_L_div_CpTMdot + log_abs_lum_erg_s + + !L + !Lc + !Lc_div_L + !Lr + !Lr_div_L + !Lt + !Lt_div_L + +!# Energetics + total_energy ! specific total energy of cell (ergs/g). internal+potential+kinetic+rotation. + !cell_specific_IE + !cell_specific_KE + !cell_IE_div_IE_plus_KE + !cell_KE_div_IE_plus_KE + + !cell_ie_div_star_ie + !cell_internal_energy_fraction + !cell_internal_energy_fraction_start + !cell_specific_PE + + !log_cell_ie_div_star_ie + !log_cell_specific_IE + + !ergs_eps_grav_plus_eps_mdot + !ergs_error + !ergs_error_integral + !ergs_mdot + !ergs_rel_error_integral + !dm_eps_grav + + !dE + + !etrb + !log_etrb + !extra_grav + !log_rel_E_err + + !total_energy_sign + +!# Convection + mlt_mixing_length ! mixing length for mlt (cm) + !mlt_mixing_type ! value returned by mlt + !mlt_Pturb + !alpha_mlt + + conv_vel ! convection velocity (cm/sec) + log_conv_vel ! log10 convection velocity (cm/sec) + + conv_L_div_L + log_conv_L_div_L + !lum_conv_div_lum_rad + !lum_rad_div_L_Edd + !lum_conv_div_lum_Edd + !lum_conv_div_L + !lum_rad_div_L + !lum_rad_div_L_Edd_sub_fourPrad_div_PchiT ! density increases outward if this is > 0 + ! see Joss, Salpeter, and Ostriker, "Critical Luminosity", ApJ 181:429-438, 1973. + + gradT ! mlt value for required temperature gradient dlnT/dlnP + + gradr ! dlnT/dlnP required for purely radiative transport + !grad_temperature ! smoothed dlnT/dlnP at cell boundary + !grad_density ! smoothed dlnRho/dlnP at cell boundary + + !gradL ! gradient for Ledoux criterion for convection + !sch_stable ! 1 if grada > gradr, 0 otherwise + !ledoux_stable ! 1 if gradL > gradr, 0 otherwise + + !grada_sub_gradT + gradT_sub_grada ! gradT-grada at cell boundary + !gradT_div_grada ! gradT/grada at cell boundary + + !gradr_sub_gradT + !gradT_sub_gradr ! gradT-gradr at cell boundary + !gradT_div_gradr ! gradT/gradr at cell boundary + + !log_gradT_div_gradr ! log10 gradT/gradr at cell boundary + !log_mlt_Gamma ! convective efficiency + conv_vel_div_csound ! convection velocity divided by sound speed + !conv_vel_div_L_vel ! L_vel is velocity needed to carry L by convection; L = 4*pi*r^2*rho*vel**3 + log_mlt_D_mix ! log10 diffusion coefficient for mixing from mlt (cm^2/sec) + + !gradr_div_grada ! gradr/grada_face; > 1 => Schwarzschild unstable for convection + !gradr_sub_grada ! gradr - grada_face; > 0 => Schwarzschild unstable for convection + + !gradL_sub_gradr + !gradP_div_rho + !gradT_excess_effect + !gradT_rel_err + !gradT_sub_a + !grada_face + !grada_sub_gradr + !diff_grads + !log_diff_grads + + !mlt_D + !mlt_Gamma + !mlt_Y_face + !mlt_Zeta + !mlt_gradT + !mlt_log_abs_Y + !mlt_vc + !log_mlt_vc + !dvc_dt_TDC_div_g + + !superad_reduction_factor + !conv_vel_div_mlt_vc + + !log_Lconv + !log_Lconv_div_L + +!# Mixing + !mixing_type ! mixing types are defined in mesa/const/public/const_def + log_D_mix ! log10 diffusion coefficient for mixing in units of cm^2/second (Eulerian) + !log_D_mix_non_rotation + !log_D_mix_rotation + + log_D_conv ! D_mix for regions where mix_type = convective_mixing + !log_D_leftover ! D_mix for regions where mix_type = leftover_convective_mixing + log_D_semi ! D_mix for regions where mix_type = semiconvective_mixing + log_D_ovr ! D_mix for regions where mix_type = overshoot_mixing + log_D_thrm ! D_mix for regions where mix_type = thermohaline_mixing + log_D_minimum ! D_mix for regions where mix_type = minimum_mixing + log_D_rayleigh_taylor ! D_mix for regions where mix_type = rayleigh_taylor_mixing + !log_D_anon ! D_mix for regions where mix_type = anonymous_mixing + log_D_omega + + log_sig_mix ! sig(k) is mixing flow across face k in (gm sec^1) + ! sig(k) = D_mix*(4*pi*r(k)**2*rho_face)**2/dmavg + + !dominant_isoA_for_thermohaline + !dominant_isoZ_for_thermohaline + !gradL_composition_term + + mix_type + + + +!# Optical Depth + tau ! optical depth + !log_column_depth ! log10 column depth, exterior mass / area (g cm^-2) + !log_radial_depth ! log10 radial distance to surface (cm) + logtau ! log10(optical depth) at cell face + !tau_eff ! tau that gives the local P == P_atm if this location at surface + ! tau_eff = kap*(P/g - Pextra_factor*(L/M)/(6*pi*clight*cgrav)) + !tau_eff_div_tau + + + +!# Rotation + omega ! angular velocity = j_rot/i_rot + log_omega + log_j_rot + log_J_div_M53 ! J is j*1e-15 integrated from center; M53 is m^(5/3) + log_J_inside ! J_inside is j_rot integrated from center + !shear ! -dlnomega/dlnR + log_abs_shear ! log10(abs(dlnomega/dlnR)) + !richardson_number + i_rot ! specific moment of inertia at cell boundary + j_rot ! specific angular momentum at cell boundary + v_rot ! rotation velocity at cell boundary (km/sec) + !w_div_w_crit_roche !ratio of rotational velocity to keplerian at the equator + !without the contribution from the Eddington factor + fp_rot ! rotation factor for pressure + ft_rot ! rotation factor for temperature + !ft_rot_div_fp_rot ! gradr factor + + !log_am_nu_non_rot ! log10(am_nu_non_rot) + !log_am_nu_rot ! log10(am_nu_rot) + log_am_nu ! log10(am_nu_non_rot + am_nu_rot) + + r_polar ! (Rsun) + log_r_polar ! log10 (Rsun) + r_equatorial ! (Rsun) + log_r_equatorial ! log10 (Rsun) + r_e_div_r_p ! equatorial/r_polar + omega_crit ! breakup angular velocity = sqrt(G M / equatorial^3) + omega_div_omega_crit + + !am_log_nu_omega ! for diffusion of omega + !am_log_nu_j ! for diffusion of angular momentum + + !am_log_nu_rot ! diffusion of angular momentum driven by rotation + !am_log_nu_non_rot ! diffusion driven by other sources, e.g. convection + + !am_log_sig_omega ! for diffusion of omega + !am_log_sig_j ! for diffusion of angular momentum + am_log_sig ! == am_log_sig_omega + + !am_log_D_visc ! diffusion coeff for kinematic viscosity + am_log_D_DSI ! diffusion coeff for dynamical shear instability + am_log_D_SH ! diffusion coeff for Solberg-Hoiland instability + am_log_D_SSI ! diffusion coeff for secular shear instability + am_log_D_ES ! diffusion coeff for Eddington-Sweet circulation + am_log_D_GSF ! diffusion coeff for Goldreich-Schubert-Fricke instability + am_log_D_ST ! Spruit dynamo mixing diffusivity + am_log_nu_ST ! Spruit dynamo effective viscosity + + dynamo_log_B_r ! (Gauss) + dynamo_log_B_phi ! (Gauss) + + !am_domega_dlnR + !log_abs_dlnR_domega + + !w_div_w_crit_roche2 + + +!# Diffusion + ! electric field from element diffusion calculation + !e_field + !log_e_field + + ! gravitational field from element diffusion calculation + !g_field_element_diffusion + !log_g_field_element_diffusion + + !eE_div_mg_element_diffusion + !log_eE_div_mg_element_diffusion + + ! element diffusion velocity for species + !edv h1 + !edv he4 + !edv o16 + + ! Energy generated by Ne22 sedimentation. + !eps_WD_sedimentation + !log_eps_WD_sedimentation + + !eps_diffusion + !log_eps_diffusion + + !diffusion_D h1 ! self diffusion coeff + !diffusion_dX h1 ! change in h1 mass fraction from diffusion + !diffusion_dX he4 ! change in he4 mass fraction from diffusion + !diffusion_dX n20 ! change in n20 mass fraction from diffusion + + !v_rad h1 ! velocity from radiative levitation + !v_rad he4 ! velocity from radiative levitation + !v_rad ne20 ! velocity from radiative levitation + + !log_g_rad h1 ! log10 acceleration from radiative levitation + !log_g_rad he4 ! log10 acceleration from radiative levitation + !log_g_rad ne20 ! log10 acceleration from radiative levitation + +!# Phase Separation + !eps_phase_separation + +!# Oscillations + !brunt_N2 ! brunt-vaisala frequency squared + !brunt_N2_structure_term + !brunt_N2_composition_term + !log_brunt_N2_structure_term + !log_brunt_N2_composition_term + !brunt_A ! = N^2*r/g + !brunt_A_div_x2 ! x = r(k)/r(1) + !brunt_N2_dimensionless ! N2 in units of 3GM/R^3 + !brunt_N_dimensionless ! N in units of sqrt(3GM/R^3) + !brunt_frequency ! cycles per day + !brunt_N ! sqrt(abs(brunt_N2)) + !log_brunt_N ! log10(brunt_N) + !log_brunt_N2 ! log10(brunt_N2) + !log_brunt_N2_dimensionless ! log10(brunt_N2_dimensionless) + + !brunt_B ! smoothed numerical difference + !brunt_nonB ! = grada - gradT + !log_brunt_B ! smoothed numerical difference + !log_brunt_nonB ! = grada - gradT + + !sign_brunt_N2 ! sign of brunt_N2 (+1 for Ledoux stable; -1 for Ledoux unstable) + !brunt_nu ! brunt_frequency in microHz + !log_brunt_nu ! brunt_frequency in microHz + + !lamb_S ! lamb frequency for l=1: S = sqrt(2)*csound/r (rad/s) + !lamb_S2 ! squared lamb frequency for l=1: S2 = 2*(csound/r)^2 (rad^2/s^2) + + !lamb_Sl1 ! lamb frequency for l=1; = sqrt(2)*csound/r (microHz) + !lamb_Sl2 ! lamb frequency for l=2; = sqrt(6)*csound/r (microHz) + !lamb_Sl3 ! lamb frequency for l=3; = sqrt(12)*csound/r (microHz) + !lamb_Sl10 ! lamb frequency for l=10; = sqrt(110)*csound/r (microHz) + + !log_lamb_Sl1 ! log10(lamb_Sl1) + !log_lamb_Sl2 ! log10(lamb_Sl2) + !log_lamb_Sl3 ! log10(lamb_Sl3) + !log_lamb_Sl10 ! log10(lamb_Sl10) + + !brunt_N_div_r_integral ! integral from center of N*dr/r + !k_r_integral ! integral from center of k_r*dr + !brunt_N2_sub_omega2 + !sl2_sub_omega2 + + +!# RSP + + !rsp_Chi ! dlnP_dlnRho + !rsp_Et ! Specific turbulent energy + !rsp_logEt ! Log specific turbulent energy + !rsp_erad ! Specific internal (radiative) energy + !rsp_log_erad ! Log specific internal (radiative) energy + !rsp_Hp_face ! Pressure scale height at cell face + !rsp_Lc ! Convective luminosity + !rsp_Lc_div_L ! Convective luminosity div total luminosity + !rsp_Lr ! Radiative luminosity + !rsp_Lr_div_L ! Radiative luminosity div total luminosity + !rsp_Lt ! Turbulent luminosity + !rsp_Lt_div_L ! Turbulent luminosity div total luminosity + !rsp_Pt ! Turbulent pressure, p_t, see Table 1 in MESA5 + !rsp_Uq ! Viscous momentum transfer rate, U_q, see Table 1 in MESA5 + !rsp_Eq ! Viscous energy transfer rate, epsilon_q, see Table 1 in MESA5 + !rsp_Pvsc ! Artificial viscosity, p_av, see Table 1 in MESA5 + !rsp_gradT ! Temperature gradient + !rsp_Y_face ! Superadiabatic gradient at cell face, Y_sag, see Table 1 in MESA5 + !rsp_damp ! Turbulent dissipation, D, see Table 1 in MESA5 + !rsp_dampR ! Radiative cooling, D_r, see Table 1 in MESA5 + !rsp_sink ! Sum of turbulent dissipation and radiative cooling terms + !rsp_src ! Source function, S, see Table 1 in MESA5 + !rsp_src_snk ! Convective coupling, C, see Table 1 in MESA5 + !rsp_heat_exchange_timescale ! 1d0/(clight * opacity * density) + !rsp_log_heat_exchange_timescale + !rsp_log_dt_div_heat_exchange_timescale ! Ratio of time step to heat exchange timescale + !w + !log_w + + !COUPL + !DAMP + !DAMPR + !SOURCE + !Chi + !Eq + !Hp_face + !PII_face + !Ptrb + !Pvsc + !Uq + !Y_face + +!# RTI + + RTI_du_diffusion_kick + alpha_RTI + boost_for_eta_RTI + dedt_RTI + dudt_RTI + eta_RTI + log_alpha_RTI + !log_boost_for_eta_RTI + log_eta_RTI + !log_etamid_RTI + log_lambda_RTI_div_Hrho + log_sig_RTI + !log_sigmid_RTI + !log_source_RTI + log_source_minus_alpha_RTI + log_source_plus_alpha_RTI + !source_minus_alpha_RTI + !source_plus_alpha_RTI + lambda_RTI + +!# Hydrodynamics + + + !v + v_div_v_escape + !v_div_vesc + !v_kms + !log_v_escape + + u + u_face + + P_face + + +!# Extras + extra_heat + !extra_L ! extra_heat integrated from center (Lsun) + !log_extra_L ! log10 integrated from center (Lsun) + !log_irradiation_heat + + !extra_jdot ! set in other_torque routine + !extra_omegadot ! set in other_torque routine + + extra_opacity_factor ! set in other_opacity_factor routine + + ! diffusion factor profile for species, set in other_diffusion_factor routine + !extra_diffusion_factor h1 + !extra_diffusion_factor he4 + !extra_diffusion_factor o16 + + + +!# Miscellaneous + + !dlog_h1_dlogP ! (log(h1(k)) - log(h1(k-1)))/(log(P(k)) - log(P(k-1))) + !dlog_he3_dlogP + !dlog_he4_dlogP + !dlog_c12_dlogP + !dlog_c13_dlogP + !dlog_n14_dlogP + !dlog_o16_dlogP + !dlog_ne20_dlogP + !dlog_mg24_dlogP + !dlog_si28_dlogP + + !dlog_pp_dlogP + !dlog_cno_dlogP + !dlog_3alf_dlogP + + !dlog_burn_c_dlogP + !dlog_burn_n_dlogP + !dlog_burn_o_dlogP + + !dlog_burn_ne_dlogP + !dlog_burn_na_dlogP + !dlog_burn_mg_dlogP + + !dlog_cc_dlogP + !dlog_co_dlogP + !dlog_oo_dlogP + + !dlog_burn_si_dlogP + !dlog_burn_s_dlogP + !dlog_burn_ar_dlogP + !dlog_burn_ca_dlogP + !dlog_burn_ti_dlogP + !dlog_burn_cr_dlogP + !dlog_burn_fe_dlogP + + !dlog_pnhe4_dlogP + !dlog_photo_dlogP + !dlog_other_dlogP + + !logR_kap ! logR = logRho - 3*logT + 18 ; used in kap tables + !logW ! logW = logPgas - 4*logT + !logQ ! logQ = logRho - 2*logT + 12 + !logV ! logV = logRho - 0.7*logE + 20 + + !log_CpT_absMdot_div_L ! log10(s% Cp(k)*s% T(k)*abs(s% mstar_dot)/s% L(k)) + + !delta_r ! r - r_start, change during step + !delta_L ! L - L_start, change during step + !delta_cell_vol ! cell_vol - cell_vol_start, change during step + !delta_entropy ! entropy - entropy_start, change during step (does not include effects of diffusion) + !delta_T ! T - T_start, change during step + !delta_rho ! rho - rho_start, change during step + !delta_eps_nuc ! eps_nuc - eps_nuc_start, change during step + !delta_mu ! mu - mu_start, change during step + + zFe ! mass fraction of "Fe" = Fe+Co+Ni + !log_zFe + dPdr_dRhodr_info + !log_sig_raw_mix + + !d_u_div_rmid + !d_u_div_rmid_start + !d_v_div_r_dm + !d_v_div_r_dr + + !dlnP_dlnR + !dlnRho_dlnR + !dlnRho_dr + !dlnX_dr + !dlnY_dr + dlogR + !dPdr_div_grav + dPdr_info + dRhodr_info + !dRstar_div_dr + !dr_ratio + !dm_eps_grav + !dr_ratio + !dt_cs_div_dr + !dt_div_tau_conv + !dt_times_conv_vel_div_mixing_length + !log_dt_cs_div_dr + !log_dt_div_tau_conv + !log_dt_times_conv_vel_div_mixing_length + log_du_kick_div_du + !du + !dvdt_dPdm + !dvdt_grav + + !tau_conv + !tau_cool + !tau_epsnuc + !tau_qhse + + !max_abs_xa_corr + + !tdc_num_iters + + !k + + +! the first few lines of the profile contain general info about the model. +! for completeness, those items are described here. + + ! initial mass and Z + ! initial_mass + ! initial_z + ! general properties of the current state + ! model_number + ! num_zones + ! star_age + ! time_step + ! properties at the photosphere + ! Teff + ! photosphere_L + ! photosphere_r + ! properties at the outermost zone of the model + ! log_surface_L + ! log_surface_radius + ! log_surface_temp + ! properties near the center of the model + ! log_center_temp + ! log_center_density + ! log_center_P + ! center_eta + ! abundances near the center + ! center_h1 + ! center_he3 + ! center_he4 + ! center_c12 + ! center_n14 + ! center_o16 + ! center_ne20 + ! information about total mass + ! star_mass + ! star_mdot + ! star_mass_h1 + ! star_mass_he3 + ! star_mass_he4 + ! star_mass_c12 + ! star_mass_n14 + ! star_mass_o16 + ! star_mass_ne20 + ! locations of abundance transitions + ! he_core_mass + ! c_core_mass + ! o_core_mass + ! si_core_mass + ! fe_core_mass + ! location of optical depths 10 and 100 + ! tau10_mass + ! tau10_radius + ! tau100_mass + ! tau100_radius + ! time scales + ! dynamic_time + ! kh_timescale + ! nuc_timescale + ! various kinds of total power + ! power_nuc_burn + ! power_h_burn + ! power_he_burn + ! power_neu + ! a few control parameter values + ! h1_boundary_limit + ! he4_boundary_limit + ! c12_boundary_limit + ! burn_min1 + ! burn_min2 diff --git a/star/dev_cases_massive_stars/14Msun_donor/rate_tables/S13_r_be7_wk_li7.h5 b/star/dev_cases_massive_stars/14Msun_donor/rate_tables/S13_r_be7_wk_li7.h5 new file mode 100644 index 000000000..6f7af4e65 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/rate_tables/S13_r_be7_wk_li7.h5 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7a4c9e995eda50a568be968a5b3fa953711e09f695b12c71370d07b1f40b5ef +size 93208 diff --git a/star/dev_cases_massive_stars/14Msun_donor/re b/star/dev_cases_massive_stars/14Msun_donor/re new file mode 100755 index 000000000..f65987522 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/re @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +shopt -u expand_aliases + +photo_directory=photos + +function most_recent_photo { + bp=$(ls -tp "$photo_directory/"b_* | head -1) + echo ${bp#"$photo_directory/"b_} +} + +if [ $# -eq 0 ] +then + photo=$(most_recent_photo) +else + photo=$1 +fi + +if [ -z "$photo" ] || ! [ -f "$photo_directory/b_$photo" ] || ! [ -f "$photo_directory/1_$photo" ] +then + echo "Not all specified photos exist: $photo" + exit 1 +fi + +echo "restart from $photo" +echo "$photo" > .restart + +make run diff --git a/star/dev_cases_massive_stars/14Msun_donor/rn b/star/dev_cases_massive_stars/14Msun_donor/rn new file mode 100755 index 000000000..fcfc31730 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/rn @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +rm -f .restart + +make run diff --git a/star/dev_cases_massive_stars/14Msun_donor/src/binary_run.f90 b/star/dev_cases_massive_stars/14Msun_donor/src/binary_run.f90 new file mode 100644 index 000000000..b542b6138 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/src/binary_run.f90 @@ -0,0 +1,6 @@ + program binary_run + use run_binary, only: do_run_binary + + call do_run_binary(.true.) + + end program diff --git a/star/dev_cases_massive_stars/14Msun_donor/src/run_binary_extras.f90 b/star/dev_cases_massive_stars/14Msun_donor/src/run_binary_extras.f90 new file mode 100644 index 000000000..50d163492 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/src/run_binary_extras.f90 @@ -0,0 +1,401 @@ +! *********************************************************************** +! +! Copyright (C) 2012-2019 Bill Paxton & The MESA Team +! +! this file is part of mesa. +! +! mesa is free software; you can redistribute it and/or modify +! it under the terms of the gnu general library public license as published +! by the free software foundation; either version 2 of the license, or +! (at your option) any later version. +! +! mesa is distributed in the hope that it will be useful, +! but without any warranty; without even the implied warranty of +! merchantability or fitness for a particular purpose. see the +! gnu library general public license for more details. +! +! you should have received a copy of the gnu library general public license +! along with this software; if not, write to the free software +! foundation, inc., 59 temple place, suite 330, boston, ma 02111-1307 usa +! +! *********************************************************************** +module run_binary_extras + + use star_lib + use star_def + use const_def + use const_def + use chem_def + use num_lib + use binary_def + use math_lib + + implicit none + +contains + + subroutine extras_binary_controls(binary_id, ierr) + integer :: binary_id + integer, intent(out) :: ierr + type (binary_info), pointer :: b + ierr = 0 + + call binary_ptr(binary_id, b, ierr) + if (ierr /= 0) then + write(*,*) 'failed in binary_ptr' + return + end if + + ! Set these function pointers to point to the functions you wish to use in + ! your run_binary_extras. Any which are not set, default to a null_ version + ! which does nothing. + b% how_many_extra_binary_history_header_items => how_many_extra_binary_history_header_items + b% data_for_extra_binary_history_header_items => data_for_extra_binary_history_header_items + b% how_many_extra_binary_history_columns => how_many_extra_binary_history_columns + b% data_for_extra_binary_history_columns => data_for_extra_binary_history_columns + + b% extras_binary_startup=> extras_binary_startup + b% extras_binary_start_step=> extras_binary_start_step + b% extras_binary_check_model=> extras_binary_check_model + b% extras_binary_finish_step => extras_binary_finish_step + b% extras_binary_after_evolve=> extras_binary_after_evolve + + ! Once you have set the function pointers you want, then uncomment this (or set it in your star_job inlist) + ! to disable the printed warning message, + b% warn_binary_extra =.false. + end subroutine extras_binary_controls + + integer function how_many_extra_binary_history_header_items(binary_id) + use binary_def, only: binary_info + integer, intent(in) :: binary_id + how_many_extra_binary_history_header_items = 0 + end function how_many_extra_binary_history_header_items + + + subroutine data_for_extra_binary_history_header_items( & + binary_id, n, names, vals, ierr) + type (binary_info), pointer :: b + integer, intent(in) :: binary_id, n + character (len=maxlen_binary_history_column_name) :: names(n) + real(dp) :: vals(n) + integer, intent(out) :: ierr + ierr = 0 + call binary_ptr(binary_id, b, ierr) + if (ierr /= 0) then + write(*,*) 'failed in binary_ptr' + return + end if + end subroutine data_for_extra_binary_history_header_items + + + integer function how_many_extra_binary_history_columns(binary_id) + use binary_def, only: binary_info + integer, intent(in) :: binary_id + how_many_extra_binary_history_columns = 0 + end function how_many_extra_binary_history_columns + + + subroutine data_for_extra_binary_history_columns(binary_id, n, names, vals, ierr) + type (binary_info), pointer :: b + integer, intent(in) :: binary_id + integer, intent(in) :: n + character (len=maxlen_binary_history_column_name) :: names(n) + real(dp) :: vals(n) + integer, intent(out) :: ierr + ierr = 0 + call binary_ptr(binary_id, b, ierr) + if (ierr /= 0) then + write(*,*) 'failed in binary_ptr' + return + end if + + + end subroutine data_for_extra_binary_history_columns + + + integer function extras_binary_startup(binary_id,restart,ierr) + type (binary_info), pointer :: b + integer, intent(in) :: binary_id + integer, intent(out) :: ierr + logical, intent(in) :: restart + call binary_ptr(binary_id, b, ierr) + if (ierr /= 0) then ! failure in binary_ptr + return + end if + + if (.not. restart) then + b% lxtra(1) = .false. ! flag for end of donor's main sequence + b% lxtra(2) = .false. ! flag for beginning RLOF + b% lxtra(3) = .false. ! flag for end of accretor's main sequence + ! initialize some quantitites + b% xtra(1) = -1d99 ! donor radius at TAMS + ! extras are used to store the two tidal sychronization timescales (rad/conv) for each star. + ! -1 if they are point masses + if (b% point_mass_i /= 1) then + b% s1% xtra(2) = -1.0d0 ! t_sync_conv_1 + b% s1% xtra(3) = -1.0d0 ! t_sync_rad_1 + end if + if (b% point_mass_i /= 2) then + b% s2% xtra(2) = -1.0d0 ! t_sync_conv_2 + b% s2% xtra(3) = -1.0d0 ! t_sync_rad_2 + end if + b% xtra(4) = -1d99 ! radius at onset RLOF + end if + extras_binary_startup = keep_going + end function extras_binary_startup + + integer function extras_binary_start_step(binary_id,ierr) + type (binary_info), pointer :: b + integer, intent(in) :: binary_id + integer, intent(out) :: ierr + + extras_binary_start_step = keep_going + call binary_ptr(binary_id, b, ierr) + if (ierr /= 0) then ! failure in binary_ptr + return + end if + end function extras_binary_start_step + + !Return either keep_going, retry or terminate + integer function extras_binary_check_model(binary_id) + type (binary_info), pointer :: b + integer, intent(in) :: binary_id + integer:: i_don, i_acc + real(dp) :: r_l2, d_l2, TAMS_h1_treshold + real(dp) :: q + integer :: ierr + call binary_ptr(binary_id, b, ierr) + if (ierr /= 0) then ! failure in binary_ptr + return + end if + extras_binary_check_model = keep_going + + TAMS_h1_treshold = 1d-2 + + if (b% point_mass_i /= 1) then !Check for L2 overflow for primary when not in MS + if (b% s1% center_h1 < TAMS_h1_treshold) then ! Misra et al. 2020 L2 overflow check starts only after TAMS of one of the two stars. Before we use Marchant et al. 2016 L2 overflow check implemented already in MESA + i_don = 1 + i_acc = 2 + if (b% m(i_don) .gt. b% m(i_acc)) then !mdon>macc, q<1 + q = b% m(i_acc) / b% m(i_don) + r_l2 = b% rl(i_don) * (0.784_dp * pow(q,1.05_dp) * exp(-0.188_dp*q) + 1.004_dp) + d_l2 = b% rl(i_don) * (3.334_dp * pow(q, 0.514_dp) * exp(-0.052_dp*q) + 1.308_dp) + !Condition to stop when star overflows L2 + if (b% r(i_don) .ge. (r_l2)) then + ! extras_binary_check_model = terminate + write(*,'(g0)') 'termination code: overflow from L2 (R_L2) surface for q(=Macc/Mdon)<1, donor is star 1' + ! return + end if + if (b% r(i_don) .ge. (d_l2)) then + ! extras_binary_check_model = terminate + write(*,'(g0)') 'termination code: overflow from L2 (D_L2) distance for q(=Macc/Mdon)<1, donor is star 1' + !return + end if + + else !mdonor1 + q = b% m(i_acc) / b% m(i_don) + r_l2 = b% rl(i_don) * (0.29066811_dp * pow(q, 0.82788069_dp) * exp(-0.01572339_dp*q) + 1.36176161_dp) + d_l2 = b% rl(i_don) * (-0.04029713_dp * pow(q, 0.862143_dp) * exp(-0.04049814_dp*q) + 1.88325644_dp) + if (b% r(i_don) .ge. (r_l2)) then + ! extras_binary_check_model = terminate + write(*,'(g0)') 'termination code: overflow from L2 (R_L2) surface for q(=Macc/Mdon)>1, donor is star 1' + ! return + end if + if (b% r(i_don) .ge. (d_l2)) then + !extras_binary_check_model = terminate + write(*,'(g0)') 'termination code: overflow from L2 (D_L2) distance for q(=Macc/Mdon)>1, donor is star 1' + !return + end if + end if + end if + end if + + if (b% point_mass_i /= 2) then !Check for L2 overflow for primary when not in MS + if (b% s2% center_h1 < TAMS_h1_treshold) then ! Misra et al. 2020 L2 overflow check starts only after TAMS of one of the two stars. Before we use Marchant et al. 2016 L2 overflow check implemented already in MESA + i_don = 2 + i_acc = 1 + if (b% m(i_don) .gt. b% m(i_acc)) then !mdon>macc, q<1 + q = b% m(i_acc) / b% m(i_don) + r_l2 = b% rl(i_don) * (0.784_dp * pow(q, 1.05_dp) * exp(-0.188_dp * q) + 1.004_dp) + d_l2 = b% rl(i_don) * (3.334_dp * pow(q, 0.514_dp) * exp(-0.052_dp * q) + 1.308_dp) + !Condition to stop when star overflows L2 + if (b% r(i_don) .ge. (r_l2)) then + !extras_binary_check_model = terminate + write(*,'(g0)') 'termination code: overflow from L2 (R_L2) surface for q(=Macc/Mdon)<1, donor is star 2' + ! return + end if + if (b% r(i_don) .ge. (d_l2)) then + !extras_binary_check_model = terminate + write(*,'(g0)') 'termination code: overflow from L2 (D_L2) distance for q(=Macc/Mdon)<1, donor is star 2' + ! return + end if + + else !mdonor1 + q = b% m(i_acc) / b% m(i_don) + r_l2 = b% rl(i_don) * (0.29066811_dp * pow(q, 0.82788069_dp) * exp(-0.01572339_dp*q) + 1.36176161_dp) + d_l2 = b% rl(i_don) * (-0.04029713_dp * pow(q, 0.862143_dp) * exp(-0.04049814_dp*q) + 1.88325644_dp) + if (b% r(i_don) .ge. (r_l2)) then + !extras_binary_check_model = terminate + write(*,'(g0)') 'termination code: overflow from L2 (R_L2) surface for q(=Macc/Mdon)>1, donor is star 2' + !return + end if + if (b% r(i_don) .ge. (d_l2)) then + !extras_binary_check_model = terminate + write(*,'(g0)') 'termination code: overflow from L2 (D_L2) distance for q(=Macc/Mdon)>1, donor is star 2' + !return + end if + end if + end if + end if + + if (b% point_mass_i/=0 .and. ((b% rl_relative_gap(1) .ge. 0.d0) & + .or. (abs(b% mtransfer_rate/(Msun/secyer)) .ge. 1.0d-10))) then + if (b% point_mass_i/=1) then + i_don = 1 + else + i_don = 2 + end if + end if + + end function extras_binary_check_model + + + ! returns either keep_going or terminate. + ! note: cannot request retry; extras_check_model can do that. + integer function extras_binary_finish_step(binary_id) + use chem_def, only: ih1 + use binary_lib, only: binary_set_separation_eccentricity + type (binary_info), pointer :: b + integer, intent(in) :: binary_id + integer :: star_id, ierr + character (len=200) :: fname + real(dp) :: q, mdot_limit_low, mdot_limit_high, & + center_h1, center_h1_old, center_he4, center_he4_old, & + rl23,rl2_1,trap_rad, mdot_edd, mdot_edd_eta, TAMS_h1_treshold + logical :: is_ne_biggest + call binary_ptr(binary_id, b, ierr) + if (ierr /= 0) then ! failure in binary_ptr + return + end if + extras_binary_finish_step = keep_going + + ! abundance threshold for center_h1 defining TAMS + TAMS_h1_treshold = 1d-2 + + ! find donor's TAMS + if ((b% lxtra(1) .eqv. .false.) .and. & + (b% s1% xa(b% s1% net_iso(ih1), b% s1% nz) < TAMS_h1_treshold)) then + b% lxtra(1) = .true. + b% xtra(1) = b% s1% r(1) + print *, "saved donor radius at TAMS", b% xtra(1)/Rsun + write(fname, fmt="(a14)") 'donor_TAMS.mod' + call star_write_model(b% star_ids(1), fname, ierr) + write(fname, fmt="(a15)") 'donor_TAMS.data' + call star_write_profile_info(b% star_ids(1), trim(b% s1% log_directory)//'/'//trim(fname), ierr) + end if + + ! find beginning RLOF + if (b% lxtra(2) .eqv. .false.) then + ! RLOF has not started before + if (b% rl_relative_gap(b% d_i) > 0) then + write(fname, fmt="(a20)") 'donor_onset_RLOF.mod' + call star_write_model(b% star_ids(1), fname, ierr) + if (b% point_mass_i /= 2) then + write(fname, fmt="(a23)") 'accretor_onset_RLOF.mod' + call star_write_model(b% star_ids(2), fname, ierr) + end if + b% lxtra(2) = .true. + b% xtra(4) = b% s_donor% r(1) + end if + end if + + ! if RLOF ended detach and switch to single star evolutuon + if ((b% lxtra(2) .eqv. .true.) .and. & ! RLOF has started before + (b% rl_relative_gap(1) < 0) .and. & ! donor is detached + (b% s1% r(1) <= min(b% xtra(4), b% xtra(1))) .and. & ! donor smaller than R_roche_lobe at onset RLOF and R_TAMS + (b% job% evolve_both_stars .eqv. .true.)) then + print *, "save models after RLOF" + write(fname, fmt="(a18)") 'donor_postRLOF.mod' + call star_write_model(b% star_ids(1), fname, ierr) + if (ierr /= 0) return + if (b% point_mass_i == 2) then + write(fname, fmt="(a21)") 'accretor_postRLOF.mod' + call star_write_model(b% star_ids(2), fname, ierr) + if (ierr /= 0) return + end if + b% lxtra(2) = .false. ! so we dont' get back in here + end if + + ! find accretor TAMS if you are evolving it + if ((b% lxtra(3) .eqv. .false.) .and. & ! not accretor TAMS yet + (b% point_mass_i /= 2)) then ! computing the accretor + if (b% s2 % xa(b% s2% net_iso(ih1), b% s2% nz) < TAMS_h1_treshold) then + write(fname, fmt="(a17)") 'accretor_TAMS.mod' + call star_write_model(b% star_ids(2), fname, ierr) + write(fname, fmt="(a18)") 'accretor_TAMS.data' + call star_write_profile_info(b% star_ids(2), trim(b% s2% log_directory)//'/'//trim(fname), ierr) + b% lxtra(3) = .true. + end if + end if + + + if (b% point_mass_i == 0) then + ! Check for simultaneous RLOF from both stars after TAMS of one star + if (b% s2% center_h1 < TAMS_h1_treshold .or. b% s1% center_h1 < TAMS_h1_treshold) then + if (b% rl_relative_gap(1) > 0.0_dp .and. b% rl_relative_gap(2) > 0.0_dp) then + extras_binary_finish_step = terminate + write(*,'(g0)') "termination code: Both stars fill their Roche Lobe and at least one of them is off MS" + end if + end if + end if + + !check if mass transfer rate reached maximun, assume unstable regime if it happens + if (abs(b% mtransfer_rate/(Msun/secyer)) >= 1d-1) then !stop when larger than 0.1 Msun/yr + extras_binary_finish_step = terminate + write(*,'(g0)') "termination code: Reached maximum mass transfer rate: 1d-1" + end if + + ! check for L2 overflow after ZAMS, but before TAMS + if(.not. b% ignore_rlof_flag .and. extras_binary_finish_step /= terminate .and. (b% point_mass_i == 0)) then ! only when we evolve both stars in MS + if (b% s1% center_h1 > TAMS_h1_treshold .and. b% s2% center_h1 > TAMS_h1_treshold) then + if (b% m(1) > b% m(2)) then + q = b% m(2) / b% m(1) + star_id = 2 + else + q = b% m(1) / b% m(2) + star_id = 1 + end if + if (b% rl_relative_gap(star_id) > 0.29858997d0*atan(1.83530121d0*pow(q,0.39661426d0))) then + write(*,'(g0)') "termination code: Terminate due to L2 overflow during case A" + extras_binary_finish_step = terminate + end if + end if + end if + end function extras_binary_finish_step + + subroutine extras_binary_after_evolve(binary_id, ierr) + type (binary_info), pointer :: b + integer, intent(in) :: binary_id + integer, intent(out) :: ierr + call binary_ptr(binary_id, b, ierr) + if (ierr /= 0) then ! failure in binary_ptr + return + end if + ! save profiles even if crashed MANOS: this should be checking if + !s1 is a point mass, but in minimum timestep cases, it is + !behaving like becoming a point mass.. So for now it is assuming + !it it is not a point mass, not sure if it works with compact + !object binaries. + call star_write_profile_info(b% s1% id, "LOGS1/final_profile.data", ierr) + if (ierr /= 0) then + STOP "failed to save profile for star 1" + end if + if (b% point_mass_i /= 2) then + call star_write_profile_info(b% s2% id, "LOGS2/final_profile.data", ierr) + end if + if (ierr /= 0) then + STOP "failed to save profile for star 2" + end if + end subroutine extras_binary_after_evolve + +end module run_binary_extras diff --git a/star/dev_cases_massive_stars/14Msun_donor/src/run_star_extras.f90 b/star/dev_cases_massive_stars/14Msun_donor/src/run_star_extras.f90 new file mode 100644 index 000000000..f1746bca6 --- /dev/null +++ b/star/dev_cases_massive_stars/14Msun_donor/src/run_star_extras.f90 @@ -0,0 +1,314 @@ +! *********************************************************************** +! +! Copyright (C) 2012 Bill Paxton +! +! this file is part of mesa. +! +! mesa is free software; you can redistribute it and/or modify +! it under the terms of the gnu general library public license as published +! by the free software foundation; either version 2 of the license, or +! (at your option) any later version. +! +! mesa is distributed in the hope that it will be useful, +! but without any warranty; without even the implied warranty of +! merchantability or fitness for a particular purpose. see the +! gnu library general public license for more details. +! +! you should have received a copy of the gnu library general public license +! along with this software; if not, write to the free software +! foundation, inc., 59 temple place, suite 330, boston, ma 02111-1307 usa +! +! *********************************************************************** + +module run_star_extras + + use star_lib + use star_def + use const_def + use math_lib + use chem_def + use num_lib + use binary_def + use ionization_def + + implicit none + + ! these routines are called by the standard run_star check_model + +contains + + + subroutine extras_controls(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + + ! this is the place to set any procedure pointers you want to change + ! e.g., other_wind, other_mixing, other_energy (see star_data.inc) + + + ! the extras functions in this file will not be called + ! unless you set their function pointers as done below. + ! otherwise we use a null_ version which does nothing (except warn). + + s% extras_startup => extras_startup + s% extras_start_step => extras_start_step + s% extras_check_model => extras_check_model + s% extras_finish_step => extras_finish_step + s% extras_after_evolve => extras_after_evolve + s% how_many_extra_history_columns => how_many_extra_history_columns + s% data_for_extra_history_columns => data_for_extra_history_columns + s% how_many_extra_profile_columns => how_many_extra_profile_columns + s% data_for_extra_profile_columns => data_for_extra_profile_columns + + s% how_many_extra_history_header_items => how_many_extra_history_header_items + s% data_for_extra_history_header_items => data_for_extra_history_header_items + s% how_many_extra_profile_header_items => how_many_extra_profile_header_items + s% data_for_extra_profile_header_items => data_for_extra_profile_header_items + + end subroutine extras_controls + + subroutine extras_startup(id, restart, ierr) + integer, intent(in) :: id + logical, intent(in) :: restart + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + + ! Initialize variables on startup. + s% lxtra(11) = .true. ! do we still need to read inlist_to_CC? -> yes. + + end subroutine extras_startup + + + integer function extras_start_step(id) + integer, intent(in) :: id + integer :: ierr + integer :: binary_id + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_start_step = 0 + + ! these two if statements below could be combined. -EbF + if ((s% center_h1 < 1.0d-2) .and. & + (s% center_he4 < 1.0d-4 .or. s% log_center_temperature >= 9.3d0) & + .and. (s% center_c12 < 2.0d-2)) then + + if(s% x_logical_ctrl(1) .and. s% lxtra(11)) then !check for central carbon depletion, only in case we run single stars. + print *, "*** Single star depleted carbon ***" + print *, "read inlist_to_CC" + call read_star_job(s, "inlist_to_cc", ierr) + if (ierr /= 0) then + print *, "Failed reading star_job in inlist_to_CC" + return + end if + print *, "read star_job from inlist_to_CC" + + call star_read_controls(id, "inlist_to_cc", ierr) + if (ierr /= 0) then + print *, "Failed reading controls in inlist_to_CC" + return + end if + print *, "read controls from inlist_to_CC" + s% lxtra(11) = .false. ! avoid re-entering here + end if + + end if + + ! We can also soften the surface BC by switching to a hydrodynamic BC. + if (s% log_center_temperature >= 9.5d0 .and. s% center_si28 <1d-3) then + s% use_compression_outer_BC = .true. + end if + + end function extras_start_step + + + ! returns either keep_going, retry, backup, or terminate. + integer function extras_check_model(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + real(dp) :: error, atol, rtol + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_check_model = keep_going + + + ! by default, indicate where (in the code) MESA terminated + if (extras_check_model == terminate) s% termination_code = t_extras_check_model + end function extras_check_model + + + integer function how_many_extra_history_columns(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_history_columns = 1 + end function how_many_extra_history_columns + + + subroutine data_for_extra_history_columns(id, n, names, vals, ierr) + use chem_def, only: chem_isos + integer, intent(in) :: id, n + character (len=maxlen_history_column_name) :: names(n) + real(dp) :: vals(n) + integer :: k + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + + names(1) = 'fe_core_infall_speed' + + k = 0 + if (s% fe_core_mass > 0.0d0) then + k = s% nz + do while (s% m(k) <= s% fe_core_mass * Msun) + k = k-1 ! loop outwards + end do + ! We multiply by -1, since v is negative. This yields a positive infall speed, e.g. 50 km/s. + vals(1) = - min(0d0, minval(s%v(k:s%nz))/1d5) + else + vals(1) = 0d0 + end if + + end subroutine data_for_extra_history_columns + + + integer function how_many_extra_profile_columns(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_profile_columns = 0 + end function how_many_extra_profile_columns + + + subroutine data_for_extra_profile_columns(id, n, nz, names, vals, ierr) + integer, intent(in) :: id, n, nz + character (len=maxlen_profile_column_name) :: names(n) + real(dp) :: vals(nz,n) + integer, intent(out) :: ierr + type (star_info), pointer :: s + integer :: k + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + end subroutine data_for_extra_profile_columns + + + integer function how_many_extra_history_header_items(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_history_header_items = 0 + end function how_many_extra_history_header_items + + + subroutine data_for_extra_history_header_items(id, n, names, vals, ierr) + integer, intent(in) :: id, n + character (len=maxlen_history_column_name) :: names(n) + real(dp) :: vals(n) + type(star_info), pointer :: s + integer, intent(out) :: ierr + integer :: i + end subroutine data_for_extra_history_header_items + + + integer function how_many_extra_profile_header_items(id) + integer, intent(in) :: id + integer :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + how_many_extra_profile_header_items = 0 + end function how_many_extra_profile_header_items + + + subroutine data_for_extra_profile_header_items(id, n, names, vals, ierr) + integer, intent(in) :: id, n + character (len=maxlen_profile_column_name) :: names(n) + real(dp) :: vals(n) + type(star_info), pointer :: s + integer, intent(out) :: ierr + ierr = 0 + call star_ptr(id,s,ierr) + if(ierr/=0) return + end subroutine data_for_extra_profile_header_items + + + ! returns either keep_going or terminate. + ! note: cannot request retry or backup; extras_check_model can do that. + integer function extras_finish_step(id) + integer, intent(in) :: id + integer :: ierr, k + real(dp) :: fe_core_infall_limit, current_fe_core_infall + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + extras_finish_step = keep_going + + ! Initialize variables + k = 0 + current_fe_core_infall = 0 + fe_core_infall_limit = max(500d0,s% x_ctrl(1)) ! in case s% x_ctrl(1) is not read on restart. + ! exit condition for star #2 + if (.not. s% x_logical_ctrl(1)) then ! stop + print *, "*** Single star depleted carbon ***" + extras_finish_step = terminate + end if + +! Custom Fe core collapse condition from Mathieu Renzo. + if (s% fe_core_mass > 0.0d0) then + k = s% nz + do while (s% m(k) <= s% fe_core_mass * Msun) + k = k-1 ! loop outwards + end do + ! k is now the outer index of the fe core + current_fe_core_infall = - min(0d0, minval(s%v(k:s%nz))/1d5) + if (current_fe_core_infall > 2d0) then ! avoid print out until the infall speed exceeds 2 km/s + write(*,*) 'fe_core_infall = ', current_fe_core_infall, 'km/s'! (-) + write (*,*) 'fe_core_infall limit', fe_core_infall_limit, 'km/s' + if (current_fe_core_infall >= fe_core_infall_limit) then + s% termination_code = t_fe_core_infall_limit + write(*, '(/,a,/, 99e20.10)') & + 'stop because fe_core_infall > fe_core_infall_limit', & + current_fe_core_infall, fe_core_infall_limit + print *, "treshold v used", maxval(abs(s%v(k:s%nz))) + extras_finish_step = terminate + end if + end if + end if + + if (extras_finish_step == terminate) s% termination_code = t_extras_finish_step + end function extras_finish_step + + + subroutine extras_after_evolve(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + type (star_info), pointer :: s + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + end subroutine extras_after_evolve +end module run_star_extras diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_project b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_project index f4838047f..81065ba11 100644 --- a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_project +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/inlist_project @@ -103,7 +103,7 @@ ! mlt mixing_length_alpha = 1.5 - MLT_option = 'TDC' + MLT_option = 'Henyey' use_Ledoux_criterion = .true. use_other_alpha_mlt = .true. ! implemented in run_star_extras diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/testhub.yml b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/testhub.yml index 2b486a02c..72737938e 100644 --- a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/testhub.yml +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/testhub.yml @@ -13,3 +13,18 @@ - 'fe_core_mass' extra_testhub_vals: - 1.6762420545401346E+00 + runtime_minutes: 50.66 + model_number: 10000 + star_age: 4.8397508405607743E+06 + num_retries: 1483 + log_rel_run_E_err: -7.6182935365022955 + steps: 10000 + retries: 1483 + redos: 0 + solver_calls_made: 11483 + solver_calls_failed: 1483 + solver_iterations: 96320 + extra_testhub_names: + - 'fe_core_mass' + extra_testhub_vals: + - 0.0000000000000000E+00 From 72b50ceb8b264dd777feafc197c6018f8c4b8e11 Mon Sep 17 00:00:00 2001 From: Mathieu Renzo Date: Sun, 17 May 2026 08:55:24 -0700 Subject: [PATCH 04/15] photos ~35 steps before crashing --- .../14Msun_donor/photos/1_x800 | Bin 0 -> 682480 bytes .../14Msun_donor/photos/b_x800 | Bin 0 -> 4588 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 star/dev_cases_massive_stars/14Msun_donor/photos/1_x800 create mode 100644 star/dev_cases_massive_stars/14Msun_donor/photos/b_x800 diff --git a/star/dev_cases_massive_stars/14Msun_donor/photos/1_x800 b/star/dev_cases_massive_stars/14Msun_donor/photos/1_x800 new file mode 100644 index 0000000000000000000000000000000000000000..70322f24cfca6feefd71a20e3a544caad189f707 GIT binary patch literal 682480 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%0Av+*8=O3>P@ey@s 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%0DTL%hEEsUKc6kzJf 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%0D+(fCM9zy}2;|^&2-kJN}R< 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

uu4Gg??Chy+AqFAgVyCOJDRAx4Z%;27Dy)eU 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

gBFPV+SAE-xGI+{{g0_>(8W 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

1@ihx)xfEPCVu1#P=0+tkW^f!Jv68Fzz= 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 L%lPZT-CzG3gh|3$ literal 0 HcmV?d00001 diff --git a/star/dev_cases_massive_stars/14Msun_donor/photos/b_x800 b/star/dev_cases_massive_stars/14Msun_donor/photos/b_x800 new file mode 100644 index 0000000000000000000000000000000000000000..0650864c7207df0af81c02ef0900a8f195d9ed08 GIT binary patch literal 4588 zcmd^=J7^R^7=Tv|hlPR$5z!dW1QLrVmv}K6LAfi8#72ulu8?uhojo?$$1!`}Lt-U} zq)H)Zx`0@u@=-((CD^H86Tu>&DNHLGg4hW9{}=w-+r5BrGeklLKK|LqeDm+lt4-6i zcAyQ|8Pl}InbO0HpT<)ZuXkx05-nMGYGV0i;u6K=q3+>dJ+o)C|-H%Ad&x>8O7j+(5QR zh`vY9@!ic@@Ef*TIXC^eZ}nQaY24kuxerSR?=;=t?Eh!0eJ`!wjUKoE)i0g}cqSYH zFirrpf7Q+kxIPY?0CoYpfjz)pU_WpGI1F?G=!gSHfi9pM=mm}e2_Oj!0;hl>;52Xs z7zTC#DFFM&e$Ykd5nfYXP~Fgi{{q4OF9VKeaGSX|og5c&1qGdmp63c|fr7jRE-cSr zhFCd$UWxHq$Lm-9B6pahB;$sB8@ Date: Sun, 17 May 2026 16:44:42 -0400 Subject: [PATCH 05/15] rename test case to match inlist --- .../.gitignore | 0 .../Makefile | 0 .../README.md | 0 .../clean | 0 .../history_columns.list | 0 .../inlist1 | 0 .../inlist2 | 0 .../inlist_binary | 0 .../inlist_both | 0 .../inlist_pgbinary | 0 .../inlist_pgstar | 0 .../inlist_to_cc | 0 .../photos/1_x800 | Bin .../photos/b_x800 | Bin .../profile_columns.list | 0 .../rate_tables/S13_r_be7_wk_li7.h5 | 0 .../re | 0 .../rn | 0 .../src/binary_run.f90 | 0 .../src/run_binary_extras.f90 | 0 .../src/run_star_extras.f90 | 0 21 files changed, 0 insertions(+), 0 deletions(-) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/.gitignore (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/Makefile (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/README.md (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/clean (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/history_columns.list (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/inlist1 (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/inlist2 (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/inlist_binary (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/inlist_both (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/inlist_pgbinary (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/inlist_pgstar (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/inlist_to_cc (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/photos/1_x800 (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/photos/b_x800 (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/profile_columns.list (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/rate_tables/S13_r_be7_wk_li7.h5 (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/re (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/rn (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/src/binary_run.f90 (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/src/run_binary_extras.f90 (100%) rename star/dev_cases_massive_stars/{14Msun_donor => 15M_binary_stripped_envelope}/src/run_star_extras.f90 (100%) diff --git a/star/dev_cases_massive_stars/14Msun_donor/.gitignore b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/.gitignore similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/.gitignore rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/.gitignore diff --git a/star/dev_cases_massive_stars/14Msun_donor/Makefile b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/Makefile similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/Makefile rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/Makefile diff --git a/star/dev_cases_massive_stars/14Msun_donor/README.md b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/README.md similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/README.md rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/README.md diff --git a/star/dev_cases_massive_stars/14Msun_donor/clean b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/clean similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/clean rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/clean diff --git a/star/dev_cases_massive_stars/14Msun_donor/history_columns.list b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/history_columns.list similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/history_columns.list rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/history_columns.list diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist1 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist1 similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/inlist1 rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist1 diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist2 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist2 similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/inlist2 rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist2 diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist_binary b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_binary similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/inlist_binary rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_binary diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist_both b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_both similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/inlist_both rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_both diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist_pgbinary b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_pgbinary similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/inlist_pgbinary rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_pgbinary diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist_pgstar b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_pgstar similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/inlist_pgstar rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_pgstar diff --git a/star/dev_cases_massive_stars/14Msun_donor/inlist_to_cc b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_to_cc similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/inlist_to_cc rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_to_cc diff --git a/star/dev_cases_massive_stars/14Msun_donor/photos/1_x800 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/photos/1_x800 similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/photos/1_x800 rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/photos/1_x800 diff --git a/star/dev_cases_massive_stars/14Msun_donor/photos/b_x800 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/photos/b_x800 similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/photos/b_x800 rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/photos/b_x800 diff --git a/star/dev_cases_massive_stars/14Msun_donor/profile_columns.list b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/profile_columns.list similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/profile_columns.list rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/profile_columns.list diff --git a/star/dev_cases_massive_stars/14Msun_donor/rate_tables/S13_r_be7_wk_li7.h5 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/rate_tables/S13_r_be7_wk_li7.h5 similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/rate_tables/S13_r_be7_wk_li7.h5 rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/rate_tables/S13_r_be7_wk_li7.h5 diff --git a/star/dev_cases_massive_stars/14Msun_donor/re b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/re similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/re rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/re diff --git a/star/dev_cases_massive_stars/14Msun_donor/rn b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/rn similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/rn rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/rn diff --git a/star/dev_cases_massive_stars/14Msun_donor/src/binary_run.f90 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/src/binary_run.f90 similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/src/binary_run.f90 rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/src/binary_run.f90 diff --git a/star/dev_cases_massive_stars/14Msun_donor/src/run_binary_extras.f90 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/src/run_binary_extras.f90 similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/src/run_binary_extras.f90 rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/src/run_binary_extras.f90 diff --git a/star/dev_cases_massive_stars/14Msun_donor/src/run_star_extras.f90 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/src/run_star_extras.f90 similarity index 100% rename from star/dev_cases_massive_stars/14Msun_donor/src/run_star_extras.f90 rename to star/dev_cases_massive_stars/15M_binary_stripped_envelope/src/run_star_extras.f90 From 5987df48c2d083bf21f0397853b1ca21b2f0524c Mon Sep 17 00:00:00 2001 From: Debraheem Date: Sun, 17 May 2026 20:40:38 -0400 Subject: [PATCH 06/15] run from inlist_binary instead of inlist --- .../15M_binary_stripped_envelope/inlist_binary | 6 ++++++ .../15M_binary_stripped_envelope/src/binary_run.f90 | 11 ++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_binary b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_binary index 879dbd675..38b1c435b 100644 --- a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_binary +++ b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_binary @@ -83,3 +83,9 @@ terminal_interval = 10 / ! end of binary_controls namelist + + +&pgbinary +read_extra_pgbinary_inlist(1) = .true. +extra_pgbinary_inlist_name(1) = 'inlist_pgbinary' +/ ! end of pgbinary namelist diff --git a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/src/binary_run.f90 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/src/binary_run.f90 index b542b6138..5b373ef2e 100644 --- a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/src/binary_run.f90 +++ b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/src/binary_run.f90 @@ -1,6 +1,11 @@ program binary_run - use run_binary, only: do_run_binary - - call do_run_binary(.true.) + use binary_lib, only: run1_binary + use run_star_extras + use run_binary_extras + + integer :: ierr + + call run1_binary(.true., extras_controls, extras_binary_controls, & + ierr, 'inlist_binary') end program From 035dff9d47d8b030f5d660a2877e915ae7a17cdc Mon Sep 17 00:00:00 2001 From: Debraheem Date: Sun, 17 May 2026 20:51:36 -0400 Subject: [PATCH 07/15] add mk and clean scripts --- .../dev_cases_massive_stars/15M_binary_stripped_envelope/clean | 3 ++- star/dev_cases_massive_stars/15M_binary_stripped_envelope/mk | 3 +++ star/dev_cases_massive_stars/20M_pre_ms_to_cc/clean | 3 +++ star/dev_cases_massive_stars/20M_pre_ms_to_cc/mk | 3 +++ .../40M_carbon_burning_envelope_issues/clean | 3 +++ .../40M_carbon_burning_envelope_issues/mk | 3 +++ star/dev_cases_massive_stars/60M_envelope_issues/clean | 3 +++ star/dev_cases_massive_stars/60M_envelope_issues/mk | 3 +++ star/dev_cases_massive_stars/wd_nova_burst/clean | 3 +++ star/dev_cases_massive_stars/wd_nova_burst/mk | 3 +++ 10 files changed, 29 insertions(+), 1 deletion(-) create mode 100755 star/dev_cases_massive_stars/15M_binary_stripped_envelope/mk create mode 100755 star/dev_cases_massive_stars/20M_pre_ms_to_cc/clean create mode 100755 star/dev_cases_massive_stars/20M_pre_ms_to_cc/mk create mode 100755 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/clean create mode 100755 star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/mk create mode 100755 star/dev_cases_massive_stars/60M_envelope_issues/clean create mode 100755 star/dev_cases_massive_stars/60M_envelope_issues/mk create mode 100755 star/dev_cases_massive_stars/wd_nova_burst/clean create mode 100755 star/dev_cases_massive_stars/wd_nova_burst/mk diff --git a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/clean b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/clean index fe8d63c0c..74f37b9ce 100755 --- a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/clean +++ b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/clean @@ -1,2 +1,3 @@ -cd make +#!/usr/bin/env bash + make clean diff --git a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/mk b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/mk new file mode 100755 index 000000000..d9eae582f --- /dev/null +++ b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/mk @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +make diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/clean b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/clean new file mode 100755 index 000000000..74f37b9ce --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/clean @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +make clean diff --git a/star/dev_cases_massive_stars/20M_pre_ms_to_cc/mk b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/mk new file mode 100755 index 000000000..d9eae582f --- /dev/null +++ b/star/dev_cases_massive_stars/20M_pre_ms_to_cc/mk @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +make diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/clean b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/clean new file mode 100755 index 000000000..74f37b9ce --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/clean @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +make clean diff --git a/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/mk b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/mk new file mode 100755 index 000000000..d9eae582f --- /dev/null +++ b/star/dev_cases_massive_stars/40M_carbon_burning_envelope_issues/mk @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +make diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/clean b/star/dev_cases_massive_stars/60M_envelope_issues/clean new file mode 100755 index 000000000..74f37b9ce --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/clean @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +make clean diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/mk b/star/dev_cases_massive_stars/60M_envelope_issues/mk new file mode 100755 index 000000000..d9eae582f --- /dev/null +++ b/star/dev_cases_massive_stars/60M_envelope_issues/mk @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +make diff --git a/star/dev_cases_massive_stars/wd_nova_burst/clean b/star/dev_cases_massive_stars/wd_nova_burst/clean new file mode 100755 index 000000000..74f37b9ce --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/clean @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +make clean diff --git a/star/dev_cases_massive_stars/wd_nova_burst/mk b/star/dev_cases_massive_stars/wd_nova_burst/mk new file mode 100755 index 000000000..d9eae582f --- /dev/null +++ b/star/dev_cases_massive_stars/wd_nova_burst/mk @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +make From c4457b950abd6f43f0ec148e01d60054624a75ef Mon Sep 17 00:00:00 2001 From: mrenzo Date: Thu, 21 May 2026 11:57:03 -0400 Subject: [PATCH 08/15] [skip ci] add files with sane function names TODO: - pass arguments - create arguments in pgstar namelist - create grid pgstar --- star/private/pgstar_equation_residuals.f90 | 167 +++++++++++ star/private/pgstar_kipp_residuals.f90 | 325 +++++++++++++++++++++ 2 files changed, 492 insertions(+) create mode 100644 star/private/pgstar_equation_residuals.f90 create mode 100644 star/private/pgstar_kipp_residuals.f90 diff --git a/star/private/pgstar_equation_residuals.f90 b/star/private/pgstar_equation_residuals.f90 new file mode 100644 index 000000000..bd3d80a30 --- /dev/null +++ b/star/private/pgstar_equation_residuals.f90 @@ -0,0 +1,167 @@ +! *********************************************************************** +! +! Copyright (C) 2010 The MESA Team +! +! This program is free software: you can redistribute it and/or modify +! it under the terms of the GNU Lesser General Public License +! as published by the Free Software Foundation, +! either version 3 of the License, or (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +! See the GNU Lesser General Public License for more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with this program. If not, see . +! +! *********************************************************************** + + +module pgstar_equation_residuals + + use star_pgstar + + + implicit none + +contains + + subroutine equ_resid_plot(id, device_id, ierr) + + integer, intent(in) :: id + integer, intent(in) :: device_id + integer, intent(out) :: ierr + + type(star_info), pointer :: s + + integer :: i_eq + integer :: n, last_model_plotted + + real :: xmin, xmax + real :: ymin, ymax + + real, dimension(max_resid_hist) :: xvec + real, dimension(max_resid_hist) :: yvec + + ierr = 0 + + call star_ptr(id, s, ierr) + if (ierr /= 0) return + + if (.not. allocated(resid_hist_model)) then + resid_hist_nvar = s%nvar_hydro + allocate(resid_hist_model(max_resid_hist)) + allocate(resid_hist_vals(resid_hist_nvar, max_resid_hist)) + allocate(resid_equ_names(resid_hist_nvar)) + + do i_eq = 1, resid_hist_nvar + resid_equ_names(i_eq) = trim(s%nameofequ(i_eq)) + end do + + n_resid_hist = 0 + end if + + if (s%model_number /= last_model_plotted) then + last_model_plotted = s%model_number + if (n_resid_hist < max_resid_hist) then + n_resid_hist = n_resid_hist + 1 + else + resid_hist_model(1:max_resid_hist-1) = resid_hist_model(2:max_resid_hist) + resid_hist_vals(:,1:max_resid_hist-1) = resid_hist_vals(:,2:max_resid_hist) + end if + + resid_hist_model(n_resid_hist) = s%model_number + + do i_eq = 1, resid_hist_nvar + resid_hist_vals(i_eq,n_resid_hist) = & + real(max(1d-40, & + maxval(abs(s%equ(i_eq,1:s%nz))))) + end do + + end if + + n = n_resid_hist + if (n < 2) return ! nothing to plot yet + + xvec(1:n) = real(resid_hist_model(1:n)) + + xmin = xvec(1) + xmax = xvec(n) + + if (xmin >= xmax) xmax = xmin + 1.0 + + ymin = minval(resid_hist_vals(:,1:n)) + ymax = maxval(resid_hist_vals(:,1:n)) + ymin = max(ymin, 1e-20) + ymax = max(ymax, 10.0*ymin) + + call pgslct(device_id) + call pgsave + call pgeras + call pgsvp(0.12, 0.88, 0.12, 0.88) + call pgswin(xmin, xmax, log10(ymin), log10(ymax)) + call pgscf(1) + call pgsch(1.0) + call pgsci(1) + call pgbox('BCNST',0.0,0,'BCNST',0.0,0) + call pgmtxt('B',2.5,0.5,0.5,'Model Number') + call pgmtxt('L',3.0,0.5,0.5, 'log10(max |residual|)') + call pgmtxt('T',1.0,0.5,0.5,'Maximum structural equation residuals') + + ! draw lines + do i_eq = 1, resid_hist_nvar + yvec(1:n) = log10(resid_hist_vals(i_eq,1:n)) + call pgsci(mod(i_eq-1,13)+2) + call pgline(n, xvec, yvec) + end do + + ! legend + call pgsch(0.65) + + do i_eq = 1, resid_hist_nvar + call pgsci(mod(i_eq-1,13)+2) + call pgptxt( & + xmin + (0.55 + 0.06*real(i_eq-1))*(xmax-xmin), & + log10(ymax) - 0.03*(log10(ymax)-log10(ymin)), & + 0.0, 0.0, & + trim(resid_equ_names(i_eq))) + end do + + call pgsci(1) + call pgunsa + + end subroutine equ_resid_plot + + + + ! history of residuals for each structure equation + subroutine do_equ_resid_plot(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + + type(pgstar_win_file_data), pointer :: p + type(star_info), pointer :: s + + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + + p => s%pg%pgstar_win_file_ptr(i_Other) + p%plot => equ_resid_plot + p%id = i_Other + p%name = 'Max Residual per equation across mesh points' + p%win_flag = .true. + p%win_width = 12.0 + p%win_aspect_ratio = 0.6 + p%file_flag = .true. + p%file_dir = 'png' ! folder where to save files + p%file_prefix = 'eq_resid_' + p%file_interval = 5 + p%file_width = -1.0 + p%file_aspect_ratio = -1.0 + + end subroutine do_equ_resid_plot + + +end module pgstar_equation_residuals diff --git a/star/private/pgstar_kipp_residuals.f90 b/star/private/pgstar_kipp_residuals.f90 new file mode 100644 index 000000000..54189a14f --- /dev/null +++ b/star/private/pgstar_kipp_residuals.f90 @@ -0,0 +1,325 @@ +! *********************************************************************** +! +! Copyright (C) 2010-2019 The MESA Team +! +! This program is free software: you can redistribute it and/or modify +! it under the terms of the GNU Lesser General Public License +! as published by the Free Software Foundation, +! either version 3 of the License, or (at your option) any later version. +! +! This program is distributed in the hope that it will be useful, +! but WITHOUT ANY WARRANTY; without even the implied warranty of +! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +! See the GNU Lesser General Public License for more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with this program. If not, see . +! +! *********************************************************************** + +module pgstar_kipp_residuals + + use star_pgstar + use pgstar_colors + use const_def, only: dp, Msun + + implicit none + +contains + + ! Kippenhahn-style log10(max(|res|)) across all equations for a + ! given space-time location + subroutine Kipp_residuals_plot(id, device_id, ierr) + integer, intent(in) :: id, device_id + integer, intent(out) :: ierr + + type(star_info), pointer :: s + integer :: k, neq, col + + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + + neq = size(s%equ, 1) ! number of equations per cell + + ! --- allocate history buffer on first call --- + if (.not. allocated(nr_resid_buf)) then + ! make 5 times bigger than current nz + allocate(nr_resid_buf(NR_MAX_MODELS, 5 * s%nz)) + allocate(nr_ycoord_buf(NR_MAX_MODELS, 5 * s%nz)) + allocate(nr_model_buf(NR_MAX_MODELS)) + allocate(nr_zone_buf(NR_MAX_MODELS)) + nr_resid_buf = -99.0 + nr_ycoord_buf = 0.0 ! zero-init so unused cells are safely masked + nr_n_cells = s%nz + else if (s%nz > 0.95 * size(nr_resid_buf, 2)) then + ! check if remeshing has increased nz beyond 95% of the + ! current array size, reallocate + allocate(tmp_resid_buf(NR_MAX_MODELS, 5 * s%nz)) + allocate(tmp_mass_buf(NR_MAX_MODELS, 5 *s%nz)) + + tmp_resid_buf = -99.0 + tmp_mass_buf = 0.0 + + ! Copy older compressed history into the newly expanded arrays + tmp_resid_buf(:, 1:nr_n_cells) = nr_resid_buf(:, 1:nr_n_cells) + tmp_mass_buf(:, 1:nr_n_cells) = nr_ycoord_buf(:, 1:nr_n_cells) + + call move_alloc(tmp_resid_buf, nr_resid_buf) + call move_alloc(tmp_mass_buf, nr_ycoord_buf) + nr_n_cells = s%nz + end if + + + ! --- roll buffer if full --- + if (nr_n_stored < NR_MAX_MODELS) then + nr_n_stored = nr_n_stored + 1 + col = nr_n_stored + else + nr_model_buf(1:NR_MAX_MODELS-1) = nr_model_buf(2:NR_MAX_MODELS) + nr_resid_buf(1:NR_MAX_MODELS-1, :) = nr_resid_buf(2:NR_MAX_MODELS, :) + nr_ycoord_buf(1:NR_MAX_MODELS-1, :) = nr_ycoord_buf(2:NR_MAX_MODELS, :) + col = NR_MAX_MODELS + end if + + nr_model_buf(col) = s%model_number + nr_zone_buf(col) = s%nz + ! do k = 1, s%nz + ! nr_resid_buf(col, k) = safe_log10(maxval(abs(s%equ(1:neq, k)))) ! residuals are cell-centered + ! nr_ycoord_buf(col, k) = s%m(k) - 0.5 * s%dm(k) ! outer face mass coord minus half mass of the cell + ! end do + + do k = 1, s%nz + nr_resid_buf(col, k) = & + safe_log10(maxval(abs(s%equ(1:neq, k)))) + select case (s%x_integer_ctrl(1)) + case (NR_COORD_MASS) + nr_ycoord_buf(col, k) = s%m(k)/Msun + case (NR_COORD_LOGR) + ! cell-centered radius in log10(R/Rsun) + if (k < s%nz) then + nr_ycoord_buf(col, k) = safe_log10(0.5d0 * (s%r(k) + s%r(k+1)) / Rsun) + else + nr_ycoord_buf(col, k) = safe_log10(0.5d0*s%r(k)/Rsun) + end if + case (NR_COORD_TAU) + ! optical depth + nr_ycoord_buf(col, k) = safe_log10(s%tau(k)) + case default + ! cell-centered mass coordinate + nr_ycoord_buf(col, k) = (s%m(k) - 0.5d0*s%dm(k))/Msun + end select + end do + + + call pgslct(device_id) + call pgbbuf() + call pgeras() + call Kipp_residuals_render(ierr, id) + call pgebuf() + + end subroutine Kipp_residuals_plot + + subroutine Kipp_residuals_render(ierr, id) + integer, intent(in) :: id + integer, intent(out) :: ierr + real, parameter :: missing_val = 1d-30 + real, allocatable :: img(:,:), coord_grid(:) + real :: tr(6), fg, bg, xlo, xhi, dx + real :: clo, chi, dcoord, coord_j, frac + integer :: nx, ny, i, j, k, nz_i + logical :: y_reverse + type(star_info), pointer :: s + + ! ----------------------------------------- colorbar definition + real :: bright, contra + real, dimension(9) :: l, r, g, b + + l = (/ & + 0.00, 0.12, 0.25, 0.38, 0.50, & + 0.62, 0.75, 0.88, 1.00 /) + + r = (/ & + 0.00, 0.05, 0.15, 0.32, 0.55, & + 0.78, 0.93, 0.99, 1.00 /) + + g = (/ & + 0.00, 0.02, 0.04, 0.06, 0.10, & + 0.18, 0.32, 0.58, 0.95 /) + + b = (/ & + 0.00, 0.08, 0.18, 0.32, 0.36, & + 0.28, 0.16, 0.08, 0.80 /) + + contra = 1.0 + bright = 0.5 + + call pgscir(16,255) + call pgctab(l, r, g, b, 9, contra, bright) + ! ----------------------------------------- end colorbar + + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + + if (nr_n_stored < 2) return + + nx = nr_n_stored + ny = nr_n_cells + + allocate(img(nx, ny)) + allocate(coord_grid(ny)) + + chi = -1.0e30 + clo = 1.0e30 + do i = 1, nx + nz_i = nr_zone_buf(i) + do k = 1, nz_i + if (nr_ycoord_buf(i,k) > chi) chi = nr_ycoord_buf(i,k) + ! m(k) is positive; skip any zero-initialised slots + if (nr_ycoord_buf(i,k) > 0.0 .and. nr_ycoord_buf(i,k) < clo) & + clo = nr_ycoord_buf(i,k) + end do + end do + + select case (s%x_integer_ctrl(1)) + case (NR_COORD_MASS) + y_reverse = .false. + case (NR_COORD_LOGR) + y_reverse = .false. + case (NR_COORD_TAU) + y_reverse = .true. + case default + y_reverse = .false. + end select + + dcoord = (chi - clo) / real(ny - 1) + + do j = 1, ny + if (.not. y_reverse) then + coord_grid(j) = clo + real(j - 1) * dcoord + else + coord_grid(j) = chi - real(j - 1) * dcoord + end if + end do + + ! --- interpolate residuals onto the uniform grid --- + img = missing_val + do i = 1, nx + nz_i = nr_zone_buf(i) + do j = 1, ny + coord_j = coord_grid(j) + do k = 1, nz_i - 1 + ! skip invalid cells + if (nr_resid_buf(i,k) == missing_val) cycle + if (nr_resid_buf(i,k+1) == missing_val) cycle + ! works for either increasing or decreasing coordinates + if ( (nr_ycoord_buf(i,k) - coord_j) * & + (nr_ycoord_buf(i,k+1) - coord_j) <= 0d0 ) then + if (abs(nr_ycoord_buf(i,k) - nr_ycoord_buf(i,k+1)) > 1d-99) then + frac = (coord_j - nr_ycoord_buf(i,k+1)) / & + (nr_ycoord_buf(i,k) - nr_ycoord_buf(i,k+1)) + else + frac = 0.5d0 + end if + img(i,j) = nr_resid_buf(i,k+1) + & + frac * (nr_resid_buf(i,k) - nr_resid_buf(i,k+1)) + exit + end if + end do + end do + end do + ! --- x range centred on model numbers --- + dx = max(1.0, real(nr_model_buf(nx) - nr_model_buf(1)) / real(nx - 1)) + xlo = real(nr_model_buf(1)) - 0.5*dx + xhi = real(nr_model_buf(nx)) + 0.5*dx + + ! --- transformation matrix for pgimag --- + ! world_y(j) = tr(4) + tr(6)*j + ! j=1 -> mhi => tr(4) = mhi - tr(6) = mhi + dm + ! j=ny -> mlo => confirms tr(6) = -dm + tr(1) = xlo + tr(2) = (xhi - xlo) / real(nx) + tr(3) = 0.0 + tr(4) = chi + dcoord + tr(5) = 0.0 + tr(6) = -dcoord + + ! color scale + fg = nr_resid_max + bg = nr_resid_min + if (fg <= -100) fg = maxval(img) + if (bg <= -100) bg = minval(img, mask=(img > -19.9)) + if (bg >= fg) bg = fg - 6.0 + + ! --- main panel --- + ! y-axis: mlo at bottom (centre), mhi at top (surface) + call pgsvp(0.10, 0.82, 0.12, 0.92) + if (.not. y_reverse) then + call pgswin(xlo, xhi, clo - 0.5*dcoord, chi + 0.5*dcoord) + else + call pgswin(xlo, xhi, chi + 0.5*dcoord, clo - 0.5*dcoord) + end if + call pgimag(img, nx, ny, 1, nx, 1, ny, fg, bg, tr) + + call pgsci(clr_Foreground) + call pgsch(1.2) + call pgbox('BCNST', 0.0, 0, 'BCNST', 0.0, 0) + select case (s%x_integer_ctrl(1)) + case (NR_COORD_MASS) + y_reverse = .false. + call pglab('Model Number', 'Mass (M\d\(2281)\u)', & + 'Newton Raphson Solver Residuals of accepted step') + case (NR_COORD_LOGR) + y_reverse = .false. + call pglab('Model Number', 'log(R/R\d\(2281)\u)', & + 'Newton Raphson Solver Residuals of accepted step') + case (NR_COORD_TAU) + y_reverse = .true. + call pglab('Model Number', 'log(tau)', & + 'Newton Raphson Solver Residuals of accepted step') + case default + y_reverse = .false. + call pglab('Model Number', 'Mass (M\d\(2281)\u)', & + 'Newton Raphson Solver Residuals of accepted step') + end select + + ! --- color wedge --- + call pgsvp(0.84, 0.90, 0.12, 0.92) + call pgswin(0.0, 1.0, bg, fg) + call pgwedg('RI', 0.0, 4.0, bg, fg, 'log10(max(|res|))') + + deallocate(img) + deallocate(coord_grid) + + end subroutine Kipp_residuals_render + + + subroutine do_Kipp_residuals_plot(id, ierr) + integer, intent(in) :: id + integer, intent(out) :: ierr + + type(pgstar_win_file_data), pointer :: p + type(star_info), pointer :: s + + ierr = 0 + call star_ptr(id, s, ierr) + if (ierr /= 0) return + + p => s%pg%pgstar_win_file_ptr(i_Other) + p%plot => Kipp_residuals_plot + p%id = i_Other + p%name = 'Newton Raphson Residuals - accepted step' + p%win_flag = .true. + p%win_width = 12.0 + p%win_aspect_ratio = 0.6 + p%file_flag = .true. + p%file_dir = 'png' ! folder where to save files + p%file_prefix = 'nr_resid_' + p%file_interval = 5 + p%file_width = -1.0 + p%file_aspect_ratio = -1.0 + + end subroutine do_Kipp_residuals_plot + +end module pgstar_kipp_residuals From 0671b8f16bf6080e75bb8edea94fcf7cc80368d6 Mon Sep 17 00:00:00 2001 From: mrenzo Date: Mon, 25 May 2026 13:39:17 -0400 Subject: [PATCH 09/15] [skip ci] adding controls for kippenhahn style res -- work in progress --- .../15M_binary_stripped_envelope/.gitignore | 3 +- .../15M_binary_stripped_envelope/inlist1 | 2 + .../15M_binary_stripped_envelope/inlist_both | 30 +- .../15M_binary_stripped_envelope/inlist_to_cc | 32 +- .../photos/1_x800 | Bin 682480 -> 682480 bytes .../60M_envelope_issues/inlist | 20 +- star/private/pgstar_ctrls_io.f90 | 36 +- star/private/pgstar_kipp_residuals.f90 | 410 ++++++++++++++++-- star/work/inlist_pgstar | 33 +- star/work/inlist_project | 76 ++-- star_data/private/pgstar_controls.inc | 9 + 11 files changed, 520 insertions(+), 131 deletions(-) diff --git a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/.gitignore b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/.gitignore index ee95d4cc2..38bfcb5dd 100644 --- a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/.gitignore +++ b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/.gitignore @@ -5,4 +5,5 @@ png/* LOGS*/* photos/* *cache* -build/* \ No newline at end of file +build/* +output.txt diff --git a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist1 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist1 index e06a5a64f..0ad71706e 100644 --- a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist1 +++ b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist1 @@ -35,6 +35,8 @@ extra_controls_inlist_name(1) = 'inlist_both' x_logical_ctrl(1) = .true. log_directory = 'LOGS1' +max_model_number = 1 + / ! end of controls namelist diff --git a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_both b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_both index b08e7a8f6..19bdfe007 100644 --- a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_both +++ b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_both @@ -13,6 +13,9 @@ echo_at_start = 'MESA model has begun running' echo_at_end = 'MESA model has finished running' show_retry_counts_when_terminate = .true. + + + show_log_description_at_start = .false. show_timestep_limit_counts_when_terminate = .true. save_model_when_terminate = .false. @@ -26,17 +29,24 @@ change_initial_Z = .true. new_Z = 0.02d0 ! network -change_net = .true. -change_initial_net = .true. -new_net_name = 'approx21_cr60_plus_co56.net' ! "approx21_plus_co56.net" ! "mesa_128.net" ! 'mesa_206.net' +! change_net = .true. +! change_initial_net = .true. +! new_net_name = "approx21_plus_co56.net" ! 'mesa_206.net' ! 'approx21_cr60_plus_co56.net' ! ! "mesa_128.net" ! 'mesa_206.net' !dump_missing_metals_into_heaviest = .true. + + +! show_net_species_info = .true. + + ! we want to use weaklib all the time, so we toggle at lowT. T9_weaklib_full_off = 0.0001d0 T9_weaklib_full_on = 0.00011d0 change_v_flag = .true. -new_v_flag = .true. +change_initial_v_flag = .true. +new_v_flag = .false. +center_ye_limit_for_v_flag = 0.1d0 ! prevent hydro turning on set_initial_age = .true. initial_age = 0 @@ -64,6 +74,8 @@ save_pgstar_files_when_terminate = .true. &eos +mass_fraction_limit_for_Skye = 1d-16 + / ! end of eos namelist @@ -81,6 +93,9 @@ Zbase = 0.02 &controls +fix_d_eos_dxa_partials = .false. + + ! set approx22 fake factor to reproduce Ye ~ 0.43-0.44 at CC. fe56ec_fake_factor = 1d-4 min_T_for_fe56ec_fake_factor = 3d9 @@ -286,23 +301,16 @@ min_D_mix =1d-2 ! solver controls energy_eqn_option = 'dedt' -use_gold2_tolerances = .true. -gold2_tol_max_residual2 = 5d-7 -gold2_tol_max_residual3 = 5d-4 ! gold solver use_gold_tolerances = .true. -gold_tol_max_residual2 = 5d-4 -!gold_tol_max_residual3 = 1d-4 ! Default in controls is 1d-5 tol_correction_high_T_limit = 1d9 ! Switch to lower tol at high temp for large Mass solver_iters_timestep_limit = 20 gold_solver_iters_timestep_limit = 20 -iter_for_resid_tol2 = 10 convergence_ignore_equL_residuals = .true. make_gradr_sticky_in_solver_iters = .true. xa_scale = 1d-5 -iter_for_resid_tol2 = 10 ! output photo_interval = -1 ! photos are saved from inlist_binary diff --git a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_to_cc b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_to_cc index 4bd28df1a..90012bda0 100644 --- a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_to_cc +++ b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/inlist_to_cc @@ -21,8 +21,13 @@ save_model_filename = 'CC.mod' ! change_v_flag = .true. ! new_v_flag = .true. + / ! end of star_job namelist +&eos +mass_fraction_limit_for_Skye = 1d-16 + +/ &controls @@ -42,10 +47,10 @@ min_D_mix = 1d-2 ! 4d9 has been well tested with the approx21 network ! lower to 2.5d9 or worst case 1d9 for large networks to help with ! numerical stability and speed, see MESA VI (Jermyn 2023) -op_split_burn = .true. -op_split_burn_min_T = 4d9 -burn_steps_limit = 150 -burn_steps_hard_limit = 250 +op_split_burn = .false. +! op_split_burn_min_T = 4d9 +! burn_steps_limit = 150 +! burn_steps_hard_limit = 250 ! tightening either of the two controls below will substantially increase the runtime, ! but should improve the network accuracy. @@ -152,24 +157,23 @@ min_q_for_k_const_mass = 0.98 ! solver and Equations ! damped newton and structure only -scale_max_correction = 0.1d0 -ignore_species_in_max_correction = .true. - +! scale_max_correction = 0.1d0 +ignore_species_in_max_correction = .false. +fix_d_eos_dxa_partials = .false. xa_scale = 1d-5 -iter_for_resid_tol2 = 10 use_gold_tolerances = .true. -gold_tol_max_residual2 = 5d-4 -!gold_tol_max_residual3 = 1d-4 ! Default in controls is 1d-5 tol_correction_high_T_limit = 1d9 ! Switch to lower tol at high temp for large Mass solver_iters_timestep_limit = 20 gold_solver_iters_timestep_limit = 20 -iter_for_resid_tol2 = 10 -use_gold2_tolerances = .false. -gold2_tol_max_residual2 = 5d-7 -gold2_tol_max_residual3 = 5d-4 +use_gold2_tolerances = .false. +gold_iter_for_resid_tol3 = 10 +gold_tol_residual_norm3 = 1d-5 +gold_tol_max_residual3 = 1d-3 + + !defaults when_to_stop_rtol = 1d-3 diff --git a/star/dev_cases_massive_stars/15M_binary_stripped_envelope/photos/1_x800 b/star/dev_cases_massive_stars/15M_binary_stripped_envelope/photos/1_x800 index 70322f24cfca6feefd71a20e3a544caad189f707..6c099ba233d8277f2a48d0266f87081932d62dd8 100644 GIT binary patch delta 12077 zcma)?dvp}l8NeqM?V=!?isxX9I8l2J98otOIEQlzc4DoffNT^M705=25Dm$OLjGbg3otYcSK)?}a)2p3ntXN;isZdqzI>r}_9m(e$2{`aK{!qP`|MWfog9Z-SYj z{#lp{OOIu??6UKG;bifQ?GR7*G&7t{u>sA4ZV8Q=L|Rn~EwPKi=BUr2x^{Z#%;h_! zs|Ybh)IJ(^+Nrlvr&o#xAVU231UWTrC+#%9H7zu3=sTxKYesEcxsJ?W_A+YOA+`NY z`U`^?%w2MZBVmTF_9uv(S`=C`7sJd^KN{xRfccE{6MyKUxdFG~X*<9$OC5UOF3KnmdPyJn0;kNvO zgNDc;9V2M2^BJ_dP#mtGJ-7LW@Unavm{Gqywk+S9XROW%I4l+i-7fKEvU(X4OXSm*y4oeZ${~wM&c=)v)Q8c7|!{ z`WnMc3-TEr(N^sp!+F&`hR(BM8X>N%6XKSwc7{pn`Z83Ww(AJUdiyH9rIf;*GI5%3 zNG?kZ|5i+uaPSv)hH>iDzyqMyVHFPAu6!}vSuf*}fRbPgN5*|aB@=VR74ZXO14`G= zh1K7^9Q_^Fcpul{WE_rfxbAi_j6u1yh~+T&E+D7pRA_0m1ZIx0-2ZKqyC(BNN9lhXKY**S2yY5cGhWCh;#|Uh{)*k_Kxur5E<(AArFjLfz zVTGJ{T@SMZ=D{cJJa;Y>&&c!Q89Q5M>g770Nv;!Si6wJ1%vS2hogmD4u^wikPR@PH zW;@SU7l~)|_u@GQ=3$>%LCzDDQ)J1U3^Pmpc%K;{+Mf`RUfU9zo7RWUoAiQoA0akz zXn(iUk-J1cuJz~-yUHIDa-AGgV9BiFcxSITjfS}~V3JD_Yd6U$_2)T!v3Mq_8wqn< zuxTMDB!8G5w_~ncB20Imc%BQ>Y=p?gftFe_$HPohpAcqn*Unhz-?gMwwe4qis+*RI zs<&TMJygw861fC1O)Q|3V#_|l2ZXIxmq)#>{i9juw4G*l12Zsmp(Mj{Z<)a)r$(he zmD>I$ef%;x>ooN%U``LVfaKJoZKEA?({e^KBWJr3rrB1K)7?O^C37as4E63w=G=ox zH@ktvVt+S4TlgR|NL2rppV;}QsMA^S0O%|oV$8H%`SK0DFUE*M$qtZNntr4I4NWdb zbYB!xCA2*zpZc4%1a)fQ0Z_w7%Edw3l`n=*(3*sj!f@P8z9G4cn!O~3I$!NSwlj=T zrv|+Zm*zFR|7P)zLy2((4V&Q`l1me_L_Nm>OGEDua%O!Q&cs36l`msBpVlZ87sJDW zA-SaXKvY7}2Km(AEW3ZqZ#ZFgzFD3^YXnN_M7a)Mo*6oGEV;P05!JBdN5?a4DmiWR zpYki6Ip-*)=2xbL&KY_>sW7E6Jhor&j}*BmF+u#KLNMh&Jf4SI_QWi8I#(V|dOs*n z+qF{WaxlH+ptu;C_dtJ^6OIsLL?tw|$fy41vXweD@BpacYquOVaQ+)f{U?TpXw5*$ zVz}@Ie+^u+MDxL}ITY2j_@*01p$W4aXwa$+D$Zf(5 zzbZ~^-rsNDcbgp#x$JB?_i{_-V3;ZDlQ7MWhny#R&cPqpdG4wb&&X@yxfZ6`@sLXp zODvh^!)&E)B}}v9Avcp_wtU~t^R@Zn8GT(mSHKK*Jd?=fh((snDKN9tHNsr+fX{qG z`e8VortjH#eo`%-aq1H=&DMro9B6?hb3RNbD^6Kq2Dj(VYeFL@yX4iicCDT3h#GNC zQlG-rJoS*vD7#(y)~D(AX1hLO)b+K7u4n1dc0C7K)=)E=y^IPhjjCZf zf0HxnfN3_0xL(S?kQ3V9gQZL=~)E zBcJ;FF3wP=0v-Sr+<%RXmbNQjuA>pOX0>+=&70uAi?vIP5_P_s9<(z|Q>O;K4L48A zXZWeMDupY^ya^`f{6kD5L_NnX57-$dsq4#d)wTHyU#B$%C4r%N6HG2k48JX=YIv~8 z&M;10Uxw9r4WGGA{1e){+%e7OO|X)QIXwo&uB4q|v_sCUFT<;F&~_aGxenJ~FNQIt za2=W-#>l0J8R7-h6j~Za{+ZuUdB-%YP&HE|0}=Ysnhda zhqGvPp?J))`DKh;jF==&ER`p%(p7ebIqGzbJWf$pn|E)>XLvEK&O36R1HK^NTIL&u z96+b`emkQPH%gC5>Rn-WKLezDaobngaaY|WT(?tPodV<9&Gj^oaH%EtVz_CoXAI0+ zG;--#GAnKO*|~0>A+Fvbas7Z5$h<`(w-IKsC36|OC3`qdZBv%lH*kn^Uo@3CYqgPEg#7)-P8c~AQBn4^Y!?L6O|C7ucD2f#G@9&#CC z*9tr4`Z8gLbK*1{rrGz9Tg@@$mdqg>pQ7G5*NkUyjZQA}x2L4NF6r{%ckEPmd!ibl z&JooByYgQDu{x@GhPA|!dm-Fb>IX3dX8S`f4s*-5?Ofj|5!dLy&Gv^JNT zITdD>`VdUB{dr&d(Z~I!Z`pZ%c8Pe#ssG>{x%ABgJ2~|%uw>T2bUqNL!!XTqN=_fv zY8&l5&-#XVCaHf5rg>l|r=IQi*fCdMDopo7@jL?4{1`!QH^-D(GQZC8Y3j3QcVGJE zmmSio+IF{{>XY9TRqrEF&5COGr5_{zY?-W5#g^PMxEbm@83MDKYF{v08thyTTqdru z|A=c2rddtNwX#ANS~8cz%u(L~)2yb4rJq(j8xnS&?_DmQ3F^1YR5hE`l-yQ4yLg}3 z->&D;iNXy3SDbdjG^;7OY)s~;+>$v2W{UcaFwI*ea@$LUd2pHCx$nM0JR|>O>|mO= zNaVJ{EU{!>2(y)Xuc-UdAO4`fJZH)8gu7*_o$DJ{ifi;^aor%U-PeAcd>U?%C3h;^ ztkyFIW;s0~eQko-w8YN!vq|C_r+zC;vz(IK2(!SFSp(Dg1SgngIVHCNX6<4-&$A|r zXOjBd+0UCNo?ve{mRyz?{#5#PE|F`j{jTHn;s3JY&&W8xsZ^SsICc6=?vmGM^0TIh zgK2NR_hJ8smer&Zl*SU>54Ywg(%==!m^6(U_0s&&i2l8CL9zt#+PFHI%>s~3)I z>(#D)G0j4b zGB3h(9u(%gHwm+{!DEtBW@neY8qBkGx_BnE|7KzCD#EO?WLC})W@wFgp1DSt(|_c7 zl2gxQ#?EsW%ryP)!t5@>EU{!xpDCX1L*n@%%mqL8JjtnNw-7vHCXJMW#!t8m? zj=5l#ct%^r^AyacpLm|+)U)1_c@}1#{%)9o+dSr4IgT>BUbXXVnkt@g`rm}v9{V!0 z){+^RCd}YEaSDwz*HSWC+O{eZsGc7tudW@(>|ER7rs&V%dT3$b+SQsP1|ODVcYjx0 z$}Nu(qfgfe7s)WO@_WM5I%%hEXMLcuqWTtQ6G}KF?;E+;3Q>~@&w63jkxwKQwLvb+-)O&`H$$-PeDDfgaT?d6V*yWR< zPYwKrx85ux)_PyVCaPH|4j0PVdoLRX6JqKT&(PEJik)GKJ~i+g)_i*)!-Z7SO1VzX za`&%1LvndyC@H3g=_#=^jMLYjVcC>{3};YHKyl@b(YEW?o*}s`(b*t|Tj;5J*=`P_ z^z~=>(SU}dZxH_&6bHlBrJfqcA@J?BJ zw`WK$p*7;d8)Z}tFWDJ}HVtgJ8(wk4_o#-U#F@iemj$k!MlME75og>ahRrV)Gc2rn zj}NT07JyNbRqrsVAgw>BV$~}w?c{WBJ35OUSF4xfmTK`#(H|9N;RF5HgMk`9w%ih1 zQzO{$W*Ma`i%ai)LWI1EG^g!!55vtUmnk^&3vUX1%nL8rG3QJY*GQYVPGuondY8u} zr=AU#%=cjC=#P$nxd{!gRJUc9>=l zLry(A_uF}{ohY6O`e(y5dl(mbL>V4VW@U*UDko&UbAsKiUN+Kw4 zA~Tufw4-O2yc+C2Y+)6XxkE9$3V2$l%$?sJs?O6g&Jc!` zKl2R9xx^T8_&3C`^JzQ7EPZO=H@p*`*83W+qnd+~8Yb7_#e(5Ztcelg$Ml?j%FZxN zpBnfLXI>{G)_PyVWm<(2#qi96%ZAP~Vj3o%pyxt|oneALHSimbsT{~~F4Yv25QgT_ z4!ImL_^g=jp{Lx^Fh*a0hMx^+IBB%_$D!mfY`@c+LnRaQ#C7!4rtIc0@|=vUKg0Lo zXL!9J500b+1K}SI=$7-bJ^F$Ge-YMUE|5=!32kB#$STbjgU?w|dwC7=(9V9vRY<%3#^CZkH{qg^r1*G@J zKmW_XsMXYhFUoOU;$+6yv&rsQDf;v*xX9{RS_x0^DATA2X zs2Y-XhM`vmHrxxZxZwv>!%!S~$F!M8zT{%W6meFW7&a%085SP-9voQdVE{%+9{C<6 z71UO)HuFUnxd<^%96MY*Ivy+Lp=aW9%qhE{@89l$_obPddV65>NQ!xtK+rt#IV9r^ z6Qjh>>FIjZPB25C3b?rIk}~fq8L-xMXl)gDc!CtOKwQqG`I?Jd@UV!w#1H7{dBjdI zMV|`z1t*vGBWS)^UPLtwrF4jVGI^gOH_jC?9Z`v;(5zu{K=+9BhXh$z@E8Ba`;;fG z*v9pC<2(sAtNkU$w17Qd1l#kl9d^+bVjDfmXqf=>{7iGW)>|^q!OYYD2}_K5es-+y ztah!l^IUnQc*f}u@pRMt1i;6vwPar92s8MqI8|K#wz;=A`xmxyQhHSsKkY4$bb)U&zO&hseD4E^I^nthFrdEp^D=DZ=|8F`&^JkiW& z;Sx1JP>E?C*#=AQ2XJ%RFRlgd{59SWUz|+eYwGkGJKuYUif@em5zK+v-}snymdr~q zoi1?-!ZiCEatz<;e9+Ew{VMTH&>w(l_BTFel_hiBeZmaAA)cR1kZa%El9N-(=1&&CJrJWs*Q(tio2`5wZ@?D?}DbMb2N zjJ_$Jx$$4T_G{*mR@Hh-?0K+x#fob0r62sO98S4i&33x0nnX8F|9PgsET=wZttE5B za$yGlCQf;nW;rFNo*i*J&+RZ%^q+-kmQx?I+>$wEg?NVF63;_&s@lwQN=`kSz2CtW z{tdQkI0iFA|1p?mIrT9w+;7L6zfwFS-Qu|mrg=<6PDqZ^V9ERtW{&<0O!JuNc;9R3 z^nG@o_x@fyWAwXKy_f!nk9o^;!pE(%_;@W%dhsf(3bgr`VUH=F1P0*ia z4$N}uV^&!*$Nf>5p_Afz0H#?^$*E`3{2F@jYib|NH2wQvn&s5TEU{$H{*!pRr^GWq z{&9ajbZ11=C2A-|Ela@ K;%Hg)`Tqk1Aa@}E diff --git a/star/dev_cases_massive_stars/60M_envelope_issues/inlist b/star/dev_cases_massive_stars/60M_envelope_issues/inlist index fcce0831d..6f91fbace 100644 --- a/star/dev_cases_massive_stars/60M_envelope_issues/inlist +++ b/star/dev_cases_massive_stars/60M_envelope_issues/inlist @@ -3,8 +3,15 @@ &star_job show_log_description_at_start = .false. - create_pre_main_sequence_model = .true. - pre_ms_relax_to_start_radiative_core = .true. + !create_pre_main_sequence_model = .true. + !pre_ms_relax_to_start_radiative_core = .true. + load_saved_model = .false. + !load_model_filename = '' + + relax_initial_Y = .true. + new_Y = 0.2703d0 + relax_initial_Z = .true. + new_Z = 1.42d-2 change_net = .true. new_net_name = 'approx21_cr60_plus_co56.net' @@ -27,7 +34,6 @@ pgstar_flag = .true. save_pgstar_files_when_terminate = .true. - new_Z = 1.42d-2 initial_zfracs = 6 ! set to asplund 2009 abundance fractions save_model_when_terminate = .true. @@ -38,7 +44,7 @@ &eos use_Skye = .true. - mass_fraction_limit_for_Skye = 1d-10 + ! mass_fraction_limit_for_Skye = 1d-10 / ! end of eos namelist @@ -56,8 +62,8 @@ ! initial model initial_mass = 60 - initial_z = 1.42d-2 ! solar - initial_y = 0.2703d0 ! from asplund et al. 2009, solar. + !initial_z = 1.42d-2 ! solar + !initial_y = 0.2703d0 ! from asplund et al. 2009, solar. ! stopping xa_central_lower_limit_species(1) = 'he4' @@ -84,7 +90,7 @@ atm_option = 'T_tau' atm_T_tau_relation = 'Eddington' atm_T_tau_opacity = 'fixed' - Pextra_factor = 1 + Pextra_factor = 2 ! mlt mixing_length_alpha = 1.5 diff --git a/star/private/pgstar_ctrls_io.f90 b/star/private/pgstar_ctrls_io.f90 index dcf53870f..39512687b 100644 --- a/star/private/pgstar_ctrls_io.f90 +++ b/star/private/pgstar_ctrls_io.f90 @@ -3023,7 +3023,6 @@ module pgstar_ctrls_io Grid9_file_width, & Grid9_file_aspect_ratio, & - annotation1_ci, & annotation1_ch, & annotation1_lw, & @@ -3055,7 +3054,19 @@ module pgstar_ctrls_io annotation3_fjust, & read_extra_pgstar_inlist, & - extra_pgstar_inlist_name + extra_pgstar_inlist_name, & + + Kipp_residuals_win_flag, & + Kipp_residuals_file_flag, & + Kipp_residuals_win_width, & + Kipp_residuals_win_aspect_ratio, & + Kipp_residuals_file_width, & + Kipp_residuals_file_aspect_ratio, & + Kipp_residuals_min, & + Kipp_residuals_max, & + Kipp_residuals_file_dir, & + Kipp_residuals_file_prefix, & + Kipp_residuals_file_interval contains @@ -6237,6 +6248,17 @@ subroutine store_pgstar_controls(s, ierr) s% pg% read_extra_pgstar_inlist = read_extra_pgstar_inlist s% pg% extra_pgstar_inlist_name = extra_pgstar_inlist_name + s% pg% Kipp_residuals_win_flag = Kipp_residuals_win_flag + s% pg% Kipp_residuals_win_width = Kipp_residuals_win_width + s% pg% Kipp_residuals_win_aspect_ratio = Kipp_residuals_win_aspect_ratio + + s% pg% Kipp_residuals_file_flag = Kipp_residuals_file_flag + s% pg% Kipp_residuals_file_dir = Kipp_residuals_file_dir + s% pg% Kipp_residuals_file_prefix = Kipp_residuals_file_prefix + s% pg% Kipp_residuals_file_interval = Kipp_residuals_file_interval + s% pg% Kipp_residuals_file_width = Kipp_residuals_file_width + s% pg% Kipp_residuals_file_aspect_ratio = Kipp_residuals_file_aspect_ratio + end subroutine store_pgstar_controls @@ -6262,7 +6284,7 @@ subroutine set_default_pgstar_controls Profile_Panels1_yaxis_name(:) = '' Profile_Panels1_other_yaxis_name(:) = '' - Profile_Panels2_yaxis_name(:) = '' + Profile_Panels2_yaxis_name(:) = '' Profile_Panels2_other_yaxis_name(:) = '' Profile_Panels3_yaxis_name(:) = '' Profile_Panels3_other_yaxis_name(:) = '' @@ -6687,6 +6709,14 @@ subroutine set_default_pgstar_controls Grid9_plot_col(:) = 0 Grid9_plot_colspan(:) = 0 + Kipp_residuals_file_flag = .false. + Kipp_residuals_win_flag = .false. + Kipp_residuals_file_dir = '' + Kipp_residuals_file_prefix = 'kipp_residuals_' + Kipp_residuals_file_interval = 10 + Kipp_residuals_file_width = 12 + Kipp_residuals_file_aspect_ratio = 0.6 + include 'pgstar.defaults' end subroutine set_default_pgstar_controls diff --git a/star/private/pgstar_kipp_residuals.f90 b/star/private/pgstar_kipp_residuals.f90 index 54189a14f..8903ebf34 100644 --- a/star/private/pgstar_kipp_residuals.f90 +++ b/star/private/pgstar_kipp_residuals.f90 @@ -21,18 +21,33 @@ module pgstar_kipp_residuals use star_pgstar use pgstar_colors - use const_def, only: dp, Msun + use const_def, only: dp, Msun, Rsun implicit none + integer, parameter :: NR_MAX_MODELS = 2000 + integer, allocatable, save :: nr_zone_buf(:) + integer, allocatable, save :: nr_model_buf(:) + integer, save :: nr_n_stored = 0, nr_n_cells = 0 + real, allocatable, save :: nr_resid_buf(:,:), tmp_resid_buf(:,:) + real, allocatable, save :: nr_ycoord_buf(:,:), tmp_mass_buf(:,:) + real, save :: nr_resid_min = -101.0, nr_resid_max = -101.0 ! auto-scale + ! TODO: define pgstar variable to substitute x_integer_ctrl(1) used here + integer, parameter :: NR_COORD_MASS = 1 + integer, parameter :: NR_COORD_LOGR = 2 + integer, parameter :: NR_COORD_TAU = 3 + contains - ! Kippenhahn-style log10(max(|res|)) across all equations for a - ! given space-time location + ! ----------------------------------------------------------------------- + ! Top-level plot callback: called by do_pgstar_win_file via p%plot. + ! Manages the history buffer then delegates all drawing to the render + ! routine. The PGPLOT device framing (pgslct/pgbbuf/pgeras/pgebuf) is + ! the standard wrapper used across all pgstar_*.f90 plot callbacks. + ! ----------------------------------------------------------------------- subroutine Kipp_residuals_plot(id, device_id, ierr) integer, intent(in) :: id, device_id integer, intent(out) :: ierr - type(star_info), pointer :: s integer :: k, neq, col @@ -53,7 +68,7 @@ subroutine Kipp_residuals_plot(id, device_id, ierr) nr_ycoord_buf = 0.0 ! zero-init so unused cells are safely masked nr_n_cells = s%nz else if (s%nz > 0.95 * size(nr_resid_buf, 2)) then - ! check if remeshing has increased nz beyond 95% of the + ! check if remeshing has increased s%nz beyond 95% of the ! current array size, reallocate allocate(tmp_resid_buf(NR_MAX_MODELS, 5 * s%nz)) allocate(tmp_mass_buf(NR_MAX_MODELS, 5 *s%nz)) @@ -84,10 +99,6 @@ subroutine Kipp_residuals_plot(id, device_id, ierr) nr_model_buf(col) = s%model_number nr_zone_buf(col) = s%nz - ! do k = 1, s%nz - ! nr_resid_buf(col, k) = safe_log10(maxval(abs(s%equ(1:neq, k)))) ! residuals are cell-centered - ! nr_ycoord_buf(col, k) = s%m(k) - 0.5 * s%dm(k) ! outer face mass coord minus half mass of the cell - ! end do do k = 1, s%nz nr_resid_buf(col, k) = & @@ -103,7 +114,7 @@ subroutine Kipp_residuals_plot(id, device_id, ierr) nr_ycoord_buf(col, k) = safe_log10(0.5d0*s%r(k)/Rsun) end if case (NR_COORD_TAU) - ! optical depth + ! log10 optical depth nr_ycoord_buf(col, k) = safe_log10(s%tau(k)) case default ! cell-centered mass coordinate @@ -120,6 +131,12 @@ subroutine Kipp_residuals_plot(id, device_id, ierr) end subroutine Kipp_residuals_plot + ! ----------------------------------------------------------------------- + ! Pure rendering routine: builds the 2-D image from the history buffer + ! and draws it using pgimag + a color wedge. Not called directly by + ! the pgstar harness; invoked only from Kipp_residuals_plot above. + ! This subroutine is intentionally left unchanged from the original. + ! ----------------------------------------------------------------------- subroutine Kipp_residuals_render(ierr, id) integer, intent(in) :: id integer, intent(out) :: ierr @@ -245,7 +262,7 @@ subroutine Kipp_residuals_render(ierr, id) tr(5) = 0.0 tr(6) = -dcoord - ! color scale + ! color scale: use inlist limits; negative sentinel means auto-scale fg = nr_resid_max bg = nr_resid_min if (fg <= -100) fg = maxval(img) @@ -294,7 +311,14 @@ subroutine Kipp_residuals_render(ierr, id) end subroutine Kipp_residuals_render - + ! ----------------------------------------------------------------------- + ! Registration routine: called once per step by the pgstar driver. + ! Mirrors the do_*_plot pattern used throughout star/private/pgstar_*.f90: + ! 1. obtain the plot slot via s%pg%pgstar_win_file_ptr(i_Kipp_residuals) + ! 2. populate p%* from s%pg inlist controls (set once on first call, + ! re-read every step so inlist changes take effect at runtime) + ! 3. hand off to do_pgstar_win_file which owns the window / file logic + ! ----------------------------------------------------------------------- subroutine do_Kipp_residuals_plot(id, ierr) integer, intent(in) :: id integer, intent(out) :: ierr @@ -306,20 +330,356 @@ subroutine do_Kipp_residuals_plot(id, ierr) call star_ptr(id, s, ierr) if (ierr /= 0) return - p => s%pg%pgstar_win_file_ptr(i_Other) - p%plot => Kipp_residuals_plot - p%id = i_Other - p%name = 'Newton Raphson Residuals - accepted step' - p%win_flag = .true. - p%win_width = 12.0 - p%win_aspect_ratio = 0.6 - p%file_flag = .true. - p%file_dir = 'png' ! folder where to save files - p%file_prefix = 'nr_resid_' - p%file_interval = 5 - p%file_width = -1.0 - p%file_aspect_ratio = -1.0 + p => s%pg%pgstar_win_file_ptr(i_Kipp_residuals) + + p%plot => Kipp_residuals_plot + p%id = i_Kipp_residuals + p%name = 'Kipp_residuals' + + ! --- display settings read from s%pg so inlist edits take effect live --- + p%win_flag = s%pg%Kipp_residuals_win_flag + p%win_width = s%pg%Kipp_residuals_win_width + p%win_aspect_ratio = s%pg%Kipp_residuals_win_aspect_ratio + + p%file_flag = s%pg%Kipp_residuals_file_flag + p%file_dir = s%pg%Kipp_residuals_file_dir + p%file_prefix = s%pg%Kipp_residuals_file_prefix + p%file_interval = s%pg%Kipp_residuals_file_interval + p%file_width = s%pg%Kipp_residuals_file_width + p%file_aspect_ratio = s%pg%Kipp_residuals_file_aspect_ratio + + ! Sync color-scale limits into module-level vars used by the render routine. + ! Negative sentinel (-101) means auto-scale (see Kipp_residuals_render). + nr_resid_min = s%pg%Kipp_residuals_min + nr_resid_max = s%pg%Kipp_residuals_max + + call do_pgstar_win_file(s, p, ierr) end subroutine do_Kipp_residuals_plot end module pgstar_kipp_residuals + + +! ! *********************************************************************** +! ! +! ! Copyright (C) 2010-2019 The MESA Team +! ! +! ! This program is free software: you can redistribute it and/or modify +! ! it under the terms of the GNU Lesser General Public License +! ! as published by the Free Software Foundation, +! ! either version 3 of the License, or (at your option) any later version. +! ! +! ! This program is distributed in the hope that it will be useful, +! ! but WITHOUT ANY WARRANTY; without even the implied warranty of +! ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +! ! See the GNU Lesser General Public License for more details. +! ! +! ! You should have received a copy of the GNU Lesser General Public License +! ! along with this program. If not, see . +! ! +! ! *********************************************************************** + +! module pgstar_kipp_residuals + +! use star_pgstar +! use pgstar_colors +! use const_def, only: dp, Msun + +! implicit none + +! contains + +! ! Kippenhahn-style log10(max(|res|)) across all equations for a +! ! given space-time location +! subroutine Kipp_residuals_plot(id, device_id, ierr) +! integer, intent(in) :: id, device_id +! integer, intent(out) :: ierr +! type(star_info), pointer :: s +! integer :: k, neq, col + +! ierr = 0 +! call star_ptr(id, s, ierr) +! if (ierr /= 0) return + +! neq = size(s%equ, 1) ! number of equations per cell + +! ! --- allocate history buffer on first call --- +! if (.not. allocated(nr_resid_buf)) then +! ! make 5 times bigger than current nz +! allocate(nr_resid_buf(NR_MAX_MODELS, 5 * s%nz)) +! allocate(nr_ycoord_buf(NR_MAX_MODELS, 5 * s%nz)) +! allocate(nr_model_buf(NR_MAX_MODELS)) +! allocate(nr_zone_buf(NR_MAX_MODELS)) +! nr_resid_buf = -99.0 +! nr_ycoord_buf = 0.0 ! zero-init so unused cells are safely masked +! nr_n_cells = s%nz +! else if (s%nz > 0.95 * size(nr_resid_buf, 2)) then +! ! check if remeshing has increased nz beyond 95% of the +! ! current array size, reallocate +! allocate(tmp_resid_buf(NR_MAX_MODELS, 5 * s%nz)) +! allocate(tmp_mass_buf(NR_MAX_MODELS, 5 *s%nz)) + +! tmp_resid_buf = -99.0 +! tmp_mass_buf = 0.0 + +! ! Copy older compressed history into the newly expanded arrays +! tmp_resid_buf(:, 1:nr_n_cells) = nr_resid_buf(:, 1:nr_n_cells) +! tmp_mass_buf(:, 1:nr_n_cells) = nr_ycoord_buf(:, 1:nr_n_cells) + +! call move_alloc(tmp_resid_buf, nr_resid_buf) +! call move_alloc(tmp_mass_buf, nr_ycoord_buf) +! nr_n_cells = s%nz +! end if + + +! ! --- roll buffer if full --- +! if (nr_n_stored < NR_MAX_MODELS) then +! nr_n_stored = nr_n_stored + 1 +! col = nr_n_stored +! else +! nr_model_buf(1:NR_MAX_MODELS-1) = nr_model_buf(2:NR_MAX_MODELS) +! nr_resid_buf(1:NR_MAX_MODELS-1, :) = nr_resid_buf(2:NR_MAX_MODELS, :) +! nr_ycoord_buf(1:NR_MAX_MODELS-1, :) = nr_ycoord_buf(2:NR_MAX_MODELS, :) +! col = NR_MAX_MODELS +! end if + +! nr_model_buf(col) = s%model_number +! nr_zone_buf(col) = s%nz +! ! do k = 1, s%nz +! ! nr_resid_buf(col, k) = safe_log10(maxval(abs(s%equ(1:neq, k)))) ! residuals are cell-centered +! ! nr_ycoord_buf(col, k) = s%m(k) - 0.5 * s%dm(k) ! outer face mass coord minus half mass of the cell +! ! end do + +! do k = 1, s%nz +! nr_resid_buf(col, k) = & +! safe_log10(maxval(abs(s%equ(1:neq, k)))) +! select case (s%x_integer_ctrl(1)) +! case (NR_COORD_MASS) +! nr_ycoord_buf(col, k) = s%m(k)/Msun +! case (NR_COORD_LOGR) +! ! cell-centered radius in log10(R/Rsun) +! if (k < s%nz) then +! nr_ycoord_buf(col, k) = safe_log10(0.5d0 * (s%r(k) + s%r(k+1)) / Rsun) +! else +! nr_ycoord_buf(col, k) = safe_log10(0.5d0*s%r(k)/Rsun) +! end if +! case (NR_COORD_TAU) +! ! optical depth +! nr_ycoord_buf(col, k) = safe_log10(s%tau(k)) +! case default +! ! cell-centered mass coordinate +! nr_ycoord_buf(col, k) = (s%m(k) - 0.5d0*s%dm(k))/Msun +! end select +! end do + + +! call pgslct(device_id) +! call pgbbuf() +! call pgeras() +! call Kipp_residuals_render(ierr, id) +! call pgebuf() + +! end subroutine Kipp_residuals_plot + +! subroutine Kipp_residuals_render(ierr, id) +! integer, intent(in) :: id +! integer, intent(out) :: ierr +! real, parameter :: missing_val = 1d-30 +! real, allocatable :: img(:,:), coord_grid(:) +! real :: tr(6), fg, bg, xlo, xhi, dx +! real :: clo, chi, dcoord, coord_j, frac +! integer :: nx, ny, i, j, k, nz_i +! logical :: y_reverse +! type(star_info), pointer :: s + +! ! ----------------------------------------- colorbar definition +! real :: bright, contra +! real, dimension(9) :: l, r, g, b + +! l = (/ & +! 0.00, 0.12, 0.25, 0.38, 0.50, & +! 0.62, 0.75, 0.88, 1.00 /) + +! r = (/ & +! 0.00, 0.05, 0.15, 0.32, 0.55, & +! 0.78, 0.93, 0.99, 1.00 /) + +! g = (/ & +! 0.00, 0.02, 0.04, 0.06, 0.10, & +! 0.18, 0.32, 0.58, 0.95 /) + +! b = (/ & +! 0.00, 0.08, 0.18, 0.32, 0.36, & +! 0.28, 0.16, 0.08, 0.80 /) + +! contra = 1.0 +! bright = 0.5 + +! call pgscir(16,255) +! call pgctab(l, r, g, b, 9, contra, bright) +! ! ----------------------------------------- end colorbar + +! ierr = 0 +! call star_ptr(id, s, ierr) +! if (ierr /= 0) return + +! if (nr_n_stored < 2) return + +! nx = nr_n_stored +! ny = nr_n_cells + +! allocate(img(nx, ny)) +! allocate(coord_grid(ny)) + +! chi = -1.0e30 +! clo = 1.0e30 +! do i = 1, nx +! nz_i = nr_zone_buf(i) +! do k = 1, nz_i +! if (nr_ycoord_buf(i,k) > chi) chi = nr_ycoord_buf(i,k) +! ! m(k) is positive; skip any zero-initialised slots +! if (nr_ycoord_buf(i,k) > 0.0 .and. nr_ycoord_buf(i,k) < clo) & +! clo = nr_ycoord_buf(i,k) +! end do +! end do + +! select case (s%x_integer_ctrl(1)) +! case (NR_COORD_MASS) +! y_reverse = .false. +! case (NR_COORD_LOGR) +! y_reverse = .false. +! case (NR_COORD_TAU) +! y_reverse = .true. +! case default +! y_reverse = .false. +! end select + +! dcoord = (chi - clo) / real(ny - 1) + +! do j = 1, ny +! if (.not. y_reverse) then +! coord_grid(j) = clo + real(j - 1) * dcoord +! else +! coord_grid(j) = chi - real(j - 1) * dcoord +! end if +! end do + +! ! --- interpolate residuals onto the uniform grid --- +! img = missing_val +! do i = 1, nx +! nz_i = nr_zone_buf(i) +! do j = 1, ny +! coord_j = coord_grid(j) +! do k = 1, nz_i - 1 +! ! skip invalid cells +! if (nr_resid_buf(i,k) == missing_val) cycle +! if (nr_resid_buf(i,k+1) == missing_val) cycle +! ! works for either increasing or decreasing coordinates +! if ( (nr_ycoord_buf(i,k) - coord_j) * & +! (nr_ycoord_buf(i,k+1) - coord_j) <= 0d0 ) then +! if (abs(nr_ycoord_buf(i,k) - nr_ycoord_buf(i,k+1)) > 1d-99) then +! frac = (coord_j - nr_ycoord_buf(i,k+1)) / & +! (nr_ycoord_buf(i,k) - nr_ycoord_buf(i,k+1)) +! else +! frac = 0.5d0 +! end if +! img(i,j) = nr_resid_buf(i,k+1) + & +! frac * (nr_resid_buf(i,k) - nr_resid_buf(i,k+1)) +! exit +! end if +! end do +! end do +! end do +! ! --- x range centred on model numbers --- +! dx = max(1.0, real(nr_model_buf(nx) - nr_model_buf(1)) / real(nx - 1)) +! xlo = real(nr_model_buf(1)) - 0.5*dx +! xhi = real(nr_model_buf(nx)) + 0.5*dx + +! ! --- transformation matrix for pgimag --- +! ! world_y(j) = tr(4) + tr(6)*j +! ! j=1 -> mhi => tr(4) = mhi - tr(6) = mhi + dm +! ! j=ny -> mlo => confirms tr(6) = -dm +! tr(1) = xlo +! tr(2) = (xhi - xlo) / real(nx) +! tr(3) = 0.0 +! tr(4) = chi + dcoord +! tr(5) = 0.0 +! tr(6) = -dcoord + +! ! color scale +! fg = nr_resid_max +! bg = nr_resid_min +! if (fg <= -100) fg = maxval(img) +! if (bg <= -100) bg = minval(img, mask=(img > -19.9)) +! if (bg >= fg) bg = fg - 6.0 + +! ! --- main panel --- +! ! y-axis: mlo at bottom (centre), mhi at top (surface) +! call pgsvp(0.10, 0.82, 0.12, 0.92) +! if (.not. y_reverse) then +! call pgswin(xlo, xhi, clo - 0.5*dcoord, chi + 0.5*dcoord) +! else +! call pgswin(xlo, xhi, chi + 0.5*dcoord, clo - 0.5*dcoord) +! end if +! call pgimag(img, nx, ny, 1, nx, 1, ny, fg, bg, tr) + +! call pgsci(clr_Foreground) +! call pgsch(1.2) +! call pgbox('BCNST', 0.0, 0, 'BCNST', 0.0, 0) +! select case (s%x_integer_ctrl(1)) +! case (NR_COORD_MASS) +! y_reverse = .false. +! call pglab('Model Number', 'Mass (M\d\(2281)\u)', & +! 'Newton Raphson Solver Residuals of accepted step') +! case (NR_COORD_LOGR) +! y_reverse = .false. +! call pglab('Model Number', 'log(R/R\d\(2281)\u)', & +! 'Newton Raphson Solver Residuals of accepted step') +! case (NR_COORD_TAU) +! y_reverse = .true. +! call pglab('Model Number', 'log(tau)', & +! 'Newton Raphson Solver Residuals of accepted step') +! case default +! y_reverse = .false. +! call pglab('Model Number', 'Mass (M\d\(2281)\u)', & +! 'Newton Raphson Solver Residuals of accepted step') +! end select + +! ! --- color wedge --- +! call pgsvp(0.84, 0.90, 0.12, 0.92) +! call pgswin(0.0, 1.0, bg, fg) +! call pgwedg('RI', 0.0, 4.0, bg, fg, 'log10(max(|res|))') + +! deallocate(img) +! deallocate(coord_grid) + +! end subroutine Kipp_residuals_render + +! subroutine do_Kipp_residuals_plot(id, ierr) +! integer, intent(in) :: id +! integer, intent(out) :: ierr + +! type(pgstar_win_file_data), pointer :: p +! type(star_info), pointer :: s + +! ierr = 0 +! call star_ptr(id, s, ierr) +! if (ierr /= 0) return + +! p => s%pg%pgstar_win_file_ptr(i_Other) +! p%plot => Kipp_residuals_plot +! p%id = i_Other +! p%name = 'Newton Raphson Residuals - accepted step' +! p%win_flag = .true. +! p%win_width = 12.0 +! p%win_aspect_ratio = 0.6 +! p%file_flag = .true. +! p%file_dir = 'png' ! folder where to save files +! p%file_prefix = 'nr_resid_' +! p%file_interval = 5 +! p%file_width = -1.0 +! p%file_aspect_ratio = -1.0 + +! end subroutine do_Kipp_residuals_plot + +! end module pgstar_kipp_residuals diff --git a/star/work/inlist_pgstar b/star/work/inlist_pgstar index 2be909017..2a18cc736 100644 --- a/star/work/inlist_pgstar +++ b/star/work/inlist_pgstar @@ -1,37 +1,6 @@ &pgstar - ! see star/defaults/pgstar.defaults +Kipp_residuals_win_flag = .true. - ! MESA uses PGPLOT for live plotting and gives the user a tremendous - ! amount of control of the presentation of the information. - - ! show HR diagram - ! this plots the history of L,Teff over many timesteps - HR_win_flag = .true. - - ! set static plot bounds - HR_logT_min = 3.5 - HR_logT_max = 4.6 - HR_logL_min = 2.0 - HR_logL_max = 6.0 - - ! set window size (aspect_ratio = height/width) - HR_win_width = 6 - HR_win_aspect_ratio = 1.0 - - - ! show temperature/density profile - ! this plots the internal structure at single timestep - TRho_Profile_win_flag = .true. - - ! add legend explaining colors - show_TRho_Profile_legend = .true. - - ! display numerical info about the star - show_TRho_Profile_text_info = .true. - - ! set window size (aspect_ratio = height/width) - TRho_Profile_win_width = 8 - TRho_Profile_win_aspect_ratio = 0.75 / ! end of pgstar namelist diff --git a/star/work/inlist_project b/star/work/inlist_project index 6e9a86824..97e3ded9f 100644 --- a/star/work/inlist_project +++ b/star/work/inlist_project @@ -6,78 +6,78 @@ &star_job - ! see star/defaults/star_job.defaults +! see star/defaults/star_job.defaults - ! begin with a pre-main sequence model - create_pre_main_sequence_model = .true. +! begin with a pre-main sequence model +create_pre_main_sequence_model = .false. - ! save a model at the end of the run - save_model_when_terminate = .false. - save_model_filename = '15M_at_TAMS.mod' +! save a model at the end of the run +save_model_when_terminate = .false. +save_model_filename = '15M_at_TAMS.mod' - ! display on-screen plots - pgstar_flag = .true. +! display on-screen plots +pgstar_flag = .true. / ! end of star_job namelist &eos - ! eos options - ! see eos/defaults/eos.defaults +! eos options +! see eos/defaults/eos.defaults / ! end of eos namelist &kap - ! kap options - ! see kap/defaults/kap.defaults - use_Type2_opacities = .true. - Zbase = 0.02 +! kap options +! see kap/defaults/kap.defaults +use_Type2_opacities = .true. +Zbase = 0.02 / ! end of kap namelist &controls - ! see star/defaults/controls.defaults +! see star/defaults/controls.defaults - ! starting specifications - initial_mass = 15 ! in Msun units - initial_z = 0.02 +! starting specifications +initial_mass = 15 ! in Msun units +initial_z = 0.02 - ! when to stop +! when to stop - ! stop when the star nears ZAMS (Lnuc/L > 0.99) - Lnuc_div_L_zams_limit = 0.99d0 - stop_near_zams = .true. +! ! stop when the star nears ZAMS (Lnuc/L > 0.99) +! Lnuc_div_L_zams_limit = 0.99d0 +! stop_near_zams = .true. - ! stop when the center mass fraction of h1 drops below this limit - xa_central_lower_limit_species(1) = 'h1' - xa_central_lower_limit(1) = 1d-3 +! stop when the center mass fraction of h1 drops below this limit +xa_central_lower_limit_species(1) = 'h1' +xa_central_lower_limit(1) = 1d-4 - ! wind +! wind - ! atmosphere +! atmosphere - ! rotation +! rotation - ! element diffusion +! element diffusion - ! mlt +! mlt - ! mixing +! mixing - ! timesteps +! timesteps - ! mesh +! mesh - ! solver - ! options for energy conservation (see MESA V, Section 3) - energy_eqn_option = 'dedt' - use_gold_tolerances = .true. +! solver +! options for energy conservation (see MESA V, Section 3) +energy_eqn_option = 'dedt' +use_gold_tolerances = .true. - ! output +! output / ! end of controls namelist diff --git a/star_data/private/pgstar_controls.inc b/star_data/private/pgstar_controls.inc index 6098721b2..db9de362d 100644 --- a/star_data/private/pgstar_controls.inc +++ b/star_data/private/pgstar_controls.inc @@ -2133,3 +2133,12 @@ trho_use_decorator, & tmaxrho_use_decorator, & trho_profile_use_decorator + + + ! for Kippenhahn-like visualization of max residual across all equations + logical :: Kipp_residuals_win_flag, Kipp_residuals_file_flag + real :: Kipp_residuals_win_width, Kipp_residuals_win_aspect_ratio, & + Kipp_residuals_file_width, Kipp_residuals_file_aspect_ratio, & + Kipp_residuals_min, Kipp_residuals_max + character (len=strlen) :: Kipp_residuals_file_dir, Kipp_residuals_file_prefix + integer :: Kipp_residuals_file_interval From a480c6c9ca3be5ca2d38385e08470f1697f59d85 Mon Sep 17 00:00:00 2001 From: matthiasfabry Date: Mon, 8 Jun 2026 20:31:50 -0600 Subject: [PATCH 10/15] [ci skip] add max residual plot --- star/Makefile | 2 + star/defaults/pgstar.defaults | 29 ++++ star/private/pgstar_ctrls_io.f90 | 31 ++++ star/private/pgstar_equation_residuals.f90 | 181 +++++++++++++-------- star/private/pgstar_full.f90 | 14 ++ star_data/private/pgstar_controls.inc | 40 +++++ star_data/public/star_pgstar.f90 | 6 +- 7 files changed, 237 insertions(+), 66 deletions(-) diff --git a/star/Makefile b/star/Makefile index c248e3d6b..c804dc2af 100644 --- a/star/Makefile +++ b/star/Makefile @@ -202,6 +202,7 @@ SRCS += \ private/pgstar_profile_panels.f90 \ private/pgstar_grid.f90 \ private/pgstar_network.f90 \ + private/pgstar_equation_residuals.f90 \ other/sample_pgstar_plot.f90 \ private/pgstar_full.f90 EXTERNAL_DEPENDS_ON := pgplot @@ -251,6 +252,7 @@ MODULES += pgstar_abundance.mod \ pgstar_l_teff.mod \ pgstar_l_v.mod \ pgstar_mixing_ds.mod \ + pgstar_equation_residuals.mod \ pgstar_mode_prop.mod \ pgstar_network.mod \ pgstar_power.mod \ diff --git a/star/defaults/pgstar.defaults b/star/defaults/pgstar.defaults index 346009501..38656f6d6 100644 --- a/star/defaults/pgstar.defaults +++ b/star/defaults/pgstar.defaults @@ -7814,6 +7814,35 @@ Grid9_file_width = -1 Grid9_file_aspect_ratio = -1 + + ! Max_eq_resid + ! ------------ + + ! :: + + Max_eq_resid_win_flag = .false. + Max_eq_resid_win_width = 7 + Max_eq_resid_win_aspect_ratio = 5d-1 + + Max_eq_resid_xleft = 0.15 + Max_eq_resid_xright = 0.85 + Max_eq_resid_ybot = 0.15 + Max_eq_resid_ytop = 0.85 + Max_eq_resid_txt_scale_factor = 1 + Max_eq_resid_title = 'Max equation residuals' + Max_eq_resid_max_width = -1 + + ! **File output** + + ! :: + + Max_eq_resid_file_flag = .false. + Max_eq_resid_file_dir = 'png' + Max_eq_resid_file_prefix = 'max_eq_resid_' + Max_eq_resid_file_width = -1 + Max_eq_resid_file_aspect_ratio = -1 + + ! Annotation ! ========== diff --git a/star/private/pgstar_ctrls_io.f90 b/star/private/pgstar_ctrls_io.f90 index dcf53870f..cfba1cb41 100644 --- a/star/private/pgstar_ctrls_io.f90 +++ b/star/private/pgstar_ctrls_io.f90 @@ -3023,6 +3023,21 @@ module pgstar_ctrls_io Grid9_file_width, & Grid9_file_aspect_ratio, & + Max_eq_resid_win_flag, & + Max_eq_resid_win_width, & + Max_eq_resid_win_aspect_ratio, & + Max_eq_resid_file_flag, & + Max_eq_resid_file_width, & + Max_eq_resid_file_aspect_ratio, & + Max_eq_resid_file_dir, & + Max_eq_resid_file_prefix, & + Max_eq_resid_xleft, & + Max_eq_resid_xright, & + Max_eq_resid_ybot, & + Max_eq_resid_ytop, & + Max_eq_resid_txt_scale_factor, & + Max_eq_resid_title, & + Max_eq_resid_max_width, & annotation1_ci, & annotation1_ch, & @@ -6203,6 +6218,22 @@ subroutine store_pgstar_controls(s, ierr) s% pg% Grid9_file_width = Grid9_file_width s% pg% Grid9_file_aspect_ratio = Grid9_file_aspect_ratio + s% pg% Max_eq_resid_win_flag = Max_eq_resid_win_flag + s% pg% Max_eq_resid_win_width = Max_eq_resid_win_width + s% pg% Max_eq_resid_win_aspect_ratio = Max_eq_resid_win_aspect_ratio + s% pg% Max_eq_resid_file_flag = Max_eq_resid_file_flag + s% pg% Max_eq_resid_file_width = Max_eq_resid_file_width + s% pg% Max_eq_resid_file_aspect_ratio = Max_eq_resid_file_aspect_ratio + s% pg% Max_eq_resid_file_dir = Max_eq_resid_file_dir + s% pg% Max_eq_resid_file_prefix = Max_eq_resid_file_prefix + s% pg% Max_eq_resid_xleft = Max_eq_resid_xleft + s% pg% Max_eq_resid_xright = Max_eq_resid_xright + s% pg% Max_eq_resid_ybot = Max_eq_resid_ybot + s% pg% Max_eq_resid_ytop = Max_eq_resid_ytop + s% pg% Max_eq_resid_txt_scale_factor = Max_eq_resid_txt_scale_factor + s% pg% Max_eq_resid_title = Max_eq_resid_title + s% pg% Max_eq_resid_max_width = Max_eq_resid_max_width + s% pg% annotation1_ci = annotation1_ci s% pg% annotation1_ch = annotation1_ch diff --git a/star/private/pgstar_equation_residuals.f90 b/star/private/pgstar_equation_residuals.f90 index bd3d80a30..38a6af499 100644 --- a/star/private/pgstar_equation_residuals.f90 +++ b/star/private/pgstar_equation_residuals.f90 @@ -1,6 +1,6 @@ ! *********************************************************************** ! -! Copyright (C) 2010 The MESA Team +! Copyright (C) 2026 The MESA Team ! ! This program is free software: you can redistribute it and/or modify ! it under the terms of the GNU Lesser General Public License @@ -20,29 +20,68 @@ module pgstar_equation_residuals + use star_private_def + use const_def, only: dp + use pgstar_support use star_pgstar - implicit none contains - subroutine equ_resid_plot(id, device_id, ierr) + subroutine Max_eq_resid_plot(id, device_id, ierr) integer, intent(in) :: id integer, intent(in) :: device_id integer, intent(out) :: ierr - type(star_info), pointer :: s + type (star_info), pointer :: s + + ierr = 0 + call get_star_ptr(id, s, ierr) + if (ierr /= 0) return + + call pgslct(device_id) + call pgbbuf() + call pgeras() + + call do_Max_eq_resid_plot(s, id, & + s% pg% Max_eq_resid_xleft, s% pg% Max_eq_resid_xright, & + s% pg% Max_eq_resid_ybot, s% pg% Max_eq_resid_ytop, .false., & + s% pg% Max_eq_resid_title, s% pg% Max_eq_resid_txt_scale_factor, & + s% pg% Max_eq_resid_max_width, ierr) + if (ierr /= 0) return + + call pgebuf() + + end subroutine Max_eq_resid_plot + - integer :: i_eq - integer :: n, last_model_plotted + ! history of residuals for each structure equation + subroutine do_Max_eq_resid_plot(s, id, & + win_xleft, win_xright, win_ybot, win_ytop, subplot, title, txt_scale, & + max_width, ierr) + + integer, intent(in) :: id, max_width + logical, intent(in) :: subplot + real, intent(in) :: & + win_xleft, win_xright, win_ybot, win_ytop, txt_scale + character (len=*), intent(in) :: title + integer, intent(out) :: ierr + type (star_info), pointer :: s + + integer :: i_eq, initial_width + integer :: n + integer, save :: resid_hist_nvar + integer, save :: init_model real :: xmin, xmax real :: ymin, ymax - real, dimension(max_resid_hist) :: xvec - real, dimension(max_resid_hist) :: yvec + ! use save, we set these once, and they are reused in later calls of this function + real, allocatable, dimension(:), save :: xvec, yvec, resid_hist_model + real, allocatable, dimension(:, :), save :: resid_hist_vals + character(len=strlen), allocatable, dimension(:), save :: resid_equ_names ierr = 0 @@ -50,39 +89,60 @@ subroutine equ_resid_plot(id, device_id, ierr) if (ierr /= 0) return if (.not. allocated(resid_hist_model)) then - resid_hist_nvar = s%nvar_hydro - allocate(resid_hist_model(max_resid_hist)) - allocate(resid_hist_vals(resid_hist_nvar, max_resid_hist)) - allocate(resid_equ_names(resid_hist_nvar)) - - do i_eq = 1, resid_hist_nvar - resid_equ_names(i_eq) = trim(s%nameofequ(i_eq)) - end do - - n_resid_hist = 0 + init_model = s% model_number - 1 end if - if (s%model_number /= last_model_plotted) then - last_model_plotted = s%model_number - if (n_resid_hist < max_resid_hist) then - n_resid_hist = n_resid_hist + 1 + if (max_width < 0) then + n = s% model_number - init_model + else + if (s% model_number < max_width) then + n = s% model_number - init_model else - resid_hist_model(1:max_resid_hist-1) = resid_hist_model(2:max_resid_hist) - resid_hist_vals(:,1:max_resid_hist-1) = resid_hist_vals(:,2:max_resid_hist) + n = max_width end if + end if - resid_hist_model(n_resid_hist) = s%model_number + if (.not. allocated(resid_hist_model)) then + resid_hist_nvar = s% nvar_hydro + if (max_width < 0) then + initial_width = 10 + else + initial_width = max_width + end if + allocate(resid_hist_model(initial_width)) + allocate(resid_hist_vals(resid_hist_nvar, initial_width)) + allocate(resid_equ_names(resid_hist_nvar)) + allocate(xvec(initial_width), yvec(initial_width), stat=ierr) + if (ierr /= 0) then + write(*,*) 'allocate failed for PGSTAR' + return + end if do i_eq = 1, resid_hist_nvar - resid_hist_vals(i_eq,n_resid_hist) = & - real(max(1d-40, & - maxval(abs(s%equ(i_eq,1:s%nz))))) + resid_equ_names(i_eq) = trim(s% nameofequ(i_eq)) end do + + + else if (s% model_number - init_model >= size(resid_hist_model)) then + if (max_width < 0) then + ! grow the arrays + call realloc_resid_hist(2*size(resid_hist_model)) + end if end if - n = n_resid_hist - if (n < 2) return ! nothing to plot yet + if (max_width > 1 .and. s% model_number > max_width) then ! displace values back one step + resid_hist_model(1:n-1) = resid_hist_model(2:n) + resid_hist_vals(:,1:n-1) = resid_hist_vals(:,2:n) + end if + + resid_hist_model(n) = s% model_number + + ! get the max resid values for this step + do i_eq = 1, resid_hist_nvar + resid_hist_vals(i_eq, n) = & + real(max(1d-40, maxval(abs(s% equ(i_eq, 1:s% nz))))) + end do xvec(1:n) = real(resid_hist_model(1:n)) @@ -91,33 +151,33 @@ subroutine equ_resid_plot(id, device_id, ierr) if (xmin >= xmax) xmax = xmin + 1.0 - ymin = minval(resid_hist_vals(:,1:n)) - ymax = maxval(resid_hist_vals(:,1:n)) + ymin = minval(resid_hist_vals(:, 1:n)) + ymax = maxval(resid_hist_vals(:, 1:n)) ymin = max(ymin, 1e-20) ymax = max(ymax, 10.0*ymin) - call pgslct(device_id) +! call pgslct(device_id) call pgsave - call pgeras - call pgsvp(0.12, 0.88, 0.12, 0.88) + call pgeras() + call pgsvp(win_xleft, win_xright, win_ybot, win_ytop) call pgswin(xmin, xmax, log10(ymin), log10(ymax)) call pgscf(1) call pgsch(1.0) call pgsci(1) call pgbox('BCNST',0.0,0,'BCNST',0.0,0) call pgmtxt('B',2.5,0.5,0.5,'Model Number') - call pgmtxt('L',3.0,0.5,0.5, 'log10(max |residual|)') + call pgmtxt('L',3.0,0.5,0.5,'log10(max |residual|)') call pgmtxt('T',1.0,0.5,0.5,'Maximum structural equation residuals') ! draw lines do i_eq = 1, resid_hist_nvar - yvec(1:n) = log10(resid_hist_vals(i_eq,1:n)) - call pgsci(mod(i_eq-1,13)+2) - call pgline(n, xvec, yvec) + yvec(1:n) = log10(resid_hist_vals(i_eq, 1:n)) + call pgsci(mod(i_eq-1,13) + 2) + call pgline(n, xvec(1:n), yvec(1:n)) end do ! legend - call pgsch(0.65) + call pgsch(0.75) do i_eq = 1, resid_hist_nvar call pgsci(mod(i_eq-1,13)+2) @@ -131,37 +191,28 @@ subroutine equ_resid_plot(id, device_id, ierr) call pgsci(1) call pgunsa - end subroutine equ_resid_plot + contains + subroutine realloc_resid_hist(new_size) + integer, intent(in) :: new_size + real, allocatable :: tmp_model(:) + real, allocatable :: tmp_vals(:,:) + call move_alloc(resid_hist_model, tmp_model) + call move_alloc(resid_hist_vals, tmp_vals) - ! history of residuals for each structure equation - subroutine do_equ_resid_plot(id, ierr) - integer, intent(in) :: id - integer, intent(out) :: ierr + allocate(resid_hist_model(new_size)) + allocate(resid_hist_vals(resid_hist_nvar, new_size)) - type(pgstar_win_file_data), pointer :: p - type(star_info), pointer :: s + deallocate(xvec, yvec) + allocate(xvec(new_size), yvec(new_size)) - ierr = 0 - call star_ptr(id, s, ierr) - if (ierr /= 0) return + resid_hist_model(1:n) = tmp_model(1:n) + resid_hist_vals(:,1:n) = tmp_vals(:,1:n) - p => s%pg%pgstar_win_file_ptr(i_Other) - p%plot => equ_resid_plot - p%id = i_Other - p%name = 'Max Residual per equation across mesh points' - p%win_flag = .true. - p%win_width = 12.0 - p%win_aspect_ratio = 0.6 - p%file_flag = .true. - p%file_dir = 'png' ! folder where to save files - p%file_prefix = 'eq_resid_' - p%file_interval = 5 - p%file_width = -1.0 - p%file_aspect_ratio = -1.0 - - end subroutine do_equ_resid_plot + deallocate(tmp_model, tmp_vals) + end subroutine + end subroutine do_Max_eq_resid_plot end module pgstar_equation_residuals diff --git a/star/private/pgstar_full.f90 b/star/private/pgstar_full.f90 index 1ae79de2a..bb2c81c3a 100644 --- a/star/private/pgstar_full.f90 +++ b/star/private/pgstar_full.f90 @@ -1261,6 +1261,20 @@ subroutine set_win_file_data(s, ierr) p% file_width = s% pg% Grid9_file_width p% file_aspect_ratio = s% pg% Grid9_file_aspect_ratio + p => s% pg% pgstar_win_file_ptr(i_max_eq_resid) + p% plot => Max_eq_resid_plot + p% id = i_max_eq_resid + p% name = 'Max residual per equation across mesh points' + p% win_flag = s% pg% max_eq_resid_win_flag + p% win_width = s% pg% max_eq_resid_win_width + p% win_aspect_ratio = s% pg% max_eq_resid_win_aspect_ratio + p% file_flag = s% pg% max_eq_resid_file_flag + p% file_dir = s% pg% max_eq_resid_file_dir + p% file_prefix = s% pg% max_eq_resid_file_prefix + p% file_interval = s% pg% max_eq_resid_file_interval + p% file_width = s% pg% max_eq_resid_file_width + p% file_aspect_ratio = s% pg% max_eq_resid_file_aspect_ratio + do i = 1, max_num_Other_plots p => s% pg% pgstar_win_file_ptr(i_Other + i - 1) p% win_flag = .false. diff --git a/star_data/private/pgstar_controls.inc b/star_data/private/pgstar_controls.inc index 6098721b2..b9d0d0b5e 100644 --- a/star_data/private/pgstar_controls.inc +++ b/star_data/private/pgstar_controls.inc @@ -2047,6 +2047,46 @@ integer, dimension(max_num_pgstar_grid_plots) :: & Grid9_plot_row, Grid9_plot_rowspan, & Grid9_plot_col, Grid9_plot_colspan + + logical :: Max_eq_resid_win_flag, Max_eq_resid_file_flag + logical :: do_Max_eq_resid_win, do_Max_eq_resid_file + integer :: Max_eq_resid_file_interval + integer :: id_Max_eq_resid_win, id_Max_eq_resid_file + character (len=strlen) :: Max_eq_resid_file_dir, Max_eq_resid_file_prefix + real :: & + Max_eq_resid_win_width, Max_eq_resid_win_aspect_ratio, & + Max_eq_resid_xleft, Max_eq_resid_xright, & + Max_eq_resid_ybot, Max_eq_resid_ytop, & + prev_Max_eq_resid_win_width, prev_Max_eq_resid_win_ratio, & + Max_eq_resid_file_width, Max_eq_resid_file_aspect_ratio, & + prev_Max_eq_resid_file_width, prev_Max_eq_resid_file_ratio, & + Max_eq_resid_txt_scale_factor + character (len=strlen) :: Max_eq_resid_title + integer :: Max_eq_resid_max_width + + logical :: Kipp_residuals_win_flag, Kipp_residuals_file_flag + logical :: do_Kipp_residuals_win, do_Kipp_residuals_file + integer :: Kipp_residuals_file_interval, Kipp_residuals_step_max + integer :: id_Kipp_residuals_win, id_Kipp_residuals_file + character (len=strlen) :: Kipp_residuals_file_dir, Kipp_residuals_file_prefix + real :: & + Kipp_residuals_win_width, Kipp_residuals_win_aspect_ratio, & + Kipp_residuals_xleft, Kipp_residuals_xright, & + Kipp_residuals_ybot, Kipp_residuals_ytop, & + prev_Kipp_residuals_win_width, prev_Kipp_residuals_win_ratio, & + Kipp_residuals_file_width, Kipp_residuals_file_aspect_ratio, & + prev_Kipp_residuals_file_width, prev_Kipp_residuals_file_ratio + character (len=strlen) :: Kipp_residuals_title, & + Kipp_residuals_plot_name(max_num_pgstar_grid_plots) + real, dimension(max_num_pgstar_grid_plots) :: & + Kipp_residuals_txt_scale_factor, & + Kipp_residuals_plot_pad_left, Kipp_residuals_plot_pad_right, & + Kipp_residuals_plot_pad_top, Kipp_residuals_plot_pad_bot + integer :: & + Kipp_residuals_num_cols, Kipp_residuals_num_rows, Kipp_residuals_num_plots + integer, dimension(max_num_pgstar_grid_plots) :: & + Kipp_residuals_plot_row, Kipp_residuals_plot_rowspan, & + Kipp_residuals_plot_col, Kipp_residuals_plot_colspan integer :: annotation1_ci, annotation1_lw, annotation1_cf diff --git a/star_data/public/star_pgstar.f90 b/star_data/public/star_pgstar.f90 index a1b7197a0..cb1b4857f 100644 --- a/star_data/public/star_pgstar.f90 +++ b/star_data/public/star_pgstar.f90 @@ -175,7 +175,11 @@ end subroutine pgstar_decorator_interface integer, parameter :: i_Grid7 = i_Grid6 + 1 integer, parameter :: i_Grid8 = i_Grid7 + 1 integer, parameter :: i_Grid9 = i_Grid8 + 1 - integer, parameter :: i_Other = i_Grid9 + 1 + + integer, parameter :: i_Max_eq_resid = i_Grid9 + 1 + integer, parameter :: i_Kipp_residuals = i_Max_eq_resid + 1 + + integer, parameter :: i_Other = i_Kipp_residuals + 1 integer, parameter :: num_pgstar_plots = i_Other + max_num_Other_plots From 39b2550472cb064dad79b659459d36faedefb71b Mon Sep 17 00:00:00 2001 From: matthiasfabry Date: Tue, 9 Jun 2026 10:37:26 -0600 Subject: [PATCH 11/15] [ci skip] allow subplotting in grid --- star/defaults/pgstar.defaults | 2 +- star/private/pgstar_ctrls_io.f90 | 4 ++-- star/private/pgstar_equation_residuals.f90 | 18 ++++++++---------- star/private/pgstar_full.f90 | 16 ++++++++++++++++ star/private/pgstar_grid.f90 | 7 +++++++ star_data/private/pgstar_controls.inc | 10 ++-------- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/star/defaults/pgstar.defaults b/star/defaults/pgstar.defaults index 38656f6d6..07f092b82 100644 --- a/star/defaults/pgstar.defaults +++ b/star/defaults/pgstar.defaults @@ -7828,7 +7828,7 @@ Max_eq_resid_xright = 0.85 Max_eq_resid_ybot = 0.15 Max_eq_resid_ytop = 0.85 - Max_eq_resid_txt_scale_factor = 1 + Max_eq_resid_txt_scale = 1 Max_eq_resid_title = 'Max equation residuals' Max_eq_resid_max_width = -1 diff --git a/star/private/pgstar_ctrls_io.f90 b/star/private/pgstar_ctrls_io.f90 index cfba1cb41..1ab8ee60e 100644 --- a/star/private/pgstar_ctrls_io.f90 +++ b/star/private/pgstar_ctrls_io.f90 @@ -3035,7 +3035,7 @@ module pgstar_ctrls_io Max_eq_resid_xright, & Max_eq_resid_ybot, & Max_eq_resid_ytop, & - Max_eq_resid_txt_scale_factor, & + Max_eq_resid_txt_scale, & Max_eq_resid_title, & Max_eq_resid_max_width, & @@ -6230,7 +6230,7 @@ subroutine store_pgstar_controls(s, ierr) s% pg% Max_eq_resid_xright = Max_eq_resid_xright s% pg% Max_eq_resid_ybot = Max_eq_resid_ybot s% pg% Max_eq_resid_ytop = Max_eq_resid_ytop - s% pg% Max_eq_resid_txt_scale_factor = Max_eq_resid_txt_scale_factor + s% pg% Max_eq_resid_txt_scale = Max_eq_resid_txt_scale s% pg% Max_eq_resid_title = Max_eq_resid_title s% pg% Max_eq_resid_max_width = Max_eq_resid_max_width diff --git a/star/private/pgstar_equation_residuals.f90 b/star/private/pgstar_equation_residuals.f90 index 38a6af499..ef04f387b 100644 --- a/star/private/pgstar_equation_residuals.f90 +++ b/star/private/pgstar_equation_residuals.f90 @@ -48,7 +48,7 @@ subroutine Max_eq_resid_plot(id, device_id, ierr) call do_Max_eq_resid_plot(s, id, & s% pg% Max_eq_resid_xleft, s% pg% Max_eq_resid_xright, & s% pg% Max_eq_resid_ybot, s% pg% Max_eq_resid_ytop, .false., & - s% pg% Max_eq_resid_title, s% pg% Max_eq_resid_txt_scale_factor, & + s% pg% Max_eq_resid_title, s% pg% Max_eq_resid_txt_scale, & s% pg% Max_eq_resid_max_width, ierr) if (ierr /= 0) return @@ -122,8 +122,6 @@ subroutine do_Max_eq_resid_plot(s, id, & resid_equ_names(i_eq) = trim(s% nameofequ(i_eq)) end do - - else if (s% model_number - init_model >= size(resid_hist_model)) then if (max_width < 0) then ! grow the arrays @@ -156,18 +154,18 @@ subroutine do_Max_eq_resid_plot(s, id, & ymin = max(ymin, 1e-20) ymax = max(ymax, 10.0*ymin) -! call pgslct(device_id) call pgsave - call pgeras() + call pgsci(0) ! color index 0 = background call pgsvp(win_xleft, win_xright, win_ybot, win_ytop) + call pgrect(0.0, 1.0, 0.0, 1.0) ! pseudo erase call pgswin(xmin, xmax, log10(ymin), log10(ymax)) + call pgsch(txt_scale) call pgscf(1) - call pgsch(1.0) call pgsci(1) call pgbox('BCNST',0.0,0,'BCNST',0.0,0) call pgmtxt('B',2.5,0.5,0.5,'Model Number') call pgmtxt('L',3.0,0.5,0.5,'log10(max |residual|)') - call pgmtxt('T',1.0,0.5,0.5,'Maximum structural equation residuals') + call pgmtxt('T',1.0,0.5,0.5, title) ! draw lines do i_eq = 1, resid_hist_nvar @@ -177,13 +175,13 @@ subroutine do_Max_eq_resid_plot(s, id, & end do ! legend - call pgsch(0.75) + call pgsch(0.75 * txt_scale) do i_eq = 1, resid_hist_nvar call pgsci(mod(i_eq-1,13)+2) call pgptxt( & - xmin + (0.55 + 0.06*real(i_eq-1))*(xmax-xmin), & - log10(ymax) - 0.03*(log10(ymax)-log10(ymin)), & + xmax + 0.03, & + log10(ymax) - (0.03 + 0.06*real(i_eq-1))*(log10(ymax)-log10(ymin)), & 0.0, 0.0, & trim(resid_equ_names(i_eq))) end do diff --git a/star/private/pgstar_full.f90 b/star/private/pgstar_full.f90 index bb2c81c3a..c535896f4 100644 --- a/star/private/pgstar_full.f90 +++ b/star/private/pgstar_full.f90 @@ -161,6 +161,8 @@ subroutine set_win_file_data(s, ierr) Color_Magnitude1_plot, Color_Magnitude2_plot, Color_Magnitude3_plot, & Color_Magnitude4_plot, Color_Magnitude5_plot, Color_Magnitude6_plot, & Color_Magnitude7_plot, Color_Magnitude8_plot, Color_Magnitude9_plot + use pgstar_equation_residuals, only: & + Max_eq_resid_plot type (star_info), pointer :: s integer, intent(out) :: ierr @@ -1275,6 +1277,20 @@ subroutine set_win_file_data(s, ierr) p% file_width = s% pg% max_eq_resid_file_width p% file_aspect_ratio = s% pg% max_eq_resid_file_aspect_ratio +! p => s% pg% pgstar_win_file_ptr(i_Kipp_residuals) +! p% plot => Kipp_residuals_plot +! p% id = i_Kipp_residuals_plot +! p% name = 'Max residual per equation across mesh points' +! p% win_flag = s% pg% Kipp_residuals_win_flag +! p% win_width = s% pg% Kipp_residuals_win_width +! p% win_aspect_ratio = s% pg% Kipp_residuals_win_aspect_ratio +! p% file_flag = s% pg% Kipp_residuals_file_flag +! p% file_dir = s% pg% Kipp_residuals_file_dir +! p% file_prefix = s% pg% Kipp_residuals_file_prefix +! p% file_interval = s% pg% Kipp_residuals_file_interval +! p% file_width = s% pg% Kipp_residuals_file_width +! p% file_aspect_ratio = s% pg% Kipp_residuals_file_aspect_ratio + do i = 1, max_num_Other_plots p => s% pg% pgstar_win_file_ptr(i_Other + i - 1) p% win_flag = .false. diff --git a/star/private/pgstar_grid.f90 b/star/private/pgstar_grid.f90 index 98a4a2465..98d35d318 100644 --- a/star/private/pgstar_grid.f90 +++ b/star/private/pgstar_grid.f90 @@ -566,6 +566,8 @@ subroutine Grid_plot(s, id, device_id, & do_Color_Magnitude1_plot, do_Color_Magnitude2_plot, do_Color_Magnitude3_plot, & do_Color_Magnitude4_plot, do_Color_Magnitude5_plot, do_Color_Magnitude6_plot, & do_Color_Magnitude7_plot, do_Color_Magnitude8_plot, do_Color_Magnitude9_plot + use pgstar_equation_residuals, only : & + do_Max_eq_resid_plot type (star_info), pointer :: s logical, intent(in) :: subplot @@ -947,6 +949,10 @@ subroutine Grid_plot(s, id, device_id, & call do_Text_Summary9_plot(& s, id, device_id, xleft, xright, ybot, ytop, grid_subplot, s% pg% Text_Summary9_title, & Grid_txt_scale_factor(i) * s% pg% Text_Summary9_txt_scale, s% pg% Text_Summary9_dxval, ierr) + case ('max_eq_resid') + call do_Max_eq_resid_plot(& + s, id, xleft, xright, ybot, ytop, grid_subplot, s% pg% Max_eq_resid_title, & + Grid_txt_scale_factor(i) * s% pg% Max_eq_resid_txt_scale, s% pg% Max_eq_resid_max_width, ierr) case default ! check for "other" plot found_it = .false. @@ -998,6 +1004,7 @@ subroutine Grid_plot(s, id, device_id, & 'History_Panels1,..,9', & 'History_Tracks1,..,9', & 'Color_Magnitude1,..,9', & + 'Max_eq_resid', & 'and if you are using star/astero', & 'Echelle', & 'Ratios' diff --git a/star_data/private/pgstar_controls.inc b/star_data/private/pgstar_controls.inc index b9d0d0b5e..369d06289 100644 --- a/star_data/private/pgstar_controls.inc +++ b/star_data/private/pgstar_controls.inc @@ -2060,7 +2060,7 @@ prev_Max_eq_resid_win_width, prev_Max_eq_resid_win_ratio, & Max_eq_resid_file_width, Max_eq_resid_file_aspect_ratio, & prev_Max_eq_resid_file_width, prev_Max_eq_resid_file_ratio, & - Max_eq_resid_txt_scale_factor + Max_eq_resid_txt_scale character (len=strlen) :: Max_eq_resid_title integer :: Max_eq_resid_max_width @@ -2076,17 +2076,11 @@ prev_Kipp_residuals_win_width, prev_Kipp_residuals_win_ratio, & Kipp_residuals_file_width, Kipp_residuals_file_aspect_ratio, & prev_Kipp_residuals_file_width, prev_Kipp_residuals_file_ratio - character (len=strlen) :: Kipp_residuals_title, & - Kipp_residuals_plot_name(max_num_pgstar_grid_plots) + character (len=strlen) :: Kipp_residuals_title real, dimension(max_num_pgstar_grid_plots) :: & Kipp_residuals_txt_scale_factor, & Kipp_residuals_plot_pad_left, Kipp_residuals_plot_pad_right, & Kipp_residuals_plot_pad_top, Kipp_residuals_plot_pad_bot - integer :: & - Kipp_residuals_num_cols, Kipp_residuals_num_rows, Kipp_residuals_num_plots - integer, dimension(max_num_pgstar_grid_plots) :: & - Kipp_residuals_plot_row, Kipp_residuals_plot_rowspan, & - Kipp_residuals_plot_col, Kipp_residuals_plot_colspan integer :: annotation1_ci, annotation1_lw, annotation1_cf From 107112703d38e8b1b067f023c05f08ee767b2436 Mon Sep 17 00:00:00 2001 From: matthiasfabry Date: Tue, 9 Jun 2026 15:42:11 -0600 Subject: [PATCH 12/15] [ci skip] kipp resid functionality --- star/Makefile | 4 +- star/defaults/pgstar.defaults | 31 ++ star/private/pgstar_ctrls_io.f90 | 34 ++ star/private/pgstar_equation_residuals.f90 | 21 +- star/private/pgstar_full.f90 | 40 +- star/private/pgstar_kipp_residuals.f90 | 543 +++++++++++---------- star_data/private/pgstar_controls.inc | 10 +- 7 files changed, 396 insertions(+), 287 deletions(-) diff --git a/star/Makefile b/star/Makefile index c804dc2af..23cde982d 100644 --- a/star/Makefile +++ b/star/Makefile @@ -203,6 +203,7 @@ SRCS += \ private/pgstar_grid.f90 \ private/pgstar_network.f90 \ private/pgstar_equation_residuals.f90 \ + private/pgstar_kipp_residuals.f90 \ other/sample_pgstar_plot.f90 \ private/pgstar_full.f90 EXTERNAL_DEPENDS_ON := pgplot @@ -238,11 +239,13 @@ MODULES += pgstar_abundance.mod \ pgstar_decorator.mod \ pgstar_dpg_dnu.mod \ pgstar_dynamo.mod \ + pgstar_equation_residuals.mod \ pgstar_grid.mod \ pgstar_history_panels.mod \ pgstar_hist_track.mod \ pgstar_hr.mod \ pgstar_kipp.mod \ + pgstar_kipp_residuals.mod \ pgstar_logg_logt.mod \ pgstar_logg_teff.mod \ pgstar_logl_r.mod \ @@ -252,7 +255,6 @@ MODULES += pgstar_abundance.mod \ pgstar_l_teff.mod \ pgstar_l_v.mod \ pgstar_mixing_ds.mod \ - pgstar_equation_residuals.mod \ pgstar_mode_prop.mod \ pgstar_network.mod \ pgstar_power.mod \ diff --git a/star/defaults/pgstar.defaults b/star/defaults/pgstar.defaults index 07f092b82..341c90d7b 100644 --- a/star/defaults/pgstar.defaults +++ b/star/defaults/pgstar.defaults @@ -7843,6 +7843,37 @@ Max_eq_resid_file_aspect_ratio = -1 + ! Kipp_residuals + ! ------------ + + ! :: + + Kipp_residuals_win_flag = .false. + Kipp_residuals_win_width = 9 + Kipp_residuals_win_aspect_ratio = 6d-1 + + ! :: + + Kipp_residuals_xleft = 0.15 + Kipp_residuals_xright = 0.85 + Kipp_residuals_ybot = 0.15 + Kipp_residuals_ytop = 0.85 + Kipp_residuals_txt_scale = 1 + Kipp_residuals_title = 'Kippenhahn residuals' + Kipp_residuals_max_width = -1 + Kipp_residuals_yaxis_name = 'mass' + + ! **File output** + + ! :: + + Kipp_residuals_file_flag = .false. + Kipp_residuals_file_dir = 'png' + Kipp_residuals_file_prefix = 'kipp_residuals_' + Kipp_residuals_file_width = -1 + Kipp_residuals_file_aspect_ratio = -1 + + ! Annotation ! ========== diff --git a/star/private/pgstar_ctrls_io.f90 b/star/private/pgstar_ctrls_io.f90 index 1ab8ee60e..071f4561b 100644 --- a/star/private/pgstar_ctrls_io.f90 +++ b/star/private/pgstar_ctrls_io.f90 @@ -3039,6 +3039,23 @@ module pgstar_ctrls_io Max_eq_resid_title, & Max_eq_resid_max_width, & + Kipp_residuals_win_flag, & + Kipp_residuals_win_width, & + Kipp_residuals_win_aspect_ratio, & + Kipp_residuals_file_flag, & + Kipp_residuals_file_width, & + Kipp_residuals_file_aspect_ratio, & + Kipp_residuals_file_dir, & + Kipp_residuals_file_prefix, & + Kipp_residuals_xleft, & + Kipp_residuals_xright, & + Kipp_residuals_ybot, & + Kipp_residuals_ytop, & + Kipp_residuals_txt_scale, & + Kipp_residuals_title, & + Kipp_residuals_max_width, & + Kipp_residuals_yaxis_name, & + annotation1_ci, & annotation1_ch, & annotation1_lw, & @@ -6234,6 +6251,23 @@ subroutine store_pgstar_controls(s, ierr) s% pg% Max_eq_resid_title = Max_eq_resid_title s% pg% Max_eq_resid_max_width = Max_eq_resid_max_width + s% pg% Kipp_residuals_win_flag = Kipp_residuals_win_flag + s% pg% Kipp_residuals_win_width = Kipp_residuals_win_width + s% pg% Kipp_residuals_win_aspect_ratio = Kipp_residuals_win_aspect_ratio + s% pg% Kipp_residuals_file_flag = Kipp_residuals_file_flag + s% pg% Kipp_residuals_file_width = Kipp_residuals_file_width + s% pg% Kipp_residuals_file_aspect_ratio = Kipp_residuals_file_aspect_ratio + s% pg% Kipp_residuals_file_dir = Kipp_residuals_file_dir + s% pg% Kipp_residuals_file_prefix = Kipp_residuals_file_prefix + s% pg% Kipp_residuals_xleft = Kipp_residuals_xleft + s% pg% Kipp_residuals_xright = Kipp_residuals_xright + s% pg% Kipp_residuals_ybot = Kipp_residuals_ybot + s% pg% Kipp_residuals_ytop = Kipp_residuals_ytop + s% pg% Kipp_residuals_txt_scale = Kipp_residuals_txt_scale + s% pg% Kipp_residuals_title = Kipp_residuals_title + s% pg% Kipp_residuals_max_width = Kipp_residuals_max_width + s% pg% Kipp_residuals_yaxis_name = Kipp_residuals_yaxis_name + s% pg% annotation1_ci = annotation1_ci s% pg% annotation1_ch = annotation1_ch diff --git a/star/private/pgstar_equation_residuals.f90 b/star/private/pgstar_equation_residuals.f90 index ef04f387b..11d440364 100644 --- a/star/private/pgstar_equation_residuals.f90 +++ b/star/private/pgstar_equation_residuals.f90 @@ -95,17 +95,13 @@ subroutine do_Max_eq_resid_plot(s, id, & if (max_width < 0) then n = s% model_number - init_model else - if (s% model_number < max_width) then - n = s% model_number - init_model - else - n = max_width - end if + n = min(s% model_number - init_model, max_width) end if if (.not. allocated(resid_hist_model)) then resid_hist_nvar = s% nvar_hydro if (max_width < 0) then - initial_width = 10 + initial_width = 100 else initial_width = max_width end if @@ -118,18 +114,15 @@ subroutine do_Max_eq_resid_plot(s, id, & return end if - do i_eq = 1, resid_hist_nvar + do i_eq = 1, resid_hist_nvar ! set names resid_equ_names(i_eq) = trim(s% nameofequ(i_eq)) end do - - else if (s% model_number - init_model >= size(resid_hist_model)) then - if (max_width < 0) then - ! grow the arrays - call realloc_resid_hist(2*size(resid_hist_model)) - end if + else if (s% model_number - init_model >= size(resid_hist_model) .and. max_width < 0) then + call realloc_resid_hist(2*size(resid_hist_model)) ! grow the arrays end if - if (max_width > 1 .and. s% model_number > max_width) then ! displace values back one step + ! roll if using a max width and you go over the limit + if (max_width > 1 .and. s% model_number - init_model > max_width) then resid_hist_model(1:n-1) = resid_hist_model(2:n) resid_hist_vals(:,1:n-1) = resid_hist_vals(:,2:n) end if diff --git a/star/private/pgstar_full.f90 b/star/private/pgstar_full.f90 index c535896f4..d65d2d1bb 100644 --- a/star/private/pgstar_full.f90 +++ b/star/private/pgstar_full.f90 @@ -163,6 +163,8 @@ subroutine set_win_file_data(s, ierr) Color_Magnitude7_plot, Color_Magnitude8_plot, Color_Magnitude9_plot use pgstar_equation_residuals, only: & Max_eq_resid_plot + use pgstar_kipp_residuals, only: & + Kipp_residuals_plot type (star_info), pointer :: s integer, intent(out) :: ierr @@ -1266,7 +1268,7 @@ subroutine set_win_file_data(s, ierr) p => s% pg% pgstar_win_file_ptr(i_max_eq_resid) p% plot => Max_eq_resid_plot p% id = i_max_eq_resid - p% name = 'Max residual per equation across mesh points' + p% name = 'Max_eq_resid' p% win_flag = s% pg% max_eq_resid_win_flag p% win_width = s% pg% max_eq_resid_win_width p% win_aspect_ratio = s% pg% max_eq_resid_win_aspect_ratio @@ -1277,19 +1279,19 @@ subroutine set_win_file_data(s, ierr) p% file_width = s% pg% max_eq_resid_file_width p% file_aspect_ratio = s% pg% max_eq_resid_file_aspect_ratio -! p => s% pg% pgstar_win_file_ptr(i_Kipp_residuals) -! p% plot => Kipp_residuals_plot -! p% id = i_Kipp_residuals_plot -! p% name = 'Max residual per equation across mesh points' -! p% win_flag = s% pg% Kipp_residuals_win_flag -! p% win_width = s% pg% Kipp_residuals_win_width -! p% win_aspect_ratio = s% pg% Kipp_residuals_win_aspect_ratio -! p% file_flag = s% pg% Kipp_residuals_file_flag -! p% file_dir = s% pg% Kipp_residuals_file_dir -! p% file_prefix = s% pg% Kipp_residuals_file_prefix -! p% file_interval = s% pg% Kipp_residuals_file_interval -! p% file_width = s% pg% Kipp_residuals_file_width -! p% file_aspect_ratio = s% pg% Kipp_residuals_file_aspect_ratio + p => s% pg% pgstar_win_file_ptr(i_Kipp_residuals) + p% plot => Kipp_residuals_plot + p% id = i_Kipp_residuals + p% name = 'Kipp_resid' + p% win_flag = s% pg% Kipp_residuals_win_flag + p% win_width = s% pg% Kipp_residuals_win_width + p% win_aspect_ratio = s% pg% Kipp_residuals_win_aspect_ratio + p% file_flag = s% pg% Kipp_residuals_file_flag + p% file_dir = s% pg% Kipp_residuals_file_dir + p% file_prefix = s% pg% Kipp_residuals_file_prefix + p% file_interval = s% pg% Kipp_residuals_file_interval + p% file_width = s% pg% Kipp_residuals_file_width + p% file_aspect_ratio = s% pg% Kipp_residuals_file_aspect_ratio do i = 1, max_num_Other_plots p => s% pg% pgstar_win_file_ptr(i_Other + i - 1) @@ -1373,8 +1375,8 @@ subroutine onScreen_Plots(s, must_write_files_in, ierr) use utils_lib use chem_def use net_def - use net_lib, only : get_net_reaction_table - use const_def, only : Msun, Rsun + use net_lib, only: get_net_reaction_table + use const_def, only: Msun, Rsun type (star_info), pointer :: s logical :: must_write_files_in @@ -1442,7 +1444,7 @@ subroutine onScreen_Plots(s, must_write_files_in, ierr) do i = 1, num_pgstar_plots p => s% pg% pgstar_win_file_ptr(i) - if(show_plot_now) then + if (show_plot_now) then ! call to check_window opens device call check_window(s, p, ierr) if (failed('check_window')) return @@ -1598,7 +1600,7 @@ end subroutine read_pgstar_data subroutine update_pgstar_data(s, ierr) - use star_utils, only : eval_csound + use star_utils, only: eval_csound type (star_info), pointer :: s integer, intent(out) :: ierr @@ -1625,7 +1627,7 @@ subroutine update_pgstar_data(s, ierr) contains subroutine get_hist_values(num, ierr) - use history, only : do_get_data_for_history_columns + use history, only: do_get_data_for_history_columns integer, intent(in) :: num integer, intent(out) :: ierr integer :: i diff --git a/star/private/pgstar_kipp_residuals.f90 b/star/private/pgstar_kipp_residuals.f90 index 54189a14f..9bac397f1 100644 --- a/star/private/pgstar_kipp_residuals.f90 +++ b/star/private/pgstar_kipp_residuals.f90 @@ -19,6 +19,8 @@ module pgstar_kipp_residuals + use const_def + use star_private_def use star_pgstar use pgstar_colors use const_def, only: dp, Msun @@ -33,293 +35,340 @@ subroutine Kipp_residuals_plot(id, device_id, ierr) integer, intent(in) :: id, device_id integer, intent(out) :: ierr - type(star_info), pointer :: s - integer :: k, neq, col + type (star_info), pointer :: s ierr = 0 - call star_ptr(id, s, ierr) + call get_star_ptr(id, s, ierr) if (ierr /= 0) return - neq = size(s%equ, 1) ! number of equations per cell + call pgslct(device_id) + call pgbbuf() + call pgeras() - ! --- allocate history buffer on first call --- - if (.not. allocated(nr_resid_buf)) then - ! make 5 times bigger than current nz - allocate(nr_resid_buf(NR_MAX_MODELS, 5 * s%nz)) - allocate(nr_ycoord_buf(NR_MAX_MODELS, 5 * s%nz)) - allocate(nr_model_buf(NR_MAX_MODELS)) - allocate(nr_zone_buf(NR_MAX_MODELS)) - nr_resid_buf = -99.0 - nr_ycoord_buf = 0.0 ! zero-init so unused cells are safely masked - nr_n_cells = s%nz - else if (s%nz > 0.95 * size(nr_resid_buf, 2)) then - ! check if remeshing has increased nz beyond 95% of the - ! current array size, reallocate - allocate(tmp_resid_buf(NR_MAX_MODELS, 5 * s%nz)) - allocate(tmp_mass_buf(NR_MAX_MODELS, 5 *s%nz)) + call do_Kipp_residuals_Plot(s, id, & + s% pg% Kipp_residuals_xleft, s% pg% Kipp_residuals_xright, & + s% pg% Kipp_residuals_ybot, s% pg% Kipp_residuals_ytop, .false., & + s% pg% Kipp_residuals_title, s% pg% Kipp_residuals_txt_scale, & + s% pg% Kipp_residuals_max_width, s% pg% Kipp_residuals_yaxis_name, ierr) + if (ierr /= 0) return - tmp_resid_buf = -99.0 - tmp_mass_buf = 0.0 + call pgebuf() - ! Copy older compressed history into the newly expanded arrays - tmp_resid_buf(:, 1:nr_n_cells) = nr_resid_buf(:, 1:nr_n_cells) - tmp_mass_buf(:, 1:nr_n_cells) = nr_ycoord_buf(:, 1:nr_n_cells) + end subroutine Kipp_residuals_plot - call move_alloc(tmp_resid_buf, nr_resid_buf) - call move_alloc(tmp_mass_buf, nr_ycoord_buf) - nr_n_cells = s%nz - end if + subroutine do_Kipp_residuals_plot(s, id, & + win_xleft, win_xright, win_ybot, win_ytop, subplot, title, txt_scale, & + max_width, yaxis_name, & + ierr) + integer, intent(in) :: id, max_width + real, intent(in) :: win_xleft, win_xright, win_ybot, win_ytop, txt_scale + logical, intent(in) :: subplot + character(len=*), intent(in) :: title, yaxis_name + integer, intent(out) :: ierr - ! --- roll buffer if full --- - if (nr_n_stored < NR_MAX_MODELS) then - nr_n_stored = nr_n_stored + 1 - col = nr_n_stored - else - nr_model_buf(1:NR_MAX_MODELS-1) = nr_model_buf(2:NR_MAX_MODELS) - nr_resid_buf(1:NR_MAX_MODELS-1, :) = nr_resid_buf(2:NR_MAX_MODELS, :) - nr_ycoord_buf(1:NR_MAX_MODELS-1, :) = nr_ycoord_buf(2:NR_MAX_MODELS, :) - col = NR_MAX_MODELS - end if + type (star_info), pointer :: s + integer :: k, neq, initial_width, n, x_size, y_size, nr_n_cells + integer, save :: init_model - nr_model_buf(col) = s%model_number - nr_zone_buf(col) = s%nz - ! do k = 1, s%nz - ! nr_resid_buf(col, k) = safe_log10(maxval(abs(s%equ(1:neq, k)))) ! residuals are cell-centered - ! nr_ycoord_buf(col, k) = s%m(k) - 0.5 * s%dm(k) ! outer face mass coord minus half mass of the cell - ! end do - - do k = 1, s%nz - nr_resid_buf(col, k) = & - safe_log10(maxval(abs(s%equ(1:neq, k)))) - select case (s%x_integer_ctrl(1)) - case (NR_COORD_MASS) - nr_ycoord_buf(col, k) = s%m(k)/Msun - case (NR_COORD_LOGR) - ! cell-centered radius in log10(R/Rsun) - if (k < s%nz) then - nr_ycoord_buf(col, k) = safe_log10(0.5d0 * (s%r(k) + s%r(k+1)) / Rsun) - else - nr_ycoord_buf(col, k) = safe_log10(0.5d0*s%r(k)/Rsun) - end if - case (NR_COORD_TAU) - ! optical depth - nr_ycoord_buf(col, k) = safe_log10(s%tau(k)) - case default - ! cell-centered mass coordinate - nr_ycoord_buf(col, k) = (s%m(k) - 0.5d0*s%dm(k))/Msun - end select - end do + real :: resid_hi, resid_lo + real, allocatable, dimension(:, :), save :: nr_resid_buf, nr_ycoord_buf + integer, allocatable, dimension(:), save :: nr_model_buf, nr_zone_buf - call pgslct(device_id) - call pgbbuf() - call pgeras() - call Kipp_residuals_render(ierr, id) - call pgebuf() + real, allocatable :: tmp_resid_buf(:, :), tmp_ycoord_buf(:, :) + integer, allocatable :: tmp_model_buf(:), tmp_zone_buf(:) - end subroutine Kipp_residuals_plot + neq = size(s% equ, 1) ! number of equations per cell - subroutine Kipp_residuals_render(ierr, id) - integer, intent(in) :: id - integer, intent(out) :: ierr - real, parameter :: missing_val = 1d-30 - real, allocatable :: img(:,:), coord_grid(:) - real :: tr(6), fg, bg, xlo, xhi, dx - real :: clo, chi, dcoord, coord_j, frac - integer :: nx, ny, i, j, k, nz_i - logical :: y_reverse - type(star_info), pointer :: s + if (.not. allocated(nr_resid_buf)) then + if (max_width < 0) then + initial_width = 10 + else + initial_width = max_width + end if + ! make 5 times bigger than current nz + allocate(nr_resid_buf(initial_width, int(1.5 * s% nz))) + allocate(nr_ycoord_buf(initial_width, int(1.5 * s% nz))) + allocate(nr_model_buf(initial_width)) + allocate(nr_zone_buf(initial_width)) + nr_resid_buf(:, :) = -99.0 + nr_ycoord_buf(:, :) = 0.0 ! zero-init so unused cells are safely masked + + init_model = s% model_number - 1 + else if (s% nz > 0.95 * size(nr_resid_buf, 2)) then + write(*, *) "reallocating due to nz" + ! check if remeshing has increased nz beyond 95% of the + ! current array size + x_size = size(nr_resid_buf, 1) + call move_alloc(nr_resid_buf, tmp_resid_buf) + call move_alloc(nr_ycoord_buf, tmp_ycoord_buf) - ! ----------------------------------------- colorbar definition - real :: bright, contra - real, dimension(9) :: l, r, g, b + allocate(nr_resid_buf(x_size, 5 * s% nz)) + allocate(nr_ycoord_buf(x_size, 5 * s% nz)) + nr_resid_buf(:, :) = -99.0 + nr_ycoord_buf(:, :) = 0.0 ! zero-init so unused cells are safely masked - l = (/ & - 0.00, 0.12, 0.25, 0.38, 0.50, & - 0.62, 0.75, 0.88, 1.00 /) + nr_resid_buf(:, 1:nr_n_cells) = tmp_resid_buf(:, 1:nr_n_cells) + nr_ycoord_buf(:, 1:nr_n_cells) = tmp_ycoord_buf(:, 1:nr_n_cells) - r = (/ & - 0.00, 0.05, 0.15, 0.32, 0.55, & - 0.78, 0.93, 0.99, 1.00 /) + deallocate(tmp_resid_buf, tmp_ycoord_buf) + end if - g = (/ & - 0.00, 0.02, 0.04, 0.06, 0.10, & - 0.18, 0.32, 0.58, 0.95 /) + nr_n_cells = s% nz + if (max_width < 0) then + n = s% model_number - init_model + else + n = min(s% model_number - init_model, max_width) + end if - b = (/ & - 0.00, 0.08, 0.18, 0.32, 0.36, & - 0.28, 0.16, 0.08, 0.80 /) + ! resize n_model dimension + if (n > size(nr_resid_buf, 1)) then + write(*, *) "reallocating due to model_number" + x_size = size(nr_resid_buf, 1) + y_size = size(nr_resid_buf, 2) - contra = 1.0 - bright = 0.5 + call move_alloc(nr_resid_buf, tmp_resid_buf) + call move_alloc(nr_ycoord_buf, tmp_ycoord_buf) + call move_alloc(nr_zone_buf, tmp_zone_buf) + call move_alloc(nr_model_buf, tmp_model_buf) - call pgscir(16,255) - call pgctab(l, r, g, b, 9, contra, bright) - ! ----------------------------------------- end colorbar + allocate(nr_resid_buf(2 * x_size, y_size)) + allocate(nr_ycoord_buf(2 * x_size, y_size)) + allocate(nr_zone_buf(2 * x_size)) + allocate(nr_model_buf(2 * x_size)) - ierr = 0 - call star_ptr(id, s, ierr) - if (ierr /= 0) return + nr_resid_buf(:, :) = -99.0 + nr_ycoord_buf(:, :) = 0.0 ! zero-init so unused cells are safely masked - if (nr_n_stored < 2) return + nr_resid_buf(1:n, :) = tmp_resid_buf(1:n, :) + nr_ycoord_buf(1:n, :) = tmp_ycoord_buf(1:n, :) + nr_zone_buf(1:n) = tmp_zone_buf(1:n) + nr_model_buf(1:n) = tmp_model_buf(1:n) - nx = nr_n_stored - ny = nr_n_cells + deallocate(tmp_resid_buf, tmp_ycoord_buf, tmp_zone_buf, tmp_model_buf) + end if - allocate(img(nx, ny)) - allocate(coord_grid(ny)) + if (max_width > 1 .and. s% model_number - init_model > max_width) then + nr_model_buf(1:max_width-1) = nr_model_buf(2:max_width) + nr_resid_buf(1:max_width-1, :) = nr_resid_buf(2:max_width, :) + nr_ycoord_buf(1:max_width-1, :) = nr_ycoord_buf(2:max_width, :) + end if - chi = -1.0e30 - clo = 1.0e30 - do i = 1, nx - nz_i = nr_zone_buf(i) - do k = 1, nz_i - if (nr_ycoord_buf(i,k) > chi) chi = nr_ycoord_buf(i,k) - ! m(k) is positive; skip any zero-initialised slots - if (nr_ycoord_buf(i,k) > 0.0 .and. nr_ycoord_buf(i,k) < clo) & - clo = nr_ycoord_buf(i,k) - end do + nr_model_buf(n) = s% model_number + nr_zone_buf(n) = s% nz + + ! fill arrays with new vals + do k = 1, s% nz + nr_resid_buf(n, k) = real(safe_log10(maxval(abs(s% equ(1:neq, k))))) + select case (trim(yaxis_name)) + case ('mass') + nr_ycoord_buf(n, k) = real(s% m(k)/Msun) + case ('logR') + ! cell-centered radius in log10(R/Rsun) + if (k < s%nz) then + nr_ycoord_buf(n, k) = real(safe_log10(0.5d0 * (s% r(k) + s% r(k+1)) / Rsun)) + else + nr_ycoord_buf(n, k) = real(safe_log10(0.5d0 * s% r(k) / Rsun)) + end if + case ('tau') + ! optical depth + nr_ycoord_buf(n, k) = real(safe_log10(s% tau(k))) + case default + ! cell-centered mass coordinate + nr_ycoord_buf(n, k) = real((s% m(k) - 0.5d0 * s% dm(k))/Msun) + end select end do - select case (s%x_integer_ctrl(1)) - case (NR_COORD_MASS) - y_reverse = .false. - case (NR_COORD_LOGR) - y_reverse = .false. - case (NR_COORD_TAU) - y_reverse = .true. - case default - y_reverse = .false. - end select + ! so actual plotting + call pgsave + call pgsci(0) ! color index 0 = background + call pgsvp(win_xleft, win_xright, win_ybot, win_ytop) + call pgrect(0.0, 1.0, 0.0, 1.0) ! pseudo erase + call Kipp_residuals_render(ierr, id) + call pgunsa + + contains + + subroutine Kipp_residuals_render(ierr, id) + integer, intent(in) :: id + integer, intent(out) :: ierr + real, parameter :: missing_val = TINY(1.0) + real, allocatable :: img(:,:), coord_grid(:) + real :: tr(6), fg, bg, xlo, xhi, dx + real :: clo, chi, dcoord, coord_j, frac + integer :: nx, ny, i, j, k, nz_i + logical :: y_reverse + + ! ----------------------------------------- colorbar definition + real :: bright, contra + real, dimension(9) :: l, r, g, b + + l = (/ & + 0.00, 0.12, 0.25, 0.38, 0.50, & + 0.62, 0.75, 0.88, 1.00 /) + + r = (/ & + 0.00, 0.05, 0.15, 0.32, 0.55, & + 0.78, 0.93, 0.99, 1.00 /) + + g = (/ & + 0.00, 0.02, 0.04, 0.06, 0.10, & + 0.18, 0.32, 0.58, 0.95 /) + + b = (/ & + 0.00, 0.08, 0.18, 0.32, 0.36, & + 0.28, 0.16, 0.08, 0.80 /) + + contra = 1.0 + bright = 0.5 + + call pgscir(16,255) + call pgctab(l, r, g, b, 9, contra, bright) + ! ----------------------------------------- end colorbar + + nx = n + ny = nr_n_cells + + allocate(img(nx, ny)) + allocate(coord_grid(ny)) + + chi = -1.0e30 + clo = 1.0e30 + do i = 1, nx + nz_i = nr_zone_buf(i) + do k = 1, nz_i + if (nr_ycoord_buf(i,k) > chi) chi = nr_ycoord_buf(i,k) + ! m(k) is positive; skip any zero-initialised slots + if (nr_ycoord_buf(i,k) > 0.0 .and. nr_ycoord_buf(i,k) < clo) & + clo = nr_ycoord_buf(i,k) + end do + end do - dcoord = (chi - clo) / real(ny - 1) + resid_hi = -1.0e30 + resid_lo = 1.0e30 + do i = 1, nx + nz_i = nr_zone_buf(i) + do k = 1, nz_i + if (nr_resid_buf(i,k) > resid_hi) resid_hi = nr_resid_buf(i,k) + if (nr_resid_buf(i,k) < resid_lo) resid_lo = nr_resid_buf(i,k) + end do + end do - do j = 1, ny - if (.not. y_reverse) then - coord_grid(j) = clo + real(j - 1) * dcoord - else - coord_grid(j) = chi - real(j - 1) * dcoord - end if - end do + select case (yaxis_name) + case ('mass') + y_reverse = .false. + case ('logR') + y_reverse = .false. + case ('tau') + y_reverse = .true. + case default + y_reverse = .false. + end select + + dcoord = (chi - clo) / real(ny - 1) - ! --- interpolate residuals onto the uniform grid --- - img = missing_val - do i = 1, nx - nz_i = nr_zone_buf(i) do j = 1, ny - coord_j = coord_grid(j) - do k = 1, nz_i - 1 - ! skip invalid cells - if (nr_resid_buf(i,k) == missing_val) cycle - if (nr_resid_buf(i,k+1) == missing_val) cycle - ! works for either increasing or decreasing coordinates - if ( (nr_ycoord_buf(i,k) - coord_j) * & - (nr_ycoord_buf(i,k+1) - coord_j) <= 0d0 ) then - if (abs(nr_ycoord_buf(i,k) - nr_ycoord_buf(i,k+1)) > 1d-99) then - frac = (coord_j - nr_ycoord_buf(i,k+1)) / & - (nr_ycoord_buf(i,k) - nr_ycoord_buf(i,k+1)) - else - frac = 0.5d0 + if (.not. y_reverse) then + coord_grid(j) = clo + real(j - 1) * dcoord + else + coord_grid(j) = chi - real(j - 1) * dcoord + end if + end do + + ! --- interpolate residuals onto the uniform grid --- + img = missing_val + do i = 1, nx + nz_i = nr_zone_buf(i) + do j = 1, ny + coord_j = coord_grid(j) + do k = 1, nz_i - 1 + ! skip invalid cells + if (nr_resid_buf(i,k) == missing_val) cycle + if (nr_resid_buf(i,k+1) == missing_val) cycle + ! works for either increasing or decreasing coordinates + if ((nr_ycoord_buf(i,k) - coord_j) * & + (nr_ycoord_buf(i,k+1) - coord_j) <= 0d0) then + if (abs(nr_ycoord_buf(i,k) - nr_ycoord_buf(i,k+1)) > 1d-99) then + frac = (coord_j - nr_ycoord_buf(i,k+1)) / & + (nr_ycoord_buf(i,k) - nr_ycoord_buf(i,k+1)) + else + frac = 0.5d0 + end if + img(i,j) = nr_resid_buf(i,k+1) + & + frac * (nr_resid_buf(i,k) - nr_resid_buf(i,k+1)) + exit end if - img(i,j) = nr_resid_buf(i,k+1) + & - frac * (nr_resid_buf(i,k) - nr_resid_buf(i,k+1)) - exit - end if + end do end do end do - end do - ! --- x range centred on model numbers --- - dx = max(1.0, real(nr_model_buf(nx) - nr_model_buf(1)) / real(nx - 1)) - xlo = real(nr_model_buf(1)) - 0.5*dx - xhi = real(nr_model_buf(nx)) + 0.5*dx - - ! --- transformation matrix for pgimag --- - ! world_y(j) = tr(4) + tr(6)*j - ! j=1 -> mhi => tr(4) = mhi - tr(6) = mhi + dm - ! j=ny -> mlo => confirms tr(6) = -dm - tr(1) = xlo - tr(2) = (xhi - xlo) / real(nx) - tr(3) = 0.0 - tr(4) = chi + dcoord - tr(5) = 0.0 - tr(6) = -dcoord - - ! color scale - fg = nr_resid_max - bg = nr_resid_min - if (fg <= -100) fg = maxval(img) - if (bg <= -100) bg = minval(img, mask=(img > -19.9)) - if (bg >= fg) bg = fg - 6.0 - - ! --- main panel --- - ! y-axis: mlo at bottom (centre), mhi at top (surface) - call pgsvp(0.10, 0.82, 0.12, 0.92) - if (.not. y_reverse) then - call pgswin(xlo, xhi, clo - 0.5*dcoord, chi + 0.5*dcoord) - else - call pgswin(xlo, xhi, chi + 0.5*dcoord, clo - 0.5*dcoord) - end if - call pgimag(img, nx, ny, 1, nx, 1, ny, fg, bg, tr) - - call pgsci(clr_Foreground) - call pgsch(1.2) - call pgbox('BCNST', 0.0, 0, 'BCNST', 0.0, 0) - select case (s%x_integer_ctrl(1)) - case (NR_COORD_MASS) - y_reverse = .false. - call pglab('Model Number', 'Mass (M\d\(2281)\u)', & - 'Newton Raphson Solver Residuals of accepted step') - case (NR_COORD_LOGR) - y_reverse = .false. - call pglab('Model Number', 'log(R/R\d\(2281)\u)', & - 'Newton Raphson Solver Residuals of accepted step') - case (NR_COORD_TAU) - y_reverse = .true. - call pglab('Model Number', 'log(tau)', & - 'Newton Raphson Solver Residuals of accepted step') - case default - y_reverse = .false. - call pglab('Model Number', 'Mass (M\d\(2281)\u)', & - 'Newton Raphson Solver Residuals of accepted step') - end select - - ! --- color wedge --- - call pgsvp(0.84, 0.90, 0.12, 0.92) - call pgswin(0.0, 1.0, bg, fg) - call pgwedg('RI', 0.0, 4.0, bg, fg, 'log10(max(|res|))') - - deallocate(img) - deallocate(coord_grid) - - end subroutine Kipp_residuals_render - - - subroutine do_Kipp_residuals_plot(id, ierr) - integer, intent(in) :: id - integer, intent(out) :: ierr + ! --- x range centred on model numbers --- + dx = max(1.0, real(nr_model_buf(nx) - nr_model_buf(1)) / real(nx - 1)) + xlo = real(nr_model_buf(1)) - 0.5*dx + xhi = real(nr_model_buf(nx)) + 0.5*dx + + ! --- transformation matrix for pgimag --- + ! world_y(j) = tr(4) + tr(6)*j + ! j=1 -> mhi => tr(4) = mhi - tr(6) = mhi + dm + ! j=ny -> mlo => confirms tr(6) = -dm + tr(1) = xlo + tr(2) = (xhi - xlo) / real(nx) + tr(3) = 0.0 + tr(4) = chi + dcoord + tr(5) = 0.0 + tr(6) = -dcoord + + ! color scale + fg = resid_hi + bg = resid_lo + if (fg <= -100) fg = maxval(img) + if (bg <= -100) bg = minval(img, mask=(img > -19.9)) + if (bg >= fg) bg = fg - 6.0 + + ! --- main panel --- + ! y-axis: mlo at bottom (centre), mhi at top (surface) + call pgsvp(0.10, 0.82, 0.12, 0.92) + if (.not. y_reverse) then + call pgswin(xlo, xhi, clo - 0.5*dcoord, chi + 0.5*dcoord) + else + call pgswin(xlo, xhi, chi + 0.5*dcoord, clo - 0.5*dcoord) + end if + call pgimag(img, nx, ny, 1, nx, 1, ny, fg, bg, tr) + + call pgsci(clr_Foreground) + call pgsch(txt_scale) + call pgbox('BCNST', 0.0, 0, 'BCNST', 0.0, 0) + + select case (yaxis_name) + case ('mass') + y_reverse = .false. + call pglab('Model Number', 'Mass (M\d\(2281)\u)', & + 'Newton Raphson Solver Residuals of accepted step') + case ('logR') + y_reverse = .false. + call pglab('Model Number', 'log(R/R\d\(2281)\u)', & + 'Newton Raphson Solver Residuals of accepted step') + case ('tau') + y_reverse = .true. + call pglab('Model Number', 'log(tau)', & + 'Newton Raphson Solver Residuals of accepted step') + case default + y_reverse = .false. + call pglab('Model Number', 'Mass (M\d\(2281)\u)', & + 'Newton Raphson Solver Residuals of accepted step') + end select - type(pgstar_win_file_data), pointer :: p - type(star_info), pointer :: s + ! --- color wedge --- + call pgsvp(0.84, 0.90, 0.12, 0.92) + call pgswin(0.0, 1.0, bg, fg) + call pgwedg('RI', 0.0, 4.0, bg, fg, 'log10(max(|res|))') - ierr = 0 - call star_ptr(id, s, ierr) - if (ierr /= 0) return + deallocate(img, coord_grid) - p => s%pg%pgstar_win_file_ptr(i_Other) - p%plot => Kipp_residuals_plot - p%id = i_Other - p%name = 'Newton Raphson Residuals - accepted step' - p%win_flag = .true. - p%win_width = 12.0 - p%win_aspect_ratio = 0.6 - p%file_flag = .true. - p%file_dir = 'png' ! folder where to save files - p%file_prefix = 'nr_resid_' - p%file_interval = 5 - p%file_width = -1.0 - p%file_aspect_ratio = -1.0 + end subroutine Kipp_residuals_render end subroutine do_Kipp_residuals_plot + + end module pgstar_kipp_residuals diff --git a/star_data/private/pgstar_controls.inc b/star_data/private/pgstar_controls.inc index 369d06289..430608594 100644 --- a/star_data/private/pgstar_controls.inc +++ b/star_data/private/pgstar_controls.inc @@ -2066,7 +2066,7 @@ logical :: Kipp_residuals_win_flag, Kipp_residuals_file_flag logical :: do_Kipp_residuals_win, do_Kipp_residuals_file - integer :: Kipp_residuals_file_interval, Kipp_residuals_step_max + integer :: Kipp_residuals_file_interval integer :: id_Kipp_residuals_win, id_Kipp_residuals_file character (len=strlen) :: Kipp_residuals_file_dir, Kipp_residuals_file_prefix real :: & @@ -2076,11 +2076,9 @@ prev_Kipp_residuals_win_width, prev_Kipp_residuals_win_ratio, & Kipp_residuals_file_width, Kipp_residuals_file_aspect_ratio, & prev_Kipp_residuals_file_width, prev_Kipp_residuals_file_ratio - character (len=strlen) :: Kipp_residuals_title - real, dimension(max_num_pgstar_grid_plots) :: & - Kipp_residuals_txt_scale_factor, & - Kipp_residuals_plot_pad_left, Kipp_residuals_plot_pad_right, & - Kipp_residuals_plot_pad_top, Kipp_residuals_plot_pad_bot + character (len=strlen) :: Kipp_residuals_title, Kipp_residuals_yaxis_name + real :: Kipp_residuals_txt_scale + integer :: Kipp_residuals_max_width integer :: annotation1_ci, annotation1_lw, annotation1_cf From 1d1e9dd1d2cc75c3e76eddb0a0b9a23e1bb63304 Mon Sep 17 00:00:00 2001 From: matthiasfabry Date: Tue, 9 Jun 2026 17:00:02 -0600 Subject: [PATCH 13/15] [ci skip] allow for subplotting; do colormap saving --- star/private/pgstar_grid.f90 | 7 ++++ star/private/pgstar_kipp_residuals.f90 | 55 ++++++++++++++------------ 2 files changed, 37 insertions(+), 25 deletions(-) diff --git a/star/private/pgstar_grid.f90 b/star/private/pgstar_grid.f90 index 98d35d318..0c3735888 100644 --- a/star/private/pgstar_grid.f90 +++ b/star/private/pgstar_grid.f90 @@ -568,6 +568,8 @@ subroutine Grid_plot(s, id, device_id, & do_Color_Magnitude7_plot, do_Color_Magnitude8_plot, do_Color_Magnitude9_plot use pgstar_equation_residuals, only : & do_Max_eq_resid_plot + use pgstar_kipp_residuals, only : & + do_Kipp_residuals_plot type (star_info), pointer :: s logical, intent(in) :: subplot @@ -953,6 +955,11 @@ subroutine Grid_plot(s, id, device_id, & call do_Max_eq_resid_plot(& s, id, xleft, xright, ybot, ytop, grid_subplot, s% pg% Max_eq_resid_title, & Grid_txt_scale_factor(i) * s% pg% Max_eq_resid_txt_scale, s% pg% Max_eq_resid_max_width, ierr) + case ('kipp_residuals') + call do_Kipp_residuals_plot(& + s, id, xleft, xright, ybot, ytop, grid_subplot, s% pg% Kipp_residuals_title, & + Grid_txt_scale_factor(i) * s% pg% Kipp_residuals_txt_scale, & + s% pg% Kipp_residuals_max_width, s% pg% Kipp_residuals_yaxis_name, ierr) case default ! check for "other" plot found_it = .false. diff --git a/star/private/pgstar_kipp_residuals.f90 b/star/private/pgstar_kipp_residuals.f90 index 9bac397f1..6e7d9f74a 100644 --- a/star/private/pgstar_kipp_residuals.f90 +++ b/star/private/pgstar_kipp_residuals.f90 @@ -27,6 +27,13 @@ module pgstar_kipp_residuals implicit none + real, parameter, dimension(9) :: & + l = (/ 0.00, 0.12, 0.25, 0.38, 0.50, 0.62, 0.75, 0.88, 1.00 /), & + r = (/ 0.00, 0.05, 0.15, 0.32, 0.55, 0.78, 0.93, 0.99, 1.00 /), & + g = (/ 0.00, 0.02, 0.04, 0.06, 0.10, 0.18, 0.32, 0.58, 0.95 /), & + b = (/ 0.00, 0.08, 0.18, 0.32, 0.36, 0.28, 0.16, 0.08, 0.80 /) + real, parameter :: contra = 1.0, bright = 0.5 + contains ! Kippenhahn-style log10(max(|res|)) across all equations for a @@ -76,6 +83,10 @@ subroutine do_Kipp_residuals_plot(s, id, & real, allocatable, dimension(:, :), save :: nr_resid_buf, nr_ycoord_buf integer, allocatable, dimension(:), save :: nr_model_buf, nr_zone_buf + ! colorbar color mapping info + real, allocatable, save :: r_save(:), g_save(:), b_save(:) + integer, save :: n_colors, c_low, c_high + real, allocatable :: tmp_resid_buf(:, :), tmp_ycoord_buf(:, :) integer, allocatable :: tmp_model_buf(:), tmp_zone_buf(:) @@ -97,7 +108,6 @@ subroutine do_Kipp_residuals_plot(s, id, & init_model = s% model_number - 1 else if (s% nz > 0.95 * size(nr_resid_buf, 2)) then - write(*, *) "reallocating due to nz" ! check if remeshing has increased nz beyond 95% of the ! current array size x_size = size(nr_resid_buf, 1) @@ -124,7 +134,6 @@ subroutine do_Kipp_residuals_plot(s, id, & ! resize n_model dimension if (n > size(nr_resid_buf, 1)) then - write(*, *) "reallocating due to model_number" x_size = size(nr_resid_buf, 1) y_size = size(nr_resid_buf, 2) @@ -186,6 +195,7 @@ subroutine do_Kipp_residuals_plot(s, id, & call pgsvp(win_xleft, win_xright, win_ybot, win_ytop) call pgrect(0.0, 1.0, 0.0, 1.0) ! pseudo erase call Kipp_residuals_render(ierr, id) + call pgunsa contains @@ -200,32 +210,21 @@ subroutine Kipp_residuals_render(ierr, id) integer :: nx, ny, i, j, k, nz_i logical :: y_reverse - ! ----------------------------------------- colorbar definition - real :: bright, contra - real, dimension(9) :: l, r, g, b - - l = (/ & - 0.00, 0.12, 0.25, 0.38, 0.50, & - 0.62, 0.75, 0.88, 1.00 /) - - r = (/ & - 0.00, 0.05, 0.15, 0.32, 0.55, & - 0.78, 0.93, 0.99, 1.00 /) - g = (/ & - 0.00, 0.02, 0.04, 0.06, 0.10, & - 0.18, 0.32, 0.58, 0.95 /) + if (.not. allocated(r_save)) then + call pgqcir(c_low, c_high) + n_colors = c_high - c_low + 1 + allocate(r_save(n_colors), g_save(n_colors), b_save(n_colors)) - b = (/ & - 0.00, 0.08, 0.18, 0.32, 0.36, & - 0.28, 0.16, 0.08, 0.80 /) - - contra = 1.0 - bright = 0.5 + ! save existing color table + do i = 1, n_colors + call pgqcr(c_low + i - 1, r_save(i), g_save(i), b_save(i)) + end do + end if + call pgqcir(c_low, c_high) call pgscir(16,255) call pgctab(l, r, g, b, 9, contra, bright) - ! ----------------------------------------- end colorbar nx = n ny = nr_n_cells @@ -327,7 +326,6 @@ subroutine Kipp_residuals_render(ierr, id) ! --- main panel --- ! y-axis: mlo at bottom (centre), mhi at top (surface) - call pgsvp(0.10, 0.82, 0.12, 0.92) if (.not. y_reverse) then call pgswin(xlo, xhi, clo - 0.5*dcoord, chi + 0.5*dcoord) else @@ -359,10 +357,17 @@ subroutine Kipp_residuals_render(ierr, id) end select ! --- color wedge --- - call pgsvp(0.84, 0.90, 0.12, 0.92) + call pgsvp(win_xright + 0.01 * (win_xright - win_xleft), win_xright + 0.03 * (win_xright - win_xleft), & + win_ybot, win_ytop) call pgswin(0.0, 1.0, bg, fg) call pgwedg('RI', 0.0, 4.0, bg, fg, 'log10(max(|res|))') + ! reset color range + call pgscir(c_low, c_high) + do i = 1, n_colors + call pgscr(c_low + i - 1, r_save(i), g_save(i), b_save(i)) + end do + deallocate(img, coord_grid) end subroutine Kipp_residuals_render From 9771ca7be2c8b7bdd7f78b249405de36fdcdb496 Mon Sep 17 00:00:00 2001 From: matthiasfabry Date: Tue, 9 Jun 2026 19:08:56 -0600 Subject: [PATCH 14/15] [ci skip] small tweaks --- star/private/pgstar_kipp_residuals.f90 | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/star/private/pgstar_kipp_residuals.f90 b/star/private/pgstar_kipp_residuals.f90 index 6e7d9f74a..ab1f57e6f 100644 --- a/star/private/pgstar_kipp_residuals.f90 +++ b/star/private/pgstar_kipp_residuals.f90 @@ -162,6 +162,7 @@ subroutine do_Kipp_residuals_plot(s, id, & nr_model_buf(1:max_width-1) = nr_model_buf(2:max_width) nr_resid_buf(1:max_width-1, :) = nr_resid_buf(2:max_width, :) nr_ycoord_buf(1:max_width-1, :) = nr_ycoord_buf(2:max_width, :) + nr_zone_buf(1:max_width-1) = nr_zone_buf(2:max_width) end if nr_model_buf(n) = s% model_number @@ -174,7 +175,6 @@ subroutine do_Kipp_residuals_plot(s, id, & case ('mass') nr_ycoord_buf(n, k) = real(s% m(k)/Msun) case ('logR') - ! cell-centered radius in log10(R/Rsun) if (k < s%nz) then nr_ycoord_buf(n, k) = real(safe_log10(0.5d0 * (s% r(k) + s% r(k+1)) / Rsun)) else @@ -210,7 +210,6 @@ subroutine Kipp_residuals_render(ierr, id) integer :: nx, ny, i, j, k, nz_i logical :: y_reverse - if (.not. allocated(r_save)) then call pgqcir(c_low, c_high) n_colors = c_high - c_low + 1 @@ -266,7 +265,6 @@ subroutine Kipp_residuals_render(ierr, id) end select dcoord = (chi - clo) / real(ny - 1) - do j = 1, ny if (.not. y_reverse) then coord_grid(j) = clo + real(j - 1) * dcoord @@ -310,7 +308,7 @@ subroutine Kipp_residuals_render(ierr, id) ! world_y(j) = tr(4) + tr(6)*j ! j=1 -> mhi => tr(4) = mhi - tr(6) = mhi + dm ! j=ny -> mlo => confirms tr(6) = -dm - tr(1) = xlo + tr(1) = xlo - 0.5 tr(2) = (xhi - xlo) / real(nx) tr(3) = 0.0 tr(4) = chi + dcoord From 5b7a02a52d8509cd1a68e3ea6c88e9dce16b6a34 Mon Sep 17 00:00:00 2001 From: matthiasfabry Date: Tue, 9 Jun 2026 19:56:57 -0600 Subject: [PATCH 15/15] [ci skip] flip y in pgimag so mass loss happens at the top --- star/private/pgstar_kipp_residuals.f90 | 4 ++-- star_data/private/pgstar_controls.inc | 9 --------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/star/private/pgstar_kipp_residuals.f90 b/star/private/pgstar_kipp_residuals.f90 index 7d99fc9eb..fdd3a9573 100644 --- a/star/private/pgstar_kipp_residuals.f90 +++ b/star/private/pgstar_kipp_residuals.f90 @@ -311,9 +311,9 @@ subroutine Kipp_residuals_render(ierr, id) tr(1) = xlo - 0.5 tr(2) = (xhi - xlo) / real(nx) tr(3) = 0.0 - tr(4) = chi + dcoord + tr(4) = clo - dcoord tr(5) = 0.0 - tr(6) = -dcoord + tr(6) = dcoord ! color scale fg = resid_hi diff --git a/star_data/private/pgstar_controls.inc b/star_data/private/pgstar_controls.inc index 9aa9c4cea..430608594 100644 --- a/star_data/private/pgstar_controls.inc +++ b/star_data/private/pgstar_controls.inc @@ -2165,12 +2165,3 @@ trho_use_decorator, & tmaxrho_use_decorator, & trho_profile_use_decorator - - - ! for Kippenhahn-like visualization of max residual across all equations - logical :: Kipp_residuals_win_flag, Kipp_residuals_file_flag - real :: Kipp_residuals_win_width, Kipp_residuals_win_aspect_ratio, & - Kipp_residuals_file_width, Kipp_residuals_file_aspect_ratio, & - Kipp_residuals_min, Kipp_residuals_max - character (len=strlen) :: Kipp_residuals_file_dir, Kipp_residuals_file_prefix - integer :: Kipp_residuals_file_interval