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

вопросы строения молекул и квантовой химии
Аватара пользователя
Гесс
Сообщения: 13063
Зарегистрирован: Ср фев 15, 2012 11:19 pm

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

Сообщение Гесс » Пт авг 04, 2023 11:56 pm

Vit Nhoc писал(а):
Пт авг 04, 2023 4:31 pm
Я пока на 100% не уверен, что у меня это реализовано правильно, поскольку до того как я увеличил C до 10 ангстрем - атомы натрия и хлора наезжали друг на друга.
Прислать вам эту версию?
Да, это выглядит адекватно, пришлите плиз, я потестю как будет время.
Vit Nhoc писал(а):
Пт авг 04, 2023 4:31 pm
Если у меня в принципе правильно, осталось решить два вопроса. Во-первых, полагаю надо как-то хитро удалять дублируемые атомы, потому что если один атом имеет фракционную координату (0;0;0), а второй (1;0;0), то программа может не разобраться, какой из них помещать в ячейку, так что надо перебирать атомы, смотреть расстояния между ними и убирать дублирующиеся.
Да, просто берите от 0 до 0.99999, и жизнь станет проще. 4-6 девяток рулят.
Vit Nhoc писал(а):
Пт авг 04, 2023 4:31 pm
Во-вторых, то что я сделал сейчас - весьма неудобно, надо будет автоматизировать построение миллеровских срезов по трём цифрам. И мне тут не совсем понятно: если осью C мы делаем вектор, перпендикулярный срезу, то как выбирать оси A и B, ведь их можно повернуть вокруг C?
Я проверю, но по-моему стараются чтобы векторы a1 и b1 будучи перпендикулярны вектору c1 оставались в одной плоскости с векторами a0 и b0, то есть по сути становятся проекциями векторов a0, b0 на плоскость среза. Но я проверю.

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

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

Сообщение Vit Nhoc » Сб авг 05, 2023 12:21 pm

Гесс писал(а):
Пт авг 04, 2023 11:56 pm
Да, это выглядит адекватно, пришлите плиз, я потестю как будет время.
https://chemcraftprog.com/files/Chemcra ... _win64.zip

Надо сначала добавить на картинку три вектора через Edit/Operations with vectors and planes/Add vectors or planes/Add vector..., потом выбрать Tools/Crystallography tools/Build cells from Cartesian coordinates and 3 lattice vectors, потом нажать внизу-слева Crystallography tools/Show crystal cell parameters (забыл поправить название) и поменять C.
Когда выбираете Tools/Crystallography tools/Build cells from Cartesian coordinates and 3 lattice vectors, если есть один выделенный атом - он становится началом координат (точкой с фракционными координатами (0;0;0)), а если его нет - началом координат становится начало первого из векторов.

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

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

Сообщение Vit Nhoc » Вт сен 05, 2023 3:00 pm

Гесс, ну как вы попользовались?
Я готов продолжить работу, прежде всего очевидно надо избавиться от отрицательных параметров a/b/..., и потом автоматизировать построение индексов по параметрам открытого cif файла.

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

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

Сообщение Гесс » Вт сен 05, 2023 5:29 pm

Vit Nhoc писал(а):
Вт сен 05, 2023 3:00 pm
Гесс, ну как вы попользовались?
Я готов продолжить работу, прежде всего очевидно надо избавиться от отрицательных параметров a/b/..., и потом автоматизировать построение индексов по параметрам открытого cif файла.
я буду честен, я так забегался что до этого поста я тупо забыл.
Но сейчас скачал, открыл, попробовал.
Ну вообщем ощущения двоякие.
С одной стороны да, чтото строится.
но с другой стороны как то катастрофически не так и совсем не то что и как мы обсуждали.
Я взял васповский OUTCAR,
Надо сначала добавить на картинку три вектора через Edit/Operations with vectors and planes/Add vectors or planes/Add vector...,
чтобы добавить вектора по тем направлениям по которым я хотел мне пришлось сначала удвоить ячейку. ок.
два вектора я задал нормально, используя дубликаты одного и того же атома в разных ячейках. Третий вектор я хотел иметь перпендикулярным первым двум и использовал функцию добавить плоскость а потом добавить вектор перпендикулярный плоскости и проходящий через данный атом. Вообщем вектора добавились, но после этого
Tools/Crystallography tools/Build cells from Cartesian coordinates and 3 lattice vectors
не работает потому как
Screenshot 2023-09-05 at 15.32.25.png
Я предполагаю что это связано с тем что у меня добавлена плоскость, но как убрать ее не убирая вектора?
На мой взгляд было бы логично если бы скажем в окне в котором вектора можно добавить в text format (последняя команда в меню) - отображались бы уже добавленные прочими командами.

