1 | function lbb,lambda,t |
---|
2 | |
---|
3 | ; black body radiance (W/m2/sr/um) at monochromatic wavelength lambda (m) and |
---|
4 | ; temperature T (K) |
---|
5 | |
---|
6 | check=check_math() |
---|
7 | if (check and not 32) ne 0 then stop |
---|
8 | ;c1=3.741775e-22 |
---|
9 | c2=.0143877 |
---|
10 | ln_c1_over_pi=-50.48204 |
---|
11 | lbb=c2/(lambda*t) ; actually exponent |
---|
12 | over=where(lbb gt 88.8) ; check for overflow |
---|
13 | w=where(lbb le 88.8) |
---|
14 | if over[0] ge 0 then lbb[over]=!values.f_infinity |
---|
15 | if w[0] ge 0 then lbb[w]=exp(lbb[w])-1. |
---|
16 | under=where(lbb lt 1e-45) ; check for underflow |
---|
17 | w=where(lbb ge 1e-45) |
---|
18 | if under[0] ge 0 then lbb[under]=!values.f_infinity ; now ln(lbb) |
---|
19 | if w[0] ge 0 then lbb[w]=ln_c1_over_pi-5.*alog(lambda)-alog(lbb[w]) |
---|
20 | under=where(lbb lt -87.3) ; check for underflow |
---|
21 | over=where(lbb gt 88.8) ; check for overflow |
---|
22 | w=where(lbb ge -87.3 and lbb le 88.8) |
---|
23 | if under[0] ge 0 then lbb[under]=0. |
---|
24 | if over[0] ge 0 then lbb[over]=!values.f_infinity |
---|
25 | if w[0] ge 0 then lbb[w]=exp(lbb[w]) |
---|
26 | return,lbb |
---|
27 | |
---|
28 | end |
---|