rtsos 1.1.0rc1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rtsos-1.1.0rc1/.gitignore +5 -0
- rtsos-1.1.0rc1/CMakeLists.txt +41 -0
- rtsos-1.1.0rc1/Documentation/Describtion_of_input_files/SOS_io.pdf +0 -0
- rtsos-1.1.0rc1/Documentation/Describtion_of_input_files/SOS_io.tex +271 -0
- rtsos-1.1.0rc1/LICENSE +40 -0
- rtsos-1.1.0rc1/PKG-INFO +43 -0
- rtsos-1.1.0rc1/README-temp.md +22 -0
- rtsos-1.1.0rc1/README.md +212 -0
- rtsos-1.1.0rc1/compile/Makefile +80 -0
- rtsos-1.1.0rc1/compile/makefile_GSFC_AC_LUT +79 -0
- rtsos-1.1.0rc1/compile/makefile_PACE_Simulator_DoubleK +143 -0
- rtsos-1.1.0rc1/compile/makefile_aerosol_phmx_cal +51 -0
- rtsos-1.1.0rc1/pyproject.toml +56 -0
- rtsos-1.1.0rc1/src/CMakeLists.txt +63 -0
- rtsos-1.1.0rc1/src/ac_aerosols_lut/main_GSFC_AC_LUT.f90 +2841 -0
- rtsos-1.1.0rc1/src/aerosol_phasematrix_preparation/CMakeLists.txt +8 -0
- rtsos-1.1.0rc1/src/aerosol_phasematrix_preparation/Mie_PHMX_Cal.f90 +2344 -0
- rtsos-1.1.0rc1/src/aerosol_phasematrix_preparation/main_aerosol_phmx_cal.f90 +1031 -0
- rtsos-1.1.0rc1/src/aerosol_phasematrix_preparation/read_dust_data.f90 +697 -0
- rtsos-1.1.0rc1/src/core/Atmosphere_Profile.f90 +364 -0
- rtsos-1.1.0rc1/src/core/CMakeLists.txt +26 -0
- rtsos-1.1.0rc1/src/core/Gas_Absorption_CS_Readin.f90 +1421 -0
- rtsos-1.1.0rc1/src/core/RossLiBRDF.f90 +296 -0
- rtsos-1.1.0rc1/src/core/Save_Ocean_Rad.f90 +650 -0
- rtsos-1.1.0rc1/src/core/SnowBRDF.f90 +372 -0
- rtsos-1.1.0rc1/src/core/WV_LBL_GRID.f90 +58 -0
- rtsos-1.1.0rc1/src/core/aerosol_microphysical_model.f90 +893 -0
- rtsos-1.1.0rc1/src/core/bessel.f +4960 -0
- rtsos-1.1.0rc1/src/core/bfit.f90 +776 -0
- rtsos-1.1.0rc1/src/core/deltafit.f90 +323 -0
- rtsos-1.1.0rc1/src/core/emis_sea.f90 +348 -0
- rtsos-1.1.0rc1/src/core/hdf5_utils.f90 +267 -0
- rtsos-1.1.0rc1/src/core/mathlib.f90 +785 -0
- rtsos-1.1.0rc1/src/core/refwat1.f +1289 -0
- rtsos-1.1.0rc1/src/core/rt_single_scattering.f90 +706 -0
- rtsos-1.1.0rc1/src/core/rtsos_rao_dg.f90 +9565 -0
- rtsos-1.1.0rc1/src/core/rtspecfunc.f90 +2594 -0
- rtsos-1.1.0rc1/src/core/rttype_sos_rao_dg.f90 +614 -0
- rtsos-1.1.0rc1/src/core/spher.f +1022 -0
- rtsos-1.1.0rc1/src/core/surface_glint.f90 +39 -0
- rtsos-1.1.0rc1/src/main_program_monochromatic/main.f90 +388 -0
- rtsos-1.1.0rc1/src/pace_simulator/CMakeLists.txt +9 -0
- rtsos-1.1.0rc1/src/pace_simulator/MAP_Instrument.f90 +20 -0
- rtsos-1.1.0rc1/src/pace_simulator/PACE_Instrument.f90 +431 -0
- rtsos-1.1.0rc1/src/pace_simulator/PACE_MIE_PHMX_Init.f90 +1011 -0
- rtsos-1.1.0rc1/src/pace_simulator/main_PACE_Simulator_DoubleK.f90 +5458 -0
- rtsos-1.1.0rc1/src/rtsos/.gitignore +1 -0
- rtsos-1.1.0rc1/src/rtsos/__init__.py +0 -0
- rtsos-1.1.0rc1/src/rtsos/_version.py +24 -0
- rtsos-1.1.0rc1/src/rtsos/core.py +297 -0
- rtsos-1.1.0rc1/src/rtsos/parameters.py +911 -0
- rtsos-1.1.0rc1/src/rtsos/rt_AC_LUT.py +157 -0
- rtsos-1.1.0rc1/src/rtsos/rt_PACE.py +94 -0
- rtsos-1.1.0rc1/src/rtsos/rt_PHMX.py +157 -0
- rtsos-1.1.0rc1/src/rtsos/tests/.gitignore +3 -0
- rtsos-1.1.0rc1/src/rtsos/tests/.pytest.toml +0 -0
- rtsos-1.1.0rc1/src/rtsos/tests/conftest.py +31 -0
- rtsos-1.1.0rc1/src/rtsos/tests/test_AC_LUT.py +130 -0
- rtsos-1.1.0rc1/src/rtsos/tests/test_PACE.py +142 -0
- rtsos-1.1.0rc1/src/rtsos/tests/test_PHMX.py +11 -0
- rtsos-1.1.0rc1/test/PACE_Simulator/python_script/Aerosol_PhaseMatrix_Cal_InputPre.py +243 -0
- rtsos-1.1.0rc1/test/PACE_Simulator/python_script/pace_simulator_twolayer_inputfile_land.py +252 -0
- rtsos-1.1.0rc1/test/PACE_Simulator/python_script/pace_simulator_twolayer_inputfile_ocean.py +233 -0
- rtsos-1.1.0rc1/test/PACE_Simulator/python_script/synthetic_Holton_sequence_inputfiles.py +241 -0
- rtsos-1.1.0rc1/test/monochromatic/RayDepol0.pmtx +722 -0
- rtsos-1.1.0rc1/test/monochromatic/auxiliary_directory +3 -0
- rtsos-1.1.0rc1/test/monochromatic/sosi.amu +50 -0
- rtsos-1.1.0rc1/test/monochromatic/sosi.example +58 -0
- rtsos-1.1.0rc1/test/monochromatic/sosi.lamb +60 -0
- rtsos-1.1.0rc1/test/monochromatic/sosi.pBRDF.lamb +51 -0
- rtsos-1.1.0rc1/test/monochromatic/sosi.snow +49 -0
- rtsos-1.1.0rc1/test/monochromatic/vSOS.lamb +204 -0
- rtsos-1.1.0rc1/test/monochromatic/vSOS.pBRDF_lamb +204 -0
- rtsos-1.1.0rc1/test/monochromatic/vSOS.snow +204 -0
- rtsos-1.1.0rc1/test/monochromatic/vSOS_example +398 -0
- rtsos-1.1.0rc1/uv.lock +578 -0
- rtsos-1.1.0rc1/validation/benchmark/Coulson_thick/Mol_Comp_vsCoul.xls +0 -0
- rtsos-1.1.0rc1/validation/benchmark/Coulson_thick/auxiliary_directory +1 -0
- rtsos-1.1.0rc1/validation/benchmark/Coulson_thick/ray.pmtx +1449 -0
- rtsos-1.1.0rc1/validation/benchmark/Coulson_thick/sos_verified +928 -0
- rtsos-1.1.0rc1/validation/benchmark/Coulson_thick/sosi.amu +118 -0
- rtsos-1.1.0rc1/validation/benchmark/Coulson_thick/sosi.dat +41 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/Kok_data/SCIATRAN_BENCHMARK_RESULTS/Rayleigh_refl_N_60.dat +90 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/Kok_data/SCIATRAN_BENCHMARK_RESULTS/Rayleigh_trans_N_60.dat +90 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/Kok_data/SCIATRAN_BENCHMARK_RESULTS/aerosol_refl_N_240.dat +90 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/Kok_data/SCIATRAN_BENCHMARK_RESULTS/aerosol_trans_N_240.txt +90 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/Kok_data/SCIATRAN_BENCHMARK_RESULTS/cloud_refl_N_360.dat +90 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/Kok_data/SCIATRAN_BENCHMARK_RESULTS/cloud_trans_N_360.dat +90 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/MC_AEROSOL_BOA +1102 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/MC_AEROSOL_TOA +1101 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/auxiliary_directory +2 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/lognormalAA0p3BB0p8464.pmtx +1449 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/radplot_Kok.m +387 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/sosi.amu +188 -0
- rtsos-1.1.0rc1/validation/benchmark/Kokhanovsky_case/no_Ocean/sosi.dat +65 -0
- rtsos-1.1.0rc1/validation/benchmark/flat_ocean_Ray_MC/Atmos_OI_O/MCRAY_W0_wO_BOA +145 -0
- rtsos-1.1.0rc1/validation/benchmark/flat_ocean_Ray_MC/Atmos_OI_O/MCRAY_W0_wO_BOO +145 -0
- rtsos-1.1.0rc1/validation/benchmark/flat_ocean_Ray_MC/Atmos_OI_O/MCRAY_W0_wO_TOA +145 -0
- rtsos-1.1.0rc1/validation/benchmark/flat_ocean_Ray_MC/Atmos_OI_O/MCRAY_W0_wO_TOO +145 -0
- rtsos-1.1.0rc1/validation/benchmark/flat_ocean_Ray_MC/Atmos_OI_O/auxiliary_directory +2 -0
- rtsos-1.1.0rc1/validation/benchmark/flat_ocean_Ray_MC/Atmos_OI_O/radplot_L60.m +436 -0
- rtsos-1.1.0rc1/validation/benchmark/flat_ocean_Ray_MC/Atmos_OI_O/sosi.amu +101 -0
- rtsos-1.1.0rc1/validation/benchmark/flat_ocean_Ray_MC/Atmos_OI_O/sosi.dat +46 -0
- rtsos-1.1.0rc1/validation/benchmark/flat_ocean_Ray_MC/Atmos_OI_O/vSOS_verified +278 -0
- rtsos-1.1.0rc1/validation/benchmark/thermal_source/auxiliary_directory +2 -0
- rtsos-1.1.0rc1/validation/benchmark/thermal_source/rad_ray_fres_plot.m +74 -0
- rtsos-1.1.0rc1/validation/benchmark/thermal_source/sosi_ray_fres.dat +56 -0
- rtsos-1.1.0rc1/validation/benchmark/thermal_source/test_mw_fres.dat +140 -0
- rtsos-1.1.0rc1/validation/benchmark/thermal_source/vSOS_ray_fres +51 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.22...3.31)
|
|
2
|
+
|
|
3
|
+
if(DEFINED SKBUILD_PROJECT_NAME)
|
|
4
|
+
set(_PROJECT "${SKBUILD_PROJECT_NAME}")
|
|
5
|
+
else()
|
|
6
|
+
set(_PROJECT "RTSOS")
|
|
7
|
+
endif()
|
|
8
|
+
project(${_PROJECT}
|
|
9
|
+
LANGUAGES
|
|
10
|
+
C
|
|
11
|
+
CXX
|
|
12
|
+
Fortran
|
|
13
|
+
)
|
|
14
|
+
include(GNUInstallDirs)
|
|
15
|
+
|
|
16
|
+
# ensure RPATH is defined for relocatable binaries
|
|
17
|
+
set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib")
|
|
18
|
+
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
|
19
|
+
|
|
20
|
+
# for Conda environment installation with cmake
|
|
21
|
+
if(DEFINED ENV{CONDA_PREFIX})
|
|
22
|
+
message(STATUS "Building with conda environment: $ENV{CONDA_PREFIX}")
|
|
23
|
+
list(APPEND CMAKE_PREFIX_PATH "$ENV{CONDA_PREFIX}")
|
|
24
|
+
set(CMAKE_INSTALL_PREFIX "$ENV{CONDA_PREFIX}" CACHE PATH "Default install prefix for Conda environment" FORCE)
|
|
25
|
+
endif()
|
|
26
|
+
|
|
27
|
+
# import targets that satisfy the HDF5 dependency
|
|
28
|
+
find_package(HDF5
|
|
29
|
+
REQUIRED
|
|
30
|
+
COMPONENTS
|
|
31
|
+
Fortran
|
|
32
|
+
HL
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# import targets that satisfy the Lapack dependency (includes BLAS)
|
|
36
|
+
find_package(LAPACK
|
|
37
|
+
REQUIRED
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
# recurse into source tree
|
|
41
|
+
add_subdirectory(src)
|
|
Binary file
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
%%%%%%%%%%%%%%%%%%%%%%% preamble %%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
2
|
+
\documentclass[10pt,letterpaper]{article}
|
|
3
|
+
\usepackage{amsmath}
|
|
4
|
+
\usepackage{subfigure}
|
|
5
|
+
|
|
6
|
+
%%%%%%%%%%%%%%%%%% title page information %%%%%%%%%%%%%%%%%%
|
|
7
|
+
\title{Input and Output Files of the RTSOS Code}
|
|
8
|
+
|
|
9
|
+
\author{Pengwang Zhai \\ Physics Department, UMBC \\ pwzhai@gmail.com}
|
|
10
|
+
|
|
11
|
+
%%%%%%%%%%%%%%%%%%%%%%% begin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
12
|
+
\begin{document}
|
|
13
|
+
|
|
14
|
+
\maketitle
|
|
15
|
+
%%%%%%%%%%%%%%%%%%% abstract and OCIS codes %%%%%%%%%%%%%%%%
|
|
16
|
+
%% [use \begin{abstract*}...\end{abstract*} if exempt from copyright]
|
|
17
|
+
|
|
18
|
+
\begin{abstract}
|
|
19
|
+
The input and output files of the RTSOS code are described this file
|
|
20
|
+
\end{abstract}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
\section{Files contained in the package}
|
|
24
|
+
In the main directory, there are a few key directories, including \verb"SOSDIR/SOS_Callable/src/", \verb"SOSDIR/SOS_Callable/compile/", and \verb"SOSDIR/SOS_Callable/test/". The string \verb"SOSDIR" is the directory where the radiative transfer package is in. The src directory including all the source code, the compile directory contains the Makefiles, and the test directory are intent to be used as running programs. The basis of all package is \verb"rtsos_rao_dg.f90", which performs monochromatic radiative transfer simulations. All inelastic scattering builds upon that.
|
|
25
|
+
|
|
26
|
+
\section{Input files of monochromatic simulation}
|
|
27
|
+
The input files are: \verb"sosi.amu", \verb"sosi.dat", and the Mie input files for each medium. To run the monochromatic radiative transfer simulation, do the following:
|
|
28
|
+
|
|
29
|
+
\begin{verbatim}
|
|
30
|
+
cd SOSDIR/compile
|
|
31
|
+
make
|
|
32
|
+
cp rtsos_rao_dg.exe ../test/monochromatic/
|
|
33
|
+
cd ../test/monochromatic/
|
|
34
|
+
rtsos_rao_dg.exe inputfile outputfile
|
|
35
|
+
\end{verbatim}
|
|
36
|
+
|
|
37
|
+
\noindent where inputfile is a copy of sosi.dat explained in this document and outputfile is the file name for the output file.
|
|
38
|
+
|
|
39
|
+
\section{Angle file}
|
|
40
|
+
\verb"sosi.amu" specifies the angle related quantities used by the RTSOS code. An example of the file is:
|
|
41
|
+
|
|
42
|
+
\begin{verbatim}
|
|
43
|
+
1
|
|
44
|
+
120
|
|
45
|
+
10 4
|
|
46
|
+
0.0
|
|
47
|
+
20.
|
|
48
|
+
40.
|
|
49
|
+
60.
|
|
50
|
+
80.
|
|
51
|
+
100.
|
|
52
|
+
120.
|
|
53
|
+
140.
|
|
54
|
+
160.
|
|
55
|
+
180.
|
|
56
|
+
0
|
|
57
|
+
60.
|
|
58
|
+
120.
|
|
59
|
+
180
|
|
60
|
+
\end{verbatim}
|
|
61
|
+
|
|
62
|
+
The first line is the number $N_{st}$ of $\theta_{s}$ angles for the solar incident radiation. The second line to the ${(2+N_{st}-1)}^{th}$ line specify the incident solar angles $\theta_{s}$ at which the radiation calculation is needed. Each line contains one solar $\theta_{s}$ angle only, with the unit of degrees. In the example, thetas=120 deg. After the solar zenith angle, following line has two numbers: they are the number of viewing zenith and azimuth angles, respectively. In the example, the number of viewing zenith angle is Nzv=10 and the number of azimuthal angle is Nphi=4. Following the number will be Nzv lines which specify the viewing zenith angles. After viewing zenith angle, it will be Nphi lines which specify a set of azimuthal angles. In the example, the RTSOS code will calculate a set of viewing zenith angle of 0, 20, ..., 180. The viewing azimuthal angles are 0, 60, 120 and 180.
|
|
63
|
+
|
|
64
|
+
\section{Input file sosi.dat}
|
|
65
|
+
\verb"sosi.dat" specifies the system configuration. Table \ref{tab:sosi} is an example input file.
|
|
66
|
+
\begin{table}
|
|
67
|
+
\caption{Example input file sosi.dat}
|
|
68
|
+
\vspace{0.2 in}
|
|
69
|
+
\centering
|
|
70
|
+
\begin{tabular}{llllllll}
|
|
71
|
+
&-1000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 \\
|
|
72
|
+
&1 & 0.1 & 1.0 & 412.0& 215.0 & 0.0 & 0.0 \\
|
|
73
|
+
&-1000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 \\
|
|
74
|
+
&-100 & 7.0 & 1.34 & 0.0 & 0.0 & 0.0 & 0.0 \\
|
|
75
|
+
&-1000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 \\
|
|
76
|
+
&2 & 0.1 & 1.0 & 412.0& 215.0 & 0.0 & 0.0 \\
|
|
77
|
+
&-1000 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 & 0.0 \\
|
|
78
|
+
&-200 & 1.0 & 1.0 & 1.5 & 0.0 & 0.0 & 0.0 \\
|
|
79
|
+
&40 & 30 & 60 & & & & \\
|
|
80
|
+
&2 & 30 & 10 & & & & \\
|
|
81
|
+
&RayDepol0.pmtx & & & & & & \\
|
|
82
|
+
&gamma\_aa\_0.03bb\_0.33wv0.35.pmtx & & & & & & \\
|
|
83
|
+
\end{tabular}
|
|
84
|
+
\label{tab:sosi}
|
|
85
|
+
\end{table}
|
|
86
|
+
|
|
87
|
+
There are 12 lines in the example input file. From the first line to 9th line, each line contains 7 numbers. The first number is called IPT in the code, which tells what this line is (detector, medium, surface, etc.). There are four types of objects you can specify through IPT: Detector, Atmosphere or Ocean scattering layers, Ocean interface, and the Lambertian/(polarized BRDF) bottom. Table \ref{tab:IPT} shows the meanings of different IPT values:
|
|
88
|
+
|
|
89
|
+
\begin{table}
|
|
90
|
+
\caption{IPT and its meaning}
|
|
91
|
+
\vspace{0.2 in}
|
|
92
|
+
\centering
|
|
93
|
+
\begin{tabular}{ll}
|
|
94
|
+
IPT=-1000 & Detector \\
|
|
95
|
+
IPT=-100 & Ocean interface\\
|
|
96
|
+
IPT=-101 & Ocean interface as the lower bottom (no ocean medium)\\
|
|
97
|
+
IPT=-102 & Water interface bottom in infrared \\
|
|
98
|
+
IPT=-200 & Lambertian/flat surface mixed reflection bottom \\
|
|
99
|
+
IPT=-201 & polarized reflection bottom \\
|
|
100
|
+
IPT=-202 & snow surface \\
|
|
101
|
+
IPT=-203 & Ross-Li surface model \\
|
|
102
|
+
IPT=$>$0 & Atmosphere or Ocean scattering medium
|
|
103
|
+
\end{tabular}
|
|
104
|
+
\label{tab:IPT}
|
|
105
|
+
\end{table}
|
|
106
|
+
|
|
107
|
+
In this input file, a default coordinate system has been assumed. The first Atmosphere scattering medium is located at the top of the atmosphere.
|
|
108
|
+
The scattering medium line to the line of IPT=-100 (or -200, or -201, etc.) specify the atmosphere configuration.
|
|
109
|
+
The line just after the line of IPT=-100 to the line of IPT=-200 configure the oceanic medium.
|
|
110
|
+
IPT=-200 means a mixture of Lambertian and flat reflecting surface.
|
|
111
|
+
No more atmosphere and ocean medium configuration is allowed beyond the line of IPT=-200 (-101, or -201) because no medium is beyond the bottom.
|
|
112
|
+
|
|
113
|
+
\begin{table}
|
|
114
|
+
\caption{Inputfile fields}
|
|
115
|
+
\vspace{0.2 in}
|
|
116
|
+
\centering
|
|
117
|
+
\begin{tabular}{llllllll}
|
|
118
|
+
&IPT=-1000 & BN&BN&BN& BN&BN&BN \\
|
|
119
|
+
&IPT $>$ 0 &TAU&LBDOM&wavelength&Temperature&EFLRSC&ALH \\
|
|
120
|
+
&IPT=-101 & windspeed & re(mwater) & im(mwater) & glintflag & RSR0P & FWC \\
|
|
121
|
+
&IPT=-100 & windspeed & re(mwater) & im(mwater) & glintflag,& RSR0P & FWC \\
|
|
122
|
+
&IPT=-102 & windspeed& re(mwater)& im(mwater)&glintflag&temperature&emissivity \\
|
|
123
|
+
&IPT=-200 & albedo &flam&re(mbottom)&im(mbottom)&temperature&emissivity \\
|
|
124
|
+
&IPT=-201 & pBRDFa&pBRDFk&pBRDFb&pBRDFe&re(mbottom)&im(mbottom) \\
|
|
125
|
+
&IPT=-202 & albedo& BN& BN& BN& BN& BN \\
|
|
126
|
+
&IPT=-202 & fiso &fvol & fgeo & BN & BN& BN \\
|
|
127
|
+
\end{tabular}
|
|
128
|
+
\label{tab:InputFile}
|
|
129
|
+
\end{table}
|
|
130
|
+
|
|
131
|
+
Including the IPT, there are 7 numbers at each line. Table \ref{tab:InputFile} shows the proctor used for interpreting the inputs. BN means Blank Number, which is currently not used by the program; TAU is the optical depth of that layer; LBDOM is the single scattering albedo of that layer; wavelength is in micron, which is used in inelastic scattering simulations or infrared monochromatic simulations; Temperature is in Kelvin, which is only useful when you calculate infrared radiative transfer. EFLRSC is internally used by the inelastic scattering of ocean waters (by default it is set to 0 in monochromatic simulations); ALH is the atmospheric layer top height. ALH is only useful for calculating pseudospherical shell. To perform pseudospherical shell calculation, use the following in your main program:
|
|
132
|
+
|
|
133
|
+
%/Users/pwzhai/Research/RT/DSCOVR/SnowBRDF_Data/brdfPaperMaterial/ #snow brdf file path
|
|
134
|
+
\begin{verbatim}
|
|
135
|
+
USE RTUTILITY, ONLY : PSEUDO_SPHERICAL_SHELL
|
|
136
|
+
.
|
|
137
|
+
.
|
|
138
|
+
.
|
|
139
|
+
|
|
140
|
+
PSEUDO_SPHERICAL_SHELL=.true.
|
|
141
|
+
\end{verbatim}
|
|
142
|
+
|
|
143
|
+
\noindent And set ALH as the atmospheric layer top heights properly.
|
|
144
|
+
|
|
145
|
+
WindSpeed is the wind speed (m/s); re(mwater) and im(mwater) are the real and imaginary parts of the water refractive index; GlintFlag = 0 includs sun glints while GlintFlag = 1 does NOT include sun glint; RSR0P is the remote sensing reflectance just above the ocean surface. RSR0P is a user supplied value to calculate how Remote Sensing Reflectance just above ocean water propagate to the sensor level.
|
|
146
|
+
|
|
147
|
+
FWC is the fraction of white cap on surface. By default FWC is set to be zero in the input file, and its actual value will be calculated in RTSOS based on a parameterization in terms of wind speed. If FWC is set to be a number larger than 0 (and smaller than or equal to 1), then RSR0P should be set to: RSR0P=WCLBDO/PI, where WCLBDO is the equivalent Lambertian reflectance of white cap or other surface debris. Currently the option for user supplied FWC values is only available for IPT=-101 and IPT=-100.
|
|
148
|
+
|
|
149
|
+
For normal radiative transfer simulation, RSR0P should be zero by default. The interpretation of RSR0P can be summarized in the following four cases: \\
|
|
150
|
+
|
|
151
|
+
\begin{itemize}
|
|
152
|
+
\item IPT=-101, RSR0P$>$0, FWC=0.0: no ocean radiative transfer will be conducted, RSR0P would be the remote sensing reflectance of the ocean body based on in-situ measurement. \\
|
|
153
|
+
\item IPT=-101, RSR0P$>$0, FWC$>$0.0: no ocean radiative transfer will be conducted, RSR0P=WCLBDO/PI, where WCLBDO is the equivalent Lambertian reflectance of white cap or other surface debris, and FWC is the fraction of white cap on surface. \\
|
|
154
|
+
\item IPT=-100, RSR0P$>$0, FWC$>$0.0: full atmosphere-ocean radiative transfer will be conducted, RSR0P=WCLBDO/PI, where WCLBDO is the equivalent Lambertian reflectance of white cap or other surface debris, and FWC is the fraction of white cap on surface. \\
|
|
155
|
+
\item IPT=-100, RSR0P=0, FWC=0.0: full atmosphere-ocean radiative transfer will be conducted, WCLBDO and FWC are internally calculated in RTSOS based on parameterization in terms of wind speed.
|
|
156
|
+
\end{itemize}
|
|
157
|
+
|
|
158
|
+
For Lambertian surface, the value of albedo tells the lambertian surface reflection albedo; flam is the fraction of the surface which is lambertian reflection; The values of re(mbottom) and im(mbottom) are the real and imaginary refractive index of the surface which are used to determine Fresnel reflection when flam is less than 1.
|
|
159
|
+
|
|
160
|
+
Once the RTSOS code reads an IPT of in (-200 -101, -201, -202, -203), it won't accept more atmospheric or ocean layer specification, because there should be nothing below bottom. The line following the line of IPT=(-200 -101, -201, -202, -203) contains three integers: NCOL, NQUADA, and NQUADO. NCOL is the number of scattering orders to be performed. NCOL=10 normally gives fairly good precision. NQUADA and NQUADO are the quadrature numbers needed for the atmosphere and ocean source function integration, respectively. For the single quadrature code, NQUADO will be ignored. The next line contains three integers: NUMMIE, MAXLORD, and MAXMORD. NUMMIE is the number of Mie particle files. MAXLORD is the maximum L order used to expand the scattering matrices in terms of the Wigner d functions. MAXMORD is the maximum number of Fourier series order. There are NUMMIE lines following this line. Each line specifies the file names of the input files. The sequence of the file tells the RTSOS code which IPT this file is associated with.
|
|
161
|
+
|
|
162
|
+
The example input file specifies the following system with each line:
|
|
163
|
+
\begin{itemize}{}
|
|
164
|
+
\item Line 1: A detector is placed at the top of the atmosphere.
|
|
165
|
+
\item Line 2: An atmospheric layer, with an optical thickness of 0.1, and single scattering albedo of 1, IPT=1. Wavelength is 412 nm and temperature is 215 K.
|
|
166
|
+
\item Line 3: A second detector is placed at the bottom of the atmosphere.
|
|
167
|
+
\item Line 4: An ocean interface is placed below the atmosphere at the optical depth of 0.1, with the wind speed of 7 m/s, water refractive index is (1.34, 0), sun glint is turned on.
|
|
168
|
+
\item Line 5: A detector is placed at the top of the ocean (just below the ocean interface).
|
|
169
|
+
\item Line 6: An ocean layer is placed below the interface, with optical depth of 0.1, single scattering albedo of 1.0, IPT = 2. Wavelength is 412 nm and temperature is 215 K.
|
|
170
|
+
\item Line 7: A detector is placed at the bottom of the ocean.
|
|
171
|
+
\item Line 8: A Lambertian bottom is placed at the bottom of the ocean, with reflection albedo of 1.0. The fraction of lambertian reflection $f_{lamb}$=1. The surface refractive index is (1.5, 0), which is only useful if the lambertian fraction is less than 1. In this case the fraction 1-$f_{lamb}$ is characterized by the Frenesl reflection of a flat surface.
|
|
172
|
+
\item Line 9: The total number of scattering is 40, with NQUADA=30, NQUADO=60.
|
|
173
|
+
\item Line 10: There are two Mie input files, the maximum L order is 30, and the order of Fourier series is 10.
|
|
174
|
+
\item Line 11: IPT=1 ``RayDepol0.pmtx'' will be used
|
|
175
|
+
\item Line 12: IPT=2 gamma\_ aa\_ 0.03bb\_0.33wv0.35.pmtx will be used
|
|
176
|
+
\end{itemize}
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
The snow surface data is from
|
|
180
|
+
Hudson, S. R., S. G. Warren, R. E. Brandt, T. C. Grenfell, and D. Six (2006), Spectral bidirectional reflectance of Antarctic snow: Measurements and parameterization, J. Geophys. Res., 111, D18106, doi:10.1029/2006JD007290.
|
|
181
|
+
|
|
182
|
+
If IPT=-202 is specified, the program will read in a string following the pmtx file line which contains the directory of the snow BRDF data.
|
|
183
|
+
|
|
184
|
+
In the directory that you run \verb!rtsos_rao_dg.exe!, you should have a file called \verb!auxiliary_directory!, which contains the directory of the solar irradiance data file, which is needed when you perform infrared radiative transfer simulations.
|
|
185
|
+
|
|
186
|
+
The solar irradiance data file is among a collection of data files archived for the PACE simulator, which was documented in the README file of this repo:\
|
|
187
|
+
\verb!https://github.com/aoog-umbc/rtsos-public!
|
|
188
|
+
|
|
189
|
+
If you have not downloaded it yet, the address of the data file is: \\
|
|
190
|
+
\verb!http://doi.org/10.5281/zenodo.17410093!
|
|
191
|
+
|
|
192
|
+
The file is named as \verb!RTSOS_data_v1.0_20251022.tar.gz!, which can be placed in a convenient location of your choice, let's call it PACEDATADIR.
|
|
193
|
+
|
|
194
|
+
You can extract the files by doing the following in a linux terminal:
|
|
195
|
+
|
|
196
|
+
\begin{verbatim}
|
|
197
|
+
cd PACEDATADIR
|
|
198
|
+
tar -xf RTSOS_data_v1.0_20251022.tar.gz
|
|
199
|
+
\end{verbatim}
|
|
200
|
+
|
|
201
|
+
You will get two directories. One is \verb!PACEDATADIR/Gas_Absorption_Coefficients/!. The other is PACEDATADIR/Data/, which contains f0.txt, the solar irradiance data file. You can do the following to put PACEDATADIR/Data/ to \verb!auxiliary_directory!: \\
|
|
202
|
+
|
|
203
|
+
\begin{verbatim}
|
|
204
|
+
cd PACEDATADIR/Data/
|
|
205
|
+
pwd > SOSDIR/test/monochromatic/auxiliary_directory
|
|
206
|
+
\end{verbatim}
|
|
207
|
+
|
|
208
|
+
\noindent where SOSDIR/test/monochromatic/ is the directory of \verb!rtsos_rao_dg.exe!, where you will run the program.
|
|
209
|
+
|
|
210
|
+
\section{A few nots}
|
|
211
|
+
|
|
212
|
+
If wind speed is smaller than 0.5 m/s, the code will assume the ocean surface is flat. Otherwise, the random ocean wave surface will be used. The wave slope distribution will be Cox \& Munk (1954).
|
|
213
|
+
|
|
214
|
+
Three truncation scheme are used: delta fit, delta m, and delta m+ are now built-in in the package and the users can select from one of such truncation techniques.
|
|
215
|
+
|
|
216
|
+
White cap parameterization are implemented. Physically this means that the code can handle a mixture of lambertian reflector and random rough surfaces.
|
|
217
|
+
|
|
218
|
+
\section{ Mie input files}
|
|
219
|
+
The RTSOS code needs users provide the Mie particle files before any simulation. Please refer to our Optics Express (OE) paper for details. The RTSOS package comes with the Rayleigh examples: \verb"RayDepol0.pmtx"
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
\section{Example}
|
|
223
|
+
The package contains a number of test cases located at
|
|
224
|
+
SOS\_Callable/test/monochromatic/
|
|
225
|
+
and
|
|
226
|
+
SOS\_Callable/validation/benchmark
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
\section{Output file}
|
|
230
|
+
Data in this file are pretty much self-explained. The top part is the header, which shows the various parameters used in the calculation. The main body is the Stokes parameters I, Q, U, and V, as functions of viewing angles specified by the zenith angle Theta and azimuthal angle Phi. TAUDETA shows the optical depth of the detector in atmosphere and TAUDETO shows the optical depth of the detector in ocean.
|
|
231
|
+
|
|
232
|
+
\section{Important variables in the code}
|
|
233
|
+
The variables listed below are important. Users should not change them unless they understand what they are doing.
|
|
234
|
+
|
|
235
|
+
``DELTATAUA'' and ``DELTATAUO'' are the non dimensional step sizes to do optical depth integration in atmosphere and ocean respectively. The typical value is 0.2 for these two variables. However, they have to be at most half of the optical depth of a homogeneous layer. For example, if the optical depth of a homogeneous atmosphere is 0.1, ``DELTATAUA'' has to be 0.05 at most. If benchmark values are wanted, use `` DELTATAUA=DELTATAUO=0.01.''
|
|
236
|
+
|
|
237
|
+
ESUN(1:4) is a column vector which specifies the irradiance Stokes vector of the solar incident source. Set ``ESUN(1)'' to 1 or $\pi$ according to your normalization convention.
|
|
238
|
+
|
|
239
|
+
``{\bf \verb+WLR_FLAG+}'' is a logical variable. If ``\verb+WLR_FLAG=.true.+'', water leaving radiance vectors will be calculated for detectors in the atmosphere.
|
|
240
|
+
``\verb+WLR_FLAG=.false.+'' the total radiance vectors will be calculated for specified detectors.
|
|
241
|
+
|
|
242
|
+
``\verb+TRUC_FLAG+'' is a logical variable. If ``\verb+TRUC_FLAG=.true.+'', the delta-fit will be used to truncate the phase function and other scattering elements. The truncation factor f will be read in from the incident file and renormalize the optical depth and single scattering albedo. Otherwise, set it to .false. This variable is recommended to set to .true. always.
|
|
243
|
+
|
|
244
|
+
LINEXP is a logical variable. If it is set to be ``.true.'',the linear-exponential approximation will be used. Otherwise, the linear approximation will be used. The linear-exponential approximation will be always better than the linear approximation.
|
|
245
|
+
|
|
246
|
+
GEOSR is a logical variable. ''GEOSR=.true.'' the geometric series approximation will be used.
|
|
247
|
+
|
|
248
|
+
SCL is a logical variable. If ``SCL=.true.'' the code will produce scalar radiance output for detectors. ``SCL=.false.'', vector radiances will be calculated.
|
|
249
|
+
|
|
250
|
+
\verb+Mishchenko_Sign+: a logical variable. If ".true.", the code will use Mishchenko's convention for phase matrices expasion. The reference is:
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
{\it M. I. Mishchenko, L. D. Travis, and A. A. Lacis, Scattering, Absorption, and Emission of Light by Small Particles
|
|
254
|
+
(Cambridge University Press, Cambridge 2002)), Page 103--104}.
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
If ".false.", the code will use Siewert's convention:
|
|
258
|
+
|
|
259
|
+
{\it C. E. Siewert, ``On the phase matrix basic to the scattering of polarized light,'' Astron. Astrophys. 109, 195200 (1982)}.
|
|
260
|
+
|
|
261
|
+
Please refer to Eqs. (A-12) in the following paper for details:
|
|
262
|
+
|
|
263
|
+
{\it Peng-Wang Zhai, et a., ``A vector radiative transfer model for coupled atmosphere and ocean systems based on successive order of scattering method,'' Opt. Express 17, 2057-2079 (2009)
|
|
264
|
+
http://www.opticsinfobase.org/oe/abstract.cfm?URI=oe-17-4-2057}
|
|
265
|
+
|
|
266
|
+
new parameter: DELTAM.
|
|
267
|
+
! DELTAM = 0 USE DELTA M FIT FOR THE PHASE MATRIX truncation
|
|
268
|
+
! 1 USE DELTA M + FIT
|
|
269
|
+
! 2 USE DELTA FIT
|
|
270
|
+
|
|
271
|
+
\end{document}
|
rtsos-1.1.0rc1/LICENSE
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
|
|
3
|
+
RTSOS – Radiative Transfer model based on Successive Orders of Scattering
|
|
4
|
+
Copyright © 2025 Pengwang Zhai.
|
|
5
|
+
1. License Summary
|
|
6
|
+
RTSOS is made available for research and educational purposes under the terms of the Creative Commons Attribution–NonCommercial 4.0 International License (CC BY-NC 4.0).
|
|
7
|
+
You may freely use, modify, and share this software for non-commercial purposes, provided that you give appropriate credit and include this license notice in any redistribution.
|
|
8
|
+
Commercial use (including use in proprietary or revenue-generating products, consulting services, or contract research for profit) is not permitted without prior written permission.
|
|
9
|
+
For commercial licensing inquiries, please contact:
|
|
10
|
+
📧 Pengwang Zhai – [pwzhai@gmail.com]
|
|
11
|
+
2. License Terms (CC BY-NC 4.0)
|
|
12
|
+
You are free to:
|
|
13
|
+
Share — copy and redistribute the material in any medium or format
|
|
14
|
+
Adapt — remix, transform, and build upon the material
|
|
15
|
+
under the following terms:
|
|
16
|
+
Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made.
|
|
17
|
+
Example citation:
|
|
18
|
+
Zhai, P. (2025). RTSOS: Radiative Transfer model based on Successive Orders of Scattering (Version 1.0). Zenodo. https://doi.org/xx.xxxx/zenodo.xxxxxx
|
|
19
|
+
NonCommercial — You may not use the material for commercial purposes.
|
|
20
|
+
No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
|
|
21
|
+
The full license text is available at:
|
|
22
|
+
🔗 https://creativecommons.org/licenses/by-nc/4.0/legalcode
|
|
23
|
+
3. Disclaimer of Warranty
|
|
24
|
+
This software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non-infringement.
|
|
25
|
+
In no event shall the author or copyright holder be liable for any claim, damages, or other liability arising from the use of this software.
|
|
26
|
+
4. Citation and Acknowledgment
|
|
27
|
+
If you use RTSOS in a publication or presentation, please acknowledge:
|
|
28
|
+
Zhai, P. (2025). RTSOS: Radiative Transfer model based on Successive Orders of Scattering (Version 1.0). Available under the CC BY-NC 4.0 License.
|
|
29
|
+
5. Commercial Licensing Clause
|
|
30
|
+
Commercial entities or projects seeking to use RTSOS in any form that contributes to a product, service, or revenue-generating activity must obtain a separate commercial license.
|
|
31
|
+
Please contact the author (Pengwang Zhai) to discuss terms for such use.
|
|
32
|
+
6. Summary (non-legal plain language)
|
|
33
|
+
Use Case Permitted? Notes
|
|
34
|
+
Academic research ✅ Cite and acknowledge the author
|
|
35
|
+
Teaching or training ✅ Credit required
|
|
36
|
+
Open-source collaboration (non-commercial) ✅ Allowed under CC BY-NC 4.0
|
|
37
|
+
Government or nonprofit research ✅ Allowed
|
|
38
|
+
Commercial R&D, software, or consulting use 🚫 Requires a commercial license
|
|
39
|
+
|
|
40
|
+
End of License
|
rtsos-1.1.0rc1/PKG-INFO
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: rtsos
|
|
3
|
+
Version: 1.1.0rc1
|
|
4
|
+
Summary: Radiative Transfer model based on Successive Orders of Scattering
|
|
5
|
+
Author-Email: Pengwang Zhai <pwzhai@gmail.com>, Ian Carroll <ian.t.carroll@nasa.gov>
|
|
6
|
+
License-Expression: CC-BY-NC-4.0
|
|
7
|
+
Classifier: Development Status :: 3 - Alpha
|
|
8
|
+
Classifier: Intended Audience :: Science/Research
|
|
9
|
+
Classifier: Programming Language :: Fortran
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
14
|
+
Project-URL: repository, https://github.com/aoog-umbc/rtsos
|
|
15
|
+
Requires-Python: >=3.12
|
|
16
|
+
Requires-Dist: numpy>=2.3.3
|
|
17
|
+
Requires-Dist: xarray>=2022.3
|
|
18
|
+
Requires-Dist: netcdf4>=1.6.1
|
|
19
|
+
Requires-Dist: dask>=2022.10.2
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
<!--
|
|
23
|
+
RTSOS — Radiative Transfer model based on Successive Orders of Scattering
|
|
24
|
+
Copyright © 2025 Pengwang Zhai.
|
|
25
|
+
|
|
26
|
+
Licensed under the Creative Commons Attribution–NonCommercial 4.0
|
|
27
|
+
International License (CC BY-NC 4.0).
|
|
28
|
+
You may use, modify, and share this code for research and
|
|
29
|
+
educational purposes with proper attribution.
|
|
30
|
+
Commercial use requires written permission from the author.
|
|
31
|
+
|
|
32
|
+
Full license: https://creativecommons.org/licenses/by-nc/4.0/
|
|
33
|
+
Contact: Pengwang Zhai | [pwzhai@gmail.com]
|
|
34
|
+
-->
|
|
35
|
+
|
|
36
|
+
# Radiative Transfer model based on Successive Orders of Scattering (RTSOS)
|
|
37
|
+
|
|
38
|
+
RTSOS can solve the multiple scattering radiative transfer equation from UV, visible, to infrared. It can handle atmosphere-land or atmosphere-ocean coupled systems. The atmosphere can be a mixture of molecules, aerosols, and cloud droplets. The land bottom can be Lambertian, snow surface, Ross-Li, and a number of other surfaces. The ocean waters are modeled by a mixture of pure ocean water, phytoplankton, and colored dissolved organic matter (CDOM), and other hydrosols. The sensors can be placed at arbitrary levels in the Earth system. The output of the sensor can include the full polarized Stokes parameters (I, Q, U, V). For more information, see References at the end of this document.
|
|
39
|
+
|
|
40
|
+
PACE simulator is a wrapper built around the monochromatic RTSOS, which has a list of built-in aerosol and ocean inherent optical properties. A publication on the PACE simulator is published on Frontiers in Remote Sensing (Zhai et al., 2022).
|
|
41
|
+
|
|
42
|
+
GSFC AC LUT is a wrapper built around the monochromatic RTSOS which
|
|
43
|
+
builds look up tables for atmospheric correction for retrievals of surface reflectance from top-of-atmosphere measurements.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
RTSOS — Radiative Transfer model based on Successive Orders of Scattering
|
|
3
|
+
Copyright © 2025 Pengwang Zhai.
|
|
4
|
+
|
|
5
|
+
Licensed under the Creative Commons Attribution–NonCommercial 4.0
|
|
6
|
+
International License (CC BY-NC 4.0).
|
|
7
|
+
You may use, modify, and share this code for research and
|
|
8
|
+
educational purposes with proper attribution.
|
|
9
|
+
Commercial use requires written permission from the author.
|
|
10
|
+
|
|
11
|
+
Full license: https://creativecommons.org/licenses/by-nc/4.0/
|
|
12
|
+
Contact: Pengwang Zhai | [pwzhai@gmail.com]
|
|
13
|
+
-->
|
|
14
|
+
|
|
15
|
+
# Radiative Transfer model based on Successive Orders of Scattering (RTSOS)
|
|
16
|
+
|
|
17
|
+
RTSOS can solve the multiple scattering radiative transfer equation from UV, visible, to infrared. It can handle atmosphere-land or atmosphere-ocean coupled systems. The atmosphere can be a mixture of molecules, aerosols, and cloud droplets. The land bottom can be Lambertian, snow surface, Ross-Li, and a number of other surfaces. The ocean waters are modeled by a mixture of pure ocean water, phytoplankton, and colored dissolved organic matter (CDOM), and other hydrosols. The sensors can be placed at arbitrary levels in the Earth system. The output of the sensor can include the full polarized Stokes parameters (I, Q, U, V). For more information, see References at the end of this document.
|
|
18
|
+
|
|
19
|
+
PACE simulator is a wrapper built around the monochromatic RTSOS, which has a list of built-in aerosol and ocean inherent optical properties. A publication on the PACE simulator is published on Frontiers in Remote Sensing (Zhai et al., 2022).
|
|
20
|
+
|
|
21
|
+
GSFC AC LUT is a wrapper built around the monochromatic RTSOS which
|
|
22
|
+
builds look up tables for atmospheric correction for retrievals of surface reflectance from top-of-atmosphere measurements.
|
rtsos-1.1.0rc1/README.md
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
RTSOS — Radiative Transfer model based on Successive Orders of Scattering
|
|
2
|
+
Copyright © 2025 Pengwang Zhai. \
|
|
3
|
+
This software is released under the Creative Commons Attribution–NonCommercial 4.0 International (CC BY-NC 4.0) license.
|
|
4
|
+
You are free to use, modify, and share it for research and educational purposes, provided that you give appropriate credit.
|
|
5
|
+
Commercial use is not permitted without prior written consent from the author.
|
|
6
|
+
📧 For commercial licensing inquiries, contact Pengwang Zhai at [pwzhai@gmail.com].
|
|
7
|
+
🔗 Full license text: Creative Commons BY-NC 4.0 (https://creativecommons.org/licenses/by-nc/4.0/)
|
|
8
|
+
|
|
9
|
+
RTSOS can solve the multiple scattering radiative transfer equation from UV, visible, to infrared. It can handle atmosphere-land or atmosphere-ocean coupled systems. The atmosphere can be a mixture of molecules, aerosols, and cloud droplets. The land bottom can be Lambertian, snow surface, Ross-Li, and a number of other surfaces. The ocean waters are modeled by a mixture of pure ocean water, phytoplankton, and colored dissolved organic matter (CDOM), and other hydrosols. The sensors can be placed at arbitrary levels in the Earth system. The output of the sensor can include the full polarized Stokes parameters (I, Q, U, V). For more information, see References at the end of this document.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
PACE simulator is a wrapper built around the monochromatic RTSOS, which has a list of built-in aerosol and ocean inherent optical properties. A publication on the PACE simulator is published on Frontiers in Remote Sensing (Zhai et al., 2022).
|
|
13
|
+
|
|
14
|
+
A collection of data files which are needed for simulating the PACE instruments can be downloaded at: \
|
|
15
|
+
http://doi.org/10.5281/zenodo.17410093
|
|
16
|
+
|
|
17
|
+
The file is named as RTSOS_data_v1.0_20251022.tar.gz, which can be placed in a convenient location of your choice, let's call it PACEDATADIR.
|
|
18
|
+
|
|
19
|
+
You can extract the files by doing the following in a linux terminal:
|
|
20
|
+
|
|
21
|
+
cd PACEDATADIR \
|
|
22
|
+
tar -xf RTSOS_data_v1.0_20251022.tar.gz
|
|
23
|
+
|
|
24
|
+
You will get two directories. One is PACEDATADIR/Gas_Absorption_Coefficients/, which contains the gas absorption cross section lookup table for H2O, O2, CH4, CO2, NO2, ozone. This lookup table was generated by using ARTS: The Atmospheric Radiative Transfer Simulator:
|
|
25
|
+
(https://www.radiativetransfer.org)version 2.3 with HITRAN2020 database (https://hitran.org/media/refs/HITRAN-2020.pdf).
|
|
26
|
+
|
|
27
|
+
The other is PACEDATADIR/Data/, which contains the absorption coefficients of pure water, plankton particles, the bidirectional reflectance distribution functions of snow surface, scattering matrix of dust particles, the instrument response functions of ocean color instrument, HARP2, and SPEXone, and a number of other data files used in the PACE simulator.
|
|
28
|
+
|
|
29
|
+
RTSOS and the PACE simulator requires a fortran 90 compiler (https://gcc.gnu.org/fortran/), hdf5 (https://www.hdfgroup.org/solutions/hdf5/) and lapack (https://www.netlib.org/lapack/) libraries.
|
|
30
|
+
|
|
31
|
+
## Prerequisites
|
|
32
|
+
- Python >= 3.11
|
|
33
|
+
- HDF5 >= 1.10
|
|
34
|
+
- LAPACK >= 3.9
|
|
35
|
+
- a modern Fortran compiler (e.g. gfortran)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
Section 1: COMPILE
|
|
39
|
+
|
|
40
|
+
The steps to use it is: compile the package, configure the input files, and run the code with the executable file. \
|
|
41
|
+
To compile, open a terminal and go to:
|
|
42
|
+
|
|
43
|
+
$cd RTSOSDIR/compile
|
|
44
|
+
|
|
45
|
+
where RTSOSDIR is where you clone this repo. Then try to compile the monochromatic code:
|
|
46
|
+
|
|
47
|
+
$make
|
|
48
|
+
|
|
49
|
+
If you get an error of missing Fortran compiler, examine "Makefile" and specify the correct Fortran command to F90, for example, ifx, ifort, gfortran, etc.. If successful, you have compiled the monochromatic radiative transfer package, which is the core of the PACE simulator.
|
|
50
|
+
|
|
51
|
+
Now you can edit the PACE Simulator make file to set the hdf5 library paths:
|
|
52
|
+
|
|
53
|
+
$emacs makefile_PACE_Simulator_DoubleK
|
|
54
|
+
|
|
55
|
+
Inside makefile_PACE_Simulator_DoubleK, you want to specify the following directories:
|
|
56
|
+
|
|
57
|
+
HDF5DIR=/usr/local/Cellar/hdf5@1.10/1.10.7\
|
|
58
|
+
HDF5LIB=-I$(HDF5DIR)/include\
|
|
59
|
+
H5FC=$(HDF5DIR)/bin/h5fc\
|
|
60
|
+
LIBSHDF=$(HDF5LIB) -L$(HDF5DIR)/lib/ -lhdf5 -lhdf5_fortran
|
|
61
|
+
|
|
62
|
+
If these are correctly set, you can compile the pace simulator:
|
|
63
|
+
|
|
64
|
+
$make clean\
|
|
65
|
+
$make -f makefile_PACE_Simulator_DoubleK
|
|
66
|
+
|
|
67
|
+
This will compile the pace simulator.
|
|
68
|
+
|
|
69
|
+
Section 2: RUN the MODELS
|
|
70
|
+
|
|
71
|
+
For monochromatic simulation, users are referred to the documentations located at
|
|
72
|
+
/Documentation/Describtion_of_input_files/SOS_io.pdf
|
|
73
|
+
|
|
74
|
+
Section 2.1 PACE Simulator
|
|
75
|
+
|
|
76
|
+
Section 2.1.1 Input files
|
|
77
|
+
|
|
78
|
+
To run the PACE simulator, user should become familiar with the input file formats.
|
|
79
|
+
We provided two python scripts to generate the input files, one for ocean and the other for land surfaces, respectively, which are located at:
|
|
80
|
+
|
|
81
|
+
test/PACE_Simulator/python_script/python_script/pace_simulator_twolayer_inputfile_land.py\
|
|
82
|
+
test/PACE_Simulator/python_script/python_script/pace_simulator_twolayer_inputfile_ocean.py
|
|
83
|
+
|
|
84
|
+
Study these two files before you execute them. Most importantly, change aux_dir and gas_absorption_coeff_dir to be:
|
|
85
|
+
|
|
86
|
+
aux_dir='PACEDATADIR/Data/'\
|
|
87
|
+
gas_absorption_coeff_dir='PACEDATADIR/Gas_Absorption_Coefficients/'
|
|
88
|
+
|
|
89
|
+
Section 2.1.2 Aerosol models
|
|
90
|
+
|
|
91
|
+
The Aerosol_Model[iaerosol] value is used in the PACE simulator input file to specify the aerosol models.
|
|
92
|
+
|
|
93
|
+
In the python script, Aerosol_Model is a array, you can use iaerosol to specify one of the aerosol models.
|
|
94
|
+
|
|
95
|
+
In the following we use IAEROSOL as Aerosol_Model[iaerosol] equivalently.
|
|
96
|
+
|
|
97
|
+
IAEROSOL=1-10 is the Shettle&Fenn model:
|
|
98
|
+
|
|
99
|
+
E. P. Shettle and R. W. Fenn, “Models for the aerosols of the lower atmosphere and the effects of humidity variations on their optical properties,” AFGL-TR 790214, U. S. Air Force Laboratory, Hanscom Air Force Base, Mass. (1979).
|
|
100
|
+
|
|
101
|
+
and
|
|
102
|
+
|
|
103
|
+
IAEROSOL=11-20;\
|
|
104
|
+
IRH=1-8 where RH(IRH)=(/0.30,0.50,0.70,0.75,0.80,0.85,0.90,0.95/).
|
|
105
|
+
|
|
106
|
+
are the new operational aerosol models currently used in the atmospheric correction at GSFC.
|
|
107
|
+
|
|
108
|
+
Ziauddin Ahmad, Bryan A. Franz, Charles R. McClain, Ewa J. Kwiatkowska, Jeremy Werdell, Eric P. Shettle, and Brent N. Holben, "New aerosol models for the retrieval of aerosol optical thickness and normalized water-leaving radiances from the SeaWiFS and MODIS sensors over coastal regions and open oceans," Appl. Opt. 49, 5545-5560 (2010)
|
|
109
|
+
|
|
110
|
+
For ocean simulations, ocean inherent optical properties are documented in Zhai et al., (2017, 2018, 2022).
|
|
111
|
+
|
|
112
|
+
IAEROSOL=-99 is reserved for the case that a user supplies aerosol/cloud phase matrices. See Sec. 2.2 for more information.
|
|
113
|
+
|
|
114
|
+
Section 2.1.3 Run the simulator
|
|
115
|
+
|
|
116
|
+
Now you may try out the pace simulator:
|
|
117
|
+
|
|
118
|
+
$cp rtsos_PACE_Simulator_DoubleK.exe ../test/PACE_Simulator/\
|
|
119
|
+
$cd ../test/PACE_Simulator/\
|
|
120
|
+
$mkdir alg_test
|
|
121
|
+
$cd alg_test
|
|
122
|
+
#run the simulator as:
|
|
123
|
+
$../rtsos_PACE_Simulator_DoubleK.exe input_rt_pace.txt
|
|
124
|
+
|
|
125
|
+
where "input_rt_pace.txt" is the input file to the simulator you generated in Section 2.1.1 using the python script.
|
|
126
|
+
|
|
127
|
+
The current version can conveniently generate synthetic datasets for OCI, HARP, and SPEX
|
|
128
|
+
for flexible datasets for OCI, HARP, and SPEX for flexible atmospheric and ocean conditions.
|
|
129
|
+
The input parameters are specified in input files.
|
|
130
|
+
|
|
131
|
+
Section 2.2 Single scattering matrix code
|
|
132
|
+
|
|
133
|
+
If you used IAEROSOL=-99 in the pace simulator input file, you will need to prepare the aerosol phase matrix. A tool was written by Neranga K. Hannadige (https://scholar.google.com/citations?user=0lAwqNsAAAAJ&hl=en) to generate the input scattering matrix files for the pace simulator. To use it, you can do the following:
|
|
134
|
+
|
|
135
|
+
cd RTSOSDIR/compile\
|
|
136
|
+
make -f makefile_aerosol_phmx_cal\
|
|
137
|
+
cp Aerosol_Phmx_Cal.exe ../test/PACE_Simulator/alg_test/\
|
|
138
|
+
cd ../test/PACE_Simulator/alg_test/\
|
|
139
|
+
./Aerosol_Phmx_Cal.exe inputfile_for_aerosol_phase_matrix
|
|
140
|
+
|
|
141
|
+
where "inputfile_for_aerosol_phase_matrix" is the input file for the aerosol phase matrix calculator. You will need to generate inputfile_for_aerosol_phase_matrix by using the script
|
|
142
|
+
|
|
143
|
+
PACE_Simulator/python_script/Aerosol_PhaseMatrix_Cal_InputPre.py
|
|
144
|
+
|
|
145
|
+
In this script, you also want to specify: \
|
|
146
|
+
aux_dir='PACEDATADIR/Data/' \
|
|
147
|
+
and
|
|
148
|
+
aerosol_phasematrix_file_hi and aerosol_phasematrix_file_low to be the aerosol phase matrix files that are generated with the procedure shown above.
|
|
149
|
+
|
|
150
|
+
The single scattering matrix simulation uses the Mie code developed by M. Mishchenko
|
|
151
|
+
(Scattering, absorption, and emission of light by small particles, MI Mishchenko, LD Travis, AA Lacis - 2002)
|
|
152
|
+
|
|
153
|
+
A non spherical dust scattering matrix database is included, which was provided by Prof. Ping Yang at Texas A&M University (Meng, Z., P. Yang, G. Kattawar, L. Bi, K. Liou, and I. Laszlo, 2010: Single-scattering properties of tri-axial ellipsoidal mineral dust aerosols: A database for application to radiative transfer calculations. J. Aerosol Sci., 41, 501–512, https://doi.org/10.1016/j.jaerosci.2010.02.008.)
|
|
154
|
+
|
|
155
|
+
The single scattering matrix code assumes either bimodal (NMODE=2) or trimodal (NMODE=3) size distribution, see the following structure:
|
|
156
|
+
----------------------------------------------------------------------
|
|
157
|
+
NMODE=2
|
|
158
|
+
----------------------------------------------------------------------
|
|
159
|
+
Available aerosol modes:
|
|
160
|
+
|
|
161
|
+
*fine mode (fmfrac)
|
|
162
|
+
dust like (rf1)
|
|
163
|
+
water soluble (rf2)
|
|
164
|
+
BrC (rf3)
|
|
165
|
+
soot (1-(rf1+rf2+rf3))
|
|
166
|
+
|
|
167
|
+
*coarse mode (1-fmfrac)
|
|
168
|
+
sea salt (cmsfrac)
|
|
169
|
+
dust (1-cmsfrac)
|
|
170
|
+
|
|
171
|
+
----------------------------------------------------------------------
|
|
172
|
+
NMODE=3
|
|
173
|
+
----------------------------------------------------------------------
|
|
174
|
+
Available aerosol modes:
|
|
175
|
+
|
|
176
|
+
*fine mode (fmfrac)
|
|
177
|
+
water soluble (rf2)
|
|
178
|
+
BrC (rf3)
|
|
179
|
+
soot (1-(rf2+rf3))
|
|
180
|
+
|
|
181
|
+
*dust mode (dustfrac)
|
|
182
|
+
dust like (dsfrac)
|
|
183
|
+
dust (1-dsfrac)
|
|
184
|
+
|
|
185
|
+
*coarse mode (1-(fmfrac+dustfrac))
|
|
186
|
+
coarse mode includes sea salt only
|
|
187
|
+
|
|
188
|
+
----------------------------------------------------------------------
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
*Note: Different sets of parameters are used for nmode=2 and nmode=3
|
|
192
|
+
For nmode=2 dustfrac and dsfrac do not exist
|
|
193
|
+
For nmode=3 rf1 and cmsfrac do not exist
|
|
194
|
+
|
|
195
|
+
References:
|
|
196
|
+
|
|
197
|
+
Zhai, P., Hu, Y., Trepte, C. R., Lucker, P. L. (2009). A vector radiative transfer model for coupled atmosphere and ocean systems based on successive order of scattering method. Optics express, 17(4), 2057-2079.
|
|
198
|
+
|
|
199
|
+
Zhai, P., Hu, Y., Chowdhary, J., Trepte, C. R., Lucker, P. L., Josset, D. B. (2010). A vector radiative transfer model for coupled atmosphere and ocean systems with a rough interface. Journal of Quantitative Spectroscopy and Radiative Transfer, 111(7), 1025-1040.
|
|
200
|
+
|
|
201
|
+
Zhai, P., Hu, Y., Josset, D. B., Trepte, C. R., Lucker, P. L., Lin, B. (2013). Advanced angular interpolation in the vector radiative transfer for coupled atmosphere and ocean systems. Journal of Quantitative Spectroscopy and Radiative Transfer, 115, 19-27.
|
|
202
|
+
|
|
203
|
+
Zhai, P., Hu, Y., Winker, D. M., Franz, B., Boss, E. (2015). Contribution of Raman scattering to polarized radiation field in ocean waters. Optics Express, 23(18), 23582-23596.
|
|
204
|
+
|
|
205
|
+
Zhai, P., Hu, Y., Winker, D. M., Franz, B., WERDELL, J., BOSS, E. (2017). Inelastic vector radiative transfer solution in ocean waters. Optics Express, 25, A223-A239.
|
|
206
|
+
|
|
207
|
+
Zhai, P., Boss, E., Franz, B., Werdell, J., Hu, Y. (2018). Radiative transfer modeling of phytoplankton fluorescence quenching processes. MDPI Remote Sensing, 10(8), 1039.
|
|
208
|
+
|
|
209
|
+
Zhai, P., Hu, Y. (2022). An improved pseudo spherical shell algorithm for vector radiative transfer. Journal of Quantitative Spectroscopy and Radiative Transfer, 282, 108132. https://www.sciencedirect.com/science/article/pii/S0022407322000693.
|
|
210
|
+
|
|
211
|
+
Zhai, P., Gao, M., Franz, B. A., Werdell, P. J., Ibrahim, A., Hu, Y., Chowdhary, J. (2022). A Radiative Transfer Simulator for PACE: Theory and Applications. Frontiers in Remote Sensing, 3. https://www.frontiersin.org/article/10.3389/frsen.2022.840188.
|
|
212
|
+
|