Распространение радиоволн ВЧ/Рей-трейсинг: различия между версиями

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
 
(не показаны 84 промежуточные версии 2 участников)
Строка 1: Строка 1:
=Модель=
[[Файл:Model RayTrac EM.png|700px|thumb|right|Графическая иллюстрация модели рейтрейсинга]]
=Алгоритм=
=Алгоритм=
==Идея последовательного приближения==
==Идея последовательного приближения==
Идея заключается в последовательном удвоении числа элементарных модельных экспериментов. Это продолжиться до тех пор, пока результат текущего моделирования не приблизится к результату моделирования на предыдущей итерации:
Идея заключается в последовательном удвоении числа элементарных модельных экспериментов. Это продолжится до тех пор, пока результат текущего моделирования не приблизится к результату моделирования на предыдущей итерации:


<math>\left | F_i-F_{i-1} \right |<\Delta </math>, где
<math>\left | F_i-F_{i-1} \right |<\Delta </math>, где
Строка 9: Строка 11:
<math>\left | F_i-F_{i-k} \right |<\Delta </math>, где
<math>\left | F_i-F_{i-k} \right |<\Delta </math>, где
:<math>k </math> также будет задаваться пользователем.
:<math>k </math> также будет задаваться пользователем.
:<math>i </math> здесь - это параметр цикла, стоящего над циклами основной программы, <math>i=\overline{0:N} </math>.
:<math>i </math> здесь - это параметр цикла, стоящего над циклами основной программы, <math>i=\overline{0:N}</math>.


При увеличении числа элементарных экспериментов в два раза, только каждый второй будет уникальным. Другая половина будет повторять эксперименты, выполненные на предыдущих итерациях. Поэтому в цикл основной программы введено дополнительное условие для учета этих повторений.
При равномерном увеличении числа направлений излучения от первичного источника в два раза путем деления на 2 соответствующего шага по углу в процессе увеличения <math>i</math>, только каждое второе направление  будет новым, т.е. не учитанным на предыдущих итерациях. Другая половина будет повторять эксперименты, уже выполненные ранее. Поэтому в цикл основной программы введено дополнительное условие для учета этих повторений.
 
Шаги <math>\Delta_{\theta}\left(\theta\right)</math> по азимуту и <math>\Delta_{\varphi}\left(\varphi\right)</math> по зениту источника являются функциями от направления либо постоянными.
 
==Угловой шаг дискретизации как функция ХН==
[[Файл:Antenna pattern.png|400px|thumb|right|Диаграмма направленности и испускаемые моделью лучи]]
 
[[Файл:Antenna pattern (angular step).png|400px|thumb|right|Зависимость углового шага от азимутального угла]]
 
Большинство современных вещательных систем используют панельные антенны с ограниченными углами раствора диаграммы направленности (ДН) в горизонтальной плоскости (до 120°) и очень малыми углами в вертикальной плоскости (до 20°). Соответственно, в таких системах происходит серьезное перераспределение излучаемой энергии в пространстве. Типичные коэффициенты усиления: 16-18 dBi. Поэтому одним из решений задачи оптимизации является использование динамического углового шага дискретизации <math>\Delta_{\theta},~\Delta_{\varphi}</math> как функции от характеристики направленности источника.
 
Изменение частоты дискретизации <math>\omega(\theta,\varphi, f)</math> происходит по следующему закону:
 
<math>\omega(\theta,\varphi, f) = \omega_{min} + k F(\theta,\varphi, f)</math> , где
:<math>k = \omega_{max} - \omega_{min}</math> - коэффициент девиации, где
:<math>\omega_{max} = \frac{1}{\arcsin\left(\frac{\lambda}{R_{max}}\right)}\approx\frac{R_{max}}{\lambda}</math> - максимальное и <math>\omega_{min} = \alpha\omega_{max}</math> (для любого <math>0 \leq \alpha \leq 1</math>) минимальное значение частоты дискретизации;
:<math>R_{max}</math> - максимальное расстояние от источника до границ модели;
:<math>F</math> - функция ХН;
:<math>\theta,~ \varphi</math> - угол места и азимутальный угол;
:<math>f</math> - частота излучения;
:<math>\lambda</math> - длина излучаемой волны.
 
Тогда шаг дискретизации (угол) будет меняться по следующим образом:
 
<math>\Delta_{\theta},~\Delta_{\varphi} = \frac {1} {\omega(\theta,\varphi)}</math>
 
Общее кол-во лучей определяется выражением:
 
<math>N_{total} = \frac {1} {2 \pi^2} \int \limits_0^{\pi} \int \limits_0^{2 \pi} \omega(\theta,\varphi)~d \theta d \varphi</math>
 
С учетом, что максимум ДН находится в <math>\theta=0,~\varphi=0</math>, получим выражения:
 
<math>N_{\theta~total} = \frac {1} {\pi} \int \limits_0^{\pi} \omega(\theta,\varphi) \bigr|_{\varphi=0}~d \theta</math>,
 
<math>N_{\varphi~total}(\theta) = \frac {1} {2 \pi} \int \limits_0^{2 \pi} \omega(\theta,\varphi)~d \varphi</math>.


