среда, 4 декабря 2019 г.

Спектр опалесценции

Опалесценция коллоидных частиц — очень красивое явление природы. Посмотрев на просвет пробирку с опалесцирующими частицами мы увидим, что раствор как будто окрашен, однако, это не так — сами частицы состоят из вещества не поглощающего свет. Всё дело в том, как наночастицы рассеивают излучение.

Раз мы наблюдаем цвет, и это не иллюзия, то возможно записать спектр поглощения коллоида. Затем, полученный спектр вычислим теоретически, чтобы убедиться в том, как теория рассеяния света работает в этом случае. Для расчётов нам понадобится теория Густава Ми. Для расчётов я использовал язык программирования Julia и модуль MieScatter.

Нужный модуль штатно подсоединяется к набору пакетов Julia:

pkg> add https://github.com/dronir/MieScatter.jl
после чего мы можем с ним работать.
using MieScatter
const nm = 0.001
const nλ = 1000

particle_area = π*(1.0nm)^2
x = size_parameter(1.0nm, 400nm)

S, Qsca, Qext, Qback = compute_mie(x, 2.0, [0.0])
σ_sc_mie = Qsca*particle_area

Qsca_rayleigh(λ, α, m) = 2/3π*λ^2*α^6*((m^2 - 1)/(m^2 + 2))^2
σ_sc_ray = Qsca_rayleigh(400nm, x, 2.0)
Здесь мы проверили, что в предельном случае рассеяние Ми переходит в рэлеевское рассеяние. Переходим к расчёту спектра опалесценции 1500 нм частиц полистирола в воде:
using MieScatter
# индексы преломления воды и полистирола 
# взяты с https://refractiveindex.info/
ref_indx_core(λ) = sqrt(1 + 1.4435λ^2/(λ^2 - 0.020216))
ref_indx_medium(λ) = sqrt(1.46659 + 0.293555*λ^2/(λ^2-0.0155008)) # 1.3378

const nm = 0.001
const nλ = 1000

const r_NP = 1500nm/2

λs0 = LinRange(250nm, 1000nm, nλ)

λs  = λs0 ./ ref_indx_medium.(λs0)
xs  = size_parameter.(r_NP, λs)

Qexts = zeros(nλ)

for i=1:nλ
      n_rel = ref_indx_core(λs0[i])/ref_indx_medium(λs0[i])
      S, Qscas, Qexts[i], Qback = compute_mie(xs[i], n_rel, [0.0])
end

using Printf
for i=1:nλ
       Printf.@printf("%f %f\n",λs0[i]/nm, Qexts[i])
end
Вывод спектра осуществляется командой
julia Mie-PS-latex.jl > PS-1500nm.data
Затем, файл PS-1500nm.data отрисовываем в программе Gnuplot. Результат представлен на картинке ниже. Фиолетовая кривая — наш расчёт, бирюзовая — экспериментальный спектр.