Skip to content

Instantly share code, notes, and snippets.

@newmen
Last active August 29, 2015 14:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save newmen/5cb453464b6e4df4082b to your computer and use it in GitHub Desktop.
Save newmen/5cb453464b6e4df4082b to your computer and use it in GitHub Desktop.
vd-config-description
# Описываем используемые хим. элементы и их валентность
elements
atom H, valence: 1
atom C, valence: 4
# Описываем используемые крист. решётки и структуры, состоящие из атомов описанных
# выше. Поверхностные структуры не могут состоять из одновалентных атомов. Конечное
# валентное состояние атомов структур задаваемых в этом разделе, определяется при
# описании уравнений реакций кинетической схемы (см. ниже).
surface
# Задаём температуру подложки
temperature 1050, 'K'
# Кристаллическая решётка должна быть описана в классе Diamond, что должен лежать в
# директории lattices/. Директория с решётками может лежать в другом месте, и тогда
# при запуске анализа необходимо указать эту директорию через ключ --lattices=PATH.
# Класс кристаллической решётки должен содержать правила вывода для отношей между
# атомами. Используемая крист. решётка будет доступна ниже по заданному имени
# (буква `d`).
lattice :d, class: Diamond
# Наименьшая необходимая структура для описания бОльших. Для описания структуры
# необходимо задать её название, через которое, затем, к стрктуре можно будет
# обратиться.
spec :bridge
# Состоит из трёх атомов, где у каждого атома есть псевдоним (слева) и то, какой
# атом используется под этим псевдонимом (справа). Указывая атом, можно через знак
# % задать принадлежность кристаллической решётке, указанной выше. Для определения
# используемого атома можно сослаться на какую-либо структуру, и её атом, через
# псевдоним. Структура и соответствующий псевдоним должны быть определены ранее
# момента использования.
atoms ct: C%d, cl: bridge(:ct), cr: bridge(:ct)
# Связи между атомами принадлежащими одной крист. решётке должны иметь плоскость
# и направление. Порядок атомов для которых определяется связь важен, поскольку
# направления симметричны не во всех плоскостях.
# Например, запись аналогичная записи ниже, но с другим порядком связываемых
# атомов, будет выглядеть так:
# bond :cl, :ct, face: 110, dir: :front
# т.е. направление связи меняется, в плоскости 110 алмаза.
bond :ct, :cl, face: 110, dir: :cross
bond :ct, :cr, face: 110, dir: :cross
# Промежуточная не менее важная структура. Определяет возможность осаждения на
# поверхность кристалла алмаза радикалов газовой фазы.
spec :dimer
# Каждый раз, когда мы ссылаемся на другую структуру, используя дерективу `atoms`
# подразумевается использование новой структуры. Т.е. `dimer` использует 2 разных
# `bridge`. Если необходимо сослаться на разные атомы одной и той же структуры,
# то этой структуре надо дать псевдоним, через директиву `aliases` (см. ниже).
atoms cl: bridge(:ct), cr: bridge(:ct)
# В плоскости 100 алмаза связь не меняет своего направления, при изменении порядка
# связываемых атомов
bond :cl, :cr, face: 100, dir: :front
# Метил радикал адсорбированный на димер
spec :methyl_on_dimer
atoms cb: dimer(:cr), cm: C
# Когда связываются атомы, хотя бы один из которых не принадлежит крист. решётке,
# то используемая связь не может принадлежать какой-либо плоскости кристалла
bond :cb, :cm
# Описанная здесь структура не должна иметь аналогов в моделирующем коде, поскольку
# необходима только для описания прямой реакции её образования. Т.к. обратной
# реакции, её использующей, нет, то следовательно в моделирующем коде она не нужна.
spec :cross_bridge_on_dimers
# Псевдонимы используются когда необходимо сослаться на атомы одной и той же
# структуры несколько раз
aliases mod: methyl_on_dimer
# Через псевдоним говорим, что methyl_on_dimer - одна и та же структура
atoms ct: mod(:cm), cl: mod(:cb), cr: dimer(:cr)
bond :ct, :cr
# Так же как и связи, положения между атомами могут быть использованы для описания
# поверхностной структуры. При описании положений используются те же правила, что
# и для связей. Положение между атомами, хотя бы один из которых не принадлежит
# крист. решётке задано быть не может.
position :cl, :cr, face: 100, dir: :cross
# Структура необходимая для реакции разрушения "кривых" структур на поверхности,
# которые могут возникать при использовании гораздо больших кинетических схем, нежели
# описанная в этом файле.
spec :cross_bridge_on_bridges
atoms ct: C, cl: bridge(:ct), cr: bridge(:ct)
bond :ct, :cl
bond :ct, :cr
position :cl, :cr, face: 100, dir: :cross
# Метил радикал адсорбированный на мост (является частным случаем метила на димере)
spec :methyl_on_bridge
atoms cb: bridge(:ct), cm: C
bond :cb, :cm
# В разделе событий описывается кинетическая схема: реакции и локальные окружения
# для описания реакций с латеральными взаимодействиями. В данном примере латеральной
# реакций нет.
# TODO: переименовать `events` в `scheme`
events
# Реакция миграции атома углерода вдоль димерного ряда. Для описания реакции
# необходимо задать её название, что будет в дальнейшем использоваться в результатах
# анализа.
# В данном случае описывается только прямая реакция.
reaction 'migration along dimers row'
# Уравнение реакции записывается с использованием структур заданных ранее.
# Используя название структуры, круглые скобки и псевдонимы атомов, можно изменять
# валентное состояние атомов реагирующих структур.
# В данном случае для обозначения активной связи используется символ `*`. Для
# обозначения того, что атом должен иметь только одну связь с атомом принадлежащим
# кристаллической решётке, используется символ `u`.
equation methyl_on_dimer(cm: *, cm: u) + dimer(cr: *) = cross_bridge_on_dimers
# Определяя реакцию можно задать тепловой эффект реакции (в настоящий момент не
# используется, но вообще интересно было бы учитывать влияние выделяемой теплоты)
enthalpy 3.4, 'kcal/mol'
# Энергия активации может быть задана как общим значением, так и для прямой и
# обратной реакций рездельно. Для прямой реакции используется дирекетива
# `forward_activation`, а для обратной `reverse_activation`.
activation 30, 'kcal/mol'
# Частота соударения реагирующий атомов, или предъэкспоненциальный множитель в
# уравнении Аррениуса задаётся директивами `forward_rate` для прямой реакции, и
# `reverse_rate` для обратной. Если использовать сразу обе директивы, то на основе
# одной будет получено 2 разные реакции.
forward_rate 2.4e8, '1/s'
# Треугольник серпинского выглядит так же как структура, которая разрушается в данной
# реакции. Реакция необходима для разрушения структур, которые могут образоваться
# в гораздо больших кинетических схемах, например как:
# https://github.com/newmen/versatile-diamond/blob/gen/examples/diamond_cvd.rb
# В данном случае описывается только обратная реакция, не смотря на то, что
# продукты и исходные вещества в уравнении реакции заданны наоборот.
# Всё решается директивной `reverse_rate`.
reaction 'sierpinski drop'
equation methyl_on_bridge(cm: *, cm: u) + bridge(ct: *) = cross_bridge_on_bridges
activation 30, 'kcal/mol'
# Здесь определяется, что реакция только обратная
reverse_rate 4.4e9, '1/s'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment