]> https://gitweb.dealii.org/ - dealii.git/commitdiff
step-66: a nonlinear, parallel matrix-free example [WIP]
authorTimo Heister <timo.heister@gmail.com>
Fri, 17 May 2019 16:34:02 +0000 (10:34 -0600)
committerMatthias Maier <tamiko@43-1.org>
Tue, 18 May 2021 19:54:33 +0000 (14:54 -0500)
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 [new file with mode: 0644]
examples/step-66/doc/builds-on [new file with mode: 0644]
examples/step-66/doc/intro.dox [new file with mode: 0644]
examples/step-66/doc/kind [new file with mode: 0644]
examples/step-66/doc/results.dox [new file with mode: 0644]
examples/step-66/doc/tooltip [new file with mode: 0644]
examples/step-66/step-66.cc [new file with mode: 0644]

diff --git a/examples/step-66/CMakeLists.txt b/examples/step-66/CMakeLists.txt
new file mode 100644 (file)
index 0000000..423238b
--- /dev/null
@@ -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 (file)
index 0000000..75a341b
--- /dev/null
@@ -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 (file)
index 0000000..dd15ea5
--- /dev/null
@@ -0,0 +1,9 @@
+<br>
+
+<i>This program was contributed by Fabian Castelli and Timo Heister.</i>
+
+<a name="Intro"></a>
+<h1>Introduction</h1>
+
+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 (file)
index 0000000..6816e90
--- /dev/null
@@ -0,0 +1 @@
+unfinished
diff --git a/examples/step-66/doc/results.dox b/examples/step-66/doc/results.dox
new file mode 100644 (file)
index 0000000..b5eaba9
--- /dev/null
@@ -0,0 +1,2 @@
+<h1>Results</h1>
+
diff --git a/examples/step-66/doc/tooltip b/examples/step-66/doc/tooltip
new file mode 100644 (file)
index 0000000..525365d
--- /dev/null
@@ -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 (file)
index 0000000..c71f20c
--- /dev/null
@@ -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 <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/grid_out.h>
+
+#include <iostream>
+#include <fstream>
+#include <cmath>
+
+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();
+}

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.