From f54c66a1a75e81f58273592a7636120a8ec5e9b7 Mon Sep 17 00:00:00 2001 From: wolf Date: Sun, 9 Jan 2000 17:18:02 +0000 Subject: [PATCH] Add step-8. git-svn-id: https://svn.dealii.org/trunk@2174 0785d39b-7218-0410-832d-ea1e28bc413d --- .../examples/step-by-step/step-8/Makefile | 94 ++ .../examples/step-by-step/step-8/step-8.cc | 961 ++++++++++++++++++ .../step-8.data/displacement-vectors.jpg | Bin 0 -> 44691 bytes .../step-8.data/displacement-x.jpg | Bin 0 -> 19115 bytes .../step-8.data/displacement-y.jpg | Bin 0 -> 17888 bytes .../step-8.data/final-grid.jpg | Bin 0 -> 51549 bytes .../chapter-2.step-by-step/step-8.intro | 58 ++ .../chapter-2.step-by-step/step-8.results | 49 + deal.II/examples/step-8/Makefile | 94 ++ deal.II/examples/step-8/step-8.cc | 961 ++++++++++++++++++ 10 files changed, 2217 insertions(+) create mode 100644 deal.II/deal.II/Attic/examples/step-by-step/step-8/Makefile create mode 100644 deal.II/deal.II/Attic/examples/step-by-step/step-8/step-8.cc create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/displacement-vectors.jpg create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/displacement-x.jpg create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/displacement-y.jpg create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/final-grid.jpg create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-8.intro create mode 100644 deal.II/doc/tutorial/chapter-2.step-by-step/step-8.results create mode 100644 deal.II/examples/step-8/Makefile create mode 100644 deal.II/examples/step-8/step-8.cc diff --git a/deal.II/deal.II/Attic/examples/step-by-step/step-8/Makefile b/deal.II/deal.II/Attic/examples/step-by-step/step-8/Makefile new file mode 100644 index 0000000000..8753051799 --- /dev/null +++ b/deal.II/deal.II/Attic/examples/step-by-step/step-8/Makefile @@ -0,0 +1,94 @@ +# $Id$ +# Copyright W. Bangerth, University of Heidelberg, 1999 + +# Template for makefiles for the examples subdirectory. In principle, +# everything should be done automatically if you set the target file +# here correctly. We get deduce it from the files in the present +# directory: +target = $(basename $(shell echo step-*.cc)) + +# All dependencies between files should be updated by the included +# file Makefile.dep if necessary. Object files are compiled into +# the archives ./Obj.a and ./Obj.g.a. By default, the debug version +# is used to link. It you don't like that, change the following +# variable to "off" +debug-mode = on + + + +############################################################################### +# Internals + +#deal include base path +D = ../../../.. + +include $D/common/Make.global_options + +# get lists of files we need + + +# list of libraries needed to link with +libs = -ldeal_II_2d -llac -lbase +libs.g = -ldeal_II_2d.g -llac.g -lbase.g + + +# check whether we use debug mode or not +ifeq ($(debug-mode),on) + libraries = $(target).go $(libs.g) + flags = $(CXXFLAGS.g) +else + libraries = $(target).go $(libs) + flags = $(CXXFLAGS.o) +endif + + + +# make rule for the target. $^ is the object file $(target).g?o +$(target) : $(libraries) + @echo ============================ Linking $@ + @$(CXX) $(flags) -o $@ $^ + +# rule how to run the program +run: $(target) + @echo ============================ Running $< + @./$(target) + + +# rule to make object files +%.go : %.cc + @echo ============================ Compiling with debugging information: $< + @$(CXX) $(CXXFLAGS.g) -c $< -o $@ +%.o : %.cc + @echo ============================ Compiling with optimization: $< + @$(CXX) $(CXXFLAGS) -c $< -o $@ + + +clean: + -rm -f *.o *.go *~ Makefile.dep $(target) *gmv *gnuplot *gpl *eps + + + +.PHONY: clean + + +# Rule to generate the dependency file. This file is +# automagically remade whenever needed, i.e. whenever +# one of the cc-/h-files changed. Make detects whether +# to remake this file upon inclusion at the bottom +# of this file. +# +# Since the script prefixes the output names by lib/g?o, we have to +# strip that again (the script was written for the main libraries and +# large projects where object files are put into subdirs) +Makefile.dep: $(target).cc Makefile \ + $(shell echo $D/base/include/base/*.h \ + $D/lac/include/lac/*.h \ + $D/deal.II/include/*/*.h) + @echo ============================ Remaking Makefile + @perl $D/common/scripts/make_dependencies.pl $(INCLUDE) $(target).cc \ + | perl -pi -e 's!lib/g?o/!!g;' \ + > Makefile.dep + + +include Makefile.dep + diff --git a/deal.II/deal.II/Attic/examples/step-by-step/step-8/step-8.cc b/deal.II/deal.II/Attic/examples/step-by-step/step-8/step-8.cc new file mode 100644 index 0000000000..9fac1af41e --- /dev/null +++ b/deal.II/deal.II/Attic/examples/step-by-step/step-8/step-8.cc @@ -0,0 +1,961 @@ +/* $Id$ */ +/* Author: Wolfgang Bangerth, University of Heidelberg, 2000 */ + + // As usual, the first few include + // files are already known, so we + // will not comment on them further. +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + // In this example, we need + // vector-valued finite elements. The + // suuport for these can be found in + // the following include file: +#include + // We will compose the vector-valued + // finite elements from regular Q1 + // elements which can be found here, + // as usual: +#include + + // This again is C++: +#include + + + // The main class is, except for its + // name, almost unchanged with + // respect to the step-6 example. The + // only change is the use of a + // different class for the ``fe'' + // variable. +template +class ElasticProblem +{ + public: + ElasticProblem (); + ~ElasticProblem (); + void run (); + + private: + void setup_system (); + void assemble_system (); + void solve (); + void refine_grid (); + void output_results (const unsigned int cycle) const; + + Triangulation triangulation; + DoFHandler dof_handler; + + // Instead of a concrete finite + // element class such as + // ``FEQ1'', we now use a more + // generic one, ``FESystem''. In + // fact, it is not a finite + // element itself, but rather a + // class that can be used to + // stack several usual elements + // together to form one + // vector-valued finite + // element. In our case, we will + // compose the vector-valued + // element of ``FEQ1'' objects, + // as shown below in the + // constructor of this class. + FESystem fe; + + ConstraintMatrix hanging_node_constraints; + + SparseMatrixStruct sparsity_pattern; + SparseMatrix system_matrix; + + Vector solution; + Vector system_rhs; +}; + + + // Before going over to the + // implementation of the main class, + // we declare and define the class + // which describes the right hand + // side. This time, the right hand + // side is vector-valued, as is the + // solution, so we will describe the + // new elements in some more detail. +template +class RightHandSide : public Function +{ + public: + // The first thing is that + // vector-valued functions have a + // constructor, since they need + // to pass down to the base class + // of how many components the + // function consists. The default + // value in the constructor of + // the base class is one, so we + // need not define a constructor + // for the usual scalar function. + RightHandSide (); + + // The next function is a + // replacement for the ``value'' + // function of the previous + // examples. There, a second + // parameter ``component'' was + // given, which denoted which + // component was requested. Here, + // we implement a function that + // returns the whole vector of + // values at the given place at + // once. + virtual void vector_value (const Point &p, + Vector &values) const; + + // Then, in analogy to the + // ``value_list'' function, there + // is a function + // ``vector_value_list'', which + // returns the values of the + // vector-valued function at + // several points at once: + virtual void vector_value_list (const vector > &points, + vector > &value_list) const; +}; + + + // This is the constructor of the + // right hand side class. As said + // above, it only passes down to the + // base class the number of + // components, which is ``dim'' in + // the present case. Note that + // although the implementation is + // very short here, we do not move it + // into the class declaration, since + // our style guides require that + // inside the class declaration only + // declarations have to happen and + // that definitions are always to be + // found outside. +template +RightHandSide::RightHandSide () : + Function (dim) +{}; + + + // This is the function that returns + // the whole vector of values at the + // point ``p'' at once: +template +inline +void RightHandSide::vector_value (const Point &p, + Vector &values) const +{ + // To prevent cases where the + // return value has not previously + // been set to the right size + // (which is kind of a convention + // in the deal.II library), we test + // for this case and otherwise + // throw an exception: + Assert (values.size() == dim, + ExcVectorHasWrongSize (values.size(), dim)); + // Likewise, if by some accident + // someone tried to compile and run + // the program in only one space + // dimension (in which the elastic + // equations do not make much sense + // since they reduce to the + // ordinary Laplace equation), we + // terminate the program if the + // dimension is not as expected. + Assert (dim >= 2, ExcInternalError()); + + // The rest of the function is as + // would probably be expected given + // the form of the right hand side + // function. First we define the + // centers of the two points around + // which are the sources of + // x-displacement, i.e. (0.5,0) and + // (-0.5,0). Note that upon + // construction of the ``Point'' + // objects, all components are set + // to zero. + Point point_1, point_2; + point_1(0) = 0.5; + point_2(0) = -0.5; + + // If now the point ``p'' is in the + // circle of radius 0.2 around one + // of these points, then set the + // force in x-direction to one, + // otherwise to zero: + if (((p-point_1).square() < 0.2*0.2) || + ((p-point_2).square() < 0.2*0.2)) + values(0) = 1; + else + values(0) = 0; + + // Likewise, if ``p'' is in the + // vicinity of the origin, then set + // the y-force to 1, otherwise to + // zero: + if (p.square() < 0.2*0.2) + values(1) = 1; + else + values(1) = 0; +}; + + + + // Now, this is the function of the + // right hand side class that returns + // the values at several points at + // once. +template +void RightHandSide::vector_value_list (const vector > &points, + vector > &value_list) const +{ + // First we define an abbreviation + // for the number of points which + // we shall work on: + const unsigned int n_points = points.size(); + + // Then we check whether the number + // of output slots has been set + // correctly, i.e. to the number of + // input points: + Assert (value_list.size() == n_points, + ExcVectorHasWrongSize (value_list.size(), n_points)); + + // Finally we treat each of the + // points. In one of the previous + // examples, we have explained why + // the + // ``value_list''/``vector_value_list'' + // function had been introduced: to + // prevent us from calling virtual + // functions too frequently. On the + // other hand, we now need to + // implement the same function + // twice, which can lead to + // confusion if one function is + // changed but the other is + // not. However, we can prevent + // this situation using the + // following construct: + for (unsigned int p=0; p::vector_value (points[p], + value_list[p]); + // It calls the ``vector_value'' + // function defined above for each + // point, and thus preempts all + // chances for inconsistency. It is + // important to note how the + // function was called: using the + // full class qualification using + // ``RightHandSide::'', since this + // calls the function directly and + // not using the virtual function + // table. The call is thus as fast + // as a call to any non-virtual + // function. In addition, we have + // declared the ``vector_value'' + // function ``inline'', i.e. the + // compiler can remove the function + // call altogether and the + // resulting code can in principle + // be as fast as if we had + // duplicated the code. +}; + + + + +template +ElasticProblem::ElasticProblem () : + dof_handler (triangulation), + // As said before, we + // would like to + // construct one + // vector-valued + // finite element as + // outer product of + // several scala + // finite + // elements. Of + // course, the number + // of scalar finite + // element we would + // like to stack + // together equals + // the number of + // components the + // solution function + // has, which is + // ``dim'' since we + // consider + // displacement in + // each space + // direction. The + // ``FESystem'' class + // can handle this: + // we pass it the + // finite element of + // which we would + // like to compose + // the system of, and + // how often it shall + // be repeated: + fe (FEQ1(), dim) + // In fact, the ``FESystem'' class + // has several more constructors + // which can perform more complex + // operations that just stacking + // together several scalar finite + // elements of the same type into + // one; we will get to know these + // possibilities in later examples. + // + // It should be noted that the + // ``FESystem'' object thus created + // does not actually use the finite + // element which we have passed to it + // as first parameter. We could thus + // use an anonymous object created + // in-place. The ``FESystem'' + // constructor only needs the + // parameter to deduce the type of + // the finite element from this and + // then creates objects of the + // underlying finite element type + // itself. +{}; + + + +template +ElasticProblem::~ElasticProblem () +{ + dof_handler.clear (); +}; + + + // Setting up the system of equations + // is equal to the function used in + // the step-6 example. The + // ``DoFHandler'' class and all other + // classes used take care of the + // vector-valuedness of the finite + // element themselves (in fact, the + // do not do so, since they only take + // care how many degrees of freedom + // there are per vertex, line and + // cell, and they do not askwhat they + // represent, i.e. whether the finite + // element under consideration is + // vector-valued or whether it is, + // for example, a scalar Hermite + // element with several degrees of + // freedom on each vertex). +template +void ElasticProblem::setup_system () +{ + dof_handler.distribute_dofs (fe); + hanging_node_constraints.clear (); + DoFTools::make_hanging_node_constraints (dof_handler, + hanging_node_constraints); + hanging_node_constraints.close (); + sparsity_pattern.reinit (dof_handler.n_dofs(), + dof_handler.n_dofs(), + dof_handler.max_couplings_between_dofs()); + // When making the sparsity + // pattern, there is some potential + // for optimization if not all + // components couple to all + // others. However, this is not the + // case for the elastic equations, + // so we use the standard call: + DoFTools::make_sparsity_pattern (dof_handler, sparsity_pattern); + + hanging_node_constraints.condense (sparsity_pattern); + + sparsity_pattern.compress(); + + system_matrix.reinit (sparsity_pattern); + + solution.reinit (dof_handler.n_dofs()); + system_rhs.reinit (dof_handler.n_dofs()); +}; + + + // The big changes in this program + // are in the creation of matrix and + // right hand side, since they are + // problem-dependent. We will go + // through that process step-by-step, + // since it is a bit more complicated + // than in previous examples. +template +void ElasticProblem::assemble_system () +{ + // First thing: the quadrature + // formula does not need + // modification since we still deal + // with bilinear functions. + QGauss2 quadrature_formula; + // Also, the ``FEValues'' objects + // takes care of everything for us + // (or better: it does not really + // so; as in the comment in the + // function setting up the system, + // here as well the ``FEValues'' + // object computes the same data on + // each cell, but it has some + // functionality to access data + // stored inside the finite element + // where they are precomputed upon + // construction). + FEValues fe_values (fe, quadrature_formula, + UpdateFlags(update_values | + update_gradients | + update_q_points | + update_JxW_values)); + + // The number of degrees of freedom + // per cell we now obviously ask + // from the composed finite element + // rather than from the underlying + // scalar Q1 element. Here, it is + // ``dim'' times the number of + // degrees of freedom per cell of + // the Q1 element, but this is not + // something we need to care about. + const unsigned int dofs_per_cell = fe.dofs_per_cell; + const unsigned int n_q_points = quadrature_formula.n_quadrature_points; + + FullMatrix cell_matrix (dofs_per_cell, dofs_per_cell); + Vector cell_rhs (dofs_per_cell); + + vector local_dof_indices (dofs_per_cell); + + // As was shown in previous + // examples as well, we need a + // place where to store the values + // of the coefficients at all the + // quadrature points on a cell. In + // the present situation, we have + // two coefficients, lambda and mu. + vector lambda_values (n_q_points); + vector mu_values (n_q_points); + + // Well, we could as well have + // omitted the above two arrays + // since we will use constant + // coefficients for both lambda and + // mu, which can be declared like + // this. They both represent + // functions always returning the + // constant value 1.0. Although we + // could omit the respective + // factors in the assemblage of the + // matrix, we use them here for + // purpose of demonstration. + ConstantFunction lambda(1.), mu(1.); + + // Then again, we need to have the + // same for the right hand + // side. This is exactly as before + // in previous examples. However, + // we now have a vector-valued + // right hand side, which is why + // the data type of the + // ``rhs_values'' array is + // changed. We initialize it by + // ``n_q_points'' elements, each of + // which is a ``Vector'' + // with ``dim'' elements. + RightHandSide right_hand_side; + vector > rhs_values (n_q_points, + Vector(dim)); + + + // Now we can begin with the loop + // over all cells: + DoFHandler::active_cell_iterator cell = dof_handler.begin_active(), + endc = dof_handler.end(); + for (; cell!=endc; ++cell) + { + cell_matrix.clear (); + cell_rhs.clear (); + + fe_values.reinit (cell); + + const FullMatrix + & shape_values = fe_values.get_shape_values(); + const vector > > + & shape_grads = fe_values.get_shape_grads(); + const vector + & JxW_values = fe_values.get_JxW_values(); + const vector > + & q_points = fe_values.get_quadrature_points(); + + lambda.value_list (q_points, lambda_values); + mu.value_list (q_points, mu_values); + + for (unsigned int i=0; iget_dof_indices (local_dof_indices); + for (unsigned int i=0; i boundary_values; + VectorTools::interpolate_boundary_values (dof_handler, + 0, + ZeroFunction(dim), + boundary_values); + MatrixTools::apply_boundary_values (boundary_values, + system_matrix, + solution, + system_rhs); + + hanging_node_constraints.condense (system_matrix); + hanging_node_constraints.condense (system_rhs); +}; + + + + // The solver does not care about + // where the system of equations + // comes, as long as it stays + // positive definite and symmetric + // (which are the requirements for + // the use of the CG solver), which + // the system is. Therefore, we need + // not change anything. +template +void ElasticProblem::solve () +{ + SolverControl solver_control (1000, 1e-12); + PrimitiveVectorMemory<> vector_memory; + SolverCG<> cg (solver_control, vector_memory); + + PreconditionRelaxation<> + preconditioner(system_matrix, + &SparseMatrix::template precondition_SSOR, + 1.2); + + cg.solve (system_matrix, solution, system_rhs, + preconditioner); + + hanging_node_constraints.distribute (solution); +}; + + + + // The function that does the + // refinement of the grid is the same + // as in the step-6 example. The + // quadrature formula is adapted to + // the linear elements again. Note + // that the error estimator by + // default adds up the estimated + // obtained from all components of + // the finite element solution, that + // is it uses the displacement in all + // directions with the same + // weight. If we would like the grid + // to be adapted to the + // x-displacement only, we could pass + // the function an additional + // parameter which tells it to do so + // and do not consider the + // displacements in all other + // directions for the error + // indicators. +template +void ElasticProblem::refine_grid () +{ + Vector estimated_error_per_cell (triangulation.n_active_cells()); + + KellyErrorEstimator::FunctionMap neumann_boundary; + KellyErrorEstimator::estimate (dof_handler, + QGauss2(), + neumann_boundary, + solution, + estimated_error_per_cell); + + triangulation.refine_and_coarsen_fixed_number (estimated_error_per_cell, + 0.3, 0.03); + + triangulation.execute_coarsening_and_refinement (); +}; + + + // The output happens mostly as has + // been shown in previous examples + // already. The only difference is + // not that the solution function is + // vector values. The ``DataOut'' + // class takes care of this + // automatically, but we have to give + // each component of the solution + // vector a different name. +template +void ElasticProblem::output_results (const unsigned int cycle) const +{ + string filename = "solution-"; + filename += ('0' + cycle); + Assert (cycle < 10, ExcInternalError()); + + filename += ".gmv"; + ofstream output (filename.c_str()); + + DataOut data_out; + data_out.attach_dof_handler (dof_handler); + + + + // As said above, we need a + // different name for each + // component of the solution + // function. To pass one name for + // each component, a vector of + // strings is used. Since the + // number of components is the same + // as the number of dimensions we + // are working in, the following + // ``switch'' statement is used. + // + // We note that some graphics + // programs have restriction as to + // what characters are allowed in + // the names of variables. The + // library therefore supports only + // the minimal subset of these + // characters that is supported by + // all programs. Basically, these + // are letters, numbers, + // underscores, and some other + // characters, but in particular no + // whitespace and minus/hyphen. The + // library will throw an exception + // otherwise, at least if in debug + // mode. + vector solution_names; + switch (dim) + { + case 1: + solution_names.push_back ("displacement"); + break; + case 2: + solution_names.push_back ("x_displacement"); + solution_names.push_back ("y_displacement"); + break; + case 3: + solution_names.push_back ("x_displacement"); + solution_names.push_back ("y_displacement"); + solution_names.push_back ("z_displacement"); + break; + // It is good style to + // let the program die if + // we run upon a case + // which we did not + // consider. Remember + // that the ``Assert'' + // macro throws an + // exception if the + // condition in the first + // parameter is not + // satisfied. Of course, + // the condition + // ``false'' can never be + // satisfied, so the + // program will always + // abort whenever it gets + // to this statement: + default: + Assert (false, ExcInternalError()); + }; + + // After setting up the names for + // the different components of the + // solution vector, we can add the + // solution vector to the list of + // data vectors scheduled for + // output. Note that the following + // function takes a vector of + // strings as second argument, + // whereas the one which we have + // used in all previous examples + // accepted a string there. In + // fact, the latter function is + // only a shortcut for the function + // which we call here: it puts the + // single string that is passed to + // it into a vector of strings with + // only one element and forwards + // that to the other function. + data_out.add_data_vector (solution, solution_names); + data_out.build_patches (); + data_out.write_gmv (output); +}; + + + +template +void ElasticProblem::run () +{ + for (unsigned int cycle=0; cycle<8; ++cycle) + { + cout << "Cycle " << cycle << ':' << endl; + + if (cycle == 0) + { + // As in previous examples, + // we use the unit square + // (or cube) as domain. + GridGenerator::hyper_cube (triangulation, -1, 1); + // This time, we have to + // refine the coarse grid + // twice before we first + // solve on it. The reason + // is the following: we use + // the ``Gauss2'' + // quadrature formula for + // integration of the right + // hand side; that means + // that there are four + // quadrature points on + // each cell (in 2D). If we + // only refine the initial + // grid once globally, then + // there will be only four + // quadrature points in + // each direction on the + // domain. However, the + // right hand side function + // was chosen to be rather + // localized and in that + // case all quadrature + // points lie outside the + // support of the right + // hand side function. The + // right hand side vector + // will then contain only + // zeroes and the solution + // of the system of + // equations is the zero + // vector, i.e. a finite + // element function that it + // zero everywhere. We + // should not be surprised + // about such things + // happening, since we have + // chosen an initial grid + // that is totally + // unsuitable for the + // problem at hand. + // + // The unfortunate thing is + // that if the discrete + // solution is constant, + // then the error + // indicators computed by + // the + // ``KellyErrorEstimator'' + // class are zero for each + // cell as well, and the + // call to + // ``refine_and_coarsen_fixed_number'' + // of the ``triangulation'' + // object will not flag any + // cells for refinement + // (why should it if the + // indicated error is zero + // for each cell?). The + // grid in the next + // iteration will therefore + // consist of four cells + // only as well, and the + // same problem occurs + // again. + // + // The conclusion needs to + // be: while of course we + // will not choose the + // initial grid to be + // well-suited for the + // accurate solution of the + // problem, we must at + // least choose it such + // that it has the chance + // to capture the most + // striking features of the + // solution. In this case, + // it needs to be able to + // see the right hand + // side. Thus, we refine + // twice globally. + triangulation.refine_global (2); + } + else + refine_grid (); + + cout << " Number of active cells: " + << triangulation.n_active_cells() + << endl; + + setup_system (); + + cout << " Number of degrees of freedom: " + << dof_handler.n_dofs() + << endl; + + assemble_system (); + solve (); + output_results (cycle); + }; +}; + + + // The main function is again exactly + // like in step-6 (apart from the + // changed class names, of course). +int main () +{ + try + { + deallog.depth_console (0); + + ElasticProblem<2> elastic_problem_2d; + elastic_problem_2d.run (); + } + catch (exception &exc) + { + cerr << endl << endl + << "----------------------------------------------------" + << endl; + cerr << "Exception on processing: " << exc.what() << endl + << "Aborting!" << endl + << "----------------------------------------------------" + << endl; + + return 1; + } + catch (...) + { + cerr << endl << endl + << "----------------------------------------------------" + << endl; + cerr << "Unknown exception!" << endl + << "Aborting!" << endl + << "----------------------------------------------------" + << endl; + return 1; + }; + + return 0; +}; diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/displacement-vectors.jpg b/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/displacement-vectors.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4078b9fbb429a4897d2255b910baeb0be8f35a1c GIT binary patch literal 44691 zcmb@t1yo$k(kMCvORxlo0YVbogL@zlJU9$4!5sz-5L|;h1b3G(xVyW%yE_EGL-@}5 z&$(}{ci&y>HLSg%yLVYvS65e8KTba`1Kx-WiwOf@U|;}GKY+(MfFR%{0sNUzgM8W`|1faveXT=B+;+A@OmfsBboKu%sq*V-l`eFcGpnN{$Mke;U(q?J_R80REo^l=sd1p(z779GF` zxW7mL|FP)XA3g%?e#@xVp%P*4(c^L$5ljVxgX>f6UyXiVMU>hU|=FkQo~$wWdjegyadOP`sfZ*^P(i~XCE z|EB5x$Yiu)#3NvW`hMnZMX27)B=+cVUvFimNd%8x72IWAC$rZ)Xft!)(JZJ8v&6_M zTMALCqE7>TA`81DKF6_fR*@TV%cWy#a95gD>dd7)$?L3f^~Yi6U&_R$`M3`${$HCE z)i~XDqbqQbOgpfgDTsK58&H!f-mggnO7W9|jkiEsdi#zXhaPX*N##-EHE9aOH$wbZ zWQ9yO^A;^DqotmP*Y4k(|DT8VOU=}UbcL!ZJ#&>F5i05Hq=O)ZSe(+Vc9bw?kI^g- zgpN?`-wBY3cC<6j^y4^p(8lGI)&$p{aYl9XLbw^L6_Y*dY95n2uO__C_=a6)eh5IxL4c80mrbqFijt?`M_E6;r97>+(Y`o5ONIQty zXGprjP2nvFb~%$e5}BhJY=yG&$xR7ZFiTUVz>OVYnq)i2jY`M8Y8#RfU`$F9Wi$#r z1qzmB9>Kj3ZV)qmQJ5$q@FN2pWRfC4RALQo8^4_0o7r?g5V!#(no@GG>iWt#PQ#B zVs2G{OOj29wr=&gk)fk~G-R?S&HDE29+Kq!G~AcPtY-rf^+!-xPxArF6wi3w;N|Gm z?_`I0=_Dx6j(Jx}2bud6P@bE(q0P?|@Oi#O?ZH3n%}niYj&uplgjBNjyVMl#xeCf? z!`1Ij6)3SW24Blai8W8d&8Kk_Sv&3O>&w*?XHg|rXjXLA(07=`$c3Zh5a&y$y;dl9 zy|++ybG(q=lodL10Iht>ll^a7ghOJ07$33#ojkWc)odOCAaU2NQzRT0lB$>m9jfrZ zopC7gy1OD44@W`H9aZM{OB2jVf{2X^G-jn(-TqG{5O+Mf*6Ei@*G$9Ap6Ld9Q5L52 zA0N2V!grt%oxG7JAaV!pgY8RQlC>H0^Tjg_bBLpsl(HQ+>=szlC&52|qXpXW)l|^Y z9|Z4kM`hBiR9VqviHZJ&O*HYpQnD$ zCGhpR?Vai$@%cNq#zK0*rx&x8u1CAS1`GO< zmu!pTJ3xP>g^t6QXKH)FQ65_6TsGO!Xlm5H`0!pag4KQDLGicp?&uRnYL`O%>AB^d zs-Z&*CECM%pB?rn%8Yx=s@EUP;yOF0yM!8F+nA{G&ftzZP>B+MS!n4l#%85{`jj?Q zVI?`oLH3f^PG{ExUyq04kB3#-gZux1P_h zceEP1D+95mo`qg|3t(K&s4K@dY*EAMTDVtpoKTUUyAd+O;VOUb0dbKe$jQ4Xw6$*B zy(qE(4n2uPu53U*-oa6Pk~Z4zNpjerag_b&b=zU6OhD`0`M8;jGO536VXvSvY3}S% z@e@LMyE&e6nA;dxBQD_r%Z~V=LJ@2G2?HcaðrzH7Q+A`sNUl5Fq@c&|`|DQ0MC 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�=&&Mk0LO_9 zt&ZEjRW8<+Gz|4|cH=pos$yG*nwRJ;9ybhz_(XoJdBE#Z;+i(GK9&{0`Gr;#m`-@c z+6joQ@Ol`L0QS0aesgB&&xe5BBC76vb;k2w&h2qoNpe>KPBGR1YQ8?^s^?v+oKj&> zlDI4gQU5l7`Oyz#@And~#iw_zdU9=(=E?U}3kT<*0v)Bz-@QNm(Bi`=P3H>`%#r~F zv+$#7uN2!M?oV&SmKD6Hy{PVvs(2%PX_m zH9KX@k-%gx{J4-ft`0XPu|+@E19VlfjkeFkWxuEbtw(nY*0`|s z`6WLP{I2}B#tEDbwV(FW*Y+wQ`XUq%)h z_BN*FT2}m_C>L9(WYGJ+j*JK>hwhTXh$*N$k7&gN&=B_w6RG}Bgz_A4DK zTiWR(T7k2-+CEyWrfNp5Di{KikeZ>@M;Mw}RgV3l*Dn~1v>#0z-_}T5^#DWxslz?> zU!!O~Vyq_|Oa9>+E+ujekLMW%`KUkl+AcBmnFiviAs+~b5@mYrQz`y^*A&Ux94)=M z;^4wPW_&EkcMOJcVYj5S-Wzd;feF32diA;O>~W``mC8OW#Q$l^7Zh(~1rUb>v99`M zY1PzYazT|E0V@KbLhASIy|K^HB`}?1fk?30q`=wAB+_f zEYqYZ$>pr`?>*13H?y-=L7&T48t>nHug!hBYI!3yf%k^hRY!AJ?XqQ7#0_AXQ5UG; zB`PXq(Y!%+r``K~H>nFh0fnVq(DMrbGAljvsl(sLAmr||@mgp~%ckb#KiJ0<*AYz3 z@NYm~CgO_uy&{MoN`?YciZKuShU#X)!_$YBMsS#UN90zHv^-mHfwKB(Ll!&EnY052 zTv%Qck1=kRw$9*O;cWjVs#_$p0njokn7yrr=}*}` z0>XDj@y(@f85BbG$D8^N@McaKv1+ZAt1aKKkw3+2ND%EFPo)){3;I)fuJuWVl;lbX zSxNU!u9K*GJXKTJ{Fvs__*0$@1%|~E;MJij;9yp@uZQAa@P&~to%cEcH5J56$gHe_ zi?kOp|1B_tgDmaw|KT88mzNs!Kpmi`E;9knvC;_-Spj-#;&J0&Fom7bvn{Gx@!90@ zK8(?6bN(@?LRQm?ne4l=GAubAA;u#MVq?$G$aqVAv4yhqUiKM%@$I$}rPZ49WXZiv+Kxg@trKOvL3 zjhLJGXz@zF>2+6{c>)K=Ei$s*`v!))i`PjOVKEjBrS6u+#+9`t{%5OTdAI!AoHBd8 z%a6=KZm9ny8sIoIg{^bK$!_QxIMpLW)7NSe^udN&EK*(2N*u6~IXm1}xf z@8&h4Cc4JW92;nv@FF5}M3{7eo%|6G^9|m{WGYe*O28j5b7MWD+=OQ?q|=E`WT*7` z4<6{fnna3ZjI*t$(6WF0g)TmKP`rVxW1s%w`kv72^5qi#YG&L4+z4eTUsLB@wdGDa z5?>p!c{I3YRuc(@N~!GCM0yFji+186weL3{;MVuVXE!C5m&RM5zKeJii+oMGq3UoL z^OvEWi->)Us?mE~rK+0ZV6H@&saW@N{*7%G?L}K;Ol?Pws+Mhmk&2$ku+lYITlRNf8r9HD6`VK!qcmIc=N{a1h>U>uDP4=LX1;?t- z`uxpM_L14nPvD%%aA;l*D=(G9O{wnMWk@m}T(sq#D!jgD>;nB`=PSNg$^{F+nlQ6b z#L-EY)K*bWSNnD=brFA9&k^n|rF}Rq=kuv{Sw0yLsmDPjZNw{X0xw-4VbciS^25lu zdwdD~m!m~hqc$1mij!06A-2=E*mcbkr>XbJqZs{>3RG;1-(OA0>ADoS(`kx|0O>im zZ*M89{N6=QKbZJNu!i~ly_Fo5tl~l8@7$mP6ERqM5+Fex% z>vg#Qt>m1DgUVRvm#$>|3jo2z@?n1;R~-x;lBw3G62Az0R^D$6%jE?+0~m#OWW zt!Wwb&sD<$`GC@uyDD!0Sb9pDMT`JgR7+?BPGRZXzVD8FU7m(IfDdJta!DSo%H-(; zL?Zy(qcyE=9RZfmEb9tepXC#fOxoC3q0SNd;&%tmXWx7-;xDt=79K^Sd@=xB_^6h` z79?Un*7sI8I`g=xJSF@!jDFC_LqoZK+-D@rW(Gg>41WR&0ngUGJ^_sk{WiD~N)oTI zt3RC&^>&p;53k|UkOb_Nf(Gtt^+3 z-bY$*@j+JyE(IG^%f1M0bz@5QY0(#=JHGjfA8(HGe(#cl}TlB2y@ zAfLgiSxRt5PJ?c%%|2^h^N<}y2n+rT5jM8A<&7Rq6%;eG`Kp{vH&tt=Z~aWc!_~Ld zV`2Izno^=T$wdy6TW_k5VJM1!AjAIB$UoA94(g~stp_rAw`#p7LP9H%Zwk<~l%|z< zl?*l4aalHvAKw7STz`c<1{eQ29&j6c5*tq1*vG1`+Cyx|R{|GAV>zde7%M1j{kxln z)rJ=RTsMj5|*a48r)!G0-(-6nRIR}I{SeJa2T#aj+d0Dw$70DxqC*cUACyh;?L z-*CKrOK{It`!^zgyJxHY3lViW0Fi%k-~7g<)pl}AVN|_uNNP&!+uGpw`l3DV-nvwF zJlinBoOtxOdex*VMFJAtJ=-^Q`HY>OY>L`qLU;NrE?AY;pb0<+M!0Bs@^6;8-7O&k zGSP8ES&1LNL2@91jPzAx6)d>=a{^ltSG@JZM{Fv-(rGJ zc{sFD{Cs^dlR5{`*~*l@p$KKLVW1QE%P~XKR|~tp5?@$PV>sH=DGP-2gokx-;p`>~ zhxeB@G=N|&zKg@VIn6j08hpn@y-M+R|5Og(k49I#p%T_1$%S*8$Qj;W*nlK?>{%MN zHbXz{$p`steqQUhec-yAU*Q)QwCt^6yctOW)yL13vs8I&juv%(-I3xtEm*nMV{=3( zXcP|=gd~y2dTMkm)$YhIVM&q!;V;VacqosSuyt z6^}wc8o;+`y*4t`mPLJ1ji>w2y&5eYn&h(QN$AkPvHGN;yoS;X)x9Zg%&CZ7*hS z<2)wf&@bmUAYOo{A5gL4C#Zao_h!}U0N~iF!x{n8DZ&6CJv;n?cKQbN(o#G>{`?wx2OLQw*KUd2GIjya1O%JQ9Vg+q2`Or?d1hDuY6 z9SWY6!vHCs1IJ4s)dMFhb%NuKL<)+EGwDXbAFs%KflYLv>+Mk6=&8J&t<7En8oC`o zYQ~jv!>U8g)4Am;w&B9rOq7qj1g6$O`gCRyxv(PNQS+suW|f-Le$k>*wQ3LS2tpz9 zyQ)d~ft?>!7PBcB2iv+)OZY!%88?e5=Se-XD*5K+8Grf5VOzWG6?fp7Q0!tHfmez1_(tO zQF=^m7@(1>8Ci?zgvQ*{O8b5*TX+U zhw6DO{R>5?oFuY(`?S{+r@gMp`ubVRjVt@}^SZbS8xd4a$}XA`e`QC4{N|q}6POi2Hb##M|&s+&z zQn=|tI6pjGA?c}k!!Wsmq`ayq>?{tk_kqO7)Ra+oJ2U=!A_N%>BrO7rHK&Ts|ChVm H$;kfzNV?^V literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/displacement-x.jpg b/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/displacement-x.jpg new file mode 100644 index 0000000000000000000000000000000000000000..306bc68dde006bc811e567680acf1f5b52638b36 GIT binary patch literal 19115 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

eydSTH7@wg6IJO$Ko_*aU|B-U4UFAv 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 literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/displacement-y.jpg b/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/displacement-y.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3028b9f6e917429f641972ec2db995a6532b6765 GIT binary patch literal 17888 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 literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/final-grid.jpg b/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.data/final-grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d1fe99dd8313c24ed2efed9c9988c741d17842b GIT binary patch literal 51549 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 literal 0 HcmV?d00001 diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.intro b/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.intro new file mode 100644 index 0000000000..6fefefb616 --- /dev/null +++ b/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.intro @@ -0,0 +1,58 @@ + +

Introduction

+ +

+In real life, most partial differential equations are really systems +of equations. Accordingly, the solutions are usually +vector-valued. The deal.II library supports such problems we will show +that that is mostly rather simple. The only more complicated problems +are in assembling matrix and right hand side, but these are easily +understood as well. +

+ +

+In the example, we will want to solve the elastic equations. They are +an extension to Laplace's equation with a vector-valued solution that +describes the displacement in each space direction of a rigid body +which is subject to a force. Of course, the force is also +vector-valued, meaning that in each point it has a direction and an +absolute value. The elastic equations are the following: +

+

+ - + &pd;j (cijkl &pd;k ul) + = + 0, + &quad; + i=1&ldots;d, +

