[Mesa-users] Resolving TP-AGB

Ana Antonini anacarolina.srantonini at gmail.com
Thu Mar 26 12:17:43 UTC 2026


Hi Theo,
The late TP-AGB is a very tricky evolutionary stage, especially at higher
masses.
I'd recommend having a look at Rees&Izzard 2024
https://ui.adsabs.harvard.edu/abs/2024MNRAS.531.4033R/abstract , as they go
through the main instabilities TP-AGB models experience, and offer possible
solutions as mesa subroutines.
Given  the max residuals  at the surface and the envelope mass, you might
be encountering HRI .

However, their subroutines might not (and at higher masses certainly
won't)  solve your problem, merely delaying it to a later point in the
TP-AGB.
If your interest lies *in* the TP-AGB stage, the default approach is to
carry calculations on for as long as possible and go through
post-processing. If you're interested in the WD stage,  the only
workaround is to remove the envelope before the instabilities crash the
code.

Good luck!
Ana Antonini

Théo-Courty via Mesa-users <mesa-users at lists.mesastar.org> escreveu
(quinta, 26/03/2026 à(s) 08:52):

> Dear Mesa users,
>
>
> I’m trying to evolve stars with mass varying between 1-5 Msun from ZAMS to
> white dwarf cooling track with version r25.12.1. However, I encounter
> numerical difficulties during the late TP-AGB phase for a 5Msun model with
> Z=0.012 (remaining mass ~1.25 Msun). The first thermal pulses go smoothly,
> but the late evolution struggles and the timestep becomes small and goes
> into a loop of increase/decrease between -3 < log dt <  -2.5. The limiting
> factor for dt is labelled as max increase until a retry and loops like
> this. I tried to lower max_timestep_factor to 1.01 but it does not solve
> the issue. I observe a lot of retries during that part of evolution until
> crash due to min_timestep_limit.
>
>
> I am fairly new to mesa and not very experienced with debugging. Here are
> typical examples of error messages I get:
>
>
> avg resid  0.223E-06     max resid dv_dt     1  0.35367E-03 mix type xx000
> avg corr  0.474E-03      max corr lnd   451 -0.21100E-01 mix type 00000
> avg+max corr+resid -- give up
>
>
> hydro_mtx: logT too small       26764         407           3
> 6.7237179921904777D-01    5.3757388036508846D+00
>
>
> hydro_mtx: logRho too large       26738         421           5
> 5.6268674362592407D+01   -7.8503397605837941D+00
>
>
> I tried to include okay_to_reduce_gradT_excess = .true. which I found used
> in some inlists online, but with this parameter activated the star shows
> non-physical behavior (log L > 10^5-6 with few small timesteps) so I keep
> it to false.
>
>
> Please find below the enlists I use which are based on make_co_wd
> test_suite which I modified to include element diffusion during MS and
> thermal pulses to remove the enveloppe instead of remove_env routine.
> Thanks a lot!
>
>
> Best regards,
>
>
> Théo
>
>
> *Common inlist for shared parameters*
>
> &star_job
>
>       show_log_description_at_start = .false.
>
>
>
>
>       change_net = .true.
>
>       new_net_name = 'co_burn_extras.net'
>
>
>
>       ! age start at ZAMS
>
>       set_initial_age = .false.
>
>       set_initial_model_number = .false.
>
>
>       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'
>
>
> / ! end of star_job namelist
>
>
> &eos
>
>
>
> / ! end of eos namelist
>
>
> &kap
>
>       Zbase = 1.2d-02
>
>
>       kap_file_prefix = 'gs98'
>
>       use_Type2_opacities = .true.
>
>
> / ! end of kap namelist
>
>
> &controls
>
>
> initial_mass = 5.00d+00
>
>
>
> ! winds
>
>       cool_wind_full_on_T = 9.99d9
>
>       hot_wind_full_on_T = 1d10
>
>       cool_wind_RGB_scheme = 'Reimers'
>
>       cool_wind_AGB_scheme = 'Blocker'
>
>       RGB_to_AGB_wind_switch = 1d-4
>
>       Reimers_scaling_factor = 0.1d0
>
>       Blocker_scaling_factor = 0.2d0
>
>
>
> ! when to stop
>
>       max_age = 1.4d+10
>
>
> ! mesh
>
>       max_allowed_nz = 20000 ! preventing 'fail to adjust mesh'
>
>
> ! diffusion
>
>       diffusion_v_max = 1d-5
>
>       do_element_diffusion = .false. ! Activated during MS and settling
> only
>
>       diffusion_use_full_net = .true.
>
>
>       ! Solver controls.
>
>       diffusion_use_cgs_solver = .true.
>
>       diffusion_use_isolve = .true.
>
>       diffusion_rtol_for_isolve = 1d-4
>
>       diffusion_atol_for_isolve = 1d-5
>
>       diffusion_min_X_hard_limit = -1d-4
>
>       diffusion_maxsteps_for_isolve = 1000
>
>       diffusion_isolve_solver = 'ros2_solver'
>
>
>       ! Timestep controls to prevent steps that are difficult for
> diffusion.
>
>       diffusion_steps_limit = 20
>
>       diffusion_steps_hard_limit = 150
>
>       diffusion_iters_limit = 50
>
>       diffusion_iters_hard_limit = 100
>
>
> ! convection
>
>       mlt_option = 'Henyey'
>
>       mixing_length_alpha = 1.8
>
>       use_Ledoux_criterion = .true.
>
>       thermohaline_coeff = 1d2
>
>
> ! timesteps
>
>       max_years_for_timestep = 1d7
>
>       time_delta_coeff = 1.0d0
>
>       use_gold2_tolerances = .true.
>
>
>
>       varcontrol_target = 1d-3
>
>       dX_nuc_drop_limit = 1d-2
>
>       delta_HR_limit = 0.1
>
>
> ! Atm
>
>       atm_option = 'T_tau'
>
>       atm_T_tau_relation = 'Eddington'
>
>       atm_T_tau_opacity = 'iterated'
>
>       atm_T_tau_max_iters = 100
>
>
> ! Overshoot
>
>       overshoot_scheme(1) = 'exponential'
>
>       overshoot_zone_type(1) = 'any'
>
>       overshoot_zone_loc(1) = 'any'
>
>       overshoot_bdy_loc(1) = 'any'
>
>       overshoot_f(1) = 0.014
>
>       overshoot_f0(1) = 0.004
>
>
> / ! end of controls namelist
>
>
> *AGB inlist*
>
>
> &star_job
>
>
>       load_saved_model = .true.
>
>       load_model_filename = 'end_he_core_burn.mod'
>
>       save_model_when_terminate = .true.
>
>       save_model_filename = 'end_AGB.mod'
>
>       required_termination_code_string = ''
>
>       set_initial_model_number = .true.
>
>       initial_model_number = 0
>
>       pgstar_flag = .true.
>
>
>
> / ! end of star_job namelist
>
>
> &eos
>
>
> / ! end of eos namelist
>
>
> &kap
>
>
> / ! end of kap namelist
>
>
> &controls
>
>       log_directory = 'LOGS_AGB'
>
>
> ! energy conservation
>
>       energy_eqn_option = 'eps_grav'
>
>       use_time_centered_eps_grav = .true.
>
>
> ! when to stop
>
>       envelope_mass_limit = 1e-3
>
>
> ! winds
>
>       max_wind = 1d-2
>
>
> ! solver
>
>       retry_hold = 0
>
>       neg_mass_fraction_hold = 3
>
>
>
> ! mesh
>
>       mesh_delta_coeff = 1.0
>
>
> ! convection & dragging
>
>       num_cells_for_smooth_gradL_composition_term = 0
>
>       drag_coefficient = 1d0
>
>       min_q_for_drag = 0.98d0
>
>       alpha_semiconvection = 0.1
>
>
> ! timesteps
>
>
>       varcontrol_target = 1d-4
>
>       delta_lgL_He_limit = 0.005
>
>       lgL_He_burn_min = 2.0
>
>       dX_nuc_drop_limit = 1d-3
>
>       delta_HR_limit = 0.1
>
>       max_timestep_factor = 1.01d0
>
>
>
>       delta_lgTeff_limit = 0.005
>
>       delta_lgTeff_hard_limit = 0.01
>
>       delta_lgL_limit = 0.02
>
>       delta_lgL_hard_limit = 0.05
>
>
>
> ! output
>
>       num_trace_history_values = 2
>
>       trace_history_value_name(1) = 'rel_E_err'
>
>       trace_history_value_name(2) = 'log_rel_run_E_err'
>
>
>       !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
>
>       !stop_for_bad_nums = .true.
>
>
> / ! end of controls namelist
>
>
>
> _______________________________________________
> mesa-users at lists.mesastar.org
> https://lists.mesastar.org/mailman/listinfo/mesa-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.mesastar.org/pipermail/mesa-users/attachments/20260326/06e0bd34/attachment.htm>


More information about the Mesa-users mailing list