📏

3DCNNサロゲートモデル用に読み込む形状を確認する

2024/10/15に公開

今回取り組むこと

  • 前回記事でメッシュモデルから3DCNNに読み込めるデータに加工してサロゲートモデルを作成しました。
  • 今回は、加工したデータがどんな形状になっているか確認出来るようにしました。

なぜ形状を確認するのか?

  • 今回の加工でメッシュモデルは、セル数分の(x,y,z,値)のテンソルに加工され、イメージではボクセル化されています。
  • 例えば、セル数が荒すぎると元形状の外観が十分に再現出来ていない恐れがあります。
  • また、例えば強度剛性のサロゲートを作る場合リブがあるか、他の形状との隙間が埋まっていないか等、CAE解析で結果に大きな影響を与える形状が再現出来ていないと、効果的なサロゲートモデルを作る事が出来ません。

プログラムの説明

  • 外観だけ確認したい場合は、matplotlib.pyplotの散布図を使えば確認できます。しかし、今回はリブができているかや形状の細かいところを確認したので3D上でCADなどのように回転させれるようにソリッドに変換してLs-prepost等で開けるようにしました。

  • (x,y,z,値)で値は1(形状あり)と0(形状なし)となっているので、値が1のx,y,z成分を3D上の基準座標にし、基準座標を元に一辺1mmの立方体の座標とソリッド要素を作成しました。

  • 使用したライブラリ
    ※CAE_File_Read_Write 前回記事で書いたkeywordファイル読み込ライブラリ

def image_file_make(dataset):
    DATA=CAE_File_Read_Write.DATA_BASE()
    
    for val in dataset:
        x,y,z,v=np.where(val==1)#値1のx,y,zを取り出す
        CRD=[(x[i],x[i]+1,y[i],y[i]+1,z[i],z[i]+1) for i in range(len(x))]#基準座標を作成
        id=1
        for x_mi,x_ma,y_mi,y_ma,z_mi,z_ma in CRD:
            CRD_set=[np.array([x_mi,y_mi,z_mi]),np.array([x_ma,y_mi,z_mi]),
                    np.array([x_ma,y_ma,z_mi]),np.array([x_mi,y_ma,z_mi]),
                    np.array([x_mi,y_mi,z_ma]),np.array([x_ma,y_mi,z_ma]),
                    np.array([x_ma,y_ma,z_ma]),np.array([x_mi,y_ma,z_ma])]
            IDs=setnode(id,CRD_set,DATA)#節点をファイル書き出しデータに保存
            DATA.EL.setdefault(id,fr.ELEMENT(1,IDs))#ソリッドをファイル書き出しデータに保存
            id=id+1
        fr.File_key().Write_File(f"ファイル名",DATA)#ファイルをkeyword形式で書き出し
        DATA.DATA_BASE_Clear()#ファイル書き出しデータを空にする
def setnode(id,CRD_set,DATA):
    id=id*8-7
    temp=[]
    for c in CRD_set:
        DATA.N.setdefault(id,fr.NODE(c))
        temp.append(id)
        id+=1
        
    return temp

使い方

  • 前回記事で作成したメッシュデータからCNNに読み込ませるテンソルデータを上で紹介したimage_file_make関数の引数にするとボクセルメッシュを可視化したkeywordが作成されます。
  • 右:元データ 左:ボクセル化したデータ

今後

  • これで少なくともモデルが意図した形状になっているか(セル分割数が妥当)が確認できるようになりました。
  • この他にも、中間層をどのように最適化していくとか、データ数はどの程度必要だとか問題はいろいろありますが一つずつ解決していけたらと思います。

Discussion