i具有一个程序,可以使用do while
条件回路在X-dimension中改变位移x[i]
来最大程度地减少系统的能量。我想将其扩展到一个程序,该程序通过改变x[i]
,y[i]
,z[i]
来最大程度地限制能量,我想,在这种情况下,在一个大do while
环路内需要三个同时需要do while
循环,我该如何实现此目标?
在一个维度中解决问题的代码如下所示:
int main(void)
{
double eta,energyold;
energyold=1.0;
unsigned i,j;
init();
do{
function();
functiond(); //JACOBIAN
dgesv(fnd,b,N,dx);
newpsn();
energyT();
eta=fabs(energy-energyold)/energy;
energyold=energy;
//printf("%lf %lf %lfn",eta,energy,norm);
}while(norm>1e-12);
for(i=0;i<N;i++)
{
printf("The Equillibrium position of ion %d is: %lfn",i+1,x[i]);
}
return 0;
}
使用线程有很多建议,但我不相信您确实需要。
这听起来更像是一个纯粹的计算问题,其中使用多核CPU上的线程可能会缩短总执行时间,但为了表达计算而不是必需的。
您不能仅使用三个嵌套循环(如果您需要检查X/Y/Z值的所有组合),还是一次进行一个嵌套循环?线程编程可能很棘手,因此如果不是真正的问题,它确实可以避免它。
您可以尝试使用多线程。多线程不会使您的 do-while
循环可以平均但同时运行。
如果您正在使用Linux,则可以使用pthread
库,该库提供用于产卵线程的功能,分配任务调度方法,相关功能等。
一些有用的链接:
-
线程教程1
-
线程教程2
-
pthread
标头和功能 -
man pthread
(在Linux上,如果安装了Pthread库)