Вообщем, я убрал все, добавил 2 вектора как и раньше, добавил думмик над желаемым атомом, обеспечил ему положение 90градусов относительно плоскости, добавил третий вектор (как бы уже дофига кликов), убрал думмик,
Tools/Crystallography tools/Build cells from Cartesian coordinates and 3 lattice vectors
теперь сработал, теперь у меня получилась какая то переориентированная ячейка, которая как то не очень похожа на то с чего я начинал или на то что хотел получить.
В первую очередь мне катастрофически непонятно как можно переработать некую ячейку bulk в другую ячейку bulk на произвольных векторах? У меня был кристалл Al8Si4O20, а стал Al5Si3O14 - так делать категорически нельзя.
Возможно мне надо было задавать векторы только исходя из углов ячейки? То есть мне сперва надо добавить на ячейку минимум 4 думми-атома по углам чтобы я мог через них провести вектора? и тогда переориентироваться? Но почему не сделать это просто как мы обсуждали: предложить возможность пользователю задать новые вектора исходя из старых.

Скриншот из Material Studio постараюсь сделать вечером, но общая суть такая:
1 0 0
0 1 0
0 0 1
означает что новый вектор а идентичен старому вектору а, новый вектор b - старому вектору b, новый вектор c - старому вектору c.
1 1 0
-1 1 0
0 0 1
означает что новый вектор а является суммой старых векторов а и b, новый вектор b - является разностью старых векторов a и b, новый вектор c = старому вектору c. (обьем ячейки при этом вырастает в 2 раза, а еще новые векторы a и b перпендикулярны друг другу).
То есть одна кнопка "redefine cell", одна менюшка c 3 окошками каждое из которых воспринимает только целые числа - и это позволит пользователю переориентировать ячейку как он хочет.

Кстати дальше после получения странной ячейки (кстати а какой из трех векторов был принят за c?) просто "изменить длину вектора c" катастрофически недостаточно, там нужно сначала размножиться по этому вектору, определить что мы оставляем, убрать все лишнее, и вот тогда можно размножиться.

Вообщем я постараюсь сделать вечером описалово в картинках.

Из позитива - кемкрафт кажется умеет делать нужные манипуляции, теперь надо понять как из них собрать то что надо.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

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

Сообщение Vit Nhoc » Вт сен 05, 2023 5:44 pm

Гесс писал(а):
Вт сен 05, 2023 5:29 pm
В первую очередь мне катастрофически непонятно как можно переработать некую ячейку bulk в другую ячейку bulk на произвольных векторах? У меня был кристалл Al8Si4O20, а стал Al5Si3O14 - так делать категорически нельзя.
Это немного непонятно. А с новой ячейкой что будет, если её размножить - не все атомы отобразятся? Т.е. максимально размноженная новая ячейка не эквивалентна максимально размноженной старой? Напоминаю что для сравнения таких вещей удобно использовать Tools/Fragments extractor.
Может вы пришлёте мне тут этот ваш васповский файл, попробую повторить ваши действия.
Проблемы могут быть с положением атомов строго на 0 или 1 координатах новых ячеек, они могут быть обрезаны, а могут и не быть.

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

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

Сообщение Vit Nhoc » Ср сен 06, 2023 6:35 pm

