2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: расчет движения электронов в атоме лития методом МД(2мерная)
Сообщение06.02.2015, 16:05 
Заслуженный участник


09/05/12
25179
MathKvant в сообщении #974526 писал(а):
Спасибо, я вроде подправил самые тупые моменты,перевел все в СГСЭ,теперь коэф k=1,также вынес степень $10^{-10}$, теперь все компиллится, но значения все NaN.
Как-то странно Вы это сделали. У Вас вычисляется коэффициент const, но в дальнейшем он нигде не используется, вместо него во все выражения входит q*q/me. В чем смысл?

К тому же во все выражения заряды входят в квадрате. Частично можно было бы сказать, что это скомпенсировано использованием ангстремов в качестве единицы длины, но это $10^{-10}$ м, а не $10^{-10}$ см, у Вас остаются неучтенными два порядка.

А теперь внимательно посмотрите на начальные условия. В момент старта электроны №1 и №2 находятся в одной точке. Следовательно, при вычислении их ускорений Вы получите нуль в знаменателе. При этом для вычисления новых координат используются переменные вроде x_previous2, которые исходно все равны нулю.

И таки я бы все же посоветовал начать с изучения Фортрана. Искать ошибки в таком коде тяжело даже опытному человеку, и если это не разовый эпизод, то лучше сразу делать все нормально.

 Профиль  
                  
 
 Re: расчет движения электронов в атоме лития методом МД(2мерная)
Сообщение06.02.2015, 18:41 


22/09/10
75
Pphantom в сообщении #974597 писал(а):
Как-то странно Вы это сделали. У Вас вычисляется коэффициент const, но в дальнейшем он нигде не используется, вместо него во все выражения входит q*q/me. В чем смысл?

Простите,я прислал не ту версию программы, должна была быть такой
код: [ скачать ] [ спрятать ]
Используется синтаксис Fortran
    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
 

Pphantom в сообщении #974597 писал(а):
К тому же во все выражения заряды входят в квадрате. Частично можно было бы сказать, что это скомпенсировано использованием ангстремов в качестве единицы длины, но это $10^{-10}$ м, а не $10^{-10}$ см, у Вас остаются неучтенными два порядка.

Нет, я просто вынес $10^{-10}$ из всех констант, это же никак не повлияет на результат?
Pphantom в сообщении #974597 писал(а):
А теперь внимательно посмотрите на начальные условия. В момент старта электроны №1 и №2 находятся в одной точке. Следовательно, при вычислении их ускорений Вы получите нуль в знаменателе. При этом для вычисления новых координат используются переменные вроде x_previous2, которые исходно все равны нулю.

С начальными условиями я ,действительно, тупанул, но тогда для старта моей системы мне нужны еще скорости электронов, где мне их взять, сколько положить, порядка с? Также мне не понятно какого порядка брать $\tau$?
Pphantom в сообщении #974597 писал(а):
И таки я бы все же посоветовал начать с изучения Фортрана. Искать ошибки в таком коде тяжело даже опытному человеку, и если это не разовый эпизод, то лучше сразу делать все нормально.

Вы ,действительно, правы, хорошо бы изучить фортран, но я его использую всего лишь потому, что так требует предмет и преподаватель, я приверженец скриптовых язык, где легко можно быдлокодить и не задумываться о последствиях. Вы ранее писали, что
Pphantom в сообщении #973122 писал(а):
Любую книгу по Фортрану, начиная со стандарта Fortran 90, их и в интернете достаточно много. Идея сводится к тому, что вместо операций с отдельными переменными можно выполнять те же операции с массивами, в итоге не надо будет писать однотипные участки кода для каждой из координат.
. То есть, грамотная запись - это запись каждой переменной в вектор(единичный массив) и далее оперирование с ним, но тогда запись сил усложнится.

 Профиль  
                  
 
 Re: расчет движения электронов в атоме лития методом МД(2мерная)
