Миллеровские индексы в кристаллографии

вопросы строения молекул и квантовой химии
Аватара пользователя
Vit Nhoc
Сообщения: 1135
Зарегистрирован: Сб июн 06, 2015 12:28 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Vit Nhoc » Чт июн 08, 2023 4:49 pm

Гесс писал(а):
Чт июн 08, 2023 1:07 pm
Vit Nhoc писал(а):
Чт июн 08, 2023 12:43 pm
9) Осталось нажать del. Хотя дальше придётся исхитряться ещё.

Возможно, мне стоит добавить опцию: "Удалить все атомы, находящиеся с одной стороны текущей плоскости, точнее с той стороны, где нет выделенного атома".
Задача еще не дорешана - пока что мы построили просто некий кластер в нужной ориентации но у него нет PBC. Нам нужно задать направление и длину новых векторов а1 и b1 (в данном конкретном случае a1 горизонтальный в плоскости картинки и имеет длину корень из (a0 в квадрате плюс с0 в квадрате), а b1 перпендикулярен плоскости рисунка и имеет ту же длину что и b0)

удалять атомы сверху надо, кроме того надо удалять и атомы снизу которые ниже чем то число слоев что мы хотим иметь.
Я надеюсь что если пойму что нужно кристаллографистам, смогу придумать что-то оригинальное и относительно удобное, вроде Edit/Set point group. Пришла в голову мысль, что надо реализовать также Edit/Set space group, но об этом позже.
Если есть задача - провести плоскость по трём атомам и оставить только атомы, находящися с одной стороны этой плоскости на расстоянии не больше c1, то как это можно сделать:
1) Добавить опцию "Выделить все атомы по заданную сторону от текущей плоскости, на расстоянии не большем чем заданное";
2) Добавить опцию "Добавить вторую плоскость на заданном расстоянии от первой, параллельную первой", и далее "выделить все атомы между двумя плоскостями";
3) Добавить опцию "Повращать молекулу так, чтобы текущая плоскость совпадала с осями x и y". И также добавить "умное выделение атомов": выделить все атомы с координатой z не меньше -0.0000001A (полагаю понятно почему не 0 - некоторые атомы могут лежать на этой плоскости и добавятся численные ошибки).
Третий вариант мне кажется предпочтительным, но тогда, возможно, надо будет добавить ещё одну опцию: обратное преобразование координат назад, т.е. обратное тому, которое было когда мы помещали плоскость на xy. Это надо добавить опцию к меню Edit/Translate atomic coordinates, чтобы вращать/транслировать молекулу по матрице 4*3, и построить обратную матрицу той, что использовалась для этого помещения плоскости на xy. Надеюсь я понятно объяснил.

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Чт июн 08, 2023 11:03 pm

Гесс писал(а):
Чт июн 08, 2023 1:00 pm
7) Сейчас можно сделать так: снова выделить эти три атома и выбрать Edit/Translate atomic coordinates/Move XYZ axes to 3 selected atoms. Вся молекула повернётся так, что эти три выделенных атома будут находиться на плоскость XY.
у меня эта фича переориентирует в плоскость x-z, это безусловно намного лучше чем ничего, но x-y все таки лучше.

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Пт июн 09, 2023 12:17 am

https://web.iit.edu/sites/web/files/dep ... ndices.pdf

https://ocw.mit.edu/courses/12-108-stru ... 1_lec8.pdf

Немного литературки, я пока прописываю алгоритм включая новые вектора.

Особенно рекомендую https://www.doitpoms.ac.uk/tlplib/mille ... intall.php
(в конце страницы эти же слайды есть на русском)

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Пт июн 09, 2023 1:33 am

Vit Nhoc писал(а):
Чт июн 08, 2023 4:49 pm
Третий вариант мне кажется предпочтительным, но тогда, возможно, надо будет добавить ещё одну опцию: обратное преобразование координат назад, т.е. обратное тому, которое было когда мы помещали плоскость на xy. Это надо добавить опцию к меню Edit/Translate atomic coordinates, чтобы вращать/транслировать молекулу по матрице 4*3, и построить обратную матрицу той, что использовалась для этого помещения плоскости на xy. Надеюсь я понятно объяснил.
Если честно то я понял плохо.
Но если есть уже закодированный трансформатор координат то на мой взгляд можно сделать так:

