Day19

斜面安定計算

Topへ

Day18へ

はじめに

image

斜面の安定計算は学生時代に習った計算ですが、その計算は1パターンのみで、実際は何回も計算を繰り返し解を求める必要があるものでした。
なので、当時は答えを導きだせない計算をなぜ教えるのだろうと不思議で消化不良の状態でした。
ということで、そのころの思いを解消するべくこの強敵と対峙しようと思います。 今回は盛土を想定しますので、地盤と盛土部で土質が異なる条件として計算していきます。(画像の色分部でそれぞれの土質条件を設定します。)

Step1

断面の決定

image

それでは、Visual Studioを起動します。
「新しいプロジェクトの作成」を選択します

image

「Windowsフォームアプリケーション」を選択して「次へ」ボタンを押します。

image

プロジェクト名を入力します。
今回は「斜面の安定(簡易版)」としました。
入力後「作成」ボタンを押します。

image

「Form1」が表示されますので、そのデザイン画面にツールボックスの「GroupBox」と「Button」を貼り付けます。
それぞれのプロパティの「Text」の内容を「断面」と「断面の作成」にします。

image

今回も、断面形状の入力は別フォームで行なうようにしようと思います。
なので、新しいフォームを作成します。
ソリューションエクスプローラーの下の「斜面の安定(簡易版)」を右クリックして「追加」を選択し、[新しい項目」を選びます。

image

その中の「フォーム」を選びます。
名前はデフォルトの「Form2」のままにします。

image

新しいフォームを追加したので、「Form1」に戻り、「Form2」の設定をします。
「Form1」のデザイン画面をダブルクリックして、コード入力画面を開きます。
まず、画像のとおり、上部にフォームの変数を宣言します。
その後、ロードイベントに戻り「Form2」のインスタンスをします。

image

断面の作成ボタンをダブルクリックして、その中に、「f2.ShowDialog();」と入力します。
これで、Form2画面を表示(遷移)できるようになります。

image

「Form2」のデザイン画面に移動します。
フォームのプロパティの「Text」を「断面の作成」に変更します。

image

ツールボックスから「PicturBox」を選択し、フォームに貼り付けます。
プロパティの「Image」で、模式図を表示させます。

image

入力用のテキストボックス等を配置していきます。
レイアウトは画像のとおりにしました。

image

「Form1」に戻り変数を宣言します。
今欲しい変数は、断面入力用になりますが、この他、断面の各点の座標を格納する変数も欲しいので 併せて宣言することにします。
変数は、「Form2」でも使用するので「public static」を頭に付けて統一の変数とします。

image

変数宣言が完了したので、「Form2」のデザイン画面に戻ります。
最初は、恒例の入力制限をしていきます。
textbox1を選択し、プロパティのイベントマーク(雷マーク)を選択し、その中の「KeyPress」をダブルクリックしいます。

image

お馴染みのコードです。
他のテキストボックスも同様の作業をします。

image

全角を半角に変換できる命令文が書けるようにその準備をします。
ソリューションエクスプローラーの「参照」を右クリックします。
そうするとメニューが表示されるので「参照の追加」をクリックします。

image

「参照マネージャー」ダイアログが表示されますので、「アセンブリ」を選択し、 表示されるアセンブリの一覧から 「Microsoft.VisualBasic」を選択し「OK」ボタンをクリックします。

image

コードを書く画面に移動し一番上の方に「using Microsoft.VisualBasic;」を追加します。

image

デザイン画面に戻ります。
「入力完了」ボタンをダブルクリックし、コード入力画面を開きます。

image

「button1_Click」イベントがアクティブになっていると思います。
ここで、入力内容の取得を行います。
最初の処理は、未入力の場合になります。textbox1~textbox5のいずれかのTextが空白の場合にこのイベントを抜けるようにしています。

image

次に、入力された数値の取得です。全角入力されてもいいように処理しています。
最後に、取得した入力値を「Form1」で宣言した変数に格納します。

image

決定された地盤寸法から座標値を決定します。座標値は地盤の左端から順に格納することとします。

image

「Form1」に変数を追加します。
追加する変数は、断面が入力完了し決定している目印としての完了フラグになります。
今後のことも踏まえて3つ分用意しておきます。

image

断面が決定している目印として完了フラグを変更したいと思います。
「Form2」の「button1_Click」イベントに戻りフラグ用変数「btn1end」を「True」にするコードを追記します。
これで、ここでのイベントは完了になりますので「Form2」を閉じるコードを追記して完了になります。

image

断面形状が確定したので、「Form1」の画面に擁壁断面の描画を行いたいと思います。
重力式擁壁の時と同様に、画面サイズは400pxの真角にします。
余白は50pxにします。

image

「PicturBox」をデザイン画面に「Form1」に貼り付けます。
サイズを500px✕500pxにします。

image

画像を表示する「PictureBox」の背景色を黒にしたいので、フォームロードイベントに「PictureBox」のBackColorを黒にするコードを入力します。

image

描画用のImageオブジェクトを用意します。
今回もビットマップ画像を作成します。作成するコードは、「 Bitmap _bitmap = new Bitmap(400, 400);」 になります。

image

実際に描画するコードを入力していきます。
今回は「Form1」がアクティブになったときに、断面決定フラグが「true」の時に描画を行うようにします。
「Form1」デザイン画面に移動しイベント(カミナリマーク)の「Active」をダブルクリックします。

image

「Form1_Activated」イベントに移動しますので、ここにコードを入力していきます。
まず、描画機能が必要なのでグラフィックオブジェクトを用意します。
次に、全体を黒で塗りつぶします。これで、「Form1」がアクティブになるたびに描画をリセットできるようになります。

image

次に表示倍率を決定します。
計算としては、断面寸法の最大値が画面内に収まるようにします。
寸法の最大値は、画像のとおり、X方向は座標4で、Y方向は座標4になりますので、このうち長い方の寸法を採用します。

image

実際のコードになります。
これで、表示倍率は確定になります。

image

ピクチャーボックスでは開始座標(0、0)を(50,350)にします。
また、Y方向は下方向がで正となり逆方向になります。
なので、それに合わせるために座標を変換します。
コードは画像のとおりとなります。

image

描画のコードになります。
描画には、「.DrawLine」を使用します。
最後にピクチャーボックスに転送して完了になります。

image

ここまでで、実行してみます。
シンプルですが無事、描画されています。

Step2

円弧の移動範囲の決定

image

このステップでは円弧の移動範囲を決めていきます。
まず、「Form1」のデザイン画面に選択した「pictureBox1」上のピクセル座標を表示するようにします。
なので、「textBox」を4か所画像のとおりに貼り付けます。

image

ここからの処理はおいさんには高度なので、「Gemini」に聞いてみました。ここからは「Gemini」によるコードになります。
まず、選択した点の変数を宣言します。
さらに、ここで、マウスが押されているかを格納する変数と、四角を描画する用の変数も宣言するようです。
宣言する場所はいつもの「Form1」の上部になります。

image

次は全くわかりません。とりあえず入力します。
一部エラーが出ていますが、これはまだ定義をしていないので気にしないで進めます。

image

ここからは、先ほどエラーのでたイベントハンドラーの部分を定義していきます。
まず、「pictureBox1_MouseDown」から作成していきます。
最初のコードは定義部分になり、画像のとおりになります。
追加する場所は、「Form1」であればどこでも良いのですが今回は最後の位置にしています。

image

画像は「pictureBox1_MouseDown」の中身のコードを追加した状況になります。細かいことはわかりませんが、AIなので問題ないはずです。

image

次に「pictureBox1_MouseMove」のイベントのコードを追加します。どうやら四角を描く制御をしているようです。

image

画像は「pictureBox1_MouseUp」のイベントのコードになります。「pictureBox1_MouseMove」との違いがよくわかりません。

image

最後は「pictureBox1_Paint」イベントのコードになります。ペンの設定をしているようです。

image

不安になってきたので一度実行してみます。画像がその実行結果になります。無事赤色の矩形が描画されています。
さすがGemini

image

矩形が無事に描画されたのでその矩形の座標を取得します。取得する座標は矩形の左上端と右下端とします。
取得した座標は、デザイン画面のtextBoxに表示するようにします。
その追加するコードは画像のとおりになります。

image

画像は座標取得後の実行画面になります。これで一連の作業が完了しましたのでこのステップは終了になります。

Step3

円弧と地盤の交点の計算

image

ここは、かなり複雑になりそうなので、仮の断面を設定して進めていこうと思います。
ということで仮の断面を画像のとおりとしたいと思います。
条件は
円弧の中心座標をxc=6m,yc=10m、円弧の半径r=7.9m、下地盤の長さL1=10m、下地盤の標高EL=4m、勾配N=2、 高低差H=1m、分割ピッチ2m
とします。

image

ということで円弧と直線の交点計算についてになります。
いろいろ調べたのですが、結局よくわかりませんでした。
意味は分からないですが、流れだけを追っていこうと思います。
まず、直線の両端の座標を(x1、y1)と(x2、y2)とすると、この2点をとおる直線の方程式は、一般的に画像にある形式で表されるようです。

image

係数a、b、cは、与えられた2点から次のように求められようです。

image

また、単位ベクトルやら直位ベクトルなるものも登場します。とりあえず画像のようになるようです。
円弧の中心座標も画像のとおりとします。

image

ここは全くわかりませんが、今までの変数を使用し、kとSは画像のようになるようです。

image

さらにわからなくなるのですが、kが分かれば垂線の式V1とV2が導き出せるようです。その式は画像のとおりになるようです。

image

ここまで来てやっと交点の座標が導き出せるようです。その式が画像のとおりで直線と円弧の交点は2か所あるので式は4つになります。

image

ということで、式の羅列をしていきましたが、結局何をすればわからないので、一つずつ具体的に進めます。 では、最初に変数宣言をしていきます。「Form1」の上部に追加します。

image

変数宣言の続きになります。

image

変数宣言が完了しましたので、交点を計算する処理を作成していきます。
この処理は、何度も使用するのでクラス化(部品化)します。
ソリューションエクスプローラーの下の「斜面の安定」のところで右クリックします。 そして、「追加」→「新しい項目」を選択します。

image

「クラス」を選択し、名前を入力します。
今回は「ClossCalc.cs」として、「追加」ボタンを押します。

image

コードが書ける画面が現れます。
ここに、計算するコードを入力していきます。

image

最初にメンバー変数とメンバー関数を定義します。
この中で、交点の変数「intersectionXp」と「intersectionYp」を宣言して、計算結果を格納し、 メンバー関数「OutValueXp」と「OutValueYp」で値を返す構造としました。
交点は2か所あるのでそれぞれ用意します。

image

メンバー関数「CalcValue」の中身を作成していきます。
まず、係数a,b,cを計算するところから始めます。なお、直線の座標、円弧の中心座標および半径は受け取る形にします。
コードは画像のとおりとなります。

image

次に、単位ベクトル・直位ベクトル・円弧の中心座標を処理していきます。
まず、直線長Lを求めます。
その後、単位ベクトルと直位ベクトルを求めます。

image

kとSの計算処理を行います
計算のコードは画像のとおりになります。

image

垂線V1とV2の計算になります。

image

ようやく交点の計算になります。
これでこのクラスの作業は完了になります。

image

早速このクラスを使用して具体的に計算をしていこうと思います。
計算条件はこのステップの最初に表示した画像になりますが、この条件は直線が3本あります。
なので、直線を分割してそれぞれの交点を計算していきます。
その前に、計算用のボタンを追加します。ひとまずレイアウトは気にしないで進めます。

image

ボタンをダブルクリックしてクリックイベントに移動します。
先ほど作成したクラスをインスタンスして、各交点を出力するコードを作成します。
今回は、確認作業になるので出力するコードを作成しません。

image

一つ目の交点計算をします。
まずは下の地盤部の計算を行いますが、存在しない線は破線にしています。

image

送るデータは画像のとおりになります。
結果は、1点目が0.86093,4で2点目が11.13907,4になり無事計算できていました。

image

二つ目の交点計算をします。
のり面部になりますがこちらも存在しない線は破線にしています。

image

送るデータは画像のとおりになります。
結果は、1点目が6.205338,2.102669で2点目が12.19466,5.097331になり無事計算できていました。

image

最後の交点計算をします。
盛土上面部になりますがこちらも存在しない線は破線にしています。

image

送るデータは画像のとおりになります。
結果は、1点目が-0.11637,5で2点目が12.11637,5になり無事計算できていました。

image

今の3つの計算をまとめます。すでに宣言している変数があればそれを使用しまとめることとします。
まとめた場合のコードが画像のとおりになります。

image

現時点で交点は6点ありますが、実際には2点しかありません。そこでその整理をする必要があります。
処理方法としては、その点が実際の線上にあるか確認し選別していく方法とします。
決定した交点を格納する変数を宣言していなかっので、先にそのコードを追加します。

image

うまく計算ができないので、再度変数を作成します。すみません。
その中に交点の座標を格納します。

image

ここのコードで、交点が線上にあるか判断します。もし線上になければその値を0にすることにします。

image

0ではない値が実際の交点になるので、すべての変数を確認します。
0ではない値があればその値を交点用の変数に格納します。
これでやっと交点の処理が完了になります。

Step4

土質定数等の入力

image

このステップでは地盤部と盛土部の土質定数等を入力するフォームを作成します。
入力項目はそれぞれ「単位体積重量」、「粘着力」、「せん断抵抗角」及び「上載荷重」になります。

image

デザイン画面にツールボックスの「GroupBox」と「Button」を貼り付けます。
それぞれのプロパティの「Text」の内容を「土質定数」と「土質定数の入力」にします。

image

新しいフォームを作成します。
ソリューションエクスプローラーの下の「斜面の安定(簡易版)」を右クリックして「追加」を選択し、[新しい項目」を選びます。

image

その中の「フォーム」を選びます。
名前はデフォルトの「Form3」のままにします。

image

新しいフォームを追加したので、「Form1」に戻り、「Form3」の設定をします。
「Form1」のデザイン画面をダブルクリックして、コード入力画面を開きます。
まず、画像のとおり、上部にフォームの変数を宣言します。

image

「Form1」のロードイベントに移り「Form3」のインスタンスをします。

image

「土質定数の入力」ボタンをダブルクリックして、その中に、「f3.ShowDialog();」と入力します。
これで、Form3画面を表示(遷移)できるようになります。

image

「Form3」のデザイン画面に移動します。
フォームのプロパティの「Text」を「土質定数」に変更します。

image

ツールボックスから「PicturBox」を選択し、フォームに貼り付けます。
プロパティの「Image」で、模式図を表示させます。

image

入力用のテキストボックス等を配置していきます。
レイアウトは画像のとおりにしました。

image

「Form1」に戻り変数を宣言します。
変数は、「Form3」でも使用するのでここでも「public static」を頭に付けて統一の変数とします。
変数は一部配列型にしました。

image

変数宣言が完了したので、「Form3」のデザイン画面に戻ります。
恒例の入力制限をしていきます。
textbox1を選択し、プロパティのイベントマーク(雷マーク)を選択し、その中の「KeyPress」をダブルクリックしいます。

image

いつものコードです。
他のテキストボックスも同様の作業をします。

image

コードを書く画面に移動し一番上の方に「using Microsoft.VisualBasic;」を追加します

image

デザイン画面に戻ります。
「登録」ボタンをダブルクリックし、コード入力画面を開きます。

image

「button1_Click」イベントがアクティブになっていると思います。
ここで、入力内容の取得を行います。
最初の処理は、未入力の場合になります。textbox1~textbox7のいずれかのTextが空白の場合にこのイベントを抜けるようにしています。

image

次に、入力された数値の取得です。全角入力されてもいいように処理しています。
最後に、取得した入力値を「Form1」で宣言した変数に格納します。 ここまででこのボタンの処理は完了になります。

image

「キャンセル」ボタンにもコードを入力します。
クリックイベントを作成し、フォームを閉じるコードを追加します。 以上で土質定数の作業はすべて完了になります。

Step5

準備はできた!!いよいよ計算

image

やっと下準備ができたので、いよいよ安定計算をしていきます。
まず、概念図を画像に示します。
この図でわかるとおり、抵抗力が滑動力より大きければすべり破壊は起きないことなります。

image

画像は上記の概念図を式に表したものになります。分子が抵抗力で分母が滑動力になります。
なので、Fsが1以上になればすべり破壊が起きないということになります。
今回は、間隙水圧は考慮しないものとします。

image

今回もステップ4で使用した仮の条件でコードを作成していこうと思います。

image

一気に先ほどの式の計算をしたいところですが、頭が悪いので、少しづつ計算をしていきます。
具体的には画像の表を左から順に計算していきます。

image

まずは左から2列目までのコードを作成していきます。
この列では分割数とそれ対応するx方向の追加距離を求めていきます。

image

すみません。一つ入力項目が抜けていました。
円弧を分割する幅を決めていませんでした。
画像のとおり入力するテキストを追加します。

image

それでは、「Form1」の「Button2」のイベントの続きにコードを追加していきます。
まずは、分割幅の値を変数に格納する処理をします。
コードは画像のとおりになります。

image

改めて、分割数と追加距離の計算をしていきます。
まず、分割数から作業します。分割数はX座標の0から2個目の交点のX座標までを分割するようにします。
なので、2個目の交点のX座標を分割幅に割ります。その際、「Ceiling」関数を使用して整数値に切り上げします。
また、計算量を制限したいので分割数は100個までとします。

image

追加距離を求めます。画像でいうと赤い矢印になります。分割片の境のX座標になります。

image

追加距離の値を格納する変数をxとして、値を格納していきます。
一番最後だけは、2個目の交点になるようにしています。

image

分割片の境界のX座標が求まりましたので、次にY座標を求めます。

image

画像のとおり、Y座標は赤と青の2か所の座標を求めます。
これは後に分割片の面積を求めることになるので、あらかじめ2点取得していきます。

image

コードになりますが、ここで変数のみ整理しておきます。すみません。

image

変数を追加します。面倒なのでほかの変数も追加します。

image

yの計算のコードになります。
y_gが地盤上の点、y_cが円弧上の点の値を格納する変数にしています。

image

次は分割片の高さを求めます。
これも、2種類求めますが、これは地盤部と盛土部で土質定数が異なるために分けています。
後に分割片の重量を求めるようになりますがその時に使用できるようしています。
文章だけではわかりにくいので次で図示します。

image

盛土部が少なくてわかりにくいですが、地盤より上か下かで分ける形になります。

image

高さhを求めるコードです。毎回毎回繰り返し文を使用するのはカッコ悪いですが、まとめると混乱しそうなので整理はしないです。

image

ここからは分解片の面積を求めていきます。

image

図にする必要はないと思いますが、作成しました。

image

分割片の面積を求めるコードになります。

image

分割片の面積が求まりましたので、それに単位体積重量を掛ければ求まりますが、その重量に上載荷重を追加する必要があります。
なので、まず上載荷重の処理からしていきます。
コードは画像のとおりで、盛土部分にのみ上載荷重が作用しますのでその処理をしています。
その後、土塊重量の計算をしその和を求めることにしています。

image

あともう少しです。ここからはαの計算をしていきます。

image

画像のとおりαはすべり面の傾きになりますので、三角関数の定義から求めることができます。

image

c#では三角関数の角度の単位はラジアンなので、印刷のことを考慮して変数「alpha」には度に変換して格納するようにしました。

image

やっと最後の列になります。

image

すみません。まだ作成していなかった変数を追加します。
「Wcosα」と「Wsinα」の合計値を格納する変数にします。

image

コードになります。ここは単純で助かります。

image

表が完成しました。

image

表は完成しましたが、Fsの式ではまだ求められていない変数があります。
というかあれだけやってもゴールが遠いです。
とりあえず、ここからは、C・lの計算をしていきます。

image

粘着力Cは既知ですが、盛土部と地盤部でCが異なる場合があります。
なので、円周長lも盛土部と地盤部に分ける必要があります。
まずは、変数を宣言します。

image

盛土部と地盤部の交点に近い分割片の境界点座標を求める計算になります。 交点に最も近い境界点を変数「boundaryX」と「boundaryY」に格納します。

image

円周長lの計算になります。計算が長くなるので計算途中の値を一時的に変数「temp_value1」と「temp_value2」 に代入し、最終的に地盤部の円周長l1と盛土部の円周長l2を求めるようにしています。

image

円周長の計算が終わりましたので、最後の「tanφ」の計算をします。これが終われば安全率Fsの計算ができるようになります。

image

変数を追加します。

image

円周長の計算が終わりましたので、最後の「tanφ」の計算をします。これが終われば「Wcosα×tanφ」の計算をします。

image

ついに来ました安全率Fsの計算になります。
変数を追加します。

image

予期せぬエラーに備え「try」構文を使用します。
もしエラーが出た場合は、Fsを10とし滑らないことにします。
コードは画像のとおりになります。

Step6

安全率Fsの最低値を求める

image

安全率Fsの計算をやってきましたが、まだ1パターンのみの計算にとどまっています。
具体的には、画像のとおり、円弧の中心座標と半径をすでに指定しております。
しかしながら、実際には半径や中心座標を変えながらFsの最低値(最もすべりやすい場所)を求める必要があります。
今の状態で円弧の移動範囲は指定しておりますので、その移動範囲内のFsを求める処理をしていきます。

image

まずは、円弧の中心座標を変化させる処理を行います。
変化量は計算量が膨大にならないようにする必要があります。

image

今回は移動範囲を10分割します。つまり10×10にしそのマスに円弧の中心が来るように変化させます。

image

変数を追加します。

image

画面上の表示倍率を求めます。

image

円弧の移動範囲のスタート座標とエンド座標を取得します。

image

取得した座標は画面上のピクセル座標ですので計算用のメートル単位の座標に変換します。

image

ここでは、、取得した移動範囲の幅と高さから1メッシュあたりの幅・高さの計算をしています。
この幅をもとに円弧の中心座標を変化させるよう繰り返し計算をします。
画像のコードは円弧の中心座標のみ変化させるコードであるので、この繰り返し計算の中につづきの安定計算のコードをすべて 収める必要があります。

image

画像は残りの安定計算コードを収めた状態になります。

image

円の中心の移動範囲は求まりましたので、今度は円弧の半径を変化させる処理を行います。
まずは、変数を追加します。
変数「minFs」は各節点での最小の値を格納するものとするので、初期値に10を入れておきます。
半径を変化させることにより、その節点での最小値を見つけ出し10→最小値とします。

image

変形の変化の範囲を決定します。
変数「minkr」から「maxkr」まで円弧の半径を変化させるようにしますが、「minkr」は基本的に1mとします。

image

半径を変化させる繰り返し文になります。
現段階では、半径のみの変化になりますので、この中に、つづきの構文を収める必要があります。

image

画像が続きの構文を収めた状態になります。

image

半径を変化させる繰り返し文の最後に安全率「Fs」の最小値を取得する構文を追加します。

image

円弧の半径が地盤に届かなかった場合エラーになるので、「try-catch」文を追加します。
画像は「try」構文のみ表示しています。 これで、Fsの最小値を求めることができていると思います。

Step7

計算結果を表示する

image

計算処理が完了しましたので、その結果を表示できるようにしたいです。できれば円弧の選択範囲にその結果を表示できるようしたいです。
その処理は独力では無理なので、ここでも「Gemini」さんに助けてもらいます。
ということで、まずは、pictureBox1_Paint イベントハンドラの修正を画像のとおりにするそうです。

image

つづきになります。

image

つづきになります。

image

新しいクラスを追加します。

image

変数「minFs」を「pictureBox1_Paint」イベントにも使用することになったので、変数宣言を「Form1」の上部に移動させます。

image

計算ボタンの最後に画像のようにコードを追加します。

image

「Gemini」さんからご指摘があり、画像の箇所にコードを追加します。
これで完了とのことなので実行してみます。

image

画像は実行結果になります。うまくできています。さすが「Gemini」!
表示結果ですが、赤くなればなるほど危険側になります。ただし、1未満でないなら安全ということになります。
なので、この画像の場合は、「安全」ということになります。

image

今回の場合は安全でしたが、すべり破壊が起きる場合はその安全率と円弧の描画が欲しいものです。なのでその機能を追加していきます。
まずは、デザイン画面にテキストボックスを追加し、色を黒にします。

image

変数を追加します。

image

計算イベントの最後に最小の安全率Fsを求め、その値をtextBox6に表示するようにします。

image

ここからは「Gemini」にお願いしてフォローしてもらいます。
内容はわかりません。とにかく滑る場合は、その円を描画するようにします。
まずは、「pictureBox1_Paint」イベントにコードを追加します。

image

つづきになります。

image

また「Gemini」様に修正のご指摘をいただきました。
場所は半径Rの設定方法になります。いまのままだとうまく計算できないようです。

image

つづきになります。

image

実行結果です。微妙に円の中心がずれていますが、もう修正不可能なので、スルーします。

Step8

Excel出力する

image

ここからは、大嫌いなExel出力の作業をしていきます。
ソリューション エクスプローラーで [参照]を右クリックし、[参照の追加] を選択します。

image

[COM] タブを選択し、「Microsoft Excel XX.X Object Library」を探してチェックを入れ、[OK] をクリックします。

image

コード上部に「using Excel = Microsoft.Office.Interop.Excel;」を追加します。

image

「Form1」のデザイン画面に移り、Excel出力用のボタンを配置します。Nameは「btnExport」としています。

image

作成した「Excel出力」ボタンをダブルクリックしてコード画面を表示させます。その中にコードを追加していきます。

image

本当はここから新しく「ExportToExce」というメソッドを追加する必要があるのですが、Excel出力用に計算結果を保存していなかったので ここで脱線して、その処理をしていきます。
まず、変数宣言をします。「Form1」のコード上部に追加します。

image

「計算実行」ボタンのクリックイベント内にコードを追加していきます。
追加する箇所は画像のとおりこのイベントの最後のほうになります。これで脱線作業は完了になります。

image

「ExportToExce」というメソッドを追加していきます。コードが長いので分けて表示します。

image

続きになります。

image

最後になります。これでExcel出力のコードはすべてになります。

Step9

実行ファイル化

image

ソリューションエクスプローラーの「Properties」をダブルクリックする。

image

画像のような画面が開きますので、「参照」ボタンを押してアイコンを登録します。

image

「Debug」を「Release」に変更します。

image

メニューバーの「ビルド」を選択し、「斜面の安定(簡易版)のリビルド」をクリックします。

image

プロジェクトのあるフォルダの奥底の「Release」に実行ファイルが作成されています。これで完成です。

Step10

操作方法

image

実行ファイルを開くと画像のとおりの画面が表示されます。
まず計算する断面を作成します。「断面の作成」ボタンを押します。

image

断面の形状をいれる画面がでますので、値を入力して入力完了を押します。

image

メイン画面にもどり、計算する斜面の形状が右側に表示されます。

image

次に円弧計算する範囲を決まます。厳密に言うと円の中心の移動範囲を決めます。半径は勝手に変化させるようにしています。
黒い画面上で指定したい範囲の左上と右下をクリックします。
そうすると画像のとおり範囲指定した箇所にメッシュが表示されます。

image

「土質定数の入力」をクリックします。

image

表示された画面に土質定数を入力して。「登録」ボタンを押します。

image

分割数を入れて「計算実行」ボタンを押します。

image

計算結果が表示されます。最小のFs(安全率)が画面右上に表示されます。今回は1を下回らなかったので安全ということになります。
また、メッシュ内にそれぞれのFsが表示されます。
さらに安全でない場合はすべり面が表示されます。(若干ずれますお許しください)
この状態で「Excel出力」ボタンを押せは計算結果が表示されます。