II.3 Метод Монте-Карло пробной частицы для свободномолекулярного режима (Нестреров С.Б., Васильев Ю.К., Андросов А.В. Методы расчета вакуумных систем), страница 2
Описание файла
Файл "II.3 Метод Монте-Карло пробной частицы для свободномолекулярного режима" внутри архива находится в папке "Нестреров С.Б., Васильев Ю.К., Андросов А.В. Методы расчета вакуумных систем". Документ из архива "Нестреров С.Б., Васильев Ю.К., Андросов А.В. Методы расчета вакуумных систем", который расположен в категории "". Всё это находится в предмете "вакуумная и плазменная электроника" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "вакуумная и плазменная электроника (вакплазэл)" в общих файлах.
Онлайн просмотр документа "II.3 Метод Монте-Карло пробной частицы для свободномолекулярного режима"
Текст 2 страницы из документа "II.3 Метод Монте-Карло пробной частицы для свободномолекулярного режима"
Угловое распределение частиц может быть не только диффузным. Однако, с точки зрения построения программы, при изменении типа углового распределения изменится только одна строка, в которой определяется угол θ (во фрагменте кода переменная T). Подробно о разных типах распределения см. параграф II.3.5.
Траектория полета молекулы представляет собой прямую линию, параметрическое уравнение которой представим в виде
где x , y , z – координаты точки вылета частицы; l, m, n – направляющие косинусы, определяющие направление полета; t – параметр; x, y, z – координаты возможной точки «посадки». Таким образом, выбор направления полета частицы сводится к определению значений направляющих косинусов, которые зависят, во-первых, от положения точки вылета в пространстве (необходимо учитывать тип поверхности вылета – плоскость, цилиндр, конус, сфера и углы наклона касательной плоскости по отношению к глобальным осям), а во-вторых, от описанных выше углов ψ и θ, которые определяют направление вылета с касательной плоскости.
Направляющие косинусы определяются по следующим соотношениям.
Формулы для нахождения направляющих косинусов при вылете с плоскости z=c:
где – углы, определяющие направление вылета
( – значение датчика случайных чисел).
Формулы для нахождения направляющих косинусов при старте с цилиндрической поверхности :
где – углы, определяющие направление вылета
( – значение датчика случайных чисел);
– угол наклона точки (x0, y0) в плоскости XOY.
Формулы для нахождения направляющих косинусов при старте с конической или сферической поверхности:
где – углы, определяющие направление вылета
( – значение датчика случайных чисел);
– угол наклона точки (x0, y0) в плоскости XOY;
– угол наклона точки (x0, z0) в плоскости XOZ или угол между осью OZ и образующей конуса.
Фрагмент кода на языке Паскаль (выполненный в среде Delphi 3), реализующий функцию нахождения направляющих косинусов в зависимости от типа поверхности (аргумент P: 1 – плоскость z = c, 2 – цилиндр, 3 – конус или сфера), углов определяющих направление вылета ψ и θ (вызов процедуры GetAngleDiff) и углов наклона точки вылета и (аргументы A и G соответственно), показан ниже:
procedure UpdateDirect(var P:Integer; A,G:Extended);
var
Psi,Tetta:Extended;
label UpdateDirect1;
begin
UpdateDirect1:
GetAngleDiff(Psi,Tetta); // отдельно вызывать не нужно
Case P of
1:
begin
NCos:=Cos(Tetta);
// Направляющие косинусы в зависимости от
LCos:=Sin(Tetta)*Cos(Psi); // типа поверхности P: 1-плоскость z=С 2-цилиндр x2+y2=r2
MCos:=Sin(Tetta)*Sin(Psi);
// 3-конус, сфера или плоскость Ax+By+Cz+D=0
end;
2:
begin
NCos:=Sin(Tetta)*Sin(Psi);
LCos:=Sin(Tetta)*Cos(Psi)*Cos(A)-Cos(Tetta)*Sin(A);
MCos:=Sin(Tetta)*Cos(Psi)*Sin(A)+Cos(Tetta)*Cos(A);
end;
3:
begin
NCos:=Cos(Tetta)*Sin(G)-Sin(Tetta)*Cos(Psi)*Cos(G);
LCos:=Sin(Tetta)*Sin(Psi)*Sin(A)-Sin(Tetta)*Cos(Psi)*Sin(G)*Cos(A)-Cos(Tetta)*Cos(G)*Cos(A);
MCos:=Sin(Tetta)*Sin(Psi)*Cos(A)+Sin(Tetta)*Cos(Psi)*Sin(G)*Sin(A)+Cos(Tetta)*Cos(G)*Sin(A);
end;
end;
if ((NCos=0) or (LCos=0) or (MCos=0)) then goto UpdateDirect1;
end;
Значения аргументов A и G данной функции можно задавать вручную или при помощи функции. Эта функция должна определять значения этих углов в зависимости от текущих координат частицы и от рода поверхности, на которой эта частица в данный момент находится.
-
Нахождение точки столкновения частицы со стенкой
-
Формирование массива параметров t
-
После того как найдены направляющие косинусы, необходимо найти точки пересечения траектории полета (прямой) с поверхностями системы. Запишем уравнение траектории полета:
В данный момент известными величинами являются координаты точки вылета (x0, y0, z0) и значения направляющих косинусов l, m, n. Для того, чтобы найти точки пересечения этой прямой с поверхностями структуры нужно решить K систем уравнений вида:
где i – номер поверхности структуры, причем 1<i<K.
Решениями этих систем будет массив параметров t. Формулы для нахождения значения параметра t при пересечении разных типов поверхностей показаны ниже.
Формула для нахождения параметра t при пересечении плоскости:
где a, b, c, d – члены уравнения плоскости вида ax + by + cz + d = 0;
x0, y0, z0 – координаты точки вылета; l, m, n – направляющие косинусы траектории полета.
Формула для нахождения параметра t при пересечении цилиндра имеет следующий вид:
где – радиус цилиндрической поверхности; x0, y0, z0 – координаты точки вылета; l, m, n – направляющие косинусы траектории полета.
Формула для нахождения параметра t при пересечении сферы
:
где – радиус сферы; – координаты центра сферы;
x0, y0, z0 – координаты точки вылета; l, m, n – направляющие косинусы траектории полета.
Формула для нахождения параметра t при пересечении конуса
(z-c)2 = ctg2(x2+y2):
где c – координата z вершины конуса; γ – угол между образующей конуса и осью OZ; x0, y0, z0 – координаты точки вылета; l, m, n – направляющие косинусы траектории полета.
Причем для вычисления параметров t пересечения траектории полета со всеми поверхностями используются одни и те же значения как направляющих косинусов, так и координат точки вылета, т. е. имея значения (x0, y0, z0) и l, m, n ищем значения t для всех поверхностей системы. Далее показаны фрагменты кода, реализующие вышеописанные функции нахождения t для различных типов поверхностей:
//Нахождение значения параметра t при пересечении любой
//плоскости, заданной уравнением Ax+By+Cz+D=0
//Аргументы: A, B, C, D – соответствующие члены уравнения //плоскости; X, Y, Z – координаты точки вылета
//(x0, y0, z0); L, M, N – направляющие косинусы l, m, n.
function GetAnyLinearT(var A,B,C,D,X,Y,Z,L,M,N:Extended): Extended;
begin
if ((A*L+B*M+C*N)=0) then GetAnyLinearT:=0 else GetAnyLinearT:=-(A*X+B*Y+C*Z+D)/(A*L+B*M+C*N);
end;
//Нахождение значения параметра t при пересечении
//плоскости, заданной z=C
//Аргументы: C – соответствующий член уравнения
//плоскости; Z – координата точки вылета z0;
//N – направляющий косинус n.
function GetLinearT(var C,Z,N:Extended): Extended;
begin
if (N=0) then GetLinearT:=0 else GetLinearT:=(C-Z)/N;
end;
//Нахождение значения первого параметра t при пересечении
//цилиндра, заданного уравнением x2+y2 =r2
//Аргументы: X, Y – координаты точки вылета x0, y0; L, M – направляющие косинусы l, m;
//R – радиус цилиндра r.
function GetCylinderTP(var X,Y,L,M,R:Extended): Extended;
begin
if ((((X*L+Y*M)*(X*L+Y*M)-(L*L+M*M)*(X*X+Y*Y-R*R))<0) or ((L*L+M*M)=0))
then GetCylinderTP:=0
else GetCylinderTP:=(-(X*L+Y*M)+Sqrt(((X*L+Y*M)*(X*L+Y*M)-(L*L+M*M)*(X*X+Y*Y-R*R))))/(L*L+M*M);
end;
//Нахождение значения второго параметра t при пересечении
//цилиндра, заданного уравнением x2+y2 =r2
//Аргументы: X, Y – координаты точки вылета x0, y0; L, M – //направляющие косинусы l, m; R – радиус цилиндра r.
function GetCylinderTM(var X,Y,L,M,R:Extended): Extended;
begin
if ((((X*L+Y*M)*(X*L+Y*M)-(L*L+M*M)*(X*X+Y*Y-R*R))<0) or ((L*L+M*M)=0))
then GetCylinderTM:=0
else GetCylinderTM:=(-(X*L+Y*M)-Sqrt(((X*L+Y*M)*(X*L+Y*M)-(L*L+M*M)*(X*X+Y*Y-R*R))))/(L*L+M*M);
end;
//Нахождение значения первого параметра t при пересечении
//сферы, заданной уравнением (x-xc)2+(y-yc)2+(z-zc)2=r2
//Аргументы: X, Y, Z– координаты точки вылета
//(x0, y0, z0);
//L, M, N – направляющие косинусы l, m, n;
//XC, YC, ZC – координаты центра сферы (xс, yс, zс); R – //радиус сферы r.
function GetSphereTP(var X,Y,Z,L,M,N,R,XC,YC,ZC:Extended): Extended;
begin
if ((((X-XC)*L+(Y-YC)*M+N*(Z-ZC))*((X-XC)*L+(Y-YC)*M+N*(Z-ZC))-((X-XC)*(X-XC)+(Y-YC)*(Y-YC)+(Z-ZC)*(Z-ZC)-R*R))<0)
then GetSphereTP:=0
else GetSphereTP:=-(L*(X-XC)+M*(Y-YC)+N*(Z-ZC))+Sqrt(((X-XC)*L+(Y-YC)*M+N*(Z-ZC))*((X-XC)*L+(Y-YC)*M+N*(Z-ZC))-((X-XC)*(X-XC)+(Y-YC)*(Y-YC)+(Z-ZC)*(Z-ZC)-R*R));
end;
//Нахождение значения второго параметра t при
//пересечении сферы, заданной уравнением
//(x-xc)2+(y-yc)2+(z-zc)2=r2
//Аргументы: X, Y, Z– координаты точки вылета
//(x0, y0, z0); //L, M, N – направляющие косинусы l, m, n;
//XC, YC, ZC – координаты центра сферы (xс, yс, zс); R –
//радиус сферы r.
function GetSphereTM(var X,Y,Z,L,M,N,R,XC,YC,ZC:Extended): Extended;
begin
if ((((X-XC)*L+(Y-YC)*M+N*(Z-ZC))*((X-XC)*L+(Y-YC)*M+N*(Z-ZC))-((X-XC)*(X-XC)+(Y-YC)*(Y-YC)+(Z-ZC)*(Z-ZC)-R*R))<0)
then GetSphereTM:=0
else GetSphereTM:=-(L*(X-XC)+M*(Y-YC)+N*(Z-ZC))-Sqrt(((X-XC)*L+(Y-YC)*M+N*(Z-ZC))*((X-XC)*L+(Y-YC)*M+N*(Z-ZC))-((X-XC)*(X-XC)+(Y-YC)*(Y-YC)+(Z-ZC)*(Z-ZC)-R*R));
end;
//Нахождение значения первого параметра t при пересечении //конуса, заданного уравнением (z-c)2=ctg2(x2+y2)
//Аргументы: X, Y, Z– координаты точки вылета
//(x0, y0, z0);
//L, M, N – направляющие косинусы l, m, n;
//C – соответствующий член уравнения конуса c; G – угол //в уравнении конуса.
function GetConusTM(var X,Y,Z,L,M,N,C,G:Extended): Extended;
begin
if (((X*L+Y*M-Tan(G)*Tan(G)*N*(Z-C))*(X*L+Y*M-Tan(G)*Tan(G)*N*(Z-C))-(L*L+M*M-Tan(G)*Tan(G)*N*N)*(X*X+Y*Y-Tan(G)*Tan(G)*(Z-C)*(Z-C)))<0)
then GetConusTM:=0
else GetConusTM:=(-(X*L+Y*M-Tan(G)*Tan(G)*N*(Z-C))-sqrt(((X*L+Y*M-Tan(G)*Tan(G)*N*(Z-C))*(X*L+Y*M-Tan(G)*Tan(G)*N*(Z-C))-(L*L+M*M-Tan(G)*Tan(G)*N*N)*(X*X+Y*Y-Tan(G)*Tan(G)*(Z-C)*(Z-C)))))/(L*L+M*M-Tan(G)*Tan(G)*N*N);
end;