==Инициализация геометрической модели==
==Инициализация геометрической модели==
Строка 25: Строка 61:
:<math>r=\sqrt{x^{2}+y^{2}}</math> - расстояние до точки с высотой <math>h(x,y)</math>.
:<math>r=\sqrt{x^{2}+y^{2}}</math> - расстояние до точки с высотой <math>h(x,y)</math>.


==Основной цикл программы | Вариант 1==
===Предусловия===
* <math>G</math> - входное описание среды распространения моделируемого поля, заданное [[Распространение радиоволн ВЧ/Геометрическая модель|геометрической моделью]].
* <math>i</math> - номер итерации моделирования, <math>i\geq 0</math>.
===Основное течение===
#<math>S \leftarrow </math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество первичных источников()</tt>
#Если <math>S \colon ~\varnothing </math>  то ВЫХОД
#<math>\forall ~ s_j \in S</math>
##<math>S \leftarrow S~ \backslash \left \{ s_j \right \}</math>
##<math>\forall ~ \omega_n \in</math><tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика()]]</tt>
###<math>\theta \leftarrow 0</math>
###<math>\zeta_{\theta} \leftarrow 0</math>
###Если <math>\theta < \pi \wedge (i=0 \vee \zeta_{\theta} \bmod 2 \neq 0)</math>
####<math>\varphi \leftarrow 0</math>
####<math>\zeta_{\varphi} \leftarrow 0</math>
####Если <math>\varphi<2\pi  \wedge (i=0 \vee \zeta_{\varphi} \bmod 2 \neq 0)</math>
#####Position <math>\leftarrow</math> <tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция()</tt>
#####Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать(Position, [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Мировая система координат(Вектор<math>(\theta,~\varphi, 1)</math>))</tt>
#####Distance <math>\leftarrow \infty</math>
#####<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
######<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
#######<tt><math>P' \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость грани())</tt>
#######Если <tt>[[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Принадлежность(<math>P'</math>)</tt>
########Distance' <math>\leftarrow</math><tt> Расстояние(Position, <math>P'</math>)</tt>
########Если Distance' <math><</math> Distance
#########Distance <math>\leftarrow</math> Distance'
#########<math>t' \leftarrow t_{mn}</math>
#########<math>P \leftarrow P'</math>
#####<math>\forall ~ \rho_k \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек()]]</tt>
######Если <math>\rho_k \in </math><tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Область регистрации луча <math>(\theta,~\varphi,~\frac{\Delta_{\theta} (\theta)}{2^i},~\frac{\Delta_{\varphi} (\theta, \varphi)}{2^i},</math> Distance<math>)</math></tt>
#######<tt><math>\rho_k</math>.Зарегистрировать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность<math>(\omega_n,~\theta,~\varphi</math>, Расстояние(Position, <math>\rho_k</math>.Позиция()), [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]<math>)</math>)</tt>
#####Если <tt>[[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность<math>(\omega_n,~\theta,~\varphi</math>, Distance, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]</tt><math>)>E_{end}</math>
######Angle <tt><math>\leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Угол пересечения([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t'</math>]].Плоскость грани())</tt>
######<math>s' \leftarrow</math><tt> [[Распространение радиоволн ВЧ/Вторичный источник при рейтрейсинге|Вторичный источник при рейтрейсинге]].Создать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность<math>(\omega_n,~\theta,~\varphi</math>, Distance, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]<math>),</math> Angle, <math>P,~t'</math>)</tt>
######<math>S \leftarrow S \cup \{s'\}</math>
####<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (\theta, \varphi)}{2^i}</math>
####<math>\zeta_{\varphi} \leftarrow \zeta_{\varphi}+1</math>
###<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (\theta)}{2^i}</math>
###<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math>
#Переход на шаг 2
===Свойства алгоритма===
====Сложность====
====Возможности распараллеливания====
==Основной цикл программы | Вариант 2==
'''Геометрическая модель (рей-трейсинг 2)'''.
''Наследует свойства [[Распространение радиоволн ВЧ/Геометрическая модель|Геометрической модели]].''
* Предикат завершения(). При <math>i = 0</math> возвращает истину, иначе возвращает значение функции SubApprox для результатов моделирования не предыдущем и на текущем этапах, а также для включаемого отклонения <math>\Delta</math> и допустимого процента точек <math>k</math>.
===Предусловия===
* <math>G</math> - входное описание среды распространения моделируемого поля, заданное [[Распространение радиоволн ВЧ/Геометрическая модель|геометрической моделью]].
* <math>\Omega</math> - список частот, на которых необходимо провести моделирование.
* <math>E_{end}</math> - критическое значение напряженности, на котором дальнейшая трассировка луча прекращается.
* <math>\Delta</math> - критерий разности между текущим и предыдущим результатом моделирования, при которой можно считать, что поле промоделированно точно.
===Основное течение===
#<math>\forall ~ \omega_n \in \Omega</math>
##<math>i \leftarrow 0</math>
##Pre_SCP <math> \leftarrow</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек(<math>\omega_n</math>)]]</tt> ''//Копирование состояния до изменения''.
##Set_event <math>\leftarrow</math><tt> Preprocessing(<math>G,~i,~\omega_n</math>)</tt>
##<math>\forall ~ (s_j,~\theta,~\varphi) \in </math> Set_event
###Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]], <math>\theta,~\varphi,~\omega_n</math>)</tt>
###<tt>Trace(Ray, [[Распространение радиоволн ВЧ/Геометрическая модель|G]], <math>E_{end}</math>)</tt>
##<tt>Postprocessing([[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек(<math>\omega_n</math>)]])</tt>
##SAcheck <math>\leftarrow</math><tt> SucApprox([[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек(<math>\omega_n</math>)]], Pre_SCP, <math>\Delta</math>)</tt>
##Если SAcheck
###<math>i \leftarrow i+1</math>
###Переход на 1.2
#ВЫХОД
===<tt>[Таблица событий] <math>\leftarrow</math> Preprocessing(Геометрическая модель, Номер итерации, Частота)</tt>===
Функция создает таблицу событий, необходимых обработать. В качестве событий - испускаемые моделью лучи на данной частоте.
#<math>T \leftarrow</math> Пустой односвязный список значений <math>(s_j,~\theta,~\varphi)</math>.
#<math>G \leftarrow</math> Геометрическая модель.
#<math>i \leftarrow</math> Номер итерации
#<math>\omega \leftarrow</math> Частота
#<math>\forall ~ s_j \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Первичный источник|Множество первичных источников()]]</tt>
##Если <tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика(<math>\omega</math>)]]</tt> <math>\ne 0</math>
###<math>\theta \leftarrow 0</math>
###<math>\zeta_{\theta} \leftarrow 0</math>
###Пока <math>\theta < \pi</math>
####<math>\varphi \leftarrow 0</math>
####<math>\zeta_{\varphi} \leftarrow 0</math>
####Пока <math>\varphi<2\pi</math>
#####Если <math>i=0 \vee \zeta_{\theta} \bmod 2 \neq 0 \vee \zeta_{\varphi} \bmod 2 \neq 0</math>
######<math>T</math>.Добавить<math>(s_j,~\theta,~\varphi)</math>
#####<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (s_j,~\theta,~\varphi)}{2^i}</math>
#####<math>\zeta_{\varphi} \leftarrow \zeta_{\varphi}+1</math>
####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}</math>
####<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math>
#Вернуть Массив(<math>T</math>)
Если <math>\Delta_{\varphi} (s_j,~\theta,~\varphi) = {\rm const}</math>, и <math>\Delta_{\theta} (s_j,~\theta) = {\rm const}</math>, то есть углы распределены равномерно, таблица может быть реализована в виде массива значений <math>(s_j,~\theta,~\varphi)</math>, элементы которого могут заполняться параллельно, без синхронизации. Если же размер таблицы заранее не определен (общий случай), то таблица реализуется связанным списком, добавление элементов в который должно защищаться мьютексом на шаге 4.1.3.1.3.1.1, а алгоритм на заключительном шаге преобразует связанный список в массив с произвольным доступом. Второй путь при параллельном выполнении - создавать таблицы в локальной памяти потока, после выполнения которых - объединять таблицы в массив в основном потоке.
====Параллельная форма====
Параллельное выполнение в общем случае возможно только цикла, перебирающего первичные источники (шаг 4), так как распределение углов заранее не определено.
Пусть <math>P>0</math> - число потоков, выполняющих функцию. Пусть <math>T'</math> -  массив изначально пустых связанных списков троек <math>(s_j,~\theta,~\varphi)</math>, так, что <math>T'_i</math> - <math>i</math>-тый список массива, <math>0\le i<P</math>.
#<math>i \leftarrow</math> Номер итерации
#<math>\omega \leftarrow</math> Частота
#<math>T'\leftarrow</math>Создать массив.
#<math>\forall ~ s_j \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Первичный источник|Множество первичных источников()]]</tt>
##<math>t\leftarrow</math> индекс потока.
##Если <tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика(<math>\omega</math>)]]</tt> <math>\ne 0</math>
###<math>\theta \leftarrow 0</math>
###<math>\zeta_{\theta} \leftarrow 0</math>
###Пока <math>\theta < \pi</math>
####<math>\varphi \leftarrow 0</math>
####<math>\zeta_{\varphi} \leftarrow 0</math>
####Пока <math>\varphi<2\pi</math>
#####Если <math>i=0 \vee \zeta_{\theta} \bmod 2 \neq 0 \vee \zeta_{\varphi} \bmod 2 \neq 0</math>
######<math>T'_t</math>.Добавить<math>(s_j,~\theta,~\varphi)</math>
#####<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (s_j,~\theta,~\varphi)}{2^i}</math>
#####<math>\zeta_{\varphi} \leftarrow \zeta_{\varphi}+1</math>
####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}</math>
####<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math>
#Вернуть Массив<math>\left(\bigsqcup_{t=0}^{P-1}T'_t\right)</math>
===<tt>Trace</tt>===
Функция трассирует луч через геометрическую модель и и фиксирует его прохождение вблизи контрольной точки.
#<math>R\leftarrow \infty</math>
#<math>T\leftarrow </math> NaN
#<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
##<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
###<tt><math>p \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость())</tt>
###Если <tt>[[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Принадлежность(<math>p</math>)</tt>
####<math>r\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Ray]].Пробег(<math>p</math>)</tt>
####Если <math>r < R</math>
#####<math>R \leftarrow r</math>
#####<math>T \leftarrow t_{mn}</math>
#####<math>P \leftarrow p</math>
#<math>\forall ~ O_k \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Плоскость вывода результатов|Множество плоскостей вывода результатов()]]</tt>
##<tt><math>p \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Плоскость вывода результатов|<math>O_k</math>]].Плоскость())</tt>
##Если <tt>[[Распространение радиоволн ВЧ/Плоскость вывода результатов|<math>O_k</math>]].Принадлежность(<math>p</math>)</tt>
###<math>r\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Ray]].Пробег(<math>p</math>)</tt>
###Если <math>r < R</math>
####<math>\rho \leftarrow</math><tt> [[Распространение радиоволн ВЧ/Плоскость вывода результатов|<math>O_k</math>]].Ближайшая контрольная точка(<math>p</math>)</tt>
####<tt><math>\rho</math>.Зарегистрировать([[Распространение радиоволн ВЧ/Луч|Ray]], <math>r</math>, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]])</tt>
#Если <math>T \not\equiv</math> NaN
##<tt><math>\gamma \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Угол пересечения([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>T</math>]].Плоскость())</tt>
##<tt>[[Распространение радиоволн ВЧ/Луч|Ray]].Отразить(<math>T,~P,~R,~\gamma</math>,  [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]])</tt>
##Если <tt>[[Распространение радиоволн ВЧ/Луч|Ray]].Напряженность <math> >E_{end} </math></tt>
###<tt>Trace(Ray, [[Распространение радиоволн ВЧ/Геометрическая модель|G]], <math>E_{end}</math>)</tt>
===<tt>Postprocessing</tt>===
Функция "проявляет" поле в контрольных точках по накопленным значениям напряженности от всех пришедших лучей.
===<tt>SucApprox</tt>===
Функция сравнивает текущие результаты моделирования с результатами, полученными на предыдущем шаге. На выходе получаем флаг, по которому решаем, следует ли продолжать уточнять модель.
===Свойства алгоритма===
====Сложность====
====Возможности распараллеливания====
<graphviz size=500px>
digraph ray_tracing_EM_parallel_run{
rankdir=LR;
node[fontsize=14];
edge[fontsize=14];
G0[label="ВХОД"];
G1[label="1"];
G2_1[label="2"];
G3_1[label="3"];
G4_1[label="4"];
G5_1[label="5"];
G2_2[label="2"];
G3_2[label="3"];
G4_2[label="4"];
G5_2[label="5"];
G6_1_1[label="6"];
G6_1_2[label="6"];
G6_2_1[label="6"];
G6_2_2[label="6"];
G7_1_1_1[label="7.1"];
G7_3_1_1[label="7.3"];
G7_4_1_1_1[label="7.4"];
G7_4_1_1_2[label="7.4"];
G7_5_1_1_1_1[label="7.5"];
G7_13_1_1_1_1[label="7.13"];
G7_5_1_1_1_2[label="7.5"];
G7_13_1_1_1_2[label="7.13"];
G7_5_1_1_2_1[label="7.5"];
G7_13_1_1_2_1[label="7.13"];
G7_5_1_1_2_2[label="7.5"];
G7_13_1_1_2_2[label="7.13"];
G7_14_1_1_1[label="7.14"];
G7_14_1_1_2[label="7.14"];
G7_15_1_1[label="7.15"];
G7_16_1_1[label="7.16"];
G7_17_1_1_1[label="7.17"];
G7_24_1_1_1[label="7.24"];
G7_17_1_1_2[label="7.17"];
G7_24_1_1_2[label="7.24"];
G7_25_1_1[label="7.25"];
G7_32_1_1[label="7.32"];
G7_1_1_2[label="7.1"];
G7_3_1_2[label="7.3"];
G7_4_1_2_1[label="7.4"];
G7_4_1_2_2[label="7.4"];
G7_5_1_2_1_1[label="7.5"];
G7_13_1_2_1_1[label="7.13"];
G7_5_1_2_1_2[label="7.5"];
G7_13_1_2_1_2[label="7.13"];
G7_5_1_2_2_1[label="7.5"];
G7_13_1_2_2_1[label="7.13"];
G7_5_1_2_2_2[label="7.5"];
G7_13_1_2_2_2[label="7.13"];
G7_14_1_2_1[label="7.14"];
G7_14_1_2_2[label="7.14"];
G7_15_1_2[label="7.15"];
G7_16_1_2[label="7.16"];
G7_17_1_2_1[label="7.17"];
G7_24_1_2_1[label="7.24"];
G7_17_1_2_2[label="7.17"];
G7_24_1_2_2[label="7.24"];
G7_25_1_2[label="7.25"];
G7_32_1_2[label="7.32"];
G7_1_2_1[label="7.1"];
G7_3_2_1[label="7.3"];
G7_4_2_1_1[label="7.4"];
G7_4_2_1_2[label="7.4"];
G7_5_2_1_1_1[label="7.5"];
G7_13_2_1_1_1[label="7.13"];
G7_5_2_1_1_2[label="7.5"];
G7_13_2_1_1_2[label="7.13"];
G7_5_2_1_2_1[label="7.5"];
G7_13_2_1_2_1[label="7.13"];
G7_5_2_1_2_2[label="7.5"];
G7_13_2_1_2_2[label="7.13"];
G7_14_2_1_1[label="7.14"];
G7_14_2_1_2[label="7.14"];
G7_15_2_1[label="7.15"];
G7_16_2_1[label="7.16"];
G7_17_2_1_1[label="7.17"];
G7_24_2_1_1[label="7.24"];
G7_17_2_1_2[label="7.17"];
G7_24_2_1_2[label="7.24"];
G7_25_2_1[label="7.25"];
G7_32_2_1[label="7.32"];
G7_1_2_2[label="7.1"];
G7_3_2_2[label="7.3"];
G7_4_2_2_1[label="7.4"];
G7_4_2_2_2[label="7.4"];
G7_5_2_2_1_1[label="7.5"];
G7_13_2_2_1_1[label="7.13"];
G7_5_2_2_1_2[label="7.5"];
G7_13_2_2_1_2[label="7.13"];
G7_5_2_2_2_1[label="7.5"];
G7_13_2_2_2_1[label="7.13"];
G7_5_2_2_2_2[label="7.5"];
G7_13_2_2_2_2[label="7.13"];
G7_14_2_2_1[label="7.14"];
G7_14_2_2_2[label="7.14"];
G7_15_2_2[label="7.15"];
G7_16_2_2[label="7.16"];
G7_17_2_2_1[label="7.17"];
G7_24_2_2_1[label="7.24"];
G7_17_2_2_2[label="7.17"];
G7_24_2_2_2[label="7.24"];
G7_25_2_2[label="7.25"];
G7_32_2_2[label="7.32"];
G8_1[label="8"];
G14_1[label="14"];
G8_2[label="8"];
G14_2[label="14"];
G15[label="15"];
SKIP_1[label="...", shape="none"];
SKIP_2[label="...", shape="none"];
SKIP_3[label="...", shape="none"];
SKIP_4[label="...", shape="none"];
SKIP_5[label="...", shape="none"];
SKIP_6[label="...", shape="none"];
SKIP_7[label="...", shape="none"];
SKIP_8[label="...", shape="none"];
SKIP_9[label="...", shape="none"];
SKIP_10[label="...", shape="none"];
//SKIP_11[label="...", shape="none"];
SKIP_12[label="...", shape="none"];
SKIP_13[label="...", shape="none"];
SKIP_14[label="...", shape="none"];
SKIP_15[label="...", shape="none"];
SKIP_16[label="...", shape="none"];
SKIP_17[label="...", shape="none"];
SKIP_18[label="...", shape="none"];
SKIP_19[label="...", shape="none"];
SKIP_20[label="...", shape="none"];
SKIP_21[label="...", shape="none"];
SKIP_22[label="...", shape="none"];
SKIP_23[label="...", shape="none"];
SKIP_24[label="...", shape="none"];
SKIP_25[label="...", shape="none"];
SKIP_26[label="...", shape="none"];
SKIP_27[label="...", shape="none"];
SKIP_28[label="...", shape="none"];
SKIP_29[label="...", shape="none"];
SKIP_30[label="...", shape="none"];
SKIP_31[label="...", shape="none"];
G0->G1->{G2_1, G2_2}
G2_1->G3_1->G4_1->G5_1->{G6_1_1, G6_1_2}
G6_1_1->G7_1_1_1
G6_1_2->G7_1_1_2
{G7_32_1_1, G7_32_1_2}->G8_1->SKIP_30->G14_1
G2_2->G3_2->G4_2->G5_2->{G6_2_1, G6_2_2}
G6_2_1->G7_1_2_1
G6_2_2->G7_1_2_2
{G7_32_2_1, G7_32_2_2}->G8_2->SKIP_31->G14_2
{G14_1, G14_2}->G15->"ВЫХОД"
G7_1_1_1->G7_3_1_1->{G7_4_1_1_1, G7_4_1_1_2}
G7_4_1_1_1->{G7_5_1_1_1_1, G7_5_1_1_1_2}
G7_5_1_1_1_1->SKIP_1->G7_13_1_1_1_1
G7_5_1_1_1_2->SKIP_2->G7_13_1_1_1_2
{G7_13_1_1_1_1, G7_13_1_1_1_2}->G7_14_1_1_1
G7_4_1_1_2->{G7_5_1_1_2_1, G7_5_1_1_2_2}
G7_5_1_1_2_1->SKIP_3->G7_13_1_1_2_1
G7_5_1_1_2_2->SKIP_4->G7_13_1_1_2_2
{G7_13_1_1_2_1, G7_13_1_1_2_2}->G7_14_1_1_2
{G7_14_1_1_1, G7_14_1_1_2}->G7_15_1_1->G7_16_1_1->{G7_17_1_1_1, G7_17_1_1_2}
G7_17_1_1_1->SKIP_5->G7_24_1_1_1
G7_17_1_1_2->SKIP_6->G7_24_1_1_2
{G7_24_1_1_1, G7_24_1_1_2}->G7_25_1_1->SKIP_15->G7_32_1_1
G7_1_1_2->G7_3_1_2->{G7_4_1_2_1, G7_4_1_2_2}
G7_4_1_2_1->{G7_5_1_2_1_1, G7_5_1_2_1_2}
G7_5_1_2_1_1->SKIP_18->G7_13_1_2_1_1
G7_5_1_2_1_2->SKIP_19->G7_13_1_2_1_2
{G7_13_1_2_1_1, G7_13_1_2_1_2}->G7_14_1_2_1
G7_4_1_2_2->{G7_5_1_2_2_1, G7_5_1_2_2_2}
G7_5_1_2_2_1->SKIP_16->G7_13_1_2_2_1
G7_5_1_2_2_2->SKIP_17->G7_13_1_2_2_2
{G7_13_1_2_2_1, G7_13_1_2_2_2}->G7_14_1_2_2
{G7_14_1_2_1, G7_14_1_2_2}->G7_15_1_2->G7_16_1_2->{G7_17_1_2_1, G7_17_1_2_2}
G7_17_1_2_1->SKIP_7->G7_24_1_2_1
G7_17_1_2_2->SKIP_8->G7_24_1_2_2
{G7_24_1_2_1, G7_24_1_2_2}->G7_25_1_2->SKIP_12->G7_32_1_2
G7_1_2_1->G7_3_2_1->{G7_4_2_1_1, G7_4_2_1_2}
G7_4_2_1_1->{G7_5_2_1_1_1, G7_5_2_1_1_2}
G7_5_2_1_1_1->SKIP_20->G7_13_2_1_1_1
G7_5_2_1_1_2->SKIP_21->G7_13_2_1_1_2
{G7_13_2_1_1_1, G7_13_2_1_1_2}->G7_14_2_1_1
G7_4_2_1_2->{G7_5_2_1_2_1, G7_5_2_1_2_2}
G7_5_2_1_2_1->SKIP_22->G7_13_2_1_2_1
G7_5_2_1_2_2->SKIP_23->G7_13_2_1_2_2
{G7_13_2_1_2_1, G7_13_2_1_2_2}->G7_14_2_1_2
{G7_14_2_1_1, G7_14_2_1_2}->G7_15_2_1->G7_16_2_1->{G7_17_2_1_1, G7_17_2_1_2}
G7_17_2_1_1->SKIP_9->G7_24_2_1_1
G7_17_2_1_2->SKIP_10->G7_24_2_1_2
{G7_24_2_1_1, G7_24_2_1_2}->G7_25_2_1->SKIP_13->G7_32_2_1
G7_1_2_2->G7_3_2_2->{G7_4_2_2_1, G7_4_2_2_2}
G7_4_2_2_1->{G7_5_2_2_1_1, G7_5_2_2_1_2}
G7_5_2_2_1_1->SKIP_24->G7_13_2_2_1_1
G7_5_2_2_1_2->SKIP_25->G7_13_2_2_1_2
{G7_13_2_2_1_1, G7_13_2_2_1_2}->G7_14_2_2_1
G7_4_2_2_2->{G7_5_2_2_2_1, G7_5_2_2_2_2}
G7_5_2_2_2_1->SKIP_26->G7_13_2_2_2_1
G7_5_2_2_2_2->SKIP_27->G7_13_2_2_2_2
{G7_13_2_2_2_1, G7_13_2_2_2_2}->G7_14_2_2_2
{G7_14_2_2_1, G7_14_2_2_2}->G7_15_2_2->G7_16_2_2->{G7_17_2_2_1, G7_17_2_2_2}
G7_17_2_2_1->SKIP_28->G7_24_2_2_1
G7_17_2_2_2->SKIP_29->G7_24_2_2_2
{G7_24_2_2_1, G7_24_2_2_2}->G7_25_2_2->SKIP_14->G7_32_2_2


==Инициализация источников==
  }