+

+where the values cijkl are the stiffness coefficients and +will usually depend on the space coordinates. In +many cases, one knows that the material under consideration is +isotropic, in which case by introduction of the two coefficients +lambda and mu the coefficient tensor reduces to +

+

+ cijkl + = + λδij δkl + + μ(δik δjl + + δil δjk). +

+ +

+The elastic equations can then be rewritten in much simpler a form: +

+

+ - + ∇(λ+μ) (∇u) + - + (∇μ∇) u + = + 0 +

+

+This is the form that we will try to solve. The program that does so +is based on the step-6 program. +

diff --git a/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.results b/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.results new file mode 100644 index 0000000000..a0a2f7357f --- /dev/null +++ b/deal.II/doc/tutorial/chapter-2.step-by-step/step-8.results @@ -0,0 +1,49 @@ + +

Results

+ +

+There is not much to be said about the results of this program, apart +from that they look nice. All images were made using GMV from the +output files that the program wrote to disk. The first picture shows +the displacement as a vector field, where one vector is shown at each +vertex of the grid: +

+ +

+displacement-vectors +

+ +

+You can clearly see the sources of x-displacement around x=0.5 and +x=-0.5, and of y-displacement at the origin. The next image shows the +final grid after eight steps of refinement: +

+ +

+final-grid +

