| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > От однородного поля к неоднородному |
| Автор: SvetlanaS 16.4.2013, 12:28 |
| Есть программа, написанная для случая, когда электрическое поле - константа по всей камере. Я смоделировала неоднородное поле, которое представляется в виде файла с данными : (x,y,z,Е). Сама программа описывает трекинг частиц в камере и конечную поляризацию. Нужно понять, как повлияет изменение конфигурации поля на конечный результат. Благодарю за любую помощь! |
| Автор: math64 16.4.2013, 12:49 | ||
| E - это вектор, так что должны быть Ex, Ey, Ez. Или это производная от напряжённости электрического поля. Данные из файла грузить в массив:
Как переделывать - зависит от того, как сделана оригинальная задача. Можно, например, камеру разбить на 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 |