YcZhang
YcZhang
计算 `number_of_local_dofs` 时会用到, 我没有区分 tri mesh, quad mesh, polygon mesh, 写成了下面 ```python def number_of_local_dofs(self, p=None): p = self.p if p is None else p mesh = self.mesh NCE = mesh.number_of_edges_of_cells()...
tri mesh, quad mesh 和 polygon mesh 的数据结构能否统一呢, 就是 fealpy 能否不单独区分 tri mesh 和 quad mesh, 都是统一的按照 polygon mesh 来对待?
是的, 魏老师, 并不影响计算, 我改一下自己的程序就好了, 这个空间是 hybrid high-order 方法的空间, 类似于 WG 的空间, 不过重构算子时差别比较大
>这样可以以数值离散中利用数组的广播功能, 简化数值离散程序对网格进行区分编程的繁琐. 是的, 目前程序需要判断一下网格类型. >正常情况下, 三角形, 四边形是特殊的多边形, 所以我感觉重构算子时不应该差别很大的, 应该是一样的, 是一样的
>单元上的积分, 建议使用 cell_integral. `FEMeshIntegralAlg()` 下的 `cell_integral` 在 `ps = mesh.bc_to_point(bcs, 'cell')` 调用 `f = f(ps)`, 仍然需要 `index=np.arange(NC)` 参数, 即 `f = f(ps, index)`, 原因在于 `ScaledMonomialSpace2d()` 的 `value()` 函数 ```python @cartesian...
好的, 魏老师, 还有一个问题, `ScaledMonomialSpace2d()` 中, 是否应将网格 `'quad'` 类型也加入 `if mtype in {'polygon', 'halfedge', 'halfedge2d'}:` 中 ? 即 `if mtype in {'quad', 'polygon', 'halfedge', 'halfedge2d'}:` ?
嗯, 但是 `ScaledMonomialSpace2d()` 中是不是并没有对应 `'quad' mesh` 的 `integralalg` 呢?
用速度校正格式求 N-S 方程, 中间过程有一步需要得到 `_\Gamma`, 其中 `fun^n` 是上一时间层的值 (不用管), 主要 `q` 是压力空间中的 test-function, `\Gamma` 可以简单当做 Dirichlet 边界.
> 所以你的 \nabla q 是单元值在 \Gamma 上的限制,对吗? 你会给出边上的积分点,然后计算 \nabla q 在些积分点上的值? 是的, `face_basis()` 和 `basis()` 两个代码是一样的, 所以我最开始的直观理解是 `grad_basis()` 也可以根据 `bc.shape` 来计算边(面) 上的梯度值. > @yoczhang 你看一下 这个代码 > [edge_grad_basis ](https://github.com/weihuayi/fealpy/blob/cd1be360c6cafa7aa8f8c025882841712869fa1e/fealpy/functionspace/LagrangeFiniteElementSpace.py#L312) 可以试下...
还有点困惑的是, fealpy 的 FEM 中 Lagrange 基函数的实现, 比如 2d 中我限制在某个边上求 `basis(bc)`, 此时 `bc` 为 1d 的 Gauss-Legendre-Quadrature, `basis()` 也退化为 1d 的情况, 但是此时所返回的 `basis(bc)` 就是 2d 中在此边上的限制吗?