def __init__(self, mass, S_want, magprofile=False, omega=0., L_want=0., temp_c=False, mintemp=1e5, composition="CO", togglecoulomb=True, S_old=False, mlt_coeff="phil", P_end_ratio=1e-8, ps_eostol=1e-8, fakeouterpoint=False, stop_invertererr=True, stop_mrat=2., stop_positivepgrad=True, stop_mindenserr=1e-10, densest=False, omegaest=False, mass_tol=1e-6, L_tol=1e-6, omega_crit_tol=1e-3, nreps=30, stopcount_max=5, dontintegrate=False, verbose=True): # Stop doing whatever if user inserts rotation and B field if magprofile and omega != 0.: print "You cannot currently insert a magnetic field simultaneously with non-zero rotation! Quitting." return maghydrostar_core.__init__(self, mass, temp_c, magprofile=magprofile, omega=omega, L_want=L_want, mintemp=mintemp, composition=composition, togglecoulomb=togglecoulomb, fakeouterpoint=fakeouterpoint, stop_invertererr=stop_invertererr, stop_mrat=stop_mrat, stop_positivepgrad=stop_positivepgrad, stop_mindenserr=stop_mindenserr, mass_tol=mass_tol, L_tol=L_tol, omega_crit_tol=omega_crit_tol, nreps=nreps, stopcount_max=stopcount_max, verbose=verbose) self.nablarat_crit = False # This should only be used for debugging! # Initialize nuclear specific energy generation rate td = rtc.timescale_data(max_axes=[1e12,1e12]) self.eps_nuc_interp = td.getinterp2d("eps_nuc") if S_old: self.populateS_old(S_old) if verbose: print "S_old defined! Will use old entropy profile if new one dips below it." else: self.S_old = False self.S_old_reltol = 1e-6 # Relative tolerance to shoot for in connect_S_old self.derivatives = self.derivatives_steve self.first_deriv = self.first_derivatives_steve self.mlt_coeff = mlt_coeff # Derivative and getconvection will need this for scaled Stevenson self.set_mlt_coeff(self.mlt_coeff) if self.verbose: # self.verbose is implicitly defined in maghydrostar print "Stevenson 79 derivative selected! MLT coefficient = {0:s}".format(mlt_coeff) if dontintegrate: if self.verbose: print "WARNING: integration disabled within mhs_steve!" else: if self.omega < 0.: self.omega = 0. self.getmaxomega(P_end_ratio=P_end_ratio, densest=densest, S_want=S_want, ps_eostol=ps_eostol) else: if L_want: self.getrotatingstarmodel_2d(densest=densest, omegaest=omegaest, S_want=S_want, P_end_ratio=P_end_ratio, ps_eostol=ps_eostol, damp_nrstep=0.25) else: self.getstarmodel(densest=densest, S_want=S_want, P_end_ratio=P_end_ratio, ps_eostol=ps_eostol) # Checks omega, just to make sure user didn't initialze a "dontintegrate" but set omega < 0 assert self.omega >= 0.
def __init__(self, mass, temp_c, magprofile=False, omega=0., L_want=0., S_want=False, mintemp=1e5, composition="CO", togglecoulomb=True, simd_userot=True, simd_usegammavar=False, simd_usegrav=False, simd_suppress=False, P_end_ratio=1e-8, ps_eostol=1e-8, fakeouterpoint=False, stop_invertererr=True, stop_mrat=2., stop_positivepgrad=True, stop_mindenserr=1e-10, densest=False, omegaest=False, mass_tol=1e-6, L_tol=1e-6, omega_crit_tol=1e-3, nreps=30, stopcount_max=5, dontintegrate=False, verbose=True): maghydrostar_core.__init__(self, mass, temp_c, magprofile=magprofile, omega=omega, L_want=L_want, mintemp=mintemp, composition=composition, togglecoulomb=togglecoulomb, fakeouterpoint=fakeouterpoint, stop_invertererr=stop_invertererr, stop_mrat=stop_mrat, stop_positivepgrad=stop_positivepgrad, stop_mindenserr=stop_mindenserr, mass_tol=mass_tol, L_tol=L_tol, omega_crit_tol=omega_crit_tol, nreps=nreps, stopcount_max=stopcount_max, verbose=verbose) # Set up derivative functions self.simd_userot = simd_userot self.simd_usegammavar = simd_usegammavar self.simd_usegrav = simd_usegrav self.simd_suppress = simd_suppress self.nablarat_crit = False # This should only be used for debugging! if self.simd_usegammavar and self.verbose: print "VARIABLE GAMMA TERM included in nabla deviation!" if self.simd_usegrav and self.verbose: print "GRAVITY TERM included in nabla deviation!" if self.simd_userot and self.verbose: print "ROTATION TERM included in nabla deviation!" if self.simd_suppress and self.verbose: print "WARNING - YOU'LL BE SUPPRESSING nabla DEVIATIONS IN THE FIRST MASS STEP! I HOPE YOU HAVE A GOOD REASON!" # derivatives_gtsh now handles both constant deviation and user-defined magnetic profile. self.derivatives = self.derivatives_gtsh self.first_deriv = self.first_derivatives_gtsh if self.verbose: print "GT66/MM09 derivative selected!" if dontintegrate: if self.verbose: print "WARNING: integration disabled within maghydrostar!" else: if self.omega < 0.: self.omega = 0. self.getmaxomega(P_end_ratio=P_end_ratio, densest=densest, S_want=S_want, ps_eostol=ps_eostol) else: if L_want: self.getrotatingstarmodel_2d(densest=densest, omegaest=omegaest, S_want=S_want, P_end_ratio=P_end_ratio, ps_eostol=ps_eostol, damp_nrstep=0.25) else: self.getstarmodel(densest=densest, S_want=S_want, P_end_ratio=P_end_ratio, ps_eostol=ps_eostol) # Checks omega, just to make sure user didn't initialze a "dontintegrate" but set omega < 0 assert self.omega >= 0.