24小时热门版块排行榜    

查看: 258  |  回复: 0
当前主题已经存档。

duxiao3150

新虫 (初入文坛)

[交流] 【其他】在windows环境下编译LAMMPS-17Jan05

1 将src下的所有.h 和.cpp文件copy到一个目录下,子文件夹下的文件全部拷出;

2 在VC中打开lammps.cpp,然后编译,建立project,然后把所有文件包含进去;

3 处理循环变量重定义;

4 处理FFT_DATA相关错误:在fft3d.h 文件的开头加入下列语句,

#ifndef FFT_NONE

#define FFT_NONE

#endif

5 input.cpp文件中,#include "unistd.h"在VC中没有,用direct.h代替;

6 关于timeval未定义的错误:这里使用的是单处理器,因此,在mpi.cpp 中会提示timeval未定义,将MPI_Wtime()代码删除,然后加上return 0.;

7 erfc函数:VC中没有该函数,必须自己编写.文后附有从网上找到的代码

8 程序命令行的处理:LAMMPS源程序默认用户从命令行输入命令,为了方便,我们可以直接指定文件,比如in.txt,在system.cpp中,将相应代码修改

80行 inflag=1

83行 iarg=2

175行 infile=fopen("in.txt","r"

然后编译,OK!

附误差函数:

double erfc(double x)
{
double temp;
if(x<0.0)
{
  temp=1.0+gammp(0.5,x*x);
}
else
{
  temp=gammq(0.5,x*x);
}
return temp;
}

double gammp(double a, double x)
{
double temp,gamser,gln,gammcf;
if(x<0.0 || a<=0.0)
{
  cout<<"pause";
  exit(1);
}
if(x {
  gser(gamser,a,x,gln);
  temp=gamser;
}
else
{
  gcf(gammcf,a,x,gln);
  temp=1.0-gammcf;
}
return temp;
}

double gammq(double a, double x)
{
double temp,gamser,gammcf,gln;
if(x<0.0||a<=0.0)
{
  cout<<"pause";
  exit(1);
}
if(x {
  gser(gamser,a,x,gln);
  temp=1.-gamser;
}
else
{
  gcf(gammcf,a,x,gln);
  temp=gammcf;
}
return temp;
}

void gser(double &gamser,double &a ,double &x,double &gln)
{
int itmax,n;
double ap,sum,del,eps;
itmax=100;
eps=0.0000003;
gln=gammln(a);
if(x<=0.0)
{
  if(x<0.0)
  {
   cout<<"pause";
   exit(1);
  }
  gamser=0.0;
  //exit(1);
  return;
}
ap=a;
sum=1.0/a;
del=sum;
for(n=1;n<=itmax;n++)
{
  ap=ap+1.0;
  del=del*x/ap;
  sum+=del;
  if(fabs(del)<(fabs(sum)*eps))
  {
   gamser=sum*exp(-x+a*log(x)-gln);
   return;
  }
}
}

void gcf(double &gammcf,double &a,double &x,double &gln)
{
int itmax,n;
double eps,a0,a1,b0,b1,fac,an,ana,anf,gold,g;
itmax=100;
eps=0.0000003;
gln=gammln(a);
gold=0.0;
a0=1.0;
a1=x;
b0=0.0;
b1=1.0;
fac=1.0;
for(n=1;n<=itmax;n++)
{
  an=n;
  ana=an-a;
  a0=(a1+a0*ana)*fac;
  b0=(b1+b0*ana)*fac;
  anf=an*fac;
  a1=x*a0+anf*a1;
  b1=x*b0+anf*b1;
  if(a!=0.0)
  {
   fac=1.0/a1;
   g=b1*fac;
   if(fabs((g-gold)/g)    {
    gammcf=exp(-x+a*log(x)-gln)*g;
    return;
   }
   gold=g;
  }
}
}



double gammln(double xx)
{
int j;
float temp;
double cof[6]={76.18009173,-86.50532033,24.01409822,-1.231739516,0.00120858003,-0.00000536382},stp,half,one,fpf,x,tmp,ser;
stp=2.50662827465;
half=0.5;
one=1.0;
fpf=5.5;
x=xx-one;
tmp=x+fpf;
tmp=(x+half)*log(tmp)-tmp;
ser=one;
for(j=1;j<=6;j++)
{
  x=x+one;
  ser=ser+cof[j-1]/x;
}
temp=tmp+log(stp*ser);
return temp;
}
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 duxiao3150 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见