2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Определение ускорения частиц
Сообщение17.11.2016, 21:49 
Заслуженный участник


29/12/14
504
Здравствуйте, есть задание. Вкратце формулировка такая:

Дан кусок кода, состоящий из двух функций. Суть кода: первая приведённая функция добавляет частицу в одномерное поле плотности, затем решается уравнение Пуассона, которое определеяет по полученному полю плотности гравитационный потенциал, а затем (вторая приведённая функция) происходит вычисление ускроений частиц.

а) Считая, что все части кода, которые не показаны, работают нормально, укажите, какие проблемы могут возникнуть в работе программы?
б) Исправьте вторую функцию так, чтобы всё работало нормально. Желательно в виде псевдокода.
в) Будут ли работать эти функции с периодическими граничными условиями? Если нет, то что нало изменить?

код: [ скачать ] [ спрятать ]
Используется синтаксис C
void add_particle_to_density_field(double rho_field[N], /* the density field discretised on a grid of length N */
int N,
double cellsize, /* size of a single cell of the grid */
double particle_pos, /* the particle position */
double particle_mass) /* the particle mass */
{
double xx = particle_pos / cellsize;
int i = floor(xx); /* floor(x) truncates all decimal digits of the floating point
number x, similar to ((int) x) in C (or: it does a strict rounding to the next
lower integer number; floor(5.9) = 5) */

double u = xx - i;
int ii = i + 1;
if(ii >= N)
ii = 0;
rho_field[i] += (1 - u) * particle_mass / cellsize;
rho_field[ii] += u * particle_mass / cellsize;
}
double interpolate_force_field_to_particle_position(double force_field[N],/* the force
field discretised on a grid of length N */

int N,
double cellsize, /* size of a single cell of the grid */
double particle_pos, /* the particle position */
double particle_mass) /* the particle mass */
{
double xx = particle_pos / cellsize;
int i = floor(xx + 0.5);
double acceleration = force_field[i];
return acceleration * particle_mass;
}
 


Итак, вот что я надумал:

а-б) В первой части вроде как всё прилично. Определяем номера ячеек, куда массу будем распределять. Распределение идёт вполне нормально - обычная "квадратная частица". Во второй функции, по-моему, проблемы уже. Здесь, как я понимаю, вычисляется значение поля ускорений в точке $x_i + 0.5$ (где находится центр частицы), после чего объявляется, что на частицу под номером $i$ действует сила $\vec{F}_i = m \vec{w}_p$, где $p$ отвечает номеру ячейки для координаты $x_i + 0.5$. Правильно же, как я понимаю, делать так:

$\vec{F}_i = m \sum_p \vec{w}_p W(x_i - x_p) ,$

где функция $W(x - x_p)$ вычисляет, какой вклад ячейка $p$ даст в ускорение частицы $i$ (может, обозначения слегка неудачные). По сути, абсолютно аналогично тому, как с плотностью.

в) Нет, не подходит. Как я понимаю, для этого по определению в конце должно быть $\rho [N] = \rho [0]$

Используется синтаксис C
if (ii >= N);
ii = 0;
rho_field[i] += 1 - u; * particle_mass / cellsize;
rho_field[ii] += u * particle_mass / cellsize;


Вот здесь видно, что если частица попадает так, что центр её расположен во второй половине последней ячейки, то в ячейки $0$ и $N$ попадёт разная масса ($u$ и $1 - u$ соответственно). Что-то немного запутался с тем, как исправить.

Заранее спасибо за помощь.

P.S. Почему скобки норовят замениться на ASCII кодировку? Смотрел-смотрел, так и не понял, в чём проблема.

 Профиль  
                  
 
 Re: Определение ускорения частиц
Сообщение17.11.2016, 22:20 
Заслуженный участник


27/04/09
28128
Это из-за того что syntax внутри off, баг.

 Профиль  
                  
 
 Re: Определение ускорения частиц
Сообщение17.11.2016, 22:25 
Модератор


19/10/15
1196
 i  Убрал оффтоп с кода.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group