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

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
 
(не показано 35 промежуточных версий 2 участников)
Строка 17: Строка 17:
Шаги <math>\Delta_{\theta}\left(\theta\right)</math> по азимуту и <math>\Delta_{\varphi}\left(\varphi\right)</math> по зениту источника являются функциями от направления либо постоянными.
Шаги <math>\Delta_{\theta}\left(\theta\right)</math> по азимуту и <math>\Delta_{\varphi}\left(\varphi\right)</math> по зениту источника являются функциями от направления либо постоянными.


==Угловой шаг дискретизации как функция ХН==
[[Файл:Antenna pattern.png|400px|thumb|right|Диаграмма направленности и испускаемые моделью лучи]]
[[Файл:Antenna pattern.png|400px|thumb|right|Диаграмма направленности и испускаемые моделью лучи]]


[[Файл:Antenna pattern (angular step).png|400px|thumb|right|Зависимость углового шага от азимутального угла]]
[[Файл:Antenna pattern (angular step).png|400px|thumb|right|Зависимость углового шага от азимутального угла]]
==Угловой шаг дискретизации как функция ХН==
 
Большинство современных вещательных систем используют панельные антенны с ограниченными углами раствора диаграммы направленности (ДН) в горизонтальной плоскости (до 120°) и очень малыми углами в вертикальной плоскости (до 20°). Соответственно, в таких системах происходит серьезное перераспределение излучаемой энергии в пространстве. Типичные коэффициенты усиления: 16-18 dBi. Поэтому одним из решений задачи оптимизации является использование динамического углового шага дискретизации <math>\Delta_{\theta},~\Delta_{\varphi}</math> как функции от характеристики направленности источника.
Большинство современных вещательных систем используют панельные антенны с ограниченными углами раствора диаграммы направленности (ДН) в горизонтальной плоскости (до 120°) и очень малыми углами в вертикальной плоскости (до 20°). Соответственно, в таких системах происходит серьезное перераспределение излучаемой энергии в пространстве. Типичные коэффициенты усиления: 16-18 dBi. Поэтому одним из решений задачи оптимизации является использование динамического углового шага дискретизации <math>\Delta_{\theta},~\Delta_{\varphi}</math> как функции от характеристики направленности источника.


Изменение частоты дискретизации <math>\omega(\theta,\varphi)</math> происходит по следующему закону:
Изменение частоты дискретизации <math>\omega(\theta,\varphi, f)</math> происходит по следующему закону:


<math>\omega(\theta,\varphi) = \omega_0 + k F(\theta,\varphi)</math> , где
<math>\omega(\theta,\varphi, f) = \omega_{min} + k F(\theta,\varphi, f)</math> , где
:<math>\omega_0 = \frac {\omega_{max} + \omega_{min}} {2}</math> - центральное значение частоты дискретизации;
:<math>k = \omega_{max} - \omega_{min}</math> - коэффициент девиации, где
:<math>k = \omega_{max} - \omega_{min}</math> - коэффициент девиации, где
::<math>\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>F</math> - функция ХН;
:<math>\theta,~ \varphi</math> - зенитный и азимутальный угол.
:<math>\theta,~ \varphi</math> - угол места и азимутальный угол;
:<math>f</math> - частота излучения;
:<math>\lambda</math> - длина излучаемой волны.


Тогда шаг дискретизации (угол) будет меняться по следующим образом:
Тогда шаг дискретизации (угол) будет меняться по следующим образом:
Строка 57: Строка 60:
::<math>\frac{dn}{dh}=grad~n</math> - изменение коэффициента преломления с высотой.
::<math>\frac{dn}{dh}=grad~n</math> - изменение коэффициента преломления с высотой.
:<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==
==Основной цикл программы | Вариант 1==
Строка 65: Строка 67:


