Скачиваний:
7
Добавлен:
28.04.2022
Размер:
340.54 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Государственное образовательное учреждение

высшего профессионального образования

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

«ЛЭТИ» им. В.И. Ульянова ( Ленина)

ФАКУЛЬТЕТ ЭЛЕКТРОНИКИ (ФЭЛ)

КАФЕДРА Радиотехнической электроники

КУРСОВАЯ РАБОТА (ПРОЕКТ)

По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ

На тему: Разработка модуля программы анализа электронного прибора

(указывается обобщенная тема)

Вариант № 3

Выполнил

Оценка

студент гр. №

8201

Проверил

Синев А. Е.

Дата

САНКТ-ПЕТЕРБУРГ

2022 г.

ЗАДАНИЕ № 3 на курсовую работу

По дисциплине: __________ ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ

Вариант № 3.

Название курсовой работы: Модуль расчёта пространственного заряда PIC-методом для ячеек конечно-разностной схемы.

Содержание работы: Разработка алгоритма и программы на MATLAB для численного расчёта пространственного заряда с использованием PIC-метода для параллелепипеда.

Исходные данные: 1) Координаты и размеры ячеек-параллелепипедов. 2) Набор трубок тока в виде последовательностей отрезков прямой с заданными параметрами: – координаты концов отрезков; – распределение заряда на каждом отрезке.

Результаты работы: 1. Программа расчёта пространственного заряда. 2. Методика тестирования и отладки программы.

Литература: 1. Internet. 2. Р. Хокни, Дж. Иствуд Численное моделирование методом частиц. – М.: Мир, 1987.

Постановка задачи для численного расчёта пространственного заряда с использованием PIC-метода для параллелепипеда

Требуется построить программу рассчитывающие PIC-методом поверхностный заряд. Поверхностный заряд формируется трубками определенной длины. PIC метод заключается в том что узел берет значения заряда к площади входящей к соответствующей ему ячейки.

Порядок проектирования

Исходя из заданных параметров, необходимо выполнить следующие проектные процедуры:

1. Создание функции по расчету пересечения площади трубки и ячеек.

2. Создание основной программы где вызывается функция

3. Определение значения узлов в основной программе

4. График значений узлов

ПРОЕКТИРОВАНИЕ

1)Функция по расчету пересечения площади трубки и ячеек.

На вход функции подается

хx0- x левого нижнего угла ячейки

yy0- y левого нижнего угла ячейки

w- толщина ячейки

h-высота ячейки

dx-шаг прямоугольников которыми мы выкладываем площадь для расчета интеграла

r –радиус окружности

x0,y0 –координаты центра окружности.

Sum – сумма площадей прямоугольников которыми мы выкладываем площадь для расчета интеграла

i-число 1,2,3 для изменения цвета.

Важно что нижняя граница ячейки определяется как yy0 , а в верхняя yy0+h

Ввиду особенности матлаба , окружность это совокупность двух прямых , верхняя половина:

y1 = sqrt(r^2 - (x - x0)^2)+y0;, а нижняя

y2 = -sqrt(r^2 - (x - x0)^2)+y0;

function sum = mykavadrat(xx0,yy0,x,w,h,dx,r,x0,y0,sum,i)

rectangle('Position',[xx0 yy0 w h]);%рисуем ячейку

while(x<xx0+w)% идем пока не выйдем из ячейки

if(x>xx0)&&(x<xx0+w)% смотрим что х в ячейке

if(x>x0-r)&&(x<x0+r) %смотрим что х в окружности

y1 = sqrt(r^2 - (x - x0)^2)+y0;

if(y1<yy0)

while (y1<yy0)&&(x<x0+r)

y1 = sqrt(r^2 - (x - x0)^2)+y0;

x=x+dx;

end

end

y2 = -sqrt(r^2 - (x - x0).^2)+y0;

if(y1<yy0+h)

if(y2>yy0)

ds=dx*(y1-y2);

sum=sum+ds;

pos=[x y2 dx (y1-y2)];

if(i==1)

rectangle('Position',pos,'EdgeColor','r');

end

if(i==2)

rectangle('Position',pos,'EdgeColor','b');

end

if(i==3)

rectangle('Position',pos,'EdgeColor','g');

end

if(i==4)

rectangle('Position',pos,'EdgeColor','y');

end

end

if(y2<yy0)

ds=dx*(y1-yy0);

if ds>0

sum=sum+ds;

pos=[x yy0 dx (y1-yy0)];

if(i==1)

rectangle('Position',pos,'EdgeColor','r');

end

if(i==2)

rectangle('Position',pos,'EdgeColor','b');

end

if(i==3)

rectangle('Position',pos,'EdgeColor','g');

end

if(i==4)

