FORTRAN 90 Ruch planet

Podobne dokumenty
Fortran 90/95 wykład 1

Historia Kompilatory Podstawy składni Zastosowanie. Język Fortran. Bartosz Radliński. Poznań, 2015

Programowanie współbieżne LABORATORIUM - 7A: FORTRAN 95. Andrzej Baran

Dokumentacja techniczna IQ3 Sterownik z dostępem poprzez Internet IQ3 Sterownik z dostępem poprzez Internet Opis Charakterystyka











Fortran90 (oraz FORTRAN77) ekspresowo 1

ciało w potencjale radialnym schemat Eulera orbity kontrola kroku czasowego

Ruch pod wpływem sił zachowawczych

Elementy dynamiki molekularnej. AB 13 grudnia 2016

Analiza zderzeń dwóch ciał sprężystych

Zasady dynamiki Newtona. Autorzy: Zbigniew Kąkol Kamil Kutorasiński

Programowanie współbieżne... (3)

Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI

Wektor położenia. Zajęcia uzupełniające. Mgr Kamila Rudź, Podstawy Fizyki.

Ruch obrotowy bryły sztywnej. Bryła sztywna - ciało, w którym odległości między poszczególnymi punktami ciała są stałe

DYNAMIKA dr Mikolaj Szopa

Modelowanie Procesów Jądrowych

4π 2 M = E e sin E G neu = sin z. i cos A i sin z i sin A i cos z i 1

Wykład 5 - całki ruchu zagadnienia n ciał i perturbacje ruchu keplerowskiego

Obraz Ziemi widzianej z Księżyca

Grawitacja. =2,38 km/s. Promień Księżyca jest równy R=1737km. Zadanie - Pierwsza prędkość kosmiczna fizyka.biz 1

FIZYKA-egzamin opracowanie pozostałych pytań

Programowanie współbieżne WYKŁADY - CZ. 5EX. PRZYKŁAD. LICZBY PIERWSZE. Andrzej Baran

Symulacje komputerowe

Zasady zachowania. Fizyka I (Mechanika) Wykład VI:

V. RÓWNANIA RUCHU MECHANIKI KLASYCZNEJ Janusz Adamowski

Analiza zderzeń dwóch ciał sprężystych

MECHANIKA II. Dynamika układu punktów materialnych

PRACA. MOC. ENERGIA. 1/20

GRAWITACJA MODUŁ 6 SCENARIUSZ TEMATYCZNY LEKCJA NR 2 FIZYKA ZAKRES ROZSZERZONY WIRTUALNE LABORATORIA FIZYCZNE NOWOCZESNĄ METODĄ NAUCZANIA.



Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa



Rotacja. W układzie związanym z planetą: siła odśrodkowa i siła Coroilisa. Potencjał efektywny w najprostszym przypadku (przybliżenie Roche a):

Wykład 2 - zagadnienie dwóch ciał (od praw Keplera do prawa powszechnego ciążenia i z powrotem..)

Dokumentacja. Opcje europejskie PDE. Michał Grzelak



Podstawy fizyki wykład 4


Materiały pomocnicze 6 do zajęć wyrównawczych z Fizyki dla Inżynierii i Gospodarki Wodnej


Wykład 9: Fale cz. 1. dr inż. Zbigniew Szklarski


Dynamika Newtonowska trzy zasady dynamiki


Podstawy fizyki. Wykład 2. Dr Piotr Sitarek. Instytut Fizyki, Politechnika Wrocławska


Algorytmy i struktury danych

WYMIAROWANIE POŁĄCZENIA DŹWIGARA STALOWEGO Z ŻELBETOWĄ PŁYTĄ POMOSTU ZA POMOCĄ SWORZNI

PODSTAWY FIZYKI - WYKŁAD 2 DYNAMIKA: MASA PED SIŁA MOMENT PEDU ENERGIA MECHANICZNA. Piotr Nieżurawski.

Teoria kinetyczna gazów

Podstawy Programowania semestr drugi. Wykład czternasty

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno




Wstęp do programowania. Różne różności

Podstawy fizyki wykład 4


Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Całkowanie numeryczne - metoda prostokątów

Zagadnienie dwóch ciał

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel


Języki Programowania. Dobre praktyki. Wojciech Sobieski



Rodzaje zadań w nauczaniu fizyki

FIZYKA. Wstęp cz.2. Dr inż. Zbigniew Szklarski. Katedra Elektroniki, paw. C-1, pok

SQL 4 Structured Query Lenguage


POL-index Polska Baza Cytowań

Atomowa budowa materii

Fizyka I. Kolokwium

Wstęp do programowania 2

Oddziaływania fundamentalne

Wprowadzenie do programowania w języku FORTRAN

Metody numeryczne. Janusz Szwabiński. nm_slides-7.tex Metody numeryczne Janusz Szwabiński 11/11/ :45 p.


Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

