Midmesh ThicknessesのTCL化

zyukaiboy
zyukaiboy Altair Community Member
edited November 2020 in 質問と回答 (Q&A)

現在,Midmesh Thicknessesで板厚を適用した後,Tclで処理を行っています.

 

よりプロセスを自動化するために,Midmesh Thicknessesの機能をTclで表現することは出来ないでしょうか?

いつもは下記の流れで手動で作業をしています.

対象のASSYを表示→対象ASSY内すべてのサーフェスを選択→対象ASSY内すべてのメッシュを選択

→Midmesh Thicknessesの閾値を設定→サーフェスとメッシュからメッシュに板厚情報を与える

 

対象のASSYには固定の名前が入っており,そのASSY内すべての部品に処理を適用する為

サーフェスやメッシュの選択等を行うことをせず,これらすべての処理をTclで出来るのではないかと考えています.

 

アドバイスよろしくお願いいたします.

 

以上です.

よろしくお願いいたします.

Answers

  • Imoto
    Imoto
    Altair Employee
    edited March 2019

    こんにちは、 @zyukaiboy

     

    プルダウンメニューMesh⇒Edit⇒Elements⇒Midmesh Thickness機能の内部では、「*compute_midmesh_thickness」コマンドが用いられています。

    詳しくは、リファレンスガイドをご参照下さい。

    <?xml version="1.0" encoding="UTF-8"?>compute_mid.jpg

  • zyukaiboy
    zyukaiboy Altair Community Member
    edited March 2019

    @Imoto

     

    ありがとうございます。

    今リファレンスガイドを参考にしながら作成中です。

     

    下記リファレンスガイド内のサンプルの内容をベースに作成を進めており、閾値の設定等は把握できたのですが、

    サンプルのどの箇所を変更すれば要素に板厚を与えられるのかが不明です。

     

    *createmark elems 1 all

    *createmark surfs 1 displayed

    *createstringarray 2 {MinThickness: 0.1} {MaxThickness: 1.0}

    *compute_midmesh_thickness elems 1 surfs 1 1 2

     

    このままでは要素に板厚を与えるのではなく、プロパティに与える形になってしまいます。

     

    対応方法を教えていただけますでしょうか。

    よろしくお願いいたします。

     

     

  • Imoto
    Imoto
    Altair Employee
    edited March 2019

    こんにちは、@zyukaiboy

     

    下記のように、板厚の割当先を明確に指定するのが良いかと思われます。

    *createmark elems 1 all;
    *createmark surfs 1 displayed;
    *createstringarray 3 {MinThickness: 0.1} {MaxThickness: 1.0} {ThicknessOutputOption: ElementNodal};
    *compute_midmesh_thickness elems 1 surfs 1 1 3;

     

    OptiStructユーザープロファイルで、上記コマンドを実行すると、下図のようにシェル要素の節点板厚として板厚が割り振られます。

    <?xml version="1.0" encoding="UTF-8"?>NodalThickness.jpg

  • zyukaiboy
    zyukaiboy Altair Community Member
    edited March 2019

    いつもありがとうございます @Imoto

     

    ご教授ありがとうございます。

    自分の作成したいTCLに近づくことが出来ましたが大きな課題が見つかりました。

     

    現在、同じCAD、同じメッシュに対して同じ条件でMidmesh Thicknessを適用した場合

    Windows10(1803)とWindows7で異なる板厚値がメッシュに適用されるケースが発生しています。

    使用しているソフトウェアはHM2017です。

    HM13ではWindows10(1803)とWindows7で同様の値が適用されます。

     

    さらに動作自体にも大きく差があり

    約40部品に対して、Midmesh Thicknessを適用した際

    Windows7  :HM13   約4分

    Windows7  :HM2017  約5分

    Windows10:HM13   約3分

    Windows10:HM2017  約20分

     

    とWindows10:HM2017の時だけ、時間がかかってしまいます。

    同等クラスのマシンを使用しているため、マシンスペックの差ではないと考えております。

     

    なにか対策する方法等ありますでしょうか。

     

    よろしくお願いいたします。

     

  • Imoto
    Imoto
    Altair Employee
    edited October 2020

    こんにちは、@zyukaiboy

     

    確かに4倍もかかるのは、オカシイ気がします。

    プルダウンメニューHelp⇒Updates and System Informationから表示可能な、hwDesktopのアップデート状況(Helpを除く)は同じですか?

     

    また、20分かかる方のPCで、下記URLにあるようにファイル・フォルダの削除をお試し下さい。

    https://community.altair.com/community?id=community_question&sys_id=915684f61b2bd0908017dc61ec4bcb46

     

    Windowsにログインする際のユーザー名を、別のユーザーで試してみるというのも、何か変化があるかも知れません。

  • zyukaiboy
    zyukaiboy Altair Community Member
    edited March 2019

    いつもありがとうございます @Imoto

     

    アドバイスをいただいたとおり内容に関して調査を進めました。

     

    hwDesktopはWindows10が2017.3、Windows7が2017.1でした。

    Windows10端末は台数が少ない為、Windows7でHM2017のバージョンが違うもので検証しました。

     

    ○処理時間について

    私の端末(Windows7/HM2017.2.1)では変わらず5分程度で処理が完了します。

    しかし、他の端末(Windows7/HM2017.2.4)では20分程度処理に時間がかかりました。

    HM2017.2.1とHM2017.2.4それぞれ2台ずつ調査を行いましたが、同様の結果が得られました。

    提案いただいた作業フォルダの削除も実施しましたが結果は変わりませんでした。

     

    画面左下に出るコメントを見ている限り、処理の流れに差はないように感じています。

    しかし、HM2017.2.4では「Meshing surface」のタイミングでHM2017.2.1と比べやや時間がかかり

    その後「Geometry」と表示されフリーズしたタイミングから次の「Creating mesh topology」にたどり着くまで10分以上を要します。

    HM2017.2.1でも「Geometry」と表示されフリーズはしますが、20秒程度で次の「Creating mesh topology」にたどり着きます。

     

    与えているTclは下記の通りです。

    *createmark elems 1 displayed;
    *createmark surfs 1 displayed;
    *createstringarray 3 {MinThickness: 0.1} {NumDecimals: 2} {ThicknessOutputOption: ElementNodal};
    *compute_midmesh_thickness elems 1 surfs 1 1 3;

     

     

    アドバイスいただければ幸いです。

     

    ○板厚について

    前回の質問の際に記載した違う板厚値が適用される件ですが、これもバージョンに依存していることが分かりました。

    image.png.9eaa870b8aa1669520bfaa5b15261472.png

     

    画像のような形状のチャンネル材の中立面に、各色の線で示すようなメッシュを作成した場合

    HM2017.2.1とHM2017.2.4ではMidmesh Thickenssで適用される板厚が異なります。

    サーフェスとメッシュから板厚を求めている以上、メッシュ形状のわずかな差で取得される値が

    異なる可能性があるということは理解しています。

    事実、HM2017.2.1で黒丸で示した節点の位置がわずかに変動しただけで板厚値が変わるのを確認しています。

    しかし、バージョンの違いで値が異なるのは内部処理に差があるのでしょうか。

     

     

  • Imoto
    Imoto
    Altair Employee
    edited April 2019

    こんにちは、@zyukaiboy

     

    set S [clock clicks -milliseconds];
    *createmark elems 1 displayed;
    *createmark surfs 1 displayed;
    *createstringarray 3 {MinThickness: 0.1} {NumDecimals: 0.2} {ThicknessOutputOption: ElementNodal};
    *compute_midmesh_thickness elems 1 surfs 1 1 3;
    set Sec [expr ([clock clicks -milliseconds] - $S) / 1000.];
    puts 'Ver = [hm_info -appinfo DISPLAYVERSION], Elapsed time : Sec = $Sec';
    tk_messageBox -message 'Ver = [hm_info -appinfo DISPLAYVERSION], Elapsed time : Sec = $Sec';

     

    ↓↓↓.hmファイル↓↓↓

    上記の記述を使って、*compute_midmesh_thicknessの計算時間を同一PCで、v14.0.134、v2017-NoUpdate、v2017.3の3バージョンで検証してみました。

     ・Ver = 14.0.130.21, Elapsed time : Sec = 131.495
     ・Ver = 2017.0.0.24, Elapsed time : Sec = 128.83
     ・Ver = 2017.3.0.17, Elapsed time : Sec = 98.426
    上記のように、2017.3が一番早いようです。

     

    今回のモデルについては、一般的な中立面位置にあるものではなく、かなり粗いメッシュサイズ(恐らく電磁場や船など?)などで用いるようなシェルメッシュなので特殊なケースかと思われます。

    その関係もあり、{NumDecimals: 0.2}の部分だけ変更しています。

    Unable to find an attachment - read this blog

  • zyukaiboy
    zyukaiboy Altair Community Member
    edited April 2019

    いつもありがとうございます @Imoto

     

    ご教授いただいたTclおよびHMデータを使用して私の環境でも処理時間を計測しました。

    ご返信いただいたのと同様に、Ver2017.3.0が最も早い結果が出ました。

     

    しかし、チャンネル材だけではなく様々な複雑形状がある部品になるとVer2017.3.0が一番遅いという結果になってしまいます。

     

    数十部品ある中、それをすべて表示させMidmesh Thicknessを適用すると10分程度

    そのうち、サイズの大きい部品を消し、適用すると3分程度

    サイズの大きい部品のみに適用すると1分程度で処理が出来ました。

     

    メッシュと面から板厚を求める為、検索対象が多いことで処理が遅くなっているという認識です。

     

    原因となることを色々と考えましたが、現状では解は得られず、対象ASSY内のCOMPを1つ表示し、Midmesh Thicknessを適用、

    適用後非表示にし他のCOMPを表示させMidmesh Thicknessを適用という流れになりそうです。

     

    特定の文字列を含むASSY内のCOMPを1つずつ表示、非表示させる為にはどのようなTclを書けばよいのでしょうか?

     

    ご教授のほどよろしくお願いいたします。

  • Imoto
    Imoto
    Altair Employee
    edited April 2019

    こんにちは、@zyukaiboy

     

    時間の件は、今度良いモデルがあれば検証してみます。

     

    該当のコンポーネントだけの処理に絞込みたい場合は、わざわざ表示/非表示を行う必要はありません。

     

    *createmarkのリファレンスマニュアルを確認すると、'by collector'や'by assem id'など様々な選択オプションの記述が載っています。

     

    今回の場合、例えばコンポーネント毎であれば、下記のようにするのが良いかと思われます。

    *createmark comps 1 displayed;
    foreach compid [hm_getmark comps 1] {
     *createmark elems 1 'by collector id' $compid;
     *createmark surfs 1 'by collector id' $compid;
     *createstringarray 3 {MinThickness: 0.1} {NumDecimals: 0.2} {ThicknessOutputOption: ElementNodal};
     *compute_midmesh_thickness elems 1 surfs 1 1 3;
    }

  • zyukaiboy
    zyukaiboy Altair Community Member
    edited April 2019

    いつもありがとうございます @Imoto

     

    時間があるときに検証お願いします。

     

    ご教授していただいたコンポーネント毎の処理を行ったところ処理時間を大幅に早めることが出来ました。

    ありがとうございます。

     

    追加でお聞きしたいことが一点あります。

     *createstringarray  {NumDecimals: 2} で小数点以下の桁数を指定しているにもかかわらず、

    その指定している数よりも桁数が多く表示されることがあります。

    これをちゃんと指定通りに表示する方法もしくは、表示される値を0.05刻みにする方法があれば教えていただけないでしょうか。

     

    よろしくお願いいたします。

  • Imoto
    Imoto
    Altair Employee
    edited April 2019

    こんにちは、@zyukaiboy

     

    MidMesh ThicknessのGUIから確認すると分かり易いのですが、板厚の割り当て先を「Nodal thickness on elements」に切り替えると、「Maximum thickness range interval」がグレーアウト(無効化)されます。

    ユーザーガイドには、下記の記述もありますので、「Nodal thickness on elements」にすると、{NumDecimals: 2}はホボ無効になっていると考えた方が良いかも知れません。

    <?xml version="1.0" encoding="UTF-8"?>MidMeshThickness.jpg

  • zyukaiboy
    zyukaiboy Altair Community Member
    edited April 2019

    いつもありがとうございます @Imoto

     

    今は割り当てを「Nodal thickness on elements」にしていますが、

    それを「Element」に変更すれば適用可能だということでしょうか?

     

    Nodal thickness on elements」と「Element」の違いがイマイチ分かりません、

    ご教授のほどよろしくお願いいたします。

  • Imoto
    Imoto
    Altair Employee
    edited October 2020

    こんにちは、@zyukaiboy

     

    板厚の割り当て先では、下記のような項目が選べます。

    Nodal thickness on elements:要素に対して、各節点板厚を設定
    Properties on elements:プロパティを作成して、要素に関連付け
    Properties on components:プロパティを作成して、コンポーネントに関連付け
     

    プロパティの関連付け方法については、下記リンクをご参照下さい。

    https://community.altair.com/community?id=community_question&sys_id=e15684f61b2bd0908017dc61ec4bcbcd

  • zyukaiboy
    zyukaiboy Altair Community Member
    edited April 2019

    いつもありがとうございます @Imoto

     

    板厚割り当ての内容、理解できました。

    ありがとうございます。

     

  • Imoto
    Imoto
    Altair Employee
    edited April 2019

    こんにちは、@zyukaiboy

     

    GUI上で確かめてみるのが良いのですが、板厚の出力先'Elements'を選ぶとにすると下図のように右側がグレーアウトすると思います。

    <?xml version="1.0" encoding="UTF-8"?>MidMeshThickness_Abaqus.jpg


    ユーザープロファイルによって、板厚の出力先=ThicknessOutputOptionで何が有効かが変わってきます。


    ご利用のユーザープロファイル名と、問題となっているhmファイルを添付して下さい。

  • zyukaiboy
    zyukaiboy Altair Community Member
    edited April 2019

    いつもありがとうございます @Imoto

     

    プロファイルはLsDynaです。

     

    先ほどコメントさせていただいた件はGroupThicknessの適用し忘れのために発生しました。

    GroupThicknessを適用した結果FixedIntervalで指定した値のスパンで板厚を取得できました。

     

    お手数をおかけしてしまい、申し訳ありません。