问题标签 [fenics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
85 浏览

python - 如何在 Fenics 中提取 3D 网格的法线向量?

我目前UnitCubeMesh(2,2,2)在 Fenics 中有一个简单的,我希望为网格表面上的每个元素提取法向量的坐标(不为网格本身的主体内的任何元素提取法向量)。然后我输出网格上每个元素的坐标 (x,y,z),以及该元素的法线向量的相应坐标 (nx,ny,nz)。FacetNormal()显然,由于在 Fenics 中如何定义局部和全局法线,因此简单地使用 存在问题?

下面是我为提取边界上每个元素的空间坐标而编写的代码,如何将其扩展为法向量分量?

0 投票
0 回答
36 浏览

python - 使用 Dolfin 创建一维网格

我正在修改代码来求解 Poisson-Nernst-Planck 方程,并尝试在 Python 中使用 Dolfin 创建一维区间网格。网格对应于不同的扩散层长度。在原始代码中,将扩散层长度转换为网格尺寸似乎对应于 v = 100x + 990,其中 x 是所需的扩散层长度(微米),v 是间隔数。下面是我的代码:

但是,当我根据代码附带的网格测试生成的网格时,网格是非常不同的。其中一个代码输入如下所示:

我不确定网格间隔是否可变,或者此输入可能与我生成网格的方式相关。我对 Dolfin/Fenics 真的很陌生,提前感谢任何帮助/提示!

0 投票
0 回答
62 浏览

python - (FEniCS) 运行时错误 Uable to cast Python instance to C++ type (complied in debug mode for details)

以下是我用来在两个不同网格之间进行插值的 python FEniCS(我使用 dolphin 2019.1.0)脚本的简短 MWE。这个想法是加速插值,特别是如果函数空间的大小很大,大约为 10^6。但我无法成功运行它。

以下 python 代码转换是使用 void 函数 (extract_dof_component_map_1) 的参数在 c++ 中对 <std::unordered map> 的 dict。我要求它使用标准的 Pybind 11 模块“通过引用传递参数 (dict)”。

它显示此语句的语法错误,因为 PYBIND11 模块中的定义不正确。成功运行代码应打印“hi”。

测试.py

.cpp 文件

错误:

注意:我已经验证了 FunctionSpace 在 PYBIND11 中的定义是正确的。只有通过引用转换 dict 的语法是不正确的。

感谢您为解决此语法错误提供的任何帮助。提前致谢。

0 投票
0 回答
26 浏览

python - 无法理解的输出

为了澄清我的模拟输出的性质,我将不胜感激。该模拟考虑了在 3D 中包含在圆柱形通道内的立方体周围的流动。数学模型是 Navier-Stokes 方程和连续性方程 (div U = 0)。我已经开发了二维数值模拟的代码并且输出是正确的,这让我认为 2d 和 3d 问题相同的变分问题(如果我错了,请纠正我)在 FEniCS 中很好地提出. 当我尝试在 3D 几何体上运行模拟时,我在压力和速度场(u,p)方面都得到了以下(输出)。

我想通过几个步骤来解释我是如何管理几何的:

  1. 在 FreeCAD 中构建它

  2. 在 GMSH 中导入

  3. 通过命令 add-->surfaces 定义边界并用从 1 到 4 的数字标记它们
    3.1) 对应于标签“1”的壁表示与圆柱体相关联的表面
    3.2) 对应于标签“2”的障碍物表示内部立方体表面
    3.3) 对应于标签“3”(“4”)的入口(出口)表示与气缸相关的入口和出口表面

  4. 用 add-->volumes 定义卷并用 5 标记它

  5. 将 .msh 文件转换为 .xml 文件,生成两个附加文件:physical_region.xml 和 facet_region.xml。这两个文件必须自动包含有关边界的信息。然后实现以下行,以便在计算模拟之前在 python3 中详细说明几何:

    % 读取网格
    mesh = Mesh('file.xml')
    cd=MeshFunction('size_t', mesh, 'prova_physical_region.xml')
    fd=MeshFunction('size_t', mesh, 'prova_facet_region.xml')
    bcu_inflow = DirichletBC(V , 常数((2, 2, 0)), '3')
    bcu_wall = DirichletBC(V, 常数((0, 0, 0)), '1')
    bcu_cube = DirichletBC(V, Constant((0, 0, 0)), '2')
    bcp_outflow = DirichletBC(Q, Constant(0), '4')

模拟没有给出任何错误并计算(输出)中显示的结果,这在我们的物理环境(流体动力学)中没有意义,那么我想知道问题出在哪里。我会强调网格在 FEniCS 中充电良好。

0 投票
0 回答
23 浏览

gcc - 我在 spack 安装阶段安装 openmpi 包时遇到问题,我该如何继续?

我从以下命令开始对 openmpi 的配置和安装阶段有疑问: spack install hdf5 for the installation of spack.

继续得到以下输出:

(我正在使用带有 m1 处理器的 mac)

从 spack 编译器我得到这个输出:

我的目标实际上是安装 FEniCS (DOLFINx),从我在网上找到的内容中,我看到要做到这一点,你首先需要安装 spack,所以我尝试了。在我安装的各种软件包中,我发现了 openmpi 中指出的问题。如果我需要下载其他内容或通过其他程序解决问题,我不知道如何继续。