Сообщение06.02.2015, 19:20 
Заслуженный участник


09/05/12
25179
MathKvant в сообщении #974659 писал(а):
Простите,я прислал не ту версию программы, должна была быть такой
Чуть лучше, но часть перечисленных ранее проблем есть и в ней. Например, два комплекта начальных координат, один из которых (правильный) используется для вычисления скоростей, а второй (нулевой) - для изменения координат. В итоге первый шаг как-то срабатывает, а дальше все разваливается.

MathKvant в сообщении #974659 писал(а):
Нет, я просто вынес $10^{-10}$ из всех констант, это же никак не повлияет на результат?
Да, но если Вы сделаете это правильно. Используемые Вами радиусы орбит указаны на самом деле в $\text{см}^{-8}$.

MathKvant в сообщении #974659 писал(а):
С начальными условиями я ,действительно, тупанул, но тогда для старта моей системы мне нужны еще скорости электронов, где мне их взять, сколько положить, порядка с?
Оценить, решив задачу о равномерном движении по окружности вокруг ядра и пренебрегая другими электронами. Для начала это сойдет.

MathKvant в сообщении #974659 писал(а):
Вы ,действительно, правы, хорошо бы изучить фортран, но я его использую всего лишь потому, что так требует предмет и преподаватель, я приверженец скриптовых язык, где легко можно быдлокодить и не задумываться о последствиях.
Тогда давайте чуть детальнее: на кого Вы учитесь? На программиста-быдлокодера или на кого-то другого?

От этого зависит, как относиться к задаче. Если верно первое, то достаточно что-то сдать и забыть (хотя тогда и сама задача, и требование использования Фортрана выглядят несколько странно). Если второе, то Вам лучше забыть о своих привычках.

MathKvant в сообщении #974659 писал(а):
То есть, грамотная запись - это запись каждой переменной в вектор(единичный массив) и далее оперирование с ним
Только не единичный, а одномерный массив.

MathKvant в сообщении #974659 писал(а):
но тогда запись сил усложнится.
Наоборот. В учебнике физики силы покоординатно расписывались или все-таки с помощью векторов?

 Профиль  
                  
 
 Re: расчет движения электронов в атоме лития методом МД(2мерная)
Сообщение08.02.2015, 16:08 


22/09/10
75
Pphantom в сообщении #974677 писал(а):
Чуть лучше, но часть перечисленных ранее проблем есть и в ней. Например, два комплекта начальных координат, один из которых (правильный) используется для вычисления скоростей, а второй (нулевой) - для изменения координат. В итоге первый шаг как-то срабатывает, а дальше все разваливается.

Спасибо, подправил все, программа считает, но неправильно. У меня траектория каждого электрона эллипс, а меня y(x)- линейная функция, то есть у меня нет практически отрицательных координат. Я $\tau$ подобрал так, чтобы получающиеся скорости электронов совпадали по размерности с начальной скоростью.
код: [ скачать ] [ спрятать ]
Используется синтаксис Fortran
    program molecul
    implicit none
    real, parameter :: r1=529.17720859! радиус первой орбиты в см*10^(-10)
    real, parameter :: r2=2116.70883436! радиус второй орбиты в см*10^(-10)
    real, parameter :: me=9.10938291e-18! масса электрона в гр*10^(-10)
    real, parameter :: q=4.8032042713! заряд элетрона в сгсэ
    real, parameter :: tau=1e-5! шаг по времени в секундах
    real, parameter :: v_0=2e9! cm/c
    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=v_0
        x_previous1=r1
        v_previous_y1=v_0
        y_previous1=0


        v_previous_x2=v_0
        x_previous2=0
        v_previous_y2=v_0
        y_previous2=r1


        v_previous_x3=v_0
        x_previous3=r2
        v_previous_y3=v_0
        y_previous3=0
    open(12,FILE='result.txt')
        do i=1,1000
        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))

        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
 

