Ohjelmointi Unixissa, luku 8 Ohjelmointi Fortran-kielellä:

Perusasioita Fortran-ohjelmien ajamisesta

Tässä kappaleessa annetaan ohjeita Unixeissa Fortranilla ohjelmoiville. Fortran-ohjelmointikielen joutuu opettelemaan muualta. Fortraniin liittyvää tietoa (mm. Fortran-77-standardi ja useita oppikirjantapaisia esityksiä Fortranista) löytyy dokumentin Tietoa Fortran-ohjelmointikielestä Internetistä kautta.

Fortran-ohjelman kirjoittaminen ja editointi

Fortran-ohjelmatiedostot nimetään niin, että nimi loppuu merkkeihin .f (piste ja pieni f-kirjain). Tämä on tarpeen, jotta kääntäjä käsittelisi tiedoston oikein. Lisäksi siitä on se etu, että käytettäessä Emacsia editori osaa asettua ns. Fortran-moodiin, mikä merkitsee mm. seuraavaa:

Lisätietoja Fortran-moodista saa esim. Emacsista itsestään, kun sen ollessa Fortran-moodissa antaa näppäinyhdistelmän control-H m. Emacsin hienouksista on tietoja myös GNU Emacs Manualissa, joka löytyy atk-keskuksen kirjastosta.

Unixissa voi Fortran-ohjelmassa käyttää isoja tai pieniä kirjaimia tai molempia: voi kirjoittaa CONTINUE tai continue tai Continue tai vaikka cOnTINue. Huomaa, että sama ei koske Unixin komentoja eikä tiedostonnimiä - niissä isojen ja pienten kirjainten ero on merkitsevä!

Tavallisinta lienee käyttää pieniä kirjaimia; jos ohjelma on siirretty muusta ympäristöstä ja on kirjoitettu isoin kirjaimin, voi olla hyvä idea pitää alkuperäinen koodi isokirjaimisena mutta tehdä muutokset ja lisäykset pienikirjaimisina.

Fortran-kääntäjät

Unix-koneissa mahdollisesti olevilla Fortran-kääntäjillä on eroa, mutta yhteisiä piirteitä ovat yleensä seuraavat:

Fortran-ohjelman kääntäminen ja ajaminen

Ohjelma yhdessä tiedostossa

Jos Fortran-ohjelma on yhdessä tiedostossa, se voidaan kääntää komennolla

f77 nimi

missä nimi on ohjelmatiedoston nimi (jonka on syytä loppua merkkeihin .f). Usein kannattaa kuitenkin antaa komennossa yksi tai useampia optioita.

Tämä komento myös lataa ohjelman tuottaen ajokelpoisen ohjelman a.out-nimiseen tiedostoon. Tämän jälkeen ohjelma voidaan käynnistää komennolla a.out edellyttäen, että voimassa ovat sopivat ympäristömäärittelyt. (Yleisessä käytössä olevissa koneissa tällaiset määrittelyt ovat yleensä automaattisesti voimassa. Jos näin ei ole, voidaan käyttää komentoa ./a.out tai yleisemmin ./x, missä x on ajokelpoisen ohjelman nimi.)

Ohjelma useassa tiedostossa

Jos ohjelma on jaettu useaan tiedostoon, voidaan ensinnäkin menetellä siten, että kaikki ohjelmatiedostot luetellaan yhdessä f77-komennossa erottaen niiden nimet välilyönneillä, esim.

f77 paa.f ali1.f ali2.f ali3.f

Jos käännös menee läpi virheittä, syntyy ajokelpoinen ohjelma tiedostoon a.out.

Tämä on kuitenkin usein epäkäytännöllistä ohjelmankehittelyssä, koska aina ei ole tarpeen kääntää uudestaan kaikkia ohjelmatiedostoja. Voidaan menetellä niin, että käännetään kerralla vain yksi tai muutama ohjelmatiedosto esim. seuraavaan tapaan:

f77 -c ali1.f ali2.f
f77 -c ali3.f
f77 paa.f ali1.o ali2.o ali3.o
Tällöin ensimmäisessä vaiheessa syntyvät käännöstiedostot (objektikooditiedostot) ali1.o ja ali2.o ja toisessa vaiheessa ali3.o. Viimeisessä vaiheessa sitten käännetään vain tiedosto paa.f, mutta myös aiemmin muodostetut käännöstiedostot on mainittava f77-komennossa. Viimeisessä vaiheessa syntyy taas ajokelpoinen ohjelma a.out.

Edellä esitetyissä komennoissa optio -c ilmoittaa, että ohjelmaa ei pidä yrittääkään vielä ladata. Jos unohdat kirjoittaa option -c, saat ilmoituksia, jotka johtuvat siitä, että käännettävät tiedostot eivät muodosta kokonaista ohjelmaa (esim. pääohjelma puuttuu). Ilmoitukset näyttävät virheilmoituksilta (ERROR: Unresolved or undefined symbols detected), mutta ne eivät ole mitenkään vakavia, vaan voit jatkaa normaalisti.

Jos ohjelmatiedostoja on paljon, kannattaa opetella käyttämään make-komentoa (ks. kohtaa 6 Ohjelmien hallinta).

Kääntäjän optiot

Fortran-kääntäjillä on lukuisia optioita (valitsimia), jotka ovat usein varsin hyödyllisiä. Optiot annetaan kääntäjän nimen f77 ja tiedostonnimien välissä, ja kukin optio alkaa yhdysviivalla (-).

Esimerkiksi IBM:n Unix-toteutuksen (Aix) Fortran-kääntäjän optioista mainittakoon seuraavat:

-qsource
Aiheuttaa mm. sen, että päätteelle tulostuviin virheilmoituksiin tulee mukaan itse virheellisen rivin sisältö (eikä pelkkää rivi- ja sarakenumeroa) ja että muodostuu käännöslistaus. Listaustiedoston nimen kääntäjä muodostaa ohjelmatiedoston nimestä korvaamalla loppu-f:n merkeillä lst.
-u
Aiheuttaa sen, että kaikkien muuttujien tyyppien tulee olla erikseen määriteltyjä (ei siis alkukirjainsäännön eikä IMPLICIT-lauseen perusteella). Tämä vastaa sitä, että jokaisessa ohjelmayksikössä olisi lause IMPLICIT NONE. Option avulla voidaan usein havaita kirjoitusvirheistä johtuvia ongelmia.
-O
Optimointioptio, joka yleensä lyhentää ohjelman suoritusaikaa varsin merkittävästi. Optimointioption käyttö on suositeltavaa, ellei kyse ole pienestä kokeilu- tms. ohjelmasta.
-lmsaa
Tämän option ansiosta saadaan ajonaikaiset virheilmoitukset tilanteista, joissa matemaattista standardifunktiota on kutsuttu argumentilla, joka aiheuttaa laskennassa virhetilanteen.
-o
Tämän option avulla voidaan antaa ajokelpoiselle ohjelmalle haluttu nimi.
-qrndsngl
Aiheuttaa sen, että ohjelma laskee yksinkertaisella tarkkuudella ne liukulukulausekkeet, joiden operandit ovat yksinkertaista tarkkuutta.
-g
Tämä optio tarvitaan, jos ohjelman toimintaa halutaan tarkastella tutkintaohjelmalla eli debuggerilla.
Seuraavassa on kaksi esimerkkiä eri tilanteisiin sopivien optioiden antamisesta. Kummassakin oletamme yksinkertaisuuden vuoksi, että koko ohjelma on yhdessä tiedostossa ohj.f.

Ohjelman kehittelyvaiheessa:

f77 -qsource -u -g -lmsaa ohj.f

Tehtäessä ohjelmasta "tuotantoversio":

f77 -o ohj -O -lmsaa ohj.f