LINUX.ORG.RU

Ef v0.08 — программа для моделирования динамики заряженных частиц

 ,


0

4

Состоялся восьмой выпуск Ef — программы для моделирования динамики систем заряженных частиц. Основная область применения — физика плазмы и ускорительная техника.

Разработка Ef начиналась в качестве хобби. Постепенно программа обросла базовой функциональностью и к настоящему времени пригодна для моделирования несложных систем, например, демонстрации закона Чайлда-Лэнгмюра в плоском диоде.

Программа осуществляет моделирование в трехмерной расчетной области. Поддерживается только нерелятивистская кинематика. Взаимодействие между частицами можно либо не учитывать вовсе, либо учитывать с помощью т. н. метода частиц-в-ячейках (электростатическое приближение, ES-PIC). Есть возможность задавать в расчетной области объекты, поглощающие частицы при столкновении.

В качестве экспериментальных возможностей стоит отметить прототип модуля для свободной САПР FreeCAD, упрощающий спецификацию расчетной области, и плагин для системы визуализации данных ParaView, облегчающий наглядное представление результатов.

Программа распространяется свободно под лицензией MIT. Основные языки — C++ и python. С помощью MPI реализовано базовое распараллеливание наиболее ресурсоемких участков кода.

На данный момент сайта у проекта нет. Большая часть информации сосредоточена в вики на Гитхабе. Также есть группа в Фейсбуке, где публикуются заметки о текущей работе над проектом.

>>> Репозиторий на Гитхабе

anonymous

Проверено: Falcon-peregrinus ()

В целом код вроде гуд. По сравнению с типичным квазифортраном.

    for ( int i = 0; i < nx; i++ ) {
	for ( int j = 0; j < ny; j++ ) {
	    for ( int k = 0; k < nz; k++ ) {
		if ( i == 0 ) {
		    ex = - boundary_difference( phi[i][j][k], phi[i+1][j][k], dx );
		} else if ( i == nx-1 ) {
		    ex = - boundary_difference( phi[i-1][j][k], phi[i][j][k], dx );
		} else {
		    ex = - central_difference( phi[i-1][j][k], phi[i+1][j][k], dx );
		}

		if ( j == 0 ) {
		    ey = - boundary_difference( phi[i][j][k], phi[i][j+1][k], dy );
		} else if ( j == ny-1 ) {
		    ey = - boundary_difference( phi[i][j-1][k], phi[i][j][k], dy );
		} else {
		    ey = - central_difference( phi[i][j-1][k], phi[i][j+1][k], dy );
		}

		if ( k == 0 ) {
		    ez = - boundary_difference( phi[i][j][k], phi[i][j][k+1], dz );
		} else if ( k == nz-1 ) {
		    ez = - boundary_difference( phi[i][j][k-1], phi[i][j][k], dz );
		} else {
		    ez = - central_difference( phi[i][j][k-1], phi[i][j][k+1], dz );
		}

		spat_mesh.electric_field[i][j][k] = vec3d_init( ex, ey, ez );
	    }
	}
    }

