インターバルマッチング

CUBITの各meshing schemeは、surface/volumeを境界付けるcurveへ割り当てられるintervalにconstraintを課します。たとえばsurfaceをMap meshするには対辺のinterval数が等しい必要があります。schemeに関係なくsurfaceをquadrilateralでmeshするには境界interval総数がevenでなければなりません。接続surfaceやassemblyでは、割り当てたschemeで各surface/volumeをmesh可能にするため、これらのinterval constraintをglobalに解く必要があります。constraintを満たすだけでなく、interval数(mesh size)はユーザー希望値、またはそれに可能な限り近い値にする必要があります。CUBITで実装されているこのglobal solution techniqueを「interval matching」と呼びます。

Interval matching is automatically performed by the mesh element生成前にこのコマンドを実行します。interval matchingを手動実行することは、一部entityだけを今meshしつつ、後ですべてをmeshできることを保証したい場合に便利です。例:全volumeでmatch intervalsを行い、今はsurface 3だけmeshします。また、割り当てたscheme、corner、edge type、intervalの互換性確認にも使えます。

intervalを手動でmatchするコマンド構文は次のとおりです。

Match Intervals {Surface|Volume|Body|Group} <range>

entity listにはgroup、body、volume、surface、curveを混在して指定できます。sub-entityは自動的に含まれます。たとえばvolumeのintervalをmatchすると、そのvolumeのすべてのsurfaceも対象になります。ただし逆方向、すなわち上位次元への展開は自動ではありません。たとえばcurve 1を含むすべてのvolumeについてintervalをmatchするには「match intervals volume in curve 1」を実行します。

トラブルシューティング

interval solutionのqualityが悪い場合は、個々のentityのinterval countを変える、あるいはMapからPaveへ一部schemeを変更して自由度を増やすなどして、interval matchingを再実行してください。

interval solutionが存在しない場合があります。solutionが見つかる可能性を高めるには、少なくとも確認としてinterval firmnessをsoftへ設定してみてください。softでも、mapping cornerやsweep directionの対応が不適切だとsolutionが存在しない場合があります。

solutionがない場合、原因調査に次のコマンドが役立つことがあります(Cubit 15.6のIIAではまだ未対応)。

Match Intervals {Surface|Volume|Body|Group} <range> [Seed Curve <range>]

[Assign Groups [Only|Infeasible]] [Map|Pave]

Assign Groups はglobal problemから独立したsubproblemを含むgroupを作成します。 Assign Groups Only を指定すると独立subproblemをgroup化しますが、solverはそれらを解こうとしません。 Assign Groups Infeasible はsolutionがない独立subproblemごとに特別な名前のgroupへ格納します。corner選択やsurface meshing schemeの問題がこの方法で明確になることがあります。 Map または Pave を指定するとmappingまたはpaving constraintを含むsubproblemだけを対象にします。 Seed Curve を指定すると、そのcurveを含むsubproblemだけを対象にします。

Interval Solver Version

古いjournal fileと一貫した結果を得る必要がある場合は、旧solverを使えます。

set interval version {<cubit version number>|default}

list interval version

version >= 15.6ではIIA(2020 solver)を使い、small-loop boundを有効にします。それ以前のversionではBBIA(1997 solver)を使います。どちらのsolverも次のproblemを解きます。

min f(x,g)

s.t. Ax=b

x in [lo,hi]

A, x, b integer

ただしobjective fが少し異なるためsolutionも異なる場合があります。この形式の一般problemは、solutionがinteger-valuedでなければならないため難しく、どちらのsolverもglobal minimumを保証しません。

ここでxはintervalおよび内部変数、bはそれら変数のbound、Aとbはhardsetを含むconstraint、gは各curveについてユーザーが希望するinterval数(goal)です。objective fはmesh sizeの最大相対変更を最小化したいという要求をモデル化します。新しいIIA solverでは、achieved>goalならachieved:goal、そうでなければgoal:achievedというratioの最大lexicographic vectorがfです。旧solverはIIAのfの近似を使用します。

IIA Solver >= Cubit 15.6

Cubit 15.6では2020年にinteger linear algebraに基づく「Incremental Interval Assignment(IIA)」を導入しました。IIAはAx=bのinteger solutionを高速かつrobustに求め、Aのnullspaceからinteger vectorを加えてboundを満たし、goalへ近づけます。

IIA solutionはBBIAよりやや粗くなる傾向があり、多くの場合intervalが1つ少なく、ユーザーgoalやglobal optimumにより近くなります。IIAはBBIAより高速で、submappingとhard-setを含む一部caseでは6000倍高速です。1秒以上かかる例があればCubitチームへ送ってください。

BBIA Solver < Cubit 15.6

Cubitが1996年に導入した旧解法は、linear programmingでAx=bのfloating-point solutionを求め、その後branch-and-bound roundingで近傍のinteger solutionを探す方法です。前半は高速かつrobustですが、後半は遅くerror-proneです。linear programmingはlinear objective functionに限られるためgoal:achieved ratioは近似され、size差が極端な場合に予想外のcompromiseが生じることがあります。

BBIAについてadvanced userは次の設定を試せます。

Set Match Intervals Rounding {on|off}

Set Match Intervals Fast {on|off}

Set Match Intervals Delta <interval_difference = 0.>

set match intervals rounding が onの場合、intervalはnearest integerへ丸められます。設定が offの場合、intervalはユーザー指定interval側へ丸められます。

set match intervals fast が off ではbranch-and-bound iterationごとにcurveを1本固定します。まれにより良いmeshになる場合がありますが、通常は遅くなります。 onに設定するとiterationごとに複数curveを固定します。

Set match intervals delta はoptimizationのconvergence toleranceへ影響します。ここで delta はcurveのgoalと割当intervalの差です。値を大きくするとmatchingは高速になりますがsolution qualityが悪くなる場合があります。既定は0.0です。例として1.0を試せます。