Как-то странно Вы это сделали. У Вас вычисляется коэффициент const, но в дальнейшем он нигде не используется, вместо него во все выражения входит q*q/me. В чем смысл?
Простите,я прислал не ту версию программы, должна была быть такой
program molecul
implicit none
real, parameter :: r1=0.52917720859! радиус первой орбиты в см*10^(-10)
real, parameter :: r2=2.11670883436! радиус второй орбиты в см*10^(-10)
real, parameter :: me=9.10938291e-18! масса электрона в гр*10^(-10)
real, parameter :: q=4.8032042713! заряд элетрона в сгсэ
real, parameter :: tau=1.52e-12! шаг по времени в секундах
real v_next_x1,v_previous_x1,x_next1,x_previous1,v_next_y1,v_previous_y1,y_next1,y_previous1
real v_next_x2,v_previous_x2,x_next2,x_previous2,v_next_y2,v_previous_y2,y_next2,y_previous2
real v_next_x3,v_previous_x3,x_next3,x_previous3,v_next_y3,v_previous_y3,y_next3,y_previous3
real x11,x22,x33,y11,y22,y33
real, parameter :: const=tau*q*q/me
integer i
write(*,*) const
x11=r1! начальные условия
x22=0
x33=r2
y11=0
y22=r1
y33=0
v_previous_x1=0
x_previous1=0
v_previous_y1=0
y_previous1=0
v_previous_x2=0
x_previous2=0
v_previous_y2=0
y_previous2=0
v_previous_x3=0
x_previous3=0
v_previous_y3=0
y_previous3=0
open(12,FILE='result.txt')
do i=1,5
v_next_x1=v_previous_x1+const*(abs(x22-x11)/((abs(x22-x11))**2+(abs(y22-y11))**2)&
+abs(x33-x11)/((abs(x33-x11))**2+(abs(y33-y11))**2)-abs(x11)/((abs(x11))**2+(abs(y11))**2))
x_next1=x_previous1+tau*v_previous_x1
v_next_y1=v_previous_y1+const*(abs(y22-y11)/((abs(x22-x11))**2+(abs(y22-y11))**2)&
+abs(y33-y11)/((abs(x33-x11))**2+(abs(y33-y11))**2)-abs(y11)/((abs(x11))**2+(abs(y11))**2))
y_next1=y_previous1+tau*v_previous_y1
v_next_x2=v_previous_x2+const*(abs(x11-x22)/((abs(x11-x22))**2+(abs(y11-y22))**2)&
+abs(x33-x22)/((abs(x33-x22))**2+(abs(y33-y22))**2)-abs(x22)/((abs(x22))**2+(abs(y22))**2))
x_next2=x_previous2+tau*v_previous_x2
v_next_y2=v_previous_y2+const*(abs(y11-y22)/((abs(x11-x22))**2+(abs(y11-y22))**2)&
+abs(y33-y22)/((abs(x33-x22))**2+(abs(y33-y22))**2)-abs(y22)/((abs(x22))**2+(abs(y22))**2))
y_next2=y_previous2+tau*v_previous_y2
v_next_x3=v_previous_x3+const*(abs(x11-x33)/((abs(x11-x33))**2+(abs(y11-y33))**2)&
+abs(x22-x33)/((abs(x22-x33))**2+(abs(y22-y33))**2)-abs(x33)/((abs(x33))**2+(abs(y33))**2))/me
x_next3=x_previous3+tau*v_previous_x3
v_next_y3=v_previous_y3+const*(abs(y11-y33)/((abs(x11-x33))**2+(abs(y11-y33))**2)&
+abs(y22-y33)/((abs(x22-x33))**2+(abs(y22-y33))**2)-abs(y33)/((abs(x33))**2+(abs(y33))**2))
y_next3=y_previous3+tau*v_previous_y3
write(*,*) x_next1,y_next1,v_next_x1,v_next_y1
!write(12,*) x_next1,y_next1,x_next2,y_next2,x_next3,y_next3
x11=x_next1
x22=x_next2
x33=x_next3
y11=y_next1
y22=y_next2
y33=y_next3
v_previous_x1=v_next_x1
x_previous1=x_next1
v_previous_y1=v_next_y1
y_previous1=y_next1
v_previous_x2=v_next_x2
x_previous2=x_next2
v_previous_y2=v_next_y2
y_previous2=y_next2
v_previous_x3=v_next_x3
x_previous3=x_next3
v_previous_y3=v_next_y3
y_previous3=y_next3
enddo
close(12)
end program
К тому же во все выражения заряды входят в квадрате. Частично можно было бы сказать, что это скомпенсировано использованием ангстремов в качестве единицы длины, но это
м, а не
см, у Вас остаются неучтенными два порядка.
Нет, я просто вынес
из всех констант, это же никак не повлияет на результат?
А теперь внимательно посмотрите на начальные условия. В момент старта электроны №1 и №2 находятся в одной точке. Следовательно, при вычислении их ускорений Вы получите нуль в знаменателе. При этом для вычисления новых координат используются переменные вроде x_previous2, которые исходно все равны нулю.
С начальными условиями я ,действительно, тупанул, но тогда для старта моей системы мне нужны еще скорости электронов, где мне их взять, сколько положить, порядка с? Также мне не понятно какого порядка брать
?
И таки я бы все же посоветовал начать с изучения Фортрана. Искать ошибки в таком коде тяжело даже опытному человеку, и если это не разовый эпизод, то лучше сразу делать все нормально.
Вы ,действительно, правы, хорошо бы изучить фортран, но я его использую всего лишь потому, что так требует предмет и преподаватель, я приверженец скриптовых язык, где легко можно быдлокодить и не задумываться о последствиях. Вы ранее писали, что
Любую книгу по Фортрану, начиная со стандарта Fortran 90, их и в интернете достаточно много. Идея сводится к тому, что вместо операций с отдельными переменными можно выполнять те же операции с массивами, в итоге не надо будет писать однотипные участки кода для каждой из координат.
. То есть, грамотная запись - это запись каждой переменной в вектор(единичный массив) и далее оперирование с ним, но тогда запись сил усложнится.