Sie sind auf Seite 1von 34

PASTWOWA WYSZA SZKOA ZAWODOWA W CHEMIE

Instytut Matematyki i Informatyki

Kierunek: Matematyka Specjalno: Matematyka z Informatyk

Arkadiusz Gadecki
Nr albumu 2887

Programowanie w jzyku Fortran 90/95 Program wasny rozwizywania rwnania falowego

Praca dyplomowa napisana pod kierunkiem prof. dr hab. Krzysztofa Murawskiego

CHEM 2008

Owiadczenie o autorstwie pracy

Owiadczam, e niniejsz prac przygotowaem samodzielnie. Wszystkie dane, denicje, wzory i sformuowania pochodzce z literatury s opatrzone odpowiednimi odsyaczami. Praca przedoona do oceny nie bya dotychczas publikowana w adnej formie.

Imi i nazwisko autora pracy

........................................ (data i podpis autora pracy)

Spis treci
1 Wstp 2 Cel i zakres pracy 3 PODSTAWY JZYKA FORTRAN 90/95 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 Struktura programu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Typy zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Podstawowe elementy jzyka . . . . . . . . . . . . . . . . . . . . . . . . Parametry zmiennej . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instrukcja IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instrukcja CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instrukcja DO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Postawowe instrukcje wejcia i wyjcia . . . . . . . . . . . . . . . . . . Zmienne indeksowane TABLICE 3.9.1 3.9.2 3.9.3 3.9.4 . . . . . . . . . . . . . . . . . . . . Deklaracja tablicy . . . . . . . . . . . . . . . . . . . . . . . . . . Dynamiczne tworzenie tablic . . . . . . . . . . . . . . . . . . . . Konstruktor tablicy . . . . . . . . . . . . . . . . . . . . . . . . . Zmiana ksztatu tablicy . . . . . . . . . . . . . . . . . . . . . . 3 4 5 5 5 6 7 7 8 9 9 10 10 11 12 12 12 13 13 14 16 18 18 19 20 21 22 22 24 32 33

3.10 PODPROGRAMY (SEGMENT SUBROUTINE) . . . . . . . . . . . . 3.10.1 Podprogramy wewntrzne . . . . . . . . . . . . . . . . . . . . . 3.10.2 Podprogramy zewntrzne . . . . . . . . . . . . . . . . . . . . . . 3.10.3 Funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10.4 Moduy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.10.5 Podprogram rekurencja (RECURSIVE) . . . . . . . . . . . . . . 3.10.6 Podprogram naturalny (PURE) . . . . . . . . . . . . . . . . . . 3.11 Struktury . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12 Wskaniki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13 Intrukcje wejcia i wyjcia . . . . . . . . . . . . . . . . . . . . . . . . . 4 NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO 4.1 4.2 Rwnanie falowe - posta numeryczna . . . . . . . . . . . . . . . . . . . Program rozwizujcy rwnanie falowe . . . . . . . . . . . . . . . . . .

5 Podsumowanie i wnioski 6 Literatura

WSTP

Wstp
W poowie lat 50-tych grupa naukowcw z rmy IBM, prowadzona przez

Johna Buckusa(ojca jzyka Fortran), opracowaa nowy jzyk, ktry rewolucyjnie uproci programowanie komputerw, przede wszystkim przez intuicyjny sposb kodowaia formu matematycznych. Nazwa jzyka Fortran powstaa jako akronim sw Formula Translation. Jzyk ten szybko zosta zaakcteptowany przez uytkownikw i od momentu powstania ulega cigym modykacjom. Pierwsza standaryzacja nastapia w 1960 roku, gdy American Standards Association (ASA) opublikowaa krtki dokument okrelajacy podstawowy zestaw wasnoci, jakim implementacja jzyka powinny si charakteryzowa. Tak powsta Fortran IV. Nastpna standaryzacja znana bya pod nazw Fortran 66, poniewa jej standaryzacja nastpia w 1966 roku. Wzorzec ten by jednak na potrzeby uytkownikw zbyt ubogi i tworzone w tym czasie implementacje zawieray wiele rozszerze. W latach siedemdziesitych nastpia bardzo wana stadaryzacja jzyka Fortran znana jako Fortran 77, niedugo potem bya standaryzacj wiatow. W tym czasie dokonywa si rozwj takich jzykw jak: C, C++ cz Ada. Nastpc Fortranu 77 zosa Fortran 90 o moliwociach porwnywalnych do tych wyej wymienionych jzykw. Standard ten jest standardem wiatowym (ISO/IEC 1539:1991). Aktualnie obowizujcym standardem jest Fortran 95, ktry ju nieznacznie rni si od swojego poprzednika. Fortran dysponuje wielk liczb bibliotek, ktre pozwalaj rozwiza praktycznie kade zadanie numeryczne. Najwaniejsze przyczyny, z powodu ktrych Fortran jest wykorzystywany i rozwijany do dzi, to: szybko oblicze oraz wysoka wydajno kodu generowanego przez kompilatory Fortrana, wynikajca m.in. z jego dugiej obecnoci na rynku programistycznym, znakomita skalowalno i przenono oprogramowania (pomidzy rnymi platformami sprztowymi i systemami operacyjnymi), a take dostpno bibliotek dla programowania wieloprocesorowego i rwnolegego.

CEL I ZAKRES PRACY

Cel i zakres pracy

Mj

wybr

na

temat

pracy

pad

na

Fortran

90/95

poniewa

bardzo interesuj mnie oglnie jzyki programowania i staram si pozna ich jak najwicej. Moja praca bdzie powicona przedstawieniu jzyka Fortran 90/95 jako uytecznego narzdzia do oblicze wszelkiego rodzaju rwna matematycznych jedake ja skupi si na problemie obliczania rwnania falowego. Oczywicie chcc rozwin temat opisze sam jzyk programowania. Praca ta wic jest skierowana do grona ludzi interesujcych sie zarwno programowaniem jak rwnie sam matematyk. W I rodziale mojej pracy opisaem najbardziejuzyteczne komendy, funkcje, wyraenia ktre przydadz si aby mile zacz programowanie z Fortranem 90/95. Wszystkie te procedury bd opisane w podpunkatch w celu atwiejszego zrozumienia i przyswojenia. Dziki tak opisanym komendom, funkcjom, i wyraeniom bdziemy mogli w atwy sposb powrci do nich w celach przypomnienia sobie czego co pominelimy lub wyleciao nam z gowy. W II rodziale natomiast przejdziemy do zastosowa owych komend, fukcji czy wyrae w konkretnych przykadach programw dotyczcych wanie tytuowgo rwnania falowego. Zobaczymy jak bardzo s one uyteczne zarwno w opisanych przeze mnie programach, jak rwnie dobrze je mona wykorzysta w inncyh podobnych programach obliczeniowych tego typu.

PODSTAWY JZYKA FORTRAN 90/95

3
3.1

PODSTAWY JZYKA FORTRAN 90/95


Struktura programu
Kady program pisany w jzyku Fortran powinien zaczyna si sowamem

kluczowym: Program [name] i koczy. End Program [name] W [name] wpisujemy oczywicie wasn nazw programu. Midzy tymi

dwoma elmentami bdzie si zawiera cay program gwny. Oczywicie dochodz do tego jeszcze inne elementy takie jak modouy czy funkcje ale o nich pniej.

3.2

Typy zmiennych
Jak w kadym jzyku programowania wyrniamy rne typy zmiennych

dla Fortrana s to: INTEGER REAL COMPLEX LOGICAL - typ cakowity - typ rzezeczywity - typ zespolony - typ logiczny - dla liczb cakowitych, - dla liczb rzeczywistych, - dla liczb zespolonych, - dla danych logicznych (o wartociach .TRUE.- prawda i .FALSE. - fasz), CHARACTER - typ tekstowy - dla danych tekstowych.

Nazwy dla kadego z typw musz spenia okrelone zasady1 : dugo nazwy do 31 znakw pierwszy znak musi by liter tylko litery, podkrelenia i cyfry sa dopuszczalne wielkie i mae litery nie s rozrniane nazwy mog by identyczne ze sowami kluczowymi nazwy moga byc takie same jak nazwy funkcji wewnrznych

D.Chrobak, FORTRAN Praktyka Programowania, Wydawnictwo MIKOM, Warszawa 2003

PODSTAWY JZYKA FORTRAN 90/95

3.3

Podstawowe elementy jzyka


Program pisany w jzyku Frotran skada si z kolejnych linii, w ktrych zapisywane

s instrukcje. Tworzc taki program moemy uywa nastepujcych symboli2 : a) liter alfabetu aciskiego - ABCDEFGHIJKLMNOPRSTUVWXYZ - abcdefghijklmnoprstuvwxyz b) cyfr - 0123456789 c) znakw specjalnych + - plus / . , = ( ) : ! % ; < > ? $ - minus - dzielenie - mnoenie - kropka - przecinek - rwno - odstp - nawias lewy - nawias prawy - cudzysw - dwukropek - wykrzyknik - procent - rednik - znak mniejszoci - znak wikszoci - znak zapytania - dolar - podkrelenie

J. R. Piechna, Programowanie w jzyku Fortran 90 i 95 Ocyna Wydawnicza Politechniki War-

szawskiej, Warszawa 2000

PODSTAWY JZYKA FORTRAN 90/95

3.4

Parametry zmiennej
Nadanie parametru zmiennej, a nastnie nadanie jej nazwy odbywa si za pomoc

schematu: Typ danej [(KIND=liczba zarezerwowanych bajtw)] :: nazwa zmiennej Kady z typw ma dodatkowy paramter (KIND), ktry okrela liczb zarezerwowanych bajwy w pamici komputera. W tabeli 13 przedstawione s wszystkie typy zmiennych z penymi opisami. Tabela 1: Tablica typw dla danego parametru Typ zmiennej INTEGER INTEGER INTEGER REAL REAL COMPLEX COMPLEX LOGICAL LOGICAL CHARACTER Warto parametru 1 2 4 4 8 4 8 1 4 1 Zakres: -127 do 127 Zakres: -32767 do 32767 Zakres: -2147483647 do 2147483647 Zakres: 1.18 1038 do 3.40 1038 Dokadnoc: 7-8 miejsc znaczcych Zakres: 2.23 10308 do 1.79 10308 Dokadnoc: 15-16 miejsc znaczcych Zakres: 1.18 1038 do 3.40 1038 Dokadnoc: 7-8 miejsc znaczcyc Zakres: 2.23 10308 do 1.79 10308 Dokadnoc: 15-16 miejsc znaczcych Warto: .TRUE. i .FALSE. Warto: .TRUE. i .FALSE. Zestaw znakw ASCII Specykacja

3.5

Instrukcja IF

W instrukcji tej wyrniamy dwie postaci: a) IF (wyraenie logiczne) instrukcja uwarunkowana Jej dziaanie jest nastpujce: Jeli wyraenie logiczne ma wartos .TRUE., realizowana jest instrukja
3

J. R. Piechna, Programowanie w jzyku Fortran 90 i 95 Ocyna Wydawnicza Politechniki War-

szawskiej, Warszawa 2000

PODSTAWY JZYKA FORTRAN 90/95

bdca kontynuacj linii, a nazywana instrukj uwawarunkowan. Gdy wyraenie logiczne ma warto .FALSE., instrukcja uwarunkowana jest pomijana i wykonywana jest nastpna linia programu. b) Posta druga (zwana blokow - bardziej odpowiadajca naturalnemu sposobowi foruowania warunkw): [nazwa konstrukcji] IF (wyraenie logiczne)THEN Grupa instukcji wykonywalnych, gdy wyraenie logiczne ma warto .TRUE. ELSE Grupa instukcji wykonywalnych, gdy wyraenie logiczne ma warto .FALSE. END IF [nazwa konstrukcji] Jesli warto wyraenia logicznego jest prawd, naley wykona zestaw kolejnych instrukcji do sowa kluczowego ELSE w przeciwnym wypadku naley wykona zestaw kolejnych instrukcji od sowa kluczowego ELSE do sowa kluczowego END IF.

