| 2 | 1/1 | 返回列表 |
| 查看: 694 | 回復(fù): 1 | ||
xcid銀蟲 (小有名氣)
|
[求助]
大家能不能幫我看看這個程序,我用的是DEV-C++,但是一運(yùn)行就報錯
|
|
#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 Gammafprintf(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); } |


| 2 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 資源與環(huán)境 調(diào)劑申請(333分) +6 | holy J 2026-03-21 | 6/300 |
|
|---|---|---|---|---|
|
[考研] 一志愿山東大學(xué)藥學(xué)學(xué)碩求調(diào)劑 +3 | 開開心心沒煩惱 2026-03-23 | 4/200 |
|
|
[考研] 環(huán)境學(xué)碩288求調(diào)劑 +8 | 皮皮皮123456 2026-03-22 | 8/400 |
|
|
[考研] 一志愿國科過程所081700,274求調(diào)劑 +3 | 三水研0水立方 2026-03-23 | 3/150 |
|
|
[考研]
|
pk3725069 2026-03-19 | 16/800 |
|
|
[考研] 316求調(diào)劑 +7 | 梁茜雯 2026-03-19 | 7/350 |
|
|
[考研] 323求調(diào)劑 +6 | 洼小桶 2026-03-18 | 6/300 |
|
|
[考研] 一志愿華中科技大學(xué)071000,求調(diào)劑 +4 | 沿岸有貝殼6 2026-03-21 | 4/200 |
|
|
[考研] 286分人工智能專業(yè)請求調(diào)劑愿意跨考! +4 | lemonzzn 2026-03-17 | 8/400 |
|
|
[考研] 材料學(xué)碩301分求調(diào)劑 +7 | Liyouyumairs 2026-03-21 | 7/350 |
|
|
[考研] 材料工程專碩 348分求調(diào)劑 +3 | 冬辭. 2026-03-17 | 5/250 |
|
|
[考研] 297求調(diào)劑 +11 | 戲精丹丹丹 2026-03-17 | 12/600 |
|
|
[考研] 085700資源與環(huán)境308求調(diào)劑 +12 | 墨墨漠 2026-03-18 | 13/650 |
|
|
[考研] 274求調(diào)劑 +10 | S.H1 2026-03-18 | 10/500 |
|
|
[考研] 一志愿南昌大學(xué),327分,材料與化工085600 +9 | Ncdx123456 2026-03-19 | 9/450 |
|
|
[考研] 330求調(diào)劑 +4 | 小材化本科 2026-03-18 | 4/200 |
|
|
[考研] 求調(diào)劑,一志愿:南京航空航天大學(xué)大學(xué) ,080500材料科學(xué)與工程學(xué)碩,總分289分 +4 | @taotao 2026-03-19 | 4/200 |
|
|
[考研]
|
簡木ChuFront 2026-03-19 | 8/400 |
|
|
[考研] 085410人工智能專碩317求調(diào)劑(0854都可以) +4 | xbxudjdn 2026-03-18 | 4/200 |
|
|
[考研] 288求調(diào)劑,一志愿華南理工大學(xué)071005 +5 | ioodiiij 2026-03-17 | 5/250 |
|