void PiecewiseLinearDiscontinuousScalarSpaceBarycentric<BasisFunctionType>::dumpClusterIdsEx( const char* fileName, const std::vector<unsigned int>& clusterIdsOfDofs, DofType dofType) const { // Note: this will probably only work for spaces on full grids // (not on segments) if (dofType != GLOBAL_DOFS && dofType != FLAT_LOCAL_DOFS) throw std::invalid_argument("PiecewiseLinearDiscontinuousScalarSpaceBarycentricScalarSpace::" "dumpClusterIds(): invalid DOF type"); const size_t idCount = clusterIdsOfDofs.size(); if ((dofType == GLOBAL_DOFS && idCount != globalDofCount()) || (dofType == FLAT_LOCAL_DOFS && idCount != flatLocalDofCount())) throw std::invalid_argument("PiecewiseLinearDiscontinuousScalarSpaceBarycentricScalarSpace::" "dumpClusterIds(): incorrect dimension"); std::auto_ptr<VtkWriter> vtkWriter = this->gridView().vtkWriter(); if (dofType == GLOBAL_DOFS) { arma::Row<double> data(idCount); for (size_t i = 0; i < idCount; ++i) data(i) = clusterIdsOfDofs[i]; vtkWriter->addVertexData(data, "ids"); vtkWriter->write(fileName); } else { arma::Mat<double> data(idCount, globalDofCount()); data.fill(0.); size_t row = 0; for (size_t id = 0; id < idCount; ++id) { bool exists = false; for (size_t fldof = 0; fldof < idCount; ++fldof) { if (clusterIdsOfDofs[fldof] == id) { LocalDof ldof = m_flatLocal2localDofs[fldof]; GlobalDofIndex gdof = m_local2globalDofs[ldof.entityIndex][ldof.dofIndex]; data(row, gdof) = 1; exists = true; } } if (!exists) data.shed_row(row); // very inefficient, of course else ++row; } std::cout << "about to write" <<std::endl; vtkWriter->addVertexData(data, "ids"); vtkWriter->write(fileName); } }
void PiecewiseLinearDiscontinuousScalarSpace<BasisFunctionType>:: dumpClusterIdsEx(const char *fileName, const std::vector<unsigned int> &clusterIdsOfDofs, DofType dofType) const { if (dofType != GLOBAL_DOFS && dofType != FLAT_LOCAL_DOFS) throw std::invalid_argument("PiecewiseLinearDiscontinuousScalarSpace::" "dumpClusterIds(): invalid DOF type"); const size_t idCount = clusterIdsOfDofs.size(); if ((dofType == GLOBAL_DOFS && idCount != globalDofCount()) || (dofType == FLAT_LOCAL_DOFS && idCount != flatLocalDofCount())) throw std::invalid_argument("PiecewiseLinearDiscontinuousScalarSpace::" "dumpClusterIds(): incorrect dimension"); std::unique_ptr<GridView> view = this->grid()->leafView(); std::unique_ptr<VtkWriter> vtkWriter = view->vtkWriter(); Matrix<double> data(idCount, globalDofCount()); data.setZero(); size_t row = 0; for (size_t id = 0; id < idCount; ++id) { bool exists = false; for (size_t fldof = 0; fldof < idCount; ++fldof) { if (clusterIdsOfDofs[fldof] == id) { LocalDof ldof = m_flatLocal2localDofs[fldof]; GlobalDofIndex gdof = m_local2globalDofs[ldof.entityIndex][ldof.dofIndex]; data(row, gdof) = 1; exists = true; } } if (!exists) eigenRemoveRowFromMatrix(data, row); // very inefficient, of course else ++row; } std::cout << "about to write" << std::endl; vtkWriter->addVertexData(data, "ids"); vtkWriter->write(fileName); }
void PiecewiseConstantDiscontinuousScalarSpaceBarycentric< BasisFunctionType>::dumpClusterIdsEx(const char *fileName, const std::vector<unsigned int> & clusterIdsOfGlobalDofs, DofType dofType) const { if (dofType != GLOBAL_DOFS && dofType != FLAT_LOCAL_DOFS) throw std::invalid_argument( "PiecewiseConstantDiscontinuousScalarSpaceBarycentric::" "dumpClusterIds(): invalid DOF type"); const size_t idCount = clusterIdsOfGlobalDofs.size(); if ((dofType == GLOBAL_DOFS && idCount != globalDofCount()) || (dofType == FLAT_LOCAL_DOFS && idCount != flatLocalDofCount())) throw std::invalid_argument("PiecewiseConstantDiscontinuousScalarSpaceBaryc" "entric::dumpClusterIds(): " "clusterIds has incorrect length"); std::unique_ptr<GridView> view = this->grid()->leafView(); std::unique_ptr<VtkWriter> vtkWriter = view->vtkWriter(); arma::Row<double> data(idCount); for (size_t i = 0; i < idCount; ++i) data(i) = clusterIdsOfGlobalDofs[i]; vtkWriter->addCellData(data, "ids"); vtkWriter->write(fileName); }