🧮 Fortran

Язык численных расчётов: типы, массивы, циклы, подпрограммы.

Шпаргалки · Программирование · #fortran #scientific

IDE и сборка

VS Code + Modern Fortran, Visual Studio + Intel oneAPI, Code::Blocks. Компиляторы: gfortran, ifx. gfortran -O2 main.f90 -o app. Менеджер пакетов: fpm (fpm run).

Типы данных

program demo
  implicit none               ! всегда: запрет неявных типов
  integer :: n = 5
  real :: x = 1.5
  double precision :: d = 1.0d0
  complex :: z = (1.0, 2.0)
  logical :: ok = .true.
  character(len=10) :: s = "text"
  real :: a(3) = [1.0, 2.0, 3.0]
  real :: m(2, 2)
end program demo

Индексы массивов по умолчанию с 1.

Операторы

+ - * / **, сравнение == /= < > <= >=, логика .and. .or. .not., склейка строк //.

Циклы и условия

do i = 1, 10
  print *, i
end do
do while (x < 10.0)
  x = x + 1
end do
if (n > 0) then
  print *, "положительное"
else if (n == 0) then
  print *, "ноль"
else
  print *, "отрицательное"
end if

Подпрограммы

function add(a, b) result(r)
  integer, intent(in) :: a, b
  integer :: r
  r = a + b
end function

subroutine swap(a, b)
  integer, intent(inout) :: a, b
  integer :: t
  t = a; a = b; b = t
end subroutine

Встроенные

sum, product, maxval, minval, size, shape, matmul, transpose, dot_product, abs, sqrt, sin, mod, reshape, print *, read *.

Массивы целиком

b = a * 2.0               ! поэлементно
c = sum(a(1:2))           ! срез
where (a > 1.0) a = 0.0   ! по маске

Параллелизм

OpenMP (!$omp parallel do), MPI, do concurrent, coarrays (integer :: x[*]).

Библиотеки по задачам

BLAS / LAPACK (линейная алгебра), FFTW (преобразование Фурье), PETSc (решатели), NetCDF (научные данные), stdlib (fortran-lang).