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); }
PetscErrorCode CreateMesh(MPI_Comm comm, Obj<ALE::Mesh>& mesh, Options *options) { ALE::Obj<ALE::Mesh> mesh2; PetscErrorCode ierr; PetscFunctionBegin; ALE::LogStage stage = ALE::LogStageRegister("MeshCreation"); ALE::LogStagePush(stage); ierr = PetscPrintf(comm, "Creating mesh\n");CHKERRQ(ierr); if (options->generate) { if (options->dim == 3) { double lower[3] = {0.0, 0.0, 0.0}; double upper[3] = {1.0, 1.0, 1.0}; double offset[3] = {0.5, 0.5, 0.5}; ALE::Obj<ALE::Mesh> mb = ALE::MeshBuilder::createFicheraCornerBoundary(comm, lower, upper, offset); mesh2 = ALE::Generator::refineMesh(ALE::Generator::generateMesh(mb, options->interpolate), options->refinementLimit, options->interpolate); ierr = MeshRefineSingularity_Fichera(mesh2, comm, offset, 0.75, &mesh);CHKERRQ(ierr); } else if (options->dim == 2) { double lower[2] = {0.0, 0.0}; double upper[2] = {1.0, 1.0}; double offset[2] = {0.0, 0.0}; //ALE::Obj<ALE::Mesh> mb = ALE::MeshBuilder::createReentrantBoundary(comm, lower, upper, offset); ALE::Obj<ALE::Mesh> mb = ALE::MeshBuilder::createCircularReentrantBoundary(comm, 100, 1.0, 0.9); mesh2 = ALE::Generator::refineMesh(ALE::Generator::generateMesh(mb, options->interpolate), options->refinementLimit, options->interpolate); ierr = MeshRefineSingularity_Fichera(mesh2, comm, offset, 0.9, &mesh, PETSC_TRUE);CHKERRQ(ierr); //mesh = ALE::Generator::generateMesh(mb, options->debug); } } else { mesh = ALE::PCICE::Builder::readMesh(comm, options->dim, options->baseFilename, options->useZeroBase, options->interpolate, options->debug); } //ALE::Coarsener::IdentifyBoundary(mesh, 2); //ALE::Coarsener::make_coarsest_boundary(mesh, 2, options->levels + 1); ALE::LogStagePop(stage); ierr = PetscPrintf(comm, " Read %d elements\n", mesh->heightStratum(0)->size());CHKERRQ(ierr); ierr = PetscPrintf(comm, " Read %d edges/faces\n", mesh->heightStratum(1)->size());CHKERRQ(ierr); ierr = PetscPrintf(comm, " Read %d vertices\n", mesh->depthStratum(0)->size());CHKERRQ(ierr); if (options->debug) { // topology->view("Serial topology"); } PetscFunctionReturn(0); }