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

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
 
(не показано 5 промежуточных версий 3 участников)
Строка 4: Строка 4:
  
 
* Внешний цикл интегрирования по времени. (Вызов функции RunBoxPeriodic())
 
* Внешний цикл интегрирования по времени. (Вызов функции RunBoxPeriodic())
** 1) Разбиение расчетной области (ячейки периодичности) на подъячейки минимального размера (с тем чтобы они содержали минимальное количество частиц), но достаточно большие, для того чтобы любые две взаимодействующие частицы находились бы либо в одной подъячейке, либо в соседних подъячейках. Размер подъячейки выбирается так, чтобы ячейка периодичности разбивалась на целое число подъячеек одинакого размера вдоль каждого из трех ортогональных направлений. При этом размеры подъячейки по высоте, ширине и глубине могут различаться. Все частицы сортируются по таким подъячейкам. Тогда для поиска всех взаимодействующих частиц с частицей с индексом i достаточно рассмотреть все частицы, находящиеся в параллелепипеде, содержащем <math>3^3 = 27</math> подъячеек (частица с индексом i находится в центральной подъячейке).
+
# Разбиение расчетной области (ячейки периодичности) на подъячейки минимального размера (с тем чтобы они содержали минимальное количество частиц), но достаточно большие, для того чтобы любые две взаимодействующие частицы находились бы либо в одной подъячейке, либо в соседних подъячейках. Размер подъячейки выбирается так, чтобы ячейка периодичности разбивалась на целое число подъячеек одинакового размера вдоль каждого из трех ортогональных направлений. При этом размеры подъячейки по высоте, ширине и глубине могут различаться. Все частицы сортируются по таким подъячейкам. Тогда для поиска всех взаимодействующих частиц с частицей с индексом i достаточно рассмотреть все частицы, находящиеся в параллелепипеде, содержащем <math>3^3 = 27</math> подъячеек (частица с индексом i находится в центральной подъячейке).
** 2) Для обеспечения выполнения условий периодичности расчетная область дополняеся шестью слоями подъячеек (вдоль каждой из граней параллелепипеда, либо прямоугольника в плоском случае). Эти подъячейки заполняются копиями частиц, которые (копии) находятся в соседних ячейках периодичности, и координаты которых вычисляются через координаты частиц, находящихся в рассматриваемой ячейке периодичности во внутренних слоях, состоящих из подъячеек, примыкающих к границе области, с учетом смещения, равного размеру ячейки периодичности по одному, двум, или трем направлениям. Все копии частиц хранятся в отдельном массиве частиц, поскольку они имеют вспомогательное значение для вычисления приращения скорости частиц на одном шаге интегрирования, и по завершении этого шага массив дополнительных частиц удаляется. Тем не менее массив подъячеек, содержащих частицы и их копии, является трехмерным (по трем пространственным измерениям) и общим для всех частиц и их копий. Этот массив также используется лишь на одном шаге интегрирования для нахождения всех взаимодействующих частиц с частицей с индексом i, являющейся оригинальной частицей (не копией) и находящейся внутри одной ячейки периодичности (исходной расчетной области). Кроме вектора координат, структура данных, описывающая одну частицу или копию частицы (Atom3D), содержит вектор скорости, а также ссылку на вектор скорости оригинальной частицы. Ссылка указывает на вектор скорости той же частицы, если частица оригинальная, или на вектор скорости оригинальной частицы, если частица является копией. Этим достигается изменение скорости оригинальной частицы, сохраняющееся после шага интегрирования, при том, что приращение скорости производится при обращении к переменной, описывающей копию частицы.
+
# Для обеспечения выполнения условий периодичности расчетная область дополняеся шестью слоями подъячеек (вдоль каждой из граней параллелепипеда, либо прямоугольника в двумерной задаче). Эти подъячейки заполняются копиями частиц, которые (копии) находятся в соседних ячейках периодичности, и координаты которых вычисляются через координаты частиц, находящихся в рассматриваемой ячейке периодичности во внутренних слоях, состоящих из подъячеек, примыкающих к границе области, с учетом смещения, равного размеру ячейки периодичности по одному, двум, или трем направлениям. Все копии частиц хранятся в отдельном массиве частиц, поскольку они имеют вспомогательное значение для вычисления приращения скорости частиц на одном шаге интегрирования, и по завершении этого шага массив дополнительных частиц удаляется. Тем не менее массив подъячеек, содержащих частицы и их копии, является трехмерным (по трем пространственным измерениям) и общим для всех частиц и их копий. Этот массив также используется лишь на одном шаге интегрирования для нахождения всех взаимодействующих частиц с частицей с индексом i, являющейся оригинальной частицей (не копией) и находящейся внутри одной ячейки периодичности (исходной расчетной области). Кроме вектора координат, структура данных, описывающая одну частицу или копию частицы (Atom3D), содержит вектор скорости, а также ссылку на вектор скорости оригинальной частицы. Ссылка указывает на вектор скорости той же частицы, если частица оригинальная, или на вектор скорости оригинальной частицы, если частица является копией. Этим достигается изменение скорости оригинальной частицы, сохраняющееся после шага интегрирования, при том, что приращение скорости производится при обращении к переменной, описывающей копию частицы.
** 3) Цикл по всем индексам (i) оригинальных частиц. С индексом i связана форма представления энергии при многочастичном взамодействии: <math>E = \sum_{i = 1}^n E_i</math>. Слагаемое <math>E_i</math> зависит от координат частицы с индексом i, а также от координат близких к ней частиц, т.е. частиц, с которыми эта частица взаимодействует. Суммирование ведется по всем частицам одной ячейки периодичности. При этом близкими для каждой частицы могут являться частицы соседней ячейки. Поскольку частицы соседней ячейки являются копиями частиц рассматриваемой ячейки, то они ссылаются на оригинальные частицы. Этим достигается учет взаимодействия между ячейками периодичности (периодические граничные условия).
+
# Цикл по всем индексам (i) оригинальных частиц. С индексом i связана форма представления энергии при многочастичном взаимодействии: <math>E = \sum_{i = 1}^n E_i</math>. Слагаемое <math>E_i</math> зависит от координат частицы с индексом i, а также от координат близких к ней частиц, т.е. частиц, с которыми эта частица взаимодействует. Суммирование ведется по всем частицам одной ячейки периодичности. При этом близкими для каждой частицы могут являться частицы соседней ячейки. Поскольку частицы соседней ячейки являются копиями частиц рассматриваемой ячейки, то они ссылаются на оригинальные частицы. Этим достигается учет взаимодействия между ячейками периодичности (периодические граничные условия).
** 4) Внутри цикла по всем частицам, имеющим индекс i, следует расположить цикл по всем 27 подъячейкам, в которых могут находиться близкие частицы к i-ой частице и разместить указатели на близкие частицы в отдельный массив. Этот цикл на самом деле представляет собой три вложенных цикла по индексам трехмерного массива подъячеек с диапазоном изменения индексов, включающем в себя три значения, либо равных, либо отличающихся на единицу в большую или меньшую сторону от значения индексов подъячейки, содержащей i-ую частицу. Внутри этого цикла вызывается функция CalcStep(), которая может принадлежать классу Interaction, и которой передается ссылка на i-ую частицу и массив указателей на близкие к ней частицы.
+
# Внутри цикла по всем частицам, имеющим индекс i, следует расположить цикл по всем 27 подъячейкам, в которых могут находиться близкие частицы к i-ой частице и разместить указатели на близкие частицы в отдельный массив. Этот цикл на самом деле представляет собой три вложенных цикла по индексам трехмерного массива подъячеек с диапазоном изменения индексов, включающем в себя три значения, либо равных, либо отличающихся на единицу в большую или меньшую сторону от значения индексов подъячейки, содержащей i-ую частицу. Внутри этого цикла вызывается функция CalcStep(), которая может принадлежать классу Interaction, и которой передается ссылка на i-ую частицу и массив указателей на близкие к ней частицы.
** 5) Функция CalcStep(), в свою очередь, содержит два вложеных цикла. Фнутри внешнего цикла (по индексам j) должно производиться изменение координат скорости частиц с индексами i и j, что обусловлено воздействием сил на шаге нтегрирования, вычисляемых как производная по вектору координат частиц i и j от слагаемого энергии многочастичного взаимодействия <math>E_i</math>. Индекс j принимает значения индексов соседних частиц к i-ой частице посредством найденного и переданного функции CalcStep() массива указателей на переменные класса Atom3D. Второй вложенный цикл (по индексам k) обусловлен формой слагаемого <math>E_i</math> многочастичного взаимодействия. В нем происходит изменение координат скорости частиц с индексами i, j, k. Индекс k принимает значения из того же набора значений, что и индекс j, за исключением значения j (<math>k \neq j</math>). Во всех случаях изменение скорости происходит по ссылке на оригинальные частицы, в то время как среди соседних частиц (обозначенных j, k) могут быть и копии, находящиеся в соседней ячейке периодичности.
+
# Функция CalcStep(), в свою очередь, содержит два вложенных цикла. Внутри внешнего цикла (по индексам j) должно производиться изменение координат скорости частиц с индексами i и j, что обусловлено воздействием сил на шаге интегрирования, вычисляемых как производная по вектору координат частиц i и j от слагаемого энергии многочастичного взаимодействия <math>E_i</math>. Индекс j принимает значения индексов соседних частиц к i-ой частице посредством найденного и переданного функции CalcStep() массива указателей на переменные класса Atom3D. Второй вложенный цикл (по индексам k) обусловлен формой слагаемого <math>E_i</math> многочастичного взаимодействия, точнее его зависимостью от углов между межатомными связями. В этом цикле происходит изменение координат скорости частиц с индексами i, j, k. Индекс k принимает значения из того же набора значений, что и индекс j, за исключением значения j (<math>k \neq j</math>). Во всех случаях изменение скорости происходит по ссылке на оригинальные частицы, в то время как среди соседних частиц (обозначенных j, k) могут быть и копии, находящиеся в соседней ячейке периодичности.
 +
