weihuayi / fealpy

Finite Element Analysis Library in Python
Other
279 stars 123 forks source link

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

Open jibingquanm opened 5 months ago

jibingquanm commented 5 months ago

魏老师,您好! 我是九所的一名科研人员纪兵权。在学习您在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 commented 3 months ago

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

weihuayi commented 3 months ago

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

jibingquanm commented 1 month ago

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

jibingquanm commented 1 month ago

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

jibingquanm commented 1 month ago

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

jibingquanm commented 1 month ago

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

weihuayi commented 1 month ago

要用到 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 commented 1 month ago

魏老师,谢谢您的回复呀!我这里根据您的回复去动手实现。-------- 原始邮件 --------发件人: Huayi Wei @.>日期: 2024年7月21日周日 09:33收件人: weihuayi/fealpy @.>抄送: jibingquanm @.>, Mention @.>主 题: Re: [weihuayi/fealpy] 请教魏老师如何计算有限元函数的给定二维坐标的函数值 (Issue #624) 要用到 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 等不同张量计算后端的计算的切换,但上层接口基本保持不变。

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: @.***>