smrt-model / smrt

Snow Microwave Radiative Transfert model to compute thermal emission and backscatter from snowpack
Other
48 stars 20 forks source link

Question about the backscattering value does not increase as the frequency increases #35

Open pikaqiu2002 opened 4 weeks ago

pikaqiu2002 commented 4 weeks ago

Good afternoon all!

During my experiment, I tried to increase the frequency, from C band to X band, the backscatter value did not increase as expected in the article,but decreased. I don't know what is the reason, can someone please Help me? C band X band article

I changed the frequency from 6E9 to 9E9.

# import libraries
import numpy as np

# import smrt and related functions
from smrt import make_ice_column, make_snowpack, make_model, sensor
from smrt import PSU # g/kg -> kg/kg conversion
from smrt.atmosphere.simple_isotropic_atmosphere import SimpleIsotropicAtmosphere
from smrt.core.interface import make_interface # import lib for roughness

# ice inputs
l           = 2                             # number ice layers
thickness   = np.array([.5,.5])             # ice thickness in m
radius      = np.array([.0001,.0001])       # particle radius
stickiness  = np.array([0.3, 0.3])          # 'tau' 
temperature = np.array([260, 265])          # ice temperature in K
salinity    = np.array([5.1, 5.4])*PSU      # ice salinity profile in kg/kg
density     = np.array([0.924,0.924])       # ice density profile in kg/m^3
mean_square_slope = 0.1                       # MSS (unitless) mean_square_slope = 2*s**2/l**2

# atmosphere
atmos = SimpleIsotropicAtmosphere(10., 3., 0.90)

# create a first-year sea ice column:
ice_type = 'firstyear' # first-year or multi-year sea ice

rough_interface = make_interface("geometrical_optics",\
                                 mean_square_slope=mean_square_slope)

ice_column = make_ice_column(ice_type              = ice_type,
                             thickness             = thickness, # meters
                             temperature           = temperature,
                             microstructure_model  = "sticky_hard_spheres",
                             brine_inclusion_shape = "spheres", 
                             salinity              = salinity, 
                             brine_volume_fraction = .02,
                             radius                = radius,
                             stickiness            = stickiness,
                             density               = density,
                             add_water_substrate   = "ocean" #see comment below
                            )
ice_column.interfaces[0]=rough_interface
#ice_column.interfaces[1]=rough_interface

# snow inputs:
l_s           = 2                            # number of layers
thickness_s   = np.array([.12,.12])          # thickness per layer
density_s     = np.array([216,100])          # density profile in kg/m^3
radius_s      = np.array([.0004, .00025])    # particle radius
stickiness_s  = np.array([0.20, 0.20])       # 'tau' (stickiness)
temperature_s = np.array([253, 252])         # temperature

# create the snowpack
snowpack = make_snowpack(thickness            = thickness_s,
                         microstructure_model = "sticky_hard_spheres",
                         density              = density_s,
                         temperature          = temperature_s,
                         radius               = radius_s,
                         stickiness           = stickiness_s)

snowpack.atmosphere = atmos# from test

#add snowpack on top of ice column:
medium = snowpack + ice_column

# create geometric and EM parameters
theta        = 55           # Earth incidence angle
freq         = 9E9     # range of frequencies  (Hz)
#sensor=sensor.passive(freq, theta)
sensor=sensor.active(freq, theta)
# make model
n_max_stream = 128           # TB calcis more accurate if # of streams increased
                            # (currently: default = 32); 
                            # needs to be increased when using > 1 snow layer 
m = make_model("iba", "dort", rtsolver_options ={"n_max_stream": n_max_stream},
               emmodel_options=dict(dense_snow_correction="auto"))

# run the model for bare sea ice:
res1 = m.run(sensor, ice_column)
# run the model for snow-covered sea ice:
res2 = m.run(sensor, medium)

# print TBs at horizontal and vertical polarization:
#print(res1.TbH(), res1.TbV())
#print(res2.TbH(), res2.TbV())
print(res2.sigmaVV_dB(), res2.sigmaHH_dB())

Thank you very much!

pikaqiu2002 commented 3 weeks ago

I find the reason, when I use IEM model, it's right. But I still don't know what the specific reason is and why there is a difference in the results between the two models. Is it because the parameter ranges of the two models are different?

rough_interface = make_interface("iem_fung92",\
                                 roughness_rms=roughness_rms,
                                 corr_length=corr_length)
ghislainp commented 3 weeks ago

The geometrical optics approximation assumes the frequency is infinite, so in principle does not depend directly on frequency. It may however depends on it indirectly, through the permittivity. Over snowpack, the frequency-dependence is more likely to come from the volume under the surface (snow) rather than the surface. The IEM approximation applies in a different range of frequencies and roughness. It has a direct dependency to frequency.

pikaqiu2002 commented 3 weeks ago

The geometrical optics approximation assumes the frequency is infinite, so in principle does not depend directly on frequency. It may however depends on it indirectly, through the permittivity. Over snowpack, the frequency-dependence is more likely to come from the volume under the surface (snow) rather than the surface. The IEM approximation applies in a different range of frequencies and roughness. It has a direct dependency to frequency.

Thank you for your answer! It's really helpful for me!