Физическая модель (Core/Model)¶
Calculation — корневой объект задачи¶
Core/Model/Calculation.m — handle-класс, объединяющий постановку задачи
и её результат:
Поле |
Смысл |
|---|---|
|
имя задачи (используется в т.ч. для имени лог-файла) |
|
объект |
|
параметры расчёта (наследник |
|
результат (наследник |
|
флаг завершения расчёта |
|
строка длительности расчёта ( |
Методы:
Метод |
Зачем |
|---|---|
|
конструктор; |
|
сохранить весь объект в один |
|
явно подставить результат и выставить |
Структура и материал¶
SuperconductorLayer (Core/Model/Structures/Layers) — сегодня всегда
один слой: Name, Material, Length_nm, T (температура) —
и вычисляемое (dependent) свойство Length_SI (перевод нм → м, чтобы
формулы материала, работающие в СИ, не нужно было пересчитывать вручную в
каждом месте, где встречается длина). Многослойные структуры физически пока
не реализованы (см. Варианты расширения).
Material — объект-наследник SuperconductorPhysicalConstants
(Core/Model/Materials/Superconductors). Разделение «просто данные» и
«вычисляемые/dependent» здесь осмысленное:
Свойство |
Смысл |
|---|---|
|
справочные константы материала (задаются в конструкторе конкретного
материала, например |
|
безразмерная константа связи N(0)V (по умолчанию 1/5, можно переопределить) |
|
\(D = v_F l / 3\) — вычисляется на лету из |
|
то же самое: производные величины, а не независимые поля — меньше шанс рассинхронизации |
Методы:
Метод |
Зачем |
|---|---|
|
параметр порядка Δ(T) в приближении БКШ: \(\Delta = 1{.}76\,k_B T_c \tanh(1{.}74\sqrt{T_c/T - 1})\) — нужен как начальное приближение и как масштаб нормировки энергии |
|
нормировочная константа, связывающая коэффициент диффузии и Δ(T);
используется в уравнении Узаделя как параметр ОДУ ( |
|
объёмная проводимость образца длины |
Начальные условия¶
InitialConditions (абстрактный, value-класс) — общий предок,
конкретизируется на представление. Оба наследника хранят одинаковый набор
скалярных параметров задачи (SpinMixingAngle,
MisorientationAngle_Degrees, PairingInteractionConstant,
SelfConsistencySteps, OrderParameterTolerance,
InelasticScatteringConstant) плюс Split (сетка, см. ниже);
SCFIEnergyBasedInitialConditions дополнительно хранит IsTripleLayer
(переключает граничные условия S-FI / FI-S-FI). Это ровно те параметры, что
видны в декларативном CalculationConfig (Шаг 2. Все настройки конфигурации)
— скриптовый слой просто копирует одноимённые поля при сборке.
Метод: set.MisorientationAngle_Degrees — при присваивании угла в
градусах автоматически пересчитывает и кладёт в приватное поле значение в
радианах, доступное через dependent-свойство
MisorientationAngle_Rad. Смысл — солверы физически работают в радианах,
а человеку удобнее задавать градусы; хранить обе величины независимо было
бы источником рассинхронизации при ручном редактировании одной без другой.
Расчётная сетка (Splitting)¶
Splitting (абстрактный, handle) — координатная сетка Zmas на
[zStart, zEnd] из zN точек, плюс вторая ось Emas из eN
точек (смысл которой зависит от представления).
Методы базового класса:
Метод |
Зачем |
|---|---|
|
построить равномерную сетку по соответствующей оси; вызывается
автоматически из |
|
переопределить границы/число точек оси после создания объекта, с автоматическим перестроением сетки |
|
каждый наследник реализует по-своему — здесь и вшита разница между представлениями (что значит «вторая ось») |
Наследники:
EnergyBasedSplitting— вторая ось - энергия. МетодыSetZrefinement(one, second, between)/SetErefinement(one, second, between)сгущают сетку на заданном интервале — там, где физика меняется быстрее всего (например, вблизи щели), не тратя узлы сетки равномерно по всему диапазону. Дополнительно —SetOmegaGrid(start, end, n)строит сетку частот ω, нужную только проводимости (см. Шаг 3. Какие величины считать).MatsubaraSplitting— вторая ось не энергия, а частоты Мацубары (Omas, задаются методомSetOmegaSplitting) — это основная «энергетическая» ось представления Мацубары, не вспомогательная величина. МетодSetRefinement(one, second, between)— сгущение координатной сетки, аналогSetZrefinement.
Важно
Смысл Omas/OmegaGrid разный в двух представлениях: для
EnergyBased это отдельная сетка частот для проводимости (опциональная),
для Matsubara — это и есть основная сетка частот расчёта. Скриптовый
слой прячет это различие за одним полем GridConfig.OmegaGrid, но
физический смысл нужно держать в голове.
Состояние и результаты¶
PhysicsPipelineState (абстрактный) — набор булевых флагов готовности
этапов (IsSolved, IsGreenReady, IsDoSReady, IsSpinDoSReady,
IsMagnetizationReady, IsFreeEnergyReady, IsConductivityReady).
Конкретизация — SCFIEnergyBasedState / SCFIMatsubaraPhysicsPipelineState;
конструктор просто выставляет все флаги в false. Смысл существования
этого класса — не хранить «посчитано/не посчитано» неявно (проверкой
isempty на поле результата), а иметь явный, читаемый статус, который
каждая физическая процедура (Численное ядро) выставляет в true
сама, по мере готовности своей величины.
Он существует в двух экземплярах на расчёт: начальный
(InitialConditions.PhysicsPipelineStartState) и конечный
(CalculatedPhysicalProperties.PhysicsPipelineEndState) — именно второй
обновляют физические процедуры.
CalculatedPhysicalProperties (абстрактный, handle) — контейнер
результата. Для EnergyBased (SFIEnergyBasedCalculatedPhysicalProperties):
Поле |
Что это |
|---|---|
|
тензор параметров Риккати (объект |
|
запаздывающая функция Грина |
|
Δ(z) на последнем шаге и история по итерациям самосогласования |
|
плотность состояний N(z,ε), спин-разрешённая N↑/N↓(z,ε) |
|
индуцированная намагниченность M(z) |
|
свободная энергия (скаляр и разбивка по z) |
|
объект |
|
номер шага, на котором остановился самосогласованный цикл |
Метод: IsComplete() — проверяет, что ключевые поля (тензор Риккати,
функция Грина, параметр порядка) не пусты. Используется скриптовым слоем
(и стоит использовать в своих скриптах) как быстрая проверка «расчёт
реально что-то посчитал», не заглядывая в каждое поле по отдельности.