Гесс писал(а):
Вт сен 05, 2023 5:29 pm
Вообщем вектора добавились, но после этого
Tools/Crystallography tools/Build cells from Cartesian coordinates and 3 lattice vectors
не работает потому как
Screenshot 2023-09-05 at 15.32.25.png
Я предполагаю что это связано с тем что у меня добавлена плоскость, но как убрать ее не убирая вектора?
Можно убрать часть векторов через Edit/Operations with vectors and planes/Add vectors or planes/Add vectors...text format/Update from shown (удалите часть строк и нажмите Apply).

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

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

Сообщение Vit Nhoc » Ср сен 06, 2023 6:39 pm

Третий вектор я хотел иметь перпендикулярным первым двум и использовал функцию добавить плоскость а потом добавить вектор перпендикулярный плоскости и проходящий через данный атом.
А так наверно неправильно, потому что важна длина вектора. Если просто добавить вектор перпендикулярным плоскости - длина вектора будет непонятно какая. Полагаю, тут надо проставить третий вектор тоже через атомы, выбрав эквивалентные атомы из разных ячеек. Попробуйте пожалуйста ещё раз.
Я эту задачу понимаю на двумерном аналоге: если у нас шахматная доска, мы строим миллеровский индекс по вектору (2;-1), то мы должны также построить перпендикулярный вектор [1;2], чтобы новый PBC был эквивалентен старому.

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

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

Сообщение Vit Nhoc » Ср сен 06, 2023 6:42 pm

Могу нарисовать рисунок для двумерного аналога, если вам не совсем понятно.

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

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

Сообщение Гесс » Ср сен 06, 2023 9:31 pm

Я предполагаю что я понимаю как вы это видите но это прям дофига работы пользователя для того чтобы переопределить ячейку. Я попробую до понедельника.

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

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

Сообщение Vit Nhoc » Чт сен 07, 2023 11:13 am

Гесс
Я всё-таки нарисую рисунок, это и для вас и для других. Возьмём двумерный случай, квадратная упаковка:
pic_2dcells.jpg
Предположим, мы строим миллеровский индекс (3,-1):
pic_2dcells_31mill.jpg
Тут видно, что чтобы новый PBC был эквивалентен старому, нужно выбирать вторую ось перпендикулярной первой и такой же длины:
pic_2dcells_31mill_a.jpg
Хотя, по идее, можно взять второй вектор (0;1) - тоже получится PBC, только не прямоугольный. Это не то что может потребоваться при построении миллеровских индексов?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

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

Сообщение Vit Nhoc » Сб сен 16, 2023 1:15 pm

Гесс, прокомментируйте пожалуйста мои последние картинки. Предположим, нам надо в двумерном квадратном PBC построить миллеровский индекс (3,-1), первая картинка. Это вектор A, для удобства будем считать что вектора B нет, но надо ещё построить вектор C. Этот вектор C должен быть обязательно перпендикулярен и равен по модулю A, как на второй картинке, т.е. [1;3]? Или можно построить любой C, например [0;1]?

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

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

Сообщение Гесс » Вс сен 17, 2023 12:54 am

