Ejemplo n.º 1
0
void Exporter<MeshType>::exportRegionMarkerID( boost::shared_ptr<MeshType> mesh, boost::shared_ptr<Epetra_Comm> comm )
{
    // TODO: use FESpace M_spacemap for generality
    const ReferenceFE* refFEPtr;

    // Need a factory!!!!
    // @todo Need a factory!
    switch ( MeshType::S_geoDimensions )
    {
    case 3:
        refFEPtr = &feTetraP0;
        break;
    case 2:
        refFEPtr = &feTriaP0;
        break;
    case 1:
        refFEPtr = &feSegP0;
        break;
    default:
        ERROR_MSG ( "Dimension not supported " );
    }

    // Useless quadrature rule
    const QuadratureRule & dummyQR = quadRuleDummy;

    const feSpacePtr_Type regionMarkerID_FESpacePtr( new feSpace_Type( mesh, *refFEPtr,
            dummyQR, dummyQR,
            1, comm ) );

    vectorPtr_Type regionMarkerIDData ( new vector_Type ( regionMarkerID_FESpacePtr->map() ) );

    for ( UInt iElem( 0 ); iElem < mesh->numElements(); ++iElem )
    {
        const ID globalElem = mesh->element(iElem).id();
        (*regionMarkerIDData)[ globalElem ] = mesh->element(iElem).markerID();
    }

    addVariable( exporterData_Type::ScalarField,
                 "regionMarkerID",
                 regionMarkerID_FESpacePtr,
                 regionMarkerIDData,
                 0,
                 exporterData_Type::SteadyRegime,
                 exporterData_Type::Cell );

} // exportRegionMarkerID