- Пользователь вводит индексы L,M,N и толщину среза D (эту букву мы кажется еще не использовали) и размер вакуума E (опционально можно еще "сдвиг от низа" F с дефолтом в 1 ангстрем, но это я уже украшательством занимаюсь)

- программа генерирует большой supercell (мне кажется 6x6x6 должно хватать, но можно и больше)

- программа вставляет 3 dummy atoms согласно координатам X1=[1/L,0,0], X2=[0,1/M,0], X3=[0,0,1/N], если какая то из этих точек невозможна ввиду деления на ноль то она заменяется на дубль существующей точки сдвинутой на вектор вдоль которого "ноль". То есть для среза 0 1 0 будет построена одна "реальная" точка 0,b,0 , а также ее дубли a,b,0 и 0,b,c. Я даю фракционные координаты, в случае ортогональной ячейки фракционные нули это и декартовы нули, в случае неортогональных ячеек - первая цифра второго думми и первые две цифры третьего думми могут быть и ненулями в декартовых координатах)

- проводится поворот всего таким манером, чтобы 3 заданные точки лежали в плоскости x,y

Теперь продолжение нашей задачи - после нарезки у нас должно получиться PBC (ок, двухмерное), то есть нам надо опознать направления и длины векторов. К счастью когда мы обозначили 3 dummy atoms - это углы нашей ячейки (3 из 4 на одной стороне, а сторона ячейки - параллелограмм).

- находим расстояния между каждой парой точек X1-X2, X1-X3, X2-X3, выбираем два наименьших. Это будут длины наших векторов. Тот атом который попал в оба вектора я буду далее называть главным Xглавн. Два другие dummy это Xближн и Xдальн. Этот шаг независим от предыдущего и может быть сделан до него.

- проводится поворот всего вокруг оси z таким манером чтобы Xглавн и Xдальн лежали на оси x (этот поворот может быть совмещен с предыдущим поворотом)

- проводится смещение всего таким манером чтобы Xглавн попал в начало координат в точку 0,0,D (чисто чтобы потом лишний раз не таскать)

Порядок поворотов не играет роли.

теперь мы можем сказать что Lattice vectors если без вакуума у нас такие:
a - координаты Xдальн с нулем по z
b - координаты Xближн с нулем по z
с - 0.0 0.0 D

Изначально я здесь прописал алгоритм с созданием всех углов параллелограмма, но потом решил что нафиг надо и можно решить проще.
- создается четвертый угол параллелограмма (это дубликат точки Xближн сдвинутый вдоль оси x на длину "длинного" вектора (Xглавн-Xдальн)
- создаются еще 4 угла - дубликаты имеющихся точек, смещенные на -D вдоль оси z, то есть лежащие в плоскости x-y
теперь у нас есть параллелепипед и нам просто нужно удалить все атомы которые не попали вовнутрь.
Если делать это в декартовых координатах то начало вроде бы простое:
1) удаляем все атомы ниже плоскости xy (те у кого координата z меньше чем 0-погрешность)
2) удаляем все атомы выше D (те у кого координата z выше чем D-погрешность)
но с остальных 4 сторон это в случае неортогональной ячейки не так просто, можно конечно повращать ячейку и пообрубать тупо по декартовым координатам, но как альтернатива:


- перегоняем все координаты в фракционные (Lattice vectors прописали выше) и тупо обрубаем всех кто не попал в диапазон от (0-погрешность) до (1-погрешность) по любой координате

Теперь у нас есть все нужные нам атомы, и есть ячейка, но нет вакуумного зазора, ну так это ж очень просто:

- возвращаем атомы из фракционных в декартовы

- переписываем в Lattice vectors последнюю строку как

с - 0.0 0.0 D+E

- Bingo, Вы прекрасны!

Наверняка это можно сделать математически изящнее или программисстки менее убого, но программист из меня :003: так что это чтото по типу общей блоксхемы.

P.S. по сути получилось что все нужные модули в Chemcraft уже есть, их нужно только правильно скомпоновать

Аватара пользователя
Vit Nhoc
Сообщения: 1135
Зарегистрирован: Сб июн 06, 2015 12:28 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Vit Nhoc » Пн июн 12, 2023 7:10 pm