3.6

Instrukcja CASE
Ta instrukcja suy do moliwoci wyboru, jest ona struktur sterujc.

Oglna jej posta jest nastpujca: [nazwa konstrukcji] SELECT CASE (okrelenie przypadku) CASE (lista przypadkw)[nazwa konstrukcji] blok instrukcji do wykonania CASE (lista przypadkw)[nazwa konstrukcji] blok instrukcji do wykonania . . . CASE DEFAULT [nazwa konstrukcji] blok instrukcji do wykonania END SELECT [nazwa konstrukcji] Jeli nie pojawi si aden z przypadkw, moemy wykona odpowiednie instrukcje, korzystajc z opcji CASE DEFAULT.

PODSTAWY JZYKA FORTRAN 90/95

3.7

Instrukcja DO

Oto jej posta: [nazwa konstrukcji] DO [,] zmienna = warto poczatkowa zmiennej, warto kocowa zmiennej, [przyrost zmiennej w kadym cyklu] [blok instrukcji do wykonania] END DO[nazwa konstrukcji] Instrukcja ta wykonuje si wielokrotnie zwikszajc bd zmniejszajc si o zmienn kontrolowan(np. i) w kadym cyklu a do uzyskania warotci kocowej zmiennej.

3.8

Postawowe instrukcje wejcia i wyjcia


Instrukcjami pozwalajcymi na wczytanie przez program danych i ich

wyprowadzenie na zewntrz s instrucje READ i WRITE4 : READ (numer strumienia danych, posta danych) lista zmiennych do wczytania WRITE (numer strumienia danych, posta danych) lista zmiennych do wysania gdzie: numer strumienia danych jest liczb cakowit, ktra okrela skd dane bd przesyane posta danych moe zawiera przepis na posta danych (format) Symbol gwiazdki (*) zamiast numeru strumienia danych i postaci danych nazywa si formatem swobodnym. Przykad: WRITE (*,*) Podaj warto x: READ (*,*) x Instrukcja WRITE wyle na ekran monitora podpowied do uytkownika programu o nadaniu wartoci zmiennej x. Nastpnie w isnstrukcji READ nadajemy jej warto, ktr wpisujemy z klawiatury. Kolejn ciekaw instrukj I/O(czyli input/output) jest instrukcja OPEN, ktra kojarzy nazw zbioru na dysku z symbolicznym numerem strumienia danych: OPEN (UNIT = numer strumienia danych, FILE = nazwa zbioru STATUS = status zbioru)5

4 5

E. B. James, F. OBrien, P. Whitehead, Fortran kurs programowania, WNT 1974 http://pl.wikibooks.org/wiki/Fortran

PODSTAWY JZYKA FORTRAN 90/95

10

gdzie: numer strumienia danych jest liczb cakowit nazwa zbioru zawiera informacje o nazwie zbioru, jaki kojarzymy z numerem strumiena danych status zbioru przyjmuje posta staej tekstowej o treci OLD (gdy oczekujemy e zbir istnieje na dysku) lub NEW (gdy oczekujemy e zbir nie istnieje na dysku). Przykad: OPEN(UNIT=1, FILE=Dane.dat, STATUS= OLD) Nastpuje tutaj skojarzenie strumiena danych o numerze 1 ze zbiorem o nazwie Dane.dat. Jeeli w instrukcji READ lub WRITE pojawi si numer strumienia 1, bdzie to znaczyo, i informacje bed czytane ze zbioru Dane.dat lub do niego zapisywane.

3.9

Zmienne indeksowane TABLICE


Tablice zawsze peniy wan rol w Fortranie. Najczciej si je stosuje tak

skonstruowane, by kady element lub grupa elementw odpowiaday wzowi siatki obliczeniowej6 . Tablica jest charakteryzowana przez liczb wymiarw i rozmiar, ktry okrela dopuszczany zakres indeksw w kadym wymiarze. 3.9.1 Deklaracja tablicy

Oglna posta: Typ zmiennej, DIMENSION (wymiar,rozmiar):: [nazwa] Przykad: REAL, DIMENSION (0:1, 5:7) :: a Tablica ta skada si z dwch wierszy (0 i 1) oraz trzech kolumn (5,6,7) jest ona dwuwywmiarowa o rozpitoci w poziomie 3 i pionie 2. Tabela 2 przestawia tak tablice. Tabela 2: Przykadowa tablica a(0,5) a(0,6) a(0,7) a(1,5) a(1,6) a(1,7)

D.Chrobak, FORTRAN Praktyka Programowania, Wydawnictwo MIKOM, Warszawa 2003

PODSTAWY JZYKA FORTRAN 90/95

11

Deklarujc tablice naley mie na uwadze, e: warto dolnej granicy zmiennoci indeksu od warto grnej granicy oddzielamy dwukropkiem jeeli warto dolnej granicy zmiennoci indeksu nie zostaa okrelona to domylnie przyjmuje warto 1 podanie warto grnej granicy zmiennoci indeksu jest obowizkowe warto grnej granicy zmiennoci indeksu musi by wiksza lub rwna wartoci dolnej granicy jeeli dla dowolnego indeksu wartoci grnej granicy zmiennoci indeksu jest mniejsza od dolnej to macierz zostanie utworzona, ale jej rozmiar bdzie rwny 0 warto granicy zakresu moe by liczb rzeczywist, przy czym brana pod uwag bdzie jedynie jej cz cakowita Operowanie tablicami odbywa si w taki sam sposb jak zmiennymi prostymi. Przykad: ... tablica a(1,1)=1 tablica a(1,2)=2 tablica a(2,1)=3 tablica a(2,2)=4 tablica b=tablica a+1.0 ... Najpierw przypisujemy konkretnym komrkom tablicy a wartoci, a nastpnie zwikszamy kad z tych wartoci o 1.0 przypisujemy je tablicy b7 . 3.9.2 Dynamiczne tworzenie tablic

