Download as pdf or txt
Download as pdf or txt
You are on page 1of 42

Uvod u FORTRAN-90

Numeri cke metode

Ivo Batisti c
Fizi cki odsjek, PMF Sveu cilite u Zagrebu

predavanja 2005/2006, dopunjeno 2007

Pregled predavanja
Uvod Primjer FORTRANskog programa Prevodenje u izvrni program Fortran-90 i Fortran-77 Prevodenje fortranskog programa Objektni zapis i izvrni program Naredbe u FORTRANskom programu Automatizacija poslova

Uvod

Fortran je prvi tz. programski jezik vie razine. Programski jezici vie razine su: C, C++, Ada, Pascal, Cobol, . . . . (programski jezik nie razine je npr. Assembler ili Assembly language)

Fortran je razvijen 50-tih godina prolog stolje ca u IBM-u. Ocem Fortrana smatra se John Backus.

(http://www-history.mcs.st-andrews.ac.uk/Biographies/Backus.html)

Fortran postaje komercijalno dostupan 1957. godine. (2007. je pedesetogodinjica Fortrana.) Fortran je skra cenica od The IBM Mathematical Formula Translating System.

Razvoj Fortrana

Fortran kao jezik za programiranje deniran je nizom pravila koja se vremenom nadograduju. Nadogradnja je motivirana prilagodavanju Fortrana suvremenim konceptima u programiranju (objektno programiranje) kao i olakavanju uporabe Fortrana u razvijanju aplikacija. Postoji medunarodno tijelo (povjerenstvo) koje se donosi odluke i preporuke o nadogradnji Fortrana (http://www.nag.co.uk/sc22wg5/). Razvoj Fortrana moe se podjeliti u nekoliko stadija:

FORTRAN (1957) FORTRAN II (1958) FORTRAN IV (1961) FORTRAN 66 (1966)

FORTRAN 77 (1977) Fortran 90 (1992) Fortran 95 Fortran 2003 Fortran 2008

Razvoj Fortrana

e vjerojatno uklju Radi se na razvijanju Fortrana 2008 koji c civati dodatne pravila za razvoj programa na vieprocesorskim ra cunalima i grozdovima. Nezavisno od medunarodnih pravila, svaka tvrtka koja razvija Fortranski prevoditelj ima neka svoja dodatna proirenja jezika, ali i neke nedostatke u potovanju i primjeni dogovorenih pravila. esto ne koriste. Tu je obi cno rije c o nekim svojstvima koja se c (Treba uvijek nastojati razvijati program prema dogovorenim i prihva cenim standardima, a ne koristiti svojstva speci cna za Fortran neke tvrtke.) e izgledati programski jezik za razvoj znanstvenih ala: Kako c aplikacija u budu cnosti?

Razvoj Fortrana

e vjerojatno uklju Radi se na razvijanju Fortrana 2008 koji c civati dodatne pravila za razvoj programa na vieprocesorskim ra cunalima i grozdovima. Nezavisno od medunarodnih pravila, svaka tvrtka koja razvija Fortranski prevoditelj ima neka svoja dodatna proirenja jezika, ali i neke nedostatke u potovanju i primjeni dogovorenih pravila. esto ne koriste. Tu je obi cno rije c o nekim svojstvima koja se c (Treba uvijek nastojati razvijati program prema dogovorenim i prihva cenim standardima, a ne koristiti svojstva speci cna za Fortran neke tvrtke.) e izgledati programski jezik za razvoj znanstvenih ala: Kako c aplikacija u budu cnosti?

Razvoj Fortrana

e vjerojatno uklju Radi se na razvijanju Fortrana 2008 koji c civati dodatne pravila za razvoj programa na vieprocesorskim ra cunalima i grozdovima. Nezavisno od medunarodnih pravila, svaka tvrtka koja razvija Fortranski prevoditelj ima neka svoja dodatna proirenja jezika, ali i neke nedostatke u potovanju i primjeni dogovorenih pravila. esto ne koriste. Tu je obi cno rije c o nekim svojstvima koja se c (Treba uvijek nastojati razvijati program prema dogovorenim i prihva cenim standardima, a ne koristiti svojstva speci cna za Fortran neke tvrtke.) e izgledati programski jezik za razvoj znanstvenih ala: Kako c aplikacija u budu cnosti? e se sigurno zvati Fortran! To nitko ne zna, ali c

Jednostavni FORTRANski program

! komentar Program hello print *,Pozdrav svijetu end program

Naredbe u FORTRANu: program, end, print To su rezervirane rije ci koje se ne smiju koristiti za imena varijabli, funkcija, procedura, programa itd. Naredbe po cinju i zavravaju u jednom redu. Komentar po cinje s uskli cnikom ! String je omeden s jednostrukim navodnim znakom ()

Jednostavni FORTRANski program

! komentar Program hello print *,Pozdrav svijetu end program

Naredbe u FORTRANu: program, end, print To su rezervirane rije ci koje se ne smiju koristiti za imena varijabli, funkcija, procedura, programa itd. Naredbe po cinju i zavravaju u jednom redu. Komentar po cinje s uskli cnikom ! String je omeden s jednostrukim navodnim znakom ()

Usporedba s C-programom

/* komentar */ #include <stdio.h> main() { printf("Pozdrav svijetu!\n"); }

Naredba za ispis: printf String je omeden s dvostrukim navodnim znakom ("). Naredbe Naredbe mogu i ci preko vie linija a zavravaju s to cka-zarezom (;). Komentar po cinje s /* a zavrava s */.

to raditi s FORTRANskim programom ?

Spremiti program u datoteku koja zavrava s .f90, npr. datoteku s imenom hello.f90. Kompajlirati program ili prevesti program napisan u fortanskom jeziku u izvrni program (mainski). Kako ? Pomo cu prevoditelja ili engl. compiler-a - kompajlera :

prompt> ifort hello.f90 -o hello.exe

to raditi s FORTRANskim programom ?

Spremiti program u datoteku koja zavrava s .f90, npr. datoteku s imenom hello.f90. Kompajlirati program ili prevesti program napisan u fortanskom jeziku u izvrni program (mainski). Kako ? Pomo cu prevoditelja ili engl. compiler-a - kompajlera :

prompt> ifort hello.f90 -o hello.exe

to raditi s FORTRANskim programom ?

ifort je fortranski prevoditelj, koji je napravio Intel. hello.exe je izvrni program:

prompt> ./hello.exe Pozdrav svijetu prompt>

Imena datoteka s FORTRANskim programom

Nastavke .f90 imaju datoteke napisane u Fortranu-90. Za programe napisane u fortranu-77 uobi cajeno je koristiti nastavak .f. Nastavci mogu biti i .for, .hpf, .f95, .F, F90, .F95, .FOR, .HPF, .fpp, . . . . esto ozna Nastavci s velikim slovima c cavaju programe koji sadre pseudo-fortranske naredbe. Takova datoteka prolazi dodatnu obradu (s tz. predprocesorskim programom) prije kona cnog prevodenja u objektnu datoteku.

Usporedba FORTRANa-77 i FORTRANa-90

Fortran-90

! komentar Program hello print *,Pozdrav svijetu end program

Fortran-77

c234567890123456789012345678901234567890 c komentar c234567890123456789012345678901234567890 Program hello print *,Pozdrav svijetu end program

O FORTRANu-77

Koristi se ksni format zapisa programa:


mjesta 1-5 u retku se koriste za labela. popunjeno 6. mjesto indicira da je linija nastavak fortranske naredbe iz prethodne linije. mjesta 7-72 rezervirana za pisanje fortranskih naredbi.

nema naredbi koje rade s vektorima i matricama. Fortran-90 ima naredbe koje rade s vektorima i matricama (tj. skupovima podataka)

O FORTRANu-90

Koristi se slobodni format zapisa programa:


Mjesta 1-6 nisu rezervirana Naredba u liniji moe biti vrlo duga cka Naredba se nastavlja na slijedeci red ako zavrava s ampersandom (&) na kraju Na istoj liniji moe biti vie naredbi, a medusobno su razdvojene s to cka-zarezom (;).

Fortran-90 ima naredbe koje rade s vektorima i matricama. Bolja kontrola nad vrstama podataka Dinami cko rezerviranje memorije skupove podataka (velike matrice ili vektore).

primjer FORTRAN-77

c234567890123456789012345678901234567890 c komentar c234567890123456789012345678901234567890 Program hello print *,Pozdrav i mir cijelom & svijetu go to 100 print *,ovo nece biti ispisano 100 continue end program

naredba go to 100 forsira program da se nastavi izvoditi od mjesta ozna cenog s labelom 100 ini ita, program se naprosto nastavlja od tog mjesta continue ne c nadalje.

primjer FORTRAN-77

c234567890123456789012345678901234567890 c komentar c234567890123456789012345678901234567890 Program hello print *,Pozdrav i mir cijelom & svijetu go to 100 print *,ovo nece biti ispisano 100 continue end program

naredba go to 100 forsira program da se nastavi izvoditi od mjesta ozna cenog s labelom 100 ini ita, program se naprosto nastavlja od tog mjesta continue ne c nadalje.

primjer FORTRAN-90

Program hello print *,Pozdrav i mir cijelom & svijetu print *,svim bicima ; print *,u svemiru i okolici End program

& (ampersand, and) ozna cava nastavak naredbe u slijede ci red ; (to cka-zarez) razdvaja vie fortranskih naredbi

primjer FORTRAN-90

Program hello print *,Pozdrav i mir cijelom & svijetu print *,svim bicima ; print *,u svemiru i okolici End program

& (ampersand, and) ozna cava nastavak naredbe u slijede ci red ; (to cka-zarez) razdvaja vie fortranskih naredbi

O fortranskim prevoditeljima

Linux

Intelovi prevoditelji - slobodni za personalnu uporabu, ali uz registraciju na njihovom web-site -u: http://developer.intel.com/software/products/ Gnu prevoditelji: gfortran, gcc, g++, . . . NAG prevoditelj: f95 - moe se dobiti trial verzija s njihovog web-site -a: http://www.nag.com/ PGI prevoditelji: pgcc, pgf77, pgf90, pghpf, . . . - moe se dobiti trial verzija s njihovog web-site -a: http://www.pgroup.com/

MS-windows:

F-Fortran - web-site : http://www.fortran.com/F/ gnu-Forran - web-site : http://www.cygwin.com/ Salford FTN95 - moe se dobiti besplatna personalna verzija na njihovom web-site : http://www.silverfrost.com/ Lahey/Fujitsu Fortran - moe se dobiti trial verzija s njihovog web-site -a: http://www.lahey.com/downloads.htm

Prevodenje (kompailiranje)

prompt>

ifort

hello.f90

-o

hello.exe

Program za prevodenje

(naredba)

(f95 za NAGov prevoditelj, pgf90 za PGI prevoditelj, gfortran za GNU)

Ime datoteke s fortranskim programom. Nastavak .f90 indicira da se radi o Fortranu-90 u slobodnom formatu zapisanom. Iza ove opcije slijedi ime izvrnog programa .

Ime izvrnog programa moe biti bilo to, npr. hello ili hello.x ili olleh ili virus.com (Ipak dobro se je konzistentno drati odredenog pravila)

Naj ce ce koritene opcije kod prevoditelja

-o xxx.exe -O -c

Ime izvrnog programa Optimiziraj izvrni program Ne napravi kompletni izvrni program nego samo napravi datoteku s tz. objektnim zapisom. (Datoteka zavrava s .o ili .obj kod MS windows-a.) koristi biblioteku pomo cnih programa (soubrutine-a) liblapack.a ili liblapack.so Biblioteku trai na tom mjestu na disku ra cunala

-llapack

-L /usr/lib/

Primjeri prevodenja

prompt> ifort -O -c hello.f90

(rezultat prevodenja je hello.o)

prompt> ifort -O hello.o -o hello.exe \ -L/usr/local/lib -llapack -lblas

Primjeri prevodenja pod MS-windowzima


Setting Environment for FTN95 for Microsoft .NET and Win32 C:\Program Files\Salford Software\FTN95>z: Z:\>cd mrvicaxp\NM_01 Z:\mrvicaxp\NM_01>ftn95 hello [FTN95/Win32 Ver. 4.9.0 Copyright (C) Silverforst Ltd 1993-2005] NO ERRORS [<HELLO> FTN95/Win32 v4.9.0] Z:\mrvicaxp\NM_01>slink hello.obj Creating executable: Z:\mrvicaxp\NM_01\hello.exe Z:\mrvicaxp\NM_01>hello.exe hello world

to je hello.o a to hello.exe

Objekti zapis (hello.o) je to cni ili ekvivalentni optimizirani mainski zapis (prijevod) programa, s tim da ne postoje:

dijelovi mainskog programa koji se brinu za razmjenu podataka s vanjskim jedinicama ra cunala (tipkovnica, ekran, tvrdi disk, CD/DVD, mrea, ...) dijelovi mainskog programa vanjskih funkcija i podprograma koje program poziva (koristi).

to je hello.o a to hello.exe
Postoje dvije vrste izvrnih programa hello.exe: stati cki povezani i oni cki povezuju prije samog izvodenja. koji se dinami

Stati cki povezani izvrni programi su gotovo potpuni, osim to im jo nedostaje dio programa za komunikaciju s vanjskim jedinicama ra cunala. Dinami cki povezanim programima nedostaju i vanjske funkcije i potprogrami koji se nalaze u dinami ckim bibliotekama. Dinami cka biblioteka se kopira u glavnu memoriju ra cunala u trenutku izvodenja, ako nije ve c prije tamo iskopirana.

Svi programi izvode se unutar nekog operacijskog sustava. Izmedu programa i vanjskih jedinica uvijek stoji operacijski sustav. Pristup do njih je mogu c samo kroz posredovanje operacijskog sustava.

Kako znati je li je program dinami cki ili stati cki povezan ?

prompt> ldd hello.exe linux-gate.so.1 => (0xffffe000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7f18000) libcxa.so.5 => /opt/intel/intel_fc_80/lib/libcxa.so.5 (0xb7ef2000) libunwind.so.5 => /opt/intel/intel_fc_80/lib/libunwind.so.5 (0xb7eec000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7db6000) /lib/ld-linux.so.2 (0xb7f60000) prompt>

Dinami cke biblioteke

potprograma koje se povezuju u trenutku izvodenja.

prompt> ldd hello_static.exe not a dynamic executable prompt>

Struktura/format izvrnog programa

prompt> size hello.x text data bss 302911 24616 10236

dec 337763

hex filename 52763 hello.x


za ELF-format (linux)

text Mainske naredbe programa. data Podaci i konstante s unaprijed poznatim vrijednostima. ije vrijednosti nisu unaprijed poznate. bss Podaci c dec Ukupna veli cina svih sekcija.

Primjer FORTRANskog programa s varijablama

Program

PROGRAM hello CHARACTER(len=10) :: poruka poruka = Pozdrav svijetu PRINT *,poruka END PROGRAM

Izvodenje

prompt> ./hello.exe Pozdrav sv prompt>

Primjer FORTRANskog programa s varijablama


Naredba CHARACTER(len=10) :: poruka rezervira mjesto u memoriji i toj memorijskoj lokaciji daje ime poruka. U nastavku programa, kada se navede rije c poruka, onda to zna ci bilo da se u tu memorijsku lokaciju stavljaju podaci, bilo da se iz te memorijske lokacije izvla ce podaci kako bi se negdje za neto iskoristili. Naredba poruka = Pozdrav svijetu zna ci "u memorijsku lokaciju poruka upii string Pozdr .... O cito 10 bytova nije dovoljno za cijeli string, pa je upisano samo prvih 10. Naredba PRINT *,poruka kae iz memorijske lokacije poruka uzmi podatke pa ih proslijedi podprogramu PRINT radi ispisa.

Jo jedan primjer programa

PROGRAM zbroji INTEGER :: a a = 1 a = a + 1 PRINT *,a END PROGRAM

Naredba INTEGER :: a rezervira memorijsku lokaciju pod imenom a u koju kanimo spremati cijele brojeve. Naredba a = 1 u memorijsku lokaciju a sprema broj jedinicu. Naredba a = a + 1 uzima sadraj memorijske lokacije a, njemu pribraja jedinicu te rezultat pribrajanja ponovo stavlja u memorijsku lokaciju a.

Jo jedan primjer programa

Naredba a = a + 1 u matematici je besmislena. Naredbe u programu ne smijemo identicirati kao matemati cke operacije. Varijable a nisu matemati cke varijable nego imena memorijskih lokacija. Naredba a = . . . zna ci ono to je izra cunato na desnoj strani znaka jednakosti spremi u memorijsku lokaciju a. Dio naredbe a+1 zna ci uzmi sadraj iz memorijske lokacije a i pribroji mu jedinicu. Znak jednakosti nije znak jednakosti iz matematike nego premjetanje rezultata desne strane u neku memorijsku lokaciju nazna cenu s imenom na lijevoj strani. imati naredbu a + 1=a. Na lijevoj strani treba biti Nije moguce ime neke memorijske lokacije.

Jo jedan primjer programa

Kod izvodenja dijela naredbe a+1, uzmi sadraj iz memorijske lokacije a i pribroji mu jedinicu, o cito da treba imati neki privremeni neimenovani memorijski prostor za njegovo provodenje. e se pobrinuti za rezervaciju te privremene Program prevoditelj c memorijske lokacije. Ako bi pisali program u assembleru, mainskom jeziku, onda bi mi bili ti koji bi morali voditi ra cuna u tim privremenim memorijskim lokacijama.

Make naredba
Makele datoteka:

FC = ifort FFLAGS = # ======================= all: hello.exe hello.exe: hello.f90 $(FC) $(FFLAGS) hello.f90 -o $@ clean: rm -f *.o *.exe

prompt> make ifort hello.f90 -o hello.exe

Make naredba

make omogu cuje automatizaciju prevodenja aplikacije. e naredba make Ako se u imeniku nalazi datoteka Makele tada c izvravati one naredbe denirane u sekciji all (default -na sekcija/cilj). e one naredbe koje su denirane Ili, naredba make cilj izvravat c u sekciji cilj. e izbrisati datoteke koje zavravaju s Npr. naredba make clean c *.o ili *.exe, one koje su rezultat prevodenja. Ako hello.exe ima noviji datum stvaranja od hello.f90, naredba make ne ce nita raditi.

Makele datoteka

Prvi dio Makele datoteke

FC = ifort FFLAGS =

Prva linija denira varijablu koja sadri ime prevoditelja Druga linija denira varijablu koja sadri opcije koje dajemo prevoditelju. U ovom slu caju tih opcija nema.

Drugi dio Makele datoteke


all: hello.exe hello.exe : hello.f90 $(FC) $(FFLAGS) hello.f90 -o clean: rm -f *.o *.exe
all je ime sekcije ili cilja koji se izvodi kada ni jedna sekcija nije dana kao argument make naredbi. Iza dvoto cke slijedi ime datoteke koja mora postojati, ili biti napravljena, da bi se cilj mogao ostvariti (uvjet). Iza linije s imenom cilja slijedi niz linija koje po cinju s TABom i koje sadre komande koje je potrebno izvriti da bi se cilj ostvario. Kao ime cilja, tj. hello.exe moe se koristiti $@.

$@

Sloenija Makele datoteka


FC = ifort FFLAGS = LFLAGS = # ======================= .SUFFIXES: .f90 .exe .o .f90.o: $(FC) $(FFLAGS) -c $< .o.exe: $(FC) $< -o $@ $(LFLAGS) # ======================= all: hello.exe hello.exe: hello.f90 clean: rm -f *.o *.exe

MS windoz-verzija Makele datoteke


FC = ftn95 FFLAGS = LINK = slink LFLAGS = # ======================= all: hello.exe hello.obj: hello.f90 $(FC) $(FFLAGS) hello hello.exe: hello.obj $(LINK) $< clean: del *.obj *.exe

Vrste podataka - slijede ce predavanje


U FORTRANu postoji nekoliko osnovnih vrsta podataka, te ve ci broj njihovih podvrsta. Niz znakova ili string odredene duljine. Memorijska lokacija se rezervira i imenuje naredbom CHARACTER(len=...) :: ime. Cijeli brojevi koji po apsolutnoj vrijednosti nisu ve ci od nekog maksimalnog broja. Memorijska lokacija se imenuje i rezervira naredbom INTEGER :: ime. Realni brojevi koji imaju ograni cen broj decimalnih mjesta, i manji su po iznosu od nekog maksimalno mogu ceg. Logi cki podaci: istina ili la. Iz ovih osnovnih podataka (i njihovih podvrsta) mogu ce se konstruirati sloenije podatke.

You might also like