Одкровення Святого Іоанна Богослова, гл. 8, ст. 10,11
Хтось влучно зазначив, що розмова про погоду стає цікавим лише при перших ознаках кінця світу. Сьогодні вчені і політики обговорюють проблеми погоди на глобальних форумах, та й прості люди починають потихеньку цікавитися погодою, причому не тільки на найближчі вихідні, а й взагалі ... Атмосфера - величезна, складна, розподілена, динамічна система. Передбачати її поведінку надзвичайно важко, часто просто неможливо. Дивлячись на висять в небесній блакиті хитромудрі хмарні структури, ми не завжди замислюємося про те, наскільки масштабні і драматичні процеси відбуваються там, у височині. Зовсім інше враження залишає прискорена зйомка хмарного неба. Картинка еволюції рояться хмарних мас мимоволі наводить на роздуми про природу часу і сенс земного існування. Схожі, але більш тривожні думки навівають кадри, що зображують розповзання смогу над великими мегаполісами або, гірше того, поступової дифузії ядерного гриба ... Всі ми пам'ятаємо старі чорно-білі навчальні фільми, що розповідають про формування зон зараження після атомного вибуху. Вони класифікуються за ступенем небезпеки. Поблизу епіцентру розташовується "мертва" зона суцільного інтенсивного зараження. Далі, в залежності від напрямку вітру, зони розподіляються у вигляді вкладених один в одного еліпсоїдів розсіювання. В принципі, схожою буде картина поширення і будь-якого іншого забруднювача від точкового джерела, наприклад, від димить труби, реактора, що вибухнув або апокаліптичної зірки з біблійного пророцтва. Процес поширення забруднювача в атмосфері - це процес розсіювання і змішування його частинок з частинками повітря. На хід цього процесу істотно впливають власні руху повітряних мас, тобто вітру. В одній і тій же місцевості вони дмуть в різних напрямках з певною частотою. Дані про частотах вітрів наносяться на особливу діаграму, що має романтичну назву, оспіване у безлічі бардівських пісень, - троянда вітрів. Частинки забруднювача потрапляють від початкового джерела в сусідні області. Потім з областей, що безпосередньо прилягають до джерела, поширюються вже в їх околицях, і так далі. Сам характер цього процесу вказує на те, що для моделювання розсіювання забруднювача в атмосфері можна використовувати підхід, заснований на ідеології клітинних автоматів. В цьому випадку досліджувану ділянку представляється у вигляді клітинного поля. На поле позначаються клітини, в яких знаходяться епіцентри поширення забруднення або зараження. Потім концентрацію забруднювача в кожній клітині поля можна, наприклад, наближено оцінювати за формулою:
(1)
де ak - це масив з дев'яти елементів, що містить ймовірності вітрів відповідних восьми напрямків і ймовірність штилю. Само собою зрозуміло, що дев'ять ймовірностей вітрів різних напрямків, включаючи ймовірність штилю, повинні в сумі давати одиницю. C * k - це вектор з дев'яти елементів, що містить концентрації забруднювача в сусідніх з даної восьми клітинах і в ній самій. Крок за кроком для всіх клітин поля обчислюється сума творів концентрацій в сусідніх восьми осередках на відповідні ймовірності вітрів. До суми додається ще й твір ймовірності штилю на концентрацію забруднювача в самій поточної клітинці. Для нормальної роботи програми необхідно мати дві копії клітинного поля. В одній з копій слід зберігати попереднє покоління, а в іншій - подальше. При зміні поколінь вміст наступного покоління стає попереднім. З розрахунків виключаються крайні ряди осередків. Це робиться для того, щоб уникнути "прикордонних" проблем при застосуванні формули (1). Повторюючи розрахунки багаторазово, ми можемо спостерігати динаміку формування еліпсоїдів розсіювання в часі. При разовому "уприскуванні" забруднювача в будь-яку осередок він швидко розсмоктується по клітинному масиву. Для отримання більш виразною картини розсіювання в пропонованому на врізки фрагменті програмного коду "впорскування" забруднювача у відповідні комірки здійснюється на початку розрахунку кожного чергового покоління. Значення концентрацій викидів вводяться в комірки в деяких довільних одиницях.
Для сприйняття результатів моделювання важлива розфарбування клітин. У наведеному програмному фрагменті використаний алгоритм, що переводить значення концентрацій забруднювача в різні градації яскравості кольорів - від темно-червоного до темно-зеленого. При цьому високі значення концентрацій зображуються відтінками червоного, який, у міру зниження Z, переходить в жовтий, а потім поступово згасає до темно-зеленого кольору (докладніше про колірних гамах і візуалізації графіків см. "КВ" № 2 , 2000 г.).

Звичайно, для по-справжньому точних моделей процесів розсіювання атмосферних забруднювачів слід звертатися до набагато більш прецизійним методиками, ніж та, про яку йшла мова. Але все ж в даному випадку вам немає необхідності вирішувати головоломну систему запаморочливих диференціальних рівнянь в приватних похідних на суперкомп'ютері астрономічної вартості. За допомогою цієї нескладної програми ви можете виконати якесь невеличке кумедне мініісследованіе з комп'ютерного моделювання екологічної ситуації у вашому районі, місті або області в межах часових рамок однієї лабораторної роботи.
Колесник, [email protected]
DefByte IK DefInt LN Dim G As Byte Dim a (1 To 9) As Single Dim b (1 To 200, 1 To 200) As Single Dim c (1 To 200, 1 To 200) As Single Dim Color As Long Dim Zmin As Single Dim Zmax As Single Dim R As Single Dim R4 As Single Dim Z14 As Single Dim Z24 As Single Dim Z34 As Single Private Sub Form_Click () a (1) = 0.05 a (2) = 0.05 a (3) = 0.1 a ( 4) = 0.1 a (5) = 0.1 a (6) = 0.1 a (7) = 0.1 a (8) = 0.15 a (9) = 0.25 z = 7 Zmin = 0 Zmax = 2 R = Zmax - Zmin R4 = R / 4 Z14 = Zmin + R4 Z24 = Z14 + R4 Z34 = Z24 + R4 n = 50 G = 50 For f = 1 To G b (35, 35) = zb (45, 15) = z / 2 For i = 2 To n - 1 For j = 2 To n - 1 c (i, j) = 0 k = 0 For l = -1 To 1 For m = -1 To 1 k = k + 1 c (i, j) = c (i, j) + a (k) * b (i + l, j + m) Next m Next l Next j Next i For i = 1 To n For j = 1 To n Color = SetColor (c (i, j)) Line (6 * (i - 1), 6 * (j - 1)) - (6 * i - 1, 6 * j - 1), Color, BF b (i, j) = c (i, j) Next j Next i Next f End Sub Public Function SetColor (z As Single) As Long Dim t As Byte Select Case z Case Is <Zmin SetColor = RG B (0, 63, 0) Case Zmin To Z14 t = 63 + 192 * (z - Zmin) / R4 SetColor = RGB (0, t, 0) Case Z14 To Z24 t = 255 * (z - Z14) / R4 SetColor = RGB (t, 255, 0) Case Z24 To Z34 t = 255 * (1 - (z - Z24) / R4) SetColor = RGB (255, t, 0) Case Z34 To Zmax t = 63 + 192 * ( 1 - (z - Z34) / R4) SetColor = RGB (t, 0, 0) Case Is> Zmax SetColor = RGB (63, 0, 0) End Select End Function