int main(int argc, const char* argv[]) { logging::init(argc, argv); try { return ghosts(argc, argv)(); } catch (std::exception e) { LOG(FATAL) << e.what(); return EXIT_FAILURE; } }
void MeshBasedCellPopulationWithGhostNodes<DIM>::WriteVtkResultsToFile(const std::string& rDirectory) { #ifdef CHASTE_VTK if (this->mpVoronoiTessellation != NULL) { unsigned num_timesteps = SimulationTime::Instance()->GetTimeStepsElapsed(); std::stringstream time; time << num_timesteps; // Create mesh writer for VTK output VertexMeshWriter<DIM, DIM> mesh_writer(rDirectory, "results", false); // Iterate over any cell writers that are present unsigned num_vtk_cells = this->mpVoronoiTessellation->GetNumElements(); for (typename std::vector<boost::shared_ptr<AbstractCellWriter<DIM, DIM> > >::iterator cell_writer_iter = this->mCellWriters.begin(); cell_writer_iter != this->mCellWriters.end(); ++cell_writer_iter) { // Create vector to store VTK cell data std::vector<double> vtk_cell_data(num_vtk_cells); // Loop over elements of mpVoronoiTessellation for (typename VertexMesh<DIM, DIM>::VertexElementIterator elem_iter = this->mpVoronoiTessellation->GetElementIteratorBegin(); elem_iter != this->mpVoronoiTessellation->GetElementIteratorEnd(); ++elem_iter) { // Get the indices of this element and the corresponding node in mrMesh unsigned elem_index = elem_iter->GetIndex(); unsigned node_index = this->mpVoronoiTessellation->GetDelaunayNodeIndexCorrespondingToVoronoiElementIndex(elem_index); // If this node corresponds to a ghost node, set any "cell" data to be -1.0 if (this->IsGhostNode(node_index)) { // Populate the vector of VTK cell data vtk_cell_data[elem_index] = -1.0; } else { // Get the cell corresponding to this node CellPtr p_cell = this->GetCellUsingLocationIndex(node_index); // Populate the vector of VTK cell data vtk_cell_data[elem_index] = (*cell_writer_iter)->GetCellDataForVtkOutput(p_cell, this); } } mesh_writer.AddCellData((*cell_writer_iter)->GetVtkCellDataName(), vtk_cell_data); } // Next, record which nodes are ghost nodes // Note that the cell writer hierarchy can not be used to do this as ghost nodes don't have corresponding cells. std::vector<double> ghosts(num_vtk_cells); for (typename VertexMesh<DIM, DIM>::VertexElementIterator elem_iter = this->mpVoronoiTessellation->GetElementIteratorBegin(); elem_iter != this->mpVoronoiTessellation->GetElementIteratorEnd(); ++elem_iter) { unsigned elem_index = elem_iter->GetIndex(); unsigned node_index = this->mpVoronoiTessellation->GetDelaunayNodeIndexCorrespondingToVoronoiElementIndex(elem_index); ghosts[elem_index] = (double) (this->IsGhostNode(node_index)); } mesh_writer.AddCellData("Non-ghosts", ghosts); ///\todo #1975 - deal with possibility of information stored in CellData mesh_writer.WriteVtkUsingMesh(*(this->mpVoronoiTessellation), time.str()); *(this->mpVtkMetaFile) << " <DataSet timestep=\""; *(this->mpVtkMetaFile) << num_timesteps; *(this->mpVtkMetaFile) << "\" group=\"\" part=\"0\" file=\"results_"; *(this->mpVtkMetaFile) << num_timesteps; *(this->mpVtkMetaFile) << ".vtu\"/>\n"; } #endif //CHASTE_VTK }