W Fortanie 90 pojawiaa si bardzo ciekawa moliwo nadawania wymiaru tablicy, co byo nie spotykane we wczeniejszych wersajch jzyka. Dynamiczne tworzenie tablic daje moliwo uytkownikowi okrelenie wymiaru tablicy w momencie jej tworzenia co jest bardzo wygodne. Su do tego sowa kluczowe takie jak: ALLOCATABLE, ALLOCATE i DEALLOCATE.
7

J. R. Piechna, Programowanie w jzyku Fortran 90 i 95 Ocyna Wydawnicza Politechniki War-

szawskiej, Warszawa 2000

PODSTAWY JZYKA FORTRAN 90/95

12

3.9.3

Konstruktor tablicy

Jeli tablica jest jednowymiarowa, to istnieje mechanizm umoliwiajcy bezporednie nadanie wartoci elementom tablicy w czasie jej deklarowania. Mechanizm ten nazywany jest konstruktorem tablicy. Zaraz po nadaniu nazwy tablicy moemy wpisa warto kolejnych elementw, ktre musz si zawiera midzy ogranicznikami (/ /). Przykad: ... INTEGER, DIMENSION (3) :: a=(/ 1, 2, 3 /) ... 3.9.4 Zmiana ksztatu tablicy

Funkcja RESHAPE powoduje skopiowanie zawartoci tablicy o danym ksztacie do tablicy o innym ksztacie. Umoliwia ona utworzenie tablicy o zadeklarowanym ksztacie z elementw tablicy wskazanej jako rdo danych. Przykad: ... REAL, DIMENSION (2,3):: a=RESHAPE((/1, 2, 3, 4, 5, 6/),(2,3)) REAL, DIMENSION (3,2):: b=RESHAPE(a,(3,2)) W powyszym fragmencie programu uyty zosta konstruktor tablicy jednowymiarowej do nadania wartoci elementom tablicy dwuwymiarowej przez wykorzystanie funkcji RESHAPE.

3.10

PODPROGRAMY (SEGMENT SUBROUTINE)

Niektre fragmenty programy mog si powtarza lub by wykorzystane przez innych programistw. Moliwe jest zatem wyodrbnienie ich i przedstawienie w postaci podprogramu. W Fortranie 90 wystpuj 3 kategorie podprogramw8 : A) Wewntrzne B) Zewntrzne C) W moduach

http://www.chem.univ.gda.pl/ adam/FORTRAN/

PODSTAWY JZYKA FORTRAN 90/95

13

Deklaracja podoprgramu wyglda tak: SUBROUTTINE nazwa (lista parametrw formalnych) . . . deklaracja . . . tre procedury . . . RETURN END SUBROUTINE nazwa Aby skorzysta w programie gwnym z podprogramu naley uy instrukcji: CALLnazwa(lista prametrw formalnych) Jak wida program gwny z podprogramem wymienia informacje za pomoc listy prametrw formalnych, tak wic zadeklarowane zmienne musz by tego samego typu, aby program mg si wykona. 3.10.1 Podprogramy wewntrzne takiego programu, jak nazwa wskazuje znajduje si wewntrz

Tre

prgramu gwnego. Oddzielony jest od instrukcji segmentu instrukj CONTAINS, ktra sygnalizuje obecno podprogramu9 . Zmienne i deklaracaje segmentu programu gwnego s dostpne dla podprogramu wewntrznego, natomiast odwrotnie nie, czyli zmienne i deklaracaje podprogramu nie s dostpne dla programu gwnego. PROGRAM [nazwa] IMPLICIT NONE . . . tre segmentu gownego. . . CALL nazwa() STOP CONTAINS SUBROUTTINE nazwa (lista parametrw formalnych) IMPLICIT NONE . . . deklaracja RETURN END SUBROUTINE nazwa END PROGRAM [nazwa] 3.10.2 Podprogramy zewntrzne

Podprogramy zewntrzne znajduj sie poza segmentem gwnym programu.

Oliveira, Writing Scientic Software, Wydawnictwo Cambridge University Press, 2006

PODSTAWY JZYKA FORTRAN 90/95

14

Wystpujce w procedurze zmiennne nazywane s zmiennymi lokalnymi, gdy wystpuj tylko w obszarze procedury. cznik czyli prototyp kodu umieszczony we fragmencie kodu znajduje si midzy sowami kluczowywmi INTERFACE, a END INTERFACE, ktre umieszczone s w segmencie programu gwnego. W czniku tym znajduj si lista parametrw formalnych, czyli ustalona lista niezbdnych danych jakie powinny by przekazane z programu gownego i jako procedury przekazane z powrotem do programu gwnego. Stosujemy w tym celu atrybut INTENT() o wartoci IN dla dla zmiennych przekazywanych przez segment gwny do podprogramu, o wartoci OUT dla zmiennych przekazywanych w przeciwnym kierunku oraz IN OUT dla zmiennych przekazywanych w obu kierunkach. SUBROUTTINE nazwa (lista parametrw formalnych) IMPLICIT NONE . . . deklaracja . . . tre procedury. . . RETURN END SUBROUTINE nazwa PROGRAM [nazwa] IMPLICIT NONE INTERFACE SUBROUTTINEnazwa(lista parametrw formalnych) IMPLICIT NONE . . . deklaracja RETURN END SUBROUTINEnazwa END INTERFACE . . . tre segmentu gwnego. . . STOP END PROGRAM[nazwa] 3.10.3 Funkcje

Tego typu podprogramy wykorzystujemy, gdy wynikiem dziaania programu jest warto tylko jednej zmiennej.Wywoanie funkcji odbywa si przez napisanie jej nazwy z list paraemtrw aktualnych.

PODSTAWY JZYKA FORTRAN 90/95

15

