T3D 數據格式

以前輸出結果都是用tecplot格式,最近涉及到plot3d格式。呵呵,留着自己看。發現Q文件挺好用的,就是可以輸出的變量太少了,準備搞函數文件。
--------------------------------------------

PLOT3D數據格式源於NASA,廣泛用於規則網格的CFD數據文件。PLOT3D文件可以是ASCII, 也可是Fortran unformatted 或 C binary形式。
PLOT3D文件分爲網格文件(XYZ 文件), 空氣動力學結果文件 (Q 文件)和通用結果文件(函數文件 + 函數名稱文件)。網格文件中可加入所謂的IBlank參數。

IBlank參數的定義:
IBlank是在每一網格點上給出的一個正數值,定義如下:
0 - 計算域之外,非流體點
1 - 正常點
2 - 固面邊界點
負數 - 分塊網格界面點,其數值爲相鄰網格塊的塊號

以下爲各文件使用FORTRAN讀入的語句,所有文件均爲無格式文件。

網格文件(XYZ文件):

XYZ 文件, 單塊(single-block):
READ(IUNIT) IMAX,JMAX,KMAX
READ(IUNIT) (((X(I,J,K),I=1,IMAX),J=1,JMAX),K=1,KMAX),&
(((Y(I,J,K),I=1,IMAX),J=1,JMAX),K=1,KMAX),&
(((Z(I,J,K),I=1,IMAX),J=1,JMAX),K=1,KMAX)

XYZ 文件, 單塊(single-block), 加 IBlank:
READ(IUNIT) IMAX,JMAX,KMAX
READ(IUNIT) (((X(I,J,K),I=1,IMAX),J=1,JMAX),K=1,KMAX),&
(((Y(I,J,K),I=1,IMAX),J=1,JMAX),K=1,KMAX),&
(((Z(I,J,K),I=1,IMAX),J=1,JMAX),K=1,KMAX),&
(((IBLANK(I,J,K),I=1,IMAX),J=1,JMAX),K=1,KMAX)

XYZ 文件, 二維, 單塊(single-block):
READ(IUNIT) IMAX,JMAX
READ(IUNIT) ((X(I,J),I=1,IMAX),J=1,JMAX),&
((Y(I,J),I=1,IMAX),J=1,JMAX)

XYZ 文件, 多塊(multi-block)
READ(IUNIT) NBLOCK
READ(IUNIT) (IMAX(N),JMAX(N),KMAX(N),N=1,NBLOCK)
DO N=1,NBLOCK
READ(IUNIT) (((X(I,J,K),I=1,IMAX(N)),J=1,JMAX(N)),K=1,KMAX(N)),&
(((Y(I,J,K),I=1,IMAX(N)),J=1,JMAX(N)),K=1,KMAX(N)),&
(((Z(I,J,K),I=1,IMAX(N)),J=1,JMAX(N)),K=1,KMAX(N))
ENDDO

XYZ 文件, 多塊(multi-block), 加 IBlank:
READ(IUNIT) NBLOCK
READ(IUNIT) (IMAX(N),JMAX(N),KMAX(N),N=1,NBLOCK)
DO N=1,NBLOCK
READ(IUNIT) (((X(I,J,K),I=1,IMAX(N)),J=1,JMAX(N)),K=1,KMAX(N)),&
(((Y(I,J,K),I=1,IMAX(N)),J=1,JMAX(N)),K=1,KMAX(N)),&
(((Z(I,J,K),I=1,IMAX(N)),J=1,JMAX(N)),K=1,KMAX(N)),&
(((IBLANK(I,J,K),I=1,IMAX(N)),J=1,JMAX(N)),K=1,KMAX(N))
ENDDO

XYZ 文件, 二維, 多塊(multi-block)
READ(IUNIT) NBLOCK
READ(IUNIT) (IMAX(N),JMAX(N),N=1,NBLOCK)
DO N=1,NBLOCK
READ(IUNIT) ((X(I,J),I=1,IMAX(N)),J=1,JMAX(N)),&
((Y(I,J),I=1,IMAX(N)),J=1,JMAX(N))
ENDDO

空氣動力學結果文件 (Q 文件)(Q 文件定義過窄,現已很少使用。):

Q 文件專爲外流空氣動力學設計,對三維流動,數組變量如下:
Q1 - 無量綱 密度
Q2 - 無量綱 X-動量
Q3 - 無量綱 Y-動量
Q4 - 無量綱 Z-動量
Q5 - 無量綱 總能
另加4個參數:
FSMACH - 自由流馬赫數
ALPHA - 攻角
RE - 雷諾數
TIME - 時間

Q 文件, 單塊(single-block):
READ(IUNIT) IMAX,JMAX,KMAX
READ(IUNIT) FSMACH,ALPHA,RE,TIME
READ(IUNIT) ((((Q(I,J,K,M),I=1,IMAX),J=1,JMAX),K=1,KMAX),M=1,5)

Q 文件, 二維, 單塊(single-block):
READ(IUNIT) IMAX,JMAX
READ(IUNIT) FSMACH,ALPHA,RE,TIME
READ(IUNIT) (((Q(I,J,M),I=1,IMAX),J=1,JMAX),M=1,4)

Q 文件, 多塊(multi-block):
READ(IUNIT) NBLOCK
READ(IUNIT) (IMAX(N),JMAX(N),KMAX(N),N=1,NBLOCK)
DO N=1,NBLOCK
READ(IUNIT) FSMACH,ALPHA,RE,TIME
READ(IUNIT)((((Q(I,J,K,M),I=1,IMAX(N)),J=1,JMAX(N)),K=1,KMAX(N)),M=1,5)
ENDDO

Q 文件定義過窄,現已很少使用。大多CFD工作者使用通用結果文件,即
所謂的函數文件(function file)。函數文件中可定義任意數量的數組變量,
其名稱在另一函數名稱文件(function name file)中給出。

函數文件:
函數文件, 單塊(single-block):
READ(IUNIT) IMAX,JMAX,KMAX
READ(IUNIT) ((((F(I,J,K,M),I=1,IMAX),J=1,JMAX),K=1,KMAX),M=1,NFUN)

函數文件, 二維, 單塊(single-block):
READ(IUNIT) IMAX,JMAX
READ(IUNIT) (((F(I,J,M),I=1,IMAX),J=1,JMAX),M=1,NFUN)

函數文件, 多塊(multi-block):
READ(IUNIT) NBLOCK
READ(IUNIT) (IMAX(N),JMAX(N),KMAX(N),N=1,NBLOCK)
DO N=1,NBLOCK
READ(IUNIT) ((((F(I,J,K,M),I=1,IMAX(N)),J=1,JMAX(N)),K=1,KMAX(N)),M=1,NFUN)
ENDDO

函數名稱文件:
函數名稱文件是一ASCII文件,列有函數文件中數組變量的對應名稱。以下爲一例子:
density
pressure
u;velocity vector
v
w
temperature
turbulence energy
...
...

注意事項:
1 名稱的數量和排列次序與函數文件中數組變量相同。
2 分割號 ";" 表示向量行的開始。";"之右爲向量名,";"之左爲X分量。其下兩行爲Y分量和Z分量。

http://www.grc.nasa.gov/WWW/wind/valid/plot3d.html
下面例子假設網格文件句柄爲7,結果文件句柄爲8。

2D, Whole, Formatted, Single-Block Grid and Solution

parameter ( imax = 100 )
parameter ( jmax = 100 )

integer i
integer j
integer m
integer n
integer ni
integer nj

real mach ! freestream Mach number
real alpha ! freestream angle-of-attack
real reyn ! freestream Reynolds number
real time ! time

real x(imax,jmax)
real y(imax,jmax)

real q(imax,jmax,4)

open ( unit=7, form='formatted', file='2D.x' )
open ( unit=8, form='formatted', file='2D.q' )

read(7,*) ni, nj
read(7,*)
& (( x(i,j), i=1,ni), j=1,nj),
& (( y(i,j), i=1,ni), j=1,nj)
發佈了9 篇原創文章 · 獲贊 8 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章