Останні кілька днів я намагався налагодити цю помилку, і мені було цікаво, чи хтось має поради щодо того, як діяти.
Я розв'язую рівняння Пуассона для розподілу ступінчастого заряду (поширена проблема в електростатиці / фізиці напівпровідників) на нерівномірній сітці з кінцевим об'ємом, де невідомі визначаються на центрах клітин, а потоки на гранях клітин.
профіль заряду (вихідний термін) задається,
і граничними умовами є,
і домен є .
Я використовую код, розроблений для вирішення рівняння адвекційно-дифузійної реакції (я написав, що бачу свої примітки тут, http://danieljfarrell.github.io/FVM ). Рівняння реакції адвекція-дифузія є більш загальним випадком рівняння Пуассона. Дійсно, рівняння Пуассона можна відновити, встановивши швидкість адвекції до нуля і видаливши перехідний додаток.
Код був протестований у ряді ситуацій для рівномірних, неоднорідних та випадкових сіток і завжди дає розумні рішення ( http://danieljfarrell.github.io/FVM/examples.html ) для рівняння реакції адвекція-дифузія-реакція.
Щоб показати, де розбивається код, я зробив наступний приклад. Я встановлюю однорідну сітку з 20 комірок, а потім роблю її неоднорідною , видаляючи одну клітинку. На лівій фігурі я зняв клітинку і в правій було видалено. 9-я комірка охоплює область, де вихідний термін (тобто заряд) змінюється знаком. Помилка з’являється, коли сітка є неоднорідною в області, де термін реакції змінюється знаком . Як видно нижче.
Будь-які ідеї, що могло б викликати це питання? Повідомте мене, чи буде корисна додаткова інформація про дискретизацію (я не хотів містити занадто багато деталей у цьому питанні).