Давайте продолжим. Как построить сечение я почти разобрался, вопрос что с этим делать дальше, чтобы было как можно удобнее. И пока такой вопрос: верно ли что стандартными параметрами ячейки (a,b,c,alpha,beta,gamma) можно описать любой кристалл, и если да - то как.
Из этих стандартных параметров ячейки пересчитывается матрица 3*3*3. Каждая ячейка во фракционных координатах это куб [0-1;0-1;0-1], имеющий 6 граней и соответственно граничащий с шестью другими ячейками. Но например для гексагональной сингонии каждая ячейка граничит с восемью другими ячейками. Как же можно описать гексагональную сингонию параметрами a,b,c,alpha,beta,gamma?
Тут должно быть удобно рассматривать двумерные примеры. Можно ли описать гексагональную упаковку на плоскости совокупностью параллелограмов? Могу предположить, что можно выбрать большой параллелограмм, в который войдёт сколько-то шестиугольников и таким образом упаковка из шестиугольников опишется параллелограммным PBC.

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Пн июн 12, 2023 11:08 pm

Vit Nhoc писал(а):
Пн июн 12, 2023 7:10 pm
Давайте продолжим. Как построить сечение я почти разобрался, вопрос что с этим делать дальше, чтобы было как можно удобнее. И пока такой вопрос: верно ли что стандартными параметрами ячейки (a,b,c,alpha,beta,gamma) можно описать любой кристалл, и если да - то как.
Из этих стандартных параметров ячейки пересчитывается матрица 3*3*3. Каждая ячейка во фракционных координатах это куб [0-1;0-1;0-1], имеющий 6 граней и соответственно граничащий с шестью другими ячейками. Но например для гексагональной сингонии каждая ячейка граничит с восемью другими ячейками. Как же можно описать гексагональную сингонию параметрами a,b,c,alpha,beta,gamma?
Тут должно быть удобно рассматривать двумерные примеры. Можно ли описать гексагональную упаковку на плоскости совокупностью параллелограмов? Могу предположить, что можно выбрать большой параллелограмм, в который войдёт сколько-то шестиугольников и таким образом упаковка из шестиугольников опишется параллелограммным PBC.
В общих чертах как то да. То есть мы могли бы придумать какую то специфичную нотацию исключительно для гексагональной сингонии, и скажем для графена у нас была бы ячейка с одним атомом (и одним параметром "длина стороны"). И еще по одной нотации для каждой сингонии. Получился бы редкий бардак.

Параллелепипед (a,b,c,alpha,beta,gamma) позволяет описать любую трехмерную периодическую структуру.
А параллелограмм (a,b,gamma) - любую двухмерную периодическую структуру. Двухмерный пример гексагональной решетки - графен или гексагональный нитрид бора (графен в котором каждый второй атом замещен на бор, а каждый не бор - на азот). Вот давайте сначала поговорим о нитриде бора. Давайте возьмем любой атом бора и найдем недалеко от него эквивалентный ему атом бора (а они все эквивалентны). После того как вы это сделали - у вас появился вектор между этими атомами и это первый вектор PBC (если мы сдвинемся от второго атома на тот же вектор - мы опять попадем в эквивалентный бор). Теперь найдем еще один эквивалентный бор который не лежит на нашем первом векторе. Теперь у нас есть два вектора и угол между ними. А как же азот? А посмотрите, когда боры переходят в боры - азоты накладываются на азоты. Вы можете сдвинуть свой исходный параллелограмм на любое полное число векторов вдоль соответсвующих векторов и боры наложатся на боры а азоты на азоты. Вы можете замостить всю поверхность своими параллелограммамми. Это и есть PBC. Но постойте, а какой же у вас паралеллограмм? Да ваще пофиг! Их десятки (формально бесконечное количество, но на конечном куске нитрида бора вы много вариантов не нарисуете). И любой из них является валидной ячейкой (cell). Но среди них есть наименьший паралелограмм (в случае нитрида бора это ромб). Это элементарная ячейка (primitive cell, часто ее называют unit cell). Именно ее экспериментаторы дают в своих cif. В случае нитрида бора в элементарной ячейке оказывается только один атом азота и один бора. Любая другая ячейка/параллелограмм это supercell. Например на нитриде бора достаточно просто построить прямоугольую ячейку. В ней будет два бора и два азота. Да, количество атомов в supercell всегда кратно primitive cell.
Теперь давайте вернемся к графену. Как бы вы не рисовали - у вас не получится сделать ячейку меньше чем ромб от нитрида бора. Да, в ней два вроде как одинаковых углерода, но вот такая в зизни зопа (предлагаю не трогать пока симметрию внутри ячейки).
Должны ли веторы суперячейки быть кратными векторам примитивной ячейки? - Нет
параллельны? - нет.
угол между веторами? - никому ничего не должен.
Является ли unit cell единственным? Ну, тут сложнее - мы ж не договорились который атом в нашем параллелограмме является "исходным". Это может быть атом у острого или тупого угла. Длина векторов не изменится, но угол гамма может быть как 60 так и 120. Но это не суть важно. Нас устроит любая запись, главное чтоб работало.

