Я пытался отладить эту ошибку в последние несколько дней, я задавался вопросом, есть ли у кого-нибудь совет о том, как действовать.
Я решаю уравнение Пуассона для ступенчатого распределения заряда (общая проблема в физике электростатики / полупроводников) на неоднородной сетке конечного объема, где неизвестные определены на центрах ячеек и потоки на гранях ячеек.
профиль заряда (исходный термин) определяется как:
и граничные условия,
и домен ,
Я использую код, разработанный для решения уравнения адвекции-диффузии-реакции (я сам написал свои заметки здесь, http://danieljfarrell.github.io/FVM ). Уравнение адвекции-диффузии-реакции является более общим случаем уравнения Пуассона. Действительно, уравнение Пуассона можно восстановить, установив скорость адвекции на ноль и удалив переходный член.
Код был протестирован в ряде ситуаций для однородных, неоднородных и случайных сеток и всегда дает разумные решения ( http://danieljfarrell.github.io/FVM/examples.html ) для уравнения адвекции-диффузии-реакции.
Чтобы показать, где код ломается, я сделал следующий пример. Я установил равномерную сетку из 20 ячеек, а затем сделал ее неоднородной , удалив одну ячейку. На левом рисунке я убрал клетку и в правом был удален. Девятая ячейка покрывает область, где термин источника (т.е. заряд) меняет знак. Ошибка появляется, когда сетка неоднородна в области, где термин реакции меняет знак . Как вы можете видеть ниже.
Есть идеи, что может быть причиной этой проблемы? Дайте мне знать, будет ли полезной дополнительная информация о дискретизации (я не хотел вдаваться в подробности этого вопроса).
источник
Ответы:
Кроме того, ваша документация на github просто фантастическая.
Это всего лишь предположение о методах DG, которые могут иметь схожие проблемы, если числовые потоки не выбираются тщательно (я полагаю, что методы FV являются подмножеством методов DG). Если вы используете интерполяцию из центров ячеек для определения своих потоков, то это должно быть эквивалентно использованию среднего значения в качестве числового потока в DG и кусочно-постоянной основе. Для стандартных методов DG для Пуассона это приводит к численно неуникальным решениям - вы можете получить нетривиальное нулевое пространство для дискретного оператора, что, как мне кажется, является причиной ваших проблем во втором примере. См. Эту статью DG для их теории со стороны DG.
Я попытаюсь смоделировать пример для FV, который показывает, как это входит в игру.
Изменить: так вот небольшой пример того, что происходит. Рассмотрим ячейки 1-9 и 11-20, в которыхρ ( x ) = 0 , С правой стороны (11-20) имееме(Икс20) = 0 из-за условия Неймана, который говорит нам от сохранения для этой клетки, что е(Икс19) = … = F(Икс11) = 0 , Поскольку поток является средним значением ячеек, это говорит нам о том, чтоϕ ( x ) постоянен над всеми этими клетками.
С левой стороны (1-9) имееме(Икся + 1) - ф(Икся) = 0 , Еслие( - 10 ) = 0 и мы используем призрачные клетки, то е( - 10 ) =φ9,5-φг ч о с тзнак равноφ9,5 , Сохранение в течение следующих нескольких ячеек дает этое(Икся) = f( - 10 ) =φ9,5 (т.е. постоянный наклон). Однако учтите, что это может быть любой уклон, только постоянный.
Проблема возникает в средней ячейке. Как упоминал Ян, вы отбираете форсировку во второй сетке. Это сбрасывает уравнения баланса в этой точке, дает вам ошибку ве( 10 ) который затем распространяется назад и портит как наклон в левой половине домена, так и значение ϕ ( 9,5 ) ,
Эта чувствительность к ошибкам в форсировании - вот что проблематично - в отличие от методов FEM или FD, которые явно применяют условие Дирхлета вх = - 10 , FV слабо применяет его, используя призрачные узлы. Интуитивно понятно, что слабое наложение узла-призрака аналогично установке условия Неймана на левой границе. Если у вас есть два условия Неймана для задачи диффузии, ваша задача некорректна и имеет неуникальное решение (вы можете добавить любую константу к этой проблеме и все же найти решение). Вы не совсем понимаете это на дискретном уровне, но вы получаете очень чувствительное и зависимое от сетки поведение, как вы видите в своих экспериментах.
источник
Первое, на что стоит обратить внимание, это ваши граничные условия. Поскольку вы можете изменить наклон и значение, у вас нет ни условий Дирихле, ни Неймана.
Тогда каждая прямая - это решение, в котором правая часть равна нулю. Вы получили эту часть.
Ваши потоки, вероятно, зависят отчас , Вы используете правильныйчас где вы ликвидируете клетку?
источник