При переотражениях лучевая модель предполагает один входящий луч и два выходящих - отраженный и преломленный. Инициализируем множество источников <math>SC</math>.
</graphviz>
:1. <math>S \leftarrow</math> <tt>[[Распространение радиоволн ВЧ/Источник|набор источников()]]</tt>
:2. <math>\forall ~ s_j \in S</math>
::2.1. <math>\forall ~ \xi_{\theta} : ~~ 0 \leqslant \xi_{\theta} < \left [ \frac{2 \pi}{\left \langle \Delta_{\theta} \right \rangle} 2^{i} \right ]</math>
:::2.1.1. <math>\alpha_{\theta} \leftarrow \xi_{\theta} \frac{\Delta_{\theta}}{2^i}</math>
:::2.1.2. <math>\forall ~ \xi_{\varphi} : ~~ 0 \leqslant \xi_{\varphi} < \left [ \frac{2 \pi}{\left \langle \Delta_{\varphi} \right \rangle} 2^{i} \right ]</math>
::::2.1.2.1. <math>\alpha_{\varphi} \leftarrow \xi_{\varphi} \frac{\Delta_{\varphi}}{2^i}</math>
#<math></math>
#<math></math>
#<math></math>
#<math></math>
#<math></math>
==Основной цикл программы==

