А вообще, какая там величина этих остаточных ошибок, по отношению к исходной волне?
Если нагрузку прикладывать к внешней границе области, то все нормально: ошибки начинают уменьшаться при увеличении густоты сетки и ширины pml-слоев. В принципе, не особо напрягаясь можно уменьшить величину накладываемых ошибок до 0,5% от максимальной амплитуды волны.
Во-первых, может быть, они и так за пределами устраивающей вас (или заказчиков) погрешности
Я если честно пока сам не знаю, какая там погрешность меня может устраивать, а заказчиков у меня нет никаких.
а во-вторых, может быть, она - как раз расчётная для заданных параметров pml-слоя?
В том то и дело, что я не знаю, как определять погрешность для pml-слоев. В зарубежной литературе я читал, что pml-слои могут отражать при некоторых ситуациях до 5% падающих волн, но чтобы они накладывали ошибки на все решение сразу – я такого нигде не находил. В моем же случае они не отражают волны, а именно накладывают ошибки на все решение.
Действительно, странно, особенно то, что "иголки" появляются ещё до того, как волна успела фактически дойти до pml-слоя. Боюсь, ответ в каких-то нюансах численной схемы, как основной, так и для реализации pml-слоя. Что-то на что-то "незаконно" влияет. Подобные "иголки" типичны для несходящихся численных методов, но ничего конкретнее сказать не могу.
Мне кажется, я понял природу появления этих ”иголок”.
Рассмотрим решение в обычной постановке.
Когда мы прикладываем нагрузку с внешней стороны, то на первых временных шагах у нагружаемой границы формируются пики ошибок. По мере прохождения времени волна проходит вправо вместе с этими маленькими ошибками, которые затем сглаживаются и формируют маленькую волну, которая находится перед основной. Причем эта маленькая волна так и остается в решении (
http://savepic.su/1578455.jpg). Если делать сетку гуще, то ошибки уменьшаются. По мере продвижения волны вправо градиент напряжений в элементах, прилегающей к нагружаемой плоскости уменьшается, так как соседние к ним элементы набирают все большее и большее напряжение. В результате меньшего градиента напряжений больше никаких пиков не возникает, и решение становится устойчивым (
http://savepic.su/1624534.jpg).
Но, ежели мы прикладываем нагрузку внутри области вдоль одной прямой линии узлов, то в элементах, которые касаются линии нагруженных узлов своей правой стороной, возникает растяжение, а в элементах, которые касаются линии своей левой стороной – сжатие. В результате чего происходит образование двух волн: одна вправо (волна сжатия), другая влево (волна растяжения) . В итоге получается, что на линии нагруженных узлов, напряжения равны нулю, а на соседних линиях напряжения равны друг другу, но противоположны по знаку. И по мере возрастания нагрузки картина не меняется, а лишь усугубляется. На линии нагрузки напряжения так и будут оставаться нулевыми, а на соседних линиях лишь увеличиваться. Все это приводит к образованию гигантского градиента напряжений в элементах, граничащих с линией нагружения, и как результат – приводит к огромному острому пику вдоль линии нагрузки (
http://savepic.su/1636822.jpg). Причем, сгущение сетки никак не может улучшить данное стечение обстоятельств (
http://savepic.su/1634774.jpg,
http://savepic.su/1628630.jpg). Когда же нагрузка полностью снимается градиент напряжений уменьшается и ошибок больше не возникает, а предыдущие ошибки сглаживаются.
Если теперь рассмотреть решение в постановке pml с нагруженной внешней стороной, то мы увидим схожую с обычной постановкой картину (
http://savepic.su/1630678.jpg). Однако теперь ошибки формируются не виде одного пика, а сразу нескольких (
http://savepic.su/1623510.jpg). Следует отметить, что по мере прохождения времени ошибки не сглаживаются в маленькую волну, как в обычном решении, а растягиваются в виде маленьких иголок на все решение. Причем по абсолютному значению, в конце концов, ошибки меньше чем в обычном решении, хоть они размазаны по всей области.
Теперь если приложить нагрузку внутри области происходит то, что я уже показывал ранее на картинках. Ошибки формируются при нагружении, а затем размазываются на все решение.
Отсюда следует вывод –генерировать нагрузку внутри области решения с помощью лишь одной линии нагружения нельзя – потому что это ведет к слишком большим ошибкам.
Но вот из-за чего решение в постановке pml так себя ведет пока еще вопрос открытый.
В какой степени солвер вам подконтролен? Вы его целиком написали сами, используете написанный коллегой, используете готовый продукт?
Солвер мне подконтролен полностью, кроме решения СЛАУ (здесь я использую солвер Matlab'a). Напсал я его целиком, даже программу решения СЛАУ писал, только использую все равно Matlab'овскую.
Отдельно тот же вопрос по генерации сетки. И чуть поподробнее, как вы pml-слой задаёте?
Программу генерации области решения я написал полностью сам. Однако, писал я ее, когда только начинал изучать программирование (полтора года назад). Писал по средствам метода проб и ошибок, мало что понимая в каких-либо парадигмах программирования и организации программ. Поэтому, она получилась очень плохая – работает медленно, возможности ограничены, дает сбои и т.д. и т.п. Поэтому, когда передо мной встал вопрос о решении задач с использованием pml-слоев, для которых необходимо создавать дополнительные зоны решения я решил не использовать для этих целей свою программу, а использовать готовый генератор сеток Matlab'a. С помощью него я создаю дополнительные зоны pml, на тех границах, в которых мне это необходимо. В принципе, можно целиком использовать генератор Matlab'a для создания всей сетки, но я по старинке все равно использую свою программу, так как в дальнейшем планирую все равно заново написать целиком собственный генератор для своей задачи, включая и генерацию pml-слоев.
Это тяжко. Но может быть, он хотя бы порекомендует своего коллегу, к которому вы могли бы обратиться?
Да не, никто со мной просто так возится, не будет, все-таки вопросы не самые простые возникают, во все надо целиком вникать, а это никому не надо.
-- Чт мар 15, 2012 09:04:42 --1. Полностью окружить расчетную область одинаковыми по толщине PML слоями (в идеале интерференции волн вообще не должно быть)
2. Поставить в центр расчетной области точечный источник (чтобы исключить 1 проблему)
Я так уже делал. В середине области вырезал дырку, к которой приложил нормальную нагрузку, а все границы области окружил pml-слоями. В результате образовалась волна в виде окружнсти, которая дошла до pml-слоев и в них полностью затухла. Также на все решение наложились ошибки.
Далее:
Посмотреть как будут работать PML слои в зависимости от их толщины.
Тоже делал. Чем слой толще - тем меньшие ошибки накладываются.