Oglna posta to: FUNCTION nazwa (lista parametrw formalnych) . . . deklaracje . . . tre procedury. . . nazwa=wyraenie (arytmetyczne, logiczne) RETURN END FUNCTIONnazwa Wewntrz podprogramu o tej postaci musi wystpowa podstawienie wyniku dziaania procedury pod nazw funkcji lub musi by uyta opcja RESULT(), zawierajca nazw zmiennej, ktra jest rezultatem dziaania funkcji. Zastosowanie funkcji w programie(metoda podprogramu wewntrzengo): PROGRAM [nazwa] IMPLICIT NONE . . . tre segmentu gwnego. . . CALL nazwa() STOP CONTAINS FUNCTION nazwa (lista parametrw formalnych) IMPLICIT NONE . . . deklaracja . . . tre. . . RETURN END FUNCION nazwa END PROGRAM [nazwa] Mona te za pomoc podprogramu zewntrzengo. Rnica funkcji od procedury plega na tym, e funkcja przekazuje jedn zmienna procedura wicej ni jedna. Opcja RESULT Zamiast podstawienia pod nazw funkcji rezulatu dziaania mona wskaza zmienna bdac rezultatem dziaania. Do tego typu zastosowa wykorzystuje si opcj ze sowem kluczowym RESULT
10

10

J. R. Piechna, Programowanie w jzyku Fortran 90 i 95 Ocyna Wydawnicza Politechniki War-

szawskiej, Warszawa 2000

PODSTAWY JZYKA FORTRAN 90/95

16

FUNCTION nazwa (lista parametrw formalnych) RESULT (zwracana warto) IMPLICIT NONE . . . deklaracja . . . tre. . . RETURN END FUNCION nazwa Funkcje standardowe W tabeli 3 podane s najczciej uywane funkcje opisane w bibliotece procedur jzyka fortran:

Tabela 3: Funkcje wystpujce w fortranie Warto bezwzgldna a ABS(a) Funkcja wykadnicza ea Logarytm naturalny a Lograytm dziesitny Funkcja sinus a(argument w radianch) Funkcja arcus sinus a Funkcja cosinus a(argument w radianch) Funkcja arcus cosinus a Funkcja tanges a(argument w radianch) Funkcja arcus tanges a Pierwiastek kwadratowy Suma elementw tablicy, wzdu wymiaru dim, speniajacych warunek zawarty w maska Iloczyn elementw tablicy, wzdu wymiaru dim, speniajacych warunek zawarty w maska Iloczyn macierzy A i B Generator liczb losowych Inicjalizacja generatora liczb losowych PRODUCT(a,dim,maska) MATMUL(a,b) RANDOM NUMER(r) RANDOM SEED() SUM(a,dim,maska) EXP(a) ALOG(a) ALOG10(a) SIN(a) ASIN(a) COS(a) ACOS(a) TAN(a) ATAN(a) SQRT(a)

3.10.4

Moduy

Jest on jednostk programw o rnym przenaczeniu. Inne programy odwouja si do moduu uzyskujc dostp do staych danych bad denicji. W module specykacje

PODSTAWY JZYKA FORTRAN 90/95

17

s globalne dla wszystkich segmentw, w ktrych zostay uyte. Dostp do moduu uzyskuje si za pomoc instrukcji USE i nazwa moduu11 . Podprogramy moduu podobnie jak podprogramy innych segmentw programu, mog zosta zorganizowane w grupy przez nadanie im wsplnej nazwy. Wymaga to zdeniowania jawnego interfejsu dla tych podprogramw. Posta: MODULE nazwa . . . deklaracje. . . END MODULE nazwa Idee wyokysania moduu ilustruje schemat (Tabela 4): Tabela 4: Schemat moduu Modu A Segment gwny USE modu A Segment pomocniczy SUBROUTINE h() USE modu A

Oba te segmenty gwny i pomocniczy maj dostp do staych i denicji zamieszczonych w module. Moduy wykorzytuj si gwnie do: denicji typw danych, deklaracji globalnych(w skali caego programu) obiektw danych, denicji nowych operatorw lub referncji istniejcych operatorw wewntrznych, tworzenie bibliotek podprogramw, w tym interfejsw do podprogramww zewntrznych, Podprogramy umieszczone w moduach maj szersze zastosowanie od podprogramw wewntrzynych i zewntrznych.

11

D.Chrobak, FORTRAN Praktyka Programowania, Wydawnictwo MIKOM, Warszawa 2003

PODSTAWY JZYKA FORTRAN 90/95

18

Cechy gwne moduu: * mog wywoa wszystkie segmenty korzystajce z tego moduu, * ma on bezporedni dostp do zmiennych zawartych w module midzy instrukcj MODULE, a porzedzajcym jego opis, * wszystkie zmienne delaklarowane w podprogramie s zminnymi lokalnymi niedostpnymi na zewntrz, 3.10.5 Podprogram rekurencja (RECURSIVE)

Program rekurencyjny charakteryzuje si tym, e moe wywoa sam siebie. Nagwek programu musi zawiera sowo RECURSIVE, jeeli jest to funkcja to musi rwnie zawiera sowo kluczowe RESULT. Jedna z postaci: RECURSIVE FUNCTION nazwa (lista parametrw formalnych) RESULT (zwracana warto) . . . deklaracje warunkw formalnych. . . . . . tre. . . END FUNCTION 3.10.6 Podprogram naturalny (PURE)

Nagwek tego podprogramu musi zawiera sowo kluczowe PURE. Tego typu programy charakteryzuj si nastpujcymi cechami: nie jest moliwe odwoanie si to zmiennych globalnych argumenty musz by deklarowane z atrubutem INTENT dla funkcji dopuszczany jest atrybut INTENT (IN) instrukcje WRITE i READ mog pojawi si tylko wtedy, gdy operacje, ktre wykonuj, odnosz si do tak zwanych plikw wewntrznych podprogram podprogramu zewntrzego PURE musi by tego samego rodzaju Jedna z postaci: PURE SUBROUTINE nazwa (lista parametrw formalnych) . . . deklaracje warunkw formalnych. . . . . . tre. . . END SUBROUTINE

PODSTAWY JZYKA FORTRAN 90/95

19

3.11

Struktury

