Programowanie w języku Fortran 90/95 - Program własny rozwiązywania równania falowego



Podobne dokumenty
1 Podstawy c++ w pigułce.

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

1 Podstawy c++ w pigułce.

Podstawy programowania skrót z wykładów:

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wykład z Technologii Informacyjnych. Piotr Mika

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie w języku Python. Grażyna Koba

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Podstawy programowania w C++

Języki programowania zasady ich tworzenia

Pascal - wprowadzenie

Podstawy Programowania C++

Programowanie w Turbo Pascal

Cw.12 JAVAScript w dokumentach HTML

Elementy języków programowania

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Algorytm. a programowanie -

1 Przygotował: mgr inż. Maciej Lasota

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Język ludzki kod maszynowy

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Programowanie strukturalne i obiektowe. Funkcje

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Fortran 90/95 wykład 1

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Część 4 życie programu

Ćwiczenie 1. Wprowadzenie do programu Octave

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

Języki skryptowe w programie Plans

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Definicje. Algorytm to:

Podstawy Programowania

Matlab Składnia + podstawy programowania

Wprowadzenie do programu Mathcad 15 cz. 1

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Programowanie w języku C++ Grażyna Koba

Wykresy i interfejsy użytkownika

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).

lekcja 8a Gry komputerowe MasterMind

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

Tablice (jedno i wielowymiarowe), łańcuchy znaków

1 Wprowadzenie do algorytmiki

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Wykład 8: klasy cz. 4

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

4. Funkcje. Przykłady

Logarytmy. Funkcje logarytmiczna i wykładnicza. Równania i nierówności wykładnicze i logarytmiczne.

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Obliczenia iteracyjne

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Języki Programowania. Elementy języków programowania. Wojciech Sobieski

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Tablice. Jones Stygar na tropie zmiennych

Informatyka I: Instrukcja 4.2

Technologie informacyjne - wykład 12 -

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium cyfrowej techniki pomiarowej. Ćwiczenie 4

Laboratorium nr 1. i 2.

Metody numeryczne Laboratorium 2

Lab 9 Podstawy Programowania

Podstawy Programowania Algorytmy i programowanie

Ćwiczenie 1. Wprowadzenie do programu Octave

Elementy metod numerycznych - zajęcia 9

LibreOffice Calc VBA

Pętle. Dodał Administrator niedziela, 14 marzec :27

Zapisywanie algorytmów w języku programowania

Wprowadzenie do Mathcada 1

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 3. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Wprowadzenie do programowania w języku FORTRAN

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Programowanie i techniki algorytmiczne

Podstawy Programowania Podstawowa składnia języka C++

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Języki formalne i techniki translacji

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Przykład 1 -->s="hello World!" s = Hello World! -->disp(s) Hello World!

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Liczby losowe i pętla while w języku Python

Wykorzystanie programów komputerowych do obliczeń matematycznych, cz. 2/2

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

JAVAScript w dokumentach HTML (1)

Transkrypt:

PAŃSTWOWA WYŻSZA SZKOŁA ZAWODOWA W CHEŁMIE Instytut Matematyki i Informatyki Kierunek: Matematyka Specjalność: Matematyka z Informatyką Arkadiusz Gadecki Nr albumu 2887 Programowanie w języku Fortran 90/95 - Program własny rozwiązywania równania falowego Praca dyplomowa napisana pod kierunkiem prof. dr hab. Krzysztofa Murawskiego CHEŁM 2008

1 Oświadczenie o autorstwie pracy Oświadczam, że niniejszą pracę przygotowałem samodzielnie. Wszystkie dane, definicje, wzory i sformułowania pochodzące z literatury są opatrzone odpowiednimi odsyłaczami. Praca przedłożona do oceny nie była dotychczas publikowana w żadnej formie. Imię i nazwisko autora pracy... (data i podpis autora pracy)

2 Spis treści 1 Wstęp 3 2 Cel i zakres pracy 4 3 PODSTAWY JĘZYKA FORTRAN 90/95 5 3.1 Struktura programu............................. 5 3.2 Typy zmiennych............................... 5 3.3 Podstawowe elementy języka........................ 6 3.4 Parametry zmiennej............................ 7 3.5 Instrukcja IF................................ 7 3.6 Instrukcja CASE.............................. 8 3.7 Instrukcja DO................................ 9 3.8 Postawowe instrukcje wejścia i wyjścia.................. 9 3.9 Zmienne indeksowane TABLICE.................... 10 3.9.1 Deklaracja tablicy.......................... 10 3.9.2 Dynamiczne tworzenie tablic.................... 11 3.9.3 Konstruktor tablicy......................... 12 3.9.4 Zmiana kształtu tablicy...................... 12 3.10 PODPROGRAMY (SEGMENT SUBROUTINE)............ 12 3.10.1 Podprogramy wewnętrzne..................... 13 3.10.2 Podprogramy zewnętrzne...................... 13 3.10.3 Funkcje............................... 14 3.10.4 Moduły............................... 16 3.10.5 Podprogram rekurencja (RECURSIVE).............. 18 3.10.6 Podprogram naturalny (PURE).................. 18 3.11 Struktury.................................. 19 3.12 Wskaźniki.................................. 20 3.13 Intrukcje wejścia i wyjścia......................... 21 4 NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 22 4.1 Równanie falowe - postać numeryczna................... 22 4.2 Program rozwiązujący równanie falowe.................. 24 5 Podsumowanie i wnioski 32 6 Literatura 33

WSTĘP 3 1 Wstęp W połowie lat 50-tych grupa naukowców z firmy IBM, prowadzona przez Johna Buckusa( ojca języka Fortran ), opracowała nowy język, który rewolucyjnie uprościł programowanie komputerów, przede wszystkim przez intuicyjny sposób kodowaia formuł matematycznych. Nazwa języka Fortran powstała jako akronim słów Formula Translation. Język ten szybko został zaakcteptowany przez użytkowników i od momentu powstania ulegał ciągłym modyfikacjom. Pierwsza standaryzacja nastapiła w 1960 roku, gdy American Standards Association (ASA) opublikowała krótki dokument określajacy podstawowy zestaw własności, jakim implementacja języka powinny się charakteryzować. Tak powstał Fortran IV. Następna standaryzacja znana była pod nazwą Fortran 66, ponieważ jej standaryzacja nastąpiła w 1966 roku. Wzorzec ten był jednak na potrzeby użytkowników zbyt ubogi i tworzone w tym czasie implementacje zawierały wiele rozszerzeń. W latach siedemdziesiątych nastąpiła bardzo ważna stadaryzacja języka Fortran znana jako Fortran 77, niedługo potem była standaryzacją światową. W tym czasie dokonywał się rozwój takich języków jak: C, C++ cz Ada. Następcą Fortranu 77 zosał Fortran 90 o możliwościach porównywalnych do tych wyżej wymienionych języków. Standard ten jest standardem światowym (ISO/IEC 1539:1991). Aktualnie obowiązującym standardem jest Fortran 95, który już nieznacznie różni się od swojego poprzednika. Fortran dysponuje wielką liczbą bibliotek, które pozwalają rozwiązać praktycznie każde zadanie numeryczne. Najważniejsze przyczyny, z powodu których Fortran jest wykorzystywany i rozwijany do dziś, to: szybkość obliczeń oraz wysoka wydajność kodu generowanego przez kompilatory Fortrana, wynikająca m.in. z jego długiej obecności na rynku programistycznym, znakomita skalowalność i przenośność oprogramowania (pomiędzy różnymi platformami sprzętowymi i systemami operacyjnymi), a także dostępność bibliotek dla programowania wieloprocesorowego i równoległego.

CEL I ZAKRES PRACY 4 2 Cel i zakres pracy Mój wybór na temat pracy padł na Fortran 90/95 ponieważ bardzo interesują mnie ogólnie języki programowania i staram się poznać ich jak najwięcej. Moja praca będzie poświęcona przedstawieniu języka Fortran 90/95 jako użytecznego narzędzia do obliczeń wszelkiego rodzaju równań matematycznych jedakże ja skupię się na problemie obliczania równania falowego. Oczywiście chcąc rozwinąć temat opisze sam język programowania. Praca ta więc jest skierowana do grona ludzi interesujących sie zarówno programowaniem jak również samą matematyką. W I rodziale mojej pracy opisałem najbardziejuzyteczne komendy, funkcje, wyrażenia które przydadzą się aby mile zacząć programowanie z Fortranem 90/95. Wszystkie te procedury będą opisane w podpunkatch w celu łatwiejszego zrozumienia i przyswojenia. Dzięki tak opisanym komendom, funkcjom, i wyrażeniom będziemy mogli w łatwy sposób powrócić do nich w celach przypomnienia sobie czegoś co pomineliśmy lub wyleciało nam z głowy. W II rodziale natomiast przejdziemy do zastosowań owych komend, fukcji czy wyrażeń w konkretnych przykładach programów dotyczących właśnie tytułowgo równania falowego. Zobaczymy jak bardzo są one użyteczne zarówno w opisanych przeze mnie programach, jak również dobrze je można wykorzystać w inncyh podobnych programach obliczeniowych tego typu.

PODSTAWY JĘZYKA FORTRAN 90/95 5 3 PODSTAWY JĘZYKA FORTRAN 90/95 3.1 Struktura programu Każdy program pisany w języku Fortran powinien zaczynać się słowamem kluczowym: Program [name] i kończyć. End Program [name] W [name] wpisujemy oczywiście własną nazwę programu. Między tymi dwoma elmentami będzie się zawierał cały program główny. Oczywiście dochodzą do tego jeszcze inne elementy takie jak modouły czy funkcje ale o nich później. 3.2 Typy zmiennych Jak w każdym języku programowania wyróżniamy różne typy zmiennych dla Fortrana są to: INTEGER - typ całkowity - dla liczb całkowitych, REAL - typ rzezeczywity - dla liczb rzeczywistych, COMPLEX - typ zespolony - dla liczb zespolonych, LOGICAL - typ logiczny - dla danych logicznych (o wartościach.true.- prawda i.false. - fałsz), CHARACTER - typ tekstowy - dla danych tekstowych. Nazwy dla każdego z typów muszą spełniać określone zasady 1 : długość nazwy do 31 znaków pierwszy znak musi być literą tylko litery, podkreślenia i cyfry sa dopuszczalne wielkie i małe litery nie są rozróżniane nazwy mogą być identyczne ze słowami kluczowymi nazwy moga byc takie same jak nazwy funkcji wewnęrznych 1 D.Chrobak, FORTRAN Praktyka Programowania, Wydawnictwo MIKOM, Warszawa 2003

PODSTAWY JĘZYKA FORTRAN 90/95 6 3.3 Podstawowe elementy języka Program pisany w języku Frotran składa się z kolejnych linii, w których zapisywane są instrukcje. Tworząc taki program możemy używać nastepujących symboli 2 : a) liter alfabetu łacińskiego b) cyfr - A B C D E F G H I J K L M N O P R S T U V W X Y Z - a b c d e f g h i j k l m n o p r s t u v w x y z - 0 1 2 3 4 5 6 7 8 9 c) znaków specjalnych + - plus - - minus / - dzielenie - mnożenie. - kropka, - przecinek = - równość - odstęp ( - nawias lewy ) - nawias prawy - cudzysłów : - dwukropek! - wykrzyknik % - procent ; - średnik < - znak mniejszości > - znak większości? - znak zapytania $ - dolar - podkreślenie 2 J. R. Piechna, Programowanie w języku Fortran 90 i 95 Oficyna Wydawnicza Politechniki Warszawskiej, Warszawa 2000

