GreenTensor · документация
Открытая Python-библиотека для расчёта рассеяния электромагнитных волн на многослойных сферически-симметричных структурах методом тензорных функций Грина (TGF). Это руководство описывает класс задач, формат входных данных и содержит готовые туториалы.
Введение
GreenTensor решает задачу рассеяния плоской ЭМ-волны на сфере, состоящей
из произвольного числа концентрических слоёв с независимыми диэлектрической ε
и магнитной μ проницаемостями. В основе лежит разложение поля по сферическим
гармоникам и рекуррентный пересчёт направленных импедансов
Z̄ₙ(rₗ) и Ȳₙ(rₗ) от центра наружу через все слои — это даёт
аналитически замкнутое решение без объёмной 3D-сетки.
Когда библиотека уместна
- Структура сферически-симметрична (в полярной/сферической системе координат не зависит от θ и φ).
- Слои локально однородны и изотропны (ε, μ — комплексные скаляры).
- Среда линейная (нет нелинейных эффектов, насыщения, гистерезиса).
- Источник — плоская волна (или произвольный набор плоских волн через суперпозицию).
Когда взять что-то другое
- Не сфера: куб, цилиндр, произвольная форма → MoM, FEM, FDTD (HFSS, CST, Comsol, Meep).
- Анизотропные/ферритовые материалы → full-wave решатели с тензорными ε, μ.
- Связь с другими телами рядом → метод GMT (gigantic moment of T-matrix) или MoM.
Какие задачи можно решать
Библиотека предоставляет два класса:
RCSCalculator — расчёт диаграммы рассеяния на одной частоте,
и ScatteringCalculator — параметрический свип по электрическому размеру.
2.1 Бистатическая ЭПР (RCS) на одной частоте
Для заданных k₀a и структуры слоёв возвращает амплитудно-угловую
зависимость рассеянного поля по углу θ от 0° до 360° для:
- линейной поляризации:
E_θ(θ)иE_φ(θ); - круговой поляризации: со-поляризованная
E_opи кросс-поляризованнаяE_kp.
Все четыре результата нормированы в dB к собственному максимуму. Из них пересчитывается
бистатическое сечение рассеяния в дБ:
σ_dB(θ) = 10·log₁₀(4π·|E(θ)|²/|E_inc|²).
2.2 Параметрический свип по k₀a
Для одной фиксированной структуры слоёв возвращает интегральные сечения как функции электрического размера. Это удобно для:
- оценки резонансов на разных частотах;
- выбора оптимального диапазона частот для линз и поглотителей;
- построения «частотной подписи» цели (Mie-резонансы).
| Величина | Описание |
|---|---|
| σ_s | Полное сечение рассеяния (Total Scattering Cross-Section). |
| σ_θ, σ_φ | Парциальные вклады по поляризациям θ и φ. |
| σ_r | Радиолокационное (back-scatter) сечение, θ = 180°. |
| σ_p | Сечение в попутном направлении, θ = 0°. |
2.3 Типовые приложения
Линза Люнеберга
Ступенчатое приближение градиентного профиля ε(r), оценка ширины луча и уровня боковых лепестков. Подходит для оптимизации числа слоёв при 3D-печати.
ЭПР металлических сфер
Эталонная задача для верификации (Mie-теория) и градуировки калибровочных целей радиолокатора.
Модель головы человека
Многослойная модель «мозг – череп – кожа» для оценки SAR и валидации полевых решателей в задачах bio-EM на 1–6 ГГц.
Поглотители Salisbury / Jaumann
Ступенчатые многослойные диэлектрические покрытия с потерями для оценки ослабления в обратном направлении в широком диапазоне.
Геометрия задачи
Структура задаётся вектором радиусов a = [a₁, a₂, …, aₙ],
где aₖ — внешний радиус k-го слоя в безразмерных единицах
(нормированных на радиус внешней оболочки). Длина вектора n совпадает
с количеством слоёв в eps и miy.
aₙ = 1 (внешний радиус сферы)
n ≥ 2 (минимум — один материал + вакуум)
3.1 Соглашения
- Изнутри наружу. Первый элемент
a[0]— внутренний слой (ядро), последнийa[-1] = 1— внешний (вакуум). - Безразмерность. Все радиусы делятся на
R— внешний радиус сферы. Электрический размерk₀a— это волновое числоk₀умноженное наR; он передаётся как параметр расчёта, а не зашит в геометрию. - Строгая монотонность.
aₖ < aₖ₊₁, без совпадающих радиусов. - Внешний слой = вакуум. Удобное соглашение API; реализация рассчитывает поля над сферой как над «слоем n+1 = свободное пространство».
3.2 Примеры
Однородная сфера (простейший случай)
# PEC-сфера радиуса R: 2 слоя — металл + внешний вакуум.
a = [0.999, 1.0] # внутренний радиус почти равен внешнему
eps = [-1.7e7j, 1.0] # большое мнимое ε ≈ PEC; внешний слой — вакуум
miy = [1.0, 1.0]
Линза Люнеберга, 4 слоя
a = [0.53, 0.75, 0.93, 1.00] # границы слоёв изнутри наружу
eps = [1.86, 1.57, 1.28, 1.00] # падение ε(r) от центра к краю
miy = [1.0, 1.0, 1.0, 1.0] # немагнитные материалы
Биомедицинская модель головы (3 слоя, ~1 ГГц)
a = [0.85, 0.92, 1.00] # внутренний/мозг, череп, кожа+вакуум
eps = [45-13j, 11-2j, 1.0] # комплексные ε при ~1 ГГц
miy = [1.0, 1.0, 1.0]
a числами в метрах
или миллиметрах — это нарушит нормировку. Радиусы безразмерные:
aₖ = rₖ / R, где R — внешний радиус. Само значение
R появляется только через параметр расчёта k₀ = k·R.
Источник излучения
Источник — плоская монохроматическая ЭМ-волна, падающая вдоль оси
z (θ_inc = 0°). Сферическая симметрия задачи позволяет ограничиться
одним направлением падения — диаграмма рассеяния по углу θ от 0° до 360° даёт
исчерпывающее описание.
4.1 Электрический размер k₀a
Это безразмерная связка волнового числа и геометрии. Через неё сразу видно режим:
| Режим | Условие | Поведение |
|---|---|---|
| Рэлей | k₀a < 0.5 | Сечение растёт как (k₀a)⁴, рассеяние почти изотропное. |
| Mie / резонанс | 0.5 ≤ k₀a ≤ 10 | Острые резонансы, главные лепестки в θ = 0° и 180°. |
| Геометрическая оптика | k₀a > 10 | Лучевая картина, сечение → πa² + дифракционные поправки. |
В коде k₀a подаётся как параметр k0 (он уже включает множитель R):
rcs = RCSCalculator(k0=5, toch=10, n=4, a=a, eps=eps, miy=miy)
4.2 Поляризация
Падающая волна разложена по двум каноническим базисам — программа считает все одновременно:
- Линейная.
E_θ(TM, вертикальная поляризация),E_φ(TE, горизонтальная). - Круговая. Со-поляризованная (op, опорная) и кросс-поляризованная (kp). Удобно для оценки деполяризации.
4.3 Параметр φ (азимут)
Управляет ориентацией плоскости наблюдения для линейной поляризации. По умолчанию
φ = π/2 (плоскость yz), что соответствует стандартному
E-плану / H-плану измерений в антенной технике. Менять обычно не требуется — для
сферически-симметричных задач все азимутальные плоскости эквивалентны с точностью до
переименования E_θ ↔ E_φ.
Материальные свойства
Каждый слой описывается комплексными скалярными ε и μ
в гауссовой нормировке (относительные проницаемости):
tan δ = ε″ / ε′
5.1 Знак мнимой части
Используется соглашение e+jωt: положительная мнимая часть
соответствует усилению, отрицательная — потерям
(физически нормальные материалы). Для металла принимаем ε″ < 0
и большую по модулю; для вакуума ε″ = 0.
5.2 Типовые значения
| Материал | ε | μ | Комментарий |
|---|---|---|---|
| Вакуум / воздух | 1.0 | 1.0 | Внешний слой обязательно. |
| PLA / ABS (3D-печать) | 2.67 − 0.024j | 1.0 | Матрица для линз с переменной плотностью. |
| Тефлон (PTFE) | 2.1 | 1.0 | Низкие потери в СВЧ. |
| Феррит (NiZn) | 12 − 0.5j | 15 − 5j | Магнитные потери. |
| PEC (эталонный металл) | −1.7·10⁷j | 1.0 | Аппроксимация идеального проводника. |
| Алюминий @ 10 ГГц | 1 − 1.7·10⁷j | 1.0 | Реальная Drude-модель. |
| Биоткани @ 1 ГГц | 10–60 − (1–15)j | 1.0 | Зависит от типа ткани (Gabriel, IFAC). |
5.3 Соглашения по μ
Для немагнитных материалов всегда μ = 1 + 0j — это покрывает 99% задач
в СВЧ. Магнитные слои (ферриты, гиромагнетики при работе вне резонанса) подаются как
обычные комплексные скаляры.
Точность расчёта
Поле раскладывается в ряд по сферическим гармоникам. Параметр toch
определяет количество удерживаемых членов. Слишком маленький toch —
ряд не сходится; слишком большой — растут численные погрешности и время расчёта.
6.1 Эмпирическое правило
| k₀a | Минимум toch | Рекомендуется |
|---|---|---|
| ≤ 1 | 4 | 6 |
| 1–3 | 6 | 8 |
| 3–6 | 8 | 10 |
| 6–10 | 12 | 15 |
| 10–20 | 18 | 22 |
6.2 Как проверить сходимость
Сделайте два расчёта при toch и toch + 4. Если уровни
главных лепестков диаграммы совпадают на 0.5 dB — точности достаточно. Если
расходятся — увеличивайте.
toch = 10. Для линз Люнеберга с
k₀a = 5 этого хватает. Для крупных металлических сфер (k₀a > 10) — поднимайте до 18–22.
Туториал · Линза Люнеберга
Цель — рассчитать диаграмму направленности 4-слойной 3D-печатной линзы Люнеберга при k₀a = 5 (рабочий X-диапазон) и оценить положение главного луча и уровень боковых лепестков.
Постановка
Идеальная линза Люнеберга имеет градиентный профиль ε(r) = 2 − (r/R)².
Для 3D-печати его аппроксимируем 4 ступенчатыми слоями постоянного ε. Радиусы и
проницаемости подобраны методом минимаксного приближения профиля.
| Параметр | Значение |
|---|---|
| k₀ | 5 (k₀ · R, X-диапазон) |
| toch | 10 |
| n | 4 (3 слоя + вакуум) |
| a | [0.53, 0.75, 0.93, 1.00] |
| eps | [1.86, 1.57, 1.28, 1.00] |
| miy | [1, 1, 1, 1] |
Запуск в Python
from greentensor import RCSCalculator
import matplotlib.pyplot as plt
rcs = RCSCalculator(
k0=5, toch=10, n=4,
a=[0.53, 0.75, 0.93, 1.0],
eps=[1.86, 1.57, 1.28, 1.0],
miy=[1, 1, 1, 1],
)
rcs.run_calculation()
rcs.plot_results() # полярная и декартова диаграммы
Запуск в браузере
Откройте веб-расчётчик и выберите пресет «Люнеберг·4»:
Запустить «Люнеберг·4» в расчётчикеЧто должно получиться
- Главный луч в направлении
θ ≈ 0°(попутное направление). - Уровень боковых лепестков около −15…−18 dB.
- Симметрия диаграммы относительно оси падения.
- Время расчёта в браузере — 0.5–0.7 секунды.
Что менять для эксперимента
- Число слоёв: сравните 4 vs 9 слоёв — увидите, как падает уровень боковых лепестков.
- k₀a: при
k₀a = 2главный луч расширяется, приk₀a = 10— сужается. - Потери: добавьте
ε″ = 0.024(типичные потери PLA) — амплитуда упадёт примерно на 0.3 dB на слой.
Туториал · Металлическая сфера
Эталонная задача для верификации: ЭПР сплошной металлической сферы должна совпадать с классическим решением Mie. Используется как калибровочная цель в радиолокации.
PEC-аппроксимация
В TGF-формализме идеальный проводник задаётся материалом с очень большой по модулю
мнимой ε. Эмпирически достаточно |ε″| ≈ 10⁷ — дальнейшее увеличение
не меняет результат, только ускоряет численные переполнения.
| Параметр | Значение |
|---|---|
| k₀ | 0.5 (Рэлеевский режим) |
| n | 3 |
| a | [0.1, 0.2, 1.0] |
| eps | [−1.7·10⁷j, −1.7·10⁷j, 1.0] |
| miy | [1, 1, 1] |
Сравнение с теорией Mie
Проверьте полное сечение через свип:
ScatteringCalculator(toch=10, k0a_start=0.25, k0a_stop=5, k0a_step=0.05).
Должны увидеть классические Mie-резонансы:
- при
k₀a ≈ 1.0— первый локальный максимум (резонанс электрический); - при
k₀a ≈ 1.4— следующий пик (магнитодипольный); - сходимость к
σ_geo = π·a²(реальный размер) приk₀a → ∞.
Туториал · Биомедицинская модель головы
Трёхслойная сферическая модель «мозг – череп – кожа» позволяет быстро прикинуть диаграмму рассеяния головы на частоте 1 ГГц — типичная задача для проверки SAR-моделей и сертификации сотовых антенн.
| Слой | Радиус (норм.) | ε при 1 ГГц | Источник |
|---|---|---|---|
| Мозг | 0–0.85 | 45 − 13j | Gabriel (1996) |
| Череп | 0.85–0.92 | 11 − 2j | Gabriel (1996) |
| Кожа + воздух | 0.92–1.00 | 1.0 | — |
Постановка
rcs = RCSCalculator(
k0=2.0, toch=10, n=3,
a=[0.85, 0.92, 1.0],
eps=[45-13j, 11-2j, 1.0],
miy=[1, 1, 1],
)
rcs.run_calculation()
Запустить «Модель головы»
На что обратить внимание
- Сильное затухание во влажных тканях — диаграмма «мягкая», без острых лепестков.
- Паразитное back-scatter резонирует на размерах кратно длине волны в мозге (
λ_brain ≈ λ₀ / √Re(ε) ≈ 0.15·λ₀). - Параметры ε сильно зависят от частоты — для расчёта на других частотах берите из базы IT'IS или из таблиц Gabriel.
Туториал · Параметрический свип k₀a
Когда нужно понять как структура работает в полосе — не на одной частоте, а на
диапазоне — используйте ScatteringCalculator. Он крутит
k₀a в заданном диапазоне и для каждой точки делает полный расчёт ЭПР.
Постановка
from greentensor import ScatteringCalculator, RCSCalculator
sc = ScatteringCalculator(
toch=10,
k0a_start=0.25, k0a_stop=5.0, k0a_step=0.05,
)
# подменяем дефолтную геометрию на свою (4-слойный Люнеберг):
sc.rcs_calculator = RCSCalculator(
toch=10, n=4,
a=[0.53, 0.75, 0.93, 1.0],
eps=[1.86, 1.57, 1.28, 1.0],
miy=[1]*4,
)
k0a, sigma_s, sigma_r, sigma_p, sigma_theta, sigma_phi = sc.calculate()
Что строить
σ_s(k₀a)— общий уровень рассеяния. Резонансы видны как пики.σ_r(k₀a)— back-scatter. Главный практический показатель «заметности» цели.σ_p(k₀a)— forward. Полезно для линз/просветляющих покрытий: чем выше пропускание, тем выше σ_p.σ_θ, σ_φ— раздельно по поляризациям, видно, какая поляризация эффективнее рассеивается.
Сколько точек брать
Шаг k₀a_step = 0.05 при диапазоне 0.25…5.0 даёт 96
точек — это около 30–60 секунд в браузере. Для предварительного просмотра уменьшите до
0.1 (24 точки, 8–15 с). Для публикационных графиков — 0.02
(240 точек, ~2 минуты).
Python API · краткий справочник
Установка
# из PyPI
pip install GreenTensor
# или из исходников с примерами
git clone https://github.com/Den1sovDm1triy/GreenTensor.git
cd GreenTensor && pip install -e .
Импорт
from greentensor import RCSCalculator, ScatteringCalculator
RCSCalculator
| Параметр | Тип | Описание |
|---|---|---|
| k0 | float | Электрический размер k₀·R. |
| toch | int | Число членов ряда (см. §6). |
| n | int | Количество слоёв (= len(a)). |
| phi | float | Азимут плоскости наблюдения, рад. По умолчанию π/2. |
| a | list[float] | Радиусы изнутри наружу, последний = 1.0. |
| eps | list[complex] | Диэлектрические проницаемости. |
| miy | list[complex] | Магнитные проницаемости. |
Атрибуты результата (после run_calculation)
| Атрибут | Тип | Описание |
|---|---|---|
| teta | np.ndarray | Углы θ, рад, от −π до +π после нормировки. |
| DN_NORM_lin_dB_teta | np.ndarray | E_θ нормированная, dB. |
| DN_NORM_lin_dB_phi | np.ndarray | E_φ нормированная, dB. |
| DN_NORM_circle_dB_op | np.ndarray | Со-поляр. круговая, dB. |
| DN_NORM_circle_dB_kp | np.ndarray | Кросс-поляр. круговая, dB. |
| Mn, Nn | np.ndarray | Коэффициенты разложения (для своих визуализаций). |
ScatteringCalculator
| Параметр | Тип | Описание |
|---|---|---|
| toch | int | Число членов ряда. |
| k0a_start | float | Начало диапазона. |
| k0a_stop | float | Конец диапазона. |
| k0a_step | float | Шаг. |
| rcs_calculator | RCSCalculator | Доступ к нижележащему калькулятору; присвойте свой, чтобы задать произвольную геометрию. |
Возврат calculate()
Кортеж массивов длины N = (k0a_stop − k0a_start) / k0a_step + 1:
(k0a, σ_s, σ_r, σ_p, σ_θ, σ_φ).
Веб-расчётчик
Для быстрых проверок и демонстраций существует браузерная версия — она запускает
тот же calc.py, что и десктопная библиотека, через
Pyodide (CPython + numpy + scipy в WebAssembly).
Что отличается
- Никакой установки. Работает в любом современном браузере. Первая загрузка ~10–12 МБ (CPython + numpy + scipy), дальше всё из кеша.
- Локальный расчёт. Данные не уходят с устройства, можно работать офлайн после первой загрузки.
- 3D-редактор. Слои визуализируются в реальном времени — цвет шара меняется по ε.
- Ограничение производительности. Pyodide примерно в 2–4 раза медленнее десктопного CPython. Для свипа на 200+ точек удобнее Python локально.
Когда какой инструмент брать
Подходит для
Демонстраций, обучения, разовых прикидок, экспорта CSV для отчётов, проверок гипотез до полноценного эксперимента.
Подходит для
Параметрических исследований, оптимизации (десятки тысяч расчётов), интеграции в пайплайны, batch-ового сравнения с full-wave.
Ограничения и теоретическая база
Что метод не умеет
- Несферические тела. Куб, цилиндр, эллипсоид — нужны MoM/FEM/FDTD.
- Анизотропные материалы. Тензорные ε, μ. См. метод T-матрицы или объёмные методы.
- Переменные параметры внутри слоя. Каждый слой — однородный. Градиент аппроксимируется ступенчато (увеличением числа слоёв).
- Близкое поле и резонансы внутри слоёв. Возвращается рассеянное поле в дальней зоне. Поле внутри слоёв сейчас не выводится в публичном API.
- Несколько тел. Только одна сферически-симметричная структура. Для систем тел нужен формализм многократного рассеяния (T-матрица).
Откуда взялся метод
Реализация продолжает линию работ школы Б. А. Панченко (УрФУ, кафедра ВЧСРТ): плоский → цилиндрический → сферический случай в едином TGF-фреймворке. Опорные источники:
- Панченко Б.А. Рассеяние и поглощение электромагнитных волн неоднородными сферическими телами. М.: Радиотехника, 2013.
- Bohren C.F., Huffman D.R. Absorption and Scattering of Light by Small Particles. Wiley, 1983 — классическая Mie-теория, к которой сводится частный случай однородной сферы.
- Greenwood A.D., Jin J.-M. A novel efficient algorithm for scattering from a complex BOR using mixed FE and EBC. IEEE Trans. AP, 1999 — для сравнения с гибридным методом.
Литература и ссылки
Публикации с использованием библиотеки
- Denisov D.V., Skumatenko I.O., Fadeev V.O., Shesterov M.A. GreenTensor Electromagnetic Library for Calculate Scattering on Multilayer Spherical Structures. IEEE EDM 2024. DOI: 10.1109/EDM61683.2024.10615009
- Denisov D.V., Skumatenko I.O., Shesterov M.A. GreenTensor Electromagnetic Library for Calculating Scattering Patterns on a Human Head Model. IEEE USBEREIT 2024. DOI: 10.1109/USBEREIT61901.2024.10584060
Исходники и данные
- GitHub-репозиторий — последняя версия, issues, pull requests.
- Веб-расчётчик — браузерный сольвер на этой же странице.
- IT'IS Database — диэлектрические свойства биотканей в широком диапазоне.
- IFAC Tissue Properties — альтернативный источник по моделям Gabriel.
Связь
Вопросы и сотрудничество: dv.denisov@urfu.ru. Pull-request'ы и отчёты об ошибках — через GitHub Issues.