From a708bf89ce4272822a4aa346f05d79e96139238d Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Wed, 3 Jul 2013 16:06:06 +0000 Subject: [PATCH] Third new test. git-svn-id: https://svn.dealii.org/trunk@29929 0785d39b-7218-0410-832d-ea1e28bc413d --- .../deal.II/fe_values_view_21_nonsymmetric.cc | 216 ++++++++++++++++++ .../cmp/generic | 9 + .../fe_values_view_09/cmp/generic | 91 ++++++++ 3 files changed, 316 insertions(+) create mode 100644 tests/deal.II/fe_values_view_21_nonsymmetric.cc create mode 100644 tests/deal.II/fe_values_view_21_nonsymmetric/cmp/generic create mode 100644 tests/deal.II/fe_values_view_21_nonsymmetric/fe_values_view_09/cmp/generic diff --git a/tests/deal.II/fe_values_view_21_nonsymmetric.cc b/tests/deal.II/fe_values_view_21_nonsymmetric.cc new file mode 100644 index 0000000000..a54f748156 --- /dev/null +++ b/tests/deal.II/fe_values_view_21_nonsymmetric.cc @@ -0,0 +1,216 @@ +//---------------------------------------------------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 2009, 2010, 2013 by Andrew McBride and the deal.II authors +// +// This file is subject to QPL and may not be distributed +// without copyright and license information. Please refer +// to the file deal.II/doc/license.html for the text and +// further information on this license. +// +//---------------------------------------------------------------------- + + +// a simple example code demonstrating the usage of tensor-valued nodal unknowns +// in deal.II + +#include "../tests.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include +#include + +using namespace dealii; + +template +class MixedElastoPlasticity +{ + public: + MixedElastoPlasticity(const unsigned int degree); + void run(); + private: + void make_grid_and_dofs(); + void assemble_system(); + + const unsigned int degree; + const unsigned int n_stress_components; // components of stress + const unsigned int n_gamma_components; // scalar plastic multiplier + + + Triangulation triangulation; + FESystem fe; + DoFHandler dof_handler; + + BlockSparsityPattern sparsity_pattern; + BlockSparseMatrix system_matrix; + + BlockVector solution; + BlockVector system_rhs; + +}; + +template +MixedElastoPlasticity::MixedElastoPlasticity(const unsigned int degree): + degree(degree), + n_stress_components(dim*dim), + n_gamma_components(1), + fe( FE_Q(degree), n_stress_components, + FE_Q(degree), n_gamma_components), + dof_handler(triangulation) +{ +} + +template +void MixedElastoPlasticity::make_grid_and_dofs() +{ + GridGenerator::hyper_cube(triangulation, -1, 1); + triangulation.refine_global(0); + + dof_handler.distribute_dofs(fe); + + deallog << "Number of stress components: " + << n_stress_components + << "\tNumber of gamma components: " + << n_gamma_components << std::endl; + + // stress -> 0 gamma -> 1 + std::vector block_component(n_stress_components + n_gamma_components, 1); + for (unsigned int ii = 0; ii < n_stress_components; ii++) + block_component[ii] = 0; + + DoFRenumbering::component_wise(dof_handler); + + // total number of dof per block component + std::vector dofs_per_block(2); + DoFTools::count_dofs_per_block(dof_handler, dofs_per_block, block_component); + + const unsigned int n_stress_dof = dofs_per_block[0]; + const unsigned int n_gamma_dof = dofs_per_block[1]; + + deallog << "Number of active cells: " + << triangulation.n_active_cells() + << std::endl + << "Total number of cells: " + << triangulation.n_cells() + << std::endl + << "Number of degrees of freedom: " + << dof_handler.n_dofs() + << " = (" << n_stress_dof << " + " + << n_gamma_dof << ")" + << std::endl; + + // following step-22 use of simple + // compressed block sparsity + // pattern for efficiency + { + BlockCompressedSimpleSparsityPattern csp(2, 2); + + csp.block(0, 0).reinit(n_stress_dof, n_stress_dof); + csp.block(1, 0).reinit(n_gamma_dof, n_stress_dof); + csp.block(0, 1).reinit(n_stress_dof, n_gamma_dof); + csp.block(1, 1).reinit(n_gamma_dof, n_gamma_dof); + csp.collect_sizes(); + + DoFTools::make_sparsity_pattern(dof_handler, csp); + sparsity_pattern.copy_from(csp); + } + + system_matrix.reinit(sparsity_pattern); + + solution.reinit(2); + solution.block(0).reinit(n_stress_dof); + solution.block(1).reinit(n_gamma_dof); + solution.collect_sizes(); + + system_rhs.reinit(2); + system_rhs.block(0).reinit(n_stress_dof); + system_rhs.block(1).reinit(n_gamma_dof); + system_rhs.collect_sizes(); + + for (unsigned int i=0; i +void MixedElastoPlasticity::assemble_system() +{ + QGauss quadrature_formula(1); + + FEValues fe_values(fe, quadrature_formula, + update_values | update_gradients + | update_quadrature_points | update_JxW_values); + + const unsigned int dofs_per_cell = fe.dofs_per_cell; + deallog << "dofs_per_cell: " << fe.dofs_per_cell << std::endl; + + FullMatrix local_matrix(dofs_per_cell, dofs_per_cell); + Vector local_rhs(dofs_per_cell); + + std::vector local_dof_indices(dofs_per_cell); + + + const FEValuesExtractors::Tensor<2> stress(0); + const FEValuesExtractors::Scalar gamma(n_stress_components); + + deallog << "fe.dofs_per_cell: " << fe.dofs_per_cell + << "\tquadrature_formula.size(): " << quadrature_formula.size() + << std::endl; + + std::vector > local_divergences (quadrature_formula.size()); + std::vector > local_values (quadrature_formula.size()); + + + fe_values.reinit (dof_handler.begin_active()); + fe_values[stress].get_function_values (system_rhs, local_values); + fe_values[stress].get_function_divergences (system_rhs, local_divergences); + + for (unsigned int q=0; q +void MixedElastoPlasticity::run() +{ + make_grid_and_dofs(); + assemble_system(); +} + +int main() +{ + std::ofstream logfile ("fe_values_view_21_nonsymmetric/output"); + deallog << std::setprecision (3); + + deallog.attach(logfile); + deallog.depth_console (0); + deallog.threshold_double(1.e-7); + + MixedElastoPlasticity < 3 > elasto_plasticity(1); + elasto_plasticity.run(); +} + diff --git a/tests/deal.II/fe_values_view_21_nonsymmetric/cmp/generic b/tests/deal.II/fe_values_view_21_nonsymmetric/cmp/generic new file mode 100644 index 0000000000..80180cbeef --- /dev/null +++ b/tests/deal.II/fe_values_view_21_nonsymmetric/cmp/generic @@ -0,0 +1,9 @@ + +DEAL::Number of stress components: 9 Number of gamma components: 1 +DEAL::Number of active cells: 1 +DEAL::Total number of cells: 1 +DEAL::Number of degrees of freedom: 80 = (72 + 8) +DEAL::dofs_per_cell: 80 +DEAL::fe.dofs_per_cell: 80 quadrature_formula.size(): 1 +DEAL::3.50 11.5 19.5 27.5 35.5 43.5 51.5 59.5 67.5 +DEAL::6.50 6.00 5.00 diff --git a/tests/deal.II/fe_values_view_21_nonsymmetric/fe_values_view_09/cmp/generic b/tests/deal.II/fe_values_view_21_nonsymmetric/fe_values_view_09/cmp/generic new file mode 100644 index 0000000000..977609c8f4 --- /dev/null +++ b/tests/deal.II/fe_values_view_21_nonsymmetric/fe_values_view_09/cmp/generic @@ -0,0 +1,91 @@ + +DEAL::FE=FESystem<2>[FE_Q<2>(1)-FE_RaviartThomas<2>(1)-FE_Nedelec<2>(1)] +DEAL::component=0 +DEAL::0.807 4.36 +DEAL::0.807 5.29 +DEAL::1.31 4.07 +DEAL::1.31 5.59 +DEAL::component=1 +DEAL::18.2 352. +DEAL::-18.2 337. +DEAL::333. 180. +DEAL::-295. 296. +DEAL::component=2 +DEAL::43.2 -31.7 +DEAL::43.2 118. +DEAL::125. -61.1 +DEAL::125. -40.8 +DEAL::component=3 +DEAL::2.58e-16 5.84 +DEAL::2.58e-16 5.84 +DEAL::3.58e-16 9.52 +DEAL::3.58e-16 9.52 +DEAL::component=4 +DEAL::5.84 -6.75 +DEAL::5.84 6.75 +DEAL::9.52 -11.0 +DEAL::9.52 11.0 +DEAL::FE=FESystem<3>[FE_Q<3>(1)-FE_RaviartThomas<3>(1)-FE_Nedelec<3>(1)] +DEAL::component=0 +DEAL::2.37 4.73 9.46 +DEAL::2.37 4.73 9.46 +DEAL::2.37 4.73 9.46 +DEAL::2.37 4.73 9.46 +DEAL::2.37 4.73 9.46 +DEAL::2.37 4.73 9.46 +DEAL::2.37 4.73 9.46 +DEAL::2.37 4.73 9.46 +DEAL::component=1 +DEAL::8.18e-13 -275. -138. +DEAL::-5.71e-13 -275. -138. +DEAL::-367. -275. 4.71e+03 +DEAL::367. -275. 4.92e+03 +DEAL::-184. 4.57e+03 -138. +DEAL::184. 4.79e+03 -138. +DEAL::4.80e+03 4.57e+03 4.71e+03 +DEAL::-4.38e+03 4.79e+03 4.92e+03 +DEAL::component=2 +DEAL::-275. 1.30e-12 -138. +DEAL::-275. -459. 4.80e+03 +DEAL::-275. -1.40e-12 -138. +DEAL::-275. 459. 5.02e+03 +DEAL::4.67e+03 -91.8 -138. +DEAL::4.67e+03 3.52e+03 4.80e+03 +DEAL::4.88e+03 91.8 -138. +DEAL::4.88e+03 -3.09e+03 5.02e+03 +DEAL::component=3 +DEAL::-275. -138. 1.36e-12 +DEAL::-275. 4.90e+03 -367. +DEAL::4.76e+03 -138. -184. +DEAL::4.76e+03 4.90e+03 2.23e+03 +DEAL::-275. -138. -3.64e-12 +DEAL::-275. 5.11e+03 367. +DEAL::4.97e+03 -138. 184. +DEAL::4.97e+03 5.11e+03 -1.81e+03 +DEAL::component=4 +DEAL::-7.70e-16 5.60 22.4 +DEAL::-7.70e-16 5.60 22.4 +DEAL::-6.69e-16 5.60 22.4 +DEAL::-6.69e-16 5.60 22.4 +DEAL::1.58e-16 5.60 22.4 +DEAL::1.58e-16 5.60 22.4 +DEAL::9.52e-16 5.60 22.4 +DEAL::9.52e-16 5.60 22.4 +DEAL::component=5 +DEAL::5.60 5.78e-16 22.4 +DEAL::5.60 -1.39e-15 22.4 +DEAL::5.60 5.78e-16 22.4 +DEAL::5.60 -1.39e-15 22.4 +DEAL::5.60 -6.60e-16 22.4 +DEAL::5.60 3.53e-16 22.4 +DEAL::5.60 -6.60e-16 22.4 +DEAL::5.60 3.53e-16 22.4 +DEAL::component=6 +DEAL::5.60 11.2 -1.38e-15 +DEAL::5.60 11.2 1.96e-16 +DEAL::5.60 11.2 1.23e-17 +DEAL::5.60 11.2 1.50e-15 +DEAL::5.60 11.2 -1.38e-15 +DEAL::5.60 11.2 1.96e-16 +DEAL::5.60 11.2 1.23e-17 +DEAL::5.60 11.2 1.50e-15 -- 2.39.5