From 6620f83212e8b620dcd09f92d6726e920de8a627 Mon Sep 17 00:00:00 2001 From: wolf Date: Sun, 28 Nov 1999 19:47:59 +0000 Subject: [PATCH] Various updates. git-svn-id: https://svn.dealii.org/trunk@1954 0785d39b-7218-0410-832d-ea1e28bc413d --- .../doc/tutorial/chapter-1.elements/dofs.html | 78 +++++++----- .../chapter-1.elements/grid_creation.html | 88 +++++++++---- .../chapter-1.elements/hanging_nodes.html | 20 +-- .../chapter-1.elements/matrix_structure.html | 120 ++++++++++++++---- .../tutorial/chapter-1.elements/title.html | 3 +- .../doc/tutorial/chapter-1.elements/toc.html | 7 +- deal.II/doc/tutorial/images/sparsity_1.jpg | Bin 0 -> 36777 bytes deal.II/doc/tutorial/images/sparsity_2.jpg | Bin 0 -> 22573 bytes deal.II/doc/tutorial/index.html | 46 +++---- 9 files changed, 241 insertions(+), 121 deletions(-) create mode 100644 deal.II/doc/tutorial/images/sparsity_1.jpg create mode 100644 deal.II/doc/tutorial/images/sparsity_2.jpg diff --git a/deal.II/doc/tutorial/chapter-1.elements/dofs.html b/deal.II/doc/tutorial/chapter-1.elements/dofs.html index b86fc91d26..e5fb3575af 100644 --- a/deal.II/doc/tutorial/chapter-1.elements/dofs.html +++ b/deal.II/doc/tutorial/chapter-1.elements/dofs.html @@ -20,9 +20,12 @@

Degrees of Freedom

-Degrees of freedom - short DoFs -are virtually the most important entities you will -encounter in deal.II. Most of the task of setting up -your problem is accomplished by manipulating them. +Degrees of freedom - short DoFs - are needed to associate a numering +to the shape functions living on our triangulation. Using this +numbering, we can then interpret the discretized operator as a matrix, +where the matrix row and column numbers are identified with the DoF +numbers, and likewise the index of a vector denotes the number of the +respective degree of freedom.

For now we will only discuss how and when to number and renumber the @@ -49,7 +52,7 @@ afterwards the structure will be invalid.

How to Distribute and Renumber Degrees of Freedom