Pphantom в сообщении #974677 писал(а):
Да, но если Вы сделаете это правильно. Используемые Вами радиусы орбит указаны на самом деле в $\text{см}^{-8}$.

Pphantom в сообщении #974677 писал(а):
Оценить, решив задачу о равномерном движении по окружности вокруг ядра и пренебрегая другими электронами. Для начала это сойдет.

Спасибо, уже учел в программе.
Pphantom в сообщении #974677 писал(а):
Тогда давайте чуть детальнее: на кого Вы учитесь? На программиста-быдлокодера или на кого-то другого?

От этого зависит, как относиться к задаче. Если верно первое, то достаточно что-то сдать и забыть (хотя тогда и сама задача, и требование использования Фортрана выглядят несколько странно). Если второе, то Вам лучше забыть о своих привычках.

Учусь на специалиста в физике конденсированных сред. Хорошо бы еще видеть правильный код, чтобы брать пример с него.

 Профиль  
                  
 
 Re: расчет движения электронов в атоме лития методом МД(2мерная)
Сообщение08.02.2015, 16:43 
Заслуженный участник


09/05/12
25179
MathKvant в сообщении #975420 писал(а):
У меня траектория каждого электрона эллипс,
В смысле "должна быть эллипсом"? Это неверно, Вы забываете, что электроны в Вашей модели взаимодействуют друг с другом.

MathKvant в сообщении #975420 писал(а):
а меня y(x)- линейная функция
MathKvant в сообщении #975420 писал(а):
Я $\tau$ подобрал так, чтобы получающиеся скорости электронов совпадали по размерности с начальной скоростью.
Так $\tau$ выражено в секундах или в чем-то другом? Потому что если в секундах, то получаемый результат совершенно естественен - у Вас шаг по времени получается существенно большим, чем характерное время пересечения системы, т.е. после первого же шага взаимодействием электронов с ядром и друг другом можно пренебречь, после чего они летят по прямой.

MathKvant в сообщении #975420 писал(а):
Учусь на специалиста в физике конденсированных сред.
Ну что ж, тогда преподаватель все требует правильно, но Вы зачем-то этому активно сопротивляетесь, вместо того, чтобы учиться.

Тогда давайте делать все нормально и с самого начала. Запишите уравнения движения (только полноценные - в векторном виде и со всеми физическими коэффициентами, а не тот эрзац, с которого началась эта беседа) и приведите их к виду "ускорение электрона № такой-то равно тому-то". Пока без всяких разностных аппроксимаций, это следующий шаг, до него еще добраться надо.

Параллельно можно найти какую-нибудь книгу по Фортрану (например, Немнюгин C.А., Стесик О.Л. "Современный Фортран", она так себе, но ее очень легко найти в Интернете) и читать.

MathKvant в сообщении #975420 писал(а):
Хорошо бы еще видеть правильный код, чтобы брать пример с него.
Нет уж. Во-первых, так Вы ничему не научитесь, во-вторых, правильный код настолько прост и мал по объему, что "брать пример" с него не удастся - только копировать.

 Профиль  
                  
 
 Re: расчет движения электронов в атоме лития методом МД(2мерная)
Сообщение10.02.2015, 16:17 


22/09/10
75
Pphantom в сообщении #975426 писал(а):
В смысле "должна быть эллипсом"? Это неверно, Вы забываете, что электроны в Вашей модели взаимодействуют друг с другом.

Pphantom в сообщении #975426 писал(а):
Так $\tau$ выражено в секундах или в чем-то другом? Потому что если в секундах, то получаемый результат совершенно естественен - у Вас шаг по времени получается существенно большим, чем характерное время пересечения системы, т.е. после первого же шага взаимодействием электронов с ядром и друг другом можно пренебречь, после чего они летят по прямой.

Да, действительно забыл, что не один электрон, но все равно траектория должна быть замкнутой. Теперь понимаю, что не верно выбрал $\tau$.
Pphantom в сообщении #975426 писал(а):
Ну что ж, тогда преподаватель все требует правильно, но Вы зачем-то этому активно сопротивляетесь, вместо того, чтобы учиться.

