writing/reading 的解决方案安全吗?
Is that way of writing/reading a solution safe?
我需要存储昂贵的 FEM 计算的解决方案,以便在进一步分析中使用它。浏览我目前发现的教程,我可以这样存储我的结果:
from fenics import *
mesh = Mesh('mesh/UnitSquare8x8.xml')
V = FunctionSpace(mesh, 'P', 1)
u = TrialFunction(V)
v = TestFunction(V)
f = Constant(-6.0)
a = dot(grad(u), grad(v))*dx
L = f*v*dx
u_D = Expression('1 + x[0]*x[0] + 2*x[1]*x[1]', degree=2)
def boundary(x, on_boundary):
return on_boundary
bc = DirichletBC(V, u_D, boundary)
A = assemble(a)
b = assemble(L)
bc.apply(A, b)
u = Function(V)
solver = KrylovSolver("cg", "ilu")
solver.solve(A, u.vector(), b)
File('solution.xml') << u.vector()
然后像这样加载它们:
from fenics import *
mesh = Mesh('mesh/UnitSquare8x8.xml')
V = FunctionSpace(mesh, 'P', 1)
u = Function(V)
File('solution.xml') >> u.vector()
不幸的是,我几乎不知道我到底在做什么。这是存储和加载计算结果的正确方法吗? u.vector()
(对于同一个网格文件)中元素的顺序是否固定 within/between 不同的 FEniCS 版本,或者它只是一个可能随时更改的实现细节?如果不安全,那么正确的做法是什么?
我找到了另一个(可能更危险的)解决方案。我可能会使用 VALUES = u.vector().get_local()
和 u.vector().set_local(VALUES)
方法,因为 VALUES
是一个我可以轻松存储和加载的 numpy 数组。
不,根据对 Is the order of Vector
elements preserved between runs? 的回答,不能保证 Vector
个元素的顺序被保留。
建议改用XDMFFile.write_checkpoint()
和XDMFFile.read_checkpoint()
方法
我需要存储昂贵的 FEM 计算的解决方案,以便在进一步分析中使用它。浏览我目前发现的教程,我可以这样存储我的结果:
from fenics import *
mesh = Mesh('mesh/UnitSquare8x8.xml')
V = FunctionSpace(mesh, 'P', 1)
u = TrialFunction(V)
v = TestFunction(V)
f = Constant(-6.0)
a = dot(grad(u), grad(v))*dx
L = f*v*dx
u_D = Expression('1 + x[0]*x[0] + 2*x[1]*x[1]', degree=2)
def boundary(x, on_boundary):
return on_boundary
bc = DirichletBC(V, u_D, boundary)
A = assemble(a)
b = assemble(L)
bc.apply(A, b)
u = Function(V)
solver = KrylovSolver("cg", "ilu")
solver.solve(A, u.vector(), b)
File('solution.xml') << u.vector()
然后像这样加载它们:
from fenics import *
mesh = Mesh('mesh/UnitSquare8x8.xml')
V = FunctionSpace(mesh, 'P', 1)
u = Function(V)
File('solution.xml') >> u.vector()
不幸的是,我几乎不知道我到底在做什么。这是存储和加载计算结果的正确方法吗? u.vector()
(对于同一个网格文件)中元素的顺序是否固定 within/between 不同的 FEniCS 版本,或者它只是一个可能随时更改的实现细节?如果不安全,那么正确的做法是什么?
我找到了另一个(可能更危险的)解决方案。我可能会使用 VALUES = u.vector().get_local()
和 u.vector().set_local(VALUES)
方法,因为 VALUES
是一个我可以轻松存储和加载的 numpy 数组。
不,根据对 Is the order of Vector
elements preserved between runs? 的回答,不能保证 Vector
个元素的顺序被保留。
建议改用XDMFFile.write_checkpoint()
和XDMFFile.read_checkpoint()
方法