The degrees of freedom are distributed on a triangulation using the function
-void DoFHandler::distribute_dofs(const FiniteElement<dim> &)
+void DoFHandler<dim>::distribute_dofs(const FiniteElement<dim> &)
The argument to distribute_dofs is a finite element that describes how many degrees of freedom are located on vertices, lines etc. (FiniteElement objects have much more functionality than only storing @@ -74,42 +77,53 @@ The finite elements used are bilinear. #include <grid/grid_generator.h> #include <fe/fe_lib.lagrange.h> -Triangulation<dim> tr; -DoFHandler<dim> dof; -FEQ1<dim> fe; +// first build up the triangulation +Triangulation<dim> triangulation; +GridGenerator::hyper_cube (triangulation,-1,1); + +// you may want to refine the triangulation a bit here +... -GridGenerator<dim>::hyper_cube(tr,-1,1); -dof.distribute_dofs(fe); +// then associate a DoFHandler object with this triangulation... +DoFHandler<dim> dof_handler (&tria); + +// ...and distribute degrees of freedom for linear elements +FEQ1<dim> fe; +dof_handler.distribute_dofs(fe);

-For a number of solution algorithms this way of numbering is way below optimal. +For a number of solution algorithms this way of numbering is way below +optimal. In particular, as mentioned above, the degrees of freedom are +numbered starting on the active cells of coarser levels and going to +finer levels, but depending on how your triangulation was refined, the +order in which the cells are traversed will have no geometrical +pattern. Likewise, the distribution of DoF numbers will look mostly +random. +

+

+For some problems, it is better if the numbering of DoFs is roughly +into a certain direction, for example from inflow to outflow in +hyperbolic problems. To achieve a kind of numbering better suited to your problem the deal.II -offers the function
-void DoFHandler::renumber_dofs(const RenumberingMethod method,const bool use_constraints=false, const vector<int> &starting_points=vector<int>())
-or alternatively, the easier to use
-void DoFHandler::renumber_dofs(const RenumberingMethod method)
-The methods available are Cuthill_McKee and reverse_Cuthill_McKee. Both algorithms are usually better than the one used -by distribute_dofs and neither is optimal (there is no algorithm +offers the class +DoFRenumbering with several functions implementing +different ways of renumbering. +The methods presently available are Cuthill-McKee and reverse +Cuthill-McKee, and some other methods you will only want to ask for in +more advanced applications. The first two algorithms are usually much +better than the one used +by distribute_dofs, but neither is optimal (there is no algorithm that accomplishes optimal results within a reasonable amount of time). -Both algorithms require a good index to start with to achieve good results. -Whenever you know a good set of starting indices you might wish to use the -first way of calling renumber_dofs, -in every other case the second way is more advisable. -

-Example: We use the definitions from the -first example given above. We renumber our -degrees of freedom with the -Cuthill_McKee method. +Both algorithms require a good point to start numbering from (for +example one or more degrees of freedom on the inflow boundary) to +achieve good results.

-
-
-dof.renumber_dofs(Cuthill_McKee);
-
-
- -

Access to triangulation cells, faces and vertices

+

+The documentation of the DoFRenumbering gives a good +overview of how the methods mentioned above work, and how the +functions performing the re-enumerations have to be called. diff --git a/deal.II/doc/tutorial/chapter-1.elements/grid_creation.html b/deal.II/doc/tutorial/chapter-1.elements/grid_creation.html index d62a59f8f9..2723502a42 100644 --- a/deal.II/doc/tutorial/chapter-1.elements/grid_creation.html +++ b/deal.II/doc/tutorial/chapter-1.elements/grid_creation.html @@ -17,30 +17,40 @@

Different kinds of grids

-All numerics are done on a grid. +The numerics for which this library was written is always done on a grid. Choosing the right kind of grid can be essential for solving your problem. A grid should be chosen to fit your problem space in the best way possible. This chapter describes coarse grids for the triangulation of your domain.

-

Please remember throughout this chapter: -A triangulation must be void before it is initialized ! -

-deal.II offers three fundamental grid types: +deal.II offers various ways to produce grids for +standard domains, such as a hypercube, a hyperball -and a hyper_L. Furthermore it is possible to +and a hyper_L. There may be more in the meantime (for +example I can now see a ring domain), and you may want to check out +the documentation of the GridGenerator class for this. +

+Furthermore it is possible to read a triangulation from a ucd-file or generate a custom grid from within a program.

+

We note before actually going to some code snippets that +a triangulation object must be empty before it is initialized with a +grid. However, you need not fear now, since the library will tell you +if you try to initialize a triangulation which is already initialized; +in general, the library will warn you about almost all errors you do, +since in the debug version there are very many checks. +

Hypercube

A hypercube can be created using the function
-void GridGenerator<dim>::hyper_cube(Triangulation<dim> &tria,const double left=0.,const double right=1.)
+void GridGenerator::hyper_cube(Triangulation<dim> &tria,const double left=0.,const double right=1.)
The cube created is the tensor product of the left and right edges which default to 0 and 1, creating the unit hypercube. The hypercube will consist of -exactly one cell. In two dimensions, this amounts to a unit square, in three, to a unit cube. +exactly one cell. In two dimensions, this amounts to a unit square, in +three, to a unit cube. In one dimension, you simply get a line.

@@ -60,10 +70,10 @@ function calls needed. Be sure to use them in their appropriate places. #include <grid/tria.h> #include <grid/grid_generator.h> -const unsigned int dim=2; // Two dimensions; to create a cube set to three -Triangulation<dim> tr; +const unsigned int dim=2; // Two dimensions; to create a cube set to dim=3 +Triangulation<dim> triangulation; -GridGenerator<dim>::hyper_cube(tr,-1,1); +GridGenerator::hyper_cube (triangulation, -1, 1); @@ -71,7 +81,7 @@ GridGenerator<dim>::hyper_cube(tr,-1,1);

Hyperball

A hyperball can be created using the function
-void GridGenerator<dim>::hyper_ball(Triangulation<dim> &tria,const Point<dim> center=0.,const double radius=1.)
+void GridGenerator::hyper_ball(Triangulation<dim> &tria,const Point<dim> center=0.,const double radius=1.)
This will create a hyperball of given centre and radius where the location of the centre defaults to the origin and the radius to unity.

@@ -95,14 +105,21 @@ This example will create a hyperball with unit radius centred on (1,0). #include <base/point.h> const unsigned int dim=2; // For example -Triangulation<dim> tr; +Triangulation<dim> triangulation; Point<dim> centre(1,0); // Taking (1,0) as the centre of the ball -GridGenerator<dim>::hyper_ball(tr,centre,1); +GridGenerator::hyper_ball (triangulation, centre, 1); +As can be seen above, the unrefined ball (or circle) does not look +very much like a ball (or circle). After several refinement +steps, it looks much better, though. However, along the rays pointing +outward in the initial grid, the cells ar distorted even in the fine +grid and if you want to do high-accuracy computations on circles, you +may want to use a better coarse grid than the one on the left. +

Hyper-L

@@ -123,7 +140,11 @@ can be used to test the efficiency of error estimators.

- + @@ -141,9 +162,9 @@ This example will create the default hyper-L. #include <grid/grid_generator.h> const unsigned int dim=2; // For example -Triangulation<dim> tr; +Triangulation<dim> triangulation; -GridGenerator<dim>::hyper_L(tr,-1,1); +GridGenerator::hyper_L (triangulation, -1, 1); @@ -151,14 +172,21 @@ GridGenerator<dim>::hyper_L(tr,-1,1);

Reading a grid from a file

In many problems taken from real life you will find those grid types -insufficient and you will need to create your own grid. Fortunately, -this is possible. deal.II offers the possibility of +insufficient and you will need to create your own grid. +This is possible: deal.II offers the possibility of reading a complete triangulation from a file in the ucd-format used by avs. A ucd-file can be read with the function
void DataIn::read_ucd(istream&)

-

Vertex numbering in input files: +

+Since the creation of input grids is probably not something you need to do on a +daily basis, we will only very briefly describe the format of the +input file. More information can be found in the documentation of the +GridIn class. +

+

+Vertex numbering in input files: The vertex numbering must start at the vertex with the lowest number for lines and be counterclockwise for quads. Also, faces between adjacent cells must face in the same direction. This must be ensured by you, or by the @@ -181,9 +209,10 @@ for creating grid cells and their properties. This is done in the order

  • boundaries
  • create a triangulation from this information
  • -You first create the vertices, then create cells by assigning vertices -to them, then you set the boundary conditions. Last you use this information -to create a triangulation. This is probably best illustrated by an example. +In fact, this is the way the functions in the +GridGenerator class use to produce the grids we have +shown above. +

    Example: Below we show the includes, definitions and @@ -229,20 +258,23 @@ for (unsigned int i=0; i<3; ++i) // to distinguish them from cell data like vertices and material. SubCellData boundary_info; -// We are using a boundary of cell number 1 +// We want to describe a line in 2d, which would be a cell in 1d, +// which is why we can use the object for a 1d cell +// (CellData<1>) for its description: boundary_info.boundary_lines.push_back (CellData<1>()); -// The boundary gets a material id of -boundary_info.boundary_lines.back().material_id = 1; +// The boundary gets a material id of 1. The boundary id of lines in 2d +// will be interpreted as the boundary id +boundary_info.boundary_lines[0].material_id = 1; -// The boundary is between vertices number 1 and 3 +// The boundary is between vertices number 0 and 3 boundary_info.boundary_lines[0].vertices[0] = 0; boundary_info.boundary_lines[0].vertices[1] = 3; // From this information the triangulation is created coarse_grid->create_triangulation (vector<Point<2> >(&vertices[0], &vertices[8]), - cells, boundary_info); + cells, boundary_info); diff --git a/deal.II/doc/tutorial/chapter-1.elements/hanging_nodes.html b/deal.II/doc/tutorial/chapter-1.elements/hanging_nodes.html index 16edd8c19d..e324d1905b 100644 --- a/deal.II/doc/tutorial/chapter-1.elements/hanging_nodes.html +++ b/deal.II/doc/tutorial/chapter-1.elements/hanging_nodes.html @@ -19,16 +19,17 @@

    Hanging Nodes

    -This chapter discusses locally refined grids, which are the only ones with -hanging nodes. A node is called hanging if its value is subject to a -constraint. -In particular, nodes on the boundary of your domain -are not hanging. +This chapter discusses one aspect of locally refined grids. Using the +approach chosen in deal.II, grids are produced with +so-called hanging nodes. +A node is called hanging if its value is subject to a +constraint induced by the requirement of globally continuous +functions. We will make this clearer in the following. -

    When do you get hanging nodes ?

    +

    When do you get hanging nodes?

    -You get hanging nodes after each refinement. Hanging nodes are those that +You get hanging nodes after some refinements. Hanging nodes are those that are situated on the boundary of a larger active cell. The global function is assumed to be linear on the boundary of each active cell, therefore the value @@ -63,6 +64,9 @@ with function values x1 and x2. If you get a hanging node on this boundary during refinement it will be situated in the middle and therefore its value - the value of the function on the boundary at this point - will be x3 = 1/2 (x1+x2). +The value x3 is therefore not a free degree of freedom, +but it is bound by this constraining equation and we will have to take +this into account.

    Mathematical implications, or
    @@ -107,7 +111,7 @@ or, taking

    It is not possible to generate ~A directly, but -w can generate A and condense it to ~A +we can generate A and condense it to ~A using the constraints, solve the system and obtain u by u=Cy.

    diff --git a/deal.II/doc/tutorial/chapter-1.elements/matrix_structure.html b/deal.II/doc/tutorial/chapter-1.elements/matrix_structure.html index 61838520ff..d2f2d86817 100644 --- a/deal.II/doc/tutorial/chapter-1.elements/matrix_structure.html +++ b/deal.II/doc/tutorial/chapter-1.elements/matrix_structure.html @@ -28,6 +28,28 @@ very large, and therefore storage is expensive in terms of memory. providing means of generating memory efficient structures for sparse matrices where only non-zero elements are stored.

    +

    +To show only two example of matrices which are quite typical of finite +element discretizations of partial differential equations, we present +the following two graphics, in which each dot represents a non-zero +entry of the matrix: +

    +

    + Sparsity 1 + Sparsity 2 +

    +

    +The first is a 300x300 matrix, the second has approximately 4000 rows +and columns. As can be seen, the vast majority of entries is zero, and +we can also guess that the proportion of zeroes is even growing as the +matrix size is increased (this is in fact so, but can not so clearly +be seen from the pictures, admittedly). The equation discretized to +yield these matrices is rather complex, so the number of non-zero +entries per row is quite large for finite element matrices. +Both matrices were derived after renumbering of the degrees of freedom +using the algorithm of Cuthill-McKee, which concentrates the entries +around the diagonal of the matrix. +

    Ways of dealing with matrix structures provided by deal.II

    @@ -44,16 +66,49 @@ tell the matrix for which elements to allocate memory. The deal.II function initializing a standard sparse matrix structure is void SparseMatrixStruct::reinit(const unsigned int m, const unsigned int n, const unsigned int max_per_row). It takes as its arguments the size of the matrix in question and the maximum number of non-zero elements -in one row. -This number can be calculated with -int DoFHandler::max_couplings_between_dofs(). -Beware: This function was written to cope with refined grids only ! -If your grid consists exclusively of cells next to boundaries its -return value will be wrong. -This matrix structure can then be used to generate a matrix using -void SparseMatrix::reinit(const SparseMatrixStruct &sparsity). -In cases of locally refined grids you will also need to take care of the constraints to your -matrix given by the hanging nodes. +in one row. This first sets up a blank sparsity pattern which, +however, has as yet no information which entries are non-zero. +

    +

    +Before going on with showing how to find out which elements are +non-zero, we have to talk about how to find out about the maximum +number of non-zero entries per row which we will need for our matrix. +Since this number depends of the actual finite element used (higher +order elements need more non-zero entries than linear elements, for +example), of the equation under consideration, and of some properties +of the triangulation on which we want to do our computations. Since +all these factors can't be considered by the user all the time, there +is a library function which does the necessary computations for you: +unsigned int DoFHandler::max_couplings_between_dofs(). +We note that this function was written to cope with refined grids, and +if you only have structured grids without local refinement and hanging +nodes, the result of this function will overestimate the maximal +number of non-zero entries per row. +

    +

    +After having fixed the basic properties of the sparsity structure, we +can tell it which entries actually are non-zero. This is again done +using a library function, +DoFHandler::make_sparsity_pattern. Then we have to take +into account that constraints due to hanging nodes (see the previous +chapter) add some more non-zero entries, which is again done using +some library functions (see the example below). After this, we can +instruct the sparsity pattern to throw out all unused elements +(in those rows where the actual number of non-zero elements is less +than the maximal number given to reinit, we can discard +the unused one to save some more memory). This is discussed in the +next subsection. +

    +

    +This matrix structure can then be used to serve as sparsity pattern to +one or several matrices using +void SparseMatrix::reinit(const SparseMatrixStruct&sparsity). +We note the distinction that the SparseMatrixStruct only +stores the places of the non-zero elements, while the +SparseMatrix actually stores the values of these +elements. The separation was made since often several matrices are +needed with the same sparsity pattern, but different entry values; +this way, we can save some memory space.

    @@ -68,25 +123,29 @@ appropriate places. This example initializes a sparse square matrix structure. const unsigned int dim=2; // For example -SparseMatrixStruct<double> sparsity_pattern; -DoFHandler<dim> dof; -ConstraintMatrix hanging_nodes; // Only necessary for locally refined grids +SparseMatrixStruct sparsity_pattern; +DoFHandler<dim> dof_handler; -// Your degrees of freedom must already be distributed +// set up a triangulation, refine it, associate the DoFHandler object +// shown above to it, and distribute the degrees of freedom +... -sparsity_pattern.reinit(dof.n_dofs(),dof.n_dofs(),dof.max_couplings_between_dofs()); +// now fix the size of the matrix and the maximal number +// of non-zero entries: +sparsity_pattern.reinit (dof_handler.n_dofs(), + dof_handler.n_dofs(), + dof_handler.max_couplings_between_dofs()); + +// tell the sparsity pattern which entries are non-zero: +dof_handler.make_sparsity_pattern (sparsity_pattern); // Condense the hanging nodes into -// the matrix, taking into account the constraints to the hanging nodes. -// This must be done before the matrix structure is compressed, but only -// on locally refined grids. +// the matrix structure, taking into account the constraints due to +// the hanging nodes. // You can skip this part if your grid is not locally refined. - -dof.make_sparsity_pattern(sparsity_pattern); -hanging_nodes.clear(); -dof.make_constraint_matrix(hanging_nodes); -hanging_nodes.condense(sparsity_pattern); - +ConstraintMatrix hanging_nodes; +dof_handler.make_constraint_matrix(hanging_nodes); +hanging_nodes.condense (sparsity_pattern); @@ -127,6 +186,19 @@ sparsity_pattern.compress(); +

    More complex matrices

    + +Finally, we note that in some cases not all variables in a system of +partial differential equations couple to each other, or that the +operators have a special structure. For this reason, there are more +specialized version of the +DoFHandler::make_sparsity_pattern and +SparseMatrixStruct::reinit functions, which allow you to +more flexibly determine the actual number of non-zero elements of all +or individual rows. See the documentation of the respective classes +for more information. + +
    Hyper-L in three dimensions +Hyper-L in three dimensions (not a good picture, since the proportions +of short and long lines is not exactly one half, but you might get a +clue about it) +
    Hyper-L
    diff --git a/deal.II/doc/tutorial/chapter-1.elements/title.html b/deal.II/doc/tutorial/chapter-1.elements/title.html index 52150dac85..08e3cc5c6a 100644 --- a/deal.II/doc/tutorial/chapter-1.elements/title.html +++ b/deal.II/doc/tutorial/chapter-1.elements/title.html @@ -19,7 +19,8 @@ -

    The deal.II tutorial - Chapter 0 - Structure of a Finite Element Program

    +

    The deal.II tutorial - Chapter 0 - Basic +Elements of a Finite Element Program

    diff --git a/deal.II/doc/tutorial/chapter-1.elements/toc.html b/deal.II/doc/tutorial/chapter-1.elements/toc.html index 94b5781858..48b793463f 100644 --- a/deal.II/doc/tutorial/chapter-1.elements/toc.html +++ b/deal.II/doc/tutorial/chapter-1.elements/toc.html @@ -11,17 +11,18 @@ -

    Structure of a Finite Element Program

    +

    Basic Elements of a Finite Element Program

    About this tutorial

    This part of the deal.II documentation will discuss -how to build a finite element program. We will take a look at the general +some building blocks of a finite element program. We will take a look at the general structure of programs of this kind and at the various possibilities in that respect offered by deal.II. The order of the table of contents below reflects the order in which you need to perform the tasks. Some things may be left out according to -your needs. +your needs. The application in actual programs can be found in other +chapters of this tutorial.

    Table of contents

    diff --git a/deal.II/doc/tutorial/images/sparsity_1.jpg b/deal.II/doc/tutorial/images/sparsity_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0f1c070f194fdbd7e80ab8e3790c46eb5cbf75f GIT binary patch literal 36777 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 WKN|*wM9?~AQ{Qf5#7pr%jQj_`%Yifi literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/index.html b/deal.II/doc/tutorial/index.html index 96be3330a3..8f66c1ea3e 100644 --- a/deal.II/doc/tutorial/index.html +++ b/deal.II/doc/tutorial/index.html @@ -9,24 +9,11 @@ - Deal Logo + Deal Logo

      The deal.II Tutorial

      or deal.II in several easy and some more hard lessons

      -

      Prerequisites

      -
      -

      - You yourself should have some background knowledge on numerical methods, finite - elements and C++. -

      -

      Usage of this document

      This tutorial is split into several parts, starting with an outline of @@ -43,28 +30,37 @@

      On deal.II

      deal.II is short for Differential Equations Analysis Library, version II, - which says it all, really. Its purpose it the solution of partial differential - equations on unstructured grids with error control. You can find more + which says it all, really. Its purpose is the solution of partial differential + equations on unstructured, locally refined grids with error control. You can find more information on deal.II and some examples at - - http://gaia.iwr.uni-heidelberg.de/~deal/. deal.II was written - by the numerics group at the IWR, University of Heidelberg. + the + deal.II homepage . + deal.II was written + by the numerics group at the IWR, University of Heidelberg, + mainly by Wolfgang Bangerth and in parts by Guido Kanschat, but + several others have contributed as well.

      -

      Chapter 0: Structure of a - Finite Element Program

      + +

      + The structure of this tutorial is as follows: +

      + +

      Chapter 0: Basic Elements of a + Finite Element Program

      (also available in a version without frames)

      We will discuss the various elements needed for a working - finite element program and some of the possibilitier + finite element program and some of the possibilities deal.II offers in this respect.

      -

      Chapter 1: The Laplace - Problem

      +

      Chapter 1: The very simple Laplace + Problem

      (also available in a version without frames)

      + *********** We will solve the stationary Laplace problem on a square grid with boundary conditions of the form cos(2*PI*x)cos(2*PI*y). You can also obtain the source code. @@ -87,7 +83,7 @@


      - Jan Schrage
      + The deal.II group

      Last modified: $Date$

      -- 2.39.5

      - This tutorial is written in HTML - 4.0 which your browser may or may not support. If you run into problems - you are advised to try a recent browser or one that is able to parse Document - Type Definitions. The reason for this is the math support of HTML 4.0. Most - people should, however, not run into any - problems.