Example #1
0
void makeResidual(FVMesh2D &m, FVVect<double> &phi, FVVect< FVPoint2D<double> > &u,
                  FVVect<double> &rhs,FVVect<double> &Vd,FVVect<double> &Vn,
                  FVVect<double> &G,Parameter &para) {
       
    
    FVVect<double> F(m.getNbEdge());
    makeFlux(m,phi,u,Vd,Vn,F,para);
    G=0.;

    m.beginEdge();
    const size_t edges = m.getNbEdge();
    const size_t cells = m.getNbCell();
    FVCell2D *ptr_c;     
    FVEdge2D *ptr_e;
    
    
    #pragma omp parallel for private(ptr_c,ptr_e)
    for(size_t i = 0; i < edges; i++) {

        //ptr_e=m.nextEdge();        
        ptr_e = m.getEdge(i);
                
        ptr_c = ptr_e->leftCell;   
        #pragma omp atomic 
        G[ptr_c->label - 1] += F[ptr_e->label - 1];
        
        if((ptr_c = ptr_e->rightCell)) {
            #pragma omp atomic               
            G[ptr_c->label - 1] -= F[ptr_e->label - 1];    
        }        
    } 
 

    #pragma omp parallel for
    for(size_t j=0; j < cells; j++) {
        G[j]/=m.getCell(j)->area;   
        G[j]-=rhs[j];
    }
}
Example #2
0
void makeResidual2(FVMesh2D &m, FVVect<double> &phi, FVVect< FVPoint2D<double> > &u,
                  FVVect<double> &rhs,FVVect<double> &Vd,FVVect<double> &Vn,
                  FVVect<double> &G,Parameter &para) {

    FVEdge2D *ptr_e;   
    FVCell2D *ptr_c;
    FVVect<double> F(m.getNbEdge());
    makeFlux(m,phi,u,Vd,Vn,F,para);
    G=0.;

    m.beginEdge();    
    const size_t cells = m.getNbCell();

    #pragma omp parallel for
    for(size_t i = 0; i < cells; i++) {
                
        ptr_c = m.getCell(i);
        ptr_c->beginEdge();            
        
        while((ptr_e = ptr_c->nextEdge())) {            
            if(ptr_c == ptr_e->leftCell) {
                ptr_c = ptr_e->leftCell;                      
                G[ptr_c->label - 1] += F[ptr_e->label - 1];
            }
            else {
                if((ptr_c = ptr_e->rightCell)) {            
                    G[ptr_c->label - 1] -= F[ptr_e->label - 1];    
                }
            }    
            
        }

        G[i] /= ptr_c->area;   
        G[i] -= rhs[i];

    }    
}