SIŁA JAKO PRZYCZYNA ZMIAN RUCHU MODUŁ I: WSTĘP TEORETYCZNY

autor: Włodzimierz Wolczyński rozwiązywał (a)... ARKUSIK 13 RUCH OBROTOWY BRYŁY SZTYWNEJ. CZĘŚĆ 3

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

(U.13) Atom wodoropodobny

DEKLARACJA ZGODNOŒCI (DECLARATION OF CONFORMITY) Nr 1/2013

Zasada zachowania pędu

Transkrypt:

FORTRAN 90 Ruch planet Janusz Andrzejewski 30/04/13

Algorytm Verleta (podstawowy) x[n+1] = 2x[n] x[n 1] + dt^2 F[n]/m + O(dt^4 ) v[n] = (x[n+1] x[n 1] )/(2dt ) + O(dt^3 ) x[1] = x[0] + v[0] τ + (F[0]/m)dt^2 /2 + O(dt^3 ) 2

Ruch Planet Stała (nieruchoma) planeta o masie M Dwie planety które mogą się poruszać, o masach dużo mniejszych niż M Wszystkie planety oddziałują siłą grawitacyjną Program wylicza tzw całki ruchu (energie całkowitą i moment pędu calkowity) 3

Podstawowy typ danych TYPE wspolrzedne REAL(dp) :: x, y END TYPE wspolrzedne TYPE OpisCzastki REAL(dp) :: m TYPE(wspolrzedne) :: pol, pred END TYPE OpisCzastki! Stała grawitacyjna REAL(dp), PARAMETER :: G=1.0 TYPE(OpisCzastki) :: czm 4

Obliczanie siły SUBROUTINE Force(cz1, cz2, F1, F2) TYPE(OpisCzastki), INTENT(IN) :: cz1, cz2 TYPE(wspolrzedne), INTENT(OUT) :: F1, F2 SUBROUTINE Force(cz1, cz2, F1, F2) TYPE(OpisCzastki), INTENT(IN) :: cz1, cz2 TYPE(wspolrzedne), INTENT(OUT) :: F1, F2 F1%x=0.0_dp; F1%y=0.0_dp CALL silagrawitacji(czm, cz1, F1) CALL silagrawitacji(cz2, cz1, F1) F1%x=0.0_dp; F1%y=0.0_dp CALL silagrawitacji(czm, cz1, F1) CALL silagrawitacji(cz2, cz1, F1) F2%x=0.0_dp; F2%y=0.0_dp CALL silagrawitacji(czm, cz2, F2) CALL silagrawitacji(cz1, cz2, F2) F2%x=0.0_dp; F2%y=0.0_dp CALL silagrawitacji(czm, cz2, F2) CALL silagrawitacji(cz1, cz2, F2) END SUBROUTINE Force END SUBROUTINE Force 5

Obliczanie energii i momentu pędu SUBROUTINE EL(cz1, cz2, E, L) TYPE(OpisCzastki), INTENT(IN) :: cz1, cz2 REAL(dp), INTENT(OUT) :: E, L E=EnergiaMechaniczna(cz1)+ EnergiaMechaniczna(cz2)+ EnePotencjalna(cz1, cz2) L=MomentPedu(cz1)+MomentPedu(cz2) END SUBROUTINE EL REAL(dp) FUNCTION EnergiaMechaniczna(cz) TYPE(OpisCzastki), INTENT(IN) :: cz REAL(dp) :: v1s v1s=modul(cz%pred)**2 EnergiaMechaniczna= cz%m*v1s/2.0_dp+enepotencjalna(czm, cz) END FUNCTION EnergiaMechaniczna REAL(dp) FUNCTION EnePotencjalna(cz1, cz2) TYPE(OpisCzastki), INTENT(IN) :: cz1, cz2 REAL(dp) :: r r=modulroznica(cz1%pol, cz2%pol) EnePotencjalna=-G*cz1%m*cz2%m/r END FUNCTION EnePotencjalna REAL(dp) FUNCTION MomentPedu(cz) TYPE(OpisCzastki), INTENT(IN) :: cz MomentPedu=cz%m*(cz%pol%x*cz%pred%ycz%pol%y*cz%pred%x) END FUNCTION MomentPedu 6

Pomocnicze rzeczy REAL(dp) FUNCTION modul(pol) TYPE(wspolrzedne), INTENT(IN) :: pol modul=sqrt(pol%x**2+pol%y**2) END FUNCTION modul SUBROUTINE pods(lewa, prawa) TYPE(OpisCzastki), INTENT(OUT) :: lewa TYPE(OpisCzastki), INTENT(IN) :: prawa REAL(dp) FUNCTION modulroznica(pol1, pol2) TYPE(wspolrzedne), INTENT(IN) :: pol1, pol2 TYPE(wspolrzedne) :: pom pom%x=pol1%x-pol2%x pom%y=pol1%y-pol2%y lewa%m=prawa%m lewa%pol%x=prawa%pol%x lewa%pol%y=prawa%pol%y lewa%pred%x=prawa%pred%x lewa%pred%y=prawa%pred%y modulroznica=modul(pom) END FUNCTION modulroznica END SUBROUTINE pods 7

Główny procedura SUBROUTINE Verlet(cz, cztm1, cztm2, sila, dt) TYPE(OpisCzastki), INTENT(OUT) :: cz TYPE(OpisCzastki), INTENT(INOUT) :: cztm1 TYPE(OpisCzastki), INTENT(IN) :: cztm2 TYPE(wspolrzedne), INTENT(IN) :: sila REAL(dp), INTENT(IN) :: dt cz%m=cztm1%m! Masa sie nie zmienia?? cz%pol%x=2.0_dp*cztm1%pol%x-cztm2%pol%x+dt*dt*sila%x/cz%m cz%pol%y=2.0_dp*cztm1%pol%y-cztm2%pol%y+dt*dt*sila%y/cz%m cz%pred%x=0.0_dp cz%pred%y=0.0_dp cztm1%pred%x=(cz%pol%x-cztm2%pol%x)/(2.0_dp*dt) cztm1%pred%y=(cz%pol%y-cztm2%pol%y)/(2.0_dp*dt) END SUBROUTINE Verlet 8

Dodatkowy modul MODULE VERLETutility IMPLICIT NONE CONTAINS SUBROUTINE zapisz(iunit, cz1, cz2, t, E, L) USE VERLETmodul INTEGER, INTENT(IN) :: iunit TYPE(OpisCZastki), INTENT(IN) :: cz1, cz2 REAL(dp), INTENT(IN) :: t, E, L write(iunit,'(11e13.5)') & t,cz1%pol%x,cz1%pol%y,cz2%pol%x,cz2%pol%y,cz1%pred%x,cz1%pred%y,cz2%pred %x,cz2%pred%y,e,l END SUBROUTINE zapisz END MODULE VERLETutility 9

Główny segment 1 PROGRAM Planets USE VERLETmodul USE VERLETutility IMPLICIT NONE REAL(dp) :: dt,te REAL(dp) :: t, E, L TYPE(OpisCzastki) :: cz1, cz2, cz1tm1, cz2tm1, cz1tm2, cz2tm2 TYPE(wspolrzedne) :: F1, F2 INTEGER :: Np, n czm%m=100.0! Parametry dla masy M czm%pol%x=0.0_dp czm%pol%y=0.0_dp czm%pred%x=0.0_dp czm%pred%y=0.0_dp 10

Główny segment 2 open(10,file='planets.inp',status='unknown') open(11,file='planets.out',status='unknown') read(10,*)cz1tm2%m,cz2tm2%m,te,np read(10,*)cz1tm2%pol%x,cz1tm2%pol%y,cz2tm2%pol%x,cz2tm2%pol%y, & cz1tm2%pred%x,cz1tm2%pred%y,cz2tm2%pred%x,cz2tm2%pred%y dt=(te-0.0)/np CALL Force(cz1Tm2, cz2tm2, F1, F2) CALL EL(cz1Tm2, cz2tm2, E, L) t=0.0_dp CALL zapisz(11, cz1tm2, cz2tm2, t, E, L) 11

Przygotowanie danych!policz dla czasu +dt cz1tm1%m=cz1tm2%m cz1tm1%pol%x=cz1tm2%pol%x+cz1tm2%pred%x*dt+0.5_dp*(f1%x/cz1tm1%m)*dt*dt cz1tm1%pol%y=cz1tm2%pol%y+cz1tm2%pred%y*dt+0.5_dp*(f1%y/cz1tm1%m)*dt*dt cz2tm1%m=cz2tm2%m cz2tm1%pol%x=cz2tm2%pol%x+cz2tm2%pred%x*dt+0.5_dp*(f2%x/cz2tm1%m)*dt*dt cz2tm1%pol%y=cz2tm2%pol%y+cz2tm2%pred%y*dt+0.5_dp*(f2%y/cz2tm1%m)*dt*dt 12

Główna część DO n=1,np-1 t=0.0+n*dt CALL Force(cz1Tm1, cz2tm1, F1, F2) CALL Verlet(cz1, cz1tm1, cz1tm2, F1, dt) CALL Verlet(cz2, cz2tm1, cz2tm2, F2, dt) CALL EL(cz1Tm1, cz2tm1, E, L) CALL zapisz(11, cz1tm1, cz2tm1, t, E, L) CALL pods(cz1tm2, cz1tm1) CALL pods(cz1tm1, cz1) CALL pods(cz2tm2, cz2tm1) CALL pods(cz2tm1, cz2) END DO 13

Dziękuję za uwagę 14