# Изменение векторов координат частиц на данном шаге интегрирования по времени.
  
 
* Вывод результатов (координат, рассчитываемых величин).
 
* Вывод результатов (координат, рассчитываемых величин).

Текущая версия на 12:31, 13 октября 2013

  • Задание начальных параметров
  • Формирование расчетной области (структура Box3D, массив атомов Atom3D)
  • Внешний цикл интегрирования по времени. (Вызов функции RunBoxPeriodic())
  1. Разбиение расчетной области (ячейки периодичности) на подъячейки минимального размера (с тем чтобы они содержали минимальное количество частиц), но достаточно большие, для того чтобы любые две взаимодействующие частицы находились бы либо в одной подъячейке, либо в соседних подъячейках. Размер подъячейки выбирается так, чтобы ячейка периодичности разбивалась на целое число подъячеек одинакового размера вдоль каждого из трех ортогональных направлений. При этом размеры подъячейки по высоте, ширине и глубине могут различаться. Все частицы сортируются по таким подъячейкам. Тогда для поиска всех взаимодействующих частиц с частицей с индексом i достаточно рассмотреть все частицы, находящиеся в параллелепипеде, содержащем [math]3^3 = 27[/math] подъячеек (частица с индексом i находится в центральной подъячейке).
  2. Для обеспечения выполнения условий периодичности расчетная область дополняеся шестью слоями подъячеек (вдоль каждой из граней параллелепипеда, либо прямоугольника – в двумерной задаче). Эти подъячейки заполняются копиями частиц, которые (копии) находятся в соседних ячейках периодичности, и координаты которых вычисляются через координаты частиц, находящихся в рассматриваемой ячейке периодичности во внутренних слоях, состоящих из подъячеек, примыкающих к границе области, с учетом смещения, равного размеру ячейки периодичности по одному, двум, или трем направлениям. Все копии частиц хранятся в отдельном массиве частиц, поскольку они имеют вспомогательное значение для вычисления приращения скорости частиц на одном шаге интегрирования, и по завершении этого шага массив дополнительных частиц удаляется. Тем не менее массив подъячеек, содержащих частицы и их копии, является трехмерным (по трем пространственным измерениям) и общим для всех частиц и их копий. Этот массив также используется лишь на одном шаге интегрирования для нахождения всех взаимодействующих частиц с частицей с индексом i, являющейся оригинальной частицей (не копией) и находящейся внутри одной ячейки периодичности (исходной расчетной области). Кроме вектора координат, структура данных, описывающая одну частицу или копию частицы (Atom3D), содержит вектор скорости, а также ссылку на вектор скорости оригинальной частицы. Ссылка указывает на вектор скорости той же частицы, если частица оригинальная, или на вектор скорости оригинальной частицы, если частица является копией. Этим достигается изменение скорости оригинальной частицы, сохраняющееся после шага интегрирования, при том, что приращение скорости производится при обращении к переменной, описывающей копию частицы.
  3. Цикл по всем индексам (i) оригинальных частиц. С индексом i связана форма представления энергии при многочастичном взаимодействии: [math]E = \sum_{i = 1}^n E_i[/math]. Слагаемое [math]E_i[/math] зависит от координат частицы с индексом i, а также от координат близких к ней частиц, т.е. частиц, с которыми эта частица взаимодействует. Суммирование ведется по всем частицам одной ячейки периодичности. При этом близкими для каждой частицы могут являться частицы соседней ячейки. Поскольку частицы соседней ячейки являются копиями частиц рассматриваемой ячейки, то они ссылаются на оригинальные частицы. Этим достигается учет взаимодействия между ячейками периодичности (периодические граничные условия).
  4. Внутри цикла по всем частицам, имеющим индекс i, следует расположить цикл по всем 27 подъячейкам, в которых могут находиться близкие частицы к i-ой частице и разместить указатели на близкие частицы в отдельный массив. Этот цикл на самом деле представляет собой три вложенных цикла по индексам трехмерного массива подъячеек с диапазоном изменения индексов, включающем в себя три значения, либо равных, либо отличающихся на единицу в большую или меньшую сторону от значения индексов подъячейки, содержащей i-ую частицу. Внутри этого цикла вызывается функция CalcStep(), которая может принадлежать классу Interaction, и которой передается ссылка на i-ую частицу и массив указателей на близкие к ней частицы.
  5. Функция CalcStep(), в свою очередь, содержит два вложенных цикла. Внутри внешнего цикла (по индексам j) должно производиться изменение координат скорости частиц с индексами i и j, что обусловлено воздействием сил на шаге интегрирования, вычисляемых как производная по вектору координат частиц i и j от слагаемого энергии многочастичного взаимодействия [math]E_i[/math]. Индекс j принимает значения индексов соседних частиц к i-ой частице посредством найденного и переданного функции CalcStep() массива указателей на переменные класса Atom3D. Второй вложенный цикл (по индексам k) обусловлен формой слагаемого [math]E_i[/math] многочастичного взаимодействия, точнее его зависимостью от углов между межатомными связями. В этом цикле происходит изменение координат скорости частиц с индексами i, j, k. Индекс k принимает значения из того же набора значений, что и индекс j, за исключением значения j ([math]k \neq j[/math]). Во всех случаях изменение скорости происходит по ссылке на оригинальные частицы, в то время как среди соседних частиц (обозначенных j, k) могут быть и копии, находящиеся в соседней ячейке периодичности.
  6. Изменение векторов координат частиц на данном шаге интегрирования по времени.
  • Вывод результатов (координат, рассчитываемых величин).