stellarMagnitude.frink

Download or view stellarMagnitude.frink in plain text format


/** Library to perform calculations with stellar magnitudes.  Stellar
    magnitudes use a logarithmic scale in which a decrease in 5 magnitudes
    corresponds to a increase of 100 in brightness.  This means that a
    decrease of 1 magnitude corresponds to exactly 100^(1/5) (that is, the
    fifth root of 100) or about 2.5118864.
    Smaller numbers are brighter, and the brightest stars have negative
    magnitudes.

    For absolute magnitude system (AB magnitudes,) see:
    https://en.wikipedia.org/wiki/AB_magnitude
*/


/** This returns the ratio by which star 1 is brighter than star 2,
    given their magnitudes. */
    
brightnessRatio[mag1, mag2] := magnitudeDifferenceToRatio[mag1 - mag2]

    
/** Returns the magnitude you have to *subtract* from star 1 to get the
    brightness of star 2.  The brightnesses form a true ratio of brightness. */

magnitudeDifference[brightness1, brightness2] := ratioToMagnitudeDifference[brightness1 / brightness2]

    
/** Given a brightness ratio, this returns the magnitude difference
    between the two stars.  For example, if you pass in the ratio 100, meaning
    100 times brighter, this function returns -5, which is the number you have
    to *add* to the magnitude of the original star to get the magnitude that's
    100 times brighter. */
 
ratioToMagnitudeDifference[ratio] := ln[1/ratio] / ln[100^(1/5)]

    
/** Given a difference in magnitudes, this returns the ratio of their
    brightnesses as star1 / star2.  For example, if you have star1 with
    magnitude of -4, and a dimmer star2 with magnitude of 1, pass in
    (mag1 - mag2) (which is -5) which gives a ratio of 100. */

magnitudeDifferenceToRatio[difference] := (100^(1/5))^-difference

    
/** We can use the sun's irradiance and stated magnitude to allow us to
    calculate the flux-to-magnitude relation.  Given the following magnitude
    (although it's unclear what distance this magnitude was quoted at; the
    earth's orbit is eccentric and the sun's output is variable:)
*/

   
// http://nssdc.gsfc.nasa.gov/planetary/factsheet/sunfact.html
sunMagnitude := -26.74

/** This is the sun's irradiance value at 1 au
      
    See:  http://lasp.colorado.edu/home/sorce/data/tsi-data/
    Unfortunately, the SORCE satellite is not collecting data since 2013-07-30
    due to a battery cell failure.
*/

sunIrradiance := 1361.5 W/m^2

    
/** Calculate the received power flux (that is, power/area) given its apparent
    magnitude (as a dimensionless number.) */

flux[magnitude] := sunIrradiance brightnessRatio[magnitude, sunMagnitude]

    
/** The inverse of the previous calculation.  Given a flux given in power/area,
    calculate the apparent magnitude. */

magnitude[flux is heat_flux_density] := sunMagnitude - magnitudeDifference[sunIrradiance, flux]


/** Calculate the flux at distance2 given the flux (flux1) at distance1. */
flux[flux1, distance1, distance2] := flux1 distance1^2 / distance2^2


/** Calculate the apparent magnitude at distance2 given the magnitude at
    distance1. */

magnitude[mag1, distance1, distance2] := magnitude[flux[flux[mag1], distance1, distance2]]    


/** Calculate the so-called "absolute magnitude" given an apparent magnitude
    and the distance it was measured at.  Absolute magnitude is a magnitude
    measured at a common distance, generally taken to be 10 parsecs.
  
    For example, to calculate the absolute magnitude of the sun, given that
    its apparent magnitude is (sunMagnitude, see above) as seen from earth,
    you could write:
     absoluteMagnitude[sunMagnitude, earthdist]

   which gives an absolute magnitude of about 4.83
*/

absoluteMagnitude[mag1, distance1] := magnitude[mag1, distance1, 10 parsecs]


/** Calculate the total emitted power from a spherically-symmetrically
    radiating object, given the observed flux (that is, power/area) at the
    specified distance.
    (This just sums the flux over the surface of a sphere at the specified
    distance.)
*/

totalEmittedPowerFromFlux[flux is heat_flux_density, distance] := flux 4 pi distance^2


/** Estimate the total emitted power from a spherically-symmetrically
    radiating object, given the apparent magnitude at the specified distance.
*/

totalEmittedPowerFromMagnitude[magnitude, distance] := totalEmittedPowerFromFlux[flux[magnitude], distance]

    
/** Calculate the flux (that is, power/area) at a given distance emitted by a
    spherically-symmetrically radiating object, given its total power.
    (This just divides the total power over the surface of a sphere at the
    specified distance.)
*/

fluxFromTotalEmittedPower[power is power, distance] := power / (4 pi distance^2)


/** Calculate the apparent magnitude at a given distance emitted by a
    spherically-symmetrically radiating object, given its total power. */

magnitudeFromTotalEmittedPower[power is power, distance] := magnitude[fluxFromTotalEmittedPower[power, distance]]


/** Calculate the energy of a photon given one of either:

    wavelength
    frequency
    energy

    In the following equation, as in physics, h is Planck's constant and
    c is the speed of light.
*/

photonEnergy[x] :=
{
   if x conforms frequency     // given frequency
      return h x
   
   if x conforms length        // given wavelength
      return h (c / x)

   if x conforms energy        // given energy
      return x

   return "photonEnergy:  No energy known for $x"
}

/** Calculate the frequency of a photon given one of either:

    wavelength
    frequency
    energy

    In the following equation, as in physics, h is Planck's constant and
    c is the speed of light.
*/

photonFrequency[x] :=
{
   if x conforms frequency     // given frequency
      return x
   
   if x conforms length        // given wavelength
      return (c / x)

   if x conforms energy        // given energy
      return x / h

   return "photonFrequency:  No frequency known for $x"
}
   
/** Calculate the wavelength of a photon given one of either:

    wavelength
    frequency
    energy

    In the following equation, as in physics, h is Planck's constant and
    c is the speed of light.
*/

photonWavelength[x] :=
{
   if x conforms frequency     // given frequency
      return c / x
   
   if x conforms length        // given wavelength
      return x

   if x conforms energy        // given energy
      return c h / x

   return "photonWavelength:  No wavelength known for $x"
}

/** Roughly calculate a stellar lifetime given its mass.   See:
    http://hyperphysics.phy-astr.gsu.edu/hbase/Astro/startime.html
*/

stellarLifetime[m0 is mass] :=
{
   return 10^10 years (sunmass/m0)^2.5
}

/** Roughly calculate a stellar luminosity (that is, the total power radiated)
    given its mass.   See:
    http://hyperphysics.phy-astr.gsu.edu/hbase/Astro/startime.html
    http://hyperphysics.phy-astr.gsu.edu/hbase/Astro/herrus.html#c3
*/

stellarLuminosity[m0 is mass] :=
{
   return sunpower (m0 / sunmass)^3.5
}

"stellarMagnitude.frink included OK"


Download or view stellarMagnitude.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 19945 days, 11 hours, 56 minutes ago.