rectangle('Position',pos,'EdgeColor','y');

end

end

end

end

if(y1>yy0+h)

if(y2<yy0)

ds=dx*(yy0+h-yy0);

if ds>0

sum=sum+ds;

pos=[x yy0 dx (yy0+h-yy0)];

if(i==1)

rectangle('Position',pos,'EdgeColor','r');

end

if(i==2)

rectangle('Position',pos,'EdgeColor','b');

end

if(i==3)

rectangle('Position',pos,'EdgeColor','g');

end

if(i==4)

rectangle('Position',pos,'EdgeColor','y');

end

end

end

if(y2>yy0)

ds=dx*(yy0+h-y2);

if ds>0

sum=sum+ds;

pos=[x y2 dx (yy0+h-y2)];

if(i==1)

rectangle('Position',pos,'EdgeColor','r');

end

if(i==2)

rectangle('Position',pos,'EdgeColor','b');

end

if(i==3)

rectangle('Position',pos,'EdgeColor','g');

end

if(i==4)

rectangle('Position',pos,'EdgeColor','y');

end

end

end

end

end

end

x=x+dx;

end

axis([0 50 0 50]);

end

Большая часть условий были найдены путем тестов , благодаря графике

2) Создание основной программы, где вызывается функция

clear all, close all,

x0 = 20;

y0 = 20;

r = 5;%По условию окружность меньше ячейки

w=10;

l=10;%длина трубки

v=10*10^4;%скорость электрона

t=l/v;

e=1.9*10^(-19);

N=1000;% количесвто частиц

r0=N/t*e;%заряд

h=10;

xxn0=2;

n=3;

peresy=0;

dy=0.01;

yyn0=1;%координаты угла ячейки

summas=zeros(n*n,n*n);

x = x0-r:0.01:x0+r;

y=yyn0;

ds=0;

y1 = sqrt(r^2 - (x - x0).^2)+y0;

y2 = -sqrt(r^2 - (x - x0).^2)+y0;

plot(x,y1,x,y2); axis square

rectangle('Position',[xxn0 yyn0 w h]);

dx=0.01;

ii=1;

jj=1;

yy0=0;

xx0=0;

i=1;

for yy0=yyn0:h:yyn0+n*h

for xx0=xxn0:w:xxn0+n*w

%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

if(i==4)

i=1;

end

if(ii==n+2)

ii=1;

end

if(jj==n+2)

jj=1;

end

x=xx0;

sum=0;

sum=mykavadrat(xx0,yy0,x,w,h,dx,r,x0,y0,sum,i);

summas(jj,ii)=sum;

if (sum~=0)

summas(jj,ii)=r/summas(jj,ii);

end

i=i+1;

ii=ii+1;

end

%i=i+1;

jj=jj+1;

sum(y,x)=0;

xx0=xxn0;

end

hold off;

[X,Y]=meshgrid(1:1:n*n , 1:1:n*n);

figure; mesh(X,Y,summas);

Основную часть программы занимает этот цикл

for yy0=yyn0:h:yyn0+n*h

for xx0=xxn0:w:xxn0+n*w

%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

if(i==4)

i=1;

end

if(ii==n+2)

ii=1;

end

if(jj==n+2)

jj=1;

end

x=xx0;

sum=0;

sum=mykavadrat(xx0,yy0,x,w,h,dx,r,x0,y0,sum,i);

summas(jj,ii)=sum;

if (sum~=0)

summas(jj,ii)=r0/summas(jj,ii);

end

i=i+1;

ii=ii+1;

end

%i=i+1;

jj=jj+1;

sum(y,x)=0;

xx0=xxn0;

end

Здесь после того как указана разрядность матрицы n , мы идем от ячейки к ячейки вызывая функцию mykavadrat(«мой квадрат») в результате работы функции закрашивается пересечении окружности и ячейки , накапливается сумма которую мы записываем в массив . Далее мы меняем индексы для массива и i что бы изменить цвет.в этом же цикле происходит определения значений узлов

if (sum~=0)

summas(jj,ii)=r0/summas(jj,ii);

end

Выходные данные и тесты.

Одинаковые цвета по диагонали это не суммирующиеся площади , просто только три цвета используется.

Рис.1 Результат при X0=0 Y0=20 R=5

Рис.2 Результат при X0=30 Y0=20 R=5

Вывод:

Рис.3 Результат при X0=30 Y0=20 R=1

Рис.3 Результат при X0=30 Y0=20 R=1

Вывод Была разработана программа для расчет PIC методом в MATLAB. Были получены значения для узлов. Недостатком этого метода в том ,что на итоговой сетке между соседними узлами может образоваться большая разница.

Соседние файлы в папке курсач 3 вар