封闭空间

本文探讨了《Structure and Interpretation of Computer Programs》中提及的列表封闭性概念,即使用cons操作可以构建新的pair,这是LISP语言的核心特性之一。此外,还讨论了这种特性如何应用于其他领域,如JUnit4和Hamcrest Matcher的使用,并提到了Monads概念。
《Structure and Interpretation of Computer Programs》中提到,“The ability to create pairs whose elements are pairs is the essence of list structure's importance as a representational tool. We refer to this ability as the closure property of cons.”这话表面上是说 cons 作为 LISP 的核心,能够把自己产生的 pair 作为 cons 的参数进而去产生新的组合 pair,是列表数据结构在表示上非常本质的东西。“closure property”我倾向于翻译成封闭性。因为在代数中,给定 f(x) = y,如果任意 x 属于 Z,且 y 也属于 Z,那么 Z 就对 f 是封闭的。

当然我们可以很容易地想到高中数学里面的列表。这跟 LISP 中的列表是完全对应的。正是这种特性造就了 LISP 语言的强大。但是这种模式对于即使不熟悉数学的程序员来说也应该似曾相识。比如 JUnit4 和 JMock 里面用的 Hamcrest Matcher。你可以任意组合各种 matcher 达到想要的效果。比如 assertThat(result, is(not(greaterThan(10)))。它使得 JUnit 摆脱了不停地往 Assert 类里面增加方法的局面。也是为什么 JUnit4 要绑定 Hamcrest Matcher 发布的原因。如今你很难看到一个优秀的测试框架里面不用 Hamcrest Matcher 的。Matcher 的模式就是:makeMatcher(someMather) === AnotherMatcher。也就是说,从逻辑上,makeMatcher 和 Matcher 这个抽象集合组成了一个代数空间。

找到这样的空间,我们就可能找到了非常强大而优雅的工具。比如 SICP 里面提到的 painter。我们可以生成一个给定 painter 的水平镜像 painter、垂直镜像 painter、扭曲 painter,等等。这点对于我们做面向对象设计的时候也极有启发价值。

=== Update ===

Monads 跟封闭空间也很相似。参考:[url=http://www.codecommit.com/blog/ruby/monads-are-not-metaphors]Monads Are Not Metaphors[/url]。
### Fluent 封闭空间的边界条件设置方法及参数配置 在 Fluent 中,封闭空间的边界条件设置是仿真准确性的重要环节。对于封闭空间,需要特别注意流体流入、流出以及内部流动特性的影响。以下内容详细描述了封闭空间边界条件的设置方法和相关参数配置。 #### 1. 封闭空间的边界类型选择 封闭空间通常涉及以下几种主要边界类型: - **入口(Inlet)**:定义流体进入封闭空间的方式。可以指定流速、流量或质量流量等参数[^1]。 - **出口(Outlet)**:定义流体离开封闭空间的方式。通常设置为压力出口(Pressure Outlet),并提供出口处的压力值[^1]。 - **壁面(Wall)**:用于模拟封闭空间的固体边界。需要设置无滑移条件、热传递特性等。 - **对称面(Symmetry)**:如果封闭空间具有对称性,可以使用对称面减少计算量。 - **周期性边界(Periodic Boundary)**:适用于具有周期性特征的封闭空间,例如旋转机械中的流场[^1]。 #### 2. 参数配置的具体步骤 ##### 进入边界条件设置面板 在 Fluent 中,通过菜单路径 `Define > Boundary Conditions` 打开边界条件设置面板。 ##### 设置入口条件 - **速度入口(Velocity Inlet)**:指定入口流速的大小和方向。可以设置为均匀分布或非均匀分布。 - **压力入口(Pressure Inlet)**:指定入口压力值。适用于已知入口压力的情况。 - **温度**:根据实际需求设定入口温度。 - **湍流参数**:如果启用湍流模型,需要指定湍流强度和涡粘比等参数[^1]。 ##### 设置出口条件 - **压力出口(Pressure Outlet)**:指定出口压力值。通常设置为大气压或其他已知压力。 - **回流条件**:如果存在回流现象,需要指定回流速度和温度等参数[^1]。 ##### 设置壁面条件 - **无滑移条件**:默认情况下,壁面采用无滑移条件,即流体在壁面上的速度为零。 - **热边界条件**:可以选择绝热(Adiabatic)、恒定温度(Isothermal)或恒定热流(Heat Flux)等方式。 - **粗糙度**:如果壁面粗糙度对流动有显著影响,需要指定相应的粗糙度参数[^1]。 ##### 设置对称面 - 对称面不需要额外的参数设置。只需确保几何模型的对称性正确,并在 Fluent 中将相应边界指定为对称面。 ##### 设置周期性边界 - 周期性边界需要指定两个边界之间的相位差和速度匹配条件。适用于旋转机械或其他周期性流动场景[^1]。 #### 3. 验证边界条件 在仿真运行前,务必检查所有边界条件是否符合实际物理场景。可以通过 Fluent 的预处理工具查看边界条件的设置情况,并进行必要的调整。 ```python # 示例代码:Fluent 脚本设置入口条件 /define/boundary-conditions/velocity-inlet inlet-1 ( (velocity-magnitude 5.0) # 入口流速设为 5 m/s (temperature 300.0) # 入口温度设为 300 K ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值