关于FORTRAN 90代码Rem = max(50.0, gm*diamj(i)/vism)的含义及结果咨询
解读Fortran代码中
Rem的计算逻辑 首先,先拆解这段Fortran 90代码的核心行为:
Rem = max (50.0, gm*diamj(i)/vism)
直接计算步骤
这段代码的逻辑很直白,分两步执行:
- 先计算中间值:
gm * diamj(i) / vismdiamj(i)是数组的第i个元素,结合变量名推测是第i个对象的特征直径(比如管道内径、颗粒直径这类长度参数)gm和vism是你们框架里其他地方定义的参数或计算结果,后面我会结合常见工程场景说说它们的可能含义
- 用
max()函数取上述中间值和50.0的较大者,最终赋值给Rem
简单总结:
- 如果
gm*diamj(i)/vism ≥ 50.0,Rem就等于这个计算值 - 如果
gm*diamj(i)/vism < 50.0,Rem会被强制设为50.0——这明显是框架给Rem设定了一个下限阈值,避免过小的数值影响后续计算
结合工程场景的变量含义推测
从变量名Rem来看,这大概率是雷诺数(Reynolds Number)——流体力学里用来判断流动状态(层流/湍流)的无量纲数,常见公式有两种:
$$Re = \frac{\rho v d}{\mu} \quad \text{或} \quad Re = \frac{v d}{\nu}$$
结合这个公式,代码里的变量对应关系通常是:
Rem:雷诺数(Re)gm:要么是ρ*v(流体密度×流速),要么直接是流速vdiamj(i):特征长度d(也就是直径)vism:要么是动力粘度μ,要么是运动粘度ν
具体对应哪一种,得看你们框架的定义文档或者上下文代码,但核心逻辑都是给雷诺数兜底了一个50的最小值。
举个实际例子
假设:
gm = 10.0(比如流速,单位m/s)diamj(i) = 0.004(比如4mm的颗粒直径,单位m)vism = 0.000001(比如水的运动粘度,单位m²/s)
计算中间值:10.0 * 0.004 / 0.000001 = 40000.0,远大于50.0,所以Rem = 40000.0
再换一组值:
gm = 0.1diamj(i) = 0.004vism = 0.00001
中间值:0.1 * 0.004 / 0.00001 = 40.0,小于50.0,所以Rem = 50.0
内容的提问来源于stack exchange,提问作者AndiSofe




