From: bangerth Date: Mon, 14 Jul 2014 14:37:56 +0000 (+0000) Subject: Start a new tutorial on geometry. X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e1331bb34cdf477e8c3ef2b40a97e4cb8acc6d8;p=dealii-svn.git Start a new tutorial on geometry. git-svn-id: https://svn.dealii.org/trunk@33165 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/examples/step-53/CMakeLists.txt b/deal.II/examples/step-53/CMakeLists.txt new file mode 100644 index 0000000000..75c2b901f8 --- /dev/null +++ b/deal.II/examples/step-53/CMakeLists.txt @@ -0,0 +1,39 @@ +## +# CMake script for the step-1 tutorial program: +## + +# Set the name of the project and target: +SET(TARGET "step-53") + +# 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.8) + +FIND_PACKAGE(deal.II 8.2 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() + +DEAL_II_INITIALIZE_CACHED_VARIABLES() +PROJECT(${TARGET}) +DEAL_II_INVOKE_AUTOPILOT() diff --git a/deal.II/examples/step-53/doc/builds-on b/deal.II/examples/step-53/doc/builds-on new file mode 100644 index 0000000000..2302bdb7e5 --- /dev/null +++ b/deal.II/examples/step-53/doc/builds-on @@ -0,0 +1 @@ +step-49 diff --git a/deal.II/examples/step-53/doc/intro.dox b/deal.II/examples/step-53/doc/intro.dox new file mode 100644 index 0000000000..1518606e43 --- /dev/null +++ b/deal.II/examples/step-53/doc/intro.dox @@ -0,0 +1,3 @@ + +

Introduction

+ diff --git a/deal.II/examples/step-53/doc/kind b/deal.II/examples/step-53/doc/kind new file mode 100644 index 0000000000..15a13db451 --- /dev/null +++ b/deal.II/examples/step-53/doc/kind @@ -0,0 +1 @@ +basic diff --git a/deal.II/examples/step-53/doc/results.dox b/deal.II/examples/step-53/doc/results.dox new file mode 100644 index 0000000000..b5eaba9377 --- /dev/null +++ b/deal.II/examples/step-53/doc/results.dox @@ -0,0 +1,2 @@ +

Results

+ diff --git a/deal.II/examples/step-53/doc/tooltip b/deal.II/examples/step-53/doc/tooltip new file mode 100644 index 0000000000..5e77ecb288 --- /dev/null +++ b/deal.II/examples/step-53/doc/tooltip @@ -0,0 +1 @@ +Geometry: Dealing with curved boundaries. diff --git a/deal.II/examples/step-53/step-53.cc b/deal.II/examples/step-53/step-53.cc new file mode 100644 index 0000000000..d91bff1197 --- /dev/null +++ b/deal.II/examples/step-53/step-53.cc @@ -0,0 +1,100 @@ +/* --------------------------------------------------------------------- + * $Id$ + * + * Copyright (C) 2014 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 at + * the top level of the deal.II distribution. + * + * --------------------------------------------------------------------- + + * + * Author: Wolfgang Bangerth, Texas A&M University, 2014 + */ + +#include +#include +#include +#include + +#include + + +using namespace dealii; + + +class SineBoundary : public Boundary<3> +{ +public: + virtual + Point<3> + get_new_point_on_line (const typename Triangulation<3>::line_iterator &line) const; + + virtual + Point<3> + get_new_point_on_quad (const typename Triangulation<3>::quad_iterator &quad) const; +}; + + +Point<3> +SineBoundary:: +get_new_point_on_line (const typename Triangulation<3>::line_iterator &line) const +{ + const double new_x = (line->vertex(0)[0] + line->vertex(1)[0]) / 2; + const double new_y = (line->vertex(0)[1] + line->vertex(1)[1]) / 2; + const double new_z = 1 + + 0.05 * std::sin (2 * numbers::PI * new_x) + + 0.05 * std::sin (2 * numbers::PI * new_y); + return Point<3> (new_x, new_y, new_z); +} + + +Point<3> +SineBoundary:: +get_new_point_on_quad (const typename Triangulation<3>::quad_iterator &quad) const +{ + const double new_x = (quad->vertex(0)[0] + quad->vertex(1)[0] + + quad->vertex(2)[0] + quad->vertex(3)[0]) / 4; + const double new_y = (quad->vertex(0)[1] + quad->vertex(1)[1] + + quad->vertex(2)[1] + quad->vertex(3)[1]) / 4; + const double new_z = 1 + + 0.05 * std::sin (2 * numbers::PI * new_x) + + 0.05 * std::sin (2 * numbers::PI * new_y); + return Point<3> (new_x, new_y, new_z); +} + + +void make_grid () +{ + SineBoundary sine_boundary; + + Triangulation<3> triangulation; + GridGenerator::hyper_cube (triangulation); + + triangulation.begin_active()->face(5)->set_manifold_id(1); + triangulation.set_boundary (1, sine_boundary); + + triangulation.refine_global (2); + + std::ofstream out ("mesh.mgl"); + GridOut grid_out; + grid_out.write_mathgl (triangulation, out); +} + + + + +// @sect3{The main function} + +// Finally, the main function. There isn't much to do here, only to call the +// subfunctions. +int main () +{ + make_grid (); +}