Я приношу извинения. Да я обещал до начала этой недели и да, оно мне надо, но тупо завал и я не выгребаю.
Я наделал скриншотов из Material Studio как работает то что я бы хотел. Отправлю на почту и прилагаю тут.
Redefine lattice and Cleave Slab.zip
Vit Nhoc писал(а):
Сб сен 16, 2023 1:15 pm
Гесс, прокомментируйте пожалуйста мои последние картинки. Предположим, нам надо в двумерном квадратном PBC построить миллеровский индекс (3,-1), первая картинка. Это вектор A, для удобства будем считать что вектора B нет, но надо ещё построить вектор C. Этот вектор C должен быть обязательно перпендикулярен и равен по модулю A, как на второй картинке, т.е. [1;3]? Или можно построить любой C, например [0;1]?
я не понимаю как в двухмерном пространстве три вектора.
В двухмерном пространстве вы можете задать вектор 3, -1 и сделать срез перпендикулярный ему
3m1_srez.jpg
Какая у среза будет длина - понятно, если мы возьмем некий атом на срезе то ближайший его аналог находится на расстоянии корень из(3-квадрат + 1квадрат) = корень из 10 (красная линия). Второй вектор будет перпендикулярен срезу, его длина зависит от того какова толщина нашего среза и сколько вакуума мы хотим оставить.(черная линия)
2d-case.jpg
Теперь удаляем все лишнее и оставляем только два вектора которые задают ячейку с двухмерным срезом.
2d-cell.jpg
И кстати теперь координатная сетка тоже больше не вертикально-горизонтальная, а ось х параллельна красному вектору а ось у - черному (ну точнее это вектора параллельны осям потому как когда мы задали синий вектор 3,-1 то мы сразу все и повернули (я не стал этого делать не предыдущих картинках, если надо - сделаю)).
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

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

Сообщение Vit Nhoc » Вт сен 19, 2023 5:16 pm

Гесс, простите, я намерен и дальше к вам приставать, до победного.
Прочитал ваше письмо на почту.
1) В Materials Studio, как вы показали, есть две утилиты. Первая, Redefine lattice - это, как я понял, возможность просто поменять местами вектора A, B, C? Или сделать их под углом тоже можно? И я помню что вы объяснили, что не всякая перестановка этих векторов корректна.
2)
я не понимаю как в двухмерном пространстве три вектора.
Ну я это для наглядности написал. У нас есть двумерное пространство, мы строим вектор A; а второй вектор для удобства называем C, т.к. это аналог вектора C для трехмерной задачи. Либо можно добавить вектор B, перпендикулярный обоим.
Второй вектор будет перпендикулярен срезу, его длина зависит от того какова толщина нашего среза и сколько вакуума мы хотим оставить.
Значит если например первый вектор [3;-1], то второй не может быть [0;2]? Ну вы написали что второй вектор перпендикулярен первому. А как выбирать его длину? Про вакуум это другой вопрос - мы можем пересчитать кристалл в новые вектора, и только потом увеличить длину C. После самого пересчёта кристалла, в бесконечной повторяющейся структуре ничего не изменится. По-моему такой подход относительно нагляден и соответственно удобен.
Т.е. мой вопрос: если в нашем примере вектор A двумерной ячейки это [3;-1], то вектор C это [1;3] и никак иначе? Или можно выбрать например [2;6]? Или, как мне чувствуется, вектор C=[1;3] это один вариант миллеровского индекса, а C=[2;6] другой?
3) Вторая утилита MS - Cleave Surface. Правильно ли я понимаю, что в моём вопросе выше про выбор между C=[1;3] и C=[2;6] это определяется параметром Thickness в окне Cleave Surface, а в окне Cleave plane мы задаём, если переходить к двумерному примеру, вектор A=(3;-1)? Т.е. A и B ещё как-то надо пересчитать из трёх чисел в Cleave plane.
И я пока не очень понимаю, зачем нужна утилита Redefine lattice, если есть Cleave Surface.

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

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

Сообщение Гесс » Вт сен 19, 2023 5:38 pm

Redefine lattice позволяет не только повернуть вектора в ячейке но и создать новую ячейку. Например в вашем двухмерном случае примитивной ячейкой будет ячейка с вектором a параллельным оси х и длиной межатомного расстояния и вектором b параллельным оси у и той же длины (и один атом внутри ячейки).
Но мы можем задать преобразование
a1=a0+b0
b1=a0-b0 (векторная сумма и разность)
Тогда новая ячейка будет покрывать в два раза большую площадь (и содержать два атома) хотя и останется квадратной.

Да, с redefine можно задавать непрямоугольные ячейки но не прозвольные вектора а только те которые можно накомпоновать из текущих.
Можно например задать
a1=2×a0+b0
b1=a0-b0, ячейка будет непрямоугольной, площадью 3 и с векторами длиной корень(5) и корень(2)