Компилятор соптимизует.

    if ( ( i <= 0 ) || ( i >= nx-1 ) ||
	 ( j <= 0 ) || ( j >= ny-1 ) ||
	 ( k <= 0 ) || ( k >= nz-1 ) ) {
	printf("incorrect index at node_ijk_to_global_index_in_matrix: i = %d, j=%d, k=%d \n", i,j,k);
	printf("this is not supposed to happen; aborting \n");
exit( EXIT_FAILURE );

Всё правильно, assert'ы - зло.

good_riddance ()

> Поддерживается только нерелятивистская кинематика. Взаимодействие между частицами можно либо не учитывать вовсе, либо учитывать с помощью т. н. метода частиц-в-ячейках (электростатическое приближение, ES-PIC)[]

Ну и зачем это нужно?

luke ★★★ ()
Ответ на: комментарий от thunar

Для интегрирования траекторий какой метод используется?

Самый простой: лягушка (leap-frog).

Сетки регулярные или нерегулярные?

Пока только регулярные.

anonymous ()
Ответ на: комментарий от luke

Поддерживается только нерелятивистская кинематика. >Взаимодействие между частицами можно либо не учитывать >вовсе, либо учитывать с помощью т. н. метода частиц->в-ячейках (электростатическое приближение, ES-PIC)[]
Ну и зачем это нужно?

Не все сразу. Возможно, постепенно будет добавлена релятивистская кинематика и более продвинутые модели взаимодействия между частицами.

К тому же, как верно отметили выше, релятивистская кинематика нужна не везде: всякие электронные пушки и ионные источники иногда используют нерелятивистские энергии.

Наконец, иногда бывает нужно сделать оценочный расчет. Причем сделать его быстро, пусть и не очень точно. Для этого может быть достаточно грубой модели.

anonymous ()
Ответ на: комментарий от anonymous

Ну мне вот посчитать магнитооптику коллайдера ВЭПП-2к такая штука явно не поможет.

luke ★★★ ()
Ответ на: комментарий от thunar

Также есть группа в ФСБ-буке
You must log in to continue.

Да, упустил этот момент. Продублирую в Pages вместо группы - к Pages вроде есть доступ на чтение без аккаунта.

anonymous ()
Ответ на: комментарий от anonymous

Ну плясали бы тогда от лагранжианов - минимизировали действие. Код бы получился короче, да и сразу хренову гору моделей можно впихнуть просто заменив лагранжиан на другой. А то как я понял - это моделирование свободных частиц во внешних полях?

aido ★★ ()
Ответ на: комментарий от anonymous

А если по-хорошему, то смотрите в сторону функций Грина и уравнения Дайсона. Помнится, это один из самых быстрых и точных методов расчета - электронную плазму в кристаллах часто им считают.

aido ★★ ()

Парни из Большого Адронного Коллайдера знают об этой программе?

anonymous ()
Ответ на: комментарий от anonymous

а массив с частицами как организован — упорядочиваете их по пространству, или просто большой массив? кстати, будете ли атомы добавлять?

thunar ★★★★ ()
Ответ на: комментарий от anonymous

лягушка

Вот, кстати, рекоммендую ещё вот этот добавить (тем более, что он легко реализуется) http://link.springer.com/article/10.1134/S2070048211030045 — для плотной плазмы с низкочастотными процессами — musthave.

thunar ★★★★ ()
Последнее исправление: thunar (всего исправлений: 1)

прочитав тред, осознал, что на ЛОРе есть специалисты по всему на свете

Kompilainenn ★★★★★ ()
Ответ на: комментарий от luke

Ну мне вот посчитать магнитооптику коллайдера ВЭПП-2к такая >штука явно не поможет.

Да, пока что вряд ли.

В физике высоких энергий много своих программ для всякого моделирования. Причем, пишут их очень крутые дядьки. Понятно, что пытаться конкурировать с ними бессмысленно.

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

anonymous ()
Ответ на: комментарий от anonymous

Да в ROOT.CERN столько багов, что с ним работать невозможно. использовать хедеры и библиотеки в своем коде - пожалуйста, но не CINT. Так что поконкурировать можете, но там спектр задач огромен и данных много - поэтому С++ в хвост и в гриву гоняется на кластерах. Код там не ахти, но хотя бы работает.

aido ★★ ()
Ответ на: комментарий от thunar

Ну если много атомов (касаемо плазмы - ионов и электронов по отдельности), то там с частицами становится работать ужасно неудобно - слишком много нелинейных уравнений. К тому же форма поверхностей влияет существенно на решение уравнений.

Проще вводить поля и взаимодействия между полями. Но это для аналитических расчетов.

В численных - там да, там на ячейки разбивают и считают количество частиц в каждой ячейке в определенный момент времени (гидродинамическое приближение). Годного способа варьировать функционал действия численно я еще ни разу не видел. Там видоизмененный Монте-Карло (+ метод градиентного спуска, и т.д.) часто применяют. Если ребята придумают, как эффективно численно варьировать функционалы - это новая Нобелевка, как в случае с DFT.

aido ★★ ()

Никогда не понимал - в чём сакральный смысл лицензирования научного софта под дружественной к проприетарщикам MIT?

zabbal ()
Ответ на: комментарий от zabbal

проприетарщики обычно имеют бабло, которое может прилететь и разработчикам софта под МИТ

Kompilainenn ★★★★★ ()

В Сколково свой коллайдер забабахают, с импортозамещёнными частицами и софтом.

Stalin ★★★★★ ()
Ответ на: комментарий от Kompilainenn

LOL, это ж MIT - весь его смысл, в том, что можно взять чужой код, поднять на нём быбла, а разрабам вместо патчей и денег сказать «держитесь там, хорошего настроения» :)

