80 likes | 255 Views
Fortran90-kielen moduulit. Moduuli on ohjelmalohko, johon voi kuulua useita aliohjelmia ja funktioita. Siinä voidaan myös määritellä muuttujia, jotka ovat kaikkien moduuliin kuuluvien proseduurien käytettävissä mutta eivät moduulin ulkopuolella.
E N D
Fortran90-kielen moduulit • Moduuli on ohjelmalohko, johon voi kuulua useita aliohjelmia ja funktioita. • Siinä voidaan myös määritellä muuttujia, jotka ovat kaikkien moduuliin kuuluvien proseduurien käytettävissä mutta eivät moduulin ulkopuolella. • Kutakin tehtäväluokkaa varten voidaan laatia oma moduulinsa, josta käyttäjälle näkyvät vain hänen tarvitsemansa osat. • Moduuli kuuluu Fortran90-standardiin ja Mathematican komentokieleen, jossa sitä kutsutaan 'paketiksi' (Package). Moduuleja ei ole Fortran77:ssä eikä Matlabissa.
Fortran 90 moduuli • Fortran90-kielen moduuli alkaa moduulin nimeämislauseella, • heti moduulin nimen jälkeen tulevat määrittelylauseet • ja sen jälkeen moduuliin kuuluvat aliohjelmat ja funktiot.
module xxx integer ... real ... ... contains function ... ... subroutine ... ... subroutine ... ... end module xxx Fortran90-kielen moduuli otetaan jossakin ohjelman osassa käyttöön lauseella use nimi. Tämän lauseen on sijaittava heti program-, subroutine- tai function-lauseen jäljessä. Moduuli käännetään erikseen ja sidotaan ohjelmaan linkitysvaiheessa. module
Fortran90-kielessä globaalit muuttujat voi määritellä moduulissa, joka luetaan sisään niihin ohjelman osiin, jossa muuttujia tarvitaan. module globaalit integer, save :: nmax real, dimension(nmax,3), save :: pts end module globaalit Tämä moduuli otetaan käyttöön muissa ohjelmanosissa komennolla use globaalit. Esimerkki. Fortran90-kielen moduuli, jossa määritellään ohjelman tarvitsemat globaalit muuttujat.
Fortran90-kielen moduuli, joka sisältää toistokokeen tulosten analyysiin tarvittavat keskiarvon ja keskiarvon keskivirheen laskevat funktiot. module toistokoe contains function mean(n,x,f) result(ave) implicit none ! painotettu otoskeskiarvo real, dimension(:) :: x, f integer :: n real :: ave ave = sum(x(1:n)*f(1:n))/sum(f(1:n)); end function mean function vari(n,x,f) result(var) implicit none ! painotettu otosvarianssi eli otoskeskiarvon keskivirheen ! neliö integer :: n real, dimension(:) :: x, f integer :: i real :: var var = sum(f(1:n)*(x(1:n)-mean(n,x,f))**2)/(sum(f(1:n))*(n-1)) end function vari Esimerkki. Module toistokoe
pääohjelma käyttää moduulia toistokoe otoskeskiarvon ja sen hajonnan laskemiseen. Otoksen sisäänlukuun käytetään moduulissa arrio (ei mukana tässä) olevaa aliohjelmaa readxy. Kääntäminen ja linkitys: f90 -c toistokoe.f90 f90 -c arrio.f90 f90 toistomain.f90 toistokoe.o arrio.o program keskiarvo use arrio use toistokoe implicit none integer, parameter :: nmax=100 integer :: n real, dimension(nmax) :: x, w write(*,*) 'Anna otoksen koko' read(*,*) n call readxy(n,x,w) write(*,*) 'painotettu otoskeskiarvo ja sen keskivirhe' write(*,*) mean(n,x,w), sqrt(vari(n,x,w)) end program keskiarvo esimerkki. pääohjelma
Parametrisoidut muuttujatyypit. Fortran2003:ssa on mahdollista antaa rakenteisten tyyppien attribuuteille oletusarvo. type date integer :: year = 2004 integer :: day =1 end type date Käyttö type(date), parameter :: & today = date(21, 1995); Voidaan käyttää parametrisoituja tyyppejä, joissa taulukkojen koot ja laskutarkkuus voidaan määritellä myöhemmin. Tyyppiin voidaan liittää myös proseduurien nimiä. fortran2003: oliot
fortran 2003: oliot • Fortra 2003:n muuttujat voivat olla monimuotoisia (polymorfisia). • Muuttuja voi viitata olioon. • Monimuotoinen muuttuja määritellään class-tyyppiseksi (ei type). • Lisätietoja esimerkiksi Juha Haataja: Fortran 2003 – askel olio-ohjelmointiin. @CSC syyskuu 3/2004.