From db28c538f5ed9145bc6283a72ed8e1675577cdb3 Mon Sep 17 00:00:00 2001 From: Timo Heister Date: Fri, 17 May 2019 10:34:02 -0600 Subject: [PATCH] step-66: a nonlinear, parallel matrix-free example [WIP] I am working with Fabian Castelli on a nonlinear, parallel, matrix-free tutorial. Because this is the second time my chosen tutorial number was taken, I would like to reserve it with this PR. --- examples/step-66/CMakeLists.txt | 54 ++++++++++++++++++++++++++++++++ examples/step-66/doc/builds-on | 1 + examples/step-66/doc/intro.dox | 9 ++++++ examples/step-66/doc/kind | 1 + examples/step-66/doc/results.dox | 2 ++ examples/step-66/doc/tooltip | 1 + examples/step-66/step-66.cc | 53 +++++++++++++++++++++++++++++++ 7 files changed, 121 insertions(+) create mode 100644 examples/step-66/CMakeLists.txt create mode 100644 examples/step-66/doc/builds-on create mode 100644 examples/step-66/doc/intro.dox create mode 100644 examples/step-66/doc/kind create mode 100644 examples/step-66/doc/results.dox create mode 100644 examples/step-66/doc/tooltip create mode 100644 examples/step-66/step-66.cc diff --git a/examples/step-66/CMakeLists.txt b/examples/step-66/CMakeLists.txt new file mode 100644 index 0000000000..423238b297 --- /dev/null +++ b/examples/step-66/CMakeLists.txt @@ -0,0 +1,54 @@ +## +# CMake script for the step-66 tutorial program: +## + +# Set the name of the project and target: +SET(TARGET "step-66") + +# Declare all source files the target consists of. Here, this is only +# the one step-X.cc file, but as you expand your project you may wish +# to add other source files as well. If your project becomes much larger, +# you may want to either replace the following statement by something like +# FILE(GLOB_RECURSE TARGET_SRC "source/*.cc") +# FILE(GLOB_RECURSE TARGET_INC "include/*.h") +# SET(TARGET_SRC ${TARGET_SRC} ${TARGET_INC}) +# or switch altogether to the large project CMakeLists.txt file discussed +# in the "CMake in user projects" page accessible from the "User info" +# page of the documentation. +SET(TARGET_SRC + ${TARGET}.cc + ) + +# Usually, you will not need to modify anything beyond this point... + +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12) + +FIND_PACKAGE(deal.II 9.1.0 QUIET + HINTS ${deal.II_DIR} ${DEAL_II_DIR} ../ ../../ $ENV{DEAL_II_DIR} + ) +IF(NOT ${deal.II_FOUND}) + MESSAGE(FATAL_ERROR "\n" + "*** Could not locate a (sufficiently recent) version of deal.II. ***\n\n" + "You may want to either pass a flag -DDEAL_II_DIR=/path/to/deal.II to cmake\n" + "or set an environment variable \"DEAL_II_DIR\" that contains this path." + ) +ENDIF() + +# keep in one line +IF(NOT DEAL_II_WITH_LAPACK OR NOT DEAL_II_WITH_MPI OR NOT DEAL_II_WITH_P4EST) + MESSAGE(FATAL_ERROR " +Error! This tutorial requires a deal.II library that was configured with the following options: + DEAL_II_WITH_LAPACK = ON + DEAL_II_WITH_MPI = ON + DEAL_II_WITH_P4EST = ON +However, the deal.II library found at ${DEAL_II_PATH} was configured with these options + DEAL_II_WITH_LAPACK = ${DEAL_II_WITH_LAPACK} + DEAL_II_WITH_MPI = ${DEAL_II_WITH_MPI} + DEAL_II_WITH_P4EST = ${DEAL_II_WITH_P4EST} +which conflict with the requirements." + ) +ENDIF() + +DEAL_II_INITIALIZE_CACHED_VARIABLES() +PROJECT(${TARGET}) +DEAL_II_INVOKE_AUTOPILOT() diff --git a/examples/step-66/doc/builds-on b/examples/step-66/doc/builds-on new file mode 100644 index 0000000000..75a341ba05 --- /dev/null +++ b/examples/step-66/doc/builds-on @@ -0,0 +1 @@ +step-15 step-37 diff --git a/examples/step-66/doc/intro.dox b/examples/step-66/doc/intro.dox new file mode 100644 index 0000000000..dd15ea57fb --- /dev/null +++ b/examples/step-66/doc/intro.dox @@ -0,0 +1,9 @@ +
+ +This program was contributed by Fabian Castelli and Timo Heister. + + +

Introduction

+ +Please note: This is work in progress and will be an example for a non-linear problem +solved in parallel with matrix-free geometric multigrid. diff --git a/examples/step-66/doc/kind b/examples/step-66/doc/kind new file mode 100644 index 0000000000..6816e9090f --- /dev/null +++ b/examples/step-66/doc/kind @@ -0,0 +1 @@ +unfinished diff --git a/examples/step-66/doc/results.dox b/examples/step-66/doc/results.dox new file mode 100644 index 0000000000..b5eaba9377 --- /dev/null +++ b/examples/step-66/doc/results.dox @@ -0,0 +1,2 @@ +

Results

+ diff --git a/examples/step-66/doc/tooltip b/examples/step-66/doc/tooltip new file mode 100644 index 0000000000..525365d052 --- /dev/null +++ b/examples/step-66/doc/tooltip @@ -0,0 +1 @@ +Parallel matrix-free geometric multigrid for a nonlinear problem. diff --git a/examples/step-66/step-66.cc b/examples/step-66/step-66.cc new file mode 100644 index 0000000000..c71f20c226 --- /dev/null +++ b/examples/step-66/step-66.cc @@ -0,0 +1,53 @@ +/* --------------------------------------------------------------------- + * + * Copyright (C) 2003 - 2018 by the deal.II authors + * + * This file is part of the deal.II library. + * + * The deal.II library is free software; you can use it, redistribute + * it, and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * The full text of the license can be found in the file LICENSE.md at + * the top level directory of deal.II. + * + * --------------------------------------------------------------------- + * + * Authors: Fabian Castelli, KIT + * Timo Heister, University of Utah + */ + +// @note: This is work in progress and will be an example for a non-linear +// problem solved in parallel with matrix-free geometric multigrid. For now, +// this is just step-1. + +#include +#include +#include +#include +#include + +#include +#include +#include + +using namespace dealii; + +void first_grid() +{ + Triangulation<2> triangulation; + + GridGenerator::hyper_cube(triangulation); + triangulation.refine_global(4); + + std::ofstream out("grid-1.eps"); + GridOut grid_out; + grid_out.write_eps(triangulation, out); + std::cout << "Grid written to grid-1.eps" << std::endl; +} + + +int main() +{ + first_grid(); +} -- 2.39.5