int main(int argc, char *argv[]) { MPI_Comm comm; Options options; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscInitialize(&argc, &argv, (char *) 0, NULL); CHKERRQ(ierr); comm = PETSC_COMM_WORLD; try { Obj<ALE::Mesh> mesh; ierr = ProcessOptions(comm, &options); CHKERRQ(ierr); ierr = CreateMesh(comm, mesh, &options); CHKERRQ(ierr); ierr = ALE::Coarsener::CreateSpacingFunction(mesh, 2); CHKERRQ(ierr); ierr = ALE::Coarsener::CreateCoarsenedHierarchyNew(mesh, 2, options.levels, options.coarseFactor); CHKERRQ(ierr); Obj<ALE::Mesh::sieve_type> sieve = new ALE::Mesh::sieve_type(mesh->comm(), 0); mesh->getTopology()->setPatch(options.levels+1, sieve); mesh->getTopology()->stratify(); ierr = OutputVTK(mesh, &options); CHKERRQ(ierr); } catch (ALE::Exception e) { std::cout << e << std::endl; } ierr = PetscFinalize(); CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode OutputVTK(const Obj<ALE::Mesh>& mesh, Options *options) { PetscViewer viewer; PetscErrorCode ierr; PetscFunctionBegin; if (options->outputVTK) { ALE::LogStage stage = ALE::LogStageRegister("VTKOutput"); ALE::LogStagePush(stage); ierr = PetscPrintf(mesh->comm(), "Creating VTK mesh files\n"); CHKERRQ(ierr); ierr = PetscViewerCreate(mesh->comm(), &viewer); CHKERRQ(ierr); ierr = PetscViewerSetType(viewer, PETSC_VIEWER_ASCII); CHKERRQ(ierr); ierr = PetscViewerSetFormat(viewer, PETSC_VIEWER_ASCII_VTK); CHKERRQ(ierr); ierr = PetscViewerFileSetName(viewer, "testMesh.vtk"); CHKERRQ(ierr); ierr = VTKViewer::writeHeader(viewer); CHKERRQ(ierr); ierr = VTKViewer::writeHierarchyVertices(mesh, viewer, options->zScale); CHKERRQ(ierr); ierr = VTKViewer::writeHierarchyElements(mesh, viewer); CHKERRQ(ierr); ierr = PetscViewerDestroy(viewer); CHKERRQ(ierr); const ALE::Mesh::topology_type::sheaf_type& patches = mesh->getTopology()->getPatches(); #if 0 for(ALE::Mesh::topology_type::sheaf_type::iterator p_iter = patches.begin(); p_iter != patches.end(); ++p_iter) { ostringstream filename; filename << "coarseMesh." << *p_iter << ".vtk"; ierr = PetscViewerCreate(mesh->comm(), &viewer); CHKERRQ(ierr); ierr = PetscViewerSetType(viewer, PETSC_VIEWER_ASCII); CHKERRQ(ierr); ierr = PetscViewerSetFormat(viewer, PETSC_VIEWER_ASCII_VTK); CHKERRQ(ierr); ierr = PetscViewerFileSetName(viewer, filename.str().c_str()); CHKERRQ(ierr); ierr = VTKViewer::writeHeader(viewer); CHKERRQ(ierr); ierr = VTKViewer::writeVertices(mesh, *p_iter, viewer); CHKERRQ(ierr); ierr = VTKViewer::writeElements(mesh, *p_iter, viewer); CHKERRQ(ierr); //ierr = FieldView_Sieve(mesh, "spacing", viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(viewer); CHKERRQ(ierr); } #endif } PetscFunctionReturn(0); }
PetscErrorCode CreateMesh(MPI_Comm comm, Obj<ALE::Mesh>& mesh, Options *options) { PetscErrorCode ierr; PetscFunctionBegin; ALE::LogStage stage = ALE::LogStageRegister("MeshCreation"); ALE::LogStagePush(stage); ierr = PetscPrintf(comm, "Creating mesh\n");CHKERRQ(ierr); mesh = ALE::PCICE::Builder::readMesh(comm, 2, options->baseFilename, options->useZeroBase, true, options->debug); ALE::Coarsener::IdentifyBoundary(mesh, 2); ALE::Coarsener::make_coarsest_boundary(mesh, 2, options->levels + 1); ALE::LogStagePop(stage); Obj<ALE::Mesh::topology_type> topology = mesh->getTopology(); ierr = PetscPrintf(comm, " Read %d elements\n", topology->heightStratum(0, 0)->size());CHKERRQ(ierr); ierr = PetscPrintf(comm, " Read %d vertices\n", topology->depthStratum(0, 0)->size());CHKERRQ(ierr); if (options->debug) { topology->view("Serial topology"); } PetscFunctionReturn(0); }