Существует ли разумный способ обработки ячейки вокруг периодической границы в построении списка соседей на основе ячеек для моделирования множества тел? - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь построить список соседей в трехмерном моделировании молекулярной динамики, которое основано на моделировании частиц, и существует периодическое граничное условие.Обычный выбор для производительности - это выбор построения ячейки с шириной 0.5*r_cut, где r_cut - обрезание парного взаимодействия.

Однако, с выбором ширины ячейки, я не могу поставить целое число ячейки.Например, если мой r_cut равен 2.5, а длина поля равна 21 в направлении.Я могу поместить в нее только 8 недеформированных клеток, и останется 1 деформированная клетка с шириной 1.0.

, когда частица не находится вокруг периодической рамки.Границу, я могу получить список соседей этой частицы, проверяя только 4 (2 в каждом положительном и отрицательном направлении) в каждом измерении.Но когда частица находится вокруг границы, недостаточно проверить 4 ячейки.Есть три случая.

1) если частица находится в ячейке, которая находится на на границе , тогда достаточно проверки 4 (= 2 + 2) ячеек.

2) если частица находится в ячейке, которая находится рядом с ячейкой, которая находится на границе, то я должен проверить 5 ячеек, поскольку из-за деформированной ячейки я должен проверить еще одну ячейку.Проверка только 2 ячейки в направлении не может сделать соседа дальше, чем 0.5*r_cut+epsilon в худшем случае, где epsilon - ширина деформированной ячейки.

3), если частица находится в ячейке, которая второй после ячейки, которая находится на границе, я также должен проверить 5 ячеек по той же причине, что и 2).

Я знаю, что это можно реализовать с помощью оператора if-else с 3 ветвями, но японять, что это может быть уязвимо для ошибок из-за повышенной сложности.Есть ли более разумный способ реализации этой схемы?

...