Молекулярная динамика — слишком красивая и наглядная тема, чтобы обойтись скучными задачами на CodeForces. Поэтому мы решили сделать задачи с визуализацией, чтобы вы увидели, как те или иные формулы выглядят "вживую".
Мы подготовили файл-заглушку, в которую вам нужно будет дописать свой код для интегрирования Verlet и для конкретных сил, которые предложены в заданиях ниже.
Откройте любым способом командную строку, где доступен Python (например, в VS Code) и выполните команду:
pip install "scipy < 1.6" ratcave six
Если у вас Linux, добавьте опцию --user
.
Запустите файл md_task.py
, приложенный ниже, и убедитесь, что вы видите медленно ползущий вправо шарик.
Ось z
виртуального мира направлена из экрана к зрителю, поэтому объектам надо давать отрицательную z
-координату, чтобы они были видны на экране.
Предлагается распологать атомы в плоскости z = -3
.
Напишите интегрирование по схеме Verlet. Для его проверки создайте атом в точке -1, 0, -3
и начальной скоростью
0, 0.5 ** 0.5, 0
. Ускорение будет направлено в "центр" мира в точке origin = 0, 0, -3
:
Поместите атом с зарядом 1
в точку -2, 0, -3
с начальной скоростью 1/6, 5/6, 0
. Подействуйте на него силой Лоренца:
Где v
— скорость атома, а B = [1, 0, 0]
— вектор напряженности магнитного поля.
В этой задаче надо использовать Velocity Verlet.
Теперь создайте два атома разного заряда (1 и -1) в точках -1, 0, -3
и 1, 0, -3
. Дайте им начальные скорости 0, 1/6, 0
и 0, -1/6, 0
.
Ускорение атома i
будет зависеть от положения атома j
по закону Кулона:
Где q_i
и q_j
— заряды атомов.
Можете добавить ещё несколько атомов с разным зарядом и посмотреть, как они будут взаимодействовать.
Теперь к закону Кулона добавим ещё силы ван-дер-Ваальса. Положения будут такие же, начальные скорости нулевые, а к ускорению добавится такое слагаемое:
Здесь σ = 0.5
, а ε = 0.1
.