10 '                 Suntan Program
20 '
30 GOSUB 920: ' Initialize data arrays
40 '
50 INPUT "Latitude in degrees";L:   LA=L/57.296
60 INPUT "Month (1-12)";M
70 INPUT "Hours from local noon";T:  T=ABS(T)
80 DS=.408*SIN(.523*(M-3.7)): ' Decl. of Sun (radians)
90 HA=.262*T: '            Hour angle of Sun (radians)
100 CZ=SIN(LA)*SIN(DS)+COS(LA)*COS(DS)*COS(HA)
110   IF CZ<=0 THEN 70
120 ZS=ATN(SQR(1-CZ*CZ)/CZ): '  Sun's zenith dist. (rad)
130 '
140 '   OPTION -- These two lines could replace 50-120:
150 '        INPUT "Altitude of Sun (deg)";AL
160 '        ZS=(90-AL)/57.296
170 '
180 INPUT "Height above sea level (feet)";HH:  H=HH/3280
190 INPUT "Aerosol extinction (V mag/airmass)";KK
200 BE=KK/2.36
210 INPUT "Surface albedo (%)";S1: SA=S1/100
220 '
230 '         Other adjustable parameters
240 '
250 ET=3600: ' Exposure time (seconds)
260 ZP=ZS: '   Angle (rad), zenith to surface normal
270 SS=0: '    Angle (rad), Sun to surface normal
280 TW=1: '    UV frac. transmitted by window, lotion...
290 F1=1: '    Fraction of sky that is clear
300 F2=1: '    Fraction of ground in sunlight
310 SH=1: '    Is Sun being shaded? (no=1, yes=0)
320 N=1: '     Normalization for skin type
330 RE=6378: ' Earth radius (km)
340 OL=0: '    Ozone loss (%)
350 HO=23: '   Height of ozone layer (km)
360 HG=8.2: '  Gas scale height (km)
370 HA=1.5: '  Aerosol scale height (km)
380 DS=1: '    Distance from Sun (a.u.)
390 '
400 '      Thickness of ozone layer
410 '
420 RA=30*(M-3.7)/57.296
430 DOSE=(1-OL/100)*(3+.4*(LA*COS(RA)-COS(3*LA)))
440 ' 
450 '      Airmass for each component
460 '
470 XO=(1-(SIN(ZS)/(1+((HO-H)/RE)))^2)^(-.5)
480 XG=1/(COS(ZS)+.01*SQR(HG)*EXP(-30*COS(ZS)/SQR(HG)))
490 XA=1/(COS(ZS)+.01*SQR(HA)*EXP(-30*COS(ZS)/SQR(HA)))
500 '
510 '      Do for each wavelength
520 '
530 PRINT "Wavelength   Ozone    Air    Action   Dose"
540 PRINT "(angstroms)  trans.  trans.  spectr.      "
550 ED=0
560 FOR J=1 TO 20
570 W=.275+J*.005: '  Wavelength (microns)
580 '
590 '      Brightness of sunlight, diffuse sky light,
600 '                  and ground light
610 KO=OZ(J)*(DOSE/3)
620 KG=.0107*EXP(-H/HG)*(W^(-4))
630 KA=BE*(W^(-1.3))
640 OT=10^(-.4*(KO*XO))
650 TA=10^(-.4*(KG*XG+KA*XA))
660 D=.5*(COS(ZS)^.33)
670 IS=FS(J)*OT*TA*TW*SH*COS(SS)*(DS^(-2))
680 ID=FS(J)*OT*(1-TA)*D
690 ID=FS(J)*OT*(1-TA)*D*TA*SA+ID
700 ID=FS(J)*OT*((1-TA)^2)*SA*(D^2)+ID
710 ID=ID*TW*F1*(COS(ZS/2)^2)*(DS^(-2))
720 IG=FS(J)*OT*SA*(TA+D*(1-TA))
730 IG=IG*TW*F2*(SIN(ZS/2)^2)*(DS^(-2))
740 I=IS+ID+IG: ' Total flux on skin (erg/cm^2/sec/A)
750 '
760 '  Find effective dose by numerical integration
770 '      The "minimum erythema dose" at 2900A
780 '      is 2.3E6 erg/cm^2 (Parrish)
790 '
800 EF=I*ET*(AX(J)*N)*50/2.3E6
810 ED=ED+EF
820 PRINT USING F1$;W*10000;OT;TA;AX(J);EF
830 NEXT J
840 ' 
850 '             Report result
860 '
870 PRINT
880 PRINT USING "Total effective dose: ##.###";ED
890 PRINT USING "   (exposure time ##.## hr)";ET/3600
895 PRINT USING "Burning starts after ##.## hr";ET/(3600*ED)
899 '
900 END
910 '
920 '             Set up data arrays
930 '
940 F1$=   "  #####    ##.#### ##.####   ##.##   ##.###"
950 DIM OZ(20),FS(20),AX(20)
960 FOR J=1 TO 20: READ OZ(J): NEXT J
970 FOR J=1 TO 20: READ FS(J): NEXT J
980 FOR J=1 TO 20: READ AX(J): NEXT J
990 RETURN
1000 '
1010 '         OZ array (ozone effect)
1020 DATA 34, 25, 18, 9, 3.2, 1.8, .9, .46, .24, .17
1030 DATA .06, .05, .02, .01, .002, .001, 0, 0, 0, 0
1040 '
1050 '  FS array (solar flux at 1 A.U. in erg/cm^2/sec/A)
1060 DATA 24, 31, 38, 45, 52, 58, 64, 70, 75, 79
1070 DATA 83, 87, 91, 93, 95, 97, 99, 104, 107, 104
1080 '
1090 '  AX array (action spectrum, McKinley & Diffey)
1100 DATA 1, 1, 1, 1, .65, .22, .074, .025, .0086, .003
1110 DATA .0014, .0012, .00097, .00081, .00068, .00057
1120 DATA .00048, .0004, .00034, .00029
1200 '
1210 '   Bradley E. Schaefer's program takes into account many factors,
1220 '   including the ozone content of the atmosphere, and calculates
1230 '   the risk of getting a sunburn at any month of the year, at any
1240 '   hour of the day, and at any latitude on Earth. He explained how
1250 '   to interpret the results in the July 1993 issue of Sky & Telescope,
1260 '   page 83.
