курсачи / Kursovaya_Rabota_PSM_EKB_Maltsev_4201
.docxМИНОБРНАУКИ РОССИИ
Государственное образовательное учреждение
высшего профессионального образования
Санкт-Петербургский государственный электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
ФАКУЛЬТЕТ ЭЛЕКТРОНИКИ (ФЭЛ)
КАФЕДРА Радиотехнической электроники
КУРСОВАЯ РАБОТА (ПРОЕКТ)
По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ
На тему: Разработка модуля программы анализа электронного прибора
(указывается обобщенная тема)
Вариант № 4
Выполнил |
|
|
Оценка |
|
студент гр. № |
4201 |
|
Проверил |
Синев А. Е. |
|
Мальцев С.В. |
|
|
(ФИО) |
|
(ФИО) |
|
Дата |
|
САНКТ-ПЕТЕРБУРГ
2018 г.
ЗАДАНИЕ на курсовую работу
По дисциплине: ПРОГРАММНЫЕ СРЕДСТВА МОДЕЛИРОВАНИЯ ЭЛЕКТРОННОЙ КОМПОНЕНТНОЙ БАЗЫ
Вариант № 4.
Название курсовой работы: |
Модуль расчёта пространственного заряда CIC-методом для конечно-разностной ячейки. |
Содержание работы: |
Разработка алгоритма и программы на С++ для численного расчёта пространственного заряда с использованием CIC-метода для параллелепипеда . |
Исходные данные: |
1) Координаты и размеры ячеек-параллелепипедов. 2) Набор трубок тока в виде последовательностей отрезков прямой с заданными параметрами: – координаты концов отрезков; – распределение заряда на каждом отрезке. |
Результаты работы: |
1. Программа расчёта пространственного заряда. 2. Методика тестирования и отладки программы. |
Литература: |
1. Internet. 2. Р. Хокни, Дж. Иствуд Численное моделирование методом частиц. – М.: Мир, 1987. |
1.Метод Cloud in Cell (CIC)
Существует несколько методов вычисления плотности заряда по координатам моделирующих частиц. Самым простым из них является метод «ближайшего пространственного узла» («nearest grid point» или сокращенно NGP). В этом методе полный заряд точечной частицы приписывается ближайшему узлу пространственной сетки. Эта процедура распределения заряда может быть представлена в виде схемы, изображенной на рисунке 1
Рис 1
Существует схема более плавного распределения заряда по узлам сетки, которая называется методом «облаков в ячейке» («cloud-in-cell» или сокращенно CIC). В этой схеме частицы представляются «прозрачными» заряженными облаками, способными проходить друг сквозь друга. Они могут иметь любую удобную форму и распределение плотности заряда. Метод облаков сглаживает флуктуации, свойственные методу NGP.
В CIC-методе необходимо определить процедуру вычисления распределения плотности заряда в плазме, а также вычисления электрического поля, действующего на облако. Простейшим методом вычисления плотности заряда является разделение заряда облака по нескольким узлам сетки согласно процедуре «весового распределения по площадям» («area-weighted»). Следуя этой процедуре, мы определяем вклад каждой частицы в ближайшие узлы пространственной сетки пропорционально частям облака (рис.2)
Рис.2
Теперь мы увидим, как такое зарядовое перераспределение дискретизируется, принимая:
Функция MOD в программном пакете MatLab нахождения числа по некоторому модулю.
MOD(X,Y) = X - n * Y, где n = floor(X/Y).
Примеры (4 различных случая, соответствующих различным комбинациям знаков делимого и делителя):
1) mod(11,7) = 4;
2) mod(-11,7) = 3
3) mod(11,-7) = -3
4) mod(-11,-7) = -4
Для случая на рисунке 2 (серая область) имеем:
2. Программная реализация в среде Matlab
clc;
clear all;
q=1;
% ???????? ???????
data=load('Positions_Disk.dat');
numStars=numel(data(:,1));
% ??????? ?????
numPoints=32;
% ???????? ? ?????????
x0=linspace(min(data(:,1)),max(data(:,1)),numPoints);
y0=linspace(min(data(:,2)),max(data(:,2)),numPoints);
% ???????? ????? ??? ??????????
[x, y]=meshgrid(x0,y0);
% ?????????? ???????? ???? ?????
Max_x=max(data(:,1));
Min_x=min(data(:,1));
Max_y=max(data(:,2));
Min_y=min(data(:,2));
if (Max_x>abs(Min_x))
space_x=Max_x/(numPoints/2);
add_correction_x=0;
else
space_x=abs(Min_x)/(numPoints/2);
add_correction_x=1;
end
if (Max_y>abs(Min_y))
space_y=Max_y/(numPoints/2);
add_correction_y=0;
else
space_y=abs(Min_y)/(numPoints/2);
add_correction_y=1;
end
density(1:numPoints,1:numPoints)=0.0;
% ?????????? ????????? ??? ?????? ?????? ??????? CIC
for i=1:numStars
%?????????? ??????? ????? ?? ?????
node_x = floor(data(i,1)/space_x) + (numPoints/2 + add_correction_x);
node_y = floor(data(i,2)/space_y) + (numPoints/2 + add_correction_y);
% ?????????? ???????, ????????? fmod
dx = mod(abs(data(i,1)),space_x)/space_x;
dy = mod(abs(data(i,2)),space_y)/space_y;
tx = 1.0 - dx;
ty = 1.0 - dy;
% ?????? ? (i, j), ?????????????? ?? ???????
if ((dx < 0.5) && (node_x == 1))
frac_x = dx;
neighboor_x = 0;
epsilon_x = 0;
elseif ((dx > 0.5) && (node_x == numPoints))
frac_x = dx - 0.5;
neighboor_x = 0;
epsilon_x = 0;
elseif (dx < 0.5)
frac_x = dx + 0.5;
neighboor_x = -1;
epsilon_x = 1;
else
frac_x = tx + 0.5;
neighboor_x = 1;
epsilon_x = 1;
end
if ((dy < 0.5) && (node_y == 1))
frac_y = dy;
neighboor_y = 0;
epsilon_y = 0;
elseif ((dy > 0.5) && (node_y == numPoints))
frac_y = dy - 0.5;
neighboor_y = 0;
epsilon_y = 0;
elseif (dy < 0.5)
frac_y = dy + 0.5;
neighboor_y = -1;
epsilon_y = 1;
else
frac_y = ty + 0.5;
neighboor_y = 1;
epsilon_y = 1;
end
% ??????? ?????????
density(node_x,node_y) = density(node_x,node_y) + q*(frac_x*frac_y)/(space_x*space_y);
density(node_x+neighboor_x,node_y) = density(node_x+neighboor_x,node_y) + q*(epsilon_x*(1.0-frac_x)*frac_y)/(space_x*space_y);
density(node_x,node_y+neighboor_y) = density(node_x,node_y+neighboor_y) + q*(frac_x*epsilon_y*(1.0-frac_y))/(space_x*space_y);
density(node_x+neighboor_x,node_y+neighboor_y) = density(node_x+neighboor_x,node_y+neighboor_y) + q*(epsilon_x*(1.0-frac_x)*epsilon_y*...
(1.0-frac_y))/(space_x*space_y);
end
figure(1); %density
contourf( x0,y0, density);
hold on;
colorbar;
contour( x0,y0, density,'LineWidth',2);
hold off;
3. Тестирование программы.
Рис.3 Распределение плотности заряда по сетке 8х8 для четырех частиц
Рис.4 Распределение плотности заряда по сетке 32х32 для четырех частиц
4. Список литературы.
1. Р. Хокни, Дж. Иствуд Численное моделирование методом частиц. – М.: Мир, 1987.
2. Федоренко Р.П. Введение в вычислительную физику: Учебное по-собие - М.: Изд-во МФТИ, 1994.
3. http://www.cyberforum.ru