Тогда давайте делать все нормально и с самого начала. Запишите уравнения движения (только полноценные - в векторном виде и со всеми физическими коэффициентами, а не тот эрзац, с которого началась эта беседа) и приведите их к виду "ускорение электрона № такой-то равно тому-то". Пока без всяких разностных аппроксимаций, это следующий шаг, до него еще добраться надо.

Параллельно можно найти какую-нибудь книгу по Фортрану (например, Немнюгин C.А., Стесик О.Л. "Современный Фортран", она так себе, но ее очень легко найти в Интернете) и читать.

Хорошо, опишу свои рассуждения с начала. Пусть есть 3 электрона и покоящееся ядро. На каждый электрон по закону Кулона действует сила притяжения или отталкивания.
$
\\ \sum_{i=1}^3\overrightarrow{F_i}=m_1\cdot \overrightarrow{a_1}\\
k\frac{q_1\cdot q_2}{r_{12}^3\cdot m_1}\overrightarrow{r_{12}}+k\frac{q_1\cdot q_3}{r_{13}^3\cdot m_1}\overrightarrow{r_{13}}+k\frac{q_1\cdot q_0}{r_{10}^3\cdot m_1}\overrightarrow{r_{10}}= \overrightarrow{a_1}\\
k\frac{q_2\cdot q_1}{r_{21}^3\cdot m_2}\overrightarrow{r_{21}}+k\frac{q_2\cdot q_3}{r_{23}^3\cdot m_2}\overrightarrow{r_{23}}+k\frac{q_3\cdot q_0}{r_{30}^3\cdot m_2}\overrightarrow{r_{20}}= \overrightarrow{a_2}\\
k\frac{q_3\cdot q_1}{r_{31}^3\cdot m_3}\overrightarrow{r_{31}}+k\frac{q_3\cdot q_2}{r_{32}^3\cdot m_3}\overrightarrow{r_{32}}+k\frac{q_3\cdot q_0}{r_{30}^3\cdot m_3}\overrightarrow{r_{30}}= \overrightarrow{a_3}
$, где 0 соответствует ядру.
Или правильная запись через $\operatorname{grad}$?

 Профиль  
                  
 
 Re: расчет движения электронов в атоме лития методом МД(2мерная)
Сообщение10.02.2015, 17:22 
Заслуженный участник


09/05/12
25179
MathKvant в сообщении #976319 писал(а):
Да, действительно забыл, что не один электрон, но все равно траектория должна быть замкнутой.
Это тоже ниоткуда не следует. Вообще говоря, в этой модели Вы даже финитность движения гарантировать не можете.

MathKvant в сообщении #976319 писал(а):
Или правильная запись через $\operatorname{grad}$?
Да нет, так нормально. Теперь замените $q_i$ и $m_i$ на известные заряды и массы, а затем найдите значение размерного коэффициента в какой-то подходящей системе единиц (выше обсуждались по крайней мере две).

 Профиль  
                  
 
 Re: расчет движения электронов в атоме лития методом МД(2мерная)
Сообщение16.02.2015, 21:53 


22/09/10
75
Pphantom в сообщении #976348 писал(а):
Теперь замените $q_i$ и $m_i$ на известные заряды и массы, а затем найдите значение размерного коэффициента в какой-то подходящей системе единиц