Unit cell может быть крохотным - скажем bulk переходного металла можно (технически хотя так редко кто делает) описать ячейкой с одним атомом.
Unit cell может быть веьма крупным. Скажем в ячейке HKUST-1 (без учета симметрии) будет 12 атомов меди, 72 углерода, 48 кислородов и 24 водорода. А если вы вдруг захотите HKUST-1 ортогональный supercell - домножаем всё на 4. Дорогое удовольствие.

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Пн июн 12, 2023 11:16 pm

попробуйте абстрагироваться от цвета доски и найти примитивную здесь:
Screenshot 2023-06-12 at 22.15.14.png
Будет ли она ортогональной? Можно ли нарисовать некий supercell в котором вектора параллельны доске?
А если учитывать цвета доски - как будет выглядеть примитивная?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Vit Nhoc
Сообщения: 1135
Зарегистрирован: Сб июн 06, 2015 12:28 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Vit Nhoc » Вт июн 13, 2023 6:04 pm

Я чуть поскрипел мозгами, нашёл cif-ник графена и стало чуть яснее. Взгляните, я тут правильно поставил номера?
graphene.jpg
Сразу мысль: может быть мне надо добавить в Chemcraft простановку таких надписей на атомах (варианты - номер атома в каждом crystal cell, номер ячейки по x (или там a), номер ячейки по y, номер ячейки по z)?

Я долго пытался нарисовать корректные 2d ячейки среза графена, пришёл к выводу, что надо добавить в Chemcraft опцию "повернуть камеру так что она будет смотреть вдоль линии между двумя выделенными атомами". После некоторых трудностей удалось построить такой рисунок:
graphenecell.jpg
Возможно надо доработать такие моменты в Chemcraft?
Вот ещё раз та же картинка:
graphenenums.jpg
Как я понимаю, в cif файле нет явной информации, что длины связей 20-21 и 19-20 равны, и что вообще если повернуть картинку на 120 градусов, то она воспроизведётся. Есть ли модели кристаллов, которые всё это описывают? Насколько они нужны?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Вт июн 13, 2023 11:09 pm

Vit Nhoc писал(а):
Вт июн 13, 2023 6:04 pm
Взгляните, я тут правильно поставил номера?
Да

Vit Nhoc писал(а):
Вт июн 13, 2023 6:04 pm
Сразу мысль: может быть мне надо добавить в Chemcraft простановку таких надписей на атомах (варианты - номер атома в каждом crystal cell, номер ячейки по x (или там a), номер ячейки по y, номер ячейки по z)?
Можно, причем даже без трех последних номеров. Просто чтоб было видно что атомы эквивалентны. Это существенный элемент когда пытаются построить внутренние координаты в периодике а они начинают сходить с ума.
Vit Nhoc писал(а):
Вт июн 13, 2023 6:04 pm
Я долго пытался нарисовать корректные 2d ячейки среза графена, пришёл к выводу, что надо добавить в Chemcraft опцию "повернуть камеру так что она будет смотреть вдоль линии между двумя выделенными атомами". После некоторых трудностей удалось построить такой рисунок:

graphenecell.jpg

Возможно надо доработать такие моменты в Chemcraft?
Ну не буду же я отказываться от лишних фишек. Может кому то и надо.
Vit Nhoc писал(а):
Вт июн 13, 2023 6:04 pm
Вот ещё раз та же картинка:

graphenenums.jpg

