Uvod u Fortran-90

Embed Size (px)

Citation preview

  • 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 $