Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请教魏老师如何计算有限元函数的给定二维坐标的函数值 #624

Open
jibingquanm opened this issue Apr 3, 2024 · 8 comments

Comments

@jibingquanm
Copy link

魏老师,您好!
我是九所的一名科研人员纪兵权。在学习您在b站上的课程后,目前我已经初步实现了自己定义抛物方程,然后基于fealpy进行求解的一个操作。在您的课程中,通过
bcs, ws = space.integrator.get_quadrature_points_and_weights()
获得了积分节点在每个范元上的重心坐标,从而可以计算基函数在积分节点出的函数值,最后求解出来有限元函数u_h。魏老师,我有以下几个问题想向您请教:
(1)由于利用space.value(uh, bc)计算有限元函数的值时,需要输入的是重心坐标,如果给定一组笛卡尔坐标系中的二维坐标点node ,应该怎么利用获得的有限元函数uh计算其在node处的值呢?
(2)基于有限元网格剖分进行可视化时,您在课堂上给出的主要是有限元函数uh的3d图像,我应该采用什么命令画出有限元函数在给定的二维笛卡尔坐标node上的俯视图呢?
谢谢魏老师!

@weihuayi
Copy link
Owner

weihuayi commented May 14, 2024

@jibingquanm 第一个问题,在 TriangleMesh 中,有一个 point_to_bc(point) 可以用,该方法可以找到 point 所在的单元,并计算出它对应的重心坐标。
index, bc = mesh.point_to_bc(point)

@weihuayi
Copy link
Owner

@jibingquanm 你用的有限元是线性元,还是高次的元。

@jibingquanm
Copy link
Author

@jibingquanm 第一个问题,在 TriangleMesh 中,有一个 point_to_bc(point) 可以用,该方法可以找到 point 所在的单元,并计算出它对应的重心坐标。 index, bc = mesh.point_to_bc(point)

@jibingquanm
Copy link
Author

@jibingquanm 你用的有限元是线性元,还是高次的元。

@jibingquanm
Copy link
Author

魏老师您好,谢谢您,前阵子有些事情耽误未能以及与您回复。根据您的回复我已经成功实现了计算给定网格点函数值的操作。魏老师,在数据后期的处理时,线性元和高次元都会用到。例如给定节点node和计算所得的有限元解uh, 应该采用什么命令画出uh的俯视图呢?是不是线性元和高次元的命令不一样呢?

@jibingquanm
Copy link
Author

@jibingquanm 你用的有限元是线性元,还是高次的元。
魏老师您好,谢谢您,前阵子有些事情耽误未能以及与您回复。根据您的回复我已经成功实现了计算给定网格点函数值的操作。魏老师,在数据后期的处理时,线性元和高次元都会用到。例如给定节点node和计算所得的有限元解uh, 应该采用什么命令画出uh的俯视图呢?是不是线性元和高次元的命令不一样呢?

@weihuayi
Copy link
Owner

要用到 LagrangeTriangleMesh(https://github.com/weihuayi/fealpy/blob/master/fealpy/mesh/lagrange_triangle_mesh.py)。

from  fealpy.mesh import TriangleMesh, LagrangeTriangleMesh
mesh = TriangleMesh.from_box(nx=2, ny=2)
node = mesh.entity('node')
cell = mesh.entity('cell')

lmesh = LagrangeTriangleMesh(node, cell, p=3) # 3 次 Lagrange 网格
lmesh.nodedata['uh'] = uh # 把有限元解放进去
lmesh.to_vtk(fname='test.vtu')

然后用 Paraview 来显示。

注意,这个暑假我们在加紧重构 FEALPy 的底层,以实现 NumPy, Pytorch 等不同张量计算后端的计算的切换,但上层接口基本保持不变。

@jibingquanm
Copy link
Author

jibingquanm commented Jul 21, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants