using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace vcsHDPsurge { public partial class Form1 : Form { int NN = 30; public Form1() { InitializeComponent(); } //---------------------------------------------------------------------------// private void toolStripButton1_Click(object sender, EventArgs e) { main_part(); } //---------------------------------------------------------------------------// private void main_part() { int i,k,ndata,nnn; double pp, ph, pw, r, H, z, gamma, kh; double lambda, theta, sum, dz; System.IO.StreamWriter sw; string fnameW=""; string fname = ""; string dir=""; string dat=""; double[] xx=new double[360]; double[] yy=new double[360]; double[] px=new double[360]; double[] py=new double[360]; double ratio = 2.0; gamma = 1.0; //水の単位体積重量 kh = 0.15; //水平震度 r = 5.0; //サージタンク内半径 H = 10.0; //水深 theta = 0.0; //加速度の方向から半時計回りの角度 folderBrowserDialog1.Description = "データ出力フォルダを選択してください"; if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { dir = folderBrowserDialog1.SelectedPath; } for (nnn = 0; nnn <= 3; nnn++) { switch (nnn) { case 0: H = 5.0; fname = "hdp_H050.csv"; break; case 1: H = 7.5; fname = "hdp_H075.csv"; break; case 2: H = 10.0; fname = "hdp_H100.csv"; break; case 3: H = 15.0; fname = "hdp_H150.csv"; break; } fnameW = dir +"\\"+ fname; sw=new System.IO.StreamWriter(fnameW,false, System.Text.Encoding.Default); dat="#z,pp,ph,pw"; sw.WriteLine(dat); 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*Math.PI; sum=sum+Math.Pow(-1.0,(double)i)/lambda*FI(r/H,lambda)*Math.Cos(lambda*z/H); } //地震時動水圧強度(速度ポテンシャル) pp=gamma*kh*r*Math.Cos(theta)*sum; //地震時動水圧強度(Housner) ph=Math.Sqrt(3.0)*gamma*kh*H*((H-z)/H-0.5*(H-z)*(H-z)/H/H)*Math.Tanh(Math.Sqrt(3.0)*r/H)*Math.Cos(theta); //地震時動水圧強度(Westergaard) pw=7.0/8.0*gamma*kh*Math.Sqrt(H*(H-z)); dat=z.ToString("0.000"); dat = dat + "," + pp.ToString("0.000"); dat = dat + "," + ph.ToString("0.000"); dat = dat + "," + pw.ToString("0.000"); sw.WriteLine(dat); if (H - dz < z && z < H + dz) break; }while(z