Redefine очень полезен именно для создания прямоугольных ячеек, ибо это просто удобно.

Redefine помогает нам работать с кристаллом.
А Cleave позволяет нам вырезать слои.

Остальное отвечу позже.

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

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

Сообщение Гесс » Вт сен 19, 2023 7:24 pm

Vit Nhoc писал(а):
Вт сен 19, 2023 5:16 pm
Значит если например первый вектор [3;-1], то второй не может быть [0;2]? Ну вы написали что второй вектор перпендикулярен первому. А как выбирать его длину? Про вакуум это другой вопрос - мы можем пересчитать кристалл в новые вектора, и только потом увеличить длину C. После самого пересчёта кристалла, в бесконечной повторяющейся структуре ничего не изменится. По-моему такой подход относительно нагляден и соответственно удобен.
Т.е. мой вопрос: если в нашем примере вектор A двумерной ячейки это [3;-1], то вектор C это [1;3] и никак иначе? Или можно выбрать например [2;6]? Или, как мне чувствуется, вектор C=[1;3] это один вариант миллеровского индекса, а C=[2;6] другой?
Если вы redefine cell - то второй вектор может быть любым.
Если вы cleave surface - то плоскость среза перпендикулярна первому вектору, а так как поверхность периодична - то второй вектор лежит в плоскости и таким образом перпендикулярен первому вектору. В трехмерном случае и второй и третий вектора перпендикулярны первому (но не обязательно перпендикулярны друг другу).
Вас интересует формула по которой считать длину второг вектора? я поищу или поавывожу общую формулу, сейчас голова не варит.

вектор 2;6 сонаправлен с 1;3, но длина у них разная.

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

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

Сообщение Vit Nhoc » Ср сен 20, 2023 6:40 pm

Гесс писал(а):
Вт сен 19, 2023 5:38 pm
Да, с redefine можно задавать непрямоугольные ячейки но не прозвольные вектора а только те которые можно накомпоновать из текущих.
Можно например задать
a1=2×a0+b0
b1=a0-b0, ячейка будет непрямоугольной, площадью 3 и с векторами длиной корень(5) и корень(2)
Ок, значит получается так. Вернёмся к моему рисунку выше, только добавим вектор B, перпендикулярный A и C. Изначально a0=[1;0,0], b0=[0;1;0],[c0=0;0;1]. В соответствии с моим рисунком, a1=[3;0;-1], b1=[0;1;0], c1=[1;0;3]. Таким образом, в окне Redefine surface мы просто пишем 3 0 -1 для A, 0 1 0 для B и 1 0 3 для C.
Утилита же Cleave surface, как мне видится, должна на входе принимать только пять чисел - три миллеровских индекса и минимальная и максимальная фракционные координаты по оси C1 слоя, который мы будем отсекать. Тут у меня вопросы: во-первых, подскажите миллеровские индексы для случая выше (A3-[3;0;-1] и т.д.). Второй вопрос - где в Material Studio указывается дистанция между слоями, например 100 ангстрем (намного больше длины C1)?
Мне кажется естественным для Chemcraft сначала по миллеровским индексам просто редефайнить латтис, а потом поменять параметр c (из a/b/c/alpha...) с 17A (ваш пример в письме) до 100A.

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

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

Сообщение Гесс » Ср сен 20, 2023 11:27 pm