Текущая версия на 07:50, 14 февраля 2018

Модель

Графическая иллюстрация модели рейтрейсинга

Алгоритм

Идея последовательного приближения

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

, где

- параметр моделирования, задаваемый пользователем.

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

, где

также будет задаваться пользователем.
здесь - это параметр цикла, стоящего над циклами основной программы, .

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

Шаги по азимуту и по зениту источника являются функциями от направления либо постоянными.

Угловой шаг дискретизации как функция ХН

Диаграмма направленности и испускаемые моделью лучи
Зависимость углового шага от азимутального угла

Большинство современных вещательных систем используют панельные антенны с ограниченными углами раствора диаграммы направленности (ДН) в горизонтальной плоскости (до 120°) и очень малыми углами в вертикальной плоскости (до 20°). Соответственно, в таких системах происходит серьезное перераспределение излучаемой энергии в пространстве. Типичные коэффициенты усиления: 16-18 dBi. Поэтому одним из решений задачи оптимизации является использование динамического углового шага дискретизации как функции от характеристики направленности источника.

Изменение частоты дискретизации происходит по следующему закону:

, где

- коэффициент девиации, где
- максимальное и (для любого ) минимальное значение частоты дискретизации;
- максимальное расстояние от источника до границ модели;
- функция ХН;
- угол места и азимутальный угол;
- частота излучения;
- длина излучаемой волны.