+ +

+Finally, the x-displacement and y-displacement are displayed separately: +

+ +

+ + + + + +
+displacement-x + +displacement-y +
+

+ +

+It should be noted that intuitively one would have expected the +solution to be symmetric about the x- and y-axes since the x- and +y-forces are symmetric with respect to these axes. However, the force +considered as a vector is not symmetric and so not is the solution. +

+ diff --git a/deal.II/examples/step-8/Makefile b/deal.II/examples/step-8/Makefile new file mode 100644 index 0000000000..8753051799 --- /dev/null +++ b/deal.II/examples/step-8/Makefile @@ -0,0 +1,94 @@ +# $Id$ +# Copyright W. Bangerth, University of Heidelberg, 1999 + +# Template for makefiles for the examples subdirectory. In principle, +# everything should be done automatically if you set the target file +# here correctly. We get deduce it from the files in the present +# directory: +target = $(basename $(shell echo step-*.cc)) + +# All dependencies between files should be updated by the included +# file Makefile.dep if necessary. Object files are compiled into +# the archives ./Obj.a and ./Obj.g.a. By default, the debug version +# is used to link. It you don't like that, change the following +# variable to "off" +debug-mode = on + + + +############################################################################### +# Internals + +#deal include base path +D = ../../../.. + +include $D/common/Make.global_options + +# get lists of files we need + + +# list of libraries needed to link with +libs = -ldeal_II_2d -llac -lbase +libs.g = -ldeal_II_2d.g -llac.g -lbase.g + + +# check whether we use debug mode or not +ifeq ($(debug-mode),on) + libraries = $(target).go $(libs.g) + flags = $(CXXFLAGS.g) +else + libraries = $(target).go $(libs) + flags = $(CXXFLAGS.o) +endif + + + +# make rule for the target. $^ is the object file $(target).g?o +$(target) : $(libraries) + @echo ============================ Linking $@ + @$(CXX) $(flags) -o $@ $^ + +# rule how to run the program +run: $(target) + @echo ============================ Running $< + @./$(target) + + +# rule to make object files +%.go : %.cc + @echo ============================ Compiling with debugging information: $< + @$(CXX) $(CXXFLAGS.g) -c $< -o $@ +%.o : %.cc + @echo ============================ Compiling with optimization: $< + @$(CXX) $(CXXFLAGS) -c $< -o $@ + + +clean: + -rm -f *.o *.go *~ Makefile.dep $(target) *gmv *gnuplot *gpl *eps + + + +.PHONY: clean + + +# Rule to generate the dependency file. This file is +# automagically remade whenever needed, i.e. whenever +# one of the cc-/h-files changed. Make detects whether +# to remake this file upon inclusion at the bottom +# of this file. +# +# Since the script prefixes the output names by lib/g?o, we have to +# strip that again (the script was written for the main libraries and +# large projects where object files are put into subdirs) +Makefile.dep: $(target).cc Makefile \ + $(shell echo $D/base/include/base/*.h \ + $D/lac/include/lac/*.h \ + $D/deal.II/include/*/*.h) + @echo ============================ Remaking Makefile + @perl $D/common/scripts/make_dependencies.pl $(INCLUDE) $(target).cc \ + | perl -pi -e 's!lib/g?o/!!g;' \ + > Makefile.dep + + +include Makefile.dep + diff --git a/deal.II/examples/step-8/step-8.cc b/deal.II/examples/step-8/step-8.cc new file mode 100644 index 0000000000..9fac1af41e --- /dev/null +++ b/deal.II/examples/step-8/step-8.cc @@ -0,0 +1,961 @@ +/* $Id$ */ +/* Author: Wolfgang Bangerth, University of Heidelberg, 2000 */ + + // As usual, the first few include + // files are already known, so we + // will not comment on them further. +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + // In this example, we need + // vector-valued finite elements. The + // suuport for these can be found in + // the following include file: +#include + // We will compose the vector-valued + // finite elements from regular Q1 + // elements which can be found here, + // as usual: +#include + + // This again is C++: +#include + + + // The main class is, except for its + // name, almost unchanged with + // respect to the step-6 example. The + // only change is the use of a + // different class for the ``fe'' + // variable. +template +class ElasticProblem +{ + public: + ElasticProblem (); + ~ElasticProblem (); + void run (); + + private: + void setup_system (); + void assemble_system (); + void solve (); + void refine_grid (); + void output_results (const unsigned int cycle) const; + + Triangulation triangulation; + DoFHandler dof_handler; + + // Instead of a concrete finite + // element class such as + // ``FEQ1'', we now use a more + // generic one, ``FESystem''. In + // fact, it is not a finite + // element itself, but rather a + // class that can be used to + // stack several usual elements + // together to form one + // vector-valued finite + // element. In our case, we will + // compose the vector-valued + // element of ``FEQ1'' objects, + // as shown below in the + // constructor of this class. + FESystem fe; + + ConstraintMatrix hanging_node_constraints; + + SparseMatrixStruct sparsity_pattern; + SparseMatrix system_matrix; + + Vector solution; + Vector system_rhs; +}; + + + // Before going over to the + // implementation of the main class, + // we declare and define the class + // which describes the right hand + // side. This time, the right hand + // side is vector-valued, as is the + // solution, so we will describe the + // new elements in some more detail. +template +class RightHandSide : public Function +{ + public: + // The first thing is that + // vector-valued functions have a + // constructor, since they need + // to pass down to the base class + // of how many components the + // function consists. The default + // value in the constructor of + // the base class is one, so we + // need not define a constructor + // for the usual scalar function. + RightHandSide (); + + // The next function is a + // replacement for the ``value'' + // function of the previous + // examples. There, a second + // parameter ``component'' was + // given, which denoted which + // component was requested. Here, + // we implement a function that + // returns the whole vector of + // values at the given place at + // once. + virtual void vector_value (const Point &p, + Vector &values) const; + + // Then, in analogy to the + // ``value_list'' function, there + // is a function + // ``vector_value_list'', which + // returns the values of the + // vector-valued function at + // several points at once: + virtual void vector_value_list (const vector > &points, + vector > &value_list) const; +}; + + + // This is the constructor of the + // right hand side class. As said + // above, it only passes down to the + // base class the number of + // components, which is ``dim'' in + // the present case. Note that + // although the implementation is + // very short here, we do not move it + // into the class declaration, since + // our style guides require that + // inside the class declaration only + // declarations have to happen and + // that definitions are always to be + // found outside. +template +RightHandSide::RightHandSide () : + Function (dim) +{}; + + + // This is the function that returns + // the whole vector of values at the + // point ``p'' at once: +template +inline +void RightHandSide::vector_value (const Point &p, + Vector &values) const +{ + // To prevent cases where the + // return value has not previously + // been set to the right size + // (which is kind of a convention + // in the deal.II library), we test + // for this case and otherwise + // throw an exception: + Assert (values.size() == dim, + ExcVectorHasWrongSize (values.size(), dim)); + // Likewise, if by some accident + // someone tried to compile and run + // the program in only one space + // dimension (in which the elastic + // equations do not make much sense + // since they reduce to the + // ordinary Laplace equation), we + // terminate the program if the + // dimension is not as expected. + Assert (dim >= 2, ExcInternalError()); + + // The rest of the function is as + // would probably be expected given + // the form of the right hand side + // function. First we define the + // centers of the two points around + // which are the sources of + // x-displacement, i.e. (0.5,0) and + // (-0.5,0). Note that upon + // construction of the ``Point'' + // objects, all components are set + // to zero. + Point point_1, point_2; + point_1(0) = 0.5; + point_2(0) = -0.5; + + // If now the point ``p'' is in the + // circle of radius 0.2 around one + // of these points, then set the + // force in x-direction to one, + // otherwise to zero: + if (((p-point_1).square() < 0.2*0.2) || + ((p-point_2).square() < 0.2*0.2)) + values(0) = 1; + else + values(0) = 0; + + // Likewise, if ``p'' is in the + // vicinity of the origin, then set + // the y-force to 1, otherwise to + // zero: + if (p.square() < 0.2*0.2) + values(1) = 1; + else + values(1) = 0; +}; + + + + // Now, this is the function of the + // right hand side class that returns + // the values at several points at + // once. +template +void RightHandSide::vector_value_list (const vector > &points, + vector > &value_list) const +{ + // First we define an abbreviation + // for the number of points which + // we shall work on: + const unsigned int n_points = points.size(); + + // Then we check whether the number + // of output slots has been set + // correctly, i.e. to the number of + // input points: + Assert (value_list.size() == n_points, + ExcVectorHasWrongSize (value_list.size(), n_points)); + + // Finally we treat each of the + // points. In one of the previous + // examples, we have explained why + // the + // ``value_list''/``vector_value_list'' + // function had been introduced: to + // prevent us from calling virtual + // functions too frequently. On the + // other hand, we now need to + // implement the same function + // twice, which can lead to + // confusion if one function is + // changed but the other is + // not. However, we can prevent + // this situation using the + // following construct: + for (unsigned int p=0; p::vector_value (points[p], + value_list[p]); + // It calls the ``vector_value'' + // function defined above for each + // point, and thus preempts all + // chances for inconsistency. It is + // important to note how the + // function was called: using the + // full class qualification using + // ``RightHandSide::'', since this + // calls the function directly and + // not using the virtual function + // table. The call is thus as fast + // as a call to any non-virtual + // function. In addition, we have + // declared the ``vector_value'' + // function ``inline'', i.e. the + // compiler can remove the function + // call altogether and the + // resulting code can in principle + // be as fast as if we had + // duplicated the code. +}; + + + + +template +ElasticProblem::ElasticProblem () : + dof_handler (triangulation), + // As said before, we + // would like to + // construct one + // vector-valued + // finite element as + // outer product of + // several scala + // finite + // elements. Of + // course, the number + // of scalar finite + // element we would + // like to stack + // together equals + // the number of + // components the + // solution function + // has, which is + // ``dim'' since we + // consider + // displacement in + // each space + // direction. The + // ``FESystem'' class + // can handle this: + // we pass it the + // finite element of + // which we would + // like to compose + // the system of, and + // how often it shall + // be repeated: + fe (FEQ1(), dim) + // In fact, the ``FESystem'' class + // has several more constructors + // which can perform more complex + // operations that just stacking + // together several scalar finite + // elements of the same type into + // one; we will get to know these + // possibilities in later examples. + // + // It should be noted that the + // ``FESystem'' object thus created + // does not actually use the finite + // element which we have passed to it + // as first parameter. We could thus + // use an anonymous object created + // in-place. The ``FESystem'' + // constructor only needs the + // parameter to deduce the type of + // the finite element from this and + // then creates objects of the + // underlying finite element type + // itself. +{}; + + + +template +ElasticProblem::~ElasticProblem () +{ + dof_handler.clear (); +}; + + + // Setting up the system of equations + // is equal to the function used in + // the step-6 example. The + // ``DoFHandler'' class and all other + // classes used take care of the + // vector-valuedness of the finite + // element themselves (in fact, the + // do not do so, since they only take + // care how many degrees of freedom + // there are per vertex, line and + // cell, and they do not askwhat they + // represent, i.e. whether the finite + // element under consideration is + // vector-valued or whether it is, + // for example, a scalar Hermite + // element with several degrees of + // freedom on each vertex). +template +void ElasticProblem::setup_system () +{ + dof_handler.distribute_dofs (fe); + hanging_node_constraints.clear (); + DoFTools::make_hanging_node_constraints (dof_handler, + hanging_node_constraints); + hanging_node_constraints.close (); + sparsity_pattern.reinit (dof_handler.n_dofs(), + dof_handler.n_dofs(), + dof_handler.max_couplings_between_dofs()); + // When making the sparsity + // pattern, there is some potential + // for optimization if not all + // components couple to all + // others. However, this is not the + // case for the elastic equations, + // so we use the standard call: + DoFTools::make_sparsity_pattern (dof_handler, sparsity_pattern); + + hanging_node_constraints.condense (sparsity_pattern); + + sparsity_pattern.compress(); + + system_matrix.reinit (sparsity_pattern); + + solution.reinit (dof_handler.n_dofs()); + system_rhs.reinit (dof_handler.n_dofs()); +}; + + + // The big changes in this program + // are in the creation of matrix and + // right hand side, since they are + // problem-dependent. We will go + // through that process step-by-step, + // since it is a bit more complicated + // than in previous examples. +template +void ElasticProblem::assemble_system () +{ + // First thing: the quadrature + // formula does not need + // modification since we still deal + // with bilinear functions. + QGauss2 quadrature_formula; + // Also, the ``FEValues'' objects + // takes care of everything for us + // (or better: it does not really + // so; as in the comment in the + // function setting up the system, + // here as well the ``FEValues'' + // object computes the same data on + // each cell, but it has some + // functionality to access data + // stored inside the finite element + // where they are precomputed upon + // construction). + FEValues fe_values (fe, quadrature_formula, + UpdateFlags(update_values | + update_gradients | + update_q_points | + update_JxW_values)); + + // The number of degrees of freedom + // per cell we now obviously ask + // from the composed finite element + // rather than from the underlying + // scalar Q1 element. Here, it is + // ``dim'' times the number of + // degrees of freedom per cell of + // the Q1 element, but this is not + // something we need to care about. + const unsigned int dofs_per_cell = fe.dofs_per_cell; + const unsigned int n_q_points = quadrature_formula.n_quadrature_points; + + FullMatrix cell_matrix (dofs_per_cell, dofs_per_cell); + Vector cell_rhs (dofs_per_cell); + + vector local_dof_indices (dofs_per_cell); + + // As was shown in previous + // examples as well, we need a + // place where to store the values + // of the coefficients at all the + // quadrature points on a cell. In + // the present situation, we have + // two coefficients, lambda and mu. + vector lambda_values (n_q_points); + vector mu_values (n_q_points); + + // Well, we could as well have + // omitted the above two arrays + // since we will use constant + // coefficients for both lambda and + // mu, which can be declared like + // this. They both represent + // functions always returning the + // constant value 1.0. Although we + // could omit the respective + // factors in the assemblage of the + // matrix, we use them here for + // purpose of demonstration. + ConstantFunction lambda(1.), mu(1.); + + // Then again, we need to have the + // same for the right hand + // side. This is exactly as before + // in previous examples. However, + // we now have a vector-valued + // right hand side, which is why + // the data type of the + // ``rhs_values'' array is + // changed. We initialize it by + // ``n_q_points'' elements, each of + // which is a ``Vector'' + // with ``dim'' elements. + RightHandSide right_hand_side; + vector > rhs_values (n_q_points, + Vector(dim)); + + + // Now we can begin with the loop + // over all cells: + DoFHandler::active_cell_iterator cell = dof_handler.begin_active(), + endc = dof_handler.end(); + for (; cell!=endc; ++cell) + { + cell_matrix.clear (); + cell_rhs.clear (); + + fe_values.reinit (cell); + + const FullMatrix + & shape_values = fe_values.get_shape_values(); + const vector > > + & shape_grads = fe_values.get_shape_grads(); + const vector + & JxW_values = fe_values.get_JxW_values(); + const vector > + & q_points = fe_values.get_quadrature_points(); + + lambda.value_list (q_points, lambda_values); + mu.value_list (q_points, mu_values); + + for (unsigned int i=0; iget_dof_indices (local_dof_indices); + for (unsigned int i=0; i boundary_values; + VectorTools::interpolate_boundary_values (dof_handler, + 0, + ZeroFunction(dim), + boundary_values); + MatrixTools::apply_boundary_values (boundary_values, + system_matrix, + solution, + system_rhs); + + hanging_node_constraints.condense (system_matrix); + hanging_node_constraints.condense (system_rhs); +}; + + + + // The solver does not care about + // where the system of equations + // comes, as long as it stays + // positive definite and symmetric + // (which are the requirements for + // the use of the CG solver), which + // the system is. Therefore, we need + // not change anything. +template +void ElasticProblem::solve () +{ + SolverControl solver_control (1000, 1e-12); + PrimitiveVectorMemory<> vector_memory; + SolverCG<> cg (solver_control, vector_memory); + + PreconditionRelaxation<> + preconditioner(system_matrix, + &SparseMatrix::template precondition_SSOR, + 1.2); + + cg.solve (system_matrix, solution, system_rhs, + preconditioner); + + hanging_node_constraints.distribute (solution); +}; + + + + // The function that does the + // refinement of the grid is the same + // as in the step-6 example. The + // quadrature formula is adapted to + // the linear elements again. Note + // that the error estimator by + // default adds up the estimated + // obtained from all components of + // the finite element solution, that + // is it uses the displacement in all + // directions with the same + // weight. If we would like the grid + // to be adapted to the + // x-displacement only, we could pass + // the function an additional + // parameter which tells it to do so + // and do not consider the + // displacements in all other + // directions for the error + // indicators. +template +void ElasticProblem::refine_grid () +{ + Vector estimated_error_per_cell (triangulation.n_active_cells()); + + KellyErrorEstimator::FunctionMap neumann_boundary; + KellyErrorEstimator::estimate (dof_handler, + QGauss2(), + neumann_boundary, + solution, + estimated_error_per_cell); + + triangulation.refine_and_coarsen_fixed_number (estimated_error_per_cell, + 0.3, 0.03); + + triangulation.execute_coarsening_and_refinement (); +}; + + + // The output happens mostly as has + // been shown in previous examples + // already. The only difference is + // not that the solution function is + // vector values. The ``DataOut'' + // class takes care of this + // automatically, but we have to give + // each component of the solution + // vector a different name. +template +void ElasticProblem::output_results (const unsigned int cycle) const +{ + string filename = "solution-"; + filename += ('0' + cycle); + Assert (cycle < 10, ExcInternalError()); + + filename += ".gmv"; + ofstream output (filename.c_str()); + + DataOut data_out; + data_out.attach_dof_handler (dof_handler); + + + + // As said above, we need a + // different name for each + // component of the solution + // function. To pass one name for + // each component, a vector of + // strings is used. Since the + // number of components is the same + // as the number of dimensions we + // are working in, the following + // ``switch'' statement is used. + // + // We note that some graphics + // programs have restriction as to + // what characters are allowed in + // the names of variables. The + // library therefore supports only + // the minimal subset of these + // characters that is supported by + // all programs. Basically, these + // are letters, numbers, + // underscores, and some other + // characters, but in particular no + // whitespace and minus/hyphen. The + // library will throw an exception + // otherwise, at least if in debug + // mode. + vector solution_names; + switch (dim) + { + case 1: + solution_names.push_back ("displacement"); + break; + case 2: + solution_names.push_back ("x_displacement"); + solution_names.push_back ("y_displacement"); + break; + case 3: + solution_names.push_back ("x_displacement"); + solution_names.push_back ("y_displacement"); + solution_names.push_back ("z_displacement"); + break; + // It is good style to + // let the program die if + // we run upon a case + // which we did not + // consider. Remember + // that the ``Assert'' + // macro throws an + // exception if the + // condition in the first + // parameter is not + // satisfied. Of course, + // the condition + // ``false'' can never be + // satisfied, so the + // program will always + // abort whenever it gets + // to this statement: + default: + Assert (false, ExcInternalError()); + }; + + // After setting up the names for + // the different components of the + // solution vector, we can add the + // solution vector to the list of + // data vectors scheduled for + // output. Note that the following + // function takes a vector of + // strings as second argument, + // whereas the one which we have + // used in all previous examples + // accepted a string there. In + // fact, the latter function is + // only a shortcut for the function + // which we call here: it puts the + // single string that is passed to + // it into a vector of strings with + // only one element and forwards + // that to the other function. + data_out.add_data_vector (solution, solution_names); + data_out.build_patches (); + data_out.write_gmv (output); +}; + + + +template +void ElasticProblem::run () +{ + for (unsigned int cycle=0; cycle<8; ++cycle) + { + cout << "Cycle " << cycle << ':' << endl; + + if (cycle == 0) + { + // As in previous examples, + // we use the unit square + // (or cube) as domain. + GridGenerator::hyper_cube (triangulation, -1, 1); + // This time, we have to + // refine the coarse grid + // twice before we first + // solve on it. The reason + // is the following: we use + // the ``Gauss2'' + // quadrature formula for + // integration of the right + // hand side; that means + // that there are four + // quadrature points on + // each cell (in 2D). If we + // only refine the initial + // grid once globally, then + // there will be only four + // quadrature points in + // each direction on the + // domain. However, the + // right hand side function + // was chosen to be rather + // localized and in that + // case all quadrature + // points lie outside the + // support of the right + // hand side function. The + // right hand side vector + // will then contain only + // zeroes and the solution + // of the system of + // equations is the zero + // vector, i.e. a finite + // element function that it + // zero everywhere. We + // should not be surprised + // about such things + // happening, since we have + // chosen an initial grid + // that is totally + // unsuitable for the + // problem at hand. + // + // The unfortunate thing is + // that if the discrete + // solution is constant, + // then the error + // indicators computed by + // the + // ``KellyErrorEstimator'' + // class are zero for each + // cell as well, and the + // call to + // ``refine_and_coarsen_fixed_number'' + // of the ``triangulation'' + // object will not flag any + // cells for refinement + // (why should it if the + // indicated error is zero + // for each cell?). The + // grid in the next + // iteration will therefore + // consist of four cells + // only as well, and the + // same problem occurs + // again. + // + // The conclusion needs to + // be: while of course we + // will not choose the + // initial grid to be + // well-suited for the + // accurate solution of the + // problem, we must at + // least choose it such + // that it has the chance + // to capture the most + // striking features of the + // solution. In this case, + // it needs to be able to + // see the right hand + // side. Thus, we refine + // twice globally. + triangulation.refine_global (2); + } + else + refine_grid (); + + cout << " Number of active cells: " + << triangulation.n_active_cells() + << endl; + + setup_system (); + + cout << " Number of degrees of freedom: " + << dof_handler.n_dofs() + << endl; + + assemble_system (); + solve (); + output_results (cycle); + }; +}; + + + // The main function is again exactly + // like in step-6 (apart from the + // changed class names, of course). +int main () +{ + try + { + deallog.depth_console (0); + + ElasticProblem<2> elastic_problem_2d; + elastic_problem_2d.run (); + } + catch (exception &exc) + { + cerr << endl << endl + << "----------------------------------------------------" + << endl; + cerr << "Exception on processing: " << exc.what() << endl + << "Aborting!" << endl + << "----------------------------------------------------" + << endl; + + return 1; + } + catch (...) + { + cerr << endl << endl + << "----------------------------------------------------" + << endl; + cerr << "Unknown exception!" << endl + << "Aborting!" << endl + << "----------------------------------------------------" + << endl; + return 1; + }; + + return 0; +}; -- 2.39.5