Su one przede wszystkim tworzeniu wasnych typw danych, mog zawiera informacje typu tekstowego i numerycznego. Fortran zapewnia moliwo tworzenia takich typw nazwanych w odrnieniu od typw wasnych typami pochodnymi12 . Aby utworzy tak zmienn trzeba zadeklarowa jej typ. W deklaracji zawarte s opisy szczegowe elementw skadowych tworzonego typu. Dostp do elementw struktury moliwy jest przez podanie nazwy zmiennej, nastpnie separatora w postaci znaku (%) i dalej nazwy elementu skadowego typu. Deklaracja typu pochodnych odbywa si w segmencie programu gwnego: PROGRAM [nazwa] IMPLICIT NONE TYPE::nazwa . . . deklaracje. . . END TYPE nazwa TYPE (nazwa) :: nazwa zmiennej nazwa zmiennej%dkelaracje z TYPE = waroci STOP END PROGRAM [nazwa] Wygld struktury(Tabela 5): Tabela 5: Przykad struktury 1 2 3 4 tab a 5 12 13 77

Rnica pomidzy struktur a tablic STRUKTURA elementy moga by danymi rnych typw TABLICA elementy mog zawiera dane tylko tego samego typu (np. REAL) indeksami jest opowiedni tekst poprzedzony indeksami sa liczby typu cakowitego znakiem % dostp do elementu odbywa si porzez podanie nazwy przypisyanej do typu i nazwy po separatorze (%) (np. student%imi (struktura obywatel) )
12

pisane w nawiasach dostp do elementu odbywa si porzez podanie nazwy tablicy i numeru indeksu (np. tab a(3))

J. R. Piechna, Programowanie w jzyku Fortran 90 i 95 Ocyna Wydawnicza Politechniki War-

szawskiej, Warszawa 2000

PODSTAWY JZYKA FORTRAN 90/95

20

3.12

Wskaniki

Wskaniki s wykorzystywane w rnych jzykach programowania i rwnie w Fortranie znalazy swoje miejsce. Rnica pomidzy zmienn, a wskanikiem polega na tym, e zmienna zawiera dane, a wskaznik okrela miejsce gdzie przechowywane s te dane. Wskaniki zostay wprowadzone w celu usprawnienia dostpu do zoonych typw zmiennych takich jak tablice czy struktury13 . Wskanik jak nazwa wskazuje musi co wskazywa, musi zawiera informacje o wasnociach tego obiektu, konieczne jest jego deklarowanie za pomoc atrybutu POITNER wraz z dokadnym opisem wasnoci wskazanego obiektu, moe on wkazywa tylko te obiekty, ktre zostay zadeklarowane do wskazania przez sowo kluczowe TARGET. Wskanik wiemy ze wskazanym obiektem za pomoc instrukcji =>. Pzykdowa posta: PROGRAM[nazwa] IMPLICIC NONE . . . Deklaracja wzkanika obiektu. . . . . . POITNER :: nazwa wskanika. . . . . . TARGET :: nazwa co ma wskazywa . . . nazwa wskaznika => nazwa co ma wskazywa STOP END PROGRAM [nazwa] Za pomoc wskanika moemy doprowadzi do stworzenia dynamicznej tablicy przez sowo kluczowe ALLOCATE (), ktre wczeniej nie byy deklarowane. Daje si zauway rnice pomidzy zmiann, ktra na stae zwizana jest tym samym obszarem pamici, a wskanikiem ktry w czasie dziaania programu moe wskazywa na rne obszary pamici. Samo zadeklarowanie wskanika nie powoduje powizania go z jakim kolwiek obiektem, dopiero zancznik (=>) wskazuje na obiekt i tworzy takie powizanie. Wskanik moe znajdowa si w dwch stanach: * powizanym (gdy wskazuje na jaki obiekt) * nie okrelony (gdy nie jest przypisany do adnego obiektu) Za pomoc funkcji ASSOCIATED(nazwa wskanika), ktra zwraca wartoci logiczne .TRUE.- gdy jest powizany oraz .FALSE.- gdy jest nie okrelony programista ma
13

D.Chrobak, FORTRAN Praktyka Programowania, Wydawnictwo MIKOM, Warszawa 2003

PODSTAWY JZYKA FORTRAN 90/95

21

moliwo kontroli statusu wskanika. Do wymuszenia zerwania powizania, a zatem do osignicia statusu wskanika nie okrelonego, stosowana jest funkcja NULLIFY(nazwa wskanika).

3.13

Intrukcje wejcia i wyjcia

Nie rzadko zdarza si, e w przypadku bardzo skoplikowanych oblicze konieczne jest zapisanie na dysk duej iloci danych potrzebnych do pniejszych oblicze (np za pomoc innego programu). Omawiana wczeniej instrukcja OPEN zawiera bogat list parametrw, umoliwiajac midzy innymi zadeklarowanie postaci zapisu danych na dysk. W rnych dziedzinach nauki spotykamy si z koniecznocia rozwizania duych ukdw rwnia liniowych. Rozwizania takie skdaja si zazwyczaj z dwch etapw: eliminacji wprost uzyskania ostatecznego rozwizania wstecz

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

22

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

4.1

Rwnanie falowe - posta numeryczna

Posta numeryczna rwnania falowego14 : utt (x, t) = c2 uxx (x, t) dla 0 < x < a i 0 < t < b Warunki brzegowe: u(0, t) = 0 i u(a, t) = 0 dla 0 u(x, 0) = f (x) dla 0 t x b, a, (2) (3) (4) (1)

ut (x, 0) = q (x) dla 0 < x < a. Dokonujemy dyskretyzacji po czasie: utt (x, t) = oraz u(x + h, t) 2u(x, t) + u(x h, t) + O(h2 ) h2 Nastpnie rozwizujemy rwno15 : uxx (x, t) = ui,j +1 2ui,j + ui,j 1 ui+1,j 2ui,j + ui1,j = c2 2 k h2 Podstawiaj do rwnania (7) r =
ck h

u(x, t + k ) 2u(x, t) + u(x, t k ) + O (k 2 ) k2

(5)

(6)

(7)

otrzymujemy: (8)

ui,j +1 2ui,j + ui,j 1 = r2 (ui+1,j 2ui,j + ui1,j ) Ostatecznie otrzymujemy: ui,j +1 = (2 2r2 )ui,j + r2 (ui+1,j + ui1,j ) ui,j 1

(9)

Z wykorzystaniem tych pomocnych rwna stworzyem program do rwnania falowego napisany w jzyku Fortran, ktry znajduje si w nastpnym podrodziale.
14

J. H. Mathews and K. D. Fink, Numerical MethodsUsing MATLAB (3rd Edition), Prentice

Hall 1999 15 M.Motyka, Symulacje komputerowe w zyce, Wydawnictwo Helion, Warszawa 2002

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

23

Kompilator jaki wykorzystaem do napisania mojego programu rwnania falowego nosi nazw Silverfrost FTN95. Jest ona program konsolowym przeznaczonym gownie do programowania w jzyku Fortran 90/95, ale mona w nim pisa rwnie programy w C++ czy Javie. Kompilator Silverfrost FTN95, ktry uwalnia nas od czarno-biaego okienka MS-DOSa. Co daje nam ten kompilator? Ot prosz pastwa daje nam Plato3 IDE!(rys. 1) IDE to Zintegrowane rodowisko programistyczne, a to znaczy e mamy do czynienia z zespoem aplikacji, wspomagajcych programowanie tak, a eby stao si ono proste i przyjemne. Plato posiada to co kade szanujce si IDE powinno posiada, czyli np. kolorowanie skadni, wbudowany kompilator czy niekoczce si cofnij.

Rysunek 1: Wygld kompilatora

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

24

4.2

Program rozwizujcy rwnanie falowe

Program rf implicit none interface function Fi(i,H) result(y) implicit none integer,intent(in):: i real,intent(in) :: H real :: arg real :: y end function Fi function Gi(i,H) result(y) implicit none integer,intent(in):: i real,intent(in) :: H real :: arg real :: y end function Gi end interface integer :: i,j real :: X, T real:: C integer :: N, M real :: K, R, H, R2, R22, S1, S2 real,dimension(1000,1000)::U ! Liczniki dla ptli ! maximum x i maximum t ! Staa rwania falowego ! Wymiar siatki ! Pomocnicze rwnania ! Siatka-Amplitudy

write(*,*) Skoczona-rnica rozwizania rwnania falowego - write(*,*) !Proces wprowadzania danych przez uytkownika write(*,*) Podaj X (Przedzia graniczny dla x) write(*,*) write(*,*) Dla przykadu : 1 write(*,*) read(*,*)X write(*,*) Podaj T (Przedzia graniczny dla t) write(*,*)

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

25

write(*,*) Dla przykadu : 0.5 write(*,*) read(*,*)T write(*,*) Wprowadzies X = ,X, T =, T write(*,*) write(*,*) write(*,*) Prosz wprowadzi wymiar siatki dla x-kierunek : write(*,*) write(*,*) Dla przykadu : 20 write(*,*) read(*,*)N write(*,*) Prosz wprowadzi wymiar siatki dla y-kierunek : write(*,*) write(*,*) Dla przykadu : 30 write(*,*) read(*,*)M write(*,*) Wprowadzie N =,N, M =,M write(*,*) write(*,*) Prosz wprowadzi staa rwnania falowego : write(*,*) write(*,*) Dla przykadu : 2 write(*,*) read(*,*)C write(*,*) Wprowadzie C =,C write(*,*) !Stae stworzone H = X / ( N - 1 ); K = T / ( M - 1 ); R = C * K / H; R2 = R * R; R22 = R * R / 2.0; S1 = 1.0 - R * R; S2 = 2.0 - 2.0 * R * R; !delta x !delta t

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

26

!Otoczenie graniczne do j=1,M,1 U(1,j)=0 U(N,j)=0 end do !Rozwizania dla t=t 0 i t=t 1 do i=2,N-1,1 U(i,1)=Fi(i,H) U(i,2)=S1 * Fi(i,H) + K * Gi(i,H) + R22 * ( Fi(i+1,H) + Fi(i-1,H) ) end do !Iteracje w czasie petla1: do j=3,M,1 petla2: do i=2,N-1,1 U(i,j) = S2 * U(i,j-1) + R2 * ( U(i-1,j-1) + U(i+1,j-1) )- U(i,j-2) end do petla2 end do petla1 !Wynik rozwizania na ekran petla1: do j=1,M,1 write(*,*)(K * (j - 1)) petla2: do i=1,N,1 write(*,*)krok,i,==,U(i,j) end do petla2 end do petla1 open(unit=2,le=wyniki.txt,status=new) !Wynik rozwiazania do pliku petla1: do j=1,M,1 write(2,*)(K * (j - 1)) petla2: do i=1,N,1 write(2,*)U(i,j) end do petla2 end do petla1 End Program rf !ustalone !ustalone

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

27

!Siatka funkcji dla amplitudy function Fi(i,H) result(y) implicit none integer :: i real :: x i real :: y,H arg = H * (i - 1) if( (x i >= 0) .and. (x i <= 1.0) ) y=sin ( 3.1415926 * x i) else write (*,*) Fi() :Argument poza zasigiem! Wyjcie ! write (*,*) x i : , x i end if return end function Fi !Funckja siatki dla szybkoci function Gi(i,H) result(y) implicit none integer :: i real :: x i real :: y,H arg = H * (i - 1) if( (x i >= 0) .and. (x i <= 1.0) ) y=0 else write (*,*) Gi() :Argument poza zasigiem! Wyjcie ! write (*,*) x i : , x i end if return end function Gi Program [rwnanie falowe] jest podzielony na kilka czci, a ja postaram si jak najbardziej przybliy te czci. Mianowicie pierwsza cze programu to jest program gwny, gdzie zawarte s najwaniejsze elementy programu. Druga nie mniej wana to funkcji (funkcja Fi i Gi )zdeniowane poza programem gwnym. Pierwsza z funkcji czyli Fi odpowiada za wielko siatki kartezjaskiej dla amplitudy, natomiast druga z funkcji Gi odpowiada za szybko rozchodzenia si fali. Obie funkcje pobieraj licznik then then

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

28

