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

вопросы строения молекул и квантовой химии
Аватара пользователя
Гесс
Сообщения: 13068
Зарегистрирован: Ср фев 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
Сообщения: 1363
Зарегистрирован: Сб июн 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
Сообщения: 1363
Зарегистрирован: Сб июн 06, 2015 12:28 pm

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

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

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

Аватара пользователя
Гесс
Сообщения: 13068
Зарегистрирован: Ср фев 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
Сообщения: 1363
Зарегистрирован: Сб июн 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
Сообщения: 1363
Зарегистрирован: Сб июн 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
Сообщения: 1363
Зарегистрирован: Сб июн 06, 2015 12:28 pm

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

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

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

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

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

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

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

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

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

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

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

Аватара пользователя
Vit Nhoc
Сообщения: 1363
Зарегистрирован: Сб июн 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
Сообщения: 1363
Зарегистрирован: Сб июн 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]?
"Ты должен сделать добро из зла, потому что больше его сделать не из чего". АБ Стругацкие.

Аватара пользователя
Гесс
Сообщения: 13068
Зарегистрирован: Ср фев 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
Сообщения: 1363
Зарегистрирован: Сб июн 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.
"Ты должен сделать добро из зла, потому что больше его сделать не из чего". АБ Стругацкие.

Аватара пользователя
Гесс
Сообщения: 13068
Зарегистрирован: Ср фев 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 позволяет нам вырезать слои.

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

Аватара пользователя
Гесс
Сообщения: 13068
Зарегистрирован: Ср фев 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
Сообщения: 1363
Зарегистрирован: Сб июн 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.
"Ты должен сделать добро из зла, потому что больше его сделать не из чего". АБ Стругацкие.

Аватара пользователя
Гесс
Сообщения: 13068
Зарегистрирован: Ср фев 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А (последняя картинка в документе, где двухмерному срезу таки дают третий вектор)
У вас нет необходимых прав для просмотра вложений в этом сообщении.

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

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

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

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

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

Аватара пользователя
Гесс
Сообщения: 13068
Зарегистрирован: Ср фев 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
Сообщения: 1363
Зарегистрирован: Сб июн 06, 2015 12:28 pm

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

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

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

Ответить

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

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

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