Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Компьютерное моделирование физических систем

Покупка
Артикул: 436820.01.01
Доступ онлайн
500 ₽
В корзину
В учебном пособии изложен материал по применению методов компьютерного моделирования для исследования физических систем. В каждой главе рассмотрена самостоятельная физическая задача в ней содержится введение в суть проблемы изложены рецепты и алгоритмы ее решения дано описание рабочей программы на языке Фортран 90 а также приведены примеры ее использования. Рассмотренные задачи относятся к областям статистической физики и физики конденсированных систем физики фракталов перколяционных и хаотических явлений. Для более глубокого усвоения материала к каждой главе прилагаются задачи и упражнения для самостоятельной работы. Для студентов аспирантов физических физико-химических специальностей а также научных сотрудников.
Булавин, Л. А. Компьютерное моделирование физических систем: Учебное пособие / Л.А. Булавин, Н.В. Выгорницкий, Н.И. Лебовка. - Долгопрудный: Интеллект, 2011. - 352 с. ISBN 978-5-91559-101-0, 1000 экз. - Текст : электронный. - URL: https://znanium.com/catalog/product/398942 (дата обращения: 19.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Л. А. БУЛАВИН, Н.В. ВЫГОРНИЦКИЙ, Н.И. ЛЕБОВКА

КОМПЬЮТЕРНОЕ 
МОДЕЛИРОВАНИЕ 
ФИЗИЧЕСКИХ СИСТЕМ

Л.А. Булавин, Н.В. Выгорницкий, Н.И. Лебовка
Компьютерное моделирование физических систем: Учебное
пособие / Л.А. Булавин, Н.В. Выгорницкий, Н.И. Лебовка –
Долгопрудный: Издательский Дом «Интеллект», 2011. – 352 с.
ISBN 9785915591010

В учебном пособии изложен материал по применению методов компьютерного моделирования для исследования физических систем. В каждой
главе рассмотрена самостоятельная физическая задача, в ней содержится
введение в суть проблемы, изложены рецепты и алгоритмы ее решения, дано
описание рабочей программы на языке Фортран 90, а также приведены
примеры ее использования. Рассмотренные задачи относятся к областям
статистической физики и физики конденсированных систем, физики фракталов, перколяционных и хаотических явлений. Для более глубокого усвоения материала, к каждой главе прилагаются задачи и упражнения для самостоятельной работы.
Для студентов, аспирантов и преподавателей физических, физикохимических специальностей, а также научных сотрудников.

                         © 2011, Л.А. Булавин, Н.В. Выгорницкий,
Н.И. Лебовка
                          © 2011, ООО «Издательский Дом
                                «Интеллект», оригиналмакет,
                                оформление

ISBN 9785915591010

ОГЛАВЛЕНИЕ

Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11

Глава 1. Использование языка программирования
Фортран 90 для компьютерного моделирования физических
систем . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13

1.1. Краткое введение в язык программирования Фортран . . . . . . . .
14
1.1.1. Первичные понятия . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
1.1.2. Основные типы величин, их представление и описание в
программе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
1.1.3. Программирование арифметических выражений . . . . . . . .
23
1.1.4. Операции отношения и логические выражения . . . . . . . . .
25
1.1.5. Операторы присваивания и управления . . . . . . . . . . . . . .
26
1.1.6. Особенности работы с массивами . . . . . . . . . . . . . . . . . .
30
1.1.7. Программные единицы . . . . . . . . . . . . . . . . . . . . . . . . .
33
1.1.8. Операторы ввода-вывода и работа с файлами . . . . . . . . . .
38
1.1.9. Генерация случайных чисел . . . . . . . . . . . . . . . . . . . . . .
44
1.1.10.Использование графики. . . . . . . . . . . . . . . . . . . . . . . . .
49
1.2. Примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
1.2.1. Табуляция и построение графика функции . . . . . . . . . . . .
53
1.2.2. Построение спирали Улама . . . . . . . . . . . . . . . . . . . . . .
55
1.2.3. Вычисление многомерных интегралов и числа π методом
Монте-Карло . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
1.2.4. Построение эквипотенциальных линий для распределения
электрических зарядов . . . . . . . . . . . . . . . . . . . . . . . . . .
61
1.2.5. Аполлониевы упаковки . . . . . . . . . . . . . . . . . . . . . . . . .
63
1.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
67
1.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69

Глава 2. Задача Ферми–Паста–Улама . . . . . . . . . . . . . . . . .
70

2.1. Колебания в цепочке связанных осцилляторов . . . . . . . . . . . . .
70

Оглавление

2.1.1. Линейная цепочка . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
2.1.2. Нелинейная цепочка . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
2.2. Алгоритм и описание работы программы . . . . . . . . . . . . . . . . .
73
2.2.1. Алгоритм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73
2.2.2. Описание работы программы . . . . . . . . . . . . . . . . . . . . .
74
2.2.3. Пример работы программы . . . . . . . . . . . . . . . . . . . . . .
79
2.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
80
2.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81

Глава 3. Солитоны и уравнение Кортевега—де Вриза . . . .
83