Vit Nhoc писал(а):
Ср сен 20, 2023 6:40 pm
Мне кажется естественным для Chemcraft сначала по миллеровским индексам просто редефайнить латтис, а потом поменять параметр c (из a/b/c/alpha...) с 17A (ваш пример в письме) до 100A.
Я сначала прописал этот пост избегая Redefine потому как в непрямоугольной ячейке все сложно, но потом я подумал и решил что с некоторыми уточнениями так тоже можно.
Vit Nhoc писал(а):
Ср сен 20, 2023 6:40 pm
Утилита же Cleave surface, как мне видится, должна на входе принимать только пять чисел - три миллеровских индекса и минимальная и максимальная фракционные координаты по оси C1 слоя, который мы будем отсекать. Тут у меня вопросы: во-первых, подскажите миллеровские индексы для случая выше (A3-[3;0;-1] и т.д.).
В общем и целом - да, три миллеровских индекса которые задают вектор перепендикулярный срезу, и каким то манером заданные "где режем", вы предлагаете "низ и верх", Material Studio использует "низ и толщину", мне не принципиально.
Но тут надо таки осторожно про то какие индексы вы задаете для вектора и что они означают. Если у вас прямоугольная ячейка то все просто и аналогично Redefine. В прямоугольной ячейке (как у вас в примере, да и вообще прямоугольных ячеек много) - да ваш вектор и ваша поверхность это [3;0;-1] и {3;0;-1} (опять же не хочу лезть в нюансы этих скобочек). И таки да, если ячейка прямоугольная то можно сделать redefine а потом как вы сказали.
Но если ячейка не ортогональная/прямоугольная - то все сложнее: Если вы посмотрите вордовский файл там где используется Cleave - плоскость среза не перпендикулярна вектору a.

Это можно пропустить
То есть запись 1;0;0 (а также 2;0;0 или Х;0;0) не говорит что наш вектор задающий плоскость параллелен вектору а. Эта запись говорит что плоскость пересекает вектор b на бесконечном расстоянии, вектор с на бесконечном расстоянии, а вектор a на расстоянии 1/Х. При этом даже не важно насколько велик или мал Х (это всегда целое число), бесконечности все равно побеждают.


Для непрямоугольной ячейки тоже конечно можно сделать Redefine, но ячейка получится непрямоугольной (всмысле углы альфа и бета будут не равны 90 градусов, угол гамма это тот который лежит между теми векторами что в плоскости среза). С этим конечно можно работать, но это совершенно "не канон"
neKanon vs Kanon.jpg
Результат Redefine по умолчанию периодический по всем трем направлениям, но необязательно прямоугольный.
Результат Cleave периодичен по направлениям в плоскости среза и может быть легко непериодичен перепендикулярно срезу (там все равно вакуум), при этом в ячейке два угла прямые.
В моем примере задав новый вектор для среза мы используем два старых вектора для периодичности в плоскости: Surface vectors будут 0,1,0 и 0,0,1 (ну это до переориентации, ибо мы хотим чтоб срез был перепендикулярен оси z, а сейчас он перпендикулярен оси a).
В вашем примере все ровно так как вы описали для Redefine: a1=[3;0;-1], b1=[0;1;0], c1=[1;0;3] собственно вектор с1 у меня прорисован красным на последней картинке предпредыдущего поста.
Позитив в том что можно попробовать сперва сделать "неканон" с Redefine, векторы в плоскости среза после этого меняться не будут, переориентировать ячейку так чтобы эти векторы были в плоскости xy, убрать третий вектор и ввести его заново уже просто параллельным оси z и нужной длины.
Сложность состоит в том что пользователю знакома только нотация его среза (то есть "перепендикулярного" вектора), то есть два других вектора программа должна определять сама.

Я смог прописать монструозный алгоритм для поиска длин векторов, но он построен на концепте тех же думми атомов что я прописывал раньше и его имплементация будет стоить седых волос. Хотя вроде бы работает.

Vit Nhoc писал(а):
Ср сен 20, 2023 6:40 pm
Мне кажется естественным для Chemcraft сначала по миллеровским индексам просто редефайнить латтис, а потом поменять параметр c (из a/b/c/alpha...) с 17A (ваш пример в письме) до 100A.
тут я хотел бы отметить лишь то что "100А" это скорее условность, практически берут размер ячейки таким чтобы вакуума было 10-15А (последняя картинка в документе, где двухмерному срезу таки дают третий вектор)
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

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

Сообщение Гесс » Чт сен 21, 2023 12:53 am

Я тут еще полазил по инету, наткнулся на https://sagemd.com/doc/UserManual.htm, смотреть "2.5.3.1 Surface Box tab"

