Numpy 易于使用的特征函数自适应网格细化-Python

Numpy 易于使用的特征函数自适应网格细化-Python,numpy,math,graph-theory,mesh,finite-element-analysis,Numpy,Math,Graph Theory,Mesh,Finite Element Analysis,我有一个从R^n到{0,1}的(不连续)函数f,由用户提供。例如,类似于“质量圆圈”的内容: def charfunc(x): #假设x是一个numpy数组 返回x[0]**2+x[1]**2

我有一个从R^n到{0,1}的(不连续)函数f,由用户提供。例如,类似于“质量圆圈”的内容:

def charfunc(x):
#假设x是一个numpy数组
返回x[0]**2+x[1]**2<1
我希望通过在常规网格上采样函数值来找到f==1所在区域的边界,并在值发生变化的区域中(迭代地)细化该网格。我认为这应该是一个不太奇怪的问题,我打赌它已经在python世界中得到了解决。然而,我只发现了复杂的PDE/FEM包和。前者的开销似乎太大。看起来非常有希望,但会产生奇怪的结果(至少使用示例中的默认参数):

有些单元格已细化,但不靠近边界,有些单元格已细化,但未细化。此示例的代码位于中


问题:如何使用NDTAMR或其他Python软件包获得一个网格,该网格在边界附近的任何地方都可以细化,但在其他任何地方都不能细化?

这应该很容易由您自己完成

  • 对于四边形的所有角,检查它们是在圆内还是在圆外
  • 优化那些内部和外部都有节点的四边形,并计算新点的状态
我可以补充一点,这种边界发现在数值分析中并不典型。通常,您的域由域内为负、域外为正的连续函数指定,即

def(x):
返回x[0]**2+x[1]**2-1
随着坡度

def梯度(x):
返回2*x

(梯度也可以自动计算。)有了这些信息,从任何一点开始,你都可以迭代到边界。

这应该很容易做到

  • 对于四边形的所有角,检查它们是在圆内还是在圆外
  • 优化那些内部和外部都有节点的四边形,并计算新点的状态
我可以补充一点,这种边界发现在数值分析中并不典型。通常,您的域由域内为负、域外为正的连续函数指定,即

def(x):
返回x[0]**2+x[1]**2-1
随着坡度

def梯度(x):
返回2*x

(梯度也可以自动计算。)有了这个信息,从任何一点开始,你都可以向边界迭代。

我最终自己实现了它。为了简单起见,代码存在于其他一些包中,我已经维护过了,但是应该可以独立使用,几乎不用做什么工作:

一些单元测试可以替代尚未丢失的文档


我终于自己实现了它。为了简单起见,代码存在于其他一些包中,我已经维护过了,但是应该可以独立使用,几乎不用做什么工作:

一些单元测试可以替代尚未丢失的文档


这个一般公式确实非常简单。然而,实现n维的细节和一般函数似乎并不重要。谢谢你的提示,我的问题并不典型。现在的问题明确提到了给定函数的不连续性。使用梯度不是一种选择。这种通用公式确实非常简单。然而,实现n维的细节和一般函数似乎并不重要。谢谢你的提示,我的问题并不典型。现在的问题明确提到了给定函数的不连续性。使用渐变不是一个选项。