1

我正在尝试解决 fenics 中的非线性问题。我不知道非线性函数是一个表达式,而是只知道数据形式的值。

换句话说,如果我正在求解 nabla(k(u).nabla(u)) = C,我不知道 k(u) 或者不能用 x[0] 等形式写出来,我只知道对应的值k 代表 u 的所有值。

目前我已经编写了一些插值函数并将其称为“k”,它可以将其投影到函数空间,但是当我将它放入变分形式并求解时,它似乎不起作用。

下面是一些澄清问题的代码:我使用的是制造解决方案的方法,其中 u=x^2 以 k=1+u^2 作为测试,其中 k_data = u=[0,(1+xmax 的数据列表^2)]。

有人告诉我,我可以查看 Expression 中的子类,但我不知道如何在不知道 x[0] 的情况下执行此操作。请帮忙!

u = Function(V)
v = TestFunction(V)

u.interpolate(Expression("x[0]"))
k = interpolate_table(u,kappa_data)
plot(project(k,V))

C = Expression("-2.0-10.0*x[0]*x[0]*x[0]*x[0]")
diff_part = k*inner(grad(u),grad(v))*dx
source_part = C*v*dx

Res = diff_part - source_part
J = derivative(Res,u)
problem = NonlinearVariationalProblem(Res, u, bcs, J)
solver  = NonlinearVariationalSolver(problem)
solver.solve()

prm = solver.parameters['newton_solver']
prm['relative_tolerance'] = 1E-6
prm['absolute_tolerance'] = 1E-6
prm['maximum_iterations'] = 100
4

0 回答 0