Шаг 7. Расширение без правки ядра

Типовые расширения делаются через реестры (Скриптовый слой (Core/Scripting)), не правкой уже написанных файлов ядра.

Новый материал

classdef MyMaterialPhysicalConstants < SuperconductorPhysicalConstants
    methods
        function obj = MyMaterialPhysicalConstants()
            obj.FermiEnergy_SI = ...;
            obj.Sigma_SI = ...;
            obj.VelocityFermy_SI = ...;
            obj.FreePathLength_SI = ...;
            obj.Tcritical_SI = ...;
            obj.CrossSectionalArea_SI = ...;
        end
    end
end

MaterialRegistry.Register("MyMaterial", @MyMaterialPhysicalConstants);
cfg.Material = "MyMaterial";

Регистрация — в любом месте, выполняемом до первого использования (удобно — в начале своего скрипта, сразу после Namespaces).

Новая физическая процедура

Если для представления не хватает готовой процедуры (например, для Matsubara — см. Шаг 3. Какие величины считать), она добавляется в ProcedureMap через RepresentationRegistry.Register, переопределяя весь entry представления с уже дополненной картой процедур. Практически проще всего делать такое расширение сразу в самом ядре (Metatron), а не только в Metatron-Research, — процедура физическая, а не специфичная для одной задачи.

Новое представление

Для полностью нового математического подхода (не EnergyBased и не Matsubara) нужно предоставить RepresentationRegistry.Register(name, entry) с entry:

Поле entry

Что должно быть

BuildInitialConditions

@(Length_nm) -> InitialConditions — как построить начальные условия

BuildSplitting

@(GridConfig) -> Splitting — адаптер сетки для представления

RunPipeline

@(calculation, useParallel, procHandles) -> calculation

ProcedureMap

containers.Map: имя → struct('Handle', @fn, 'Description', "...")

DefaultProcedureNames

string-массив — какие процедуры считать по умолчанию

Это тот же контракт, которому уже следуют EnergyBased и Matsubara (см. исходники RepresentationRegistry.m в ядре) — новый пункт регистрируется рядом, существующие два не трогаются.

Многослойные структуры (пока не реализовано)

CalculationConfig.Layers (массив LayerSpec) уже принимается декларативным слоем, но CalculationBuilder сегодня требует ровно один элемент — физическая модель многослойной структуры (Core/Model/Structures) пока не написана. Это ближайшее направление развития ядра: когда появится составной класс структуры, скриптовый слой не потребует изменений — только CalculationBuilder.Build научится понимать Layers длиннее 1.