Ну то есть где то должно быть описалово как оно заимплеменчено, но в туториале МатСтудио только инструкция пользования.

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

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

Сообщение Гесс » Чт сен 21, 2023 2:05 am

Вообщем, это может быть очень хреновым алгоритмом, но я не вижу где он будет сбоить...

Я подумал еще раз и мне кажется что вариант с думми-атомами который я излагал как блок-схему несколько страниц назад самый надежный в отношении переориентаций и определения длины векторов в плоскости среза.
1) получаем от пользователя один вектор: L,M,N
2) ставим 3 dummy атома:
- если буква не равна нулю - на соответствуюшем векторе (то есть например 0,1/M,0, это не декартова координата а фракционная/кристаллографическая),
- если буква равна нулю - дубль ненулевой буквы сдвинутый вдоль этого вектора.
Звучит ужасно. Смотрим.

Код: Выделить всё

Запись 1,1,1 дает точки 1,0,0    0,1,0    0,0,1
Запись 2,1,1 дает точки 1/2,0,0    0,1,0    0,0,1
Запись 1,1,0 дает точки 1,0,0    0,1,0    1,0,1
Запись 2,0,1 дает точки 1/2,0,0    1/2,1,0    0,0,1
Запись 1,0,0 дает точки 1,0,0    1,1,0    1,0,1
Запись 0,0,2 дает точки 1,0,1/2    0,1,1/2    0,0,1/2
Запись 3,2,1 дает точки 1/3,0,0    0,1/2,0    0,0,1
3) имеем три пары точек, домножаем каждую на наименьшее общее кратное знаменателей
Для вектора 3,2,1 и точек

Код: Выделить всё

1/3,0,0    0,1/2,0    0,0,1
получаем пары точек.
2,0,0 – 0,3,0
1,0,0 – 0,0,3
0,1,0 – 0,0,2
Все эти точки расположены в углах ячеек то есть являются эквивалентными/периодическими (и лежат в плоскости перпендикулярной заказанному вектору).
Вычисляем длину каждого из 3 отрезков, самый длинный выбрасываем. Два оставшихся представляют собой векторы удовлетворяющие нашим условиям (так как расстояние между концами векторов, у которых общее начало соответствует векторной разности, то это вектора 2,-3,0 ; 1,0,-3 или 0,1,-2). Эти вектора обеспечивают минимальную площадь среза, хотя и не обязательно являются минимальной длины сами. Можно попробовать модифицировать один из векторов вычитая из него другой (это допустимо так как мы просто попадаем в другой угол ячейки). Например, если изначально выбранными являются вектора 1,0,-3 и 0,1,-2 то можно вычесть второй вектор из первого, получив 1,-1,-1 что весьма вероятно более короткий вектор чем 1,0,-3

Примечание-контроль: если среди L,M,N есть 0, то соответствующий вектор переходит на ячейку среза напрямую а соответствующая точка исключается из рассмотрения. То есть 2,0,1 дает 2 вектора: 0,1,0 и вектор между точками 1/2,0,0 и 0,0,1, то есть вектор 1,0,-2

Можно еще убедиться получилась ли правовращающая система векторов (и при необходимости поменять знаки у одного вектора или поменять вектора местами), но мне это кажется бесполезным.

Визуализируем точки и визуализируем параллелограмм построенный на этих 2 векторах.

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

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

Сообщение Vit Nhoc » Чт сен 21, 2023 11:47 am

Ох, тяжело скрипеть мозгами, зато интересно. Пока я свою задачу вижу так - реализовать опцию Redefine vectors.
Вопрос по возможностям последней версии, которую вы протестировали. У меня сейчас вроде часто получаются отрицательные b,c,alpha и т.д., хотя в принципе координаты с ними строятся корректно. Вы с этим сталкивались?
И сталкивались ли вы с ситуацией, когда например фракционная координата атома -0.00000000001 A, в результате он обрезается, а не должен был?

Ответить

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

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

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