PODSTAWY JĘZYKA FORTRAN 90/95 7 3.4 Parametry zmiennej Nadanie parametru zmiennej, a nastęnie nadanie jej nazwy odbywa się za pomocą schematu: Typ danej [(KIND=liczba zarezerwowanych bajtów)] :: nazwa zmiennej Każdy z typów ma dodatkowy paramter (KIND), który określa liczbę zarezerwowanych bajówy w pamięci komputera. W tabeli 1 3 przedstawione są wszystkie typy zmiennych z pełnymi opisami. Tabela 1: Tablica typów dla danego parametru Typ Wartość Specyfikacja zmiennej parametru INTEGER 1 Zakres: -127 do 127 INTEGER 2 Zakres: -32767 do 32767 INTEGER 4 Zakres: -2147483647 do 2147483647 REAL 4 Zakres: 1.18 10 38 do 3.40 10 38 Dokładnośc: 7-8 miejsc znaczących REAL 8 Zakres: 2.23 10 308 do 1.79 10 308 Dokładnośc: 15-16 miejsc znaczących COMPLEX 4 Zakres: 1.18 10 38 do 3.40 10 38 Dokładnośc: 7-8 miejsc znaczącyc COMPLEX 8 Zakres: 2.23 10 308 do 1.79 10 308 Dokładnośc: 15-16 miejsc znaczących LOGICAL 1 Wartość:.TRUE. i.false. LOGICAL 4 Wartość:.TRUE. i.false. CHARACTER 1 Zestaw znaków ASCII 3.5 Instrukcja IF W instrukcji tej wyróżniamy dwie postaci: a) IF (wyrażenie logiczne) instrukcja uwarunkowana Jej działanie jest następujące: Jeśli wyrażenie logiczne ma wartosć.true., realizowana jest instrukja 3 J. R. Piechna, Programowanie w języku Fortran 90 i 95 Oficyna Wydawnicza Politechniki Warszawskiej, Warszawa 2000

PODSTAWY JĘZYKA FORTRAN 90/95 8 będąca kontynuacją linii, a nazywana instrukją uwawarunkowaną. Gdy wyrażenie logiczne ma wartość.false., instrukcja uwarunkowana jest pomijana i wykonywana jest następna linia programu. b) Postać druga (zwana blokową - bardziej odpowiadająca naturalnemu sposobowi forułowania warunków): [nazwa konstrukcji] IF (wyrażenie logiczne)then Grupa instukcji wykonywalnych, gdy wyrażenie logiczne ma wartość.true. ELSE Grupa instukcji wykonywalnych, gdy wyrażenie logiczne ma wartość.false. END IF [nazwa konstrukcji] Jesli wartość wyrażenia logicznego jest prawdą, należy wykonać zestaw kolejnych instrukcji do słowa kluczowego ELSE w przeciwnym wypadku należy wykonać zestaw kolejnych instrukcji od słowa kluczowego ELSE do słowa kluczowego END IF. 3.6 Instrukcja CASE Ta instrukcja służy do możliwości wyboru, jest ona strukturą sterującą. Ogólna jej postać jest następująca: [nazwa konstrukcji] SELECT CASE (określenie przypadku) CASE (lista przypadków)[nazwa konstrukcji] blok instrukcji do wykonania CASE (lista przypadków)[nazwa konstrukcji] blok instrukcji do wykonania. CASE DEFAULT [nazwa konstrukcji] blok instrukcji do wykonania END SELECT [nazwa konstrukcji] Jeśli nie pojawi się żaden z przypadków, możemy wykonać odpowiednie instrukcje, korzystając z opcji CASE DEFAULT.

PODSTAWY JĘZYKA FORTRAN 90/95 9 3.7 Instrukcja DO Oto jej postać: [nazwa konstrukcji] DO [,] zmienna = wartość poczatkowa zmiennej, wartość końcowa zmiennej, [przyrost zmiennej w każdym cyklu] [blok instrukcji do wykonania] END DO[nazwa konstrukcji] Instrukcja ta wykonuje się wielokrotnie zwiększając bądź zmniejszając się o zmienną kontrolowaną(np. i) w każdym cyklu aż do uzyskania warotści końcowej zmiennej. 3.8 Postawowe instrukcje wejścia i wyjścia Instrukcjami pozwalającymi na wczytanie przez program danych i ich wyprowadzenie na zewnątrz są instrucje READ i WRITE 4 : READ (numer strumienia danych, postać danych) lista zmiennych do wczytania WRITE (numer strumienia danych, postać danych) lista zmiennych do wysłania gdzie: numer strumienia danych jest liczbą całkowitą, która określa skąd dane będą przesyłane postać danych może zawierać przepis na postać danych (format) Symbol gwiazdki (*) zamiast numeru strumienia danych i postaci danych nazywa się formatem swobodnym. Przykład: WRITE (*,*) Podaj wartość x: READ (*,*) x Instrukcja WRITE wyśle na ekran monitora podpowiedź do użytkownika programu o nadaniu wartości zmiennej x. Następnie w isnstrukcji READ nadajemy jej wartość, którą wpisujemy z klawiatury. Kolejną ciekawą instrukją I/O(czyli input/output) jest instrukcja OPEN, która kojarzy nazwę zbioru na dysku z symbolicznym numerem strumienia danych: OPEN (UNIT = numer strumienia danych, FILE = nazwa zbioru STATUS = status zbioru) 5 4 E. B. James, F. O Brien, P. Whitehead, Fortran kurs programowania, WNT 1974 5 http://pl.wikibooks.org/wiki/fortran

PODSTAWY JĘZYKA FORTRAN 90/95 10 gdzie: numer strumienia danych jest liczbą całkowitą nazwa zbioru zawiera informacje o nazwie zbioru, jaki kojarzymy z numerem strumiena danych status zbioru przyjmuje postać stałej tekstowej o treści OLD (gdy oczekujemy że zbiór istnieje na dysku) lub NEW (gdy oczekujemy że zbiór nie istnieje na dysku). Przykład: OPEN(UNIT=1, FILE= Dane.dat, STATUS= OLD ) Następuje tutaj skojarzenie strumiena danych o numerze 1 ze zbiorem o nazwie Dane.dat. Jeżeli w instrukcji READ lub WRITE pojawi się numer strumienia 1, będzie to znaczyło, iż informacje bedą czytane ze zbioru Dane.dat lub do niego zapisywane. 3.9 Zmienne indeksowane TABLICE Tablice zawsze pełniły ważną rolę w Fortranie. Najczęściej się je stosuje tak skonstruowane, by każdy element lub grupa elementów odpowiadały węzłowi siatki obliczeniowej 6. Tablica jest charakteryzowana przez liczbę wymiarów i rozmiar, który określa dopuszczany zakres indeksów w każdym wymiarze. 3.9.1 Deklaracja tablicy Ogólna postać: Typ zmiennej, DIMENSION (wymiar,rozmiar):: [nazwa] Przykład: REAL, DIMENSION (0:1, 5:7) :: a Tablica ta składa się z dwóch wierszy (0 i 1) oraz trzech kolumn (5,6,7) jest ona dwuwywmiarowa o rozpiętości w poziomie 3 i pionie 2. Tabela 2 przestawia taką tablice. Tabela 2: Przykładowa tablica a(0,5) a(0,6) a(0,7) a(1,5) a(1,6) a(1,7) 6 D.Chrobak, FORTRAN Praktyka Programowania, Wydawnictwo MIKOM, Warszawa 2003

PODSTAWY JĘZYKA FORTRAN 90/95 11 Deklarując tablice należy mieć na uwadze, że: wartość dolnej granicy zmienności indeksu od wartość górnej granicy oddzielamy dwukropkiem jeżeli wartość dolnej granicy zmienności indeksu nie została określona to domyślnie przyjmuje wartość 1 podanie wartość górnej granicy zmienności indeksu jest obowiązkowe wartość górnej granicy zmienności indeksu musi być większa lub równa wartości dolnej granicy jeżeli dla dowolnego indeksu wartości górnej granicy zmienności indeksu jest mniejsza od dolnej to macierz zostanie utworzona, ale jej rozmiar będzie równy 0 wartość granicy zakresu może być liczbą rzeczywistą, przy czym brana pod uwagę będzie jedynie jej część całkowita Operowanie tablicami odbywa się w taki sam sposób jak zmiennymi prostymi. Przykład:... 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 komórkom tablicy a wartości, a następnie zwiększamy każdą z tych wartości o 1.0 przypisujemy je tablicy b 7. 3.9.2 Dynamiczne tworzenie tablic W Fortanie 90 pojawiała się bardzo ciekawa możliwość nadawania wymiaru tablicy, co było nie spotykane we wcześniejszych wersajch języka. Dynamiczne tworzenie tablic daje możliwość użytkownikowi określenie wymiaru tablicy w momencie jej tworzenia co jest bardzo wygodne. Służą do tego słowa kluczowe takie jak: ALLOCATABLE, ALLOCATE i DEALLOCATE. 7 J. R. Piechna, Programowanie w języku Fortran 90 i 95 Oficyna Wydawnicza Politechniki Warszawskiej, Warszawa 2000

PODSTAWY JĘZYKA FORTRAN 90/95 12 3.9.3 Konstruktor tablicy Jeśli tablica jest jednowymiarowa, to istnieje mechanizm umożliwiający bezpośrednie nadanie wartości elementom tablicy w czasie jej deklarowania. Mechanizm ten nazywany jest konstruktorem tablicy. Zaraz po nadaniu nazwy tablicy możemy wpisać wartość kolejnych elementów, które muszą się zawierać między ogranicznikami (/ /). Przykład:... INTEGER, DIMENSION (3) :: a=(/ 1, 2, 3 /)... 3.9.4 Zmiana kształtu tablicy Funkcja RESHAPE powoduje skopiowanie zawartości tablicy o danym kształcie do tablicy o innym kształcie. Umożliwia ona utworzenie tablicy o zadeklarowanym kształcie z elementów tablicy wskazanej jako źródło danych. Przykład:... REAL, DIMENSION (2,3):: a=reshape((/1, 2, 3, 4, 5, 6/),(2,3)) REAL, DIMENSION (3,2):: b=reshape(a,(3,2)) W powyższym fragmencie programu użyty został konstruktor tablicy jednowymiarowej do nadania wartości elementom tablicy dwuwymiarowej przez wykorzystanie funkcji RESHAPE. 3.10 PODPROGRAMY (SEGMENT SUBROUTINE) Niektóre fragmenty programy mogą się powtarzać lub być wykorzystane przez innych programistów. Możliwe jest zatem wyodrębnienie ich i przedstawienie w postaci podprogramu. W Fortranie 90 występują 3 kategorie podprogramów 8 : A) Wewnętrzne B) Zewnątrzne C) W modułach 8 http://www.chem.univ.gda.pl/ adam/fortran/

PODSTAWY JĘZYKA FORTRAN 90/95 13 Deklaracja podoprgramu wygląda tak: SUBROUTTINE nazwa (lista parametrów formalnych)... deklaracja... treść procedury... RETURN END SUBROUTINE nazwa Aby skorzystać w programie głównym z podprogramu należy użyć instrukcji: CALLnazwa(lista prametrów formalnych) Jak widać program główny z podprogramem wymienia informacje za pomocą listy prametrów formalnych, tak więc zadeklarowane zmienne muszą być tego samego typu, aby program mógł się wykonać. 3.10.1 Podprogramy wewnętrzne Treść takiego programu, jak nazwa wskazuje znajduje się wewnątrz prgramu głównego. Oddzielony jest od instrukcji segmentu instrukją CONTAINS, która sygnalizuje obecność podprogramu 9. Zmienne i deklaracaje segmentu programu głównego są dostępne dla podprogramu wewnętrznego, natomiast odwrotnie nie, czyli zmienne i deklaracaje podprogramu nie są dostępne dla programu głównego. PROGRAM [nazwa] IMPLICIT NONE... treść segmentu głownego... CALL nazwa() STOP CONTAINS SUBROUTTINE nazwa (lista parametrów formalnych) IMPLICIT NONE... deklaracja RETURN END SUBROUTINE nazwa END PROGRAM [nazwa] 3.10.2 Podprogramy zewnętrzne Podprogramy zewnętrzne znajdują sie poza segmentem głównym programu. 9 Oliveira, Writing Scientific Software, Wydawnictwo Cambridge University Press, 2006

PODSTAWY JĘZYKA FORTRAN 90/95 14 Występujące w procedurze zmiennne nazywane są zmiennymi lokalnymi, gdyż występują tylko w obszarze procedury. Łącznik czyli prototyp kodu umieszczony we fragmencie kodu znajduje się między słowami kluczowywmi INTERFACE, a END INTERFACE, które umieszczone są w segmencie programu głównego. W łączniku tym znajdują się lista parametrów formalnych, czyli ustalona lista niezbędnych danych jakie powinny być przekazane z programu głownego i jako procedury przekazane z powrotem do programu głównego. Stosujemy w tym celu atrybut INTENT() o wartości IN dla dla zmiennych przekazywanych przez segment główny do podprogramu, o wartości OUT dla zmiennych przekazywanych w przeciwnym kierunku oraz IN OUT dla zmiennych przekazywanych w obu kierunkach. SUBROUTTINE nazwa (lista parametrów formalnych) IMPLICIT NONE... deklaracja... treść procedury... RETURN END SUBROUTINE nazwa PROGRAM [nazwa] IMPLICIT NONE INTERFACE SUBROUTTINEnazwa(lista parametrów formalnych) IMPLICIT NONE... deklaracja RETURN END SUBROUTINEnazwa END INTERFACE... treść segmentu głównego... STOP END PROGRAM[nazwa] 3.10.3 Funkcje Tego typu podprogramy wykorzystujemy, gdy wynikiem działania programu jest wartość tylko jednej zmiennej.wywołanie funkcji odbywa się przez napisanie jej nazwy z listą paraemtrów aktualnych.

PODSTAWY JĘZYKA FORTRAN 90/95 15 Ogólna postać to: FUNCTION nazwa (lista parametrów formalnych)... deklaracje... treść procedury... nazwa=wyrażenie (arytmetyczne, logiczne) RETURN END FUNCTIONnazwa Wewnątrz podprogramu o tej postaci musi występować podstawienie wyniku działania procedury pod nazwą funkcji lub musi być użyta opcja RESULT(), zawierająca nazwę zmiennej, która jest rezultatem działania funkcji. Zastosowanie funkcji w programie(metoda podprogramu wewnętrzengo): PROGRAM [nazwa] IMPLICIT NONE... treść segmentu głównego... CALL nazwa() STOP CONTAINS FUNCTION nazwa (lista parametrów formalnych) IMPLICIT NONE... deklaracja... treść... RETURN END FUNCION nazwa END PROGRAM [nazwa] Można też za pomocą podprogramu zewnętrzengo. Różnica funkcji od procedury plega na tym, że funkcja przekazuje jedną zmienna procedura więcej niż jedna. Opcja RESULT Zamiast podstawienia pod nazwę funkcji rezulatu działania można wskazać zmienna będacą rezultatem działania. Do tego typu zastosowań wykorzystuje się opcję ze słowem kluczowym RESULT 10 : 10 J. R. Piechna, Programowanie w języku Fortran 90 i 95 Oficyna Wydawnicza Politechniki Warszawskiej, Warszawa 2000

PODSTAWY JĘZYKA FORTRAN 90/95 16 FUNCTION nazwa (lista parametrów formalnych) RESULT (zwracana wartość) IMPLICIT NONE... deklaracja... treść... RETURN END FUNCION nazwa Funkcje standardowe W tabeli 3 podane są najczęściej używane funkcje opisane w bibliotece procedur języka fortran: Tabela 3: Funkcje występujące w fortranie Wartość bezwzględna a ABS(a) Funkcja wykładnicza e a Logarytm naturalny a Lograytm dziesiętny 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 elementów tablicy, wzdłuż wymiaru dim, spełniajacych warunek zawarty w maska Iloczyn elementów tablicy, wzdłuż wymiaru dim, spełniajacych warunek zawarty w maska Iloczyn macierzy A i B Generator liczb losowych Inicjalizacja generatora liczb losowych EXP(a) ALOG(a) ALOG10(a) SIN(a) ASIN(a) COS(a) ACOS(a) TAN(a) ATAN(a) SQRT(a) SUM(a,dim,maska) PRODUCT(a,dim,maska) MATMUL(a,b) RANDOM NUMER(r) RANDOM SEED() 3.10.4 Moduły Jest on jednostką programów o różnym przenaczeniu. Inne programy odwołuja się do modułu uzyskując dostęp do stałych danych badź definicji. W module specyfikacje

PODSTAWY JĘZYKA FORTRAN 90/95 17 są globalne dla wszystkich segmentów, w których zostały użyte. Dostęp do modułu uzyskuje się za pomocą instrukcji USE i nazwa modułu 11. Podprogramy modułu podobnie jak podprogramy innych segmentów programu, mogą zostać zorganizowane w grupy przez nadanie im wspólnej nazwy. Wymaga to zdefiniowania jawnego interfejsu dla tych podprogramów. Postać: MODULE nazwa... deklaracje... END MODULE nazwa Idee wyokysania modułu ilustruje schemat (Tabela 4): Tabela 4: Schemat modułu Moduł A Segment główny USE moduł A Segment pomocniczy SUBROUTINE h() USE moduł A Oba te segmenty główny i pomocniczy mają dostęp do stałych i definicji zamieszczonych w module. Moduły wykorzytuję się głównie do: definicji typów danych, deklaracji globalnych(w skali całego programu) obiektów danych, definicji nowych operatorów lub referncji istniejących operatorów wewnętrznych, tworzenie bibliotek podprogramów, w tym interfejsów do podprogramwów zewnętrznych, Podprogramy umieszczone w modułach mają szersze zastosowanie od podprogramów wewnętrzynych i zewnętrznych. 11 D.Chrobak, FORTRAN Praktyka Programowania, Wydawnictwo MIKOM, Warszawa 2003

PODSTAWY JĘZYKA FORTRAN 90/95 18 Cechy główne modułu: * mogą wywołać wszystkie segmenty korzystające z tego modułu, * ma on bezpośredni dostęp do zmiennych zawartych w module między instrukcją MODULE, a porzedzającym jego opis, * wszystkie zmienne delaklarowane w podprogramie są zminnymi lokalnymi niedostępnymi na zewnątrz, 3.10.5 Podprogram rekurencja (RECURSIVE) Program rekurencyjny charakteryzuje się tym, że może wywołać sam siebie. Nagłówek programu musi zawierać słowo RECURSIVE, jeżeli jest to funkcja to musi również zawierać słowo kluczowe RESULT. Jedna z postaci: RECURSIVE FUNCTION nazwa (lista parametrów formalnych) RESULT (zwracana wartość)... deklaracje warunków formalnych...... treść... END FUNCTION 3.10.6 Podprogram naturalny (PURE) Nagłówek tego podprogramu musi zawierać słowo kluczowe PURE. Tego typu programy charakteryzują się następujcymi cechami: nie jest możliwe odwołanie 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, które wykonują, odnoszą się do tak zwanych plików wewnętrznych podprogram podprogramu zewnętrzego PURE musi być tego samego rodzaju Jedna z postaci: PURE SUBROUTINE nazwa (lista parametrów formalnych)... deklaracje warunków formalnych...... treść... END SUBROUTINE

PODSTAWY JĘZYKA FORTRAN 90/95 19 3.11 Struktury Służą one przede wszystkim tworzeniu własnych typów danych, mogą zawierać informacje typu tekstowego i numerycznego. Fortran zapewnia możliwość tworzenia takich typów nazwanych w odróżnieniu od typów własnych typami pochodnymi 12. Aby utworzyć taką zmienną trzeba zadeklarować jej typ. W deklaracji zawarte są opisy szczegółowe elementów składowych tworzonego typu. Dostęp do elementów struktury możliwy jest przez podanie nazwy zmiennej, następnie separatora w postaci znaku (%) i dalej nazwy elementu składowego typu. Deklaracja typu pochodnych odbywa się w segmencie programu głównego: PROGRAM [nazwa] IMPLICIT NONE TYPE::nazwa... deklaracje... END TYPE nazwa TYPE (nazwa) :: nazwa zmiennej nazwa zmiennej%dkelaracje z TYPE = warości STOP END PROGRAM [nazwa] Wygląd struktury(tabela 5): Tabela 5: Przykład struktury 1 2 3 4 tab a 5 12 13 77 Różnica pomiędzy strukturą a tablicą STRUKTURA TABLICA elementy moga być danymi różnych typów elementy mogą zawierać dane tylko tego samego typu (np. REAL) indeksami jest opowiedni tekst poprzedzony indeksami sa liczby typu całkowitego znakiem % pisane w nawiasach dostęp do elementu odbywa się porzez dostęp do elementu odbywa się podanie nazwy przypisyanej do typu i porzez podanie nazwy tablicy i nazwy po separatorze (%) numeru indeksu (np. tab a(3)) (np. student%imię (struktura obywatel) ) 12 J. R. Piechna, Programowanie w języku Fortran 90 i 95 Oficyna Wydawnicza Politechniki Warszawskiej, Warszawa 2000

PODSTAWY JĘZYKA FORTRAN 90/95 20 3.12 Wskaźniki Wskaźniki są wykorzystywane w różnych językach programowania i również w Fortranie znalazły swoje miejsce. Różnica pomiędzy zmienną, a wskaźnikiem polega na tym, że zmienna zawiera dane, a wskaznik określa miejsce gdzie przechowywane są te dane. Wskaźniki zostały wprowadzone w celu usprawnienia dostępu do złożonych typów zmiennych takich jak tablice czy struktury 13. Wskaźnik jak nazwa wskazuje musi coś wskazywać, musi zawierać informacje o własnościach tego obiektu, konieczne jest jego deklarowanie za pomocą atrybutu POITNER wraz z dokładnym opisem własności wskazanego obiektu, może on wkazywać tylko te obiekty, które zostały zadeklarowane do wskazania przez słowo kluczowe TARGET. Wskaźnik wiążemy ze wskazanym obiektem za pomocą instrukcji =>. Pzykłdowa postać: PROGRAM[nazwa] IMPLICIC NONE... Deklaracja wzkaźnika obiektu...... POITNER :: nazwa wskaźnika...... TARGET :: nazwa co ma wskazywać... nazwa wskaznika => nazwa co ma wskazywać STOP END PROGRAM [nazwa] Za pomocą wskaźnika możemy doprowadzić do stworzenia dynamicznej tablicy przez słowo kluczowe ALLOCATE (), które wcześniej nie były deklarowane. Daje się zauważyć różnice pomiędzy zmianną, która na stałe związana jest tym samym obszarem pamięci, a wskaźnikiem który w czasie działania programu może wskazywać na różne obszary pamięci. Samo zadeklarowanie wskaźnika nie powoduje powiązania go z jakim kolwiek obiektem, dopiero zancznik (=>) wskazuje na obiekt i tworzy takie powiązanie. Wskaźnik może znajdować się w dwóch stanach: * powiązanym (gdy wskazuje na jakiś obiekt) * nie określony (gdy nie jest przypisany do żadnego obiektu) Za pomocą funkcji ASSOCIATED(nazwa wskaźnika), która zwraca wartości logiczne.true.- gdy jest powiązany oraz.false.- gdy jest nie określony programista ma 13 D.Chrobak, FORTRAN Praktyka Programowania, Wydawnictwo MIKOM, Warszawa 2003

