Beispiel #1
0
	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.
Beispiel #2
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.