Я пытался mimi c бесконечная сила, когда 2 частицы подходят слишком близко.
И расстояние, на котором это начинается, зависит от расстояния до суммы радиусов частиц.
def dist(a,b):#working and tested for normal values
d_sq = 0
if len(a) == len(b):
for i in range(len(a)):
d_sq = d_sq + (a[i] - b[i])**2
return (d_sq)**(1/2)
D = float((dist(prtc.rs[i], prtc.rs[j]))/(prtc.rads[i] + prtc.rads[j]))
if D <1 + 10**(-10):
#f[i,j] is force on i by j repulsive and poining from j to i
#we want the force to blow up at such a distance
fs[i, j] = (1/(D-1))*unit(prtc.rs[i] - prtc.rs[j])
fs[j, i] = - fs[i, j]
f[i] = f[i] + fs[i,j]
Когда частицы находятся достаточно близко, т.е. dist (prt c .rs [i], prt c .rs [j]) <1, тип D преобразуется из числа с плавающей точкой в np. Я получаю это сообщение об ошибке из двух элементов. </p>
File "C:/Users/karth/Desktop/code/kphys/BaseEngine.py", line 114, in timestep
prtc.vs = prtc.vs + np.divide(interaction(), prtc.ms)
File "C:/Users/karth/Desktop/code/kphys/BaseEngine.py", line 86, in interaction
/(prtc.rads[i] + prtc.rads[j]))
TypeError: only size-1 arrays can be converted to Python scalars
Я считаю, что частицы находятся слишком близко, чем то, с чем система может справиться, пожалуйста, исправьте меня, если я ошибаюсь. Если я прав, кто-нибудь знает какую-либо альтернативную реализацию?