Основы Fortran.pptx
- Количество слайдов: 23
Основы Fortran Часть 1 Фирсин Антон Александрович
Почему фортран? Множество свободно доступных математических алгоритмов Высокая производительность, достижимая средствами языка Реализация параллельных алгоритмов средствами компилятора Кроссплатформенность
История Создан в период с 1954 по 1957 год Название Fortran является сокращением от FORmula TRANslator (переводчик формул)
Стандарты языка FORTRAN 66 (1972) FORTRAN 77 (1980) Fortran 90 (1991) Fortran 95 (1997) Fortran 2003 (2004) Fortran 2008 (2010)
Простые типы данных Целочисленный тип Integer(2) : : a Integer(8) : : b Действительный тип Real(4) : : c Real(8) : : d Комплексный тип Complex(4) : : c Complex(8) : : z
Простые типы данных Логический тип Logical : : l Строковый тип Character(10) : : ch
Массивы Объявление Real(8) : : a(8), b(2, 4), m(-2: 2) Integer(4), dimension(2, 4) : : nsl Real(8), allocatable : : z(: , : ) Использование a(1: 4) = 1. 0 d 0 a(5: ) = -1 m(-2: 2) = [ -2, -1, 0, 1, 2 ] d(1: n)=[( i * 5 + 10, i =1, n)]
Пользовательские типы данных Объявление Type My. Type Integer(4) : : n 1, n 2 Real(8) : : x, y, z End Type My. Type Использование Type(My. Type) : : a a%n 1 = 1; a%n 2 = 0; a. X = 0. 0 d 0; a. Y = 1. 5 d-4;
Встроенные математические функции +, -, *, /, ** ABS COS, SIN, TAN, ACOS, ASIN, ATAN SQRT EXP, LOG 10 MOD, FLOOR, CEILING MAX, MIN . OR. , . AND. , . NOT. IOR, IAND
Условный оператор if (Логическое выражение) then Операторы_1 else Операторы_2 endif
Оператор цикла Конструкция DO Do i=1, 10 write(*, *) I End Do Конструкция DO WHILE i=1 Do While (i <= 10) Write (*, *) i i=i +1 End Do
Оператор цикла Конструкция DO i=1 Do Write (*, *) i i=i +1 If (I > 10) Exit End Do
Операции над массивами Присвоение массиву одного значения a=1 a(: )=1 a(1: n)=1 Копирование массива a=b a(1: n)=c(2, 1: n)
Операции над массивами Умножение массива на число a(1: n)=c(2, 1: n)*2. 0 d 0 Поэлементные операции a=b+c a=b–c a=b*c
Оператор Where where (логическое выражение) операторы присваивания массивов elsewhere операторы присваивания массивов end where a = [1, -2, 7, 8, -10] b = [1, 2, 3, 4, 5] where(a < 0) b = b**2 elsewhere b=0 endwhere
Оператор Forall forall (спецификация триплета, выражение маска) операторы присваивания end forall a = [1, -2, 7, 8, -10] b = [1, 2, 3, 4, 5] forall(i=1: N, a(i)<0) b(i) = 0 endforall
Оператор Reshape result = RESHAPE (source, shape[, pad] [, order]) INTEGER AR 1( 2, 5) REAL F(5, 3, 8) REAL C(8, 3, 5) AR 1 = RESHAPE((/1, 2, 3, 4, 5, 6/), (/2, 5/), (/0, 0/), (/2, 1/)) ! returns 1 2 3 4 5 ! 60000 ! Change Fortran array order to C array order C = RESHAPE(F, (/8, 3, 5/), ORDER = (/3, 2, 1/))
Матричные операции Matmul maxval minval sum transpose Пример Real(8) : : a(3, 4), b(4, 3) b = Transpose(a)
Функции type function f_name (аргументы) тело функции f_name = результат end function f_name Real(8) Function Add(a, b) Real(8) : : a, b Add = a+b End Function Add
Функции Function Add(a, b) Real(8) : : Add Real(8), Intent(in) Add = a+b End Function Add : : a, b
Процедуры subroutine p_name (аргументы) тело подпрограммы end subroutine p_name subroutine Add(a, b) implicit none Real(8) : : a(10), b (10) a=a+b end subroutine Add
Модуль module m_name описание типов, констант, переменных Contains описание процедур и функций end module
Спасибо за внимание