/*---------------------------------------------------------------------------*/ /* gccFIG_SURGE.c */ /*---------------------------------------------------------------------------*/ #include #include #include #include #define NUMS 10 /*水槽断面設定最大点数*/ #define NUMQ 20 /*流量設定最大点数*/ char Title[256]; /*計算タイトル*/ int ICT; /*計算ケ−ス設定*/ double AFCA; /*AFC片側振幅流量(m3/s)*/ double AFCT; /*AFC周期(s)*/ /*計算時間設定*/ double TMAX; /*計算打切時間*/ double dt; /*計算時間間隔*/ double DTWR; /*打出時間間隔*/ /*制水口設定*/ double PAA; /*制水口断面積*/ double PCI; /*制水口流入時流量係数*/ double PCO; /*制水口流出時流量係数*/ /*立坑断面*/ int NST; /*入力断面数*/ double SAA[NUMS+1]; /*断面積*/ double SEL[NUMS+1]; /*下端標高*/ char SLB[NUMS+1][50]; /*立坑断面ラベル*/ double ELU; /*水槽上端標高*/ double ELB; /*水槽下端標高*/ /*トンネル等設定*/ double RWL; /*貯水池水位標高*/ double TNL; /*トンネル延長*/ double TNA; /*トンネル断面積*/ double TNC; /*トンネル損失水頭係数*/ /*流量設定*/ int NQT; /*入力点数*/ double QTQ[NUMQ+2]; /*入力点流量*/ double QTI[NUMQ+2]; /*入力点時刻*/ /*最高・最低水位記憶*/ double WLmax,TTmax,WLmin,TTmin; /*作図範囲指定*/ double draw_xmin,draw_xmax,draw_dx; double draw_ymin,draw_ymax,draw_dy; void DINP(char fnameR[50]); void GPLOT_surge(char fnameR[50],char fnameW[50]); /*---------------------------------------------------------------------------*/ int main(int argc,char *argv[]) { int i,nnn,nfile; char fnameR[50]; /*入力ファイル名*/ char fnameW[50]; /*出力ファイル名*/ FILE *fp; strcpy(fnameR,argv[1]); strcpy(fnameW,argv[2]); DINP(fnameR); /*データ入力*/ GPLOT_surge(fnameR,fnameW);/*gnuplot*/ printf("End of program."); return 0; } /*---------------------------------------------------------------------------*/ void DINP(char fnameR[50]) { int i,j; double wa,wb; char wc[50]; char dat[256]; char sv[256]; FILE *fin; fin=fopen(fnameR,"r"); fgets(dat,sizeof dat,fin); strtok(dat,","); strtok(NULL,","); strcpy(sv,strtok(NULL,",")); strncpy(Title,sv,strlen(sv)-1); /*計算ケースタイトル*/ fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); strtok(dat,","); ICT=atoi(strtok(NULL,",")); /*計算ケース設定(1:通常,2:AFC)*/ AFCA =atof(strtok(NULL,",")); /*AFC片側振幅流量(m3/s)*/ AFCT =atof(strtok(NULL,",")); /*AFC周期(s)*/ fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); strtok(dat,","); TMAX=atof(strtok(NULL,",")); /*計算打切時間*/ dt =atof(strtok(NULL,",")); /*計算時間間隔*/ DTWR=atof(strtok(NULL,",")); /*打出時間間隔*/ fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); strtok(dat,","); PAA=atof(strtok(NULL,",")); /*制水口断面積*/ PCI=atof(strtok(NULL,",")); /*制水口流入時流量係数*/ PCO=atof(strtok(NULL,",")); /*制水口流出時流量係数*/ fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); strtok(dat,","); RWL=atof(strtok(NULL,",")); /*貯水池水位標高*/ TNL=atof(strtok(NULL,",")); /*トンネル延長*/ TNA=atof(strtok(NULL,",")); /*トンネル断面積*/ TNC=atof(strtok(NULL,",")); /*トンネル損失水頭係数*/ fgets(dat,sizeof dat,fin); strtok(dat,","); strtok(NULL,","); NST=atoi(strtok(NULL,",")); /*立坑入力断面数*/ fgets(dat,sizeof dat,fin); for(i=1;i<=NST;i++){ fgets(dat,sizeof dat,fin); strtok(dat,","); SAA[i]=atof(strtok(NULL,",")); /*断面積*/ SEL[i]=atof(strtok(NULL,",")); /*指定断面下端標高*/ strcpy(sv,strtok(NULL,",")); /*立坑断面ラベル*/ strncpy(SLB[i],sv,strlen(sv)-1); /*立坑断面ラベル*/ } fgets(dat,sizeof dat,fin); strtok(dat,","); strtok(NULL,","); NQT=atoi(strtok(NULL,",")); /*流量設定点数*/ fgets(dat,sizeof dat,fin); for(i=1;i<=NQT;i++){ fgets(dat,sizeof dat,fin); strtok(dat,","); QTQ[i]=atof(strtok(NULL,",")); /*入力点流量*/ QTI[i]=atof(strtok(NULL,",")); /*入力点時刻*/ } /*立坑断面順番の確認(低標高順)*/ for(i=1;i<=NST-1;i++){ for(j=i+1;j<=NST;j++){ if(SEL[i]>=SEL[j]){ /*標高の小さい順に並び替え*/ wa=SEL[j]; wb=SAA[j]; strcpy(wc,SLB[j]); SEL[j]=SEL[i]; SAA[j]=SAA[i]; strcpy(SLB[j],SLB[i]); SEL[i]=wa; SAA[i]=wb; strcpy(SLB[i],wc); } } } ELB=SEL[1]; /*水槽下端標高*/ ELU=SEL[NST];/*水槽上端標高*/ fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); fgets(dat,sizeof dat,fin); WLmax=ELB;TTmax=0.0; WLmin=ELU;TTmin=0.0; while(fgets(dat,sizeof dat,fin)!=NULL){ wa=atof(strtok(dat,",")); wb=atof(strtok(NULL,",")); if(WLmax