加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

PLOT3D 数据格式

(2010-04-30 15:28:09)
标签:

杂谈

分类: CFD/NHT
以前输出结果都是用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)

      read(8,*) ni, nj
      read(8,*) mach, alpha, reyn, time
      read(8,*) ((( q(i,j,n), i=1,ni), j=1,nj), n=1,4)

3D, Whole, Unformatted, Multi-Block Grid and Solution

      parameter ( imax = 100 )
      parameter ( jmax = 100 )
      parameter ( kmax = 100 )
      parameter ( nbmax = 10 )

      integer i
      integer j
      integer m
      integer n
      integer nblocks
      integer ni (nbmax)
      integer nj (nbmax)
      integer nk (nbmax)

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

      real x(imax,jmax,kmax,nbmax)
      real y(imax,jmax,kmax,nbmax)
      real z(imax,jmax,kmax,nbmax)

      real q(imax,jmax,kmax,nbmax,5)

      open ( unit=7, form='unformatted', file='3D.x' )
      open ( unit=8, form='unformatted', file='3D.q' )

      read(7) nblocks
      read(7) ( ni(m), nj(m), nk(m), m = 1, nblocks )
      do m = 1, nblocks
        read(7)
       ((( x(i,j,k,m), i=1,ni(m)), j=1,nj(m)), k=1,nk(m)),
       ((( y(i,j,k,m), i=1,ni(m)), j=1,nj(m)), k=1,nk(m)),
       ((( z(i,j,k,m), i=1,ni(m)), j=1,nj(m)), k=1,nk(m))
      enddo

      read(8) nblocks
      read(8) ( ni(m), nj(m), nk(m), m = 1, nblocks )
      do m = 1, nblocks
        read(8) mach, alpha, reyn, time
        read(8)
       (((( q(i,j,k,m,n), i=1,ni(m)), j=1,nj(m)), k=1,nk(m)), n=1,5)
      enddo

TECPLOT 的 PREPLOT 可以把 PLOT3D 文件转为 TECPLOT 格式。(没有测试)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有