Example #1
0
// initialize exact solution
void setExactSolution(FVMesh2D &m,FVVect<double> &sol,Parameter &para) {     
    FVCell2D *ptr_c;  
    m.beginCell();
    while((ptr_c=m.nextCell())) {
        sol[ptr_c->label-1]=ptr_c->getMeanValue(solExact,para);
    }   
}  
Example #2
0
// compute source term
void setRHS(FVMesh2D &m,FVVect<double> &rhs,Parameter &para) {     
    FVCell2D *ptr_c;  
    m.beginCell();

    while((ptr_c=m.nextCell())) {
        rhs[ptr_c->label-1]=ptr_c->getMeanValue(RHS,para);
    }   
} 
Example #3
0
void Gmsh::FVMesh2Gmsh(FVMesh2D &m) // constructor which convert a FVMesh2D into a gmah struct
{
    _dim=2;   // a two dimension mesh
    FVVertex2D* ptr_v;
    _nb_node=m.getNbVertex();
    _node.resize(_nb_node);
    for((ptr_v=m.beginVertex()); (ptr_v=m.nextVertex());)
    {
        size_t i=ptr_v->label;
        _node[i-1].label  = i;
        _node[i-1].coord.x= ptr_v->coord.x;
        _node[i-1].coord.y= ptr_v->coord.y;
        _node[i-1].coord.z= 0;
    }
    FVCell2D *ptr_c;
    double order[4],doux;
    size_t noux;
    FVPoint2D<double> Paux;
    _nb_element=m.getNbCell();
    _element.resize(_nb_element);
    for((ptr_c=m.beginCell()); (ptr_c=m.nextCell());)
    {
        size_t i=ptr_c->label;
        _element[i-1].label=i;
        switch(ptr_c->nb_vertex)
        {
        case 3:
            _element[i-1].type_element=2; // we use triangle
            break;
        case 4:
            _element[i-1].type_element=3; // we use quadrangle
            break;
        default:
            cout<<"cell does not correspond to a gmsh element. Abort convertion"<<endl;
            _nb_node=0;
            _nb_element=0;
            return;
        }
        _element[i-1].code_physical=ptr_c->code;
        _element[i-1].code_elementary=ptr_c->code;
        _element[i-1].dim=_dim;
        _element[i-1].nb_node=ptr_c->nb_vertex;
        for(size_t j=0; j<ptr_c->nb_vertex; j++)
        {
            _element[i-1].node[j]=ptr_c->vertex[j]->label;
            Paux.x=_node[_element[i-1].node[j]-1].coord.x-ptr_c->centroid.x;
            Paux.y=_node[_element[i-1].node[j]-1].coord.y-ptr_c->centroid.y;
            Paux/=Norm(Paux);
            order[j]=(1-Paux.x)*0.5;
            if(Paux.y<0) order[j]*=-1;
        }
        // reordering the node (bubble sort) to cast in the gmah framework  following order
        for(size_t j=ptr_c->nb_vertex-1; j>0; j--)
        {
            for(size_t k=0; k<j; k++)
            {
                if(order[k+1]<order[k])
                {
                    doux=order[k+1];
                    noux=_element[i-1].node[k+1];
                    order[k+1]=order[k];
                    _element[i-1].node[k+1]=_element[i-1].node[k];
                    order[k]=doux;
                    _element[i-1].node[k]=noux;
                }
            }
        }
    }

}