Skip to content
Indujaa Ganesh edited this page Mar 28, 2022 · 11 revisions

pvert

pvert is a set of Python and MATLAB codes for modeling radar backscatter and emission from one and two layer geologic media, with or without distributed heterogeneities. Backscattering and emission from homogenous media with rough interfaces are computed using the Improved Integral Equation Method (Fung et al., 2002). EM wave propagation and scattering within a homogenous background medium with discrete, spheroidal scatterers are described using vector radiative transfer (VRT) relations.

Usage

Step 1: Create conda environment using the yml file and activate the environemnt

conda env create --name py36-vrt --file=py36-vrt.yml

conda activate py36-vrt

Step 2: Setting up matlab engine for python

MatLab needs to be installed and licensed to run the I2EM surface scattering model. Python files for calculating rough surface scattering are included for user without MatLab access, but please note that the python I2EM filed do not currently compute cross-polarized backscatter.

Activate the newly created conda environment if not already activated. Execute the following set of commands within the new conda environemnt.

cd <matlabroot>/extern/engines/python

sudo mkdir build

sudo chmod 777 build

python setup.py install

Step 3: Modify input and output variables in run_vrt.py

Open and edit the run_vrt file to set the following.

  • input parameter values in the input dictionary (description of each parameter is given in the next section)

  • types of scattering mechanism to model

  • output csv file path

Example 1 - surface scattering

dict_list = generate_dictlist(thetai=list(np.linspace(0.0, 80.0, 10)),
                                   d=[None], 
                                   atm_eps = [1+0j], 
                                   eps2r=[None], eps2i=[None],
                                   eps1r=[5, 7], eps1i=[.01],
                                   epsincr=[None], epsinci=[None],
                                   s1=[0.026, 0.04], s2=[None],
                                   cl1 = [None], cl2 = [None],
                                   psdfunc = ["exponential"],
                                   n0 = [None], volfrac = [None], 
                                   Dmax = [None], Lambda = [None], mu = [None],
                                   a=[None], abyc= [None], 
                                   alpha=[None], beta=[None])

scattertypes = [["surface"]]

outfile = "Results/surface.csv"

Example 2 - subsurface scattering

dict_list = generate_dictlist(thetai=list(np.linspace(0.0, 80.0, 10)),
                                   d=[0.126], 
                                   atm_eps = [1+0j], 
                                   eps2r=[8], eps2i=[100],
                                   eps1r=[5, 7], eps1i=[.01],
                                   epsincr=[None], epsinci=[None],
                                   s1=[0.01], s2=[0.04],
                                   cl1 = [0.5], cl2 = [0.5],
                                   psdfunc = [None],
                                   n0 = [None], volfrac = [None], 
                                   Dmax = [None], Lambda = [None], mu = [None],
                                   a=[None], abyc= [None], 
                                   alpha=[None], beta=[None])

scattertypes = [["surface", "subsurface"]]

outfile = "Results/subsurface_dielectric.csv"

Example 3 - volume scattering

dict_list = generate_dictlist(thetai=list(np.linspace(0.0, 80.0, 10)),
                                   d=[50], 
                                   atm_eps = [1+0j], 
                                   eps2r=[8], eps2i=[0.01],
                                   eps1r=[5, 7], eps1i=[.01],
                                   epsincr=[6], epsinci=[.05],
                                   s1=[0.01], s2=[0.04],
                                   cl1 = [0.5], cl2 = [0.5],
                                   psdfunc = ["exponential"],
                                   n0 = [1e8], volfrac = [.05], 
                                   Dmax = [0.016], Lambda = [205], mu = [50],
                                   a=[None], abyc= [1.0], 
                                   alpha=[0.], beta=[0.])

scattertypes = [["surface", "subsurface", "volume", "volume-subsurface"]]

outfile = "Results/volume.csv"

Note that all input parameters must be defined in the input dictionary even if all the parameters don't get used.

Step 4: Run the backscatter and emission model

Once the input and output variables have been set, execute the run_vrt.py to compute backscatter and emissivity.

`python run_vrt.py'

Description of input parameters

Parameter Descripion Units
thetai Incidence angle degrees
d Depth of layer (between atmosphere and substrate) meters
atm_eps Complex permittivity of the atmosphere
eps_1r Real part of the complex permittivity of the layer
eps_1i Imaginary part of the complex permittivity of the layer
eps_2r Real part of the complex permittivity of the substrate
eps_2i Imaginary part of the complex permittivity of the substrate
eps_incr Real part of the complex permittivity of inclusions
eps_inci Imaginary part of the complex permittivity of inclusions
s1 RMS height of the upper interface of the layer meters
s2 RMS height of the lower interface of the layer meters
cl1 correlation length of the upper interface of the layer meters
cl2 correlation length of the lower interface of the layer meters
psdfunc Size distribution of inclusions. See pytmatrix for acceptable values
n0 Number of inclusions. See pytmatrix
volfrac Volume fraction of inclusions. See pytmatrix
Dmax Maximum diameter of inclusions. See pytmatrix meters
Lambda, mu Size distribution parameters for inclusions. See pytmatrix
a Size of inclusion when not using a particle size distribution (not recommended; using size distribution is more realistic) meters
abyc Axis ratio of inclusions. See pytmatrix
alpha, beta Euler angles for inclusions. See pytmatrix degrees