Как я понимаю, в cif файле нет явной информации, что длины связей 20-21 и 19-20 равны, и что вообще если повернуть картинку на 120 градусов, то она воспроизведётся. Есть ли модели кристаллов, которые всё это описывают? Насколько они нужны?
если мы не используем информацию о симметрии (я предлагаю не использовать) - то да, этой информации несимметричный циф не содержит. более того равентсво этих связей это частный случай. Если вы в каждую ячейку добавите по одному кислороду то получите графеноксид формулы C2O, допустим он сидит на всех связях которые на данном рисунке горизонтальные. Здесь и сейчас (в графене) связи 7-20, 19-20 и 21-20 равной длины. А вот в графеноксиде 19-20 будет короче чем две другие, хотя сам ромб практически не изменится.

Аватара пользователя
Vit Nhoc
Сообщения: 1135
Зарегистрирован: Сб июн 06, 2015 12:28 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Vit Nhoc » Пн июн 19, 2023 5:04 pm

Гесс
Извините, я до сих пор не могу въехать в то что вы рассказываете, может состарился уже.
- находим расстояния между каждой парой точек X1-X2, X1-X3, X2-X3, выбираем два наименьших. Это будут длины наших векторов. Тот атом который попал в оба вектора я буду далее называть главным Xглавн. Два другие dummy это Xближн и Xдальн. Этот шаг независим от предыдущего и может быть сделан до него.
Почему вы написали "пара точек", если здесь точек три? И почему именно X, а не Y?
В любом случае, я пока думаю о том, можно ли сделать утилиту "Set PBC", похожую на Set point group, возможно она пригодится для чего-то ещё, кроме миллеровских индексов. Я сейчас это представляю так: Chemcraft будет перебирать все направления и находить возможные PBC во всех направлениях.
Если человек, имея кубическую решётку и построив ячейки 5*5*5, далее выберет Edit/Set PBC, среди вариантов будут те самые миллеровские диагональные срезы которые нам нужны, но их может быть трудно сходу найти из-за избытка вариантов; поэтому удобнее будет сначала построить сечение и обрезать атомы за ним, просто чтобы сократилось число вариантов.
И какая конечная цель - получить cif файл с двумерным PBC? Такие бывают? Ну или трёхмерным с плоскими слоями атомов в ячейках по одной из координат, как вы описали.

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Вт июн 20, 2023 9:05 pm

Упустил, отвечу ночью.

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Ср июн 21, 2023 9:31 am

Vit Nhoc писал(а):
Пн июн 19, 2023 5:04 pm
Гесс
Извините, я до сих пор не могу въехать в то что вы рассказываете, может состарился уже.
- находим расстояния между каждой парой точек X1-X2, X1-X3, X2-X3, выбираем два наименьших. Это будут длины наших векторов. Тот атом который попал в оба вектора я буду далее называть главным Xглавн. Два другие dummy это Xближн и Xдальн. Этот шаг независим от предыдущего и может быть сделан до него.
Почему вы написали "пара точек", если здесь точек три? И почему именно X, а не Y?
Точек 3. Они образуют треугольник. Нам нужны 2 короткие стороны этого треугольника. (Побочный эффект - угол между этими сторонами не меньше 60 и не больше 120 градусов.)
Большой буквой Х я обозначаю думми-атом. Каждый из атомов имеет свои собственные координаты x,y,z

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Ср июн 21, 2023 9:36 am

Vit Nhoc писал(а):
Пн июн 19, 2023 5:04 pm
В любом случае, я пока думаю о том, можно ли сделать утилиту "Set PBC", похожую на Set point group, возможно она пригодится для чего-то ещё, кроме миллеровских индексов. Я сейчас это представляю так: Chemcraft будет перебирать все направления и находить возможные PBC во всех направлениях.
Если человек, имея кубическую решётку и построив ячейки 5*5*5, далее выберет Edit/Set PBC, среди вариантов будут те самые миллеровские диагональные срезы которые нам нужны, но их может быть трудно сходу найти из-за избытка вариантов; поэтому удобнее будет сначала построить сечение и обрезать атомы за ним, просто чтобы сократилось число вариантов.
Имхо это избыточно и не нужно. Лучше дать пользователю элементарную ячейку и возможность redefine ее вектора.

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Ср июн 21, 2023 9:42 am

