Public Class Form1 Dim g As Double = 9.8 ' 重力加速度 */ Dim pi As Double = Math.PI ' 円周率 */ Dim N As Integer = 10 ' 水槽断面検討ケース数 */ Dim title As String ' タイトル (入力値)*/ Dim Hg As Double ' 総落差 (入力値)*/ Dim Q0 As Double ' 最大使用水量 (入力値)*/ Dim L As Double ' 圧力水路延長 (入力値)*/ Dim c As Double ' 圧力水路損失水頭係数(入力値)*/ Dim Cd As Double ' 制水口流量係数 (入力値)*/ Dim zm As Double ' 最大上昇水位 (規制値:入力値) */ Dim d0 As Double ' 圧力水路内径 (入力値)*/ Dim xc As Double ' 選定したポート径 */ Dim yc As Double ' 選定した立坑径 */ Dim zc As Double ' 選定した立坑径の最高水位 */ Dim R_DFC2 As Double ' 動的安定性より定まる最小水槽径(記憶用) */ Dim DF(20) As Double ' 水槽内径(計算条件格納) */ Dim zmax(20) As Double ' 最大上昇水位(計算結果格納) */ Dim draw_xmin As Double Dim draw_xmax As Double Dim draw_dx As Double Dim draw_ymin As Double Dim draw_ymax As Double Dim draw_dy As Double Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load PictureBox1.Visible = True ToolStripStatusLabel1.Text = "size and Png file name" End Sub Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click main_part() End Sub Private Sub main_part() Dim sr As System.IO.StreamReader Dim fnameR As String = "" '入力ファイル名*/ Dim fnameI As String = "" 'データファイル Dim fnameW_SC As String = "" '出力ファイル名*/ Dim fnameW_VF As String = "" '出力ファイル名*/ Dim fnameZ As String = "" Dim fnameW As String = "" Dim fnameF As String = "" Dim dir As String = "" Dim dat As String Dim sbuf() As String Dim delim As Char = ","c Dim iii As Integer Dim jjj As Integer Dim nnn As Integer Dim bboxv(3) As Integer '入出力ファイル指定 openFileDialog1.InitialDirectory = System.IO.Directory.GetCurrentDirectory() If OpenFileDialog1.ShowDialog() = DialogResult.OK Then fnameR = OpenFileDialog1.FileName sr = New System.IO.StreamReader(fnameR, System.Text.Encoding.Default) dat = sr.ReadLine() : sbuf = dat.Split(delim) nnn = Integer.Parse(sbuf(0)) For iii = 1 To nnn 'データ入力 dat = sr.ReadLine() : sbuf = dat.Split(delim) fnameI = sbuf(0).Trim() fnameW_SC = sbuf(1).Trim() fnameW_VF = sbuf(2).Trim() bboxv(0) = Integer.Parse(sbuf(3).Trim()) bboxv(1) = Integer.Parse(sbuf(4).Trim()) bboxv(2) = Integer.Parse(sbuf(5).Trim()) bboxv(3) = Integer.Parse(sbuf(6).Trim()) dir = System.IO.Path.GetDirectoryName(fnameR) fnameI = dir & "\" & fnameI Call INP_DAT(fnameI) For jjj = 0 To 1 Select Case jjj Case 0 fnameW = dir & "\" & "gpl_temp_SC.txt" fnameF = dir & "\" & fnameW_SC Call CAL_SC(dir) Call PLOT_SC(fnameW, fnameW_SC) Case 1 fnameW = dir & "\" & "\gpl_temp_VF.txt" fnameF = dir & "\" & fnameW_VF Call CAL_VF(dir) Call PLOT_VF(fnameW, fnameW_VF) End Select '************************************************************** 'gnuplot 起動+epsファイル作成 (fnameW: コマンド記述ファイル名) '************************************************************** Call GPL(fnameW) System.Threading.Thread.Sleep(1000) '1秒待つ '************************************************************** 'eps の BoundingBox 修正 (fnameF: eps画像ファイル名) '************************************************************** fnameZ = fnameF.Replace("_eps_", "_eps_z_") Call BBOX(fnameF, fnameZ, bboxv) '************************************************************** 'ImageMagick による png 画像作成 (fnameZ: eps画像ファイル名) '************************************************************** Call IMCVT(fnameZ) '************************************************************** 'ImageMagick による 白背景合成 (fnameZ: png画像ファイル名) '************************************************************** fnameZ = fnameZ.Replace("eps", "png") Call IMCMP(fnameZ) System.Threading.Thread.Sleep(1000) '1秒待つ '************************************************************** 'png 画像画面表示 (fnameZ: png画像ファイル名) '************************************************************** fnameZ = fnameZ.Replace("_png_z_", "_png_zw_") Call VIEWPNG(fnameZ) Next jjj Next iii sr.Close() MessageBox.Show("計算完了", "完了通知") End Sub '-------------------------------------------------------------------------------------------- Private Sub GPL(ByVal fnameR As String) '***************************************************** 'gnuplot 起動+epsファイル作成 '***************************************************** Dim pr As System.Diagnostics.Process Dim sw As System.IO.StreamWriter Dim dir As String = "" Dim fname As String = "" Dim dat As String = "" dir = System.IO.Path.GetDirectoryName(fnameR) System.IO.Directory.SetCurrentDirectory(dir) fname = System.IO.Path.GetFileName(fnameR) pr = New System.Diagnostics.Process() pr.StartInfo.FileName = "gnuplot.exe" pr.StartInfo.RedirectStandardInput = True pr.StartInfo.RedirectStandardOutput = True pr.StartInfo.UseShellExecute = False pr.StartInfo.CreateNoWindow = True pr.Start() sw = pr.StandardInput dat = String.Format("load ""{0:s}""", fname) sw.WriteLine(dat) sw.Close() pr.WaitForExit() pr.Close() End Sub '-------------------------------------------------------------------------------------------- Private Sub BBOX(ByVal fnameR As String, ByVal fnameW As String, ByRef bboxv() As Integer) Dim sr As System.IO.StreamReader Dim sw As System.IO.StreamWriter Dim dat As String Dim i As Integer 'データ入力 sr = New System.IO.StreamReader(fnameR, System.Text.Encoding.Default) sw = New System.IO.StreamWriter(fnameW, False, System.Text.Encoding.Default) i = 0 Do Until sr.EndOfStream i = i + 1 dat = sr.ReadLine() If i = 6 Then dat = String.Format("%%BoundingBox: {0:D} {1:D} {2:D} {3:D}", bboxv(0), bboxv(1), bboxv(2), bboxv(3)) sw.WriteLine(dat) Loop sr.Close() sw.Close() End Sub '-------------------------------------------------------------------------------------------- Private Sub IMCVT(ByVal fnameF As String) '***************************************************** 'ImageMagick convert で png 画像作成 '***************************************************** Dim fnameP As String Dim pr As System.Diagnostics.Process Dim sw As System.IO.StreamWriter Dim dat As String = "" fnameP = fnameF.Replace("eps", "png") pr = New System.Diagnostics.Process() pr.StartInfo.FileName = "cmd.exe" pr.StartInfo.RedirectStandardInput = True pr.StartInfo.RedirectStandardOutput = True pr.StartInfo.UseShellExecute = False pr.StartInfo.CreateNoWindow = True pr.Start() sw = pr.StandardInput dat = String.Format("convert -density 300 {0:s} {1:s}", fnameF, fnameP) sw.WriteLine(dat) sw.Close() pr.WaitForExit() pr.Close() End Sub '-------------------------------------------------------------------------------------------- Private Sub IMCMP(ByVal fnameZ As String) '***************************************************** 'ImageMagick convert で 白背景合成画像作成 '***************************************************** Dim fnameP As String Dim fnameB As String Dim pr As System.Diagnostics.Process Dim sw As System.IO.StreamWriter Dim dat As String = "" Dim img As Image Dim ww As Integer Dim hh As Integer img = Image.FromFile(fnameZ) ww = img.Width hh = img.Height img.Dispose() fnameP = fnameZ.Replace("_z_", "_zw_") fnameB = System.IO.Path.GetDirectoryName(fnameP) & "\base.png" pr = New System.Diagnostics.Process() pr.StartInfo.FileName = "cmd.exe" pr.StartInfo.RedirectStandardInput = True pr.StartInfo.RedirectStandardOutput = True pr.StartInfo.UseShellExecute = False pr.StartInfo.CreateNoWindow = True pr.Start() sw = pr.StandardInput dat = String.Format("convert -size {0:D}x{1:D} xc:""#FFFFFF"" {2:s}", ww, hh, fnameB) sw.WriteLine(dat) dat = String.Format("convert {0:s} {1:s} -composite {2:s}", fnameB, fnameZ, fnameP) sw.WriteLine(dat) sw.Close() pr.WaitForExit() pr.Close() End Sub '-------------------------------------------------------------------------------------------- Private Sub VIEWPNG(ByVal fnameZ As String) '***************************************************** 'png 画像画面表示 (50%縮尺) '***************************************************** Dim img As Image Dim bmp As Bitmap Dim g As Graphics Dim ratio As Single = 0.5 Dim ww As Integer Dim hh As Integer Dim w_org As Integer Dim h_org As Integer img = Image.FromFile(fnameZ) w_org = img.Width h_org = img.Height ww = CInt(ratio * w_org) hh = CInt(ratio * h_org) PictureBox1.Size = New Size(ww, hh) bmp = New Bitmap(ww, hh) PictureBox1.Image = bmp g = Graphics.FromImage(PictureBox1.Image) g.DrawImage(img, 0, 0, ww, hh) g.Dispose() img.Dispose() PictureBox1.Left = 0 PictureBox1.Top = ToolStrip1.Height Me.ClientSize = New Size(PictureBox1.Width, PictureBox1.Height + ToolStrip1.Height + StatusStrip1.Height) ToolStripStatusLabel1.Text = String.Format("{0:D} x {1:D} : {2:s}", w_org, h_org, fnameZ) End Sub '-------------------------------------------------------------------------------------------- Private Sub INP_DAT(ByVal fnameR As String) Dim sr As System.IO.StreamReader Dim dat As String Dim sbuf() As String Dim delim As Char = ","c sr = New System.IO.StreamReader(fnameR, System.Text.Encoding.Default) dat = sr.ReadLine() : sbuf = dat.Split(delim) title = sbuf(0).Trim() 'タイトル*/ dat = sr.ReadLine() dat = sr.ReadLine() : sbuf = dat.Split(delim) Hg = Double.Parse(sbuf(0)) ' 総落差 */ Q0 = Double.Parse(sbuf(1)) ' 最大使用水量 */ L = Double.Parse(sbuf(2)) ' 圧力水路延長 */ d0 = Double.Parse(sbuf(3)) ' 圧力水路内径 */ c = Double.Parse(sbuf(4)) ' 圧力水路損失水頭係数 */ Cd = Double.Parse(sbuf(5)) ' 制水口流量係数 */ zm = Double.Parse(sbuf(6)) ' 最大上昇水位 */ xc = Double.Parse(sbuf(7)) ' 選定ポート径 */ yc = Double.Parse(sbuf(8)) ' 選定立坑径 */ sr.Close() End Sub '-------------------------------------------------------------------------------------------- Private Sub CAL_SC(ByVal dir As String) Dim sw As system.IO.StreamWriter Dim fnameW As String = "" Dim dat As String Dim iflag As Integer = 0 Dim fwa As Double Dim v0 As Double Dim h0 As Double ' 遮断前圧力水路損失水頭 h0=c*v0*v0 */ Dim k0 As Double ' 遮断時制水口抵抗 */ Dim DFC1 As Double ' 水槽内径(限界条件) */ Dim DFC2 As Double ' 水槽内径(限界条件) */ Dim DFC3 As Double ' 水槽内径(限界条件) */ Dim Fsa As Double ' 水槽断面積 */ Dim Fpa As Double ' 制水口断面積 */ Dim d2 As Double ' 制水口内径計算範囲指定 */ Dim d2min As Double ' 制水口内径計算範囲指定 */ Dim d2max As Double ' 制水口内径計算範囲指定 */ Dim d2d As Double ' 制水口内径計算範囲指定 */ fnameW = dir & "\temp_SC.prn" ' 安定条件 */ fwa = 0.25 * pi * d0 * d0 v0 = Q0 / fwa h0 = c * v0 * v0 Fsa = L * fwa / c / 2.0 / g / (Hg - zm) DFC2 = Math.Sqrt(4.0 * Fsa / pi) R_DFC2 = DFC2 d2min = 0.1 d2max = CDbl(CInt(DFC2 + 1.0)) d2d = 0.1 sw = New System.IO.StreamWriter(fnameW, False, System.Text.Encoding.Default) dat = "#d2 k0-h0 DFC1 DFC2 DFC3" : sw.WriteLine(dat) 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 Then Exit Do Fsa = h0 * L * fwa / c / (h0 + k0) / g / Hg DFC1 = Math.Sqrt(4.0 * Fsa / pi) Fsa = h0 * L * fwa * fwa * fwa / 2.0 / g / c / c / k0 / Q0 / Q0 DFC3 = Math.Sqrt(4.0 * Fsa / pi) dat = String.Format("{0,6:F3} {1,10:E3} {2,6:F3} {3,6:F3} {4,6:F3}", d2, k0 - h0, DFC1, DFC2, DFC3) : sw.WriteLine(dat) Loop While d2 < d2max sw.Close() draw_xmin = 0.0 draw_xmax = CDbl(CInt(d2 - d2d)) draw_dx = 0.5 draw_ymin = 0.0 draw_ymax = CDbl(CInt((DFC2 + 1.0) / 2.0)) * 6.0 draw_dy = 2.0 End Sub '-------------------------------------------------------------------------------------------- Private Sub CAL_VF(ByVal dir As String) Dim sw As System.IO.StreamWriter Dim sr As System.IO.StreamReader Dim fnameW As String = "" Dim fnameR As String = "" Dim i As Integer Dim iflag As Integer Dim dat As String Dim fwa As Double Dim v0 As Double Dim md As Double Dim Fsa As Double ' 水槽断面積 */ Dim Fpa As Double ' 制水口内径,断面積 */ Dim d1 As Double ' 水槽内径計算範囲指定 */ Dim d1min As Double ' 水槽内径計算範囲指定 */ Dim d1d As Double ' 水槽内径計算範囲指定 */ Dim d2 As Double ' 制水口内径計算範囲指定 */ Dim d2min As Double ' 制水口内径計算範囲指定 */ Dim d2d As Double ' 制水口内径計算範囲指定 */ Dim h0 As Double ' 遮断前圧力水路損失水頭 h0=c*v0*v0 */ Dim k0 As Double ' 遮断時制水口抵抗 */ fnameW = dir & "\temp_VF.prn" fnameR = fnameW ' Vogt-Forchheimer の式による最高上昇水位 */ fwa = 0.25 * pi * d0 * d0 v0 = Q0 / fwa h0 = c * v0 * v0 d1min = CDbl(CInt(R_DFC2 + 1.0)) d1d = 1.0 For i = 0 To N - 1 DF(i) = d1min + d1d * CDbl(i) Next i sw = New System.IO.StreamWriter(fnameW, False, System.Text.Encoding.Default) dat = "#d2 k0-h0" For i = 0 To N - 1 dat = dat & " DF=" & DF(i).ToString("0") Next i sw.WriteLine(dat) d2min = 0.1 d2d = 0.1 d2 = d2min - d2d Do d2 = d2 + d2d Fpa = 0.25 * pi * d2 * d2 k0 = 0.5 / g * Q0 * Q0 / Cd / Cd / Fpa / Fpa If k0 - h0 < 0 Then Exit Do iflag = 1 ' log関数の引数を監視するフラグ */ For i = 0 To N - 1 d1 = df(i) Fsa = 0.25 * pi * d1 * d1 md = 2.0 * g * Fsa * (h0 + k0) / L / fwa / v0 / v0 zmax(i) = CAL_ZM(d1, k0, h0, md, iflag) Next i If iflag = 1 Then dat = d2.ToString("0.000") dat = dat + " " + (k0 - h0).ToString("0.000") For i = 0 To N - 1 dat = dat & " " + zmax(i).ToString("0.000") Next i sw.WriteLine(dat) End If Loop While d2 < draw_xmax sw.Close() iflag = 1 d1 = yc '水槽内径 d2 = xc '制水口内径 Fsa = 0.25 * pi * d1 * d1 Fpa = 0.25 * pi * d2 * d2 k0 = 0.5 / g * Q0 * Q0 / Cd / Cd / Fpa / Fpa md = 2.0 * g * Fsa * (h0 + k0) / L / fwa / v0 / v0 zc = CAL_ZM(d1, k0, h0, md, iflag) '最高上昇水位 Dim sbuf() As String Dim delim As Char = " "c sr = New System.IO.StreamReader(fnameR, System.Text.Encoding.Default) dat = sr.ReadLine() Do Until sr.EndOfStream dat = sr.ReadLine() sbuf = dat.Split(delim) For i = 0 To N - 1 zmax(i) = Double.Parse(sbuf(i + 2)) Next i Loop sr.Close() draw_ymin = 0.0 draw_ymax = CDbl(CInt(0.1 * zmax(0)) + 1) * 10.0 draw_dy = 10.0 draw_ymax = 100.0 End Sub '-------------------------------------------------------------------------------------------- Private Function CAL_ZM(ByVal d1 As Double, ByVal k0 As Double, ByVal h0 As Double, ByVal md As Double, ByRef iflag As Integer) As Double Dim ff As Double Dim dff As Double Dim z1 As Double = 0.0 Dim z2 As Double Dim z As Double Dim eps As Double = 0.0000000001 ' 収束計算0判定 */ If md * k0 < 1.0 Then z1 = -1.0 / md + 0.0001 Do z = z1 If 1.0 + md * z < 0 Then iflag = 0 : Exit Do End If ff = ((1.0 + md * z) - Math.Log(1.0 + md * z)) - ((1.0 + md * h0) - Math.Log(1.0 - md * k0)) dff = md * (1.0 - 1.0 / (1.0 + md * z)) z2 = z1 - ff / dff z1 = z2 Loop While eps < Math.Abs(ff) End If If 1.0 < md * k0 Then z1 = 1.0 / md + 0.0001 Do z = z1 ff = ((md * z - 1.0) + Math.Log(md * z - 1.0)) - (Math.Log(md * k0 - 1.0) - (md * h0 + 1.0)) If md * z - 1.0 < 0 Then iflag = 0 : Exit Do End If dff = md * (1.0 + 1.0 / (md * z - 1.0)) z2 = z1 - ff / dff z1 = z2 Loop While eps < Math.Abs(ff) End If Return Math.Abs(z1) End Function '-------------------------------------------------------------------------------------------- Private Sub PLOT_SC(ByVal fnameW As String, ByVal fnameW_SC As String) Dim sw As System.IO.StreamWriter Dim dat As String = "" Dim xx As Double Dim yy As Double '***************************/ 'gnuplot制御用ファイル作成*/ '***************************/ sw = New System.IO.StreamWriter(fnameW, False, System.Text.Encoding.Default) dat = "set terminal postscript eps enhanced font ""Helvetica"" 16" : sw.WriteLine(dat) dat = String.Format("set output ""{0:s}""", fnameW_SC) : sw.WriteLine(dat) dat = "set size ratio 1.0" : sw.WriteLine(dat) dat = "set key left top" If 0 < title.IndexOf("Input") Then dat = "set key right top" sw.WriteLine(dat) dat = "set key width -2" : sw.WriteLine(dat) dat = "set key spacing 1.2" : sw.WriteLine(dat) dat = "set key box" : sw.WriteLine(dat) dat = "set xlabel ""Diameter of the port (m)""" : sw.WriteLine(dat) dat = "set ylabel ""Diameter of the surge tank (m)""" : sw.WriteLine(dat) dat = String.Format("set xrange [{0:F3}:{1:F3}]", draw_xmin, draw_xmax) : sw.WriteLine(dat) dat = String.Format("set xtics {0:F3}", draw_dx) : sw.WriteLine(dat) dat = String.Format("set format x ""{0:s}""", "%.1f") : sw.WriteLine(dat) dat = String.Format("set yrange [{0:F3}:{1:F3}]", draw_ymin, draw_ymax) : sw.WriteLine(dat) dat = String.Format("set ytics {0:F3}", draw_dy) : sw.WriteLine(dat) dat = String.Format("set format y ""{0:s}""", "%.0f") : sw.WriteLine(dat) dat = "set tmargin 2" : sw.WriteLine(dat) dat = String.Format("set label "" {0:s}"" at graph 0.0,graph 1.03 left", title) : sw.WriteLine(dat) dat = "set rmargin 8" : sw.WriteLine(dat) '2本の直線(nohead矢印)による選択点の表示*/ dat = "set style arrow 2 size graph 0.05,20 filled nohead linewidth 1 linetype 1" : sw.WriteLine(dat) dat = String.Format("set arrow as 2 from {0:F3},{1:F3} to {2:F3},{3:F3}", draw_xmin, yc, xc, yc) : sw.WriteLine(dat) dat = String.Format("set arrow as 2 from {0:F3},{1:F3} to {2:F3},{3:F3}", xc, draw_ymin, xc, yc) : sw.WriteLine(dat) xx = (xc - draw_xmin) / (draw_xmax - draw_xmin) + 0.02 yy = 0.0 dat = String.Format("set label "" {0:F1}m"" at graph {1:F3},graph {2:F3} left rotate by 90", xc, xx, yy) : sw.WriteLine(dat) xx = 0.0 yy = (yc - draw_ymin) / (draw_ymax - draw_ymin) + 0.02 dat = String.Format("set label "" {0:F1}m"" at graph {1:F3},graph {2:F3} left", yc, xx, yy) : sw.WriteLine(dat) '動的安定性を満足する水槽径最小値の表示*/ xx = 0.0 yy = (R_DFC2 - draw_ymin) / (draw_ymax - draw_ymin) + 0.02 dat = String.Format("set label "" {0:F3}m (Target {1:%s}={2:F1}m)"" at graph {3:F3},graph {4:F3} left", R_DFC2, "Z{/=10 m}", zm, xx, yy) : sw.WriteLine(dat) '軸作成*/ dat = "set grid xtics ytics mxtics mytics" : sw.WriteLine(dat) dat = "plot ""temp_SC.prn"" using 1:3 with lines linewidth 3 linetype 4 title ""D{/=10 req} > D{/=10 1}"", \" : sw.WriteLine(dat) dat = " ""temp_SC.prn"" using 1:4 with lines linewidth 3 linetype 1 title ""D{/=10 req} > D{/=10 2}"", \" : sw.WriteLine(dat) dat = " ""temp_SC.prn"" using 1:5 with lines linewidth 3 linetype 2 title ""D{/=10 req} < D{/=10 3}"", \" : sw.WriteLine(dat) dat = " ""-"" with points pointsize 2 pointtype 7 title ""Selected point""" : sw.WriteLine(dat) dat = String.Format("{0:F3} {1:F3}", xc, yc) : sw.WriteLine(dat) dat = "e" : sw.WriteLine(dat) sw.Close() End Sub '-------------------------------------------------------------------------------------------- Private Sub PLOT_VF(ByVal fnameW As String, ByVal fnameW_VF As String) Dim sw As System.IO.StreamWriter Dim dat As String = "" Dim i As Integer Dim xx As Double Dim yy As Double '***************************/ 'gnuplot制御用ファイル作成*/ '***************************/ sw = New System.IO.StreamWriter(fnameW, False, System.Text.Encoding.Default) dat = "set terminal postscript eps enhanced font ""Helvetica"" 16" : sw.WriteLine(dat) dat = String.Format("set output ""{0:s}""", fnameW_VF) : sw.WriteLine(dat) dat = "set size ratio 1.0" : sw.WriteLine(dat) dat = "set key left top" If 0 < title.IndexOf("Input") Then dat = "set key right top" sw.WriteLine(dat) dat = "set key width -4" : sw.WriteLine(dat) dat = "set key spacing 1.2" : sw.WriteLine(dat) dat = "set key box" : sw.WriteLine(dat) dat = "set xlabel ""Diameter of the port (m)""" : sw.WriteLine(dat) dat = "set ylabel ""Maximum WL Z{/=10 max} (m) or Difference of pressure |Z'{/=10 rm}| (m)""" : sw.WriteLine(dat) dat = String.Format("set xrange [{0:F3}:{1:F3}]", draw_xmin, draw_xmax) : sw.WriteLine(dat) dat = String.Format("set xtics {0:F3}", draw_dx) : sw.WriteLine(dat) dat = String.Format("set format x ""{0:s}""", "%.1f") : sw.WriteLine(dat) dat = String.Format("set yrange [{0:F3}:{1:F3}]", draw_ymin, draw_ymax) : sw.WriteLine(dat) dat = String.Format("set ytics {0:F3}", draw_dy) : sw.WriteLine(dat) dat = String.Format("set format y ""{0:s}""", "%.0f") : sw.WriteLine(dat) dat = "set tmargin 2" : sw.WriteLine(dat) dat = String.Format("set label "" {0:s}"" at graph 0.0,graph 1.03 left", title) : sw.WriteLine(dat) dat = "set rmargin 8" : sw.WriteLine(dat) '直線(nohead矢印)による水位上昇限界値の表示*/ dat = "set style arrow 2 size graph 0.05,20 filled nohead linewidth 1 linetype 1" : sw.WriteLine(dat) dat = String.Format("set arrow as 2 from {0:f3},{1:F3} to {2:F3},{3:F3}", draw_xmin, zm, draw_xmax, zm) : sw.WriteLine(dat) xx = 0.0 yy = (zm - draw_ymin) / (draw_ymax - draw_ymin) + 0.02 dat = String.Format("set label "" Target {0:s}={1:F1}m"" at graph {2:F3},graph {3:F3} left", "Z{/=10 m}", zm, xx, yy) : sw.WriteLine(dat) '最高上昇水位内径凡例*/ For i = 0 To N - 1 dat = String.Format("set label "" D={0:F0}m"" at first {1:F3},first {2:F3} left", DF(i), draw_xmax, zmax(i)) : sw.WriteLine(dat) Next i '軸作成*/ dat = "set grid xtics ytics mxtics mytics" : sw.WriteLine(dat) dat = "plot \" : sw.WriteLine(dat) For i = 0 To N - 1 dat = String.Format("""temp_VF.prn"" using 1:{0:D} with line linewidth 3 linetype 1 notitle, \", 3 + i) : sw.WriteLine(dat) Next i dat = """temp_VF.prn"" using 1:2 with linespoints linewidth 3 pointtype 6 title ""|Z'{/=10 rm}| = k{/=10 0} - h{/=10 0}"", \" : sw.WriteLine(dat) dat = """-"" with points pointsize 2 pointtype 7 title ""Selected point""" : sw.WriteLine(dat) dat = String.Format("{0:F3} {1:F3}", xc, zc) : sw.WriteLine(dat) dat = "e" : sw.WriteLine(dat) sw.Close() End Sub '-------------------------------------------------------------------------------------------- End Class