diff --git a/nonlinelast.cc b/nonlinelast.cc index 501d5130cf057f8d59eb72fac80f154afd4936bc..36c75b52523544f6dcd763785b595fef88c06ee2 100644 --- a/nonlinelast.cc +++ b/nonlinelast.cc @@ -17,6 +17,7 @@ #include <dune/fufem/estimators/fractionalmarking.hh> #include <dune/fufem/estimators/refinementindicator.hh> #include <dune/fufem/utilities/dirichletbcassembler.hh> +#include <dune/fufem/utilities/gridconstruction.hh> #ifdef HAVE_IPOPT #include <dune/solvers/solvers/quadraticipopt.hh> @@ -60,19 +61,28 @@ int main (int argc, char *argv[]) try // read problem settings std::string path = parameterSet.get<std::string>("path"); std::string resultPath = parameterSet.get<std::string>("resultPath"); - std::string gridFile = parameterSet.get<std::string>("gridFile"); // ///////////////////////////// // Generate the grid // ///////////////////////////// typedef UGGrid<dim> GridType; - GridType* grid = new GridType; + std::unique_ptr<GridType> grid; - if (parameterSet.hasKey("parFile")) { - std::string parFile = parameterSet.get<std::string>("parFile"); + const auto& gridConfig = parameterSet.sub(parameterSet.get<std::string>("gridName")); + + if (gridConfig.get<bool>("createGrid", false)) { + grid = GridConstruction<GridType,dim>::createGrid(gridConfig); + } else if (gridConfig.hasKey("amira_parFile")) { +#if HAVE_AMIRAMESH + auto gridFile = gridConfig.get<std::string>("gridFile"); + auto parFile = gridConfig.get<std::string>("amira_parFile"); grid = AmiraMeshReader<GridType>::read(path + gridFile, PSurfaceBoundary<dim-1>::read(path + parFile)); - } else - AmiraMeshReader<GridType>::read(*grid, path + gridFile); +#endif + } else { +#if HAVE_AMIRAMESH + grid = AmiraMeshReader<GridType>::read(path + gridConfig.get<std::string>("gridFile")); +#endif + } // Read coarse Dirichlet boundary values BitSetVector<dim> coarseDirichletNodes;