Nuutils '你好世界!

计算科学 有限元 nutils
2021-12-20 18:17:24

假设我对基于 Python 的有限元包Nutils 完全陌生,哪些示例代码可以帮助我入门?

1个回答

以下功能齐全的脚本解决了标量值字段的拉普拉斯问题u, 这样对于所有测试函数v

Ωv·u=ΓNvf
在哪里Ω是具有 Neumann 条件的单位平方域f=1在右边界ΓN, 齐次狄利克雷条件u=0下边界上,其余边界上的自然边界条件。使用 8x8 计算网格上的二次样条基函数对空间进行离散化。

from nutils import mesh, function, plot

# prepare domain, geometry, basis
domain, geom = mesh.rectilinear( [range(9),range(9)] )
basis = domain.basis( 'spline', degree=2 )

# construct matrix, right hand side, constraints
matrix = domain.integrate( basis['i,k'] * basis['j,k'], geometry=geom, ischeme='gauss2' )
rhs = domain.boundary['right'].integrate( basis, geometry=geom, ischeme='gauss2' )
con = domain.boundary['bottom'].project( 0, onto=basis, geometry=geom, ischeme='gauss2' )

# solve system
lhs = matrix.solve( rhs, constrain=con )
sol = basis.dot( lhs )

# plot solution
points, colors = domain.elem_eval( [geom, sol], ischeme='bezier9', separate=True )
with plot.PyPlot( 'solution' ) as plt:
  plt.mesh( points, colors )
  plt.colorbar()

运行此代码会生成以下解决方案图:

在此处输入图像描述

然后去哪儿?

可以在此处找到更详细的入门文档。此外, Nutils 中包含的示例为各种问题提供了功能齐全的示例代码。