Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > От однородного поля к неоднородному


Автор: SvetlanaS 16.4.2013, 12:28
Есть программа, написанная для случая, когда электрическое поле - константа по всей камере. Я смоделировала неоднородное поле, которое представляется в виде файла с данными : (x,y,z,Е). Сама программа описывает трекинг частиц в камере и конечную поляризацию. Нужно понять, как повлияет изменение конфигурации поля на конечный результат. Благодарю за любую помощь! 

Автор: math64 16.4.2013, 12:49
E - это вектор, так что должны быть Ex, Ey, Ez. Или это производная от напряжённости электрического поля.
Данные из файла грузить в массив:
Код

struct Vector3D { double x, y, z; };
Vector3D E[SizeX][SizeY][SizeZ];

Как переделывать - зависит от того, как сделана оригинальная задача.
Можно, например, камеру разбить на SizeX*SizeY*SizeZ кубиков и считать что в каждом кубике поле постоянно и применять для него старую
программу.

Автор: SvetlanaS 16.4.2013, 13:06
Я уже на выходе векторы (Ex,Ey;Ez)  перевожу в угловое распределение :
  x                      y                        z                        (alpha)[°]         
                 
1.0600512E-5             -0.26                    0.03                     11.823385960146522       
1.0600512E-5             -0.26                    0.031                    10.39239954987032        
1.0600512E-5             -0.26                    0.032                    6.401619076676373        
1.0600512E-5             -0.26                    0.033                    5.970332639677054        
1.0600512E-5             -0.26                    0.034                    5.566954500788649        
----------------------------------------------------------------------------------------------------
Мне нужно, чтобы программа читала файл с данными о поле, например, выведу сразу абсолютные значения вместо углов.

Добавлено через 6 минут и 8 секунд
А оригинальная задача учитывает гравитационное действие, частица отражается от стенок камеры. Меняет поляризацию в процессе столкновений. Громоздкая программа. Как-то надо согласовать трекинг, который уже прописан с теми координатами,что в файле.

Автор: SvetlanaS 16.4.2013, 13:28
Непонятно, надо ли каждый раз при переходе частиц из одних координат в другие обращаться к массиву, находить те координаты или близкие к ним, считывать значение поля в этой точке или в некоторой области, менять поляризацию, исходя из того,что поле поменялось, затем по новой.. Это же , наверное, супергромоздко. Совершенно не понимаю, как реализовать это в программе.

Добавлено через 2 минуты и 10 секунд
В постоянном поле 1000 частиц обрабатывалась минут 20-25.

Автор: math64 16.4.2013, 13:42
Значения поля меняется только по z? Тогда можно делить не на кубики, а на слои. Частица должна отражаться от верхней/нижней стенки только в верхнем и нижнем слое. В середине - переходить из одного слоя в другой.

Автор: SvetlanaS 16.4.2013, 15:33
Нет, я привела в примере только начало файла.. Там сложное движение нейтронов по объему камеры.

Добавлено через 2 минуты и 30 секунд
Spintracking в полях 

Автор: SvetlanaS 16.4.2013, 16:07
Забыла добавить.. Конечно, C++

Автор: math64 17.4.2013, 07:48
Тогда дели на кубики.
В исходной задаче выдели отдельно отражение от стенки и движение внутри камеры.
При достижении границы кубика передаёшь частицу в соседний или отражаешь от стенки.
При отсутствии магнитного поля, если не ошибаюсь, должен быть потенциал. Вместо вектора (Ex, Ey, Ez) можно использовать U
Тогда Ex = (Uправ - Uлев)/dx, Ey = (Uтыл - Uпер) / dy, Ez = (Uверх - Uниз) / dz
где Uправ, Uлев, Uтыл, Uпер, Uверх, Uниз - потенциалы на гранях кубика, dx, dy dz - размеры кубика.
Если разбить на кубики 10x10x10 программа будет работать примерно в 1000 раз дольше, или нужно оптимизировать.

Автор: SvetlanaS 17.4.2013, 12:02
smile Спасибо большое! Тут не все так просто. В эксперименте есть и магнитное поле, и диполи. Действует гравитация. Мне кажется, наилучшим путем будет фитирование каким-нибудь полиномом этого поля..Оно достаточно гладко и мало изменяется от искажений.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)