Тогда шаг дискретизации (угол) будет меняться по следующим образом:

Общее кол-во лучей определяется выражением:

С учетом, что максимум ДН находится в , получим выражения:

,

.

Инициализация геометрической модели

Перерасчет высот с учетом кривизны земли и рефракции радиоволн в тропосфере.

Входной параметр пересчитывается в соответствии с формулой:

, где

- эквивалентный радиус Земли, где
- радиус Земли (км),
- изменение коэффициента преломления с высотой.
- расстояние до точки с высотой .

Основной цикл программы | Вариант 1

Предусловия

  • - входное описание среды распространения моделируемого поля, заданное геометрической моделью.
  • - номер итерации моделирования, .

Основное течение

  1. G.Множество первичных источников()
  2. Если то ВЫХОД
    1. .Антенна().Тип антенны().Амплитудно-частотная характеристика()
      1. Если
        1. Если
          1. Position .Антенна().Позиция()
          2. Ray Луч().Создать(Position, .Антенна().Мировая система координат(Вектор))
          3. Distance
          4. G.Множество отражающих объектов()
            1. .Множество отражающих поверхностей()
              1. Ray.Пересечение(.Плоскость грани())
              2. Если .Принадлежность()
                1. Distance' Расстояние(Position, )
                2. Если Distance' Distance
                  1. Distance Distance'
          5. G.Множество контрольных точек()
            1. Если .Область регистрации луча Distance
              1. .Зарегистрировать(.Напряженность, Расстояние(Position, .Позиция()), G.Среда распространения())
          6. Если .Напряженность, Distance, G.Среда распространения()
            1. Angle Ray.Угол пересечения(.Плоскость грани())
            2. Вторичный источник при рейтрейсинге.Создать(.Напряженность, Distance, G.Среда распространения() Angle, )
        2. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \zeta_{\varphi} \leftarrow \zeta_{\varphi}+1
      2. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \theta \leftarrow \theta + \frac{\Delta_{\theta} (\theta)}{2^i}
      3. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \zeta_{\theta} \leftarrow \zeta_{\theta}+1
  3. Переход на шаг 2