PODSTAWY JĘZYKA FORTRAN 90/95 21 możliwość kontroli statusu wskaźnika. Do wymuszenia zerwania powiązania, a zatem do osiągnięcia statusu wskaźnika nie określonego, stosowana jest funkcja NULLIFY(nazwa wskaźnika). 3.13 Intrukcje wejścia i wyjścia Nie rzadko zdarza się, że w przypadku bardzo skoplikowanych obliczeń konieczne jest zapisanie na dysk dużej ilości danych potrzebnych do późniejszych obliczeń (np za pomocą innego programu). Omawiana wcześniej instrukcja OPEN zawiera bogatą listę parametrów, umożliwiajacą między innymi zadeklarowanie postaci zapisu danych na dysk. W różnych dziedzinach nauki spotykamy się z koniecznościa rozwiązania dużych ukłdów równiań liniowych. Rozwiązania takie skłdaja się zazwyczaj z dwóch etapów: eliminacji wprost uzyskania ostatecznego rozwiązania wstecz

NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 22 4 NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 4.1 Równanie falowe - postać numeryczna Postać numeryczna równania falowego 14 : Warunki brzegowe: u tt (x, t) = c 2 u xx (x, t) dla 0 < x < a i 0 < t < b (1) Dokonujemy dyskretyzacji po czasie: oraz u(0, t) = 0 i u(a, t) = 0 dla 0 t b, (2) u tt (x, t) = u(x, 0) = f(x) dla 0 x a, (3) u t (x, 0) = q(x) dla 0 < x < a. (4) u(x, t + k) 2u(x, t) + u(x, t k) k 2 + O(k 2 ) (5) u(x + h, t) 2u(x, t) + u(x h, t) u xx (x, t) = + O(h 2 ) (6) h 2 Następnie rozwiązujemy równość 15 : u i,j+1 2u i,j + u i,j 1 k 2 Podstawiająć do równania (7) r = ck h = c 2 u i+1,j 2u i,j + u i 1,j h 2 (7) otrzymujemy: Ostatecznie otrzymujemy: u i,j+1 2u i,j + u i,j 1 = r 2 (u i+1,j 2u i,j + u i 1,j ) (8) u i,j+1 = (2 2r 2 )u i,j + r 2 (u i+1,j + u i 1,j ) u i,j 1 (9) Z wykorzystaniem tych pomocnych równań stworzyłem program do równania falowego napisany w języku Fortran, który znajduje się w następnym podrodziale. 14 J. H. Mathews and K. D. Fink, Numerical MethodsUsing MATLAB (3rd Edition), Prentice Hall 1999 15 M.Motyka, Symulacje komputerowe w fizyce, Wydawnictwo Helion, Warszawa 2002

NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 23 Kompilator jaki wykorzystałem do napisania mojego programu równania falowego nosi nazwę Silverfrost FTN95. Jest ona program konsolowym przeznaczonym głownie do programowania w języku Fortran 90/95, ale można w nim pisać również programy w C++ czy Javie. Kompilator Silverfrost FTN95, który uwalnia nas od czarno-białego okienka MS-DOSa. Co daje nam ten kompilator? Otóż proszę państwa daje nam Plato3 IDE!(rys. 1) IDE to Zintegrowane środowisko programistyczne, a to znaczy że mamy do czynienia z zespołem aplikacji, wspomagających programowanie tak, a żeby stało się ono proste i przyjemne. Plato posiada to co każde szanujące się IDE powinno posiadać, czyli np. kolorowanie składni, wbudowany kompilator czy niekończące się cofnij. Rysunek 1: Wygląd kompilatora

NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 24 4.2 Program rozwiązujący równanie 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 pętli! maximum x i maximum t! Stała rówania falowego! Wymiar siatki! Pomocnicze równania! Siatka-Amplitudy write(*,*) Skończona-różnica rozwiązania równania falowego - write(*,*)!proces wprowadzania danych przez użytkownika write(*,*) Podaj X (Przedział graniczny dla x) write(*,*) write(*,*) Dla przykładu : 1 write(*,*) read(*,*)x write(*,*) Podaj T (Przedział graniczny dla t) write(*,*)

NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 25 write(*,*) Dla przykładu : 0.5 write(*,*) read(*,*)t write(*,*) Wprowadziłes X =,X, T =, T write(*,*) write(*,*) write(*,*) Proszę wprowadzić wymiar siatki dla x-kierunek : write(*,*) write(*,*) Dla przykładu : 20 write(*,*) read(*,*)n write(*,*) Proszę wprowadzić wymiar siatki dla y-kierunek : write(*,*) write(*,*) Dla przykładu : 30 write(*,*) read(*,*)m write(*,*) Wprowadziłeś N =,N, M =,M write(*,*) write(*,*) Proszę wprowadzić stała równania falowego : write(*,*) write(*,*) Dla przykładu : 2 write(*,*) read(*,*)c write(*,*) Wprowadziłeś C =,C write(*,*)!stałe stworzone H = X / ( N - 1 );!delta x K = T / ( M - 1 );!delta t R = C * K / H; R2 = R * R; R22 = R * R / 2.0; S1 = 1.0 - R * R; S2 = 2.0-2.0 * R * R;

NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 26!Otoczenie graniczne do j=1,m,1 U(1,j)=0!ustalone U(N,j)=0!ustalone end do!rozwiązania 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 rozwiązania 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,file= 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

NUMERYCZNE ROZWIĄZANIE RÓWNANIA 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) ) then y=sin ( 3.1415926 * x i) else write (*,*) Fi() :Argument poza zasięgiem! Wyjście! write (*,*) x i :, x i end if return end function Fi!Funckja siatki dla szybkości 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) ) then y=0 else write (*,*) Gi() :Argument poza zasięgiem! Wyjście! write (*,*) x i :, x i end if return end function Gi Program [równanie falowe] jest podzielony na kilka części, a ja postaram się jak najbardziej przybliżyć te części. Mianowicie pierwsza cześć programu to jest program główny, gdzie zawarte są najważniejsze elementy programu. Druga nie mniej ważna to funkcji (funkcja Fi i Gi )zdefiniowane poza programem głównym. Pierwsza z funkcji czyli Fi odpowiada za wielkość siatki kartezjańskiej dla amplitudy, natomiast druga z funkcji Gi odpowiada za szybkość rozchodzenia się fali. Obie funkcje pobierają licznik

NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 28 pierwszej pętli (i) oraz zmienną pomocniczą (H) oraz zwracają y. Zarówno w funkcji Fi i Gi obliczana jest wartość x i i sprawdzane czy mieści się w przedziale <0,1>, jeżeli tak to wykonywane są określone działania. W pierwszej części programu głównego są zdefiniowane prototypy funkcji jakie zostały opisane poza nim, aby program mógł z nich skorzystać w celu poprawnego działania. Dalej są zdefiniowane potrzebne zmienne do działania programu m.in. maximum x i t czy stała równani falowego. Kolejna cześć programu jest już typowo wizualna ponieważ jej zadanie jest wyświetlenie na ekranie tego czego będzie potrzebował program do obliczenia równania falowego. W dalszej części są stworzone zmienne pomocnicze służące do prostszego zapisu programu i nie pogubienia się w nim podczas tworzenia. Po tej części mamy serce programu, w którym wyróżnione są dwie pętle po j i po i oraz trzecia najważniejsza pętla podwójna w której będzie dokonywało się sedno obliczeń i tworzenie fal. Ostatnia część programu to przestawienie wyników na ekran i zapis do pliku tych że wyników. Program ten jak już wyżej wspomniałem jast napisany przy wykorzystaniu równań z podroziału(4.1), bez których ciężko by mi było go napisać. Chciałbym przedstawić opis programu, który działa w ten sposób, że wpierw trzeba wprowadzić kolejne zmienne: 1. warunków brzegowych (A,B) (Rysunek 2) 2. wielkość siatki (N,M) (Rysunek 3) 3. prędkość z jaką fala ma się poruszać(c) (Rysunek 3) Rysunek 2: Wprowadzenie zmiennych A i B

NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 29 Rysunek 3: Wprowadzenie zmiennych N, M, C Ostatecznie mamy wynik programu po wprowadzonych danych(rysunek 4) Rysunek 4: Wynik programu

NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 30 Na podstawie powyższych rysunków przestawiających działanie mojego programu można jednoznacznie stwierdzić czy program działa poprawnie czy też nie. Jednakże chcąc obalić wszelkiego rodzaju spekulacje na ten temat posłużę się dodatkowym programem do zwizualizowania moich danych, a mianowicie programem gnuplot. Gnuplot 16 - program do tworzenia wykresów w 2 i 3 wymiarach. Praca z programem odbywa się w wierszu poleceń lub trybie wsadowym. Domyślnie ustawiony jest terminal x11 (rys. 5). Rysunek 5: Gnuplot terminal Dzięki temu, że program [równanie falowe] zapisuje swoje wyniki działania do pliku tekstowego (wyniki.txt), można w bardzo łatwy sposób przenieść te wyniki do programu gnuplot. Wystarczy tylko za pomocą opcji open wyznaczyć ścieżkę bezwzględną do pliku wyniki.txt tam, gdzie został on zapisany (rys. 6). 16 http://www.gnuplot.info/

NUMERYCZNE ROZWIĄZANIE RÓWNANIA FALOWEGO 31 Rysunek 6: Wyznaczanie ścieżki 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 5 Podsumowanie i wnioski Program do obliczania równania falowego tylko potwierdza fakt, że język programowania jakim jest Fortran 90/95 jaki samo programowanie w tym języku jest przeznaczone dla osób dosyć dobrze znających się na matematyce, fizyce czy innych naukach ścisłych. Tylko po to, aby w pełni wykorzystać możliwości jakie drzemią w tym języku. Fortran jest używany od blisko pięćdziesięciu lat i jest on powszechnie stosowany przy prowadzeni przede wszystkim obliczeń numerycznych, co nikogo nie dziwi. Obliczenia aerodynamiczne samolotów, wytrzymałości ich struktur czy obliczenia cieplne, prowadzone są wyłącznie w tym języku. Podczas pisania programu dostrzegłem wiele zalet tego języka, a mianowicie: prostota zapisu, szybkość obliczeń oraz bezpieczeństwo. Co rozumiem przez bezpieczeństwo? Jeżeli chodzi o język Fortran to kompilator w jakim pracowałem bardzo rygorystycznie kontrolował poprawność użycia typów zmiennych, przekroczenia zakresów tablic czy przenoszenia informacji między programem głównym a procedurami. Z jednej strony może trochę ogranicza to możliwość języka, ale z drugiej strony chroni to przed niekiedy poważnymi konsekwencjami pomyłek. W przypadku złożonych struktur, do których możemy zaliczyć równanie falowe, jest to ogromną zaletą. Kończąc nasuwa się prosty wniosek, jeżeli ktoś nauczy się programować w języku Fortran poprzez, chociażby napisanie takiego złożonego programu jak równanie falowe na pewno mu się to przyda. Poszerzy swoją wiedzą o język programowania, który może wykorzystać niezliczonych ilościach zastosowań.

LITERATURA 33 6 Literatura [1] D.Chrobak, FORTRAN Praktyka Programowania, Wydawnictwo MIKOM, Warszawa 2003 [2] J. R. Piechna, Programowanie w języku Fortran 90 i 95 Oficyna Wydawnicza Politechniki Warszawskiej, Warszawa 2000 [3] J. H. Mathews and K. D. Fink, Numerical Methods Using MATLAB (3rd Edition), Prentice Hall 1999 [4] E. B. James, F. O Brien, P. Whitehead, Fortran kurs programowania, Wydawnictwo WNT, 1974 [5] Oliveira, Writing Scientific Software, Wydawnictwo Cambridge University Press, 2006 [6] M.Motyka, Symulacje komputerowe w fizyce, Wydawnictwo Helion, Warszawa 2002 [7] http://pl.wikibooks.org/wiki/fortran [8] http://www.chem.univ.gda.pl/ adam/fortran/ [9] 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/