pierwszej ptli (i) oraz zmienn pomocnicz (H) oraz zwracaj y. Zarwno w funkcji Fi i Gi obliczana jest warto x i i sprawdzane czy mieci si w przedziale <0,1>, jeeli tak to wykonywane s okrelone dziaania. W pierwszej czci programu gwnego s zdeniowane prototypy funkcji jakie zostay opisane poza nim, aby program mg z nich skorzysta w celu poprawnego dziaania. Dalej s zdeniowane potrzebne zmienne do dziaania programu m.in. maximum x i t czy staa rwnani falowego. Kolejna cze programu jest ju typowo wizualna poniewa jej zadanie jest wywietlenie na ekranie tego czego bdzie potrzebowa program do obliczenia rwnania falowego. W dalszej czci s stworzone zmienne pomocnicze suce do prostszego zapisu programu i nie pogubienia si w nim podczas tworzenia. Po tej czci mamy serce programu, w ktrym wyrnione s dwie ptle po j i po i oraz trzecia najwaniejsza ptla podwjna w ktrej bdzie dokonywao si sedno oblicze i tworzenie fal. Ostatnia cz programu to przestawienie wynikw na ekran i zapis do pliku tych e wynikw. Program ten jak ju wyej wspomniaem jast napisany przy wykorzystaniu rwna z podroziau(4.1), bez ktrych ciko by mi byo go napisa. Chciabym przedstawi opis programu, ktry dziaa w ten sposb, e wpierw trzeba wprowadzi kolejne zmienne: 1. warunkw brzegowych (A,B) (Rysunek 2) 2. wielko siatki (N,M) (Rysunek 3) 3. prdko z jak fala ma si porusza(C) (Rysunek 3)

Rysunek 2: Wprowadzenie zmiennych A i B

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

29

Rysunek 3: Wprowadzenie zmiennych N, M, C Ostatecznie mamy wynik programu po wprowadzonych danych(Rysunek 4)

Rysunek 4: Wynik programu

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

30

Na podstawie powyszych rysunkw przestawiajcych dziaanie mojego programu mona jednoznacznie stwierdzi czy program dziaa poprawnie czy te nie. Jednake chcc obali wszelkiego rodzaju spekulacje na ten temat posu si dodatkowym programem do zwizualizowania moich danych, a mianowicie programem gnuplot. Gnuplot16 - program do tworzenia wykresw w 2 i 3 wymiarach. Praca z programem odbywa si w wierszu polece lub trybie wsadowym. Domylnie ustawiony jest terminal x11 (rys. 5).

Rysunek 5: Gnuplot terminal Dziki temu, e program [rwnanie falowe] zapisuje swoje wyniki dziaania do pliku tekstowego (wyniki.txt), mona w bardzo atwy sposb przenie te wyniki do programu gnuplot. Wystarczy tylko za pomoc opcji open wyznaczy ciek bezwzgldn do pliku wyniki.txt tam, gdzie zosta on zapisany (rys. 6).

16

http://www.gnuplot.info/

NUMERYCZNE ROZWIZANIE RWNANIA FALOWEGO

31

Rysunek 6: Wyznaczanie cieki do pliku wyniki.txt Ostatecznie otrzymujemy wykres na podstawie pliku wyniki.txt.(rys. 7)

Rysunek 7: Rozwiazanie dla czasu t=0.5

PODSUMOWANIE I WNIOSKI

32

Podsumowanie i wnioski
Program do obliczania rwnania falowego tylko potwierdza fakt, e jzyk

programowania jakim jest Fortran 90/95 jaki samo programowanie w tym jzyku jest przeznaczone dla osb dosy dobrze znajcych si na matematyce, zyce czy innych naukach cisych. Tylko po to, aby w peni wykorzysta moliwoci jakie drzemi w tym jzyku. Fortran jest uywany od blisko pidziesiciu lat i jest on powszechnie stosowany przy prowadzeni przede wszystkim oblicze numerycznych, co nikogo nie dziwi. Obliczenia aerodynamiczne samolotw, wytrzymaoci ich struktur czy obliczenia cieplne, prowadzone s wycznie w tym jzyku. Podczas pisania programu dostrzegem wiele zalet tego jzyka, a mianowicie: prostota zapisu, szybko oblicze oraz bezpieczestwo. Co rozumiem przez bezpieczestwo? Jeeli chodzi o jzyk Fortran to kompilator w jakim pracowaem bardzo rygorystycznie kontrolowa poprawno uycia typw zmiennych, przekroczenia zakresw tablic czy przenoszenia informacji midzy programem gwnym a procedurami. Z jednej strony moe troch ogranicza to moliwo jzyka, ale z drugiej strony chroni to przed niekiedy powanymi konsekwencjami pomyek. W przypadku zoonych struktur, do ktrych moemy zaliczy rwnanie falowe, jest to ogromn zalet. Koczc nasuwa si prosty wniosek, jeeli kto nauczy si programowa w jzyku Fortran poprzez, chociaby napisanie takiego zoonego programu jak rwnanie falowe na pewno mu si to przyda. Poszerzy swoj wiedz o jzyk programowania, ktry moe wykorzysta niezliczonych ilociach zastosowa.

LITERATURA

33

6
[1] [2] [3] [4] [5] [6] [7] [8] [9]

Literatura
D.Chrobak, FORTRAN Praktyka Programowania, Wydawnictwo MIKOM, Warszawa 2003 J. R. Piechna, Programowanie w jzyku Fortran 90 i 95 Ocyna Wydawnicza Politechniki Warszawskiej, Warszawa 2000 J. H. Mathews and K. D. Fink, Numerical Methods Using MATLAB (3rd Edition), Prentice Hall 1999 E. B. James, F. OBrien, P. Whitehead, Fortran kurs programowania, Wydawnictwo WNT, 1974 Oliveira, Writing Scientic Software, Wydawnictwo Cambridge University Press, 2006 M.Motyka, Symulacje komputerowe w zyce, Wydawnictwo Helion, Warszawa 2002 http://pl.wikibooks.org/wiki/Fortran http://www.chem.univ.gda.pl/ adam/FORTRAN/ http://www.icm.edu.pl/ aniat/fortran90/

[10] http://www.engin.umd.umich.edu/CIS/course.des/cis400/fortran/fortran.html [11] http://www.ibiblio.org/pub/languages/fortran/ [12] http://www.gnuplot.info/

Das könnte Ihnen auch gefallen