Если всё перевести в СГСЭ, то заряд $ q$=$4,8\cdot10^{-10}$ и $m=9,1\cdot10^{-28}$, то const=$2,5\cdot10^{8}$СГСЭед/гр$, если еще вынести r, то еще умножить на $10^{10}$
Я нашел ошибки в предыдущей программе:
1) Во-первых, ошибся в производной, когда проекцию сил искал, там $r^{\frac{3}{2}}$.
2)Во-вторых, почему-то в числителях у меня модуль, хотя его быть не должно.
3) Забыл учесть, что заряд у ядра равен сумме всех зарядов электронов
код: [ скачать ] [ спрятать ]
Используется синтаксис Fortran
    program molecul
    implicit none
    real, parameter :: r1=529.17720859! радиус первой орбиты в см*10^(-10)
    real, parameter :: r2=2116.70883436! радиус второй орбиты в см*10^(-10)
    real, parameter :: me=9.10938291e-18! масса электрона в гр*10^(-10)
    real, parameter :: q=4.8032042713! заряд элетрона в сгсэ
    real, parameter :: tau=1e-6! шаг по времени в секундах
    real, parameter :: v_0=2e9! cm/c
    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=v_0
        x_previous1=r1
        v_previous_y1=v_0
        y_previous1=0


        v_previous_x2=v_0
        x_previous2=0
        v_previous_y2=v_0
        y_previous2=r1


        v_previous_x3=v_0
        x_previous3=r2
        v_previous_y3=v_0
        y_previous3=0
    open(12,FILE='result.txt')
        do i=1,1000
        v_next_x1=v_previous_x1+const*((x22-x11)/(((abs(x22-x11))**2+(abs(y22-y11))**2))**1.5&
        +(x33-x11)/(((abs(x33-x11))**2+(abs(y33-y11))**2))**1.5-3*x11/(((abs(x11))**2+(abs(y11))**2))**1.5)

        x_next1=x_previous1+tau*v_previous_x1

        v_next_y1=v_previous_y1+const*((y22-y11)/(((abs(x22-x11))**2+(abs(y22-y11))**2))**1.5&
        +(y33-y11)/(((abs(x33-x11))**2+(abs(y33-y11))**2)**1.5)-3*y11/(((abs(x11))**2+(abs(y11))**2))**1.5)

        y_next1=y_previous1+tau*v_previous_y1


        v_next_x2=v_previous_x2+const*((x11-x22)/(((abs(x11-x22))**2+(abs(y11-y22))**2))**1.5&
        +(x33-x22)/(((abs(x33-x22))**2+(abs(y33-y22))**2))**1.5-3*x22/(((abs(x22))**2+(abs(y22))**2))**1.5)

        x_next2=x_previous2+tau*v_previous_x2


        v_next_y2=v_previous_y2+const*((y11-y22)/(((abs(x11-x22))**2+(abs(y11-y22))**2))**1.5&
        +(y33-y22)/(((abs(x33-x22))**2+(abs(y33-y22))**2))**1.5-3*y22/(((abs(x22))**2+(abs(y22))**2))**1.5)

        y_next2=y_previous2+tau*v_previous_y2

        v_next_x3=v_previous_x3+const*((x11-x33)/(((abs(x11-x33))**2+(abs(y11-y33))**2))**1.5&
        +(x22-x33)/(((abs(x22-x33))**2+(abs(y22-y33))**2))**1.5-3*x33/(((abs(x33))**2+(abs(y33))**2))**1.5)

        x_next3=x_previous3+tau*v_previous_x3


        v_next_y3=v_previous_y3+const*((y11-y33)/(((abs(x11-x33))**2+(abs(y11-y33))**2))**1.5&
        +(y22-y33)/(((abs(x22-x33))**2+(abs(y22-y33))**2))**1.5-3*y33/(((abs(x33))**2+(abs(y33))**2))**1.5)

        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
 

 Профиль  
                  
 
 Re: расчет движения электронов в атоме лития методом МД(2мерная)
Сообщение16.02.2015, 22:00 
Заслуженный участник


09/05/12
25179
Было бы неплохо увидеть полные выкладки, а то на первый взгляд похоже, что с размерностями времени и скорости Вы ошиблись. Напишите, Вам же самому они пригодятся.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2

Модераторы: photon, whiterussian, profrotter, Jnrty, Aer, Парджеттер, Eule_A, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group