ホーム / チュートリアル / 06.マクロの変更(条件振りと結果取得)
06.マクロの変更(条件振りと結果取得)
最後にマクロの本来の使用法であるバッチ処理を使用し、条件振りをしてみます。
梁の長さを条件振りし、それぞれの条件での最大変位量を計算します。
以下にマクロの変更点を赤字で示します。
関数 CommandButton1_Click の変更
Private Sub CommandButton1_Click()
Dim i As Integer
Dim XLength As Double
'計算結果の値の説明をセルに表示
ActiveSheet.Cells(1, 1).Value = " XLength"
ActiveSheet.Cells(2, 1).Value = "最大変位量[m]"
'有限要素法計算ループ
'ループ回数はi=1から3までの3回
'この数値を変更してループ回数を変えることが可能
For i = 1 To 3
'XLengthの初期値が10、ループ毎の増分が5
'この値を変更することで初期値、増分の値を変えることが可能
XLength = 10 + 5 * i
FemtetMain XLength, i
Next i
End Sub
FemtetMainプロシージャの変更
'///////////////////Main関数/////////////////////
Sub FemtetMain(XLength As Double, i As Integer)
中略
'------- 解析結果の抽出 -------
'<<<<<<< 計算結果を抽出する場合は以下のコメントを外してください >>>>>>>
SamplingResult i
'//////////Z方向最大変位量の計算///////////
CalcMaxDisp XLength, i
End Sub
'////////////////////////////////////////////////////////////
' 計算結果抽出関数
'////////////////////////////////////////////////////////////
Sub SamplingResult(i As Integer)
'------- 変数にオブジェクトの設定 -------
Set Gogh = Femtet.Gogh
'<<<<<<< 計算結果を抽出する場合は以下のコメントを外してください >>>>>>>
Femtet.SavePDT Femtet.ResultFilePath & "_" & i & ".pdt", True 'pdtファイルを上書きするので、必要に応じてファイル名を変更して下さい
'Femtet.OpenPDT Femtet.ResultFilePath & ".pdt" 'pdtファイルを開きます
End Sub
最大変位量の計算プロシージャの追加
Sub CalcMaxDisp(XLength As Double, i As Integer)
Dim Gogh As CGogh
Dim nNode As Long
Dim nElm As Long
Dim j, k As Integer
Dim dMaxDisp, dTmp As Double
Dim ElmIndex As Long
Dim result() As CComplex
'設定
Set Gogh = Femtet.Gogh
'+++++++計算結果データファイルのオープン+++++++
If (Femtet.OpenPDT(Femtet.ResultFilePath & "_" & i & ".pdt”) = False) Then
MsgBox "計算結果データ読み込み失敗"
End
End If
'+++++++初期化、設定+++++++
nNode = Gogh.Data.nMeshNode
dMaxDisp = 0#
Gogh.Galileo.Vector = GALILEO_DISPLACEMENT_C
'+++++++Z方向最大変位量計算ループ+++++++
For j = 0 To nNode - 1 '節点数ループ
nElm = Gogh.Data.MeshNodeArray(j).nParentMeshElement
For k = 0 To nElm - 1 '親要素数ループ
ElmIndex = Gogh.Data.MeshNodeArray(j).ParentMeshElementArray(k).Index
Gogh.Galileo.GetVectorAtNode j, ElmIndex, result
dTmp = Abs(result(2).Real) '”2”はZ方向を意味する
If dTmp > dMaxDisp Then dMaxDisp = dTmp
Next k
Next j
'+++++++結果の表示+++++++
MsgBox dMaxDisp, vbInformation, "最大変位量[m]"
With ActiveSheet
.Cells(1, i + 1).Value = XLength
.Cells(2, i + 1).Value = dMaxDisp
End With
End Sub
CommandButton1_Click関数の中で指定したループ回数計算が行われ、結果がExcelに出力されます。

-
計算結果値はFemtetのバージョンによって若干の誤差がでます。
-
画面のカラーバーの最大変位量とマクロで計算した最大変位量の値が異なるのは、
Femtetでは要素の重心で変位を計算しているのに対して、このマクロでは、要素の節点で変位を計算しているためです。
結果をグラフにしたものを下図に示します。

お疲れさまでした。
これでチュートリアルは終了です。




