我正在尝试将ASCII和二进制数据的混合物编写为vtk文件格式数据,如下所示。
我知道必须在文件OPEN语句(以FORM ='BINARY',最好是:ACCESS ='STREAM')中进行二进制或ASCII区分。我不明白如何以所需的格式编写文件。
我要输出的内容:
ascii keyword
ascii keyword
ascii keyword
ascii keyword
ascii keywords "variable value in ascii" ascii keywords
.....SOME BINARY DATA ....
.....................
我正在使用什么:
write(fl) "# vtk DataFile Version 3.0"//CHAR(13)//CHAR(10)
write(fl)"Flow Field"//CHAR(13)//CHAR(10)
write(fl)"BINARY"//CHAR(13)//CHAR(10)
write(fl)"DATASET UNSTRUCTURED_GRID"//CHAR(13)//CHAR(10)
write(fl)"POINTS",npoints,"float" -------------> gives value of npoints(example:8) in binary format
输出应为:
# vtk DataFile Version 3.0
Flow Field
BINARY
DATASET UNSTRUCTURED_GRID
POINTS 8 Float
.....SOME BINARY DATA ....
.....................
输出为:
# vtk DataFile Version 3.0
Flow Field
BINARY
DATASET UNSTRUCTURED_GRID
POINTSÒ^O^@^@float
.....SOME BINARY DATA ....
...................
答案 0 :(得分:0)
我会替换
write(fl)"POINTS",npoints,"float"
使用
BLOCK
integer, parameter :: big_enough = 132 ! Or whatever
character(big_enough) line
write(line,'(*(g0))')"POINTS ",npoints," Float"//achar(13)//achar(10)
write(f1) trim(line)
END BLOCK
答案 1 :(得分:0)
首先,您会在互联网上找到编写VTK文件的示例,例如各种{@ 3}}等开放源代码研究代码中的问题binary vtk for Rectilinear_grid from fortran code can not worked by paraview和Binary VTK for RECTILINEAR_GRID from fortran code(这是我的简化示例,还有很多)或位于专用库中,例如https://bitbucket.org/LadaF/elmm/src/866794b5f95ec93351b0edea47e52af8eadeceb5/src/simplevtk.f90?at=master&fileviewer=file-view-default(还有XML VTK文件的VTKFortran库)。
因此,即使您在Windows上,也不应在VTK二进制文件中使用Windows行尾约定。仅用achar(10)
(或new_line
中的iso_fortran_env
常数)结束行。并且不要忘记二进制数据必须是bigendian。上面的链接中有一些处理方法的示例。
第三,要将整数放在字符串中,我们有大量重复项。我的意思是真的很大。从http://people.sc.fsu.edu/~jburkardt/f_src/vtk_io/vtk_io.html开始,我会毫不客气地向我推荐itoa
函数,因为它将大大简化您的代码。
write(fl)"POINTS ",itoa(npoints)," float"