From 5e95a73749f0df854ab54074fceaaaf4236a5fa0 Mon Sep 17 00:00:00 2001 From: bangerth Date: Tue, 20 Aug 2013 14:46:56 +0000 Subject: [PATCH] Patch by Juan Carlos Araujo Cabarcas: use higher precision arithmetic in computing some data for high order mappings. git-svn-id: https://svn.dealii.org/trunk@30357 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/doc/news/changes.h | 8 ++++++++ deal.II/source/fe/mapping_q.cc | 32 +++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/deal.II/doc/news/changes.h b/deal.II/doc/news/changes.h index 760fb61e26..c3781bca61 100644 --- a/deal.II/doc/news/changes.h +++ b/deal.II/doc/news/changes.h @@ -56,6 +56,14 @@ inconvenience this causes.

Specific improvements

    +
  1. + Fixed: Some operations in the MappingQ class are now done in higher + precision arithmetic to mitigate the ill-conditioning that appears + when using mappings of high order (say, order 6 or 8 or 10). +
    + (Juan Carlos Araujo Cabarcas, 2013/08/20) +
  2. +
  3. Fixed: The SLEPcWrappers classes could not be compiled for 64-bit indices. This is now fixed. diff --git a/deal.II/source/fe/mapping_q.cc b/deal.II/source/fe/mapping_q.cc index 18cb2b1110..8b41ecab31 100644 --- a/deal.II/source/fe/mapping_q.cc +++ b/deal.II/source/fe/mapping_q.cc @@ -742,7 +742,7 @@ MappingQ<3>::set_laplace_on_hex_vector(Table<2,double> &lohvs) const // one. check this for (unsigned int unit_point=0; unit_pointdegree*this->degree, ExcInternalError()); } @@ -790,29 +790,39 @@ MappingQ::compute_laplace_vector(Table<2,double> &lvs) const // Compute the stiffness matrix of // the inner dofs - FullMatrix S(n_inner); + FullMatrix S(n_inner); for (unsigned int point=0; point T(n_inner, n_outer); + FullMatrix T(n_inner, n_outer); for (unsigned int point=0; point S_1(n_inner); + FullMatrix S_1(n_inner); S_1.invert(S); - FullMatrix S_1_T(n_inner, n_outer); + FullMatrix S_1_T(n_inner, n_outer); // S:=S_1*T S_1.mmult(S_1_T,T); -- 2.39.5