1

Abaqus には、独自の材料記述 (VUMAT) があります。この VUMAT は、SDV1、SDV2 などの名前の状態変数を生成します。これらの変数は、abaqus の他の出力データと共にバイナリ .odb ファイルに保存されます。これらの変数が非常に多いため、S1、S2、E1、E2 などの意味のある名前を付けたいと思います。そのため、Abaqus ビューアで .odb を表示すると、どの変数がどれであるかが明確になります。

現在、abaqus は、その .odb ファイルを読み書きするための Python インターフェースを提供しています。しかし、検索できる限り、これらの変数の名前を変更する方法が見つかりませんでした。それらを変更しようとすると、読み取り専用エラーが発生します。

したがって、メモ帳++で.odbを開こうとしたところ、そのファイル内のすべてのSDVエントリを手動で必要なものに置き換えて保存することがわかりました。名前も Abaqus Viewer で変更されます。それはとても良いです!

しかし、私はこのプロセスを自動化したいと考えています。そこで、最初の .odb を読み取り、SDV を置き換え、変更された .odb を別のファイルとして保存する Python スクリプトを作成しました。

import sys
with open('User.odb','rb') as f:
    content = f.read()
    if b"SDV2" in content:
        print('Found')
        content = content.replace(b'SDV2',b'works')
with open('User.temp.odb','wb') as fw:
    fw.write(content)

しかし、新しい .odb を abaqus ビューアで開くと、次のメッセージが表示されます。

***エラー: Abaqus データベース ファイルが壊れています。このファイルが FTP または同等の機能を使用して別のマシンから転送された場合は、ファイルが ASCII モードではなくバイナリ モードを使用してコピーされたことを確認してください。

さらに、現在、このコードは SDV20 も置き換えていますが、それを回避し、SDV20、SDV21 などの一部ではなく、SDV2 のみを置き換えるにはどうすればよいですか?

私は何が欠けていますか?私はpython 2.7を使用しています。

編集:

ODB を HEX エディターで開くと、次のパターンが表示されます。 SDV9 の後に SDV10 が続く場合:

04 53 44 56 39 00 00 00 05 53 44 56 31 30 00 00 00 00 00 00  

エンコーディングが文字数で始まることがわかります。SDV9 の場合は 04、SDV10 の場合は 05 の後に NULL 値が続きます。SDV1 ~ SDV9 は 3、残りは 6 です。SDV9の部分を次のように変更してみました:

05 53 44 56 39 00 00 00 00 00 00 00

SDV10の部分を次のように変更しているときに、同じエラーが発生しました。

05 53 44 56 39 00 00 00 00 00 00 00

完全に正常に動作します。誰かがこれに精通している場合は、助けていただければ幸いです。

EDIT2:

新しい変数は古い変数とまったく同じ長さでなければならないため、私のコードは機能しません。長さが合っていれば問題ありません。短い変数は、必要な長さの文字を取得するために、変数の後にスペースを入れることができます。

SSchneid によって提案されたコードを使用することで、長い SDV の一部を含まない、交換用の正確な SDV を一致させることができました。

FieldOutput() と addData() を含むフィールド変数を追加する標準的な方法は、既存の SDV を別の名前で複製するため、良い解決策ではありません。非常に大規模な分析では、odb のサイズが大幅に増加します。古いものを削除する方法がない限り。

もちろん、必要な変数をサブルーチンから直接別のテキスト ファイルに出力することで、さらに進めることもできます。次に、そのテキスト ファイルを使用して、odb 内に新しい Field 出力を生成します。テキストファイルは後で削除できます。そして、これらすべてが SDV 出力を要求することなく行われます。

または、SDV 出力を .fil ファイルに要求してから、FieldOutput() と addData() を使用して、odb にアセンブルすることもできます。しかし、これらは非常にハックなソリューションであり、ディスクへの大量の書き込みと、出力テキスト ファイルを解析するための多数のコード行が必要です。

完全な解決策が投稿されるか、自分でそれを理解するまで、私はこのトレッドを未回答のままにしておきます(この場合、回答うさぎを投稿します)

助けてくれてありがとう!

4

2 に答える 2