我写了一个用于运动标记的Newmark积分的算法。它运行良好,将主求解器设置为scipy.linalg.solve
,但是据我所知,该求解器应使用整个CPU,但对于我的计算,它仅使用一个内核。您能告诉我我应该更改什么/错误在哪里?下面的主要求解器部分的代码。
for i in range (1,NT):
t=dt*i
V1=(a1*U[:,i-1]+a4*Ud[:,i-1]+a5*Udd[:,i-1])
V2=(a0*U[:,i-1]+a2*Ud[:,i-1]+a3*Udd[:,i-1])
print("calculation in timestep t=", t)
CV=dot(numpy.array(Ceqbb).astype(numpy.float64),V1)
MA=dot(numpy.array(Beqbb).astype(numpy.float64),V2)
# apply forces
F=(numpy.array(FQbb(t)).astype(numpy.float64)).reshape(ndof)
FH=F+MA+CV
# solve for displacements
if(ndof>1):
Un = linalg.solve(KHnn(t), FH)
else:
Un=FH/KHnn(t)
Uddn=a0*(Un-U[:,i-1])-a2*Ud[:,i-1]-a3*Udd[:,i-1]
Udn=Ud[:,i-1]+a6*Udd[:,i-1]+a7*Uddn
U[:,i]=Un
Ud[:,i]=Udn
Udd[:,i]=Uddn