影响计算效率的因素



  • //2.4s
    label meshSize = this->thermo().rho()().size();
    for(label i=0; i < this->nSpecie_; i++)
    {
        for(label icell = 0; icell < meshSize; icell++)
        {
            label  izone = ZoneNumber[icell];
            this->RR_[i][icell]     = RRCCM[i][izone]*correctCH[icell];
        }
    } 
    
    //24s
    for(label i=0; i < this->nSpecie_; i++)
    {
        for(label icell = 0; icell < this->thermo().rho()().size(); icell++)
        {
            label  izone = ZoneNumber[icell];
            this->RR_[i][icell]     = RRCCM[i][izone]*correctCH[icell];
        }
    } 
    

    上边两种用法,计算耗时相差 10 倍!
    改用 thermo.T() 之后计算时间又变成 2.4 s 了,所以原因应该是 rho 后边跟了两个括号,深层原因是啥呢?

    //2.4s
    label meshSize = this->thermo().rho()().size();
    for(label i=0; i < this->nSpecie_; i++)
    {
        for(label icell = 0; icell < this->thermo().T().size(); icell++)
        {
            label  izone = ZoneNumber[icell];
            this->RR_[i][icell]     = RRCCM[i][izone]*correctCH[icell];
        }
    } 
    

    此外,还可以使用 forAll(this->thermo().T(), icell),效果和 for 循环几乎一样。