3.1. Развитие представлений о солитоне. . . . . . . . . . . . . . . . . . . . .
83
3.1.1. Распространение уединенной волны в узком канале . . . . . .
83
3.1.2. Уравнение Кортевега—де Вриза . . . . . . . . . . . . . . . . . . .
84
3.1.3. Роль нелинейного и дисперсионного вкладов . . . . . . . . . .
84
3.1.4. Точное солитонное решение . . . . . . . . . . . . . . . . . . . . . .
85
3.2. Алгоритм и описание работы программы . . . . . . . . . . . . . . . . .
86
3.2.1. Алгоритм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
3.2.2. Описание работы программы . . . . . . . . . . . . . . . . . . . . .
87
3.2.3. Пример работы программы . . . . . . . . . . . . . . . . . . . . . .
89
3.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
90
3.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91

Глава 4. Логистическое отображение и показатель
Ляпунова . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92

4.1. Хаотическое поведение . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92
4.1.1. Логистическое отображение . . . . . . . . . . . . . . . . . . . . . .
92
4.1.2. Показатель Ляпунова . . . . . . . . . . . . . . . . . . . . . . . . . .
95
4.2. Описание работы программ . . . . . . . . . . . . . . . . . . . . . . . . . .
97
4.2.1. Бифуркационная диаграмма и поведение показателя Ляпунова
97
4.2.2. Пример работы программы . . . . . . . . . . . . . . . . . . . . . .
98
4.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
98
4.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
100

Глава 5. Множества Жюлиа и Мандельброта . . . . . . . . . . .
101

5.1. Нелинейные отображения в комплексных координатах . . . . . . . .
101
5.1.1. Множество Жюлиа . . . . . . . . . . . . . . . . . . . . . . . . . . .
101
5.1.2. Множество Мандельброта . . . . . . . . . . . . . . . . . . . . . . .
105
5.2. Алгоритмы и описание работы программ . . . . . . . . . . . . . . . . .
107
5.2.1. Алгоритм для построения множества Жюлиа . . . . . . . . . .
107
5.2.2. Алгоритм построения множества Мандельброта . . . . . . . .
107
5.2.3. Описание работы программ . . . . . . . . . . . . . . . . . . . . . .
107
5.2.4. Примеры работы программ . . . . . . . . . . . . . . . . . . . . . .
109
5.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
110
5.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
110

Оглавление
5

Глава 6. Детерминистические фракталы . . . . . . . . . . . . . . .
112

6.1. Примеры детерминистических фракталов . . . . . . . . . . . . . . . . .
112
6.1.1. Кривые Коха и Мандельброта–Гивена . . . . . . . . . . . . . . .
113
6.1.2. Треугольник и ковер Серпинского. . . . . . . . . . . . . . . . . .
114
6.1.3. Пирамида Серпинского и губка Менгера . . . . . . . . . . . . .
115
6.1.4. Канторовская пыль . . . . . . . . . . . . . . . . . . . . . . . . . . . .
116
6.2. Алгоритмы и описание программ . . . . . . . . . . . . . . . . . . . . . .
116
6.2.1. Рекурсивный алгоритм . . . . . . . . . . . . . . . . . . . . . . . . .
117
6.2.2. Алгоритм на основе систем итерируемых функций (IFS) . .
119
6.2.3. Описание работы программ . . . . . . . . . . . . . . . . . . . . . .
121
6.2.4. Примеры работы программ . . . . . . . . . . . . . . . . . . . . . .
125
6.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
125
6.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
126

Глава 7. Рост бактериальных колоний: Модель Идена . . . .
128

7.1. Типы моделей стохастического роста . . . . . . . . . . . . . . . . . . . .
128
7.1.1. Базисная модель Идена . . . . . . . . . . . . . . . . . . . . . . . . .
128
7.1.2. Модель с подавлением шума . . . . . . . . . . . . . . . . . . . . .
129
7.1.3. Нерешеточные модели Идена . . . . . . . . . . . . . . . . . . . . .
130
7.1.4. Структура кластеров Идена . . . . . . . . . . . . . . . . . . . . . .
130
7.1.5. Перколяционная модель . . . . . . . . . . . . . . . . . . . . . . . .
131
7.1.6. Модель экранированного роста . . . . . . . . . . . . . . . . . . .
132
7.1.7. Модель случайного последовательного роста . . . . . . . . . .
132
7.1.8. Модель «летающей бабочки» . . . . . . . . . . . . . . . . . . . . .
132
7.2. Алгоритм для базисной модели Идена и описание работы программы
133
7.2.1. Алгоритм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
133
7.2.2. Описание работы программы . . . . . . . . . . . . . . . . . . . . .
133
7.2.3. Пример работы программы . . . . . . . . . . . . . . . . . . . . . .
135
7.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
136
7.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
136

Глава 8. Агрегация, контролируемая диффузией . . . . . . . .
138

8.1. Варианты модели агрегации, контролируемой диффузией . . . . . .
138
8.1.1. Базисный вариант модели DLA . . . . . . . . . . . . . . . . . . .
138
8.1.2. Модель DLA с подавлением шума . . . . . . . . . . . . . . . . .
141
8.1.3. Рост на множественных центрах . . . . . . . . . . . . . . . . . .
142
8.1.4. Фрактальная размерность . . . . . . . . . . . . . . . . . . . . . . .
142
8.2. Алгоритмы и описание работы программ . . . . . . . . . . . . . . . . .
144
8.2.1. Алгоритм для базисного варианта . . . . . . . . . . . . . . . . . .
144
8.2.2. Алгоритм для ускоренного варианта . . . . . . . . . . . . . . . .
145
8.2.3. Описание работы программы для базисного варианта . . . .
147

.

Оглавление

8.2.4. Описание работы программы для ускоренного варианта . . .
149
8.2.5. Примеры работы программ . . . . . . . . . . . . . . . . . . . . . .
157
8.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
157
8.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
159

Глава 9. Имитация роста шероховатых поверхностей. . . . .
160

9.1. Структура и свойства шероховатых поверхностей . . . . . . . . . . .
160
9.1.1. Характеристики фронта роста поверхности . . . . . . . . . . . .
161
9.1.2. Концепция пространственно-временного скейлинга . . . . . .
162
9.1.3. Основные типы компьютерных моделей . . . . . . . . . . . . . .
164
9.1.3.1. Случайное осаждение (RD) . . . . . . . . . . . . . . . . .
164
9.1.3.2. Осаждение с поверхностной релаксацией (RDR). . .
166
9.1.3.3. Баллистическое осаждение (BD) . . . . . . . . . . . . .
166
9.1.3.4. Смешанные модели . . . . . . . . . . . . . . . . . . . . . .
168
9.2. Алгоритмы и описание работы программ . . . . . . . . . . . . . . . . .
169
9.2.1. Описание алгоритмов для моделей осаждения RD, RDR и BD
169
9.2.2. Описание работы программ для моделей осаждения RD, RDR
и BD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
170
9.2.2.1. Модель RD . . . . . . . . . . . . . . . . . . . . . . . . . . . .
172
9.2.2.2. Модель RDR . . . . . . . . . . . . . . . . . . . . . . . . . . .
172
9.2.2.3. Модель BD . . . . . . . . . . . . . . . . . . . . . . . . . . . .
173
9.2.3. Примеры работы программ . . . . . . . . . . . . . . . . . . . . . .
173
9.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
174
9.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
176

Глава 10. Случайная последовательная адсорбция . . . . . . .
178

10.1. Необратимая адсорбция и джамминг . . . . . . . . . . . . . . . . . . . .
178
10.1.1. Определение базисной модели RSA . . . . . . . . . . . . . . . .
178
10.1.2. Концентрация джамминга для разных вариантов модели RSA
180
10.1.3. Модель RSA для объектов анизотропной формы . . . . . . .
181
10.1.4. Влияние формы частиц и полидисперсности . . . . . . . . . .
183
10.1.5. Кинетика осаждения для решеточных и непрерывных моделей
185
10.2. Алгоритм и описание работы программы . . . . . . . . . . . . . . . . .
186
10.2.1. Алгоритм RSA для одномерной модели. . . . . . . . . . . . . .
186
10.2.2. Быстрый алгоритм RSA для двумерной квадратной решетки
186
10.2.3. Описание
работы
программы
для
определения
порога
насыщения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
187
10.2.4. Описание работы программы для моделирования кинетики
насыщения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
189
10.2.4.1. Одномерная модель RSA . . . . . . . . . . . . . . . . .
189
10.2.4.2. Двумерная модель RSA . . . . . . . . . . . . . . . . . .
191
10.2.5. Примеры работы программ . . . . . . . . . . . . . . . . . . . . . .
193
10.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
195
10.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
195

Оглавление
7

Глава 11. Аномальная диффузия и диффузия в
неупорядоченных средах . . . . . . . . . . . . . . . . . . . . . . . . . . . .
198

11.1. Модели диффузии в различных конденсированных средах . . . . .
198
11.1.1. Случайные блуждания и движение броуновской частицы .
198
11.1.2. Классификация типов диффузионного движения . . . . . . .
199
11.1.3. Модель «прыжков Леви» . . . . . . . . . . . . . . . . . . . . . . .
199
11.1.4. Модель диффузии с памятью . . . . . . . . . . . . . . . . . . . .
200
11.1.5. Модель Эдвардса . . . . . . . . . . . . . . . . . . . . . . . . . . . .
201
11.1.6. Модель решеточного газа . . . . . . . . . . . . . . . . . . . . . . .
201
11.1.7. Диффузия при наличии дрейфа частицы. . . . . . . . . . . . .
201
11.1.8. Диффузия в неупорядоченных средах и модель де Жена . .
202
11.1.9. Диффузия на фрактальных объектах
. . . . . . . . . . . . . .
203
11.2. Алгоритм и описание работы программы для изучения диффузии
на перколяционном кластере . . . . . . . . . . . . . . . . . . . . . . . . . .
206
11.2.1. Алгоритм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
206
11.2.2. Описание работы программы . . . . . . . . . . . . . . . . . . . .
206
11.2.3. Пример работы программы . . . . . . . . . . . . . . . . . . . . . .
214
11.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
215
11.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
217

Глава 12. Алгоритмы кластерного анализа . . . . . . . . . . . . .
219

12.1. Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
219
12.2. Кластерный анализ методом прожига . . . . . . . . . . . . . . . . . . .
221
12.2.1. Алгоритм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
221
12.2.2. Программа кластерного анализа методом прожига . . . . . .
222
12.2.3. Пример работы программы кластерного анализа методом
прожига . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
225
12.3. Кластерный анализ с использованием метода Хошена–Копельмана
226
12.3.1. Решеточный вариант . . . . . . . . . . . . . . . . . . . . . . . . . .
226
12.3.1.1. Алгоритм. . . . . . . . . . . . . . . . . . . . . . . . . . . .
226
12.3.1.2. Описание программы . . . . . . . . . . . . . . . . . . . .
227
12.3.2. Нерешеточный вариант . . . . . . . . . . . . . . . . . . . . . . . .
229
12.3.2.1. Формирования списка связности . . . . . . . . . . . .
229
12.3.2.2. Алгоритм Хошена–Копельмана с использованием
списка связности . . . . . . . . . . . . . . . . . . . . . . .
230
12.3.2.3. Описание программы, основанной на использовании списка связности . . . . . . . . . . . . . . . . . . . .
231
12.4. Вспомогательные программы . . . . . . . . . . . . . . . . . . . . . . . . .
235
12.4.1. Случайное заполнение плоскости . . . . . . . . . . . . . . . . .
235
12.4.1.1. Узлы квадратной решетки . . . . . . . . . . . . . . . .
235
12.4.1.2. Перекрывающиеся диски . . . . . . . . . . . . . . . . .
235

Оглавление

12.4.2. Формирование списка связности . . . . . . . . . . . . . . . . . .
236
12.4.2.1. Узлы квадратной решетки . . . . . . . . . . . . . . . .
236
12.4.2.2. Перекрывающиеся диски . . . . . . . . . . . . . . . . .
238
12.4.3. Визуализация кластеров . . . . . . . . . . . . . . . . . . . . . . . .
240
12.5. Примеры работы программ для кластерного анализа с использованием метода Хошена–Копельмана . . . . . . . . . . . . . . . . . . . . . .
240
12.6. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
242
12.7. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
242

Глава 13. Метод Монте-Карло для анализа модели Изинга:
Алгоритм Метрополиса и кластерные алгоритмы . . . . . . . . .
244

13.1. Фазовые переходы в магнитных материалах и модель Изинга . . .
244
13.1.1. Определение Модели Изинга на квадратной решетке . . . .
245
13.1.2. Точное решения Модели Изинга на квадратной решетке . .
246
13.1.3. Простейшее обобщение модели Изинга: модель Поттса . . .
247
13.1.4. Конечномерный анализ для модели Изинга и метод кумулянт Биндера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
248
13.1.5. Алгоритм Метрополиса для решения модели Изинга . . . .
248
13.1.6. Замедление процедуры Метрополиса вблизи критической
точки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
251
13.1.7. Преодоление проблемы критического замедления с помощью
кластерных алгоритмов . . . . . . . . . . . . . . . . . . . . . . . .
251
13.2. Алгоритмы и описание работы программы . . . . . . . . . . . . . . . .
253
13.2.1. Алгоритм Метрополиса . . . . . . . . . . . . . . . . . . . . . . . .
253
13.2.2. Алгоритм Свендсена–Ванга . . . . . . . . . . . . . . . . . . . . .
253
13.2.3. Алгоритм Вольфа . . . . . . . . . . . . . . . . . . . . . . . . . . . .
254
13.2.4. Описание работы программы . . . . . . . . . . . . . . . . . . . .
255
13.2.4.1. Процедура Метрополиса . . . . . . . . . . . . . . . . .
263
13.2.4.2. Процедура Свендсена–Ванга . . . . . . . . . . . . . . .
264
13.2.4.3. Процедура Вольфа . . . . . . . . . . . . . . . . . . . . .
266
13.2.5. Пример работы программы . . . . . . . . . . . . . . . . . . . . . .
267
13.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
268
13.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
269

Глава 14. Задача коммивояжера . . . . . . . . . . . . . . . . . . . . .
272

14.1. Метод модельного отжига и задача коммивояжера . . . . . . . . . .
272
14.1.1. Метод модельного отжига . . . . . . . . . . . . . . . . . . . . . .
273
14.1.1.1. Вероятность перехода . . . . . . . . . . . . . . . . . . .
273
14.1.1.2. Уменьшение температуры со временем . . . . . . . .
274
14.1.2. Задача коммивояжера . . . . . . . . . . . . . . . . . . . . . . . . .
275

Оглавление
9

14.2. Алгоритм для решения задачи коммивояжера и описание работы
программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
277
14.2.1. Алгоритм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
277
14.2.2. Описание работы программы . . . . . . . . . . . . . . . . . . . .
278
14.2.3. Примеры работы программы . . . . . . . . . . . . . . . . . . . . .
282
14.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
283
14.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
285

Глава 15. Вычисление электропроводности
композиционных систем . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
287

15.1. Методы расчета электропроводности композиционных систем . . .
287
15.2. Алгоритм Франка–Лобба для расчета электропроводности и описание работы программы . . . . . . . . . . . . . . . . . . . . . . . . . . . .
289
15.2.1. Алгоритм Франка–Лобба . . . . . . . . . . . . . . . . . . . . . . .
289
15.2.1.1. Элементарные преобразования . . . . . . . . . . . . .
289
15.2.1.2. Преобразование звезда–треугольник и их обобщение
290
15.2.1.3. «Сворачивание» квадратной сетки сопротивлений
291
15.2.1.4. Применение метода Франка–Лобба для более сложных плоских решеток . . . . . . . . . . . . . . . . . . . .
293
15.2.2. Описание работы программы . . . . . . . . . . . . . . . . . . . .
295
15.2.3. Примеры работы программы . . . . . . . . . . . . . . . . . . . . .
301
15.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
302
15.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
304

Глава 16. Электрический пробой . . . . . . . . . . . . . . . . . . . . .
306

16.1. Простейшие модели электрического пробоя . . . . . . . . . . . . . . .
306
16.1.1. Модели типа резистор–изолятор (модель RI) и резистор–
сверхпроводник (модель RS) . . . . . . . . . . . . . . . . . . . . .
307
16.1.2. Стохастические и детерминистические модели . . . . . . . . .
308
16.1.2.1. Стохастическая модель (модель NPW) . . . . . . . .
309
16.1.2.2. Детерминистическая модель (модель Такаясу) . . .
310
16.1.3. Термоактивационная модель
. . . . . . . . . . . . . . . . . . . .
311
16.2. Алгоритмы и описание работы программ . . . . . . . . . . . . . . . . .
312
16.2.1. Стохастическая модель NPW . . . . . . . . . . . . . . . . . . . .
312
16.2.2. Обобщенная модель Такаясу . . . . . . . . . . . . . . . . . . . . .
313
16.2.3. Термоактивационная модель . . . . . . . . . . . . . . . . . . . . .
314
16.2.4. Описание работы программ . . . . . . . . . . . . . . . . . . . . .
314
16.2.4.1. Стохастическая модель NPW . . . . . . . . . . . . . .
314
16.2.4.2. Обобщенная модель Такаясу. . . . . . . . . . . . . . .
320
16.2.5. Примеры работы программ . . . . . . . . . . . . . . . . . . . . . .
324
16.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
325
16.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
326

Оглавление

Глава 17. Самоорганизованная критичность . . . . . . . . . . . .
328

17.1. Модели самоорганизованной критичности . . . . . . . . . . . . . . . .
328
17.1.1. Обвал кучи с песком . . . . . . . . . . . . . . . . . . . . . . . . . .
329
17.1.2. Землетрясения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
333
17.1.3. Горение лесных массивов . . . . . . . . . . . . . . . . . . . . . . .
335
17.1.4. Игра «Жизнь» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
339
17.2. Алгоритмы и описание работы программ . . . . . . . . . . . . . . . . .
340
17.2.1. Обвал кучи с песком . . . . . . . . . . . . . . . . . . . . . . . . . .
340
17.2.2. Лесной пожар. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
341
17.2.3. Описание работы программ . . . . . . . . . . . . . . . . . . . . .
341
17.2.3.1. Обвал кучи с песком . . . . . . . . . . . . . . . . . . . .
341
17.2.3.2. Лесной пожар . . . . . . . . . . . . . . . . . . . . . . . .
343
17.2.4. Примеры работы программ . . . . . . . . . . . . . . . . . . . . . .
345
17.3. Задачи для самостоятельной работы . . . . . . . . . . . . . . . . . . . .
347
17.4. Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
347

ПРЕДИСЛОВИЕ

Компьютерное моделирование является неотъемлемой частью современной физики. Моделирование физической природы или
«численный эксперимент» в настоящее время широко используется как
теоретиками, так и экспериментаторами. Компьютерные методы находят все более широкое применение при моделировании свойств сложных физических систем, а их внедрение позволило получить совершенно новые результаты и рассмотреть классы задач ранее традиционно относимых к «нерешаемым». Значительные успехи получены в таких фундаментальных областях как статистическая физика и физика конденсированных систем, физика твердого тела и квантовая механика, физика
фракталов и хаотических явлений, финансовая физика. Для решения
таких задач были развиты специфические рецепты, алгоритмы, модели
клеточных автоматов, что позволило значительно ускорить получение
конечных результатов. Однако, по нашему мнению, в традиционных
изданиях, посвященных применению вычислительных и компьютерных
методов, многие из таких алгоритмов анализируются не достаточно
детально.
Предлагаемая вниманию читателя книга является фактически учебником для студентов-физиков, который основан на многолетнем опыте
преподавания курса «Моделирование физических систем» в ряде ведущих украинских вузов. Книга состоит из 17 глав и посвящена анализу
некоторых компьютерных рецептов, используемых при моделировании
физических систем. В качестве основного языка программирования выбран язык Фортран 90, который, как известно, хорошо адаптирован для
решения физических задач, имеет хорошую библиотечную поддержку
в физических приложениях и широко используется в настоящее время.
Каждая глава книги представляет собой отдельную сформулированную вычислительную задачу и организована по сходному принципу:
введение, теоретическое изложение материала на уровне справочного
пособия, алгоритм решения, описания рабочей программы и примеры

Предисловие

ее применения. Приведенные в книге программные листинги следует
рассматривать как текст, предназначенный для чтения и детального
анализа. Полные листинги протестированных программ можно найти
на сайте кафедры молекулярной физики Киевского национального университет имени Тараса Шевченко (http:/molphys.univ.kiev.ua в разделе публикации). Для понимания приведенных в книге кодов программ
обязательным является прочтение первой главы, где кратко изложены
основы программирования на языке Фортран 90. Читатели, для которых этот язык хорошо знаком, могут эту главу пропустить. Все остальные главы книги практически автономны, и их материал может быть
использован независимым образом без прочтения остального материала. Все главы также снабжены дополнительными задачами, многие
из которых сформулированы на основании статей, опубликованных в
научных журналах физического профиля.
Основное внимание уделено дискретным математическим моделям
сложных и многочастичных систем, которые широко применяются в
термодинамике, статистической физике и смежных областях. В частности, в книге рассмотрены некоторые алгоритмы, широко используемые в качестве вспомогательных инструментов при анализе структуры многочастичных систем. Приведены примеры применения рекурсивных алгоритмов для построения фракталов. Описаны программы
для построения множеств Мандельброта и Жюлиа. Методы МонтеКарло проиллюстрированы на примере рассмотрения модели Изинга
и решения оптимизационной задачи коммивояжера. Проанализированы
классические задачи о нелинейных связанных осцилляторах (Ферми–
Улама–Паста), солитонном решении уравнения Кортевега—де Вриза и
хаотическом поведении нелинейных систем. Рассмотрены алгоритмы,
используемые для анализа связности кластеров, роста кластерных, перколяционных, дендритных систем и бактериальных колоний. Рассмотрены также основные алгоритмы для имитации явлений электрического
пробоя, роста поверхностей, диффузии в неупорядоченных и фрактальных средах, а также явлений самоорганизованной критичности.
В конце каждой главы приведен список литературы, который ни в
коей мере не претендует на полноту, а используется только для ссылок
на обсуждаемые модели. Книга предназначена для студентов и аспирантов физических, физико-химических специальностей, а также научных сотрудников. По стилю изложения эта книга является скорее
учебником, и ее материал может быть использован в преподавательских
курсах посвященных применению компьютерного моделирования для
решения физических задач.

Г Л А В А
1

ИСПОЛЬЗОВАНИЕ ЯЗЫКА
ПРОГРАММИРОВАНИЯ ФОРТРАН 90
ДЛЯ КОМПЬЮТЕРНОГО МОДЕЛИРОВАНИЯ
ФИЗИЧЕСКИХ СИСТЕМ

На протяжении почти 60 лет язык программирования Фортран остается основным языком программирования, используемым в
научных вычислениях. Фортран был создан специалистами фирмы IBM
в начале 50-x XX века и его название происходит от слов FORmula и
TRANslation. Само название языка означает, что Фортран был разработан специально для решения численных задач физики и математики.
Высокая эффективность проведения численных вычислений оказывает
содействие тому, что этот язык программирования по-прежнему используют большинство физиков всего мира. С момента своего создания
Фортран претерпел ряд существенных изменений. На протяжении истории своего развития было принято несколько стандартов этого языка:
Фортран 66, Фортран 77, Фортран 90, Фортран 95, Фортран 2003,
Фортран 2008. Фортран считается одним из наиболее удачных языков
программирования в применении для решения вычислительных задач.
Современный Фортран содержит также некоторые элементы объектноориентированного программирования, и включает много средств, которые делают его идеальным для проведения вычислений на многопроцессорных компьютерах.
В этой главе изложены только наиболее важные возможности современного Фортрана, которые можно использовать для иллюстрации
алгоритмов компьютерного моделирования в физике. Более детальное
изложение возможностей Фортрана 90 можно найти в существующих
учебных пособиях [1, 2], или полном описании стандарта [3]. Излагаемый в этой главе материал был отобран таким образом, чтобы познакомить читателя только с теми элементами Фортрана 90, которые
необходимы для понимания работы программ, излагаемых в этой книге.
Большая часть излагаемого материала справедлива для любой реализации Фортран 90. Исключение могут составлять генераторы случайных
чисел и графические операторы, которые излагаются для реализации
Фортран 90 Microsoft Fortran PowerStation 4.0.

Глава 1. Фортран 90 для моделирования физических систем

1.1.
КРАТКОЕ ВВЕДЕНИЕ В ЯЗЫК ПРОГРАММИРОВАНИЯ
ФОРТРАН

1.1.1.
Первичные понятия
Первичными элементами Фортрана являются символы, которые могут быть разделены на основные и дополнительные. Основные
символы — включают 52 символа латинского алфавита, десять символов цифр, а также спецсимволы. Основные символы языка используются для построения всех конструкций языка. Набор дополнительных
символов не фиксирован и используется для построения символьных
констант, либо снабжения программы комментариями. В табл. 1.1 приведен набор специальных символов.

Таблица 1.1. Специальные символы Фортран

Символ
Название
Символ
Название

␣
Пробел
:
Двоеточие

=
Равно
!
Восклицательный знак

+
Плюс
;
Точка с запятой

−
Минус
&
Амперсенд

*
Звездочка
%
Процент

/
Слэш
<
Меньше

(
Левая скобка
>
Больше

)
Правая скобка
?
Вопросительный знак

,
Запятая
"
Кавычки

.
Точка
$
Денежный знак

′
Апостроф

Последовательности символов языка Фортран образуют слова, которые могут обозначать числа, имена величин, некоторые действия и
т. д. Различают два типа слов: служебные слова и слова пользователя.
Служебные слова имеют раз и навсегда заданный смысл. Слова пользователя создаются разработчиком программы по его усмотрению, но
с учетом правил принятых в языке Фортран. Слова пользователя не
должны совпадать со служебными словами по начертанию.
Основные конструкции языка являются операторы, которые могут
быть выполняемые и невыполняемы. Выполняемые операторы служат
для указания действий и порядка их выполнения, а невыполняемые
операторы используются для указания типа и структуры величин, для
задания информации о распределении памяти и т. д.
В простейшем случае программа может включать только основной
модуль. В более сложных случаях программа может состоять из модулей, основной программы и подпрограмм. Выполнение программы всегда начинается с основной программы. Подпрограмма подключается к

1.1. Краткое введение в язык программирования Фортран
15

работе основной программы путем вызова ее с основной программы,
либо вызова ее из других подпрограмм.
Приведем пример программы, которая выполняет сложение двух
чисел и печатает результат на экран дисплея:

1
program ex01
2
integer a, b
!определяем a, b и c
3
integer c
!как переменные целого типа
4
5
a=10; b=-2
!присваиваем переменным a и b значения
6
7
c=a+b
!присваиваем с результат сложения
8
! переменных a и b
9
write(*,*) c
!печатаем на экран дисплея
10
!значение переменной c, равной 8
11
end program ex01
12

Фактически этот пример иллюстрирует ряд определений, о которых
говорилось выше. Проанализируем их более детально. Для удобства
анализа каждая строка кода программы была пронумерована. Данная
программа начинается со служебного слова program, а заканчивается служебными словами end program. Служебное слово program
определяет программную единицу как основную программу. В данном
случае программа состоит всего лишь с одной программной единицы —
основной программы. Слово пользователя ex01 является названием
основной программы и присутствует в начале и в конце программы.
В начале программы все величины, которые используются программой,
должны быть описаны. Служебное слово integer является примером
невыполнимого оператора, который используется для описания типа величин a, b, c. Слова пользователя a, b, c являются также именами переменных. В программах операторы описания могут использоваться как
для описания типа отдельной переменной, так и списка переменных,
как это показано в этом примере. Для разделения переменных в списке
используется спецсимвол запятая. Для комментирования кода программы используется спецсимвол восклицательного знака, который может
находиться в любой позиции программной строки и всегда стоит в начале любого комментария. Пятая строка кода содержит примеры двух выполнимых операторов присваивания, в которых спецсимвол = используется для обозначения операции присваивания. Два и более оператора в
одной строке разделяются друг от друга точкой с запятой. С помощью
этих операторов присваивания величины a и b принимают значения 10
и -2 соответственно. Более сложный оператор присваивания содержится в строке кода с номером семь. В данном случае переменной c присва
Глава 1. Фортран 90 для моделирования физических систем

ивается результат вычисления арифметического выражения a+b. Девятая строка кода содержит оператора вывода write(*,*), который осуществляет печать на экран значения переменной c. Приведенный пример также иллюстрирует наличие пустых строк в коде программы, которые удобно использовать для повышения читабельности программы.
В рассмотренном выше примере использовались простые слова для
имен переменных. Но в общем случае имена переменных могут включать
символы цифр и символ подчеркивания. Например, имена переменной
a_1, b2 является вполне корректным именами переменных. Следует
отметить, что символ подчеркивания не может быть первым в имени
переменной. Компилятор Фортрана не различает больших и малых символов в именах переменных и операторов. Например, операторы вывода
WRITE(*,*) и write(*,*) полностью эквивалентны. Использование
больших или малых букв при кодировании программы скорее зависит
от «вкуса» программиста. В приведенных в этой книге программах
для кодирования операторов используются малые символы, а для имен
переменных, которые обозначают параметры модели большие символы.
Программы для компилятора Фортрана могут быть написаны с использованием фиксированного или свободного формата кодирования. Все
программы, представленные в этой книге, написаны с использованием
свободного формата кодирования, однако сегодня еще можно встретить
много библиотечных функций и процедур, использующих фиксированный формат кодирования, который является стандартом Фортрана 77.
Фиксированный формат кодирования накладывает ряд ограничений на
представление кода программы. Кратко опишем эти ограничения:
• длина программной строки не может превышать 72 символа;
• первый символ программной строки используется для комментирования кода программы, в качестве которых используют любой из
символов: *, C, c.
• позиции с 1-й по 5-ю используются для обозначения меток. После
метки не должно быть пустой программной строки;
• если 6-я позиция содержит любой символ, то это указывает на
продолжение предыдущей программной строки кода;
• операторы кода могут содержаться с 7 по 72 позицию строки;
• в программе не допускается наличие пустых строк.
Файлы с программами, которые написаны в фиксированном формате, обычно имеют, расширения *.for, или *.f. Например, myprog.f.
Свободный формат кодирования снимает ряд предыдущих ограничений на код программы, но не все:
• длина программной строки не может превышать 132 символа;
• для продолжения длинной строки используют спецсимвол &, который ставится в конце строки кода.

1.1. Краткое введение в язык программирования Фортран
17

Файлы, которые написаны в свободном формате кодирования, обычно, имеют расширение *.f90. Например, my.f90.
Отметим, что в обоих стандартах кодирования меткой является последовательность цифровых символов, которая не превышает, пяти знаков. В свободном формате кодирования позиция метки не ограничена
первыми пяти позициями.

1.1.2.
Основные типы величин, их представление
и описание в программе
В программах Фортрана могут использоваться величины
следующих типов: целого, вещественного, комплексного, логического и
символьного. Значениями целых и вещественных величин могут быть
положительные, отрицательные числа соответствующих типов. Комплексные величины определяются парой чисел. Первое из них означает
действительную часть комплексной величины, а второе — коэффициент
при мнимой единице i. Логические величины могут принимать только
два значения: истина или ложь. Величины символьного типа определяются последовательностью символов основного и дополнительного
наборов.
Величины целого, вещественного и комплексного типа могут использоваться в виде констант, простых переменных, или переменных с
индексами (массивов). Данные типы величин могут также иметь стандартную и нестандартную длину. Длина величины определяет количество байт, необходимых для представления ее в оперативной памяти
компьютера и соответственно диапазон допустимых значений, которые
она может принимать.
Константы используются для представления постоянных значений
величин, а также в арифметических выражениях. В табл. 1.2 приведены
примеры представления констант разных типов.
В приведенных примерах для представления констант стандартной
длины используется экспонента e, а нестандартной d. Величины стандартной длины занимают четыре байта оперативной памяти, а нестандартной восемь.
Переменная — это величина, которая в программе может принимать
различные значения. Для описания типа переменных стандартной длины в программах используются служебные слова:

integer
(целые),
real
(вещественные),
complex
(комплексные),
character (символьные),
logical
(логические).

Глава 1. Фортран 90 для моделирования физических систем

Таблица 1.2. Примеры представления констант разных типов в Фортран 90

Тип константы
Примеры

Целый
0 (означает число ноль),
-15,
133,
B’110010’, O’62’, Z’32’ (означают число 50, представленное в системах исчисления с основанием: 2, 8, 16
соответственно)

Вещественный
0.
(означает число ноль),
-.123
(означает число −0,123),
311.
(означает число 311,0),
3.52e4 (означает число 3,52 · 104),
3.52d4 (означает число 3,52 · 104),
-.1e-3 (означает число −0,1 · 10−3)

Комплексный
(-2.,3.)
(означает число −2,0 + 3,0i),
(.1e5,-3.e12) (означает число 104 − 3 · 1012i)
(1.d5,7.d-2)
(означает число 105 + 0,07i)

Логический
.true., .false.

Символьный
’32’, ’book’, ’x=’, ’a+b=’

Переменные целого, вещественного и логического типа стандартной
длины занимают в памяти четыре байта, а величины комплексного
типа используют вдвое большее количество байт. Переменные символьного типа стандартной длины занимают один байт. Для описания
переменных нестандартной длины, приведенные выше служебные слова, используются вместе со скобками. В этом случае числа в скобках
указывают на количество байт, которые используются для размещения
переменной в оперативной памяти. Альтернативный способ описания
переменных, оставшийся от стандарта Фортран 77, заключается в использовании спецсимвола звездочка. Например, два следующих описания переменной

integer(2) my
integer*2
my

полностью эквивалентны и означают, что переменная с именем my является величиной целого типа и занимает в оперативной памяти два байта.
Для корректного описания длины переменных в программе нужно правильно оценить диапазон значений, которые она может принимать в ходе вычислений. Неправильная оценка и соответственно неправильное описание переменных может приводить иногда к получению
«удивительных» результатов, или к «непонятной» работе программы. В

Доступ онлайн
500 ₽
В корзину