标签: fluid-dynamics

MPI 中的多个通信器

这个问题的背景是一些计算领域,例如计算流体动力学(CFD)。我们经常在一些关键区域需要更精细的网格/网格,而背景网格可以更粗糙。例如,用于跟踪气象学中的冲击波和嵌套域的自适应细化网格。

使用笛卡尔拓扑,域分解如下图所示。在这种情况下,使用4*2=8个处理器。单个数字表示处理器的等级,(x,y) 表示其拓扑坐标。 图 1. 基本拓扑

假设网格在等级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)

fortran mpi fluid-dynamics

5
推荐指数
1
解决办法
965
查看次数

在 Modelica/Dymola 中对加热管进行建模

我目前正在学习化学工程,在我的学士论文中,我应该模拟一个加热管,通过热端口将两个管道连接在一起,可以在过热器中使用该加热管。尽管我在理解如何在 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)

modelica fluid-dynamics dymola

3
推荐指数
1
解决办法
548
查看次数

Spritekit模拟流体流动

有一种简单的方法来模拟场景中的电流吗?我知道它们在spritekit中提供重力,质量,密度,阻力和其他属性,但我没有看到,我将如何模拟场景中当前影响的对象?

IE说我有一个物体从重心和密度下降,从屏幕的顶部到底部,好像它是通过watter下降,设置它应该是相当直接的.但是,假设我想在场景中间添加一个从左到右流动的电流...当物体掉落时,它开始遇到电流的影响,并且坠落开始随着电流移动,因为它越靠近电流的中心,它增加了它的左/右运动,当它通过电流的中心并远离其中心时,左/右运动减慢.

这可能吗?我是否需要创建使用重力从左向右移动的invisibe /透明节点来模拟这个?或者我应该使用不同的方法?

physics objective-c game-physics fluid-dynamics sprite-kit

2
推荐指数
1
解决办法
828
查看次数

1
推荐指数
1
解决办法
2467
查看次数