/usr/share/gnudatalanguage/astrolib/planck.pro is in gdl-astrolib 2018.02.16+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | function planck,wave,temp
;+
; NAME:
; PLANCK()
; PURPOSE:
; To calculate the Planck function in units of ergs/cm2/s/A
;
; CALLING SEQUENCE:
; bbflux = PLANCK( wave, temp)
;
; INPUT PARAMETERS:
; WAVE Scalar or vector giving the wavelength(s) in **Angstroms**
; at which the Planck function is to be evaluated.
; TEMP Scalar giving the temperature of the planck function in degree K
;
; OUTPUT PARAMETERS:
; BBFLUX - Scalar or vector giving the blackbody flux (i.e. !pi*Intensity)
; in erg/cm^2/s/A in at the specified wavelength points.
;
; EXAMPLES:
; To calculate the blackbody flux at 30,000 K every 100 Angstroms between
; 2000A and 2900 A
;
; IDL> wave = 2000 + findgen(10)*100
; IDL> bbflux = planck(wave,30000)
;
; If a star with a blackbody spectrum has a radius R, and distance,d, then
; the flux at Earth in erg/cm^2/s/A will be bbflux*R^2/d^2
; PROCEDURE:
; The wavelength data are converted to cm, and the Planck function
; is calculated for each wavelength point. See Allen (1973), Astrophysical
; Quantities, section 44 for more information.
;
; NOTES:
; See the procedure planck_radiance.pro in
; ftp://origin.ssec.wisc.edu/pub/paulv/idl/Radiance/planck_radiance.pro
; for computation of Planck radiance given wavenumber in cm-1 or
; wavelength in microns
; MODIFICATION HISTORY:
; Adapted from the IUE RDAF August, 1989
; Converted to IDL V5.0 W. Landsman September 1997
; Improve precision of constants W. Landsman January 2002
;-
On_error,2
if ( N_elements(wave) LT 1 ) then begin
print,'Syntax - bbflux = planck( wave, temp)'
return,0
endif
if ( N_elements( temp ) NE 1 ) then $
read,'Enter a blackbody temperature', temp
bbflux = wave*0.
; Gives the blackbody flux (i.e. PI*Intensity) ergs/cm2/s/a
w = wave / 1.E8 ; Angstroms to cm
;constants appropriate to cgs units.
c1 = 3.7417749d-5 ; =2*!DPI*h*c*c
C2 = 1.4387687d ; =h*c/k
val = c2/w/temp
mstr = machar(double = (size(val,/type) EQ 5) ) ;Get machine precision
good = where( val LT alog(mstr.xmax), Ngood ) ;Avoid floating underflow
if ( Ngood GT 0 ) then $
bbflux[ good ] = C1 / ( w[good]^5 * ( exp( val[good])-1. ) )
return, bbflux*1.E-8 ; Convert to ergs/cm2/s/A
end
|