===Основное течение===
===Основное течение===
#<math>S \leftarrow </math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Первичный источник|Первичный источник()]].Создать()</tt>
#<math>S \leftarrow </math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество первичных источников()</tt>
#Если <math>S \colon ~\varnothing </math>  то ВЫХОД
#Если <math>S \colon ~\varnothing </math>  то ВЫХОД
#<math>\forall ~ s_j \in S</math>
#<math>\forall ~ s_j \in S</math>
Строка 71: Строка 73:
##<math>\forall ~ \omega_n \in</math><tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика()]]</tt>
##<math>\forall ~ \omega_n \in</math><tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика()]]</tt>
###<math>\theta \leftarrow 0</math>
###<math>\theta \leftarrow 0</math>
###<math>\forall ~ \zeta_{\theta} \colon ~ 0 \leqslant \zeta_{\theta} < \left [ N_{\theta~total} 2^{i} \right ]</math>
###<math>\zeta_{\theta} \leftarrow 0</math>
####Если <math> i=0 \vee \zeta_{\theta} \bmod 2 \neq 0</math>
###Если <math>\theta < \pi \wedge (i=0 \vee \zeta_{\theta} \bmod 2 \neq 0)</math>
#####<math>\varphi \leftarrow 0</math>
####<math>\varphi \leftarrow 0</math>
#####<math>\forall ~ \zeta_{\varphi} \colon ~ 0 \leqslant \zeta_{\varphi} < \left [N_{\varphi~total}(\theta) 2^{i} \right ]</math>
####<math>\zeta_{\varphi} \leftarrow 0</math>
######Если <math> i=0 \vee \zeta_{\varphi} \bmod 2 \neq 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>
#####Position <math>\leftarrow</math> <tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция()</tt>
#######Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать(Position, [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Мировая система координат(Вектор<math>(\theta,~\varphi)</math>))</tt>
#####Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать(Position, [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Мировая система координат(Вектор<math>(\theta,~\varphi, 1)</math>))</tt>
#######Distance <math>\leftarrow \infty</math>
#####Distance <math>\leftarrow \infty</math>
#######<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
#####<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
########<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
######<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
#########<tt><math>P' \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость грани())</tt>
#######<tt><math>P' \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость грани())</tt>
#########Если <tt>[[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Принадлежность(<math>P'</math>)</tt>
#######Если <tt>[[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Принадлежность(<math>P'</math>)</tt>
##########Distance' <math>\leftarrow</math><tt> Расстояние(Position, <math>P'</math>)</tt>
########Distance' <math>\leftarrow</math><tt> Расстояние(Position, <math>P'</math>)</tt>
##########Если Distance' <math><</math> Distance
########Если Distance' <math><</math> Distance
###########Distance <math>\leftarrow</math> Distance'
#########Distance <math>\leftarrow</math> Distance'
###########<math>t' \leftarrow t_{mn}</math>
#########<math>t' \leftarrow t_{mn}</math>
###########<math>P \leftarrow P'</math>
#########<math>P \leftarrow P'</math>
#######<math>\forall ~ \rho_k \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек()]]</tt>
#####<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>
######Если <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>\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} ~\wedge~ \overline{(t' \colon ~\varnothing)}</math>
#####Если <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>
######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</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>S \leftarrow S \cup \{s'\}</math>
######<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (\theta, \varphi)}{2^i}</math>
####<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (\theta, \varphi)}{2^i}</math>
####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (\theta)}{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


Строка 104: Строка 108:


==Основной цикл программы | Вариант 2==
==Основной цикл программы | Вариант 2==
'''Геометрическая модель (рей-трейсинг 2)'''.
''Наследует свойства [[Распространение радиоволн ВЧ/Геометрическая модель|Геометрической модели]].''
* Предикат завершения(). При <math>i = 0</math> возвращает истину, иначе возвращает значение функции SubApprox для результатов моделирования не предыдущем и на текущем этапах, а также для включаемого отклонения <math>\Delta</math> и допустимого процента точек <math>k</math>.
===Предусловия===
===Предусловия===
<math>G</math> - входное описание среды распространения моделируемого поля, заданное [[Распространение радиоволн ВЧ/Геометрическая модель|геометрической моделью]].
* <math>G</math> - входное описание среды распространения моделируемого поля, заданное [[Распространение радиоволн ВЧ/Геометрическая модель|геометрической моделью]].
* <math>\Omega</math> - список частот, на которых необходимо провести моделирование.
* <math>E_{end}</math> - критическое значение напряженности, на котором дальнейшая трассировка луча прекращается.
* <math>\Delta</math> - критерий разности между текущим и предыдущим результатом моделирования, при которой можно считать, что поле промоделированно точно.
 
