事实上,它是Lennard Jones潜力的衍生物.其原因是,我写一个分子动力学程序和时间至少80%是在下面的函数中度过,即使是最激进的编译器选项(GCC **-O3).
double ljd(double r) /* Derivative of Lennard Jones Potential for Argon with
respect to distance (r) */
{
double temp;
temp = Si/r;
temp = temp*temp;
temp = temp*temp*temp;
return ( (24*Ep/r)*(temp-(2 * pow(temp,2))) );
}
此代码来自文件"functs.h",我将其导入到我的主文件中.我认为以这种方式使用临时变量会使函数更快,但我担心创建它们太浪费了.我应该使用静电吗?此外,代码是使用openmp并行编写的,所以我不能真正将temp声明为全局变量?
定义变量Ep和Si(使用#define).我只使用C约1个月.我试着看一下gcc生成的汇编代码,但我完全迷失了.
我会摆脱pow()一个开始的呼吁:
double ljd(double r) /* Derivative of Lennard Jones Potential for Argon with
respect to distance (r) */
{
double temp;
temp = Si / r;
temp = temp * temp;
temp = temp * temp * temp;
return ( (24.0 * Ep / r) * (temp - (2.0 * temp * temp)) );
}
Run Code Online (Sandbox Code Playgroud)