Я пытался отладить эту ошибку в последние несколько дней, я задавался вопросом, есть ли у кого-нибудь совет о том, как действовать.
Я решаю уравнение Пуассона для ступенчатого распределения заряда (общая проблема в физике электростатики / полупроводников) на неоднородной сетке конечного объема, где неизвестные определены на центрах ячеек и потоки на гранях ячеек.
профиль заряда (исходный термин) определяется как:
и граничные условия,
и домен ,
Я использую код, разработанный для решения уравнения адвекции-диффузии-реакции (я сам написал свои заметки здесь, http://danieljfarrell.github.io/FVM ). Уравнение адвекции-диффузии-реакции является более общим случаем уравнения Пуассона. Действительно, уравнение Пуассона можно восстановить, установив скорость адвекции на ноль и удалив переходный член.
Код был протестирован в ряде ситуаций для однородных, неоднородных и случайных сеток и всегда дает разумные решения ( http://danieljfarrell.github.io/FVM/examples.html ) для уравнения адвекции-диффузии-реакции.
Чтобы показать, где код ломается, я сделал следующий пример. Я установил равномерную сетку из 20 ячеек, а затем сделал ее неоднородной , удалив одну ячейку. На левом рисунке я убрал клетку и в правом был удален. Девятая ячейка покрывает область, где термин источника (т.е. заряд) меняет знак. Ошибка появляется, когда сетка неоднородна в области, где термин реакции меняет знак . Как вы можете видеть ниже.
Есть идеи, что может быть причиной этой проблемы? Дайте мне знать, будет ли полезной дополнительная информация о дискретизации (я не хотел вдаваться в подробности этого вопроса).