===Основное течение===
===Основное течение===
#<math>\forall ~ s_j \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Первичный источник|Первичный источник()]].Создать()</tt>
#<math>\forall ~ \omega_n \in \Omega</math>
##<math>\forall ~ \omega_n \in</math><tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].[[Распространение радиоволн ВЧ/Тип антенны|Тип антенны()]].[[Распространение радиоволн ВЧ/Амплитудно-частотная характеристика|Амплитудно-частотная характеристика()]]</tt>
##<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>\theta \leftarrow 0</math>
###<math>\forall ~ \zeta_{\theta} \colon ~ 0 \leqslant \zeta_{\theta} < \left [ N_{\theta~total} 2^{i} \right ]</math>
###<math>\zeta_{\theta} \leftarrow 0</math>
####Если <math> i=0 \vee \zeta_{\theta} \bmod 2 \neq 0</math>
###Пока <math>\theta < \pi</math>
#####<math>\varphi \leftarrow 0</math>
####<math>\varphi \leftarrow 0</math>
#####<math>\forall ~ \zeta_{\varphi} \colon ~ 0 \leqslant \zeta_{\varphi} < \left [N_{\varphi~total}(\theta) 2^{i} \right ]</math>
####<math>\zeta_{\varphi} \leftarrow 0</math>
######Если <math> i=0 \vee \zeta_{\varphi} \bmod 2 \neq 0</math>
####Пока <math>\varphi<2\pi</math>
#######<math>\left \{ s',~\theta',~\varphi' \right \} \leftarrow \left \{ s_j,~\theta,~\varphi \right \}</math>
#####Если <math>i=0 \vee \zeta_{\theta} \bmod 2 \neq 0 \vee \zeta_{\varphi} \bmod 2 \neq 0</math>
#######Position <math>\leftarrow</math> <tt> [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Позиция()</tt>
######<math>T'_t</math>.Добавить<math>(s_j,~\theta,~\varphi)</math>
#######Ray <math>\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Луч()]].Создать(Position, [[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].[[Распространение радиоволн ВЧ/Антенна|Антенна()]].Мировая система координат(Вектор<math>(\theta,~\varphi)</math>))</tt>
#####<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (s_j,~\theta,~\varphi)}{2^i}</math>
#######Distance <math>\leftarrow \infty</math>
#####<math>\zeta_{\varphi} \leftarrow \zeta_{\varphi}+1</math>
#######<math>\forall ~ f_m\in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].Множество отражающих объектов()</tt>
####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (s_j,~\theta)}{2^i}</math>
########<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</tt>
####<math>\zeta_{\theta} \leftarrow \zeta_{\theta}+1</math>
#########<tt><math>P' \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость грани())</tt>
#Вернуть Массив<math>\left(\bigsqcup_{t=0}^{P-1}T'_t\right)</math>
#########Если <tt>[[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Принадлежность(<math>P'</math>)</tt>
 
##########Distance' <math>\leftarrow</math><tt> Расстояние(Position, <math>P'</math>)</tt>
===<tt>Trace</tt>===
##########Если Distance' <math><</math> Distance
Функция трассирует луч через геометрическую модель и и фиксирует его прохождение вблизи контрольной точки.
###########Distance <math>\leftarrow</math> Distance'
 