Свойства алгоритма

Сложность

Возможности распараллеливания

Основной цикл программы | Вариант 2

Геометрическая модель (рей-трейсинг 2). Наследует свойства Геометрической модели.

  • Предикат завершения(). При Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle i = 0} возвращает истину, иначе возвращает значение функции SubApprox для результатов моделирования не предыдущем и на текущем этапах, а также для включаемого отклонения и допустимого процента точек Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): k .

Предусловия

  • - входное описание среды распространения моделируемого поля, заданное геометрической моделью.
  • Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \Omega} - список частот, на которых необходимо провести моделирование.
  • - критическое значение напряженности, на котором дальнейшая трассировка луча прекращается.
  • Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \Delta - критерий разности между текущим и предыдущим результатом моделирования, при которой можно считать, что поле промоделированно точно.

Основное течение

  1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \forall ~ \omega_n \in \Omega
    1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): i \leftarrow 0
    2. Pre_SCP Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \leftarrow } G.Множество контрольных точек(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \omega_n ) //Копирование состояния до изменения.
    3. Set_event Preprocessing(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle G,~i,~\omega_n} )
    4. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \forall ~(s_{j},~\theta ,~\varphi )\in } Set_event
      1. Ray Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \leftarrow Луч().Создать(, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \theta,~\varphi,~\omega_n} )
      2. Trace(Ray, G, )
    5. Postprocessing(G.Множество контрольных точек(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \omega_n ))
    6. SAcheck SucApprox(G.Множество контрольных точек(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \omega_n ), Pre_SCP, )
    7. Если SAcheck
      1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): i \leftarrow i+1
      2. Переход на 1.2
  2. ВЫХОД

