Я проделал некоторую работу над своим дипломным проектом и получил несколько молекулярных структур + расчет силы при потенциале Леннарда-Джонса и кулоновском потенциале + межмолекулярная связь (как на картинке)
(http://img17.imageshack.us/img17/3133/simulasyon.png)
Все делается с помощью алгоритма Верле в одном потоке.
Проблема в том, что я использую "таблицу вычислений"-массив для быстрых ответов на x ^ (3.5), x ^ (1.4), (1/x).... потому что очень медленно вычислять с помощью собственных методов java . Массив - время доступа очень велико, поэтому я попробовал методы "unsafe()" и все еще очень медленный (прирост производительности всего 10%).
Пробовал IntBuffer и DoubleBuffer и все равно ничего хорошего.
Программа вычисляет O(n) связи, O(nlog(n)) Леннарда-Джонса (+ дополнительный принцип запрета Паули) и O(nlog(n)) расчет кулоновской силы. Плохая скорость при 1500+ частицах (и 7000+ связей).
Я уже проверил, где находится узкое место в скорости (это Леннард Джонс + Кулон). для расчета одного временного шага при 1500 частицах требуется 4 миллисекунды. Мне нужно, чтобы это было 1 миллисекунда.
Только если бы я мог использовать массивы так же быстро, как и любой другой язык (безопасный или нет).
Также попытался заменить деления умножениями, хэш-картами и списками (такая же производительность с массивами).
Знаете ли вы какой-либо другой способ уменьшить время расчета на временной шаг? Спасибо. Компьютер: одноядерный процессор Intel с тактовой частотой 2,0 ГГц, 1,2 ГБ оперативной памяти, Windows-XP SP-3 и Eclipse Indigo.