/*----------------------------------------------------------------------------*/ /* gccSCVFsurge.c */ /*----------------------------------------------------------------------------*/ #include #include #include #include #define g 9.8 /* 重力加速度 */ #define pi M_PI /* 円周率 */ #define N 10 /* 水槽断面検討ケース数 */ char title[100]; /* タイトル (入力値)*/ double Hg; /* 総落差 (入力値)*/ double Q0; /* 最大使用水量 (入力値)*/ double L; /* 圧力水路延長 (入力値)*/ double c; /* 圧力水路損失水頭係数(入力値)*/ double Cd; /* 制水口流量係数 (入力値)*/ double zm; /* 最大上昇水位 (規制値:入力値) */ double d0; /* 圧力水路内径 (入力値)*/ double xc; /* 選定したポート径 */ double yc; /* 選定した立坑径 */ double zc; /* 選定した立坑径の最高水位 */ double R_DFC2; /* 動的安定性より定まる最小水槽径(記憶用) */ double DF[N]; /* 水槽内径(計算条件格納) */ double zmax[N]; /* 最大上昇水位(計算結果格納) */ double draw_xmin,draw_xmax,draw_dx; double draw_ymin,draw_ymax,draw_dy; void INP_DAT(char fnameR[50]); void CAL_SC(); void CAL_VF(); double CAL_ZM(double d1,double k0,double h0,double md,int *iflag); void PLOT_SC(char fnameW_SC[50]); void PLOT_VF(char fnameW_VF[50]); /*----------------------------------------------------------------------------*/ int main(int argc,char *argv[]) { char fnameR[50]; /*入力ファイル名*/ char fnameW_SC[50]; /*出力ファイル名*/ char fnameW_VF[50]; /*出力ファイル名*/ strcpy(fnameR,argv[1]); strcpy(fnameW_SC,argv[2]); strcpy(fnameW_VF,argv[3]); INP_DAT(fnameR); CAL_SC(); PLOT_SC(fnameW_SC); CAL_VF(); PLOT_VF(fnameW_VF); printf("End of calculation."); return 0; } /*----------------------------------------------------------------------------*/ void INP_DAT(char fnameR[]) { FILE *fp; char dat[100]; fp=fopen(fnameR,"r"); fgets(dat,sizeof dat,fp); strncpy(title,dat,strlen(dat)-1); /*タイトル*/ fgets(dat,sizeof dat,fp); fgets(dat,sizeof dat,fp); Hg =atof(strtok(dat,",")); /* 総落差 */ Q0 =atof(strtok(NULL,",")); /* 最大使用水量 */ L =atof(strtok(NULL,",")); /* 圧力水路延長 */ d0 =atof(strtok(NULL,",")); /* 圧力水路内径 */ c =atof(strtok(NULL,",")); /* 圧力水路損失水頭係数 */ Cd =atof(strtok(NULL,",")); /* 制水口流量係数 */ zm =atof(strtok(NULL,",")); /* 最大上昇水位 */ xc =atof(strtok(NULL,",")); /* 選定ポート径 */ yc =atof(strtok(NULL,",")); /* 選定立坑径 */ fclose(fp); } /*----------------------------------------------------------------------------*/ void CAL_SC() { FILE *fp; int iflag; double fwa,v0; double h0; /* 遮断前圧力水路損失水頭 h0=c*v0*v0 */ double k0; /* 遮断時制水口抵抗 */ double DFC1,DFC2,DFC3; /* 水槽内径(限界条件) */ double Fsa; /* 水槽断面積 */ double Fpa; /* 制水口断面積 */ double d2,d2min,d2max,d2d; /* 制水口内径計算範囲指定 */ /* 安定条件 */ fwa=0.25*pi*d0*d0; v0=Q0/fwa; h0=c*v0*v0; Fsa=L*fwa/c/2.0/g/(Hg-zm); DFC2=sqrt(4.0*Fsa/pi); R_DFC2=DFC2; d2min=0.1; d2max=(double)((int)(DFC2+1.0)); d2d=0.1; fp=fopen("temp_SC.prn","w"); printf("d2 k0-h0 DFC1 DFC2 DFC3\n"); fprintf(fp,"#d2 k0-h0 DFC1 DFC2 DFC3\n"); d2=d2min-d2d; iflag=-1; do{ d2=d2+d2d; Fpa=0.25*pi*d2*d2; k0=0.5/g*Q0*Q0/Cd/Cd/Fpa/Fpa; if(k0-h0<0)break; Fsa=h0*L*fwa/c/(h0+k0)/g/Hg; DFC1=sqrt(4.0*Fsa/pi); Fsa=h0*L*fwa*fwa*fwa/2.0/g/c/c/k0/Q0/Q0; DFC3=sqrt(4.0*Fsa/pi); printf("%6.3f %10.3e %6.3f %6.3f %6.3f\n",d2,k0-h0,DFC1,DFC2,DFC3); fprintf(fp,"%6.3f %10.3e %6.3f %6.3f %6.3f\n",d2,k0-h0,DFC1,DFC2,DFC3); }while(d2 D{/=10 1}\", \\\n"); fprintf(fp," \"temp_SC.prn\" using 1:4 with lines linewidth 3 linetype 1 title \"D{/=10 req} > D{/=10 2}\", \\\n"); fprintf(fp," \"temp_SC.prn\" using 1:5 with lines linewidth 3 linetype 2 title \"D{/=10 req} < D{/=10 3}\", \\\n"); fprintf(fp," \"-\" with points pointsize 2 pointtype 7 title \"Selected point\"\n"); fprintf(fp," %.3f %.3f\n",xc,yc); fprintf(fp," e\n"); fclose(fp); /****************************/ /*gnuplot制御*/ /****************************/ fp=popen("gnuplot.exe","w"); fprintf(fp,"load \"gpl_temp_SC.txt\"\n"); fflush(fp); pclose(fp); } /*----------------------------------------------------------------------------*/ void PLOT_VF(char fnameW_VF[50]) { FILE *fp; int i; double xx,yy; /****************************/ /*gnuplot制御用ファイル作成*/ /****************************/ fp=fopen("gpl_temp_VF.txt","w"); fprintf(fp,"set terminal postscript eps enhanced font \"Helvetica\" 16\n"); fprintf(fp,"set output \"%s\"\n",fnameW_VF); fprintf(fp,"set size ratio 1.0\n"); if(0