УДК 004.438Fortran
ББК 32.973.22
M27
V27 Арьен Маркус
Современный Fortran на практике / пер. с англ. Снастин А. В. –
М.: ДМК Пресс, 2015. – 308 с.: ил.
ISBN 978-5-97060-302-4
Язык программирования Fortran изначально был предназначен для
математических вычислений с максимальной производительностью.
В последний стандарт Fortran 2008 включено множество современных
функциональных возможностей: средства объектно-ориентированного
программирования, специализированные операции с массивами, типы,
определяемые пользователем и поддержка параллельных вычислений.
Данное учебное руководство поможет программистам на языке
Fortran научиться применять все вышеперечисленные функциональные
возможности в соответствии с современными требованиями:
модульность, лаконичность, объектно-ориентированный подход и
рациональное использование ресурсов, а также организация работы
с учётом наличия нескольких процессоров. В книге рассматриваются
практические примеры взаимодействия с программами, написанными
на языке C, управления памятью, применения графики и графических
пользовательских интерфейсов, параллельные вычисления с использованием
библиотек MPI, OpenMP и комассивов (coarrays). Кроме того,
автор анализирует некоторые числовые алгоритмы и их реализации, а
также показывает, как можно применить некоторые библиотеки с открытыми
исходными кодами.
Original English language edition published by Cambridge University Press, 32
Avenue of the Americas, New York, NY 10013-2473, USA. © Arjen Markus 2012.
Russian-language edition copyright © 2015 by DMK Press. All rights reserved.
Все права защищены. Любая часть этой книги не может быть воспроизведена
в какой бы то ни было форме и какими бы то ни было средствами без
письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку
вероятность технических ошибок все равно существует, издательство
не может гарантировать абсолютную точность и правильность приводимых
сведений. В связи с этим издательство не несет ответственности за возможные
ошибки, связанные с использованием книги.
ISBN 978-1-107-01790-0 (англ.)
ISBN 978-5-97060-302-4 (рус.)
© Arjen Markus, 2012
© Оформление, перевод на русский язык
ДМК Пресс, 2015
Стр.5
оглавление
Предисловие Майкла Меткалфа.......................... 11
Предисловие автора ......................................... 15
Глава 1. Введение в современный Fortran ............. 17
1.1. особенности современного Fortran .................................. 17
1.2. Fortran 90 .......................................................................... 21
1.3. Fortran 95 .......................................................................... 25
1.4. Fortran 2003 ...................................................................... 26
1.5. Fortran 2008 ...................................................................... 28
1.6. Что осталось неизменным ................................................. 29
Глава 2. Функции для работы с массивами ............ 32
2.1. передача массивов в аргументах ...................................... 33
производительность при использовании функций обработки
массивов ........................................................................................35
2.2. Элементные функции и автоматическое
перераспределение памяти .................................................... 36
2.3. два более сложных примера ............................................. 38
дистанционирование иррациональных чисел .................................38
Быстрая сортировка Quicksort ........................................................40
2.4. компактный стиль ............................................................. 41
Глава 3. Математические абстракции .................. 44
3.1. Автоматическое дифференцирование .............................. 44
проблемы при вычислениях ...........................................................49
3.2. дискретное программирование ........................................ 50
управление памятью ......................................................................51
3.3. перечислимое множество решений диофантовых
уравнений ............................................................................... 53
3.4. отложенные или ленивые вычисления .............................. 56
Стр.7
Оглавление
7
Глава 4. Управление памятью ............................. 60
4.1. динамически изменяемые массивы .................................. 60
4.2. утечки памяти при использовании указателей .................. 61
4.3. увеличение размера массива ........................................... 62
4.4. строки символов с изменяемой длиной ............................ 63
4.5. сочетание автоматических и динамических массивов ...... 66
4.6. производительность массивов разных типов .................... 67
4.7. параметризованные производные типы ........................... 69
4.8. Утечки памяти в производных типах ................................ 71
4.9. производительность и доступ к памяти ............................. 76
Глава 5. Проблема интерфейса ........................... 80
5.1. подстановка параметров .................................................. 82
5.2. использование пула данных .............................................. 84
данные в модулях ...........................................................................85
внутренние подпрограммы ............................................................88
5.3. передача дополнительных аргументов ............................. 89
Массив параметров ........................................................................89
использование функции transfer() ..................................................90
процедуры, связанные с типом ......................................................91
указатели на процедуры .................................................................93
5.4. управляющие конструкции ............................................... 95
Библиотека openMP .....................................................................100
5.5. работа с числовыми значениями различной точности ..... 102
5.6. резюме ........................................................................... 103
Глава 6. Взаимодействие с программами
на языке C на примере работы с СУБД SQLite ...... 105
6.1. соответствие типов данных ............................................ 106
6.2. передача аргументов между подпрограммами,
написанными на c и на Fortran ............................................... 109
6.3. соглашения об именовании и вызовах функций .............. 110
6.4. работа с производными типами ...................................... 113
6.5. создание интерфейса к суБд sQlite .............................. 116
Глава 7. Графика, GUI и Интернет ...................... 124
7.1. вывод результатов в графическом виде .......................... 125
7.2. Графические пользовательские интерфейсы (Gui) ......... 131
Стр.8
8
Оглавление
7.3. интернет ......................................................................... 139
7.4. работа с XMl-файлами ................................................... 143
Глава 8. Модульное тестирование ..................... 148
8.1. инструментальные средства тестирования ..................... 148
8.2. пример: обработка трёхдиагональной матрицы .............. 149
8.3. проектирование и реализация ........................................ 153
8.4. Заключительные замечания ............................................ 155
Глава 9. Просмотр и рецензирование исходного
кода ............................................................. 157
9.1. соблюдать определённость и однозначность ................. 158
используйте явные объявления переменных и констант ...............158
используйте предусловия ............................................................160
переменные, сохраняющие свои значения между вызовами ........161
видимость интерфейса к подпрограмме или функции ..................161
доступность переменных и подпрограмм .....................................161
вариант default в блоке select и ветвь else в блоке if ......................162
информативные сообщения об ошибках ......................................162
9.2. избегать излишней сложности и запутанности ............... 164
9.3. избегать «ловушек» ........................................................ 169
правильная обработка ошибок .....................................................169
сравнение вещественных чисел ...................................................169
смешанная точность ....................................................................171
неожиданные результаты при работе с отрицательными
числами ........................................................................................171
Автоматические массивы .............................................................172
ошибки могут возникать не только при работе с числами .............173
9.4. писать простой и понятный код ...................................... 173
Глава 10. Устойчивая к ошибкам реализация
нескольких простых алгоритмов ....................... 178
10.1. обзор существующих подобных методик ...................... 179
10.2. линейная интерполяция ................................................ 181
10.3. простые статистические методы и характеристики ....... 187
10.4. поиск корней уравнения ............................................... 195
Глава 11. Объектно-ориентированное
программирование ......................................... 209
11.1. расширение типов и процедуры, связанные с типами ... 209
передача объекта в другом аргументе ..........................................211
Стр.9
Оглавление
9
расширение до трёх измерений ...................................................212
пример: случайные перемещения в двух и в трёх измерениях ......215
определение динамического типа ................................................217
наблюдение за частицами ............................................................217
11.2. интерфейсы как контракты ........................................... 221
Аппроксимация множественного наследования ...........................225
11.3. использование прототипирования ................................ 226
пример: моделирование поведения рыб ......................................229
11.4. Абстрактные типы данных и обобщённое
программирование ............................................................... 232
11.5. изменение поведения типа данных ............................... 235
11.6. Шаблоны проектирования ............................................. 237
Шаблон проектирования Factory...................................................238
Шаблон проектирования наблюдатель .........................................241
Глава 12. Параллельное программирование ....... 245
12.1. простые числа .............................................................. 246
Библиотека openMP .....................................................................248
интерфейс MPi .............................................................................251
комассивы ...................................................................................255
12.2. декомпозиция по доменам ........................................... 259
openMP ........................................................................................261
MPi ...............................................................................................265
комассивы ...................................................................................266
12.3. другие методики параллельного программирования .... 268
12.4. резюме ......................................................................... 270
Приложение А. Инструментальные средства для
разработки и сопровождения ........................... 271
А.1. компиляторы .................................................................. 271
А.2. средства сборки программ ............................................ 272
А.3. интегрированные среды разработки .............................. 275
А.4. средства проверки во время выполнения ....................... 276
А.5. системы управления версиями ...................................... 278
А.6. документирование исходного кода ................................. 279
А.7. охват кода тестированием и статический анализ ............ 281
Приложение Б. Некоторые нюансы
использования Fortran ..................................... 285
Стр.10
10
Оглавление
Б.1. особенности стандарта .................................................. 285
вычисление логических выражений по короткой схеме ................285
сохранение значений локальных переменных ..............................286
ещё об инициализации .................................................................287
двойная точность и вычисление правой части выражений ............287
передача одного и того же аргумента дважды ..............................288
reAl(4) .........................................................................................290
признак конца файла (eoF), вывод на экран и т. п. ........................290
внешние и внутренние (встроенные) подпрограммы ....................291
несовпадения в интерфейсах: предполагаемая форма и явная
форма массивов ...........................................................................292
инициализация генератора случайных чисел ...............................293
открытие одного и того же файла дважды ....................................294
Б.2. Массивы ......................................................................... 294
использование автоматических и временных массивов может
привести к переполнению стека ...................................................294
Границы массивов с начальным индексом меньше 1 ....................296
объявления массивов: dimension(:) и dimension(*) .......................296
Б.3. динамические библиотеки ............................................. 297
открытие файла в программе и использование его в dll
и наоборот ....................................................................................297
выделение памяти в dll и освобождение этой памяти
в программе и наоборот ...............................................................298
Аргументы командной строки недоступны в dll ...........................298
подпрограммы или данные из основной программы,
используемые в dll .....................................................................298
Приложение В. Зарегистрированные товарные
знаки, упоминаемые в данной книге ..................... 300
Список литературы ......................................... 302
Предметный указатель .................................... 309
Стр.11