Шаг 5. Сохранение и загрузка результатов¶
Как включить сохранение¶
Сохранение — по cfg.SaveOptions. Пусто (по умолчанию) — расчёт остаётся
только в памяти. Минимально нужен OutputDir:
cfg.SaveOptions = struct('OutputDir', 'C:\Results\MyStudy');
Полный набор опций (передаются в SaverCalculation, см.
Численное ядро):
Поле |
По умолчанию |
Смысл |
|---|---|---|
|
|
базовая папка; реальный путь для каждого расчёта — глубже, см. ниже |
|
|
сохранять весь |
|
|
сохранять функцию Грина / тензор Риккати отдельными файлами (тяжёлые данные) |
|
|
сохранять историю сходимости Δ(z) по итерациям |
|
|
формат лёгких данных ( |
Куда реально ложится результат¶
OutputDir/
└── <метка_времени>_<имя_базовой_задачи>/ ← SeriesFolder, общий на всю серию
├── manifest.txt ← кто есть кто (см. ниже)
├── <TaskName элемента 1>/
│ ├── calc_<timestamp>.mat ← лёгкие данные (Δ(z), LastStep, ...)
│ └── calc_<timestamp>_fullstate.mat ← весь Calculation (если SaveFullState=true)
└── <TaskName элемента 2>/
└── ...
Папка серии (SeriesFolder) создаётся один раз на весь вызов
ParameterSeries.Expand — одинакова у всех элементов, чтобы результаты
разных серий (и повторных запусков одной и той же) не перемешивались в
одном OutputDir. Для одиночного CalculationRunner.Run без серии
(cfg.SeriesFolder пуст) — просто OutputDir/TaskName/, без
промежуточной папки.
manifest.txt¶
Обновляется автоматически после каждого запущенного элемента серии
(и CalculationRunner.RunMany, и CalculationQueue это делают сами —
руками звать не нужно):
Серия: 2026-07-28_015803_ManifestCheck
Базовая задача: ManifestCheck_SpinMixingAngle=0
Представление: EnergyBased, материал: Aluminum, длина: 50 нм
Обновлено: 2026-07-28 01:58:08
Элементов: 2
[done ] ManifestCheck_SpinMixingAngle=0 -> ManifestCheck_SpinMixingAngle=0/
[done ] ManifestCheck_SpinMixingAngle=0.1 -> ManifestCheck_SpinMixingAngle=0.1/
Упавшие элементы попадают туда же со статусом [error ] и текстом
ошибки в скобках.
Загрузка результатов обратно¶
SeriesLoader — без повторного счёта, в новой сессии MATLAB, если папка
результатов доступна на диске:
items = SeriesLoader.LoadForSeries(cfgs(1)); % путь берётся из конфига
% или напрямую по пути:
items = SeriesLoader.Load('C:\Results\MyStudy\2026-07-28_015803_ManifestCheck');
for i = 1:numel(items)
fprintf('%s: max|Delta|=%.4g\n', items(i).TaskName, max(abs(items(i).OrderParameter)));
end
Каждый элемент items(i):
Поле |
Смысл |
|---|---|
|
имя элемента и путь до его подпапки |
|
лёгкие данные, есть всегда, если элемент вообще сохранился |
|
объект |
|
|
Пример — построить график намагниченности по всем элементам серии через базовые функции визуализации (Шаг 6. Построение графиков):
items = SeriesLoader.LoadForSeries(cfgs(1));
ax = CalculationPlotter.PlotMagnetization(items(1).Calculation);
hold(ax, 'on');
for i = 2:numel(items)
CalculationPlotter.PlotMagnetization(items(i).Calculation, 'Axes', ax);
end
legend(ax, [items.TaskName]);
LoadForSeries принимает любую CalculationConfig этой серии — не
обязательно первую и не обязательно из той же переменной cfgs, что и
при запуске: подойдёт, например, q.Items(1).Config после
CalculationQueue.Load в совершенно новой сессии.