Vit Nhoc писал(а):
Пн июн 19, 2023 5:04 pm
И какая конечная цель - получить cif файл с двумерным PBC? Такие бывают? Ну или трёхмерным с плоскими слоями атомов в ячейках по одной из координат, как вы описали.
cif с двухмерным pbc помоему не бывает. Есть форматы которые такое поддерживают, но я не вижу в этом необходимости.
Да, я вижу максимальную пользу в получении трехмерных pbc ячеек с вакуумными прослойками по оси z. Формат - либо cif для кристаллографов, либо POSCAR для васповских расчетчиков (форматы другого софта не так далеки от васповского).

Аватара пользователя
Vit Nhoc
Сообщения: 1135
Зарегистрирован: Сб июн 06, 2015 12:28 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Vit Nhoc » Чт июл 27, 2023 12:09 pm

Прошу прощения что продолжаю тупить. Тем не менее, продолжим.
Правильно ли я понимаю, что любая единичная ячейка в трехмерном PBC - это "параллелограммоид", т.е. трехмерный аналог параллелограмма, или может корректнее это называется непрямоугольным параллелепипедом.
Теперь у меня вопрос: должен ли пользователь сам указывать координаты этого параллепипеда (A, B, C), или это может определить программа автоматически (или полуавтоматически).
Вы сказали что вам не понравилась идея Edit/Set PBC (или корректнее - Edit/Identify PBC). А если пользователь вручную скажем будет указывать: вот эти два атома эквивалентны в направлении A, эти два атома - а направлении B, и эти два атома - в направлении C. Это может быть полезно для каких-то задач?
Ещё вопрос про миллеровские срезы: правильно ли я понимаю, что на них вектор C всегда направлен строго перпендикулярно плоскости среза, а вектора A и C лежат в этой плоскости, т.е. перпендикулярны C; и вектора A и B в общем случае образуют параллелограмм.

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Чт июл 27, 2023 7:26 pm

Я с телефона, отвечу отдельными постами
Vit Nhoc писал(а):
Чт июл 27, 2023 12:09 pm
Правильно ли я понимаю, что любая единичная ячейка в трехмерном PBC - это "параллелограммоид", т.е. трехмерный аналог параллелограмма, или может корректнее это называется непрямоугольным параллелепипедом.
Теперь у меня вопрос: должен ли пользователь сам указывать координаты этого параллепипеда (A, B, C), или это может определить программа автоматически (или полуавтоматически).
Вы сказали что вам не понравилась идея Edit/Set PBC (или корректнее - Edit/Identify PBC). А если пользователь вручную скажем будет указывать: вот эти два атома эквивалентны в направлении A, эти два атома - а направлении B, и эти два атома - в направлении C. Это может быть полезно для каких-то задач?
Любая (не только примитивная) ячейка является параллелепипедом. Иногда прямоугольным. Даже если с вакуумом.
Мне не очень видится задача где параметры ячейки надо искать. Ну то есть я с ней сталкивался наверное дважды за 10 лет, когда вручную рисовал какую то дикую периодику (в кемкрафте, потом поворачивал систему и задавал параметры ячейки вручную). И думаю большинство пользователей кемкрафта сталкивались не чаще.
То есть фича не тупая, не то чтобы абсолютно бесполезная, но вряд ли высоковостребованная.

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Чт июл 27, 2023 7:33 pm

Vit Nhoc писал(а):
Чт июл 27, 2023 12:09 pm
Ещё вопрос про миллеровские срезы: правильно ли я понимаю, что на них вектор C всегда направлен строго перпендикулярно плоскости среза, а вектора A и C лежат в этой плоскости, т.е. перпендикулярны C; и вектора A и B в общем случае образуют параллелограмм.
Да, вектора A и B образуют параллелограмм.
Да, плоскость среза параллельна плоскости в которой лежат эти вектора.
Вектор С - формально не обязан быть чему то параллелен или перепендикулярен, от него в случае среза вообще мало что зависит. Но обычно да, его делают перпендикулярным срезу, это упрощает многие вещи.

Аватара пользователя
Vit Nhoc
Сообщения: 1135
Зарегистрирован: Сб июн 06, 2015 12:28 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Vit Nhoc » Чт июл 27, 2023 7:52 pm

