Lab 6 - Transmission of Solar Radiation
 

Radiation objective: Contemplate some of the uses of measurements of the solar flux at the surface.

MATLAB objective: Using a tool to perform sensitivity studies. (no need for any new commands - I don't think)
 

Solartrans.m computes the transmittance and direct beam solar spectral flux at the surface.  It does not include Rayliegh extinction.  You need to add this to the file.  That's part I of the homework, calculate and plot the solar beam spectral flux at the surface for solar zenith angles of 30 and 60 degrees, for an ozone amount of 0.4 cm and water vapor amounts of 3 cm. Assume a surface pressure of 1013 mb.

Ans.
You needed to use the appropriate equation for the Rayliegh extinction coefficient given in the notes.  You should have learned that as the solar zenith angle increases, the amount of direct beam radiation at the surface decreases since the path length increases.  The decrease in flux is enhanced when normalized to a horizontal surface.

For Part II, you can use this program or, if you deem it appropriate, write another more efficient script.  Here's the problem.  You want to estimate the total amount of water vapor (in cm) in the atmosphere by measuring the direct solar beam flux at the surface.  Your mission is to select a wavelength at which to make these measurements.  You must support your selection (there are a number of correct answers) using calculations and any other material you feel is relevant to the problem.  (Hint: what you know - the top of atmosphere spectral flux and once the instrument is built, you will also have the measured surface spectral flux at the surface.  What you need is a good relationship between these two known parameters and U, the parameter you want.)

Ans.

First think to do is find some wavelengths for which transmittance is sensitive to changes in water vapor amount.  So I wrote a script to plot the following (note in the script I could select any 4 wavelengths).  The stronger absorption lines are not very sensitive to change in large water paths, though they may be useful in polar regions where the water concentrations is small.  The spectral regions near 0.95 and 1.15 microns have good sensitivity for a broad amount of atmospheric water vapor.

Of course, there is more gases in the atmosphere than water vapor.  So at some wavelengths, absorption by other gases could result in errors.  To investigate this I plotted the error in a retrieved water vapor amount as a function of wavelength.  The matlab file to calculate this error is attached at the end.  Notice, the retrieved amount is determined by allowing absorption by all gases as well as Rayliegh scattering.  This was computed using two water vapor amounts, 4.0 cm (blue line) and 0.4 cm (red line).  The results are  depicted in the following figure.

So, based on analysis of these to figures I would pick a wavelength of about 0.95 microns.  This wavelength is sensitive to the amount of water vapor in the atmosphere, and the retrieval error is small (due primarily to the effects of Rayliegh scattering).
 
 



Script for plot 1

%
% This routine computes and plots spectral transmittance as a function of water vapor amount
% It is not normalized to a horizontal surface and includes on h2o vapor.
% It uses the parameterizations listed in the class notes.
%
%
% Written by S. Ackerman April 1, 1998
%

load sunspec.out                % load data

wavelength=sunspec(:,1);        % wavelength in microns

solar_toa=sunspec(:,2);         % top-of-atmosphere solar spectral flux

o3coef=sunspec(:,3);            % ozone absorption coefficient

mixcoef=sunspec(:,4);           % CO2, O2 absorption coefficient

h2ocoef=sunspec(:,5);           % water vapor coefficient

o3amount=0.3;                   % set ozone amount (cm)

h2oamount=.2:.1:6.0;                  % set water vapor amount (cm)

solar_zenith=30.;               % set solar zenith angel in degrees

pressure=1013.;                 % set pressure at surface

rad_per_degree=pi/180.;          % radians per degree

cossolar=cos(solar_zenith*rad_per_degree);

mr=(cossolar+0.15*(93.885-solar_zenith)^-1.253)^-1;

ma=mr*pressure/1013.;

hold;
 

for j=1:152;
for i=1:59
h2otrans(j,i)=exp(-(0.2385*h2ocoef(j).*h2oamount(i).*mr./(1+20.07*h2ocoef(j)*mr).^0.45));
end
end
for i=1:59
%   .95 micron
h2owave1(i)=h2otrans(105,i);
%  1.15 micron
h2owave2(i)=h2otrans(115,i);
%1.4 micron
h2owave3(i)=h2otrans(120,i);
% 2.5 micron
h2owave4(i)=h2otrans(137,i);
end
 
plot(h2oamount,h2owave1,h2oamount,h2owave2,h2oamount,h2owave3,h2oamount,h2owave4);

xlabel('Water Vapor Amount (cm)');
ylabel('Spectral Transmittance');
legend ('0.95 \mum','1.15 \mum','1.4 \mum','2.5 \mum');
 
 



Script for plot 2.
%
% This routine computes errors in retrieve water vapor amount
% as a funciton of wavelength.  It is not normalized to a horizontal
% suface.  It uses the parameterizations listed in the class notes.
%
%
% Written by S. Ackerman April 15, 1998
%

load sunspec.out                % load data

wavelength=sunspec(:,1);        % wavelength in microns

solar_toa=sunspec(:,2);         % top-of-atmosphere solar spectral flux

o3coef=sunspec(:,3);            % ozone absorption coefficient

mixcoef=sunspec(:,4);           % CO2, O2 absorption coefficient

h2ocoef=sunspec(:,5);           % water vapor coefficient

o3amount=0.3;                   % set ozone amount (cm)

h2oamount=4.0;                  % set water vapor amount (cm)
h2oamount2=0.4;
solar_zenith=30.;               % set solar zenith angel in degrees

pressure=1013.;                 % set pressure at surface

rad_per_degree=pi/180.;          % radians per degree

cossolar=cos(solar_zenith*rad_per_degree);

mr=(cossolar+0.15*(93.885-solar_zenith)^-1.253)^-1;

ma=mr*pressure/1013.;
Raycoef=0.008735.*(wavelength.^-4);      % Rayleigh coefficient

hold;

Raytrans=exp(-Raycoef.*ma);

o3trans=exp(-o3amount*o3coef/cossolar);

uniformtrans=exp(-1.41*mixcoef*ma./(1+118.93*mixcoef*ma).^0.45);
 

h2otrans=exp(-(0.2385*h2oamount*h2ocoef*mr./(1+20.07*h2ocoef*mr).^0.45));
h2otrans2=exp(-(0.2385*h2oamount2*h2ocoef*mr./(1+20.07*h2ocoef*mr).^0.45));
 
 

total_transmittance = uniformtrans.*o3trans.*h2otrans.*Raytrans
total_transmittance2 = uniformtrans.*o3trans.*h2otrans2.*Raytrans

if total_transmittance <= 0.00001
   Uassumed=0
   else
Uassumed=(-(1+20.07*h2ocoef*mr).^0.45)./(.2385*h2ocoef*mr).*log(total_transmittance);
 end
error=100.*(Uassumed-h2oamount)/h2oamount
if total_transmittance2 <= 0.00001
   Uassumed2=0
   else
Uassumed2=(-(1+20.07*h2ocoef*mr).^0.45)./(.2385*h2ocoef*mr).*log(total_transmittance2);
 end
error=100.*(Uassumed-h2oamount)/h2oamount
error2=100.*(Uassumed2-h2oamount2)/h2oamount2

plot(wavelength,error,wavelength,error2,'red');

axis([0.2 3.6 0 100]);
xlabel('Wavelength (\mum)');
ylabel('Percent error in Retrieval' );
legend ('U=4 cm','U=.4 cm');
% print to clipboard via -> print -dbitmap -f1 (then get from clip board)