#include #include #include #include #define ND 360 #define NN 30 double FI(double rbh,double lambda); double FMBF(int nu,double z); double GAMMAF(double z); /*---------------------------------------------------------------------------*/ int main() { int i,k,ndata,nnn; double pp,ph,pw,r,H,z,gamma,kh; double lambda,theta,sum,dz; FILE *fout; char fnameW[50]; double xx[ND],yy[ND],px[ND],py[ND],ratio=2.0; gamma=1.0; /*水の単位体積重量*/ kh=0.15; /*水平震度*/ r=5.0; /*サージタンク内半径*/ H=10.0; /*水深*/ theta=0.0; /*加速度の方向から半時計回りの角度*/ /*動水圧最大値鉛直分布計算・記憶*/ for(nnn=0;nnn<=3;nnn++){ switch(nnn){ case 0:H= 5.0;strcpy(fnameW,"hdp_H050.csv");break; case 1:H= 7.5;strcpy(fnameW,"hdp_H075.csv");break; case 2:H=10.0;strcpy(fnameW,"hdp_H100.csv");break; case 3:H=15.0;strcpy(fnameW,"hdp_H150.csv");break; } fout=fopen(fnameW,"w"); fprintf(fout,"#z,pp,ph,pw\n"); dz=0.5; z=-dz; do{ z=z+dz; /*サージタンク底面からの距離*/ sum=0.0; for(i=0;i<=NN;i++){ lambda=(2.0*(double)i+1.0)/2.0*M_PI; sum=sum+pow(-1.0,(double)i)/lambda*FI(r/H,lambda)*cos(lambda*z/H); } /*地震時動水圧強度(速度ポテンシャル)*/ pp=gamma*kh*r*cos(theta)*sum; /*地震時動水圧強度(Housner)*/ ph=sqrt(3.0)*gamma*kh*H*((H-z)/H-0.5*(H-z)*(H-z)/H/H)*tanh(sqrt(3.0)*r/H)*cos(theta); /*地震時動水圧強度(Westergaard)*/ pw=7.0/8.0*gamma*kh*sqrt(H*(H-z)); printf("z=%.3f pp=%.3f ph=%.3f pw=%.3f\n",z,pp,ph,pw); fprintf(fout,"%.3f,%.3f,%.3f,%.3f\n",z,pp,ph,pw); if(H-dz