Szukaj…


Programy Fortran

Kompletny program Fortran składa się z wielu różnych jednostek programu. Jednostki programu to:

  • główny program
  • podprogram funkcji lub podprogramu
  • moduł lub submoduł
  • blokować program danych

Program główny i niektóre podprogramy procedur (funkcji lub podprogramów) mogą być dostarczane w języku innym niż Fortran. Na przykład program główny C może wywoływać funkcję zdefiniowaną przez podprogram funkcji Fortran lub program główny Fortran może wywoływać procedurę zdefiniowaną przez C.

Te jednostki programu Fortran mogą być oddzielnymi plikami lub pojedynczymi plikami.

Na przykład możemy zobaczyć dwa pliki:

prog.f90

program main
  use mod
end program main

mod.f90

module mod
end module mod

Kompilator (poprawnie wywołany) będzie mógł powiązać program główny z modułem.

Pojedynczy plik może zawierać wiele jednostek programu

wszystko. f90

module mod
end module mod

program prog
  use mod
end program prog

function f()
end function f()

W tym przypadku należy jednak zauważyć, że funkcja f jest nadal funkcją zewnętrzną, jeśli chodzi o główny program i moduł. Moduł będzie jednak dostępny dla programu głównego.

Reguły zakresu pisania dotyczą każdej jednostki programu, a nie pliku, w którym są zawarte. Na przykład, jeśli chcemy, aby każda jednostka zakresu nie miała żadnego domyślnego wpisywania, powyższy plik należy zapisać jako

module mod
  implicit none
end module mod

program prog
  use mod
  implicit none
end program prog

function f()
  implicit none
  <type> f
end function f

Moduły i submoduły

Moduły są udokumentowane w innym miejscu .

Kompilatory często generują tak zwane pliki modułów : zwykle plik zawierający

module my_module
end module

spowoduje my_module.mod przez kompilator pliku o nazwie my_module.mod . W takich przypadkach, aby moduł był dostępny dla jednostki programowej, plik modułu musi być widoczny przed przetworzeniem tej drugiej jednostki programowej.

Procedury zewnętrzne

Procedura zewnętrzna to taka, która jest zdefiniowana poza inną jednostką programu lub za pomocą środków innych niż Fortran.

Funkcja zawarta w pliku takim jak

integer function f()
  implicit none
end function f

jest funkcją zewnętrzną.

W przypadku procedur zewnętrznych ich istnienie można zadeklarować za pomocą bloku interfejsu (w celu uzyskania jawnego interfejsu)

program prog
  implicit none
  interface
    integer function f()
  end interface
end program prog

lub poprzez oświadczenie deklarujące, aby zapewnić domyślny interfejs

program prog
  implicit none
  integer, external :: f
end program prog

lub nawet

program prog
  implicit none
  integer f
  external f
end program prog

external atrybut nie jest konieczny:

program prog
  implicit none
  integer i
  integer f
  i = f()   ! f is now an external function
end program prog

Blokuj jednostki programu danych

Jednostki programu danych bloku to jednostki programu, które podają wartości początkowe dla obiektów we wspólnych blokach. Zostały one celowo tutaj nieudokumentowane i zostaną uwzględnione w dokumentacji historycznych elementów Fortran.

Podprogramy wewnętrzne

Jednostka programu, która nie jest wewnętrznym podprogramem, może zawierać inne jednostki programu, zwane wewnętrznymi podprogramami .

program prog
  implicit none
contains
  function f()
  end function f
  subroutine g()
  end subroutine g
end program

Taki wewnętrzny podprogram ma wiele funkcji:

  • istnieje powiązanie hosta między podmiotami w podprogramie i programie zewnętrznym
  • niejawne reguły pisania są dziedziczone ( implicit none obowiązuje w f powyżej)
  • podprogramy wewnętrzne mają jawny interfejs dostępny na hoście

Podprogramy modułów i podprogramy zewnętrzne mogą mieć podprogramy wewnętrzne, takie jak

module mod
  implicit none
contains
  function f()
  contains
    subroutine s()
    end subroutine s
  end function f
end module mod

Pliki kodu źródłowego

Plik kodu źródłowego to (ogólnie) zwykły plik tekstowy, który jest przetwarzany przez kompilator. Plik kodu źródłowego może zawierać maksymalnie jeden program główny oraz dowolną liczbę modułów i podprogramów zewnętrznych. Na przykład plik kodu źródłowego może zawierać następujące elementy

module mod1
end module mod1

module mod2
end module mod2

function func1()    ! An external function
end function func1

subroutine sub1()   ! An external subroutine
end subroutine sub1

program prog        ! The main program starts here...
end program prog    ! ... and ends here

function func2()    ! An external function
end function func2

Powinniśmy tutaj przypomnieć, że chociaż podprogramy zewnętrzne są podane w tym samym pliku co moduły i program główny, podprogramy zewnętrzne nie są wyraźnie znane żadnym innym komponentom.

Alternatywnie, poszczególne składniki mogą być rozłożone na wiele plików, a nawet kompilowane w różnych momentach. Należy przeczytać dokumentację kompilatora dotyczącą łączenia wielu plików w jeden program.

Pojedynczy plik kodu źródłowego może zawierać kod źródłowy o stałej lub swobodnej formie: nie można ich mieszać, chociaż wiele plików łączonych w czasie kompilacji może mieć różne style.

Aby wskazać kompilatorowi formularz źródłowy, istnieją na ogół dwie opcje:

  • wybór sufiksu nazwy pliku
  • użycie flag kompilatora

Flagę czasu kompilacji wskazującą źródło o stałej lub swobodnej formie można znaleźć w dokumentacji kompilatora.

Znaczące przyrostki nazw plików znajdują się również w dokumentacji kompilatora, ale ogólną zasadą jest, że plik o nazwie file.f90 zawiera źródło w file.f formie, podczas gdy plik file.f zawiera źródło o stałej formie.

Użycie sufiksu .f90 do wskazania dowolnego źródła (które zostało wprowadzone w standardzie Fortran 90) często kusi programistę do użycia sufiksu do wskazania standardu językowego, z którym zgodny jest kod źródłowy. Na przykład możemy zobaczyć pliki z przyrostkami .f03 lub .f08 . Zasadniczo należy tego unikać: większość źródeł Fortran 2003 jest również zgodna z Fortran 77, Fortran 90/5 i Fortran 2008. Ponadto, wiele komilatorów nie uwzględnia automatycznie takich sufiksów.


Kompilatory często oferują także wbudowany preprocesor kodu (zazwyczaj oparty na cpp). Ponownie, flaga czasu kompilacji może być użyta do wskazania, że preprocesor powinien zostać uruchomiony przed kompilacją, ale sufiks pliku kodu źródłowego może również wskazywać na takie wymagania dotyczące przetwarzania wstępnego.

Dla przypadków wrażliwych systemów plików plik file.F jest często traktowana jako plik źródłowy stałym forma zostać wstępnie przetworzone i file.F90 się plik źródłowy free-form zostać wstępnie przetworzone. Tak jak poprzednio, należy zapoznać się z dokumentacją kompilatora pod kątem takich flag i sufiksów plików.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow