Компьютерное моделирование физических систем
Покупка
Тематика:
Общенаучное знание и теории
Издательство:
Интеллект
Год издания: 2011
Кол-во страниц: 352
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-91559-101-0
Артикул: 436820.01.01
Доступ онлайн
В корзину
В учебном пособии изложен материал по применению методов компьютерного моделирования для исследования физических систем. В каждой главе рассмотрена самостоятельная физическая задача в ней содержится введение в суть проблемы изложены рецепты и алгоритмы ее решения дано описание рабочей программы на языке Фортран 90 а также приведены примеры ее использования. Рассмотренные задачи относятся к областям статистической физики и физики конденсированных систем физики фракталов перколяционных и хаотических явлений. Для более глубокого усвоения материала к каждой главе прилагаются задачи и упражнения для самостоятельной работы.
Для студентов аспирантов физических физико-химических специальностей а также научных сотрудников.
Тематика:
ББК:
УДК:
ОКСО:
- 03.00.00: ФИЗИКА И АСТРОНОМИЯ
- ВО - Бакалавриат
- 01.03.03: Механика и математическое моделирование
- 02.03.03: Механика и математическое моделирование
- 03.03.01: Прикладные математика и физика
- 03.03.03: Механика и математическое моделирование
- ВО - Магистратура
- 01.04.03: Механика и математическое моделирование
- 03.04.01: Прикладные математика и физика
- 03.04.02: Физика
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Л. А. БУЛАВИН, Н.В. ВЫГОРНИЦКИЙ, Н.И. ЛЕБОВКА КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ ФИЗИЧЕСКИХ СИСТЕМ
Л.А. Булавин, Н.В. Выгорницкий, Н.И. Лебовка Компьютерное моделирование физических систем: Учебное пособие / Л.А. Булавин, Н.В. Выгорницкий, Н.И. Лебовка – Долгопрудный: Издательский Дом «Интеллект», 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 является величиной целого типа и занимает в оперативной памяти два байта. Для корректного описания длины переменных в программе нужно правильно оценить диапазон значений, которые она может принимать в ходе вычислений. Неправильная оценка и соответственно неправильное описание переменных может приводить иногда к получению «удивительных» результатов, или к «непонятной» работе программы. В
Доступ онлайн
В корзину