[Таблица событий] Preprocessing(Геометрическая модель, Номер итерации, Частота)

Функция создает таблицу событий, необходимых обработать. В качестве событий - испускаемые моделью лучи на данной частоте.

  1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle T \leftarrow} Пустой односвязный список значений Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle (s_{j},~\theta ,~\varphi )} .
  2. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle G \leftarrow} Геометрическая модель.
  3. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle i\leftarrow } Номер итерации
  4. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \omega \leftarrow Частота
  5. G.Множество первичных источников()
    1. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): s_j .Антенна().Тип антенны().Амплитудно-частотная характеристика(Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \omega ) Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \ne 0}
      1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \zeta_{\theta} \leftarrow 0
      2. Пока Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \theta < \pi
        1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \varphi \leftarrow 0
        2. Пока Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \varphi<2\pi
          1. Если Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle i=0\vee \zeta _{\theta }{\bmod {2}}\neq 0\vee \zeta _{\varphi }{\bmod {2}}\neq 0}
            1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): T .ДобавитьНевозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle (s_{j},~\theta ,~\varphi )}
          2. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (s_j,~\theta,~\varphi)}{2^i}}
          3. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \zeta_{\varphi} \leftarrow \zeta_{\varphi}+1
        3. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}}
        4. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \zeta_{\theta} \leftarrow \zeta_{\theta}+1
  6. Вернуть Массив(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): T )

