我试着用C语言运行Runge Kutta 4。代码如下:
__kernel void updade_state( __global float8 *q,__global float8 *qm, __global float8 *v){
const int gid = get_global_id(0);
float8 qs;
//k1
f( q, v);
qs = q[gid] + dt * v[gid]/6.0;
qm[gid] = q[gid] + 0.5 * dt * v[gid];
//k2
f(qm, v);
qs += dt * v[gid]/3.0;
qm[gid] = q[gid] + 0.5 * dt * v[gid];
//k3
f( qm, v);
qs += dt * v[gid]/3.0;
qm[gid] = q[gid] + dt * v[gid];
//k4
f( qm, v);
qs += dt * v[gid]/6.0;
//update particle
q[gid] = qs;
}
我使用pyopencl模块访问我的显卡(“gid”),以便更有效地运行多个粒子的模拟。在
除了在内核中调用的函数f之外,内核的其余部分都是在python程序中构建的,通过这个程序,它被添加到我的Runge-Kutta代码中的常量dt。在
但是,当我运行整个程序时,以下错误消息显示:
^{pr2}$干杯
好吧,我绕过了这个问题,并按照Jiminion的建议,通过在内核中转换dt值和其他常量来解决它。这不是最优雅的解决方案,但它是有效的。在
}
相关问题 更多 >
编程相关推荐