我正在尝试了解Bubble-extend中的dbns代码。但是我对下面给出的以下代码的特定部分有疑问。
deltaRLeft&gradrho [own]或
deltaRight和gradU [nei]
我在这里使用的东西是一个参考运算符,但是如果有人可以更详细地解释它,它将对我有所帮助。
Flux::evaluateFlux
(
rhoFlux_[faceI],
rhoUFlux_[faceI],
rhoEFlux_[faceI],
rho_[own] + rhoLimiter[own]*(deltaRLeft & gradrho[own]),
rho_[nei] + rhoLimiter[nei]*(deltaRRight & gradrho[nei]),
U_[own] + cmptMultiply(ULimiter[own], (deltaRLeft & gradU[own])),
U_[nei] + cmptMultiply(ULimiter[nei], (deltaRRight & gradU[nei])),
T_[own] + TLimiter[own]*(deltaRLeft & gradT[own]),
T_[nei] + TLimiter[nei]*(deltaRRight & gradT[nei]),
R[own],
R[nei],
Cv[own],
Cv[nei],
Cp[own],
Cp[nei],
Sf[faceI],
magSf[faceI]
);
如果可以详细解释,此处的确切操作是什么。 该代码的一部分来自dbns / numericFlux / numericFlux.C
答案 0 :(得分:2)
这是按位运算符。
将第一个操作数的每个位与第二个操作数的对应位进行比较。 如果两个位均为1,则结果位设置为1,否则设置为0。
例如:
11001001
& 10111000
--------
= 10001000
答案 1 :(得分:1)
恐怕first和second答案在OpenFOAM上下文中大多不适用。
在OpenFOAM上下文中,如果操作数是张量,则&
是inner product。在那里,deltaRRight
和gradT[nei]
实际上是张量对象。
请查看OpenFOAM's programmers' guide的第1.4.1和1.3.1节。
答案 2 :(得分:0)
有两个不同的&
运算符。
按位与运算符(&)将第一个操作数的每个位与第二个操作数的对应位进行比较。如果两个位都为1,则相应的结果位设置为1。否则,相应的结果位设置为0。
按位AND运算符的两个操作数都必须是整数类型。
例如:
#include <iostream>
using namespace std;
int main() {
unsigned short a = 0xFFFF; // pattern 1111 ...
unsigned short b = 0xAAAA; // pattern 1010 ...
cout << hex << ( a & b ) << endl; // prints "aaaa", pattern 1010 ...
}