zabbal ()
Ответ на: комментарий от aido

Ну плясали бы тогда от лагранжианов - минимизировали >действие. Код бы получился короче, да и сразу хренову гору >моделей можно впихнуть просто заменив лагранжиан на другой. А >то как я понял - это моделирование свободных частиц во внешних >полях?

Да, это моделирование движения частиц во внешних полях. Но частицы в общем случае взаимодействуют.

Честно говоря, я не знаю возможности современных алгоритмов оптимизации. Число частиц легко может достигать 10^9. Подозреваю, что пытаться варьировать такое число параметров просто неэффективно с вычислительной точки зрения.

Вцелом, что касается общего подхода к моделированию, то программа не пытается изобретать велосипед, а следует хорошо изученному методу PIC (см., например, https://books.google.ru/books?id=nTOFkmnCQuIC&pg=PA267&lpg=PA267&... )

anonymous ()
Ответ на: комментарий от Kompilainenn

прочитав тред, осознал, что на ЛОРе есть специалисты по всему на свете

А еще - добрые маги, чародеи и волшебники...

anonymous ()
Ответ на: комментарий от thunar

а массив с частицами как организован — упорядочиваете их по пространству, или просто большой массив?

Никаких трюков с упорядочиванием пока нет.

В программе предполагается, что частицы попадают в расчетную область, будучи испущенными неким источником частиц. Для каждого источника частиц заводится массив, в котором хранятся частицы, выпущенные этим источником. Т.е. если источник частиц только один, то можно думать о частицах как лежащих в одном большом массиве. Если источников несколько, то массивов будет несколько.

Если точнее, то из-за MPI-распараллеливания частицы в каждом массиве делятся более-менее поровну между MPI-процессами.

кстати, будете ли атомы добавлять?

В планах на обозримое будущее добавления атомов пока нет. Но потом, видимо, все-таки придется этим заняться.

Вцелом, прикрутить какой-нибудь костыль для грубого учета столкновений с нейтральными частицами должно быть выполнимой задачей.

anonymous ()
Ответ на: комментарий от thunar

Вот, кстати, рекоммендую ещё вот этот добавить (тем более, >что он легко реализуется) http://link.springer.com/article/10.1134/S2070048211030045 — для плотной плазмы с >низкочастотными процессами — musthave.

Хорошо, спасибо. Статью мелько посмотрел - вроде действительно не очень сложно.

anonymous ()
Ответ на: комментарий от good_riddance

Хоспадя... Прочитал новость, потом тред и почувствовал себя неандертальцем: буквы знакомые, а слова непонятны. Ребята, вы на какое языке общаетесь? :)

dpkg ★★★ ()
Ответ на: комментарий от zabbal

LOL, это ж MIT - весь его смысл, в том, что можно взять чужой >код, поднять на нём быбла, а разрабам вместо патчей и денег >сказать «держитесь там, хорошего настроения» :)

Теоретически, да (и наверное по-хорошему нужно было использовать GPL). Но практически в научном софте я сходу не могу вспомнить ни одного примера, когда кто-нибудь так делал.

