Mô phỏng quỹ đạo của các nguyên tử Argon trong hộp sử dụng Tiềm năng Lennard Jones để mô hình hóa tương tác giữa các hạt và thuật toán Velocity Verlet để giải các phương trình chuyển động
phân tử-động lực học-mô phỏng vận tốc-verlet
- Cập nhật27 tháng 4 năm 2021
- con trăn
R-Van-Laer / Sự sụp đổ của Electron cổ điển
Sao 1
- Mã số
- Vấn đề
- Yêu cầu kéo
Đồ án mô phỏng C++ chuyển động của electron trong điều kiện Thu gọn cổ điển do bức xạ lý thuyết
vật lý mô phỏng vật lý mô phỏng quỹ đạo vật lý cổ điển vận tốc-verlet runge-kutta-4 cơ học cổ điển tích hợp verlet
#. /usr/bin/python #coding. utf8 # Bộ tích hợp Velocity Verlet def Verlet[r, v, dt, a]. """Trả lại vị trí và vận tốc mới từ các giá trị hiện tại, bước thời gian và gia tốc. Thông số. r là một mảng có nhiều ô cho vectơ vị trí hiện tại v là một mảng có nhiều ô cho vectơ vận tốc hiện tại dt là một giá trị float cho biết độ dài của bước thời gian tích phân a là một hàm lấy x làm tham số và trả về vectơ gia tốc dưới dạng một . """ # Có vẻ đơn giản [đọc về Velocity Verlet trên wikipedia] r_new = r + v*dt + a[r]*dt**2/2 v_new = v + [a[r] + a[r_new]]/2 . # Nhập các thư viện cần thiết từ numpy. định mức nhập linalg từ mảng nhập numpy, số không # Xác định hàm tăng tốc # Đầu tiên là một số hằng số tự nhiên G = 6. 673e-11 # Hằng số hấp dẫn MGsun = 1. 98e30 * G # Khối lượng của mặt trời sun = array[[0, 0, 0]] # Đặt mặt trời tại gốc # Khi đó hàm tự def a[r]. # Đây chỉ là lực hấp dẫn của mặt trời trên một đơn vị khối lượng. Asun = -MGsun * r /norm[r]**3 return Asun # Đặt giá trị bắt đầu cho vị trí và vận tốc r = mảng[[1. 49e11, 0, 0]] v = mảng[[0, 29. 783e3, 0]] # Chúng tôi hiện đang chạy mô phỏng 180 ngày với 20000 dấu thời gian T = 86400*180 # thời gian mô phỏng tính bằng giây N = 20000 # bước thời gian tích hợp M = 500 # lưu vị trí mỗi M dấu thời gian dt = T*1. 0 / [N] # tính độ dài dấu thời gian tính bằng giây # Danh sách lưu trữ vị trí và vận tốc Rlist = zeros[[3,N/M]] Vlist = zeros[[3,N/M]] # Đặt giá trị ban đầu vào . ,0] = r Vlist[. ,0] = v # Chạy bản in mô phỏng "Tích phân %d giây với bước thời gian dt = %f giây. " %[T,dt] print "Tổng số bước. ", N print "Lưu vị trí mỗi %d bước. " % [M] in "Bắt đầu. " cho tôi trong phạm vi[N/M]. # Chạy cho M bước trước khi lưu giá trị cho j trong phạm vi[M]. # Cập nhật vị trí và vận tốc dựa trên vị trí hiện tại # và hàm gia tốc r, v = Verlet[r, v, dt, a] # Lưu giá trị vào danh sách Rlist[. , i] = r Vlist[. , i] = v print "Dừng. " # Vẽ kết quả từ matplotlib nhập pyplot dưới dạng biểu đồ cốt truyện. title["%d seconds, $dt=%f$, lấy mẫu mỗi %. 2f giây" % [T, dt, M*dt]] # Đặt biểu đồ trục bằng nhau. axis['equal'] # Vẽ biểu đồ trục x và y. biểu đồ axhline[color="black"]. axvline[color="black"] # Vẽ mặt trời dưới dạng đồ thị. scatter[sun[0], sun[1], 400, c=["y"]] # Vẽ quỹ đạo dưới dạng biểu đồ đường. cốt truyện [Rlist[0,. ], Danh sách [1,. ], "-"] kịch bản. chỉ[]Velocity_verlet, một mã Python sử dụng một phiên bản của phương thức Velocity Verlet để giải phương trình vi phân thông thường bậc hai [ODE] có dạng y''=f[t,y]
cấp phép
Các tệp dữ liệu và mã máy tính được mô tả và cung cấp trên trang web này được phân phối theo giấy phép GNU LGPL
ngôn ngữ
speed_verlet có sẵn trong phiên bản MATLAB và phiên bản Python
Dữ liệu và chương trình liên quan
backward_euler, một mã Python giải một hoặc nhiều phương trình vi phân thông thường [ODE] bằng phương pháp Euler lùi
backward_euler_fixed, một mã Python giải một hoặc nhiều phương trình vi phân thông thường [ODE] bằng cách sử dụng phương pháp Euler lùi [ngầm], sử dụng phép lặp điểm cố định cho phương trình ngầm
bdf2, mã Python giải một hoặc nhiều phương trình vi phân thường [ODE] bằng cách sử dụng BDF2, công thức sai phân ngược [ngầm] bậc 2, sử dụng fsolve[] để giải phương trình ngầm
euler, một mã Python giải một hoặc nhiều phương trình vi phân thông thường [ODE] bằng phương pháp Euler
đi tắt đón đầu, một mã Python sử dụng phương pháp đi tắt đón đầu để giải phương trình vi phân thường cấp hai [ODE] có dạng y''=f[t,y]
điểm giữa, mã Python giải một hoặc nhiều phương trình vi phân thông thường [ODE] bằng phương pháp điểm giữa [ngầm]
midpoint_adaptive, mã Python giải một hoặc nhiều phương trình vi phân thông thường [ODE] bằng cách sử dụng phương pháp điểm giữa [ngầm], dựa vào fsolve[] để giải phương trình ngầm và sử dụng dấu thời gian thích ứng
midpoint_explicit, mã Python giải một hoặc nhiều phương trình vi phân thông thường [ODE] bằng cách sử dụng phương pháp điểm giữa [rõ ràng], còn được gọi là phương pháp Euler đã sửa đổi
midpoint_fixed, một mã Python giải một hoặc nhiều phương trình vi phân thông thường [ODE] bằng phương pháp điểm giữa [ẩn], sử dụng phép lặp điểm cố định đơn giản để giải phương trình ẩn
rk12, một mã Python triển khai bộ giải Runge-Kutta bậc 1 và bậc 2 cho hệ phương trình vi phân thường [ODE]
rk4, một mã Python áp dụng thuật toán Runge-Kutta [RK] bậc 4 để ước tính nghiệm của phương trình vi phân thường [ODE]
rkf45, một mã Python triển khai bộ giải Runge-Kutta-Fehlberg ODE
hình thang, một mã Python giải một hoặc nhiều phương trình vi phân thông thường [ODE] bằng phương pháp hình thang [ẩn]
trapezoidal_explicit, mã Python giải một hoặc nhiều phương trình vi phân thông thường [ODE] bằng phương pháp hình thang [rõ ràng]
trapezoidal_fixed, một mã Python giải một hoặc nhiều phương trình vi phân thông thường [ODE] bằng phương pháp hình thang [ẩn], sử dụng phương pháp điểm cố định để xử lý hệ ẩn