Моделирование теплопроводности. Пример 3

Как я говорил ранее, граничные условия первого рода (фиксированная температура стенки) встречается на практике реже, чем условия третьего рода (через коэффициент теплоотдачи). В данной статье я покажу как использовать ГУ второго и третьего рода в openFoam при моделировании теплопроводности при использовании встроенных средств и сторонней библиотеки groovyBC.
Когда я впервые установил openFoam (была версия 1.8), встроенных средств для задания коэффициента теплоотдачи на поверхности не было, это можно было сделать только с помощью сторонней библиотеки groovyBC. Сейчас появилась возможность включать целые куски кода практически в любые места (ГУ, controlDict, blockMeshDict и пр.), что интересно с точки зрения освоения платформы, но на практике зачастую это удобней сделать все также через функции swak4foam. Встроенных граничных условий для задания коэффициента теплоотдачи все также нет.

Сначала я покажу на основе примера №1 возможности встраивания кода в 0/T. См. приложенный файл codedMixedLaplacianFoam.tar.gz. Найдем установившееся распределение температуры в бесконечной пластине (толщина 0,5 м, температуропроводность 1,33e-6 м.кв/с, теплопроводность 0,2 Вт/м*С) при задании граничных условий 3-го рода на одной стенке (температура охлаждающей среды -20 С, коэффициент теплоотдачи 10 Вт/(м.кв*С), и ГУ 2-го рода на другой (тепловой поток 200 Вт). Все значения специально подобраны, чтобы на одной стенке была температура 0 С, на второй 500 С.

Проблем с заданием фиксированного теплового потока в принципе не возникает:

 q = -\lambda \nabla T

т.е зная q и  \lambda задаем фиксированный градиент  \nabla T , все замечательно.

А вот с заданием коэффициента теплоотдачи все интересней.

 \alpha (T_0 - T_c) = -\lambda \frac {T_{cell} - T_c} {\delta}

где  T_0, T_c, T_{cell} температура охлаждающей (нагревающей) среды, температура стенки и температура центра граничной ячейки,  \delta – расстояние от стенки до центра ячейки. Т.к. температура стенки и центра ячейки связаны, то вывести явно выраженную функцию не получится. Поэтому необходимо использовать следующую конструкцию:

 T_c = f T_0 + (1-f)(T_{cell} + {\nabla_\perp T} {\delta} )

где f – функция веса, при f=1 получаем чистые ГУ 1-го рода (Дирихле), при f=0 получаем условия второго рода (Неймана). Получим чему равна функция веса в нашем случае:

 T_c = T_0 + \frac {\lambda}{\alpha \delta} ( T_{cell} - T_c)
 T_c (1 + \frac {\lambda} {\alpha \delta} ) = T_0 + T_{cell} \frac {\lambda} {\alpha \delta}
 T_c = \frac {1} {1 + \frac {\lambda} {\alpha \delta}} T_0 + (1 - \frac {1} {1+ \frac {\lambda}{\alpha \delta}}) T_{cell}
Отсюда получаем f= \frac {1} {1+\frac {\lambda}{\alpha \delta}}, а \nabla_\perp T = 0 , т.е нулевой градиент. Не буду присваивать чужую идею, подсмотрено здесь

Итак, отличия от примера №1 только в 0/T, куда встраиваем код:

На рисунке ниже показано распределение температуры, все точно с расчетными значениями (0 С и 500 С).
f(x)

Далее рассмотрю, как задать ГУ 2-го и 3-го рода через groovyBC, что гораздо проще. Изменим пример №2. На одной стенке зададим тепловой поток q=899,47 Вт/м.кв, на другой стенке коэффициент теплоотдачи alpha=44,97 Вт/м.кв*С и температуру охлаждающей среды t=-20 C. Значения подобраны не абы как, а чтобы получить такое же распределение температур, т.е. температуры стенок 0 С и 800 С, температура между слоями – 641,7 С.
См. приложенный файл groovyBCMyLaplacianFoam.tar.gz
Итак, в чем изменения.
1. Добавим библиотеки в controlDict

2. Отредактируем 0/T. В отличии от встраивания кода можно очень просто использовать переменные из include/initialConditions. Все аналогично расчетам выше, кроме учета влияния температуры на теплопроводность (значения b и T берутся прямо из расчета, что очень удобно).

На рисунке ниже опять сопоставление данных моделирования и аналитического расчета. Совпадает.
f(x)