Untangle
適用対象:Triangle または Quadrilateral の Surface Mesh、および Tetrahedral または Hexahedral の Volume Mesh に適用されます。Mixed Element Mesh には適用されません。
概要:特定の目的関数を最小化することにより、メッシュから負の Jacobian を可能な限り除去します。
構文:
Surface <surface_id_range> Smooth Scheme Untangle [beta <double=0.02>] [cpu <double=10>]
Volume <volume_id_range> Smooth Scheme Untangle [beta <double=0.02>] [cpu <double=10>]
関連コマンド:
解説:
Untangle Smoother は、Node を適切な位置へ移動することで、指定したメッシュから負の Jacobian を除去するよう設計されています。負の Jacobian の原因に関係しない Mesh Node は移動しません。メッシュに負の Jacobian がない場合、Untangler はどの Node も移動しません。この Smoother は万能ではなく、指定されたメッシュトポロジーに対して Untangle 可能なメッシュが存在しない場合、完全に Untangle することはできません。その場合は可能な範囲で処理して正常に終了します。この Smoother で生成した Untangle 後のメッシュは形状品質が低いことが多いため、その場合は続けて Condition Number Smoothing を行うことを推奨します。Untangle Smoother は Condition Number Smoother から自動的に呼び出されます。
このコマンドには "fixed/free" オプションはなく、Boundary Node は常に固定されます。そのため、Volume 内の Surface Mesh に負の Jacobian が含まれている場合、Volume Untangler は成功しません。この場合は、まず Surface Untangler を実行して Surface Mesh の負の Jacobian を除去し、その後 Volume Untangler を実行する必要があります。
上記のコマンドは Smoothing Scheme を設定するだけです。実際にメッシュを Smoothing するには、その後に "smooth surface <surface_id_range>" または "smooth volume <volume_id_range>" コマンドを実行する必要があります。
停止条件:目的関数が最小化されるか、オプション入力 "cpu" の条件を満たすまで Untangle を続けます。後者の停止条件は、メッシュの Untangle を試行する時間を分単位で指定します。既定値は10分です。キーボードで "control-C" を入力して最適化を停止することもできます。
Beta パラメータ:オプションの入力パラメータ "beta" は、最適なメッシュを決定する際に使用されます。最適化は、メッシュの最小 scaled Jacobian が概ね beta より大きくなるまで進みます。負の Jacobian を除去するには beta=0 が必要ですが、安全マージンとして既定値には beta=0.02 を使用します。scaled Jacobian をさらに改善するには、より大きな "beta" を指定します。すべての scaled Jacobian が "beta" より大きいメッシュが存在しない場合、CPU 時間の停止条件に達するまで最適化が続きます。そのため、CPU 時間上限も小さく設定しない限り、"beta" に大きすぎる値(たとえば 0.2 を超える値)を使用しないことを推奨します。
進行中の Smoothing の詳細レポートを表示するには、Surface または Volume を Smoothing する前に "set debug 91 on" コマンドを実行します。Untangle が必要かどうか、および停止条件を満たしているかどうかの概要が表示されます。さらに、共役勾配法による数値最適化の各反復について、次の情報が出力されます。
Iteration=n, Evals=m, Fcn=value1, dfmax=value2, time=value3 min_jsc=value4
n は反復回数、 m は各反復で実行された目的関数評価回数、 value1 は目的関数値(通常は単調減少します)、 value2 は勾配ノルム(必ずしも単調減少しません)、 value3 は現在の反復までに費やした累積 CPU 時間(秒)です。目的関数の最小値は0であり、この値はメッシュの最小 scaled Jacobian が "beta" を超える場合にのみ達成されます。また、 最小 scaled Jacobian も出力されます。