iPX社員によるブログ

iPX社員が"社の動向"から"自身の知見や趣味"、"セミナーなどのおすすめ情報"に至るまで幅広い話題を投下していくブログ。社の雰囲気を感じ取っていただけたら幸いです。

Abaqus CAEで会社ロゴを自動でメッシュ分割する

EPLU(Engineering Process Leading Unit)のパルハットです。

以前仕事現場でCAE関連の業務に関わりました。今回それに関係する内容で書こうと思います。

CAE関連のソフトはたくさんありますが、今回はAbaqus14 Student Editionを使用して、簡単な会社ロゴ(iPXの文字)のメッシュをスクリプトで作ります。
Abaqusスクリプト言語としてPython2.6を使用できます。Pythonは完全にオブジェクト指向の構造です。

AbaqusではPythonオブジェクトとしてSession, Mdb, Odbが提供されています。SessionオブジェクトにはViewportの定義、リモートキュー、ユーザ定義Views等を含みます。
Mdbオブジェクトはモデル情報を含みます。Odbオブジェクトは解析結果データ関連情報を含みます。プログラム作成手順は以下のとおりです。

  1. 初期定義とモデル定義
  2. 2次元スケッチ作成
  3. パート作成
  4. アセンブリ設定
  5. メッシュ作成

初期定義とモデル定義

from abaqus import *
from abaqusConstants import *
from caeModules import *

# モデルオブジェクトの作成
Mdb()
mdl = mdb.Model(name="Model-iPXLogo")

2次元スケッチ作成

# 2次元スケッチ作成
stk = mdb.models['Model-iPXLogo'].ConstrainedSketch(name='Sketch iPX', sheetSize=200.0)

# i字の作成
# 指定座標に円を作成
stk.CircleByCenterPerimeter(center=(-12.5, 10.0), point1=(-10.0, 10.0))

#指定座標に長方形を作成
stk.rectangle(point1=(-15.0, 5.0), point2=(-10.0, -17.5))

# P字の作成
xyCoords=[[6.25, 12.5],[-5.0, 12.5],[-5.0, 12.5],[-5.0, -17.5],[-5.0, -17.5],
          [0.0, -17.5],[0.0, -17.5],[0.0, -2.5],[0.0, -2.5],[6.25, -2.5],
          [0.0, 2.5], [5.0, 2.5], [0.0, 2.5], [0.0, 7.5], [0.0, 7.5], [5.0, 7.5]]

for i in range(0, len(xyCoords) - 1, 2):
    stk.Line(point1=xyCoords[i], point2=xyCoords[i+1])

stk.Arc3Points(point1=(5.0, 7.5), point2=(5.0, 2.5), point3=(7.5, 5.0))
stk.Arc3Points(point1=(6.25, 12.5), point2=(6.25, -2.5), point3=(12.5, 5.0))

# X字の作成
xyCoords1=[[15.0, 12.5],[23.75, -2.5],[23.75, -2.5],[15.0, -17.5],[15.0, -17.5],[20.0, -17.5],
           [20.0, -17.5],[27.5, -5.0],[15.0, 12.5],[20.0, 12.5],[20.0, 12.5],[27.5, 0.0],
           [27.5, 0.0],[35.0, 12.5],[35.0, 12.5],[40.0, 12.5],[40.0, 12.5],[31.25, -2.5],
           [31.25, -2.5],[40.0, -17.5],[40.0, -17.5],[35.0, -17.5],[35.0, -17.5],[27.5, -5.0]]

for i in range(0, len(xyCoords1) - 1, 2):
    stk.Line(point1=xyCoords1[i], point2=xyCoords1[i+1])

作成されたスケッチ図は以下の通りです。

f:id:ipx-writer:20160910223501p:plain

パート作成

#パートを作成します。
p = mdb.models['Model-iPXLogo'].Part(name='iPXLogo', dimensionality=THREE_D, type=DEFORMABLE_BODY)
p = mdb.models['Model-iPXLogo'].parts['iPXLogo']
p.BaseSolidExtrude(sketch=stk, depth=5.0)
session.viewports['Viewport: 1'].setValues(displayedObject=p)

作成されたパート図は以下の通りです。

f:id:ipx-writer:20160910223727p:plain

アセンブリ設定

# アセンブリにパートをインスタンス化します。
iPXAssambely = mdb.models['Model-iPXLogo'].rootAssembly
iPXInstance = iPXAssambely.Instance(name="iPXLogo A-1", part=p, dependent=OFF)

作成されたアセンブリ図は以下の通りです。

f:id:ipx-writer:20160910223810p:plain

メッシュ作成

# メッシュを作成します。
partInstances = [iPXInstance] 
iPXAssambely.seedPartInstance(regions=partInstances, size=2.0)
iPXAssambely.generateMesh(regions=partInstances)

# viewportでメッシュインスタンスを表示します。
iPXViewport = session.Viewport(name="ipx viewport", origin=(10,10), width=400, height=200)
iPXViewport.assemblyDisplay.setValues(renderStyle=SHADED, mesh=ON)
iPXViewport.setValues(displayObject=iPXAssambely)

作成されたメッシュ図は以下の通りです。

f:id:ipx-writer:20160910223846p:plain
f:id:ipx-writer:20160910223857p:plain

まとめ

今回Abaqusを使用して簡単なロゴを作成して、メッシュまで作りました。メッシュサイズをもっと小さくすると、刻みがきれいに出来ます。
次回は材料情報の追加と何らかの境界条件を追加して、解析コンター図まで出してみたいです。

参考情報

  1. http://www.jikosoft.com/cae/abaqus/index.html
  2. Abaqus14 Student Editionドキュメント(インストール時に一緒にインストールされます。)