Хорошо, тогда давайте я наконец сделаю что-то конкретное, а дальше будем думать как улучшать. Пользователь должен будет указать три вектора A, B, C: для каждого из них он выделяет два атома и выбирает Edit/Operations with vectors and planes/Add vectors or planes/Add vector by 2 or more selected atoms. После этого он выбирает Tools/Crystallography tools/Build cell by 3 vectors; программе нужно будет выбрать точку (0;;0;0), и это будут либо координаты выделенного атома, если есть один выделенный атом, либо начало первого вектора. Далее для всех атомов в молекуле по этим векторам A, B, C пересчитываются фракционные координаты, далее удаляются повторяющиеся атомы, и генерируется cif файл. Далее, если вам надо именно двумерную ячейку, вы выбираете Crystallography tools/Show duplicated cell/Show custom subcells (слева внизу) и далее для Sipercell range для Z выбираете 1. Вроде всё? Хотя возможно ещё надо обрезать по C? Как вообще превратить трёхмерный cif в двумерный - просто увеличить параметр C?

Аватара пользователя
Гесс
Сообщения: 13055
Зарегистрирован: Ср фев 15, 2012 11:19 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Гесс » Пт июл 28, 2023 12:17 am

Vit Nhoc писал(а):
Чт июл 27, 2023 7:52 pm
Пользователь должен будет указать три вектора A, B, C: для каждого из них он выделяет два атома и выбирает Edit/Operations with vectors and planes/Add vectors or planes/Add vector by 2 or more selected atoms. После этого он выбирает Tools/Crystallography tools/Build cell by 3 vectors; программе нужно будет выбрать точку (0;;0;0), и это будут либо координаты выделенного атома, если есть один выделенный атом, либо начало первого вектора. Далее для всех атомов в молекуле по этим векторам A, B, C пересчитываются фракционные координаты, далее удаляются повторяющиеся атомы, и генерируется cif файл.
Если мы сейчас решаем проблему "построение cif-а из того что пользователь намалевал" - то да, это звучит как нормальный алгоритм. Мне по прежнему кажется что люди обычно приходят уже с наличными cif-ами которые они хотят модифицировать, но если вы хотите решить эту задачу - ну не буду же я вам мешать.
Vit Nhoc писал(а):
Чт июл 27, 2023 7:52 pm
Как вообще превратить трёхмерный cif в двумерный - просто увеличить параметр C?
"двухмерных" cif не бывает (ну или я их никогда не видел). если увеличить параметр C то будет поверхность, но далеко не факт что пользователю нужна однослойная поверхность. Дайте пользователю размножить ячейку как ему нравится и потом увеличить параметр С.
Скажем в ячейке графита (не графена!) помнится 4 атома - 2 в верхнем слое и 2 в нижнем. Если я захочу моделировать поверхность графита, я возьму скажем суперячейку 3x3x2 (где 2 это число повторений по оси C), получу суперячейку графита с 4 слоями, и вот в ней добавлю вакуум по оси С.

Аватара пользователя
Vit Nhoc
Сообщения: 1135
Зарегистрирован: Сб июн 06, 2015 12:28 pm

Re: Миллеровские индексы в кристаллографии

Сообщение Vit Nhoc » Пт авг 04, 2023 4:31 pm

Я понемногу продвигаюсь, и трудно (но интересно) обдумывается задача. Сейчас я сделал построение PBC по трём указанным пользователем векторам. Программа генерирует по ним cif, и в этом cif-е можно поменять параметры ячейки ©.
Вот как я попробовал построить срез 110 кубической ячейки.
Было:
naclsource.jpg
Стало:
naclmiller110.jpg
Я пока на 100% не уверен, что у меня это реализовано правильно, поскольку до того как я увеличил C до 10 ангстрем - атомы натрия и хлора наезжали друг на друга.
Прислать вам эту версию?
Если у меня в принципе правильно, осталось решить два вопроса. Во-первых, полагаю надо как-то хитро удалять дублируемые атомы, потому что если один атом имеет фракционную координату (0;0;0), а второй (1;0;0), то программа может не разобраться, какой из них помещать в ячейку, так что надо перебирать атомы, смотреть расстояния между ними и убирать дублирующиеся.
Во-вторых, то что я сделал сейчас - весьма неудобно, надо будет автоматизировать построение миллеровских срезов по трём цифрам. И мне тут не совсем понятно: если осью C мы делаем вектор, перпендикулярный срезу, то как выбирать оси A и B, ведь их можно повернуть вокруг C?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Ответить

Вернуться в «квантовая химия и моделирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 15 гостей