Никогда не понимал - в чём сакральный смысл лицензирования >научного софта под дружественной к проприетарщикам MIT?

Основное преимущество лицензии MIT над GPL - длина текста лицензии ;) Есть, правда, еще некие этические соображения...

anonymous ()
Ответ на: комментарий от aido

Что в данном случае подразумевается под DFT?

ZERG ★★★ ()
Ответ на: комментарий от anonymous

Основное преимущество лицензии MIT над GPL в том, что его могут использовать в собственнических разработках. А GPL для проприетарных разаботок не тянет.

anonymous ()
Ответ на: комментарий от ZERG

Density Functional Theory - набор методов, рассчитывающих матрицу плотности. Модификаций там придумали уже много, но базовый метод был прорывным в расчетах квантовых систем. Основа метода - опять же поиск минимума некоего функционала численными методами.

aido ★★ ()
Ответ на: комментарий от anonymous

Основное преимущество лицензии MIT над GPL в том, что его >могут использовать в собственнических разработках. А GPL для >проприетарных разаботок не тянет.

Вопрос-то в том, что получит автор MIT-программы от того, что кто-то использует его код в собственнических разработках?

В большинстве случаев правильный ответ - ничего.

anonymous ()

Дух Энштейна прочитав этот тред остался доволен. Короче, ЛОРовец учи физику элементарных частиц.

anonymous ()
Ответ на: комментарий от luke

ну cling вроде тоже сначала глючил при уничтожении объектов. Я уже не помню, что в 6.00.02 (с субверсией могу врать - это было год-полтора назад) досконально глючило, но у меня был сегфолт на удалении объектов, что мне дико рвало жопу. Сам представь: delete objA; вызывает сегфолт всего интерпретатора.

Честно говоря, счас хз, что происходит вообще с рутом. я послал лесом CINT и все подобные оболочки, когда увидел, что они не умеют корректно уничтожать объекты (год назад эта ситуация изменилась в лучшую сторону - перестали лезть сегфолты, но мне все равно плюсовая консоль не пригождалась). К тому же clang++ порой удается убивать дикими шаблонами (boost::tuple). Нечасто, но удается. Возможно, стоит обновиться.

aido ★★ ()
Ответ на: комментарий от anonymous

да зачем именно элементарных частиц? простой классической ЭД хватит для начала=)

aido ★★ ()
Ответ на: комментарий от aido

Я с некоторых пор стараюсь избегать режима интерпретатора, в идеале вообще использовать ROOT только в качестве библиотек по рисованию графиков и доступа к деревьям, однако до сих пор есть в коде строчки типа gROOT->ProcessLine («blah-blah-blah»). А вообще стараюсь сейчас какой только возможно код перенести в питон.

luke ★★★ ()
Ответ на: комментарий от luke

А вообще стараюсь сейчас какой только возможно код перенести в питон.

разумное решение: добавляет стабильности.

aido ★★ ()

а в ней можно смоделировать плазменное поле, которое образуется в результате прохождения болванки сквозь волну контрового ядерного взрыва на скоростях МХ, где М - скорость звука, Х - кратность?
ну пулять болванку не в эпицентр, естественно. а скажем на R от эпицентра и посчитать минимальное R чтобы и плазма засейвила кусок болванки, и болванка пролетела?

etwrq ★★★ ()

автор явно с амбициями :) в качестве альтернативы приводит Оперу.

petrosha ★★★★★ ()
Ответ на: комментарий от ZERG

Ну тут ведь как... В Опере есть возможность моделировать пролет частицы в полностью заданном трехмерном поле, которое еще перед этим и посчитано той же Оперой.

petrosha ★★★★★ ()
Ответ на: комментарий от petrosha

Ну с таким же успехом можно сказать: у нас уже были готовые ракеты, зачем же Маск старается.

Я утрирую, но смысл тот же. Человек старается, изучает что-то новое; возможно, что его сырцы будут кем-то использованы.

ZERG ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.