7/30/2019 Uvod u Fortran-90
1/42
Uvod u FORTRAN-90 Numericke metode
Ivo Batistic
Fizicki odsjek, PMFSveucilite u Zagrebu
predavanja 2005/2006, dopunjeno 2007
http://find/7/30/2019 Uvod u Fortran-90
2/42
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
http://find/7/30/2019 Uvod u Fortran-90
3/42
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 Assemblylanguage)
Fortran je razvijen 50-tih godina prolog sto-ljeca 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 skracenica od The IBM MathematicalFormulaTranslating System.
http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://find/7/30/2019 Uvod u Fortran-90
4/42
Razvoj Fortrana
Fortran kao jezik za programiranje definiran je nizom pravila koja
se vremenom nadograduju. Nadogradnja je motiviranaprilagodavanju Fortrana suvremenim konceptima u programiranju(objektno programiranje) kao i olakavanju uporabe Fortrana urazvijanju aplikacija.
Postoji medunarodno tijelo (povjerenstvo) koje se donosi odluke ipreporuke 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
http://-/?-http://-/?-http://find/7/30/2019 Uvod u Fortran-90
5/42
Razvoj Fortrana
Radi se na razvijanju Fortrana 2008 koji ce vjerojatno ukljucivatidodatne pravila za razvoj programa na vieprocesorskimracunalima 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.Tu je obicno rijec o nekim svojstvima koja se cesto ne koriste.(Treba uvijek nastojati razvijati program prema dogovorenim iprihvacenim standardima, a ne koristiti svojstva specificna za
Fortran neke tvrtke.)
ala: Kako ce izgledati programski jezik za razvoj znanstvenihaplikacija u buducnosti?
http://find/7/30/2019 Uvod u Fortran-90
6/42
Razvoj Fortrana
Radi se na razvijanju Fortrana 2008 koji ce vjerojatno ukljucivatidodatne pravila za razvoj programa na vieprocesorskimracunalima 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.Tu je obicno rijec o nekim svojstvima koja se cesto ne koriste.(Treba uvijek nastojati razvijati program prema dogovorenim iprihvacenim standardima, a ne koristiti svojstva specificna za
Fortran neke tvrtke.)
ala: Kako ce izgledati programski jezik za razvoj znanstvenihaplikacija u buducnosti?
http://find/7/30/2019 Uvod u Fortran-90
7/42
Razvoj Fortrana
Radi se na razvijanju Fortrana 2008 koji ce vjerojatno ukljucivati
dodatne pravila za razvoj programa na vieprocesorskimracunalima i grozdovima.
Nezavisno od medunarodnih pravila, svaka tvrtka koja razvijaFortranski prevoditelj ima neka svoja dodatna proirenja jezika,ali i neke nedostatke u potovanju i primjeni dogovorenih pravila.Tu je obicno rijec o nekim svojstvima koja se cesto ne koriste.(Treba uvijek nastojati razvijati program prema dogovorenim iprihvacenim standardima, a ne koristiti svojstva specificna za
Fortran neke tvrtke.)
ala: Kako ce izgledati programski jezik za razvoj znanstvenihaplikacija u buducnosti?To nitko ne zna, ali ce se sigurno zvati Fortran!
http://find/7/30/2019 Uvod u Fortran-90
8/42
Jednostavni FORTRANski program
! komentar
Program hello
print *,Pozdrav svijetu
end program
Naredbe u FORTRANu: program, end, printTo su rezervirane rijeci koje se ne smiju koristiti zaimena varijabli, funkcija, procedura, programa itd.
Naredbe pocinju i zavravaju u jednom redu.
Komentar pocinje s usklicnikom !
String je omeden s jednostrukim navodnim znakom ()
http://find/7/30/2019 Uvod u Fortran-90
9/42
Jednostavni FORTRANski program
! komentar
Program hello
print *,Pozdrav svijetu
end program
Naredbe u FORTRANu: program, end, printTo su rezervirane rijeci koje se ne smiju koristiti zaimena varijabli, funkcija, procedura, programa itd.
Naredbe pocinju i zavravaju u jednom redu.
Komentar pocinje s usklicnikom !
String je omeden s jednostrukim navodnim znakom ()
http://find/7/30/2019 Uvod u Fortran-90
10/42
Usporedba s C-programom
/* komentar */
#include
main()
{
printf("Pozdrav svijetu!\n");
}
Naredba za ispis: printf
String je omeden s dvostrukim navodnim znakom (").Naredbe Naredbe mogu ici preko vie linija a zavravaju s
tocka-zarezom (;).
Komentar pocinje s /* a zavrava s */.
http://find/7/30/2019 Uvod u Fortran-90
11/42
to raditi s FORTRANskim programom ?
Spremiti program u datoteku koja zavrava s .f90, npr. datotekus imenom hello.f90.
Kompajlirati program iliprevesti program napisan u fortanskom jeziku u izvrni program(mainski).Kako ? Pomocu prevoditelja ili engl. compiler-a - kompajlera :
prompt> ifort hello.f90 -o hello.exe
http://find/http://goback/7/30/2019 Uvod u Fortran-90
12/42
to raditi s FORTRANskim programom ?
Spremiti program u datoteku koja zavrava s .f90, npr. datotekus imenom hello.f90.
Kompajlirati program iliprevesti program napisan u fortanskom jeziku u izvrni program(mainski).Kako ? Pomocu prevoditelja ili engl. compiler-a - kompajlera :
prompt> ifort hello.f90 -o hello.exe
http://find/7/30/2019 Uvod u Fortran-90
13/42
to raditi s FORTRANskim programom ?
ifort je fortranski prevoditelj, koji je napravio Intel.
hello.exe je izvrni program:
prompt> ./hello.exe
Pozdrav svijetu
prompt>
http://find/7/30/2019 Uvod u Fortran-90
14/42
Imena datoteka s FORTRANskim programom
Nastavke .f90 imaju datoteke napisane u Fortranu-90.
Za programe napisane u fortranu-77 uobicajeno je koristitinastavak .f.
Nastavci mogu biti i .for, .hpf, .f95, .F, F90, .F95, .FOR,.HPF, .fpp, . . . .
Nastavci s velikim slovima cesto oznacavaju programe koji
sadre pseudo-fortranske naredbe. Takova datoteka prolazidodatnu obradu (s tz. predprocesorskim programom) prijekonacnog prevodenja u objektnu datoteku.
http://find/7/30/2019 Uvod u Fortran-90
15/42
Usporedba FORTRANa-77 i FORTRANa-90
Fortran-90
! komentar
Program hello
print *,Pozdrav svijetu
end program
Fortran-77
c234567890123456789012345678901234567890
c komentarc234567890123456789012345678901234567890
Program hello
print *,Pozdrav svijetu
end program
http://find/7/30/2019 Uvod u Fortran-90
16/42
O FORTRANu-77
Koristi se fiksni 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 FORTRAN
http://find/7/30/2019 Uvod u Fortran-90
17/42
O FORTRANu-90
Koristi se slobodni format zapisa programa: Mjesta 1-6 nisu rezervirana Naredba u liniji moe biti vrlo dugacka Naredba se nastavlja na slijedeci red ako zavrava s
ampersandom (&) na kraju Na istoj liniji moe biti vie naredbi, a medusobno su razdvojene s
tocka-zarezom (;).
Fortran-90 ima naredbe koje rade s vektorima i matricama.
Bolja kontrola nad vrstama podataka
Dinamicko rezerviranje memorije skupove podataka (velikematrice ili vektore).
i j FORTRAN 77
http://find/7/30/2019 Uvod u Fortran-90
18/42
primjer FORTRAN-77
c234567890123456789012345678901234567890
c komentar
c234567890123456789012345678901234567890
Program hello
print *,Pozdrav i mir cijelom
& svijetugo to 100
print *,ovo nece biti ispisano
100 continue
end program
naredba go to 100 forsira program da se nastavi izvoditi odmjesta oznacenog s labelom 100
continue ne cini ita, program se naprosto nastavlja od tog mjesta
nadalje.
http://find/7/30/2019 Uvod u Fortran-90
19/42
i j FORTRAN 90
7/30/2019 Uvod u Fortran-90
20/42
primjer FORTRAN-90
Program hello
print *,Pozdrav i mir cijelom &
svijetu
print *,svim bicima ; print *,u svemiru i okolici
End program
& (ampersand, and) oznacava nastavak naredbe u slijedeci red
; (tocka-zarez) razdvaja vie fortranskih naredbi
primjer FORTRAN 90
http://find/7/30/2019 Uvod u Fortran-90
21/42
primjer FORTRAN-90
Program hello
print *,Pozdrav i mir cijelom &
svijetu
print *,svim bicima ; print *,u svemiru i okolici
End program
& (ampersand, and) oznacava nastavak naredbe u slijedeci red
; (tocka-zarez) razdvaja vie fortranskih naredbi
O fortranskim prevoditeljima
http://find/7/30/2019 Uvod u Fortran-90
22/42
O fortranskim prevoditeljima
Linux
Intelovi prevoditelji - slobodni za personalnu uporabu, ali uzregistraciju 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)
http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://find/7/30/2019 Uvod u Fortran-90
23/42
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 formatuzapisanom.
Iza ove opcije slijedi ime izvrnog programa .Ime izvrnog programa moe biti bilo to, npr. hello ili hello.x iliolleh ili virus.com(Ipak dobro se je konzistentno drati odredenog pravila)
Najcece koritene opcije kod prevoditelja
http://find/7/30/2019 Uvod u Fortran-90
24/42
Najcece koritene opcije kod prevoditelja
-o xxx.exe Ime izvrnog programa
-O Optimiziraj izvrni program
-c Ne napravi kompletni izvrni program
nego samo napravi datoteku s tz. objektnim zapisom.(Datoteka zavrava s .o ili .obj kod MS windows-a.)
-llapack koristi biblioteku pomocnih programa(soubrutine-a) liblapack.a ili liblapack.so
-L /usr/lib/ Biblioteku trai na tom mjestu na disku racunala
Primjeri prevodenja
http://find/7/30/2019 Uvod u Fortran-90
25/42
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
http://find/7/30/2019 Uvod u Fortran-90
26/42
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 [ 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.exehello world
to je hello o a to hello exe
http://find/7/30/2019 Uvod u Fortran-90
27/42
to je hello.o a to hello.exe
Objekti zapis (hello.o) je tocni ili ekvivalentni optimizirani mainskizapis (prijevod) programa, s tim da ne postoje:
dijelovi mainskog programa koji se brinu za razmjenu podataka
s vanjskim jedinicama racunala (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
http://find/7/30/2019 Uvod u Fortran-90
28/42
to je hello.o a to hello.exe
Postoje dvije vrste izvrnih programa hello.exe: staticki povezani i oni
koji se dinamicki povezuju prije samog izvodenja.
Staticki povezani izvrni programi su gotovo potpuni, osim to imjo nedostaje dio programa za komunikaciju s vanjskimjedinicama racunala.
Dinamicki povezanim programima nedostaju i vanjske funkcije ipotprogrami koji se nalaze u dinamickim bibliotekama. Dinamickabiblioteka se kopira u glavnu memoriju racunala u trenutkuizvodenja, ako nije vec prije tamo iskopirana.
Svi programi izvode se unutar nekog operacijskog sustava. Izmeduprograma i vanjskih jedinica uvijek stoji operacijski sustav. Pristup donjih je moguc samo kroz posredovanje operacijskog sustava.
Kako znati je li je program dinamicki ili staticki povezan ?
http://find/7/30/2019 Uvod u Fortran-90
29/42
Kako znati je li je program dinamicki ili staticki 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>
Dinamicke biblioteke potprograma koje se povezuju u trenutku izvodenja.
prompt> ldd hello_static.exe
not a dynamic executable
prompt>
Struktura/format izvrnog programa
http://find/7/30/2019 Uvod u Fortran-90
30/42
Struktura/format izvrnog programa
prompt> size hello.x
text data bss dec hex filename
302911 24616 10236 337763 52763 hello.x
za ELF-format (linux)
text Mainske naredbe programa.
data Podaci i konstante s unaprijed poznatim vrijednostima.
bss Podaci cije vrijednosti nisu unaprijed poznate.
dec Ukupna velicina svih sekcija.
Primjer FORTRANskog programa s varijablama
http://find/7/30/2019 Uvod u Fortran-90
31/42
je O s og p og a a s a jab a a
Program
PROGRAM hello
CHARACTER(len=10) :: poruka
poruka = Pozdrav svijetuPRINT *,poruka
END PROGRAM
Izvodenje
prompt> ./hello.exe
Pozdrav sv
prompt>
Primjer FORTRANskog programa s varijablama
http://find/7/30/2019 Uvod u Fortran-90
32/42
j g p g j
Naredba CHARACTER(len=10) :: poruka rezervira mjesto u
memoriji i toj memorijskoj lokaciji daje ime poruka.
U nastavku programa, kada se navede rijec poruka, onda toznaci bilo da se u tu memorijsku lokaciju stavljaju podaci, bilo da
se iz te memorijske lokacije izvlace podaci kako bi se negdje zaneto iskoristili.
Naredba poruka = Pozdrav svijetu znaci "u memorijsku lokacijuporuka upii string Pozdr .... Ocito 10 bytova nije dovoljno za
cijeli string, pa je upisano samo prvih 10.
Naredba PRINT *,poruka kae iz memorijske lokacije porukauzmi podatke pa ih proslijedi podprogramu PRINT radi ispisa.
Jo jedan primjer programa
http://find/7/30/2019 Uvod u Fortran-90
33/42
j p j p g
PROGRAM zbrojiINTEGER :: a
a = 1
a = a + 1
PRINT *,a
END PROGRAM
Naredba INTEGER :: a rezervira memorijsku lokaciju podimenom 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, njemupribraja jedinicu te rezultat pribrajanja ponovo stavlja umemorijsku lokaciju a.
Jo jedan primjer programa
http://find/7/30/2019 Uvod u Fortran-90
34/42
j p j p g
Naredba a = a + 1 u matematici je besmislena. Naredbe uprogramu ne smijemo identificirati kao matematicke operacije.
Varijable a nisu matematicke varijable nego imena memorijskihlokacija.
Naredba a = . . . znaci ono to je izracunato na desnoj strani
znaka jednakosti spremi u memorijsku lokaciju a.
Dio naredbe a+1 znaci uzmi sadraj iz memorijske lokacije a ipribroji mu jedinicu.
Znak jednakosti nije znak jednakosti iz matematike negopremjetanje rezultata desne strane u neku memorijsku lokacijunaznacenu s imenom na lijevoj strani.
Nije moguce imati naredbu a + 1=a. Na lijevoj strani treba bitiime neke memorijske lokacije.
Jo jedan primjer programa
http://find/7/30/2019 Uvod u Fortran-90
35/42
Kod izvodenja dijela naredbe a+1, uzmi sadraj iz memorijskelokacije a i pribroji mu jedinicu, ocito da treba imati nekiprivremeni neimenovani memorijski prostor za njegovoprovodenje.
Program prevoditelj ce se pobrinuti za rezervaciju te privremenememorijske lokacije.
Ako bi pisali program u assembleru, mainskom jeziku, onda bi
mi bili ti koji bi morali voditi racuna u tim privremenimmemorijskim lokacijama.
Make naredba
http://find/7/30/2019 Uvod u Fortran-90
36/42
Makefile datoteka:
FC = ifortFFLAGS =
# =======================
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
http://find/7/30/2019 Uvod u Fortran-90
37/42
make omogucuje automatizaciju prevodenja aplikacije.
Ako se u imeniku nalazi datoteka Makefile tada ce naredba makeizvravati one naredbe definirane u sekciji all (default-nasekcija/cilj).
Ili, naredba make cilj izvravat ce one naredbe koje su definiraneu sekciji cilj.Npr. naredba make clean ce izbrisati datoteke koje zavravaju s*.o ili *.exe, one koje su rezultat prevodenja.
Ako hello.exe ima noviji datum stvaranja od hello.f90, naredbamake nece nita raditi.
Makefile datoteka
http://find/7/30/2019 Uvod u Fortran-90
38/42
Prvi dio Makefile datoteke
FC = ifort
FFLAGS =
Prva linija definira varijablu koja sadri ime prevoditelja
Druga linija definira varijablu koja sadri opcije koje dajemo
prevoditelju. U ovom slucaju tih opcija nema.
Drugi dio Makefile datoteke
http://find/7/30/2019 Uvod u Fortran-90
39/42
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 nijedana kao argument make naredbi.
Iza dvotocke slijedi ime datoteke koja mora postojati, ili bitinapravljena, da bi se cilj mogao ostvariti (uvjet).
Iza linije s imenom cilja slijedi niz linija koje pocinju s TABom ikoje sadre komande koje je potrebno izvriti da bi se cilj ostvario.
Kao ime cilja, tj. hello.exe moe se koristiti $@.
Sloenija Makefile datoteka
http://find/7/30/2019 Uvod u Fortran-90
40/42
FC = ifort
FFLAGS =LFLAGS =
# =======================
.SUFFIXES: .f90 .exe .o
.f90.o:
$(FC) $(FFLAGS) -c $