问题标签 [fluid-dynamics]
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.
simulation - 格子玻尔兹曼模拟中消失的内部边界条件
我正在使用 Electron 和 TypeScript 对一些流体模拟代码进行原型设计,使用 Lattice Boltzmann 算法,最终将进入游戏。到目前为止,我一直在使用静态边界条件(模拟计算仅发生在网格内部,并且边界单元的值保持固定),在该状态下一切似乎都运行良好。特别是,我可以通过手动设置每个之间的单元格值来施加内部边界条件(例如,强制一定密度的流体总是在每一帧上离开特定晶格位置,以模拟软管/火箭喷嘴/其他)模拟步骤。
但是,如果我改用周期性边界条件(即环绕式、环形拓扑的小行星世界),整个模拟就会变成静态的。我只是随时随地获得恒定的流体密度,就像我所有的边界条件都被删除了,无论在模拟循环中的哪个位置(流式传输之前或碰撞之前)我选择断言它们。我不确定周期性边界条件最终是否会与游戏相关,但这次失败让我认为模拟中的某个地方一定存在一些微妙的错误。
完整的代码可在https://github.com/gliese1337/balloon-prototype/tree/deopt获得,但我期望相关部分如下:
晶格数据存储在两个平面数组中,collided
它们保存碰撞步骤后的最终状态并用作流步骤的输入streamed
,而 保存流步骤之后的最终状态并用作下一个碰撞步骤的输入。D2Q9 晶格的 9 个向量分量存储在连续的块中,然后分组为行。请注意,我已经在使用 mod 操作从晶格坐标计算数组索引;只要模拟计算仅在晶格内部范围内,这完全无关紧要,但是一旦for (let y=1; y<ydim-1; y++)
andfor (let x=1; x<xdim-1; x++)
循环将其边界更改为for (let y=0; y<ydim; y++)
and ,它应该使周期性边界准备就绪for (let x=0; x<xdim; x++)
, 分别。事实上,我遇到的问题是特定的 6 个字符的变化。
该setEquilibrium
方法用于施加边界条件。在驱动程序代码中,它当前被这样调用,每帧一次:
对于静态边界条件,每帧调用一次恰好是多余的,因为它只会改变边界晶格位置。然而,将硬编码的 x 值移动到晶格的内部(实际上每帧重新设置一次边界条件是必要的)完全符合您的预期——它使流体在特定位置出现或消失。然而,切换到周期性边界条件会导致该代码不再具有任何可见的效果。
所以...有人知道我可能做错了什么吗?
python - 如何修复我的 python 代码来绘制图形?
我的代码以代码 0 退出,因此我的代码中没有错误,但它仍在运行而没有绘制我想要的圆柱体上的流,有人可以帮我解决这个问题吗?
scheme - 在 Scheme (Fluent) 中用变量或循环替换数字不起作用
我正在使用 ANSYS Fluent 程序进行 CFD 模拟。这个程序允许使用所谓的日志文件对模拟设置进行部分自动化,我刚刚知道这个日志文件是用 Scheme 编写的。不幸的是,我什至从未听说过 Scheme,我只知道它是一种 Lisp 方言(我也一无所知)。
我试图通过使用循环自动为我的模拟设置一堆参数来自动化一些无聊的任务。如果我从 Fluent 的命令界面运行此命令:
它执行预期的操作(它从列表中选择第 4 项)。但是,如果我将其放入循环中:
#f
没有任何反应,程序在命令窗口中打印 a 。然后,如果我这样做:
什么都没有发生。
为什么用 4
变量替换数字不起作用?为什么循环返回一个#f
?
scheme - 在 Scheme (Fluent) 中运行 (do ...) 内的代码与在循环外执行的代码不同
我上一个问题的续集:
我正在使用 ANSYS Fluent 程序进行 CFD 模拟。这个程序允许使用所谓的日志文件对模拟设置进行部分自动化,我刚刚知道这个日志文件是用 Scheme 编写的。不幸的是,我什至从未听说过 Scheme,我只知道它是一种 Lisp 方言(我也一无所知)。
我试图通过使用循环自动为我的模拟设置一堆参数来自动化一些无聊的任务。如果我从 Fluent 的命令界面(模注释)运行此命令:
它按预期进行:它从下拉列表中选择一个项目,为该项目打开一个对话窗口,将参数的值从 0 更改为 1,然后关闭该窗口。如果我将上述内容包装在一个循环中以循环浏览列表中的项目,并替换'( 4)
by (list z)
:
程序从列表中选择项目并打开对话窗口(所以我想前三cx-gui-do
行没问题),但它没有将“Volume Fraction”的值设置为 1,也没有关闭窗口。此外,在循环结束时,#f
命令窗口会打印出 an,我想这是 Scheme 告诉我出了什么问题,但我不知道是什么。
为什么当我将代码放在循环中时,它的行为会发生变化,即使使用循环变量的部分(显然)正在工作?最后#f
打印的是什么?
python - 我可能在流函数中遇到问题
我下面的代码应该在身体周围绘制流函数,我决定在整个身体上放置漩涡以缩进它,除了流函数的均匀流动。对于一个简单的流函数,我能够得到一个绘图但是对于这个流功能,我面临很多我无法解决的问题,有人可以帮忙吗?
python - python给了我太多的数组索引
在我的函数圆柱流函数中,我得到了
(-V_inf*y[i,j]-(C_s/(2*pi))*log(sqrt((x[i,j]-S_1[0])**2+(y[i,j]-S_1[1])**2))
IndexError: too many indices for array 的输出
有人可以帮助解决这个问题吗?
python - 我需要从 python 中 Colebrook 方程的近似值中输入摩擦系数
我正在尝试编写 Colebrook 方程的近似值以获得摩擦系数。我在 Matlab 中实现了这一点,但是当涉及到 python 时,我的代码不起作用。
我也试过这个
但这也行不通。
python - 使用 FiPy 围绕球体流动的斯托克斯边界条件
我尝试使用 FiPy 解决球体周围的斯托克斯流。为此,我选择了一个圆柱形二维网格(因为我的问题是轴对称的)。z 轴通过球心,网格大小为 Lr x Lz。我使用的边界条件如下图所示:
我使用适用于 Python 的 FiPy 库解决了上述问题,请参见下面的代码。
代码在 140 次迭代后收敛。这段代码中有很多行(对此感到抱歉),但其中很大一部分只是为了纠正 Fipy 中柱坐标的grad方法。
与我讨论过的大多数教授都建议我不要将 v=v0 设置为 z=Lz(不知道为什么)。相反,他们建议我在出口处使用 Neumann 边界条件(即 dvr/dz = 0 和 dvz/dz = 0)。我相信这是FiPy 中默认的边界条件,所以我所做的只是在我的代码中注释几行。
问题是我的代码在评论这些行后不再收敛。rVelocity 方程 ( rres ) 的残差变为 0,压力校正方程 ( pres ) 的残差也变为 0。但是while循环中的其余标准(zVelocity 方程的残余误差、压力校正因子和速度散度)不会变为 0。
所以我的问题是:为什么将退出条件从 ( vr=0 , vz=v0 ) 更改为( dvr/dz =0 , dvz/dz=0 ) 导致收敛问题?
matlab - 如何在 FEATOOL Multiphysics 中导入非牛顿模型?
我正在使用 FEATool Multiphysics。我有一个名为 ex_nonnewtonian1.m 的 MATLAB 函数,它由 FEATool 本身支持并包含幂律非牛顿模型的定义。这个文件没有添加到FEATOOL,所以我需要手动添加。
如何将函数添加ex_nonnewtonian1
到 FEATool 窗口中的方程框?
这是代码ex_nonnewtonian1
: