美文网首页FEniCS中文翻译
标记网格的子区域

标记网格的子区域

作者: 马鹏飞_47c5 | 来源:发表于2019-03-28 10:42 被阅读0次

标记网格的子区域

透过现象看本质对我们理解程序有很大帮助。在FEniCS里,我们能通过调用函数set_log_level()够将控制程序运行日志的打印。函数set_log_level()可以传入一个数字用于指定输出日志的等级(这是一个可选参数,默认是20),高于这个等级的日志会被打印出来。因此,命令set_log_level(1)能让系统输出尽可能多的日志信息。(其实我也不知道这段话为什么出现在这里。原文就是这么写的)

正文

在标记子区域之前,我们必须先给定边界条件。给每个边界条件都定义一个类,总共三个。首先定义整个边界条件为非滑移边界条件,然后再将一部分边界定义为流入,一部分为流出。

# 整个区域
class Noslip(SubDomain):
    def inside(self, x, on_boundary):
        return on_boundary

# 右端流入
class Inflow(SubDomain):
    def inside(self, x, on_boundary):
        return x[0] > 1.0 - DOLFIN_EPS and on_boundary

# 左端流出
class Outflow(SubDomain):
    def inside(self, x, on_boundary):
        return x[0] < DOLFIN_EPS and on_boundary

然后导入网格:

mesh = Mesh("../dolfin_fine.xml.gz")

我们实例化MeshFunction,用于存储子区域的编号。创建MeshFunction时,第一项参数可以填intsize_tdoublebool,它的意思就是你可以用整数编号,浮点数标号,布尔类型标号等等。第二项参数指定网格。第三项参数指定维数,显而易见,区域边界的维数是比区域少一维的。

sub_domains = MeshFunction("size_t", mesh, mesh.topology().dim() - 1)

现在我们可以给每个区域标号了。我们将会创建四个子区域,每一个边界都给一个边界条件,第四个是内部(???)。首先我们把所有面都标记为3。

sub_domains.set_all(3)

对流入流出边界做同样的事情,流入为1,流出为2。

inflow = Inflow()
inflow.mark(sub_domains, 1)
outflow = Outflow()
outflow.mark(sub_domains, 2)

最后为了为了让这些子区域能够在其他程序中被调用,将他们存为xml或者vtk文件。

# Save sub domains to file
file = File("subdomains.xml")
file << sub_domains


# Save sub domains to VTK files
file = File("subdomains.pvd")
file << sub_domains

终于翻译完了!!!

附上代码

from dolfin import *
set_log_level(1)

# Sub domain for no-slip (mark whole boundary, inflow and outflow will overwrite)
class Noslip(SubDomain):
    def inside(self, x, on_boundary):
        return on_boundary

# Sub domain for inflow (right)
class Inflow(SubDomain):
    def inside(self, x, on_boundary):
        return x[0] > 1.0 - DOLFIN_EPS and on_boundary

# Sub domain for outflow (left)
class Outflow(SubDomain):
    def inside(self, x, on_boundary):
        return x[0] < DOLFIN_EPS and on_boundary

mesh = Mesh("dolfin_fine.xml.gz")

sub_domains = MeshFunction("size_t", mesh, mesh.topology().dim() - 1)
sub_domains.set_all(3)

noslip = Noslip()
inflow = Inflow()
outflow = Outflow()
noslip.mark(sub_domains,  0)
inflow.mark(sub_domains,  1)
outflow.mark(sub_domains, 2)

# Save sub domains to file
file = File("subdomains.xml")
file << sub_domains

# Save sub domains to VTK files
file = File("subdomains.pvd")
file << sub_domains

2019-3-28

相关文章

  • 标记网格的子区域

    标记网格的子区域 透过现象看本质对我们理解程序有很大帮助。在FEniCS里,我们能通过调用函数set_log_le...

  • HTML5新增

    新增结构元素 header:标记头部区域的内容 footer:标记脚步区域的内容 section:Web页面中的一...

  • Navigation Mesh与Line-of-Sight Te

    上图是一个由任意凸多边形构成的导航网格,白线包围区域代表着不可进入的障碍区域,红线包围区域则可以进入或穿越。网格中...

  • 2021-04-09

    一周总结: 1、扫楼宝地图模块开发;2、地图定位、打点标记、设置标签、设置规划路线;3、对接茶店子字库-网格管理模...

  • 网格灯Mesh|VRay Light

    网格灯是一种VRayLight,它从网格对象中获取其形状和大小。 概观 网格灯是一种区域光(VRayLight),...

  • CSS网格布局学习(4)

    CSS网格布局概念:基线 与 网格区域在3*3的网格中,在列的方向上和行的方向上分别有4条基线,在网格布局中,可以...

  • grid

    网格 show:truecontainLabel:false //grid 区域是否包含坐标轴的[刻度标签]

  • 布局

    CSS网格布局引入了二维网格布局系统,可用于布局页面主要的区域布局或小型组件。本文介绍了CSS网格布局 与 CSS...

  • 农商银行推行网格化营销系统的意义

    网格化管理最早始于北京市东城区的城市管理实践。网格管理的理念是把整个区域划分成若干单人可巡视的“网格”,并固定一名...

  • 农商银行推行网格化营销系统的意义

    网格化管理最早始于北京市东城区的城市管理实践。网格管理的理念是把整个区域划分成若干单人可巡视的“网格”,并固定一名...

网友评论

    本文标题:标记网格的子区域

    本文链接:https://www.haomeiwen.com/subject/nigfbqtx.html