OpenFOAM blockMesh 圆柱网格及其 paraFoam 绘制面法线

如何解决OpenFOAM blockMesh 圆柱网格及其 paraFoam 绘制面法线

OpenFOAM 部分:

我通过 edging blockMesh coding method 在 OpenFOAM 中划分了一个空心圆柱体形状。在该模型中,流动将从外筒壁流向内筒壁;右手法则用于网格点如下:

enter image description here

我试图通过 OpenFOAM 编译的 paraFoam 绘制面部法线,但我不能。可以通过 Glyph 法线绘制边界网格面(位于顶部、底部、内部和外部圆柱壁上),但不能绘制内部网格面。

Q OpenFOAM:是否有任何函数代码方法可以在 paraFoam 中绘制它们?

网格文件已经导出到python里面绘制,如右图。很明显,通过这种方式,起点-终点重叠平面上的网格面与其他旋转面法线相比方向相反。

Q OpenFOAM:这些面法线方向会导致错误的结果吗?或结果仅由右手规则控制?如果需要,是否有任何代码方法可以更改这些方向?

注意:我已经通过 gmsh3D 将这个网格文件导入到 python FiPy 中,并使用它的 facenormals 和 cellCenters 通过 matplotlib 绘制面部法线。

FiPy 部分:

由于我需要使用逆时针 facenormals 方向,我已通过以下代码将顺时针 Start-End 网格面法线方向更改为逆时针方向:

for i in range(self.mesh.numberOfCells):
    for f in self.mesh.cellFaceIDs.data.T[i]:
        if self.mesh.faceCenters().T[f][0] > 0 > self.mesh.facenormals.T[f][1] and self.mesh.faceCenters().T[f][1] == 0:
            self.mesh.facenormals.T[f] = np.multiply(np.array([-1,-1,1]),self.mesh.facenormals.T[f])

Q FiPy:这些面法线方向的变化对 FiPy 求解结果有影响吗? 正如我从最近的 explanation (由于没有足够的声誉法定人数而无法问这个问题) 中的理解,FiPy 认为共享面的细胞面正常方向向外到其对应的相邻单元格和 facenormal 方向(使用 FiPy mesh.Facenormals 在图片显示)本身对解决方案没有影响;这意味着求解器可以根据情况在相反的方向上考虑它。这样对吗??是否有任何 FiPy 网格模块来创建这种 O'grid 圆柱型网格系统,其中可以使用节点的 x、y 和 z 坐标?我曾尝试使用“CylindricalGrid2D”进行径向网格划分,但它仅提供节点的 r 和 z 坐标。

解决方法

关于使用 FiPy 重置 faceNormals 的值。根据网格的类型,这可能是不可能的。例如,使用 Grid2D 样式的网格会导致 AttributeError: can't set attribute,因为法线是在需要时计算的,而不是存储在网格对象中。如果可能的话,它很可能会破坏 FiPy。例如,当 faceNormals 被随机翻转时,下面给出了非常不同的结果。

from fipy import CellVariable,Grid3D,DiffusionTerm
from fipy.meshes.mesh import Mesh
import numpy as np

grid = Grid3D(nx=3,ny=3,nz=1)

mesh = Mesh(grid.vertexCoords,grid.faceVertexIDs,grid.cellFaceIDs)

var = CellVariable(mesh=mesh)

var.constrain(1,where=mesh.facesLeft)
var.constrain(0,where=mesh.facesRight)

DiffusionTerm().solve(var)
print(var)

var[:] = 0.0

flip = 2 * np.random.randint(2,size=mesh.faceNormals.shape[1]) - 1
mesh.faceNormals[:] = mesh.faceNormals * flip[None]

DiffusionTerm().solve(var)
print(var)
,

FiPy 将共享面的 faceNormal 方向考虑向外到相邻单元,

不,如您发布的 link 所述,FiPy 认为 faceNormal 方向是进入面部边界的两个单元格中的第二个单元格。相邻小区是相对于小区的。一张脸有两个边界单元;如果面在外部,则两个边界单元相同。

和 faceNormal 方向(使用 FiPy mesh.FaceNormals 在图片中显示)本身对解决方案没有影响;这意味着求解器可以根据情况在相反的方向上考虑它。是吗??

没有。如@wd15 发布的答案所示,FiPy 在内部使用 faceNormal 并期望它遵守我们定义的约定,即它始终指向第二个单元格。

没有什么可以阻止您使用 FaceVariable 初始化 faceNormals,然后在您认为合适的情况下覆盖某些值:

my_normals = fp.FaceVariable(mesh=mesh,value=mesh.faceNormals,rank=1)
my_normals.setValue(my_desired_orientation,where=my_backward_faces)

是否有 FiPy 网格模块来创建这种 O'grid 圆柱型网格系统,其中节点的 x、y 和 z 坐标可用?

没有

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?