美文网首页
FEniCS 中 xdmf 文件的写入与读取

FEniCS 中 xdmf 文件的写入与读取

作者: 马鹏飞_47c5 | 来源:发表于2021-12-16 20:34 被阅读0次

要完整地有限元空间中一个函数的完整信息,我们需要知道这个函数所在的函数空间和基函数的系数(通常称为dofs)。XDMFFILE的write函数只保存网格节点上的函数值,对应的也就是CG-1函数空间。这种做法虽然高效,但是FEniCS不能直接读取用write函数保存的数据,因为它丢失了原函数的函数空间的相关信息。如果要完整地保存和读取函数的信息,那么就需要使用write_checkpoint和read_checkpoint两个函数,他们能够保存并还原一个函数,以下是一个简单的范例。

from dolfin import *
nx = ny = 8 
mesh = UnitSquareMesh(nx, ny) 
V = FunctionSpace(mesh, 'P', 1) 
    
alpha = 3; beta = 1.2 
f = Expression('1 + x[0]*x[0] + alpha*x[1]*x[1] + beta*t', degree=2, alpha=alpha, beta=beta, t=0) 
 
f_out = XDMFFile("test.xdmf") 
f_out.write_checkpoint(project(f, V), "f", 0, XDMFFile.Encoding.HDF5, False)  # Not appending to file
for j in range(1,5): 
    t = float(j/5) 
    f.t = t 
f_out.write_checkpoint(project(f,V), "f",t, XDMFFile.Encoding.HDF5, True)  #appending to file
    
f_out.close() 
     
f1 = Function(V) 
f_in =  XDMFFile("test.xdmf") 
   
f_in.read_checkpoint(f1,"f",0) 
f_in.read_checkpoint(f1,"f",1)

write_checkpoint可以带有时刻信息,并且相同时刻的函数多次存储不会发生冲突。xdmf存储相同函数的时候有一个计数器,用来唯一地标识每次存储的数据。用read_checkpoint函数读取数据的时候只能根据计数读取,无法根据时刻读取。

最后,XMDF 也可以读取和写入网格,fenics中的网格边界标注 Meshfunction<typename T> 也能通过XDMFFile中write和read函数读取。

from fenics import *
mesh = UnitSquareMesh(64, 64)
mesh_file = XDMFFile("mesh.xdmf")
mesh_file.write(mesh)
mesh_file.close()
from fenics import *
mesh_file = XDMFFile("mesh.xdmf")
mesh = Mesh()
mesh_file.read(mesh)
mesh.close()

参考:

类的定义在文件XDMFFile.h中,以下是一些来自fenics论坛上的一些讨论:

https://fenicsproject.discourse.group/t/xdmf-write-checkpoint-questions/2385

https://fenicsproject.discourse.group/t/loading-xdmf-data-back-in/1925

https://fenicsproject.discourse.group/t/access-function-in-time-dependent-xdmffile/359

相关文章

  • FEniCS 中 xdmf 文件的写入与读取

    要完整地有限元空间中一个函数的完整信息,我们需要知道这个函数所在的函数空间和基函数的系数(通常称为dofs)。XD...

  • 文件操作

    读取和写入:文件有内容读取就是将文件中的内容读取到内存中。写入就是将内存中的内容写入到磁盘文件中。内存就相当于你的...

  • fs文件系统操作

    基础写入文件 简单写入文件 流式文件写入 简单文件读取 流式文件读取 流式文件拷贝(读取 + 写入) 复制文件 f...

  • 文件流

    写入流 writeStream.txt 读取流 读取流与写入流结合 文件流管道

  • python 文件操作

    fp=open("文件路径","方式") 文件读取 文件写入 文件关闭 文件读取写入方式

  • c++中常用的文件读写demo

    向文件中写入内容 从文件中读取内容

  • 文件IO流

    从控制台读取输出字符从文件中写入读取字符从文件中写入读取字节文件夹操作 1. 从控制台读取输出字符 输入由Syst...

  • txt读写

    文件打开 读文件 读取字符串 按行读取整个文件 写文件 字符串写入txt 列表写入文件 双层列表写入文件 数组写入文件

  • java操作文件

    优雅读取文件 优雅的写入文件 读取大文件

  • nodeJS读取json文件并写入txt或redis中

    【1:读取json写入txt文件】json文件book.json js文件 【2:读取json写入redis文件/...

网友评论

      本文标题:FEniCS 中 xdmf 文件的写入与读取

      本文链接:https://www.haomeiwen.com/subject/aravfrtx.html