###########<math>t' \leftarrow t_{mn}</math>
#<math>R\leftarrow \infty</math>
###########<math>P \leftarrow P'</math>
#<math>T\leftarrow </math> NaN
#######<math>\forall ~ \rho_k \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Множество контрольных точек|Множество контрольных точек()]]</tt>
#<math>\forall ~ f_m\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>
##<math>\forall ~ t_{mn} \in f_m</math><tt>.Множество отражающих поверхностей()</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>p \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Плоскость())</tt>
#######Если <tt>[[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность<math>(\omega_n,~\theta,~\varphi</math>, Distance, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]</tt><math>)>E_{end} ~\wedge~ \overline{(t' \colon ~\varnothing)}</math>
###Если <tt>[[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t_{mn}</math>]].Принадлежность(<math>p</math>)</tt>
########Angle <tt><math>\leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Угол пересечения([[Распространение радиоволн ВЧ/Грань отражающего объекта|<math>t'</math>]].Плоскость грани())</tt>
####<math>r\leftarrow</math><tt> [[Распространение радиоволн ВЧ/Луч|Ray]].Пробег(<math>p</math>)</tt>
########<math>s_j \leftarrow</math><tt> [[Распространение радиоволн ВЧ/Вторичный источник при рейтрейсинге|Вторичный источник при рейтрейсинге]].Создать([[Распространение радиоволн ВЧ/Источник|<math>s_j</math>]].Напряженность<math>(\omega_n,~\theta,~\varphi</math>, Distance, [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Среда распространения|Среда распространения()]]<math>),</math> Angle, <math>P,~t'</math>)</tt>
####Если <math>r < R</math>
########<math>\theta \leftarrow 0</math>
#####<math>R \leftarrow r</math>
########<math>\varphi \leftarrow 0</math>
#####<math>T \leftarrow t_{mn}</math>
########Переход на шаг 1.1.2.1.2.1.2
#####<math>P \leftarrow p</math>
#######<math>\left \{ s_j,~\theta,~\varphi \right \} \leftarrow \left \{ s',~\theta',~\varphi' \right \}</math>
#<math>\forall ~ O_k \in</math><tt> [[Распространение радиоволн ВЧ/Геометрическая модель|G]].[[Распространение радиоволн ВЧ/Плоскость вывода результатов|Множество плоскостей вывода результатов()]]</tt>
######<math>\varphi \leftarrow \varphi + \frac{\Delta_{\varphi} (\theta, \varphi)}{2^i}</math>
##<tt><math>p \leftarrow</math> [[Распространение радиоволн ВЧ/Луч|Ray]].Пересечение([[Распространение радиоволн ВЧ/Плоскость вывода результатов|<math>O_k</math>]].Плоскость())</tt>
####<math>\theta \leftarrow \theta + \frac{\Delta_{\theta} (\theta)}{2^i}</math>
##Если <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
}
</graphviz>

Текущая версия на 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, )
  3. Переход на шаг 2

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

Сложность

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

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

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

  • Предикат завершения(). При возвращает истину, иначе возвращает значение функции SubApprox для результатов моделирования не предыдущем и на текущем этапах, а также для включаемого отклонения и допустимого процента точек .

Предусловия

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

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

    1. Pre_SCP G.Множество контрольных точек() //Копирование состояния до изменения.
    2. Set_event Preprocessing()
    3. Set_event
      1. Ray Луч().Создать(, )
      2. Trace(Ray, G, )
    4. Postprocessing(G.Множество контрольных точек())
    5. SAcheck SucApprox(G.Множество контрольных точек(), Pre_SCP, )
    6. Если SAcheck
      1. Переход на 1.2
  1. ВЫХОД

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

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

  1. Пустой односвязный список значений .
  2. Геометрическая модель.
  3. Номер итерации
  4. Частота
  5. G.Множество первичных источников()
    1. Если .Антенна().Тип антенны().Амплитудно-частотная характеристика()
      1. Пока
        1. Пока
          1. Если
            1. .Добавить
  6. Вернуть Массив()

Если , и , то есть углы распределены равномерно, таблица может быть реализована в виде массива значений , элементы которого могут заполняться параллельно, без синхронизации. Если же размер таблицы заранее не определен (общий случай), то таблица реализуется связанным списком, добавление элементов в который должно защищаться мьютексом на шаге 4.1.3.1.3.1.1, а алгоритм на заключительном шаге преобразует связанный список в массив с произвольным доступом. Второй путь при параллельном выполнении - создавать таблицы в локальной памяти потока, после выполнения которых - объединять таблицы в массив в основном потоке.

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

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

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

  1. Номер итерации
  2. Частота
  3. Создать массив.
  4. G.Множество первичных источников()
    1. индекс потока.
    2. Если .Антенна().Тип антенны().Амплитудно-частотная характеристика()
      1. Пока
        1. Пока
          1. Если
            1. .Добавить
  5. Вернуть Массив

Trace

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

  1. NaN
  2. G.Множество отражающих объектов()
    1. .Множество отражающих поверхностей()
      1. Ray.Пересечение(.Плоскость())
      2. Если .Принадлежность()
        1. Ray.Пробег()
        2. Если
  3. G.Множество плоскостей вывода результатов()
    1. Ray.Пересечение(.Плоскость())
    2. Если .Принадлежность()
      1. Ray.Пробег()
      2. Если
        1. .Ближайшая контрольная точка()
        2. .Зарегистрировать(Ray, , G.Среда распространения())
  4. Если NaN
    1. Ray.Угол пересечения(.Плоскость())
    2. Ray.Отразить(, G.Среда распространения())
    3. Если Ray.Напряженность
      1. Trace(Ray, G, )

Postprocessing

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

SucApprox

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

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

Сложность

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