Если Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \Delta _{\varphi }(s_{j},~\theta ,~\varphi )={\rm {const}}} , и Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle \Delta_{\theta} (s_j,~\theta) = {\rm const}} , то есть углы распределены равномерно, таблица может быть реализована в виде массива значений Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle (s_{j},~\theta ,~\varphi )} , элементы которого могут заполняться параллельно, без синхронизации. Если же размер таблицы заранее не определен (общий случай), то таблица реализуется связанным списком, добавление элементов в который должно защищаться мьютексом на шаге 4.1.3.1.3.1.1, а алгоритм на заключительном шаге преобразует связанный список в массив с произвольным доступом. Второй путь при параллельном выполнении - создавать таблицы в локальной памяти потока, после выполнения которых - объединять таблицы в массив в основном потоке.

Параллельная форма

Параллельное выполнение в общем случае возможно только цикла, перебирающего первичные источники (шаг 4), так как распределение углов заранее не определено.

Пусть Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle P>0} - число потоков, выполняющих функцию. Пусть Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle T'} - массив изначально пустых связанных списков троек Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle (s_j,~\theta,~\varphi)} , так, что Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle T'_{i}} - Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): i -тый список массива, Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle 0\leq i<P} .

  1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle i \leftarrow} Номер итерации
  2. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \omega \leftarrow Частота
  3. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle T'\leftarrow} Создать массив.
  4. G.Множество первичных источников()
    1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle t\leftarrow} индекс потока.
    2. Если .Антенна().Тип антенны().Амплитудно-частотная характеристика(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \omega ) Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \neq 0}
      1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \theta \leftarrow 0
      2. Пока Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \theta < \pi
        1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \zeta_{\varphi} \leftarrow 0
        2. Пока Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \varphi<2\pi
          1. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle i=0 \vee \zeta_{\theta} \bmod 2 \neq 0 \vee \zeta_{\varphi} \bmod 2 \neq 0}
            1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle T'_{t}} .ДобавитьНевозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): {\displaystyle (s_j,~\theta,~\varphi)}
          2. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \varphi \leftarrow \varphi +{\frac {\Delta _{\varphi }(s_{j},~\theta ,~\varphi )}{2^{i}}}}
          3. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \zeta_{\varphi} \leftarrow \zeta_{\varphi}+1
        3. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \theta \leftarrow \theta +{\frac {\Delta _{\theta }(s_{j},~\theta )}{2^{i}}}}
        4. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \zeta_{\theta} \leftarrow \zeta_{\theta}+1
  5. Вернуть МассивНевозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): {\displaystyle \left(\bigsqcup _{t=0}^{P-1}T'_{t}\right)}

Trace

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

  1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): R\leftarrow \infty
  2. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): T\leftarrow NaN
  3. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \forall ~ f_m\in G.Множество отражающих объектов()
    1. .Множество отражающих поверхностей()
      1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): p \leftarrow Ray.Пересечение(.Плоскость())
      2. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): t_{mn} .Принадлежность()
        1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): r\leftarrow Ray.Пробег()
        2. Если Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): r < R
          1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): R \leftarrow r
          2. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): T \leftarrow t_{mn}
          3. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): P \leftarrow p
  4. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \forall ~ O_k \in G.Множество плоскостей вывода результатов()
    1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): p \leftarrow Ray.Пересечение(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): O_k .Плоскость())
    2. Если Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): O_k .Принадлежность(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): p )
      1. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): r\leftarrow Ray.Пробег(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): p )
      2. Если Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): r < R
        1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \rho \leftarrow Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): O_k .Ближайшая контрольная точка(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): p )
        2. Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): \rho .Зарегистрировать(Ray, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): r , G.Среда распространения())
  5. Если Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): T \not\equiv NaN
    1. Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): \gamma \leftarrow Ray.Угол пересечения(.Плоскость())
    2. Ray.Отразить(Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): T,~P,~R,~\gamma , G.Среда распространения())
    3. Если Ray.Напряженность Невозможно разобрать выражение (Ошибка преобразования. Сервер («https://wikimedia.org/api/rest_») сообщил: «Cannot get mml. Server problem.»): >E_{end}
      1. Trace(Ray, G, Невозможно разобрать выражение (MathML с запасными SVG или PNG (рекомендуется для современных браузеров и инструментов повышения доступности): Недопустимый ответ («Math extension cannot connect to Restbase.») от сервера «https://wikimedia.org/api/rest_v1/»:): E_{end} )

Postprocessing

Функция "проявляет" поле в контрольных точках по накопленным значениям напряженности от всех пришедших лучей.

SucApprox

Функция сравнивает текущие результаты моделирования с результатами, полученными на предыдущем шаге. На выходе получаем флаг, по которому решаем, следует ли продолжать уточнять модель.

Свойства алгоритма

Сложность

Возможности распараллеливания