Title: | Mie scattering |
---|---|
Description: | Numerical implementation of Mie scattering theory for light scattering by spherical particles. |
Authors: | Baptiste Auguie [aut, cre] |
Maintainer: | Baptiste Auguie <[email protected]> |
License: | Mozilla Public License Version 2.0 |
Version: | 1.0 |
Built: | 2024-10-30 03:45:50 UTC |
Source: | https://github.com/nano-optics/mie |
Scattering of light by a spherical object
baptiste Auguie [email protected]
Etchegoin, P. Le Ru, E., Principles of Surface-Enhanced Raman Spectroscopy, Elsevier, Amsterdam (2009). L. Novotny, E. Hecht, Principles of Nano-optics Cambridge University Press, 2006
Other user:
mie_approximation()
,
mie_bh()
,
mie_ml()
,
mie()
Average Mloc
average_Mloc(wavelength, epsilon, radius, medium = 1, n_max = 10)
average_Mloc(wavelength, epsilon, radius, medium = 1, n_max = 10)
wavelength |
real vector |
epsilon |
complex vector |
radius |
scalar |
medium |
scalar, refractive index of surrounding medium |
n_max |
truncation order |
Enhancement factor averaged over the surface
data.frame with wavelength and Mloc
Baptiste Auguie
Efficiencies
efficiencies(x, GD, mode = c("EM", "Magnetic", "Electric"), order = NULL)
efficiencies(x, GD, mode = c("EM", "Magnetic", "Electric"), order = NULL)
x |
real vector, size parameter |
GD |
list with Gamma, Delta, A, B |
mode |
type of mode |
order |
order of multipoles |
Calculates the far-field efficiencies for plane-wave illumination
matrix of Qext, Qsca, Qabs
Baptiste Auguie
Far-field cross-sections
mie( wavelength, epsilon, radius, medium = 1, n_max = ceiling(2 + max(x) + 4 * max(x)^(1/3)), efficiency = FALSE, mode = c("EM", "Magnetic", "Electric"), order = Inf )
mie( wavelength, epsilon, radius, medium = 1, n_max = ceiling(2 + max(x) + 4 * max(x)^(1/3)), efficiency = FALSE, mode = c("EM", "Magnetic", "Electric"), order = Inf )
wavelength |
real vector |
epsilon |
complex vector |
radius |
scalar |
medium |
scalar, refractive index of surrounding medium |
n_max |
truncation order |
efficiency |
logical, scale by geometrical cross-sections |
mode |
type of mode |
order |
order of multipoles |
Homogeneous sphere illuminated by a plane wave
data.frame
Baptiste Auguie
Other user:
mie-package
,
mie_approximation()
,
mie_bh()
,
mie_ml()
gold <- epsAu(seq(400, 800)) cross_sections <- with(gold, mie(wavelength, epsilon, radius=50, medium=1.33, efficiency=FALSE)) matplot(cross_sections$wavelength, cross_sections[, -1], type="l", lty=1, xlab=expression(lambda/mu*m), ylab=expression(sigma/mu*m^2)) legend("topright", names(cross_sections)[-1], col=1:3, lty=1)
gold <- epsAu(seq(400, 800)) cross_sections <- with(gold, mie(wavelength, epsilon, radius=50, medium=1.33, efficiency=FALSE)) matplot(cross_sections$wavelength, cross_sections[, -1], type="l", lty=1, xlab=expression(lambda/mu*m), ylab=expression(sigma/mu*m^2)) legend("topright", names(cross_sections)[-1], col=1:3, lty=1)
Analytical approximation
mie_approximation( radius, wavelength, epsilon, medium = 1.33, order = Inf, efficiency = FALSE, ... )
mie_approximation( radius, wavelength, epsilon, medium = 1.33, order = Inf, efficiency = FALSE, ... )
radius |
scalar |
wavelength |
real vector |
epsilon |
complex vector |
medium |
scalar, refractive index of surrounding medium |
order |
truncation order |
efficiency |
logical, scale by geometrical cross-sections (unused) |
... |
unused |
Sphere illuminated by a plane wave
data.frame
Baptiste Auguie
Other user:
mie-package
,
mie_bh()
,
mie_ml()
,
mie()
Far-field cross-sections
mie_bh( wavelength, epsilon.core, epsilon.coating = medium^2, radius, thickness = 0, medium = 1, lmax = ceiling(2 + max(y) + 4 * max(y)^(1/3)), efficiency = TRUE )
mie_bh( wavelength, epsilon.core, epsilon.coating = medium^2, radius, thickness = 0, medium = 1, lmax = ceiling(2 + max(y) + 4 * max(y)^(1/3)), efficiency = TRUE )
wavelength |
real vector |
epsilon.core |
complex vector |
epsilon.coating |
complex vector |
radius |
scalar |
thickness |
scalar |
medium |
scalar, refractive index of surrounding medium |
lmax |
truncation order (unused) |
efficiency |
logical, scale by geometrical cross-sections |
Coated sphere illuminated by a plane wave
data.frame
Baptiste Auguie
Other user:
mie-package
,
mie_approximation()
,
mie_ml()
,
mie()
gold <- epsAu(seq(400, 800)) coated <- with(gold, mie_bh(wavelength, epsilon, radius=50, medium=1.33, efficiency=FALSE)) bare <- with(gold, mie(wavelength, epsilon, radius=50, medium=1.33, efficiency=FALSE)) matplot(coated$wavelength, coated[, -1], type="l", lty=1, xlab=expression(lambda/nm), ylab=expression(sigma/nm^2)) matlines(bare$wavelength, bare[, -1], type="l", lty=2) legend("topright", c(names(coated)[-1], "bare"), col=1:3, lty=c(1,1,1,2))
gold <- epsAu(seq(400, 800)) coated <- with(gold, mie_bh(wavelength, epsilon, radius=50, medium=1.33, efficiency=FALSE)) bare <- with(gold, mie(wavelength, epsilon, radius=50, medium=1.33, efficiency=FALSE)) matplot(coated$wavelength, coated[, -1], type="l", lty=1, xlab=expression(lambda/nm), ylab=expression(sigma/nm^2)) matlines(bare$wavelength, bare[, -1], type="l", lty=2) legend("topright", c(names(coated)[-1], "bare"), col=1:3, lty=c(1,1,1,2))
Far-field cross-sections
mie_ml( wavelength, epsilon, radii, n_max = 10, efficiency = FALSE, mode = c("EM", "Magnetic", "Electric"), order = Inf )
mie_ml( wavelength, epsilon, radii, n_max = 10, efficiency = FALSE, mode = c("EM", "Magnetic", "Electric"), order = Inf )
wavelength |
real vector |
epsilon |
list of dielectric functions, from inner to outer medium |
radii |
concentric radii of each interface, from smaller to larger |
n_max |
truncation order |
efficiency |
logical, scale by geometrical cross-sections |
mode |
type of mode |
order |
order of multipoles |
Multilayered sphere illuminated by a plane wave
data.frame
Baptiste Auguie
Other user:
mie-package
,
mie_approximation()
,
mie_bh()
,
mie()
library(dielectric) library(mie) gold <- epsAg(seq(300, 800)) a <- 30 b <- 34 c <- 35 bare <- mie(gold$wavelength, gold$epsilon, radius=a, medium=1.33, efficiency=FALSE) leps <- list(gold$epsilon, 1.33^2, 1.5^2, 1.33^2) # leps <- list(1.5^2, gold$epsilon, 1.33^2) la <- list(a,b,c) coated <- mie_ml(gold$wavelength, leps, radii=la, efficiency=FALSE) matplot(bare$wavelength, bare[, -1], type="l", lty=1, xlab=expression(lambda/mu*m), ylab=expression(sigma/mu*m^2)) matlines(coated$wavelength, coated[, -1], type="l", lty=2) legend("topright", c(names(bare)[-1], "coated"), col=1:3, lty=c(1,1,1,2))
library(dielectric) library(mie) gold <- epsAg(seq(300, 800)) a <- 30 b <- 34 c <- 35 bare <- mie(gold$wavelength, gold$epsilon, radius=a, medium=1.33, efficiency=FALSE) leps <- list(gold$epsilon, 1.33^2, 1.5^2, 1.33^2) # leps <- list(1.5^2, gold$epsilon, 1.33^2) la <- list(a,b,c) coated <- mie_ml(gold$wavelength, leps, radii=la, efficiency=FALSE) matplot(bare$wavelength, bare[, -1], type="l", lty=1, xlab=expression(lambda/mu*m), ylab=expression(sigma/mu*m^2)) matlines(coated$wavelength, coated[, -1], type="l", lty=2) legend("topright", c(names(bare)[-1], "coated"), col=1:3, lty=c(1,1,1,2))
Riccati-Bessel function psi and its derivative
psi(rho, n_max)
psi(rho, n_max)
rho |
complex vector, argument |
n_max |
integer, maximum order |
Obtained from BesselJ, converted to spherical Bessel, and scaled
a list with psi_n and psi'_n
Baptiste Auguie
Generalised susceptibility for multilayer Mie theory
susceptibilities(ls, lx, n_max)
susceptibilities(ls, lx, n_max)
ls |
list of relative refractive index |
lx |
list of size parameters |
n_max |
integer, maximum order |
Corresponds to the usual coefficients a_n, b_n, c_n, d_n
list with Gamma, Delta, A, B
Baptiste Auguie
Generalised susceptibility for the Mie theory
susceptibility(s, x, n_max)
susceptibility(s, x, n_max)
s |
complex vector, relative refractive index |
x |
real vector, size parameter |
n_max |
integer, maximum order |
Corresponds to the usual coefficients a_n, b_n, c_n, d_n
list with Gamma, Delta, A, B
Baptiste Auguie
Riccati-Bessel function xi and its derivative
xi(rho, n_max)
xi(rho, n_max)
rho |
complex vector, argument |
n_max |
integer, maximum order |
Obtained from BesselH (Hankel function), converted to spherical Hankel, and scaled
a list with psi_n and psi'_n
Baptiste Auguie