Femtet2026.0マクロヘルプ/マニュアル
 

ホーム / チュートリアル / 06.マクロの変更(条件振りと結果取得)

00

01

02

03

04

05

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では要素の重心で変位を計算しているのに対して、このマクロでは、要素の節点で変位を計算しているためです。

 

 

結果をグラフにしたものを下図に示します。

 

 

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

戻る  はじめに戻る