Численное решение краевых задач. Учебно-методическое пособие
.pdf#include "udf.h" DEFINE_SOURCE(heat_source,cell,thread,dS,eqn)
{
real x[ND_ND]; real source;
real PI=4.*atan(1.);
C_CENTROID (x, cell, thread); source = 1619200.*sin(5.*PI*x[0]); dS[eqn] = 0.;
return source;
}
(Для расчета «xy » используйте встроенную функцию «pow(x,y)»). За-
тем выполните команду «Define» -> «User-Defined» -> «Functions» -> «Interpreted…». В окне «Interpreted UDFs» укажите на источниковый файл «source.c» с помощью кнопки «Browse…», затем нажмите
«Interpret», и при отсутствии ошибок «Close». UDF «heat_source» будет добавлена в исполняемый код.
В пункте «Cell Zone Conditions» установите тип «Type»=«solid» для зоны «surface_body», затем нажмите кнопку «Edit», в появившемся окне выберите в списке «Material Name» нужный материал. Активируйте источники тепла «Source Terms». Далее переключитесь на закладку
«Source Terms» -> «Edit», установите число источников «Number of Energy sources»=«1», выберите из списка «udf heat_source» и нажмите
«OK». Подтвердите выбор кнопкой «OK».
В пункте «Boundary Conditions» выберите в списке зон «Zone» левую границу «left» и нажмите «Edit…». На закладке «Thermal» окна
«Wall» выберите «Temperature» в «Thermal Conditions», в поле справа
«Temperature(k)»задайтезначениетемпературы(«300»длятестовойзадачи) и нажмите «OK». Аналогично задайте температуру на правой границе «right» («500» для тестовой задачи).
Впункте «Solution Methods» раздела «Solution» выберите схему второго порядка точности по пространству: «Energy» = «Second Order».
Впункте «Monitors» раздела «Solution» выделите «Residuals» в
списке «Residuals, Statistics and Force Monitors» и нажмите кнопку
«Edit…». В окне «Residual Monitors» задайте абсолютную невязку «1e-8» для уравнения энергии «energy» и нажмите «OK».
В пункте «Solution Initialization» выберите «Hybrid Initialization» и
нажмите кнопку «Initialize». Будут заданы начальные условия.
11
Сохраните проект: «File» -> «Save Project».
5.Выполнение расчета (Fluent). В пункте «Run Calculation» задайте
100 в поле «Number of Iterations» и нажмите кнопку «Calculate». В тек-
стовом окне будет выдана история невязок решаемой системы уравнений, в графическом – история невязки уравнения энергии. По завершении счета убедитесь, что невязка уравнения энергии вышла «на полку».
Впротивном случае продолжите счет, снова нажав кнопку «Calculate». Сохраните проект.
6.Анализ результатов (Fluent). В пункте «Plots» раздела «Results» выберите «XY Plot» в списке «Plots» и нажмите кнопку «Set Up…». Вы-
берите: направление построения графика «Plot Direction X» = «1»;
всписке «Y Axis Function» – «Temperature…», «Static temperature»;
всписке «X Axis Function» – «Direction Vector»; в списке «Surfaces» – «bot». Нажмите кнопку «Plot». Поменяйте способ отображения кривой с помощью кнопки «Curves…», последующего выбора из списка
«Pattern» в появившемся окне «Curves – Solution XY Plot» соединения точек сплошными линиями «---» с установкой цвета «Color» = «background» и нажатия кнопок «Apply», «Close», а затем «Plot» в ис-
ходном окне.
Добавьте график T (x) вдоль верхней границы «top» и убедитесь в его совпадении с графиком вдоль «bot».
Сохраните построенные графики в виде jpeg-файла с помощью
кнопки «Save Picture» . Сохраните полученные данные в виде текстового файла с помощью опции «Write to File».
12
Рассчитайте потоки тепла на границах. В пункте «Reports» раздела
«Results» выберите «Fluxes», в появившемся окне «Fluxes Reports» выберите «Options» = «Total Heat Transfer Rate», «Boundaries» = «left» и
нажмите кнопку «Compute».
В текстовое окно будет выведено значение потока тепла на левой границе. Проведите аналогичные действия для правой границы.
Закройте Fluent. Измените в Meshing число ячеек на 20 и заново проведите расчет («Update») и обработку его результатов (снова открыть
Fluent).
Проведите расчеты задачи вашего варианта для числа ячеек (N 1) 10, 20, 40 и 80. Полученные данные занесите в табл. 2, анало-
гичную табл. 1.
На основании анализа погрешности сделайте вывод о порядке аппроксимации схемы, используемой программой Fluent.
Для числа ячеек (N 1) 20: постройте и сравните графики прибли-
женных решений (МКР и МКО) и точного решения; сравните приближенные и точные значения потоков тепла на границах. Сделайте общие выводы.
ВОПРОСЫ К РАЗДЕЛУ 1
1.Что такое разностная сетка?
2.Вывести формулу правосторонних разностей для аппроксимации 1-й производной.
3.Вывести формулу левосторонних разностей для аппроксимации 1-й производной.
4.Вывести формулу центральных разностей для аппроксимации 1-й производной.
5.Вывести формулу центральных разностей для аппроксимации 2-й производной.
6.Записать метод конечных разностей для ОДУ второго порядка общего вида.
7.Записать метод конечных разностей для одномерного уравнения диффузии. Случай цилиндрической симметрии.
8.Записать метод конечных разностей для одномерного уравнения диффузии. Случай сферической симметрии.
9.Что такое порядок аппроксимации метода?
10.Что такое сеточная сходимость?
13
2. ЧИСЛЕННОЕ РЕШЕНИЕ НАЧАЛЬНО-КРАЕВОЙ ЗАДАЧИ
ДЛЯ УРАВНЕНИЯ ТЕПЛОПРОВОДНОСТИ
ЦЕЛЬ РАБОТЫ
Получить навыки решения начально-краевой задачи для уравнения теплопроводности методами конечных разностей и конечных объемов с помощью собственной программы и специализированного ПО.
ЗАДАНИЕ
Методами конечных разностей (МКР) и конечных объемов (МКО) решить начально-краевую задачу
u |
a |
2u |
, 0 |
x x |
, |
0 t t |
max |
, |
(1) |
||
t |
|
x2 |
|
|
max |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
u(x,0) (x) , |
|
|
|
|
(2) |
|||
|
|
u(0,t) 0, |
u(xmax,t) 0. |
|
|
|
(3) |
||||
Здесь (x) uex(x,0), |
uex(x,t) |
– |
точное решение. |
Варианты заданий |
|||||||
приведены в таблице. Конечное время tmax выбирать не меньше максимального из характерных времен 1 1/(k 2 2a) ,…, входящих в ампли-
тудные части e t/ 1 ,… точного решения: tmax max{ 1, }. Исходные данные приведены в таблице.
Номер |
a , м2/с |
x |
max |
, м |
u |
ex |
(x,t) |
варианта |
|
|
|
|
|
||
1 |
3 |
|
7 |
|
14e 12 2t sin2 x 7e 27 2t sin3 x |
||
|
|
|
|
|
14 |
|
|
|
|
|
|
|
|
Окончание таблицы |
|||
|
|
|
|
|
|
|
|
|
|
Номер |
a , м2/с |
x |
max |
, м |
|
u |
ex |
(x,t) |
|
варианта |
|
|
|
|
|
|
|
||
2 |
3 |
|
7 |
|
|
3e 12 2t sin2 x |
|
||
3 |
4 |
|
6 |
|
12e 36 2t sin3 x 5e 64 2t sin4 x |
||||
4 |
9 |
|
1 |
|
2e 36 2t |
sin2 x 3e 81 2t |
sin3 x |
||
5 |
4 |
|
6 |
|
|
5e 36 2t sin3 x |
|
||
6 |
5 |
|
5 |
|
10e 20 2t sin2 x 3e 45 2t sin3 x |
||||
7 |
2 |
|
2 |
|
4e 18 2t |
sin3 x 5e 32 2t |
sin4 x |
||
8 |
5 |
|
5 |
|
|
7e 20 2t sin2 x |
|
||
9 |
7 |
|
3 |
|
6e 28 2t sin2 x 7e 63 2t sin3 x |
||||
10 |
6 |
|
4 |
|
8e 54 2t |
sin3 x 9e 96 2t |
sin4 x |
||
11 |
9 |
|
9 |
|
|
31e 81 2t sin3 x |
|
||
12 |
3 |
|
1 |
|
30e 27 2t sin3 x 7e 48 2t sin4 x |
||||
13 |
6 |
|
2 |
|
|
be 4 2at sin2 x |
|
||
14 |
6 |
|
3 |
|
|
be 9 2at sin3 x |
|
||
15 |
5 |
|
4 |
|
|
be 16 2at sin4 x |
|
||
16 |
5 |
|
5 |
|
|
be 25 2at sin5 x |
|
||
17 |
4 |
|
6 |
|
|
be 36 2at sin6 x |
|
||
УКАЗАНИЯ
Задача (1)–(3) описывает остывание пластины, предварительно неоднородно нагретой до температуры T0 (x). Точное решение задачи
получено методом разделения переменных.
15
МКР
1.Длярешения(1)используемравномерныерасчетныесеткиповремени и пространству с шагами tmax / Nt и h xmax /(Nx 1) соответ-
ственно ( Nt – количество шагов по времени; Nx – количество узлов по
пространству), а также разностные схемы: явную
|
|
vn 1 |
vn |
|
vn |
2vn vn |
|
|
|
|
|||||
|
|
i |
i |
a |
|
i 1 |
i |
i 1 |
, |
|
|
|
(4) |
||
|
|
|
|
h2 |
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
и неявную с весами (0 1) |
|
|
|
|
|
|
|
|
|
|
|
|
|||
vn 1 vn |
vn 1 |
2vn 1 vn 1 |
|
|
vn |
2vn vn |
|
||||||||
i |
i |
a i 1 |
i |
|
|
i 1 |
a(1 ) |
i 1 |
i |
i 1 |
. |
(5) |
|||
|
|
|
h2 |
|
|||||||||||
|
|
|
h2 |
|
|
|
|
|
|
|
|
|
|
||
Уравнения (4) и (5) записываем для внутренних узлов, т. е. для |
|||||||||||||||
2 i Nx 1. Для граничных узлов из (3) получаем |
|
|
|
|
|||||||||||
|
|
|
vn 1 |
0 , |
vn 1 0. |
|
|
|
|
|
|
|
(6) |
||
|
|
|
1 |
|
|
|
N x |
|
|
|
|
|
|
|
|
Начальные данные (2) определяют решение на временном слое n 0 : |
|||||||||||||||
|
|
v0 (x ), |
i 1,...,N |
x |
. |
|
|
|
|
|
(7) |
||||
|
|
i |
|
i |
|
|
|
|
|
|
|
|
|
|
|
В случае явной схемы выражаем из (4) решение vn 1 |
во внутренних |
||||||||||||||
узлах. |
|
|
|
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
subroutine TEPLO_EXPL(gam,tau,h,t,x,v,Nx) |
|
|
|
|
|
|
|
|
|||||||
! Явная разностная схема для у-ния теплопроводности |
|
|
|
||||||||||||
dimension x(Nx),v(Nx),v1(Nx) |
|
|
|
|
|
|
|
|
|
|
|
|
|||
v1=v ! старое решение |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
v(1)=UL(t) |
! левая граница |
|
|
|
|
|
|
|
|
|
|
|
|
||
do i=2,Nx-1 ! внутренние узлы |
|
|
|
|
|
|
|
|
|
|
|
|
|||
v(i)= !!! самостоятельно! |
|
|
|
|
|
|
|
|
|
|
|
|
|
||
end do |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
v(Nx)=UP(t) |
! правая граница |
|
|
|
|
|
|
|
|
|
|
|
|
||
end |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
В случае неявной схемы (5) СЛАУ для узловых значений vin 1 на
новом временном слое n 1 имеет трехдиагональную матрицу с преоб-
ладанием диагональных элементов и может быть решена методом прогонки.
subroutine TEPLO_IMPL(sigma,gam,tau,h,t,x,v,Nx)
! Неявная разностная схема с весами для у-ния теплопроводности dimension x(Nx),v(Nx),v1(Nx),C(Nx),D(Nx),E(Nx),F(Nx)
v1=v ! старое решение
C(1)= !!!; E(1)= !!!; D(1)= !!!; F(1)=UL(t+tau) ! левая граница do i=2,Nx-1 ! внутренние узлы
C(i)= !!! самостоятельно! E(i)= !!!
D(i)= !!!
F(i)= !!!
end do
C(Nx)= !!!; E(Nx)= !!!; D(Nx)= !!!; F(Nx)=UP(t+tau) ! правая граница call Progon(Nx,C,D,E,F,v)
end
SUBROUTINE PROGON(N,c,d,e,f,x)
!Метод прогонки для СЛАУ
!d(1)*x(1)+e(1)*x(2) =f(1), i=1
!c(i)*x(i-1)+d(i)*x(i)+e(i)*x(i+1)=f(i), 2<=i<=N-1
!c(N)*x(N-1)+d(N)*x(N)=f(N), i=N dimension c(N),d(N),e(N),f(N),x(N),alf(N-1),bet(N-1)
!!!!!! самостоятельно! END
2.Разберите текстпрограммы«Teplo1»(см.ниже),предназначенной длячисленногорешениязадачи(1)–(3)при a 2м2/с, xmax 8м, tmax
=0,03 с,имеющейточноерешение uex(x,t) e 18 2t sin3 x .Впрограмме
предусмотренообращениекпроцедурамявной(«TEPLO_EXPL»)инеявной («TEPLO_IMPL») схемы. Для оценки точности численного решения вычисляются накаждомслоеповремени значение погрешности приближенного решения
|
Nx |
n |
|
2 |
|
n |
h |
|
, |
||
vi |
uex(xi ,tn ) |
|
|||
|
i 1 |
|
|
|
|
а также максимальная погрешность |
max max n . |
||||
|
|
|
0 n N |
|
|
17
3. Для явной схемы (4) убедитесь в достаточности выполнения условия устойчивости схемы a / h2 1/ 2 : выбирая 1/2 и 1/2
( 10 3...10 1 ), контролируйте изменение погрешности max . В случае
неустойчивости наблюдается резкий (на |
несколько порядков) рост |
max . Для 0.5 постройте зависимость |
max (h) при Nx 201, 401, |
801 и сделайте вывод о порядке точности схемы. |
|
4. Для неявной схемы (5) при 1/2 |
убедитесь в ее устойчивости |
при 1, 5, 10. Задайте 1 и путем изменения ( 0,25, 0.5, 0,75, 1)
покажите, что схема Кранка–Николсона ( 0,5) имеет действительно лучшую точность. Задайте 1/2 и путем изменения покажите, что
наилучшаяточностьдостигаетсяпри opt 1/2 1/(12 ) .Постройте, как и в пункте 3, зависимость max (h) для схемы Кранка–Николсона и практически оцените порядок ее точности.
program Teplo1
!Решение начально-краевой задачи для у-ния теплопроводности
!ut=a*uxx+F(x,t), 0<x<xmax, 0<t<tmax
!u(x,0)=PHI(x)
!u(0,t)=UL(t)
!u(xmax,t)=UP(t)
!методом конечных разностей
use GrafLib
parameter(Nx=201) ! число узлов по пр-ву dimension x(Nx),v(Nx),v1(Nx),u(Nx) common /b1/ pi
pi=4*atan(1.)
a=2
xmax=8. h=xmax/(Nx-1) tmax=0.03
gam=0.5 ! диффузионное число Куранта sigma=0.5 ! степень неявности tau=gam*h**2/a
print*,' h=',h,' tau=',tau
Nt=tmax/tau+0.5 ! число шагов по времени nprint=Nt/10; if(nprint==0)nprint=1 ! частота вывода t=0 ! начальные данные
18
do i=1,Nx x(i)=(i-1)*h u(i)=Uex(x(i),t) v(i)=PHI(x(i)) end do
xgmin=0; xgmax=dble(xmax) ygmin=minval(u); ygmax=maxval(u) call GrafInit(1,'Temperature evolution') ii=clickmenuqq(QWIN$TILE)
call Axis('x','u,v',0,1d-2) call Grid(5,4,0)
write(*,'(a4,a8,a11)')'n','t','del'
delmax=0.
do n=0,Nt ! цикл по времени
del=sqrt(h*sum((u-v)*(u-v))) ! погрешность на предыдущем слое if(del>delmax)delmax=del
if(mod(n,nprint)==0) then ! вывод данных write(*,'(i6,2(1pe11.4))')n,t,del
call Plot(dble(x),dble(u),1,0,1) call Plot(dble(x),dble(v),2,0,1) end if
call TEPLO_EXPL(gam,tau,h,t,x,v,Nx) ! решение по явной схеме
! call TEPLO_IMPL(sigma,gam,tau,h,t,x,v,Nx) ! решение по неявной схеме t=t+tau
do i=1,Nx u(i)=Uex(x(i),t) end do
end do
write(*,*)' delmax=',delmax ! максимальная погрешность end
function PHI(x)
! начальные данные common /b1/ pi phi=sin(3*pi*x)
end
function UL(t)
! температура левой границы
UL=0
End
19
function UP(t)
! температура правой границы
UP=0.
End
function FF(x,t) ! источник тепла
FF=0
End
function Uex(x,t) ! точное решение common /b1/ pi
Uex=exp(-18*pi**2*t)*sin(3*pi*x) end
Ниже на рисунках представлены результаты расчетов тестовой задачи по явной разностной схеме соответственно при 0,5
( max 1,789 10 2 ) и 0,55 ( max 2,3936).
Пример устойчивого расчета ( 0,5)
20
