周期空間充填モデル(Tile)

この付録では、多結晶材料モデルのように空間をタイル状に充填するモデルで、高品質なメッシュを作成するためのコマンドを説明します。この種のモデルは一般に「periodic」と呼ばれますが、Cubit では periodic が別の意味ですでに使われているため、ここでは代わりに「tile」キーワードを使用します。周期境界をまたいでメッシュをスムージングでき、ALEGRA 規約(SAND99-2698)に従った周期境界条件も自動設定できます。
Tile コマンドはアルファ機能です。使用時は注意してください。
初期設定
まずモデルをインポートしてサーフェスを Merge します。次に、Tile(周期)境界の両側で対応するメッシュが生成される任意の方法でメッシュを作成します。たとえばスキームは polyhedron または sweepを使用できます。メッシュ作成後、「tile vector」を指定します。これにより Cubit は、周期境界を挟んだノードが実際には同一ノードに対応することを認識します:
Tile {x <period> | y <period> | z <period>}
[x <period>] [y <period>] [z <period>]
指定する 'period' は、一方の境界から対応する境界までのベクトルオフセットです。モデルが周期的である各座標軸について、Tile コマンドを1つずつ指定します。例:
Tile x 1
Tile y 1
Tile z 1
次のコマンドを使用すると、Tile vector の組み合わせによって指定ノードに対応付けられているノードを確認できます:Tile Debug Node <id>
後でこれらの Tile vector を削除する必要がある場合は、次のコマンドを使用します:
Tile Off
作成: Nodeset
Tile vector を指定すると、ALEGRA 仕様に適合する周期境界条件を設定できます。コマンドは次のとおりです:
Tile Nodeset <start_id>
実際にノード同士を接続する Tile vector のすべての組み合わせについて Nodeset が作成され、作成された Nodeset が報告されます。Nodeset ID は指定した 'start_id' から連番になります。ただし、ある組み合わせに該当するノードがない場合は Nodeset が作成されないため、ID に欠番が生じます。これらの Nodeset を削除するには、
Tile Off
コマンドを使用してください。通常の Nodeset 削除コマンドは使用しません。
スムージング
メッシュを作成して Tile vector を指定した後は、周期境界のオフセットを Tile vector と正確に一致させたままメッシュをスムージングできます。現在サポートされているのは Hex メッシュのみです。さまざまな3次元 スムージングスキーム がサポートされており、Laplacian、Equipotential、Untangle、Condition Number などを使用できます。
Smooth Volume <volume_id_range> [Global [Float <dim>] ]
複数の Volume をまとめてスムージングする場合は "Global" を使用します。Surface、Curve、Vertex 上のノードを、それぞれのジオメトリ所有エンティティから離れて移動できるようにする場合は "float 3" を使用します。Curve と Vertex 上のノードだけを所有エンティティから離して移動させ(ただし所有 Surface 上には留める)場合は "float 2" を使用します。また、"node position fixed" コマンドで一部のノードを固定する設定が有効な場合があります。
例
# make the geometry
#{brick_size=500}
brick wid {brick_size}
brick wid {brick_size}
body 2 move {brick_size} 0 0
brick wid {brick_size}
body 3 move {brick_size} {brick_size} 0
brick wid {brick_size}
body 4 move 0 {brick_size} 0
brick wid {brick_size}
body 5 move 0 0 {brick_size}
brick wid {brick_size}
body 6 move {brick_size} 0 {brick_size}
brick wid {brick_size}
body 7 move {brick_size} {brick_size} {brick_size}
brick wid {brick_size}
body 8 move 0 {brick_size} {brick_size}
merge all# mesh it
vol all int 3
mesh vol all# set the tiling vectors
tile x {brick_size*2}
tile y {brick_size*2}
tile z {brick_size*2}
tile debug node 256
tile debug node 245# set the tiling nodesets
tile nodeset# mess up the mesh quality
# volume all smooth scheme randomize
# smooth volume all
surface all smooth scheme randomize
smooth surface all
draw hex all# fix the mesh quality
node in volume all position fixed
node in surface all position free
volume all smooth scheme laplac
# volume all smooth scheme untangle beta 0.08
smooth volume all global float 3
draw hex all