はじめに
FEMAPを使用していると、多くの要素に対して材料特性を設定する必要が出てきます。しかし手作業でこれを行うのは時間がかかります。そこでVBAを使って、FEMAPで効率的にマテリアルを作成する方法を紹介します。
マテリアル(等方性)の作成コード
FEMAPはAPIを提供しており、これをVBAで呼び出すことでさまざまな操作が可能です。
FEMAPで新しいマテリアルを作成するVBAコードの例を示します。
コードは、FEMAPを起動してから実行してください。
Sub create_material
'Femap model オブジェクトの生成
Dim f As Object
Set f = GetObject(,"femap.model")
'マテリアルオブジェクトの作成
Dim m As Object
Set m = f.feMatl
m.title = "Steel" 'タイトルの入力。この場合、タイトルに"Steel"という文字列を代入している。
m.Type = 0 '材料のタイプの入力。0を代入することで等方性マテリアルとなる。
m.Ex = 21000 '縦弾性率(ヤング率)の代入
m.Gx = 80770 '横弾性率(せん断弾性率)の代入
m.Nuxy = 0.3 'ポアソン比の代入
m.Alphaxx = 11.7 '熱膨張率
m.Kxx = 51.6 '熱伝導率
m.Cp = 0.473 '比熱
m.TensionLimit1 = 235 '引張の制限応力
m.CompressionLimit1 = 235 '圧縮の制限応力
m.ShearLimit = 136 'せん断の制限応力
m.Density = 7.85 '比重
m.Damping = 0.02 '構造減衰比
m.RefTemp = 22 '基準温度
m.put(1) '指定したIDにマテリアルデータを入力|上書きする。この場合ID=1にマテリアルデータを入力|上書きしている。
End Sub
・4~5行目はFemapオブジェクトの作成です。FEMAPを起動していないときにこのコードを実行するとエラーとなるので注意が必要です。
・8~9行目でEntityオブジェクトのマテリアルオブジェクトを生成しています。
・11行目 m.Title = “title” はタイトルの代入です。String型で代入します。
・12行目 m.Type = 0 で材料のタイプを指定します。long型を代入します。0は等方性マテリアルで、他のマテリアルの場合は別の定数を入力します。
・15~28行目 各項目の値を代入できます。型はいずれもDouble型です。設定しない項目は省略しても大丈夫です。
・30行目 m.put(ID)で番号IDのデータに上書きします。カッコ内のIDはLong型で記入します。
エクセルシートと連携させる例
エクセルシートに入力した値でマテリアルを作成する場合
エクセルで次のようなシートを用意します。
上記シートに入力した各値でマテリアルを作成するコードは次のようになります。
※タイプはマテリアルの種類。ここでは等方性マテリアルを扱うので”0″を入力して下さい。
Sub create_material
'Femap model オブジェクトの生成
Dim f As Object
Set f = GetObject(,"femap.model")
'マテリアルオブジェクトの作成
Dim m As Object
Set m = f.feMatl
m.title = Cells(2,2) 'タイトルの入力。この場合、タイトルに"Steel"という文字列を代入している。
m.Type = Cells(3,2) '材料のタイプの入力。0を代入することで等方性マテリアルとなる。
m.Ex = Cells(4,2) '縦弾性率(ヤング率)の代入
m.Gx = Cells(5,2) '横弾性率(せん断弾性率)の代入
m.Nuxy = Cells(6,2) 'ポアソン比の代入
m.Alphaxx = Cells(7,2) '熱膨張率の代入
m.Kxx = Cells(8,2) '熱伝導率の代入
m.Cp = Cells(9,2) '比熱の代入
m.TensionLimit1 = Cells(10,2) '引張の制限応力の代入
m.CompressionLimit1 = Cells(11,2) '圧縮の制限応力の代入
m.ShearLimit = Cells(12,2) 'せん断の制限応力の代入
m.Density = Cells(13,2) '比重の代入
m.Damping = Cells(14,2) '構造減衰比の代入
m.RefTemp = Cells(15,2) '基準温度の代入
m.put(Cells(1,2)) '指定したIDにマテリアルデータを入力|上書きする。
End Sub
もし、セルから値を取得する際にエラーが出る場合は、セルで値を取得する部分をLong型ならInt()などで囲むと良いです。
マテリアル情報をエクセルに書き出す例
FEMAPのマテリアル情報をエクセルに書き出すこともできます。この場合、.getメソッドを使用します。
まず、下のようにエクセルシートを準備してください。先述の例とほぼ同じです。
上記シートで取り出したいマテリアル情報のIDのみ入力します。
VBAのコードは次のようになります。
Sub get_material
'Femap model オブジェクトの生成
Dim f As Object
Set f = GetObject(,"femap.model")
'マテリアルオブジェクトの作成
Dim m As Object
Set m = f.feMatl
m.Get(Int(Cells(1,2))) '指定したIDのマテリアルデータを取得する
Cells(2,2) = m.title 'タイトルの出力
Cells(3,2) = m.Type '材料のタイプの出力
Cells(4,2) = m.Ex '縦弾性率(ヤング率)の出力
Cells(5,2) = m.Gx '横弾性率(せん断弾性率)の出力
Cells(6,2) = m.Nuxy 'ポアソン比の代入
Cells(7,2) = m.Alphaxx '熱膨張率の出力
Cells(8,2) = m.Kxx '熱伝導率の出力
Cells(9,2) = m.Cp '比熱の出力
Cells(10,2) = m.TensionLimit1 '引張の制限応力の出力
Cells(11,2) = m.CompressionLimit1 '圧縮の制限応力の出力
Cells(12,2) = m.ShearLimit 'せん断の制限応力の出力
Cells(13,2) = m.Density '比重の出力
Cells(14,2) = m.Damping '構造減衰比の出力
Cells(15,2) = m.RefTemp '基準温度の出力
End Sub
・11行目 m.get(ID)で番号IDのデータを取得します。カッコ内のIDはLong型で記入します。セルの値を取得する際はInt(Cells(1,2))などのように、型を変換してあげると、エラーの可能性を減らせます。
このコードを実行すれば、エクセルシートにマテリアル情報を出力させることが出来ます。
おわりに
今回紹介したEXCEL VBAを使ったFEMAPのマテリアル自動作成は、複雑なモデルを扱う際の手作業を大幅に減らし、効率を向上させる強力なツールです。ぜひ、自身のプロジェクトに応じたカスタマイズを行ってみてください。
FEMAPでマテリアル設定しないまま解析したら、まるでゼリーで出来た家になっちゃったよ。
コメント