Молекулярная динамика — слишком красивая и наглядная тема, чтобы обойтись скучными задачами на 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.