Mie Scattering
Last update: April 12th (2024) Hajime Kawahara
Currently, ExoJAX
relies entirely on PyMieScatt
(https://github.com/bsumlin/PyMieScatt) for Mie Scattering. The opa
for Mie Scattering is OpaMie
.
There are two methods for calculations: directly calling PyMieScatt
and using pre-calculated grid models (miegrid).
Direct calculation
The direct calculation method is conducted as follows.
Please note that the initialization of OpaMie requires a particulate database (pdb
).
from exojax.spec.opacont import OpaMie
opa = OpaMie(pdb_nh3, nus)
sigma_extinction, sigma_scattering, asymmetric_factor = opa.mieparams_vector_direct_from_pymiescatt(rg, sigmag)
#sigma_extinction, sigma_scattering, asymmetric_factor = opa.mieparams_vector(rg,sigmag) # if using MieGrid
For specific examples, please refer to ../tutorials/Jupiter_Hires_Modeling for example.
Warning
The cloud opacity and asymmetric factor calculated using this method are not differentiable because it directly calls PyMieScatt
.
If you need these values to be differentiable, you must create a miegrid and interpolate the opacity and asymmetric factor from the miegrid as shown below.
Generates custom miegrid (mgd)
You can create a miegrid as shown in the code below.
from exojax.spec.mie import compute_mie_coeff_lognormal_grid
from exojax.spec.pardb import PdbCloud
pdb = PdbCloud("NH3")
filename = "miegrid_lognorm_"+pdb.condensate+".mgd"
print(filename)
Nsigmag = 10
sigmag_arr = np.logspace(-1,1,Nsigmag)
Nrg = 40
rg_arr = np.logspace(-7,-3,Nsigmag) #cm
miegrid = compute_mie_coeff_lognormal_grid(
pdb.refraction_index,
pdb.refraction_index_wavelength_nm,
sigmag_arr,
rg_arr,
npart=1.0,
)
np.savez(filename, miegrid)
Gets the cloud opacity and asymmetric factor from the miegrid
Once the miegrid is created, you can interpolate to obtain the opacity and asymmetric factor from the mie parameters, using opa.mieparams_vector
.
sigma_extinction, sigma_scattering, asymmetric_factor = opa.mieparams_vector(rg, sigmag)
The opacity obtained in this way is differentiable. You can use rg
and sigmag
as parameters for gradient-based optimization or HMC-NUTS.