Atmospheric radiative (RT) transfer code comparison studies are carried out to estimate their performance, accuracy and characteristics. These studies are also important for the field of passive remote sensing, where RT codes are used mostly for calculation of look-up tables for satellite data processing algorithms.
In this tutorial, partly based on (Kotchenova et al, 2008), we will illustrate a few differences between individual simulations of MODTRAN and 6SV.
Note: On this page, we will use the MATLAB® notation (and commands) for the operations with the LUT data (e.g., reading files, plotting). However, similar commands can be found in other programing languages (e.g., Python, C/C++, Fortran).
On this page… |
---|
Creating the atmospheric LUTs
In this tutorial we will generate two different LUTs, one using 6SV and another using MODTRAN5, both with the same geometric and atmospheric conditions following the (adapted) work of Kotchenova et al, 2008:
In order to compare the lower spectral resolution from 6SV (2.5 nm) with the higher spectral resolution in MODTRAN5, the MODTRAN5 LUT will be sampled ±1.25 nm around the two central wavelenghts at 15 cm-1 (approx. 0.3 nm at 440 nm) and we will average these two spectral bands.
In addition, accordingly to Kotchenova et al, 2008, the areosol vertical profile used in 6SV follows an exponential function with an scale parameter of 2 km. In order to have compatible simulations, this aerosol vertical profile is included in MODTRAN5 by adding the Boundary layer scale height parameter ( Z= 2 km) in the LUT.
Let's start by creating the MODTRAN LUT pressing the New LUT configuration button .
On the General Configuration step, introduce the file name on the Saved LUT file(s)
text box (e.g., C:\ALG\LUTs_folder\modtranLUT). Secondly, set the user level as advanced to be able to change the aerosol
vertical profile in MODTRAN. We can then select MODTRAN5 in the RTM pop-up menu, and the Transfer Functions
as operation mode. Finally, we choose the Manual (gridded) sampling as our LUT sampling strategy. We can
finally click on the Next button at the bottom-right of the screen to proceed introducing the key atmospheric variables.
We continue by introducing the LUT key input variables and their values as described above. Notice that in order to have the SZA values, these have to be manually introduced. This process should bring the following table of LUT input variables:
On the Sensor Spectral Configuration step, we will create two spectral bands: (1) from 438.75 nm to 441.25 nm and (2) from 668.75 nm to 671.25 nm, both at 15 cm-1 spectral resolution.
On the Advanced configuration we will not modify the default advanced parameter and we will simply click on the Next button, which will make ALG writting the MODTRAN input files (.tp5) and run MODTRAN to generate the output files (.tp7). In the case of MODTRAN, these input/output files will have as name combNrhop5 and combNrhop15, where N is an index between identifying the LUT node combination. A progress bar will show the writing of the MODTRAN input files. After its completion, MODTRAN will then run the simulations for these RTM input files.
We will repeat the same procedure to generate the 6SV LUT with the same input geometric and atmospheric conditions as the MODTRAN LUT. Again in the General Configuration step, introduce the file name on the Saved LUT file(s) text box (e.g., C:\ALG\LUTs_folder\6svLUT). Set the user level as basic, sixSV as the selected RTM, and Transfer Functions as the operation mode. Finally, we choose again the Manual (gridded) sampling as our LUT sampling strategy. We can finally click on the Next button at the bottom-right of the screen to proceed introducing the key atmospheric variables.
As for the MODTRAN LUT, we continue by introducing the LUT key input variables and their values as described above. This process should now bring the following table of LUT input variables:
On the Sensor Spectral Configuration step, we will create two spectral bands at the central wavelenghts of 440 nm and 670 nm at the default 2.5 nm spectral resolution. Notice that each spectral band has the same minimum and maximum values, which will correspond to one single output wavelenght.
Once both RTM simulations have finished (modtranLUT and 6svLUT), we can generate the
atmospheric LUTs from the output RTM files by following the steps shown in the previous tutorials. On the menu bar, press the New LUT generation button
and select the LUT configuration .xml files. ALG will automatically
load the LUT configuration, generating the LUT key input parameters into the LUT header and processing/storing the RTM output files into the LUT output
files (.h5). This process should be repeated independently for the modtranLUT.xml and 6svLUT.xml files.
Intercomparison of MODTRAN5 and 6SV outputs
In this second section, we will compare both RTM following the approach described in Kotchenova et al, 2008.
The first step would consists into generating four datasets of Top-of-Atmosphere (TOA) radiance, for each atmospheric RTM and two values of surface reflectance ρ=0 and ρ=0.4. Let us start by reading the LUT header and output files for both LUTs:
hdr1 = readLUThdr([file1,'.hdr']); hdr2 = readLUThdr([file2,'.hdr']); Y1 = h5read([file1,'.h5'],'/LUTdata'); Y2 = h5read([file2,'.h5'],'/LUTdata');
In the files above, file1 and file2 represent respectively the path and file name of our MODTRAN5 and 6SV LUT files (e.g, C:\ALG\LUTs_folder\modtranLUT).
As it can be read in the LUT header files, MODTRAN LUT, Y1, contains the following atmospheric transfer functions:
They can be extracted taking into account that each of these functions have the same number of wavelengths. So for MODTRAN LUT:
L0 = Y1(1:numel(hdr1.wvl),:); Edir = Y1(numel(hdr1.wvl)+1:2*numel(hdr1.wvl),:); Edif = Y1(2*numel(hdr1.wvl)+1:3*numel(hdr1.wvl),:); S = Y1(3*numel(hdr1.wvl)+1:4*numel(hdr1.wvl),:); Tdir = Y1(4*numel(hdr1.wvl)+1:5*numel(hdr1.wvl),:); Tdif = Y1(5*numel(hdr1.wvl)+1:6*numel(hdr1.wvl),:);
For 6SV LUT (Y2), it contains the following atmospheric transfer functions:
which similarly are extracted as follows:
L0 = Y2(1:numel(hdr2.wvl),:); Tgas = Y2(numel(hdr2.wvl)+1:2*numel(hdr2.wvl),:); Etot = Y2(2*numel(hdr2.wvl)+1:3*numel(hdr2.wvl),:); Ttot = Y2(3*numel(hdr2.wvl)+1:4*numel(hdr2.wvl),:); S = Y2(4*numel(hdr2.wvl)+1:5*numel(hdr2.wvl),:);
Once we have the atmospheric transfer functions, we can propagate the surface reflectance ρ to construct TOA radiance with the following equation (2) for MODTRAN:
$$L = L_0 + {(E_{dir}\cosθ_{il}+E_{dif})·(T_{dir}+T_{dif})·ρ}/{π(1-Sρ)}=L_0 + {E_{tot}·T_{tot}·ρ}/{π(1-Sρ)}$$where θil represents the solar zenith angle, and equation (3) for 6SV:
$$L = L_0 + {T_{gas}·E_{tot}·T_{tot}·ρ}/{π(1-Sρ)}$$As for the surface reflectance, we consider two values ρ=0.05 and ρ=0.4.
For this surface reflectance, let us now construct the TOA radiance for all combinations in our MODTRAN LUT (LTOA_1) and 6SV LUT (LTOA_2):
LTOA_1(:,:,i) = L0 + (1/pi)*((Edir*cosd(hdr1.SZA)+Edif).*(Tdir+Tdif)*rho)./(1-S*rho)); LTOA_2(:,:,i) = L0 + (1/pi)*(bsxfun(@times,(Tgas.*Etot.*Ttot,rho))./(1-S*rho);
where the index i indicates the values of ρ=0.05 (i=1) and ρ=0.4 (i=2).
In order to compare both MODTRAN and 6SV simulations, the MODTRAN higher spectral resolution data needs to be resampled to the same resolution as 6SV. Therefore, we average the data in the two spectral bands 438.75-441.25 nm and 668.75-671.25 nm before proceed to the data analysis.
So now we calculate the following error metric between LTOA_1 and LTOA_2:
$$δ(VZA,AOT,ρ) = {100}/{15}∑↙{SZA}∑↙{RAA}{{|L_{TOA,1}(VZA,AOT,ρ) - L_{TOA,2}(VZA,AOT,ρ)|}/{L_{TOA,2}(VZA,AOT,ρ)}}$$Here, the sum over SZA only takes the values below 75 deg. The result are shown in the following plots respectively for ρ=0.05 and ρ=0.4.
The legend on each plot indicates the pair of values AOT and wavelenght (in nm).
We first observe that these plots are in agreement with those shown in Kotchenova et al, 2008 (Figure 9, page 8). The differences between MODTRAN5 and 6SV can reach up to 25%, particularly at higher values of VZA. These differences are also increasing with at higher values of the AOT and at higher wavelengths (see curves with AOT=0.8 at 670 nm). Altogether, this might indicate that the differences are due to the treatment of the geometric effects in MODTRAN5 and 6SV, particularly the use of different aerosol optical properties in both RTMs but also the neglection of polarization effects in MODTRAN5.
Kotchenova, S. Y., Vermote, E. F., Levy, R., & Lyapustin, A. (2008), "Radiative transfer codes for atmospheric correction and aerosol retrieval: intercomparison study." Applied Optics. Vol. 47, No. 13, pp. 2215‒ 2226.