24小时热门版块排行榜    

查看: 756  |  回复: 1

xcid

银虫 (小有名气)

[求助] 大家能不能帮我看看这个程序,我用的是DEV-C++,但是一运行就报错

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream.h>
#include <fstream.h>


#define NKPTS_MAX 10000
#define NBANDS_MAX 200


int main ( int argc, char *argv[])
{
  if( argc < 4)
  {
    printf("should be like: \n";
    printf("./a.out nkx nky nkz \n";
    exit(0);
  }
  int nkx, nky,nkz;
  nkx=atoi(argv[1]);
  nky=atoi(argv[2]);
  nkz=atoi(argv[3]);


  fstream fid;
  fid.open("OUTCAR",ios::in);
  if ( !fid  )
  {
printf("cant open OUTCAR\n";
       exit(0);
  }


char str[255], stmp[255];


//keyword1[]="NKPTS";
int NKPTS,NBANDS;
do {
   fid.getline(str,255);
   if(strstr(str,"NKPTS" != NULL )
   {
printf("str=%s\n", str);
      sscanf(str,"%s%s%s%d",stmp,stmp,stmp,&NKPTS);
      sscanf(str,"%s%s%s%s%s%s%s%s%s%s%s%s%s%s%d",stmp,stmp,stmp,stmp,stmp,stmp,stmp,stmp,stmp,stmp,stmp,stmp,stmp,stmp,&NBANDS);
      printf("NKPTS: %d, NBANDS: %d\n",NKPTS,NBANDS);
      break;
   }
}while( !fid.eof()) ;






float A[3][3], B[3][3];
do {
   fid.getline(str,255);
   if(strstr(str,"reciprocal lattice vectors" != NULL )
   {
      for(int i=0;i<3;i++)
      {
   fid.getline(str,255);
        sscanf(str,"%f%f%f%f%f%f",&A[0],&A[1],&A[2],&B[0],&B[1],&B[2]);
      }  
      printf("A1: %f %f %f \n",A[0][0],A[0][1],A[0][2]);
      printf("A2: %f %f %f \n",A[1][0],A[1][1],A[1][2]);
      printf("A3: %f %f %f \n",A[2][0],A[2][1],A[2][2]);
      printf("B1: %f %f %f \n",B[0][0],B[0][1],B[0][2]);
      printf("B2: %f %f %f \n",B[1][0],B[1][1],B[1][2]);
      printf("B3: %f %f %f \n",B[2][0],B[2][1],B[2][2]);


     break;
   }
}while( !fid.eof());






float Ef;
do {
   fid.getline(str,255);
   if(strstr(str,"E-fermi" != NULL )
   {
        printf("str=%s\n", str);
      sscanf(str,"%s%s%f",stmp,stmp,&Ef);
      printf("Ef: %f\n",Ef);
      break;
   }
}while( !fid.eof()) ;






   fid.getline(str,255);
   fid.getline(str,255);


float kpt[NKPTS_MAX][3];
float Egv[NKPTS_MAX][NBANDS_MAX];
for(int ik =0; ik < NKPTS; ik++)
{
        // k-point 1: kx ky kz
        fid.getline(str,255);
        sscanf(str,"%s%s%s%f%f%f",stmp,stmp,stmp,&kpt[ik][0],&kpt[ik][1],&kpt[ik][2]);
        fid.getline(str,255);


for(int ib=0;ib<NBANDS;ib++)
{
int bandno,occ;
         fid.getline(str,255);
                sscanf(str,"%d%f%f",&bandno,&Egv[ik][ib],&occ);
       //         printf("%d %d : %f\n", ik,ib,Egv[ik][ib]);
}


        fid.getline(str,255);
}


  fid.close();




  // find those cross Ef


   int Nf=0;
   static int nstore[NBANDS_MAX];
   for( int ib =0 ; ib < NBANDS; ib ++)
  {
float vmin=10000, vmax=-10000;
        for( int ik =0 ; ik < NKPTS ; ik++ )
        {
if ( Egv[ik][ib] < vmin)
                   { vmin = Egv[ik][ib];}
if( Egv[ik][ib] > vmax )
  { vmax= Egv[ik][ib];}
}
if( vmax > Ef && vmin < Ef)
{ nstore[Nf++]=ib; }


  }
  int ib;
  float Egvf[NKPTS][Nf];
  for(int i=0; i<Nf; i++)
  {
ib=nstore;
        for( int ik=0 ; ik < NKPTS ; ik ++ )
{
         Egvf[ik]=Egv[ik][ib];
}
  }


//save to bxsf


   FILE *fid2;
   fid2=fopen("FS.bsxf","w";
   if( fid2 == NULL)
   {
       printf( "can't create fout: FS.bsxf\n";
       exit(0);
   }  


fprintf(fid2,"BEGIN_INFO\n";
fprintf(fid2,"  Fermi Energy: %7.5f\n",Ef);
fprintf(fid2,"END_INFO\n";




fprintf(fid2,"\n";


fprintf(fid2,"BEGIN_BLOCK_BANDGRID_3D\n";
fprintf(fid2,"  one_word_comment \n";
fprintf(fid2,"  BEGIN_BANDGRID_3D\n";
fprintf(fid2,"  %d \n",Nf);
fprintf(fid2," %d %d %d \n",nkx,nky,nkz);
fprintf(fid2," 0 0 0\n"; // origin Gamma
fprintf(fid2," %f %f %f \n", B[0][0],B[0][1],B[0][2]);//Vec(1,);
fprintf(fid2," %f %f %f \n", B[1][0],B[1][1],B[1][2]);
fprintf(fid2," %f %f %f \n", B[2][0],B[2][1],B[2][2]);


int ik = 0;
for(int i=0; i < Nf; i++)
{
    fprintf(fid2, " BAND: %d \n",nstore+1);
    for(int ix=0 ; ix < nkx; ix ++)
    {
for(int  iy=0 ; iy < nky; iy ++)
         {
            for(int iz=0 ; iz <nkz; iz++)
   {
                fprintf(fid2,"  %f  ",Egvf[ik++]);
            }
            fprintf(fid2,"\n";
        }
         fprintf(fid2,"\n";
    }
   
}


fprintf(fid2,"  END_BANDGRID_3D\n";
fprintf(fid2,"END_BLOCK_BANDGRID_3D\n";




    fclose(fid2);


}
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

小菜一碟
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ioadong

木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
main函数这么长?尝试先拆成功能小函数,这样好定位错误。
以科学的理性代替天然的非理性。
2楼2013-05-24 21:53:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xcid 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 国社科又开始会评了,不知道这次命运如何 +5 雨打竹帘 2026-08-30 9/450 2026-08-30 22:23 by 余韵清
[基金申请] 能否申诉? +4 echo8914667 2026-08-30 5/250 2026-08-30 21:11 by echo8914667
[基金申请] 有没有仍没收到信息的 +7 德尚中行 2026-08-27 8/400 2026-08-30 20:52 by purplejack
[基金申请] 麻烦专家们看看评委们的意见(F口面上) +6 gdd2018 2026-08-28 11/550 2026-08-30 08:58 by 超级无敌华子
[基金申请] 我就是申请一个面上项目而已,这评审意见是按照杰青的条件评的吧? +6 gouxfjh 2026-08-28 11/550 2026-08-30 07:57 by gouxfjh
[基金申请] 中青基了要发朋友圈吗? +4 349506619 2026-08-28 4/200 2026-08-29 22:41 by alongwaytogo
[基金申请] 为什么资助数各大高校都创新高,自己申请怎么就这么难 +12 Kittylucky 2026-08-27 13/650 2026-08-29 00:04 by superceng
[基金申请] 系统查不到 +11 董八千 2026-08-26 11/550 2026-08-28 18:06 by Leogzhya
[基金申请] 基金不中,共勉 +11 eulota 2026-08-26 11/550 2026-08-28 14:22 by 火星超人xi
[基金申请] 怎么查啊 +6 huang1991js 2026-08-26 6/300 2026-08-28 08:42 by winsaint
[基金申请] 面上合作单位盖章 +5 ssyjh 2026-08-27 5/250 2026-08-27 20:50 by gdfollow
[基金申请] 怎么看青基中了没有啊 +5 叶九微 2026-08-26 5/250 2026-08-27 10:35 by l_zh2008
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 项目信息和经费信息在系统里都可以看到了 +6 wittyboy 2026-08-26 14/700 2026-08-26 10:55 by wittyboy
[基金申请] 今天务委会开完了,明天出结果吗 +19 angus9576 2026-08-25 23/1150 2026-08-26 10:03 by zp519
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[基金申请] 在坚冰还盖着北海的时候,我看到了怒放的梅花。 (金币+10) +6 ziyangfang 2026-08-25 9/450 2026-08-25 20:26 by huagongfeihu
[基金申请] 某些机构,以效率低为荣,以效率低作为存在感 +9 yuleib84 2026-08-25 10/500 2026-08-25 17:14 by alexon
[基金申请] 如果此刻你正在为国基感到焦虑,不妨来听听这首《基金之外》 +8 scalable 2026-08-24 8/400 2026-08-25 12:52 by jnhyjjm
[基金申请] 没有任何消息-是不是就凉了 +9 图啦图啦 2026-08-24 10/500 2026-08-25 11:59 by 南海小哥
信息提示
请填处理意见