курсачи / курсач 3 вар / курсач 3 вар
.docxМИНОБРНАУКИ РОССИИ
Государственное образовательное учреждение
высшего профессионального образования
Санкт-Петербургский государственный электротехнический университет
«ЛЭТИ» им. В.И. Ульянова ( Ленина)
ФАКУЛЬТЕТ ЭЛЕКТРОНИКИ (ФЭЛ)
КАФЕДРА Радиотехнической электроники
КУРСОВАЯ РАБОТА (ПРОЕКТ)
По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ
На тему: Разработка модуля программы анализа электронного прибора
(указывается обобщенная тема)
Вариант № 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. Были получены значения для узлов. Недостатком этого метода в том ,что на итоговой сетке между соседними узлами может образоваться большая разница.