&在这段代码中的作用是什么?

时间:2019-10-16 03:43:53

标签: c++ openfoam

我正在尝试了解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

3 个答案:

答案 0 :(得分:2)

这是按位运算符。

将第一个操作数的每个位与第二个操作数的对应位进行比较。 如果两个位均为1,则结果位设置为1,否则设置为0。

例如:

     11001001  
   & 10111000 
     -------- 
   = 10001000

答案 1 :(得分:1)

恐怕firstsecond答案在OpenFOAM上下文中大多不适用。

在OpenFOAM上下文中,如果操作数是张量,则&inner product。在那里,deltaRRightgradT[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 ...
}