在CFD后处理过程中,有时需要将一个圆柱面上的参数展开为一个平面并导入到Tecplot中进行出云图或流线图,这就需要坐标变换,下面的程序就是采用Fortran编写的柱面展开程序。如果有建议,欢迎大家共同交流。
program main
implicit none
integer::i,j,k,n,stat
real*8::theta
character(len=100)str(500000)
real*8,allocatable::x(:),y(:),z(:),L(:),p(:),wv(:),av(:),vr(:),vc(:) ! 定义几个所需量:x,y,z为圆柱面上点的笛卡尔坐标,
open (11,file='cylinder_tec.dat') ! 'cylinder.dat_tec'为由fluent输出的tecplot格式的圆柱面参数文件
!跳过前2行,因为tecplot格式的圆柱面参数文件中前2行为头文件,包括:TITLE、VARUABLES
do i=1,2
read(11,*)
end do
!读取第3行中的N=?,即点的个数,34X可能需要根据N=?所在列的位置而进行改动,n为柱面上点的个数
read(11,"(34X,i10)")n
write(*,*)n
close(11)
allocate(x(n),y(n),z(n),L(n),p(n),wv(n),av(n),vr(n),vc(n)) !定义向量的长度
open(11,file='cylinder_tec.dat')
do i=1,4 !跳过前4行,因为tecplot格式输出的文件前3行分别为:TITLE、VARUABLES、ZONE,第4行为空行
read(11,*)
end do
read(11,*)x !读第1个BLOCK,为x坐标
read(11,*) !读空行
read(11,*)y !读第2个BLOCK,为y坐标
read(11,*) !读空行
read(11,*)z !读第3个BLOCK,为z坐标
read(11,*) !读空行
read(11,*)av !读第4个BLOCK,为相VOF
read(11,*) !读空行
read(11,*)p !读第5个BLOCK,为压力pressure
write(*,*)x(1),y(1),z(1)
rewind(11)
j=0
do while(.true.)
read(11,*,iostat=stat)
if(stat.lt.0) exit
j=j+1
end do
write(*,*) "line=",j
close(11)
!坐标变化
do i=1,n
if(abs(z(i))<0.0000001d0.and.x(i)<0) then !避免z(i)特别小等于0时,atan(x(i)/z(i))计算出错
theta=-3.1415926d0/2.d0
write(*,*)x(i),y(i),z(i)
else if (abs(z(i))<0.0000001d0.and.x(i)>0) then !避免z(i)特别小等于0时,atan(x(i)/z(i))计算出错
theta=3.1415926d0/2.d0
write(*,*)x(i),y(i),z(i)
else if (z(i)<0.and.x(i)<0) then !-90度~-180度
theta=atan(x(i)/z(i))-3.1415926d0
else if (z(i)<0.and.x(i)>0) then !90度~180度
theta=atan(x(i)/z(i))+3.1415926d0
else if (z(i)>0) then !-90度~90度
theta=atan(x(i)/z(i))
end if
L(i)=theta*sqrt(x(i)**2.d0+z(i)**2.d0) !弧长L
end do
k=CEILING(n/5.d0) !因为'cylinder.dat_tec'中每一个BLOCK为5列,这里k为每一个BLOCK的行数
k=5*k+8 !8为前面空的4行+每个BLOCK之间的空行共4行,BLOCK包括:x,y,z,av,p共5个BLOCK
open(11,file='cylinder_tec.dat')
open(12,file='cylinder_tec-post.dat') !变化之后的输出文件名字
!将原始文件中的头文件原样书写
do i=1,4
read(11,'(a)') str(i)
write(12,'(a)') str(i)
end do
rewind(11)
write(12,'(5(E18.9))') L !写弧长L的BLOCK
write(12,*) !写空行
write(12,'(5(E18.9))') y !写y的BLOCK
write(12,*) !写空行
write(12,'(5(E18.9))') z !写z的BLOCK
write(12,*) !写空行
write(12,'(5(F18.9))') av !写air-vof的BLOCK
write(12,*) !写空行
write(12,'(5(E18.9))') p !写pressure的BLOCK
do i=1,k
read(11,*)
end do
do i=k+1,j
read(11,'(a)') str(i)
write(12,'(a)') str(i)
end do
close(12)
close(11)
write(*,*)'over'
write(*,*)x(1),y(1),z(1)
end
最后将输出的cylinder_tec-post.dat文件导入到tecplot中采用3D绘图并调整为XY视图,这样就完成了柱面展开为平面的操作。
本文介绍了一款使用Fortran编写的程序,该程序能够将圆柱面上的参数转换为平面坐标,便于在Tecplot中进行数据可视化,如云图和流线图的绘制。程序详细介绍了从输入文件读取数据、坐标变换到输出处理后的数据的过程。
52

被折叠的 条评论
为什么被折叠?



