Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчёт(2 задание)

.docx
Скачиваний:
14
Добавлен:
16.04.2015
Размер:
42.29 Кб
Скачать

Минобрнауки России

Санкт-Петербургский государственный политехнический университет

Факультет физики и нанотехнологий

Кафедра физика плазмы

О Т Ч Ё Т

по лабораторной работе №2

Численное моделирование стационарного двумерного процесса

Вариант – В 6

по дисциплине

«Численное моделирование»

Выполнил

студент гр.4101 В.А.Захаров

<подпись>

Руководитель

доцент, к.ф.-м.н. И.Ю.Веселова

<подпись>

«___» __________ 2012 г.

Санкт-Петербург

2012

1) Постановка задачи

2) Аппроксимация уравнения и граничных условий

Введём равномерную сетку :

3) Вид алгебраической системы

Матрица алгебраической системы будет пятидиагональной

4) Выражения для главного члена погрешности аппроксимации уравнения и граничных условий.

(1)

5) Формулировка тестовых задач : с нулевой и не нулевой погрешностью аппроксимации.

А)Тестовая задача с нулевой погрешностью аппроксимации:

Пусть

Подставим u,k в (1),(2)

Тогда, получим что

Б)Тестовая задача с ненулевой погрешностью аппроксимации:

Пусть ,

Тогда используя (1),(2) получим , что

6)Программа на Фортране

program poiss_eq

implicit none

include 'link_fnl_static.h'

parameter nx=20,ny=20 !число узлов по х и у

integer i,j,k

parameter lda=nx+1-2,ldfact=nx+1-2,ncoda=nx-2

real*8 k1,k2,g1,g2,g3,g4,f,kappa3,kappa4,u

real*8 fact(nx+1-2,(nx-2)*ny),rcond,eps

real*8 hx,hy,x(nx),y(nx),ab(nx-2+1,(nx-2)*ny),v((nx-2)*ny),

& b((nx-2)*ny),err((nx-2)*ny)

!ab матрица коэфф инт интерп метода

!v вектор искомых значений ф-ции

!b вектор правой части

!задание интервалов интегрирования и узлов

open(1,file='out.dat')

kappa3=1.0d0

kappa4=1.0d0

! kappa3=-12.0d0

! kappa4=24.0d0

x(1)=1.0d0

x(nx)=4.0d0

y(1)=4.0d0

y(nx)=8.0d0

hx=(x(nx)-x(1))/(nx-1)

hy=(y(nx)-y(1))/(ny-1)

! write(1,*) ' x(i) ',' y(j)'

! write(1,*) x(1),y(1)

do i=2,nx

x(i)=x(i-1)+hx

y(i)=y(i-1)+hy

! write(1,*) x(i),y(i)

end do

write(1,*)

!задание коэфф во внутр точках с учётом гр усл 1 рода по х

do j=2,ny-1

do i=2,nx-1

k=(j-1)*(nx-2)+(i-1)

ab(nx-2+1,k)=hy/hx*(k1(x(i)+0.5d0*hx,y(j))+k1(x(i)-0.5d0*

& hx,y(j)))+hx/hy*(k2(x(i),y(j)+0.5d0*hy)+k2(x(i),y(j)-0.5d0*hy))

if(i.ne.(nx-1)) then

ab(nx-2,k+1)=-hy/hx*k1(x(i)+0.5d0*hx,y(j))

end if

ab(1,k+nx-2)=-hx/hy*k2(x(i),y(j)+0.5d0*hy)

if((3-(nx-2)).le.0) then

b(k)=hx*hy*f(x(i),y(j))

end if

if(i.eq.2) then

b(k)=hx*hy*f(x(i),y(j))+hy/hx*k1(x(i)-0.5d0*hx,y(j))*g1(y(j))

end if

if(i.eq.(nx-1)) then

b(k)=hx*hy*f(x(i),y(j))+hy/hx*k1(x(i)+0.5d0*hx,y(j))*g2(y(j))

end if

end do

end do

!гр усл 3 рода по у c учётом гран условий 1 рода по х

do i=2,nx-1

j=1

k=(j-1)*(nx-2)+(i-1)

ab(nx-2+1,k)=0.5d0*hy/hx*(k1(x(i)+0.5d0*hx,y(j))+k1(x(i)-0.5d0*

& hx,y(j)))+hx/hy*k2(x(i),y(j)+0.5d0*hy)+hx*kappa3

if(i.ne.(nx-1)) then

ab(nx-2,k+1)=-0.5d0*hy/hx*k1(x(i)+0.5*hx,y(j))

end if

ab(1,k+nx-2)=-hx/hy*k2(x(i),y(j)+0.5d0*hy)

if((3-(nx-2)).le.0) then

b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g3(x(i))

end if

if(i.eq.2) then

b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g3(x(i))+0.5d0*hy/hx*k1(x(i)-

& 0.5d0*hx,y(j))*g1(y(j))

end if

if(i.eq.(nx-1)) then

b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g3(x(i))+0.5d0*hy/hx*k1(x(i)+

& 0.5d0*hx,y(j))*g2(y(j))

end if

j=ny

k=(j-1)*(nx-2)+(i-1)

ab(nx-2+1,k)=0.5d0*hy/hx*(k1(x(i)+0.5d0*hx,y(j))+k1(x(i)-0.5d0*

& hx,y(j)))+hx/hy*k2(x(i),y(j)-0.5d0*hy)+hx*kappa4

if(i.ne.(nx-1)) then

ab(nx-2,k+1)=-0.5d0*hy/hx*k1(x(i)+0.5d0*hx,y(j))

end if

if((3-(nx-2)).le.0) then

b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g4(x(i))

end if

if(i.eq.2) then

b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g4(x(i))+

& 0.5d0*hy/hx*k1(x(i)-0.5d0*hx,y(j))*g1(y(j))

end if

if(i.eq.(nx-1)) then

b(k)=0.5d0*hx*hy*f(x(i),y(j))+hx*g4(x(i))+

& 0.5d0*hy/hx*k1(x(i)+0.5d0*hx,y(j))*g2(y(j))

end if

end do

call dlfcqs((nx-2)*ny,ab,lda,ncoda,fact,ldfact,rcond)

call dlfsqs((nx-2)*ny,fact,ldfact,ncoda,b,v)

do j=1,ny

do i=2,nx-2

k=(j-1)*(nx-2)+i-1

err(k)=dabs(v(k)-u(x(i),y(j)))

end do

end do

eps=0.0d0

do i=1,(nx-2)*ny

if(err(i).gt.eps) then

eps=err(i)

end if

end do

write(1,*)

write(1,*)'rcond=',1.0d0/rcond

write(1,*) eps

end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

double precision function k1(x,y)

real*8 x,y

k1=1.0d0

! k1=y*x**2.0d0

end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

double precision function k2(x,y)

real*8 x,y

k2=1.0d0

! k2=y**2.0d0*x

end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

double precision function g1(y)

real*8 y

g1=y

! g1=y**3.0d0

end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

double precision function g2(y)

real*8 y

g2=4.0d0*y

! g2=64.0d0*y**3.0d0

end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

double precision function g3(x)

real*8 x

g3=3.0d0*x

! g3=-768.0d0*x**3.0d0*(1.0d0+x)

end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

double precision function g4(x)

real*8 x

g4=9.0d0*x

! g4=12288.0d0*x**3.0d0*(1.0d0+x)

end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

double precision function f(x,y)

real*8 x,y

f=0.0d0

! f=-12.0d0*x**3.0d0*y**3.0d0*(x+y)

end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

double precision function u(x,y)

real*8 x,y

u=x*y

! u=x**3.0d0*y**3.0d0

end

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

7)Зависимость погрешности решения от числа разбиений интервала интегрирования

Таблица результатов работы программы на тестах (зависимость Чебышёвской нормы погрешности решения от удваивающегося количества разбиений ). N=20

Тест 1

Тест 2

k

1

180

2.025046E-013

----

1428

16.375498

----

2

750

4.334310E-013

0,467

6264

3.8994412

4,20

3

3065

3.659295E-012

0,118

26191

0.9510698

4,10

4

12393

7.304379E-012

0,501

107064

0.2348392

4,05

5

49836

2.994227E-011

0,244

432883

0.0583454

4,02

По результатам теста 2 можно сделать вывод, что разностная схема имеет второй порядок точности, т.к. с увеличением количества разбиений в два раза чебышевская норма погрешности уменьшается в 4 раза. Анализируя результаты теста 1, приходим к выводу, что число обусловленности матрицы алгебраической системы увеличивается пропорционально размерности матрицы. Возрастающее с увеличением числа разбиений число обусловленности объясняет рост чебышевской нормы погрешности.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]