/// <summary> /// Initializes a new instance of the <see cref="StellarBody"/> class. /// </summary> /// <param name="phy">The Science interface to use.</param> /// <param name="mass">The mass.</param> /// <param name="lum">The lumuminosity.</param> /// <param name="age">The age of the Body.</param> public StellarBody(IScienceAstrophysics phy, Mass mass, Luminosity lum, Duration age) { Science = phy; Parent = null; if (mass.SolarMasses < 0.2 || mass.SolarMasses > 1.5) { mass = Mass.FromSolarMasses(Extensions.RandomNumber(0.7, 1.4)); } if (lum.SolarLuminosities == 0.0) { lum = Science.Astronomy.GetLuminosityFromMass(mass); } StellarType = StellarType.FromLuminosityAndRadius(lum, Length.FromSolarRadiuses(1.0)); //EcosphereRadiusAU = Math.Sqrt(lum); Life = Duration.FromYears365(1.0E10 * (mass.SolarMasses / lum.SolarLuminosities)); if (age.Years365 == double.MaxValue) { Age = Duration.FromYears365(Extensions.RandomNumber(MinSunAge.Years365, Life < MaxSunAge ? Life.Years365 : MaxSunAge.Years365)); } else { Age = age; } Mass = StellarType.Mass; Radius = StellarType.Radius; Luminosity = StellarType.Luminosity; Temperature = StellarType.Temperature; EscapeVelocity = Science.Dynamics.GetEscapeVelocity(Mass, Radius); }
public void TestLuminosityToSpectral() { var st1 = StellarType.FromLuminosityAndRadius(Luminosity.FromSolarLuminosities(0.16378798), Length.FromSolarRadiuses(0.72014487)); Console.WriteLine(st1.ToString()); Console.WriteLine("Mass = " + st1.Mass); Console.WriteLine("Temperature = " + st1.Temperature); Console.WriteLine("Luminosity = " + st1.Luminosity); Console.WriteLine("Radius = " + st1.Radius); var st2 = StellarType.FromString(st1.ToString()); Console.WriteLine(st2.SpectralClass); Console.WriteLine(st2.LuminosityClass); Console.WriteLine(st2.SubType); Console.WriteLine("Mass = " + st2.Mass); Console.WriteLine("Temperature = " + st2.Temperature); Console.WriteLine("Luminosity = " + st2.Luminosity); Console.WriteLine("Radius = " + st2.Radius); Assert.IsTrue(Math.Abs(st2.Temperature.Kelvins - 4327.0) <= 150.0); }