Найти в Дзене
Николай Лазарев

Разработка DFT модуля. Применение теории функционала плотности

Продолжаем развивать проект применения графовых нейронных сетей в материаловедении. На этот раз мы усиливаемся использованием теории функционала плотности DFT (Density Functional Theory) — это метод квантовой механики, который позволяет вычислять свойства материалов и молекул, основываясь не на волновых функциях, а на электронной плотности. В проекте он используется как референс: мы сравниваем предсказания модели с DFT, а также можем использовать DFT-энергии как метки для обучения. Это даёт физическую интерпретируемость и доверие к результатам. В рамках данной задачи подготовлен файл jupyter notebook (ссылка на код в GitHub), где по шагам разбирается pipline (последовательность) расчёта DFT. На основании данного пайплайна DFT-расчёта разработан модуль dft_script_module.py Модуль создан как универсальный и расширяемый инструмент для запуска DFT-расчётов с возможностью: Он предназначен как для одиночных локальных запусков, так и для автоматизированных массовых расчётов на кластере или в
Оглавление

Продолжаем развивать проект применения графовых нейронных сетей в материаловедении. На этот раз мы усиливаемся использованием теории функционала плотности DFT (Density Functional Theory) — это метод квантовой механики, который позволяет вычислять свойства материалов и молекул, основываясь не на волновых функциях, а на электронной плотности. В проекте он используется как референс: мы сравниваем предсказания модели с DFT, а также можем использовать DFT-энергии как метки для обучения. Это даёт физическую интерпретируемость и доверие к результатам.

В рамках данной задачи подготовлен файл jupyter notebook (ссылка на код в GitHub), где по шагам разбирается pipline (последовательность) расчёта DFT.

На основании данного пайплайна DFT-расчёта разработан модуль dft_script_module.py

Модуль создан как универсальный и расширяемый инструмент для запуска DFT-расчётов с возможностью:

  • выбора типа калькулятора (DFT или приближённый),
  • релаксации структуры,
  • работы с внешними CIF-файлами,
  • сохранения результатов и геометрии,
  • дальнейшего применения в научных или ML-пайплайнах.

Он предназначен как для одиночных локальных запусков, так и для автоматизированных массовых расчётов на кластере или в рамках скрининга.

Основные этапы работы скрипта

1. CLI-интерфейс (аргументы командной строки)

CLI — это Command-Line Interface — интерфейс командной строки. Позволяет управлять поведением программы с помощью аргументов, передаваемых при её запуске из терминала.

Позволяет пользователю указать:

* `--backend`: тип калькулятора (`EMT`, `GPAW`, `VASP`)

* `--input`: путь к CIF-файлу

* `--relax`: выполнять ли релаксацию

* `--save-cif`: сохранять ли структуру после расчёта

В нашем проекте графовые модели предсказывают свойства материалов. Для верификации моделей , мы можем автоматически запускать DFT-расчёты для сотен структур и сравнивать с предсказанием. CLI-интерфейс делает этот процесс гибким и полностью автоматизируемым: не нужно править код вручную для каждой структуры.

CLI-интерфейс позволяет запускать один и тот же скрипт с разными параметрами без модификации исходного кода. Используется argparse для добавления флагов --backend, --input, --relax.  Это удобно при обработке множества структур, запуске на кластере или интеграции в пайплайн скрининга (при быстром переборе и анализе большого числа кандидатов (материалов) для выбора тех, которые обладают нужными свойствами).

Примеры в bash:
python dft_script.py --input Si.cif --backend VASP --relax
python dft_script.py --backend GPAW --relax --save-cif
Этот запуск:
- использует калькулятор GPAW;
- выполнит релаксацию атомной структуры;
- сохранит финальную структуру в .cif.

2. Загрузка структуры

* Если указан `--input`: структура загружается из CIF-файла через `pymatgen`

* Если не указан — создаётся дефолтная тестовая структура (например, Cu)

3. Выбор калькулятора

DFT-калькулятор — это программа или модуль, который решает уравнения квантовой механики для моделирования поведения электронов в материале или молекуле, используя метод Density Functional Theory (DFT).

То есть, это программа, способная рассчитать:

- энергию образования,

- равновесную структуру (геометрию),

- ширину запрещённой зоны,

- плотность состояний (DOS),

- силы, напряжения и др.

Есть разные DFT-калькуляторы. Самые популярные из них VASP(Промышленный стандарт, очень точный), GPAW (Open source), Quantum ESPRESSO (Бесплатный, точный, многофункциональный) и другие. Практически все они разработаны для использования на Linux. Поэтому в данном проекте, для проверки работы кода в среде Windows учтена возможность применения модели EMT.

Подключается один из следующих калькуляторов через функцию `get_calculator()`:

* `EMT` — встроенный, быстрый, но приближённый (подходит для тестов)

* `GPAW` — open-source DFT с хорошей точностью (работает в WSL/Linux)

* `VASP` — промышленный стандарт DFT (если есть лицензия)

Функция `get_calculator()` обрабатывает автоматический выбор, недоступность библиотек и платформенные ограничения.

EMT — это встроенный эмпирический калькулятор в ASE. Он не требует сторонней установки и подходит для быстрой отладки скриптов или архитектур моделей. В проекте используется как "заглушка", если DFT-калькуляторы типа GPAW или VASP недоступны.

4. (Опционально) Релаксация структуры

Релаксация структуры (геометрическая оптимизация) — это один из ключевых шагов в DFT-расчёте. В этом процессе программа перемещает атомы и/или изменяет параметры ячейки, чтобы найти энергетически наиболее стабильную (низкоэнергетическую) конфигурацию. Цель релаксации - найти такое расположение атомов, при котором полная энергия системы минимальна, а силы на атомах близки к нулю.

Запускается только если указан флаг `--relax`:

* выполняется итерационная оптимизация геометрии с целью снижения сил

* используется оптимизатор `BFGS`

* на выходе — структура в локальном энергетическом минимуме

Что происходит на практике:

До релаксации:

- Допустим загружается структура из CIF, базы данных или строится вручную

- Она может быть: нелокально стабильной, с напряжениями в связях или нефизичной, если самостоятельно собрали структуру

Во время релаксации:

- DFT-калькулятор вычисляет силы на каждом атоме

- Алгоритм (например, BFGS или FIRE) пошагово перемещает атомы, пока силы на атомах < fmax (обычно 0.05 эВ/Å)

или пока не достигнуто минимальное изменение энергии

Релаксация — это итерационный процесс, в котором при каждом шаге считаются и полная энергия, и силы на атомах. Но ключевой критерий сходимости — именно силы: когда они становятся достаточно малы, система считается достигшей локального энергетического минимума.

5. Расчёт энергии

После релаксации или без неё выполняется один DFT-расчёт:

* считается полная энергия системы в эВ

* выводится в консоль и используется далее

Что такое расчёт энергии в контексте DFT?

Это вычисление полной энергии системы (total energy), которая включает в себя:

Эта сумма — результат решения уравнений Кона–Шэма в рамках Density Functional Theory.
Эта сумма — результат решения уравнений Кона–Шэма в рамках Density Functional Theory.

Что значит "посчитать энергию"?

Когда вызывается:

```python

energy = atoms.get_potential_energy()

```

---

DFT-калькулятор (например, GPAW, VASP, QE):

  • Инициализирует электронную плотность
  • На её основе строит эффективный потенциал
  • Решает уравнение Кона–Шэма → получает волновые функции
  • Из них строит новую плотность
  • Повторяет цикл до сходимости
  • Рассчитывает энергию и свойства

Расчёт энергии — это ключевой этап DFT-анализа. Он даёт численную оценку стабильности системы. Именно эта энергия используется для сравнения между разными структурами, расчёта энергии образования, оценки фазовых переходов и для обучения моделей ML. В проекте используется `get_potential_energy()` после релаксации для точного сравнения с предсказаниями GNN.

6. (Опционально) Сохранение структуры

Если указан флаг `--save-cif`, структура сохраняется в `.cif`, что:

* позволяет использовать результат в других программах (VESTA, VASP и т.д.)

* упрощает повторный запуск

* облегчает хранение релаксированных конфигураций

Данный этап сохранения структуры - это завершение вычислительного цикла.

Мы можем сохранить полученную, возможно релаксированную, структуру для  визуализации, повторного использования, анализа другими программами (например, VESTA, VASP, pymatgen) или для передачи на следующий этап пайплайна (например, EOS, ML-модель, скрининг).

---

Что именно сохраняется?

Это объект `atoms` (тип `ase.Atoms`), который содержит финальные координаты атомов, решётку, химический состав, а также может содержать метаинформацию (например, энергия, заряды, силы).

Если была релаксация — то это уже оптимизированная (релаксированная) структура.

Планируемое применение модуля

Сравнение предсказаний GNN-моделей с DFT

Используется для проверки точности моделей вроде CGCNN, MEGNet и др.

Автоматизированный DFT-скрининг материалов

В связке с ML-отбором → вычисление энергии образования только для отобранных кандидатов

Валидация и публикации

Используется для получения DFT-подтверждённых результатов в статьях

Дополнительные выводы и преимущества

  • Модуль написан с расширяемой архитектурой
легко добавить поддержку других форматов (POSCAR, JSON)
можно адаптировать для батч-обработки CIF-файлов
может быть интегрирован в пайплайн ML → DFT → оценка
  • Работает на Windows, Linux и WSL2, с учётом платформенных ограничений
  • CLI-интерфейс делает скрипт пригодным для использования:
вручную
в автоматических скриптах
в кластерных средах (через SLURM или shell-скрипты)
  • Поддерживает как научные расчёты, так и учебно-демонстрационные задачи

В рамках проекта реализован универсальный DFT-интерфейс `dft_script_module.py`, который позволяет запускать энергорасчёты с возможностью выбора калькулятора, релаксации и сохранения результата. Это даёт гибкий инструмент для интеграции с ML-моделями и проведения верификационных DFT-расчётов. Скрипт написан так, чтобы работать в разных системах — от ноутбука до кластера — и масштабируется под массовые расчёты.

-3