我试图解决fenics中的非线性问题。我不仅知道非线性函数作为表达式,而且只知道数据形式的值。
换句话说,如果我正在解决nabla(k(u).nabla(u))= C,我不知道k(u)或者不能用x [0]等来写它,我只知道对于u的所有值,对应的k值。
目前我已经编写了一些内插函数并将其调用为' 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