Source code for nnaps.mesa.evolution_errors


import numpy as np

from nnaps.mesa.evolution_phases import _check_history_parameters, HeIgF


[docs]def mass_loss_error(history): """ Check if there is a possible issue with mass loss. This function checks if RLOF is still ongoing when the model stops. For a stable model this would be an indication that something is wrong. Required history parameters: - lg_mstar_dot_1 - lg_wind_mdot_1 :param history: the evolution history of the system. :type history: numpy ndarray :return: True if there is a mass loss error, else False """ required_parameters = ['lg_mstar_dot_1', 'lg_wind_mdot_1'] if not _check_history_parameters(history, required_parameters, evol_phase='ML error', raise_error=False): return False mass_loss = np.log10(10 ** history['lg_mstar_dot_1'] - 10 ** history['lg_wind_mdot_1']) return mass_loss[-1] > -10
[docs]def he_ignition_error(history): """ Check if there are issues with He ignition. The function checks if there is ignition but no actual core He burning, and also if there is a ramp up to ignition, but the ignition itself is unsuccessful. Required history parameters: - age - log_LHe - log_center_T - log_center_Rho :param history: the evolution history of the system. :type history: numpy ndarray :return: True if there is a He ignition error, else False """ required_parameters = ['age', 'log_LHe', 'log_center_T', 'log_center_Rho'] if not _check_history_parameters(history, required_parameters, evol_phase='He ignition error', raise_error=False): return False # Check if there is a ramp-up to He ignition, but no actual ignition. Check the last 2000 points if np.all(history['log_center_T'] < HeIgF(history['log_center_Rho'])) and np.all(history['log_LHe'] < 1): d = history[history['age'] > history[history['log_LHe'] > -50]['age'][0]] if len(d) > 5000: log_LHe = d['log_LHe'][-5000:] log_LHe_avg = np.average(log_LHe) if (log_LHe > log_LHe_avg - 0.5).all() and (log_LHe < log_LHe_avg + 0.5).all() \ and log_LHe_avg > -50 and log_LHe_avg > history['log_LHe'][0]: return True # Check if there is He ignition but no core burning if np.any(history['log_LHe'] > 1) and np.all(history['log_center_T'] < HeIgF(history['log_center_Rho'])): return True return False
[docs]def he_core_burning_error(history): """ Check if there is an issue with He core burning. The function checks if core He burning starts, but never ends before the end of the evolution. Required history parameters: - c_core_mass - log_center_T - log_center_Rho :param history: the evolution history of the system. :type history: numpy ndarray :return: True if there is a He core burning error, else False """ required_parameters = ['c_core_mass', 'log_center_T', 'log_center_Rho'] if not _check_history_parameters(history, required_parameters, evol_phase='He ignition error', raise_error=False): return False if np.any(history['log_center_T'] >= HeIgF(history['log_center_Rho'])) and np.all(history['c_core_mass'] < 0.01): return True else: return False
[docs]def check_error_flags(history, termination_code): """ Check for some possible errors in the model and report them. Errors that are checked and there codes: 1. MESA stopped because of max model number 2. MESA stopped because the accretor is overflowing it's Roche-lobe 3. The mass loss phase doesn't end, to check if mass loss didn't cause mesa to crash: :func:`~nnaps.mesa.evolution_errors.mass_loss_error` 4. Potential problem with He ignition: He ramps up and doesnt ignite, or He ignites but there is no core burning: :func:`~nnaps.mesa.evolution_errors.he_ignition_error` 5. He core burning starts, but there is no formation of a CO core: :func:`~nnaps.mesa.evolution_errors.he_core_burning_error` :param history: the evolution history of the system :type history: numpy ndarray :param termination_code: the termination code of the mesa model :type termination_code: str :return: list of integers with error codes """ error_codes = [] # Check termination_code if termination_code == 'max_model_number': error_codes.append(1) if termination_code == 'accretor_overflow_terminate': error_codes.append(2) # Check Mass loss error if mass_loss_error(history): error_codes.append(3) # Check He ignition error if he_ignition_error(history): error_codes.append(4) # check He core burning errors if he_core_burning_error(history): error_codes.append(5) return error_codes