【質問】複数のプローブ点でのField量の取得方法

366 views
Skip to first unread message

kominami

unread,
Oct 4, 2021, 8:49:49 AM10/4/21
to OpenFOAM
kominamiです。

多数のプローブ点においてOpenFOAMの計算結果をCSV等の形式で出力する方法に悩んでいます。いろいろ試行錯誤をしましたが判らないので、どなたか詳しい方がいらっしゃいましたら、宜しく御教示ねがいます。

まずやりたいことは下記です。

プローブ点(サンプル点)でのField量と座標値のセットをCSV形式で入手したい。
プローブ点の数は数十~数百くらいです。プローブ点ある領域内に分布している、あるいは座標値が既与とします。プローブ点の位置は節点とは一致せず、プローブ点の値はセル値または節点値より補間するものとします。

試行錯誤した内容は下記です。

1)Filter->PlobeLocation
球形状内に複数のプローブ点を設定できますが、プローブ点の分布が球で無い場合を行いたいため不採用としました。

2)Filter->PlotOverLineののち、SpreadSheet View でライン上の点での値が取得でき、CSV形式で保存できます。PlotOverLineのPropertiesのResolution値で線分の内分点をプローブ点にできました。複数のPlotOverLineを作成したのち、GrpouDataSetsでまとめて、SpreadSheet View、CSV形式で保存できました。

しかし、プローブ点の数が多いと、PlotOverLineの操作の手数が増えて煩わしく感じました。
※ Tools->Start Trace でマクロを記録できることは知っています。
※ postProcessユーティティのprobeも知っていますが、paraviewのcaluculatorを使って演算処理した結果のfield量を出力したいため不採用としました。postProcessのprobeだとたしか、field量毎に別々のファイルになったと思うので、一つのCSVにするのが煩わしそうだと思ったからです。
※ postProcessユーティティでサンプル点の座標値と複数のField量がセットでCSV等の形式で出力する方法ならば可能。表計算ソフトで読み込んだのちにparaviewのcaluculatorでの演算処理を再現すれば良いからです。

3)Sourcesで平面や円柱を作っても、その点をプローブ点にできない。

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

20211004_キャプチャ.JPG20211004_キャプチャ_02.JPG

haruka tsubota @xsim.info

unread,
Oct 5, 2021, 12:48:47 AM10/5/21
to OpenFOAM
ParaViewでの操作の手数が多いことが問題なのであれば PvBatch を使用してpython スクリプトで自動化するのが一番素直で汎用性が高い方法ではないかと思います。

参照:
- PvPython and PvBatch


2021年10月4日月曜日 21:49:49 UTC+9 kominami:

kominami

unread,
Oct 9, 2021, 6:10:44 AM10/9/21
to OpenFOAM
kominamiです。

tsubotaさん、ご教示ありがとうございます。

PvBatchについて調べたところ複数の解析ケースに対して同様の処理を行いたい場合のバッチ処理コマンドを作成するのに便利なツールのようです。機会があれば使わせていただきます。
今回の自分の悩みは、単一の解析ケースでのPlotOverLine操作の手数が多くなることです。
商用のポストソフトだと、平面グリッド点や円筒グリッド点を作って、その点をプローブ点にできるのになぁというのが悩みです。

ひとまず、Tools->Start Trace で記録したマクロを修正した以下のようなpythonスクリプトで処理しました。
小生自身がpythonに詳しくないため完全な自動化は出来ておりません。
小生と同様の悩みを持つ方への参考になればとの思いと、詳しい方による改良を期待してアップロードしました。

#### import the simile module from the paraview
from paraview.simple import *
#### disable automatic camera reset on 'Show'
paraview.simple._DisableFirstRenderCameraReset ()

### division number of a line segment for a probe
res = 20

### x,y,z coordinate of a line segment for a probe
### start x,y,z  end x,y,z,
location = (
#  ここに座標セットを貼り付ける.
(1,2,3,1,2,6),
(2,3,4,3,3,7),
)

# initialization counter value
count = 1

# find source
exefoat = F I ndSou rce (. exe. foarn,)

##### create a 'plot Over Line,
for loc in location:
    name = 'plot0verline' + str(count)
    name = PlotOverLine (lnput=exeform,
        Source='Hish Resolution Line Source')
    name.Source.Resolution = res
    name.Tolerance = 2.4e-16
    # ------------
    name.Source.Point1 = [loc[0] , loc[1] , loc[2] ]
    name.Source.Point2 = [loc[3] , loc[4] , loc[5] ]
    # get active view
    renderViewl = GetAciveViewOrCreate ('RenderView')
    # -- 省略するとparaviewのパイプラインに[表示/非表示]のアイコンが表示されない.
    #  アイコンが表示されないと,paraviewのGui操作でAppendDatasets操作ができない.
    # uncomment following to set a specific view size
    # renderView1.VrewSize = [1439,683]
    # get layout
    viewLayout1 = GetLayout()
    # show data in view
    plotOverLine1Disply = show(name)
    # -- 省略するとparaviewのパイプラインに[表示/非表示]のアイコンが表示されない(end)
    count +=1

### set active source
# -- 次のAppendDatasets操作のために,対象となるソースを選択する.
# -- for文で処理をすると変数型が異なるためかエラーが発生したため,コメントアウトした.
# SetActiveSource (plotOverLine1)
# SetActiveSource (plot0verLine2)

### create a new 'Append Datasets'
# appendDatasets1 = AppendDatasets (Input=[plot0verLine1, plot0verLine2])

### uncomrnent the following to render all views
# RenderAllViews
# alternatively, if you want to write images,  you can use SaveScreenshot(...).

以上


2021年10月5日火曜日 13:48:47 UTC+9 haruka tsubota @xsim.info:
Reply all
Reply to author
Forward
0 new messages