这个问题的背景是一些计算领域,例如计算流体动力学(CFD)。我们经常在一些关键区域需要更精细的网格/网格,而背景网格可以更粗糙。例如,用于跟踪气象学中的冲击波和嵌套域的自适应细化网格。
使用笛卡尔拓扑,域分解如下图所示。在这种情况下,使用4*2=8个处理器。单个数字表示处理器的等级,(x,y) 表示其拓扑坐标。

假设网格在等级2、3、4、5(中间)的区域中被细化,并且在这种情况下局部细化比率被定义为R=D_coarse/D_fine=2。由于网格已细化,因此时间推进也应细化。这需要在细化区域中计算时间步长 t、t+1/2*dt、t+dt,而在全局区域中仅计算时间步长 t 和 t+dt。这需要一个更小的通信器,它只包括中间的等级以进行额外的计算。全局排名+坐标和相应的局部排名(红色)草图如下所示:
然而,我在实现这个方案时遇到了一些错误,并显示了 Fortran 中的代码片段(不完整):
integer :: global_comm, local_comm ! global and local communicators
integer :: global_rank, local_rank !
integer :: global_grp, local_grp ! global and local groups
integer :: ranks(4) ! ranks in the refined region
integer :: dim ! dimension
integer :: left(-2:2), right(-2:2) ! ranks of neighbouring processors in 2 directions
ranks=[2,3,4,5]
!---- Make global communicator and their topological relationship
call mpi_init(ierr)
call mpi_cart_create(MPI_COMM_WORLD, 2, [4,2], [.false., .false.], .true., global_comm, ierr) …Run Code Online (Sandbox Code Playgroud) 我目前正在学习化学工程,在我的学士论文中,我应该模拟一个加热管,通过热端口将两个管道连接在一起,可以在过热器中使用该加热管。尽管我在理解如何在 Modelica 中正确编码方面付出了很大的努力,但我的代码仍然无法正常工作,而且我变得非常绝望。
因此该模型基本上必须同时适用于流体水和过热蒸汽,因此只是静止条件下的单相流。热传递应该是对流发生的。此外,我忽略了该模型中由于摩擦引起的压力损失。
这是我对模型应该如何工作的想法:我几乎正在尝试构建一个类似于 MSL 中的模型,“动态管道”,只是更容易,以便研究同一主题的学生能够快速理解我的代码。所以我将管道分成多个节点 n,第一个体积是入口状态,所以基本上那个状态并不真正属于管道。之后,平衡方程适用。我不太确定动量方程,因此非常感谢对它们的任何帮助。对流传热由 MSL 中的模型“对流”定义,Thermal.HeatTransfer.Components。在测试带有流动源、固定压力和固定温度的边界的模型时,我也收到错误消息“无法降低 DAE 指数”
另外,这是我的代码:
model Pipe_base3
//Import
import Modelica.SIunits.*;
import Modelica.Constants.pi;
replaceable package Medium =
Modelica.Media.Interfaces.PartialTwoPhaseMedium annotation (choicesAllMatching = true);
parameter Integer n=2;
parameter Integer np=1;
// Geometry==================================================================//
parameter Diameter d_pipe = 0.05 "Inner diameter of pipe"
annotation (Dialog(tab="Geometry"));
parameter Length L = 1 "Length of unit"
annotation (Dialog(tab="Geometry"));
parameter Area A_hex = pi * d_pipe * L
"Shell surface of pipe for heat exchange" annotation (Dialog(tab="Geometry"));
parameter Area A_q = …Run Code Online (Sandbox Code Playgroud) 有一种简单的方法来模拟场景中的电流吗?我知道它们在spritekit中提供重力,质量,密度,阻力和其他属性,但我没有看到,我将如何模拟场景中当前影响的对象?
IE说我有一个物体从重心和密度下降,从屏幕的顶部到底部,好像它是通过watter下降,设置它应该是相当直接的.但是,假设我想在场景中间添加一个从左到右流动的电流...当物体掉落时,它开始遇到电流的影响,并且坠落开始随着电流移动,因为它越靠近电流的中心,它增加了它的左/右运动,当它通过电流的中心并远离其中心时,左/右运动减慢.
这可能吗?我是否需要创建使用重力从左向右移动的invisibe /透明节点来模拟这个?或者我应该使用不同的方法?
我需要在瓶子里和装置旋转时渲染Fluid
android ×1
dymola ×1
fluid ×1
fortran ×1
game-physics ×1
graphics2d ×1
modelica ×1
mpi ×1
objective-c ×1
physics ×1
sprite-kit ×1