From: Wolfgang Bangerth Date: Tue, 2 Jun 1998 11:26:13 +0000 (+0000) Subject: Make compilation process specific of the space dimension wanted. This avoid unnecessa... X-Git-Tag: v8.0.0~22882 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=31687129f20f79c535e1fa0541041211fc4a1543;p=dealii.git Make compilation process specific of the space dimension wanted. This avoid unnecessarily long compile times for the library as well as too large libraries which themselves slow down the linking process of user executables. The selection of the dimension you want the library compiled for is done using the *deal_II_dimension* variable passed through the preprocessor (defined in the Make.global_options file). git-svn-id: https://svn.dealii.org/trunk@372 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/base/source/function.cc b/deal.II/base/source/function.cc index 4218a50a18..f6d4622180 100644 --- a/deal.II/base/source/function.cc +++ b/deal.II/base/source/function.cc @@ -151,11 +151,7 @@ void ConstantFunction::value_list (const vector > &points, // explicit instantiations -template class Function<1>; -template class Function<2>; -template class ZeroFunction<1>; -template class ZeroFunction<2>; - -template class ConstantFunction<1>; -template class ConstantFunction<2>; +template class Function; +template class ZeroFunction; +template class ConstantFunction; diff --git a/deal.II/base/source/quadrature.cc b/deal.II/base/source/quadrature.cc index c84fba356a..63182b380b 100644 --- a/deal.II/base/source/quadrature.cc +++ b/deal.II/base/source/quadrature.cc @@ -46,6 +46,7 @@ const vector & Quadrature::get_weights () const { +#if deal_II_dimension == 2 template <> void QProjector<2>::project_to_face (const Quadrature<1> &quadrature, @@ -147,9 +148,10 @@ void QProjector<2>::project_to_subface (const Quadrature<1> &quadrature, }; }; +#endif -// explicite instantiations +// explicit instantiations; note: we need them all for all dimensions template class Quadrature<1>; template class Quadrature<2>; diff --git a/deal.II/base/source/quadrature_lib.cc b/deal.II/base/source/quadrature_lib.cc index 127862ba9b..595e72cb5b 100644 --- a/deal.II/base/source/quadrature_lib.cc +++ b/deal.II/base/source/quadrature_lib.cc @@ -4,6 +4,13 @@ #include +// please note: for a given dimension, we need the quadrature formulae +// for all lower dimensions as well. That is why in this file the check +// is for deal_II_dimension >= any_number and not for == + + + +#if deal_II_dimension >= 1 template <> QGauss2<1>::QGauss2 () : @@ -30,59 +37,138 @@ QGauss2<1>::QGauss2 () : template <> -QGauss2<2>::QGauss2 () : - Quadrature<2> (4) +QGauss3<1>::QGauss3 () : + Quadrature<1> (3) { // points on [-1,1] - static const double xpts_normal[] = { -sqrt(1./3.), sqrt(1./3.) }; + static const double xpts_normal[] = { -sqrt(3./5.), + 0., + sqrt(3./5.) }; // weights on [-1,1] - static const double wts_normal[] = { 1., 1. }; + static const double wts_normal[] = { 5./9., + 8./9., + 5./9. }; - // points and weights on [0,1]^2 + // points and weights on [0,1] static const double xpts[] = { (xpts_normal[0]+1)/2., - (xpts_normal[0]+1)/2., (xpts_normal[1]+1)/2., - (xpts_normal[1]+1)/2. }; - static const double ypts[] = { (xpts_normal[0]+1)/2., + (xpts_normal[2]+1)/2. }; + static const double wts[] = { wts_normal[0]/2., + wts_normal[1]/2., + wts_normal[2]/2. }; + + for (unsigned int i=0; i(xpts[i]); + weights[i] = wts[i]; + }; +}; + + +template <> +QGauss4<1>::QGauss4 () : + Quadrature<1> (4) +{ + // points on [-1,1] + static const double xpts_normal[] = { -sqrt(1./7.*(3-4*sqrt(0.3))), + -sqrt(1./7.*(3+4*sqrt(0.3))), + +sqrt(1./7.*(3-4*sqrt(0.3))), + +sqrt(1./7.*(3+4*sqrt(0.3))) }; + // weights on [-1,1] + static const double wts_normal[] = { 1./2. + 1./12.*sqrt(10./3.), + 1./2. - 1./12.*sqrt(10./3.), + 1./2. + 1./12.*sqrt(10./3.), + 1./2. - 1./12.*sqrt(10./3.) }; + + // points and weights on [0,1] + static const double xpts[] = { (xpts_normal[0]+1)/2., (xpts_normal[1]+1)/2., - (xpts_normal[0]+1)/2., - (xpts_normal[1]+1)/2. }; - static const double wts[] = { wts_normal[0]/4., - wts_normal[1]/4., - wts_normal[0]/4., - wts_normal[1]/4. }; + (xpts_normal[2]+1)/2., + (xpts_normal[3]+1)/2. }; + static const double wts[] = { wts_normal[0]/2., + wts_normal[1]/2., + wts_normal[2]/2., + wts_normal[3]/2. }; for (unsigned int i=0; i(xpts[i], ypts[i]); + quadrature_points[i] = Point<1>(xpts[i]); weights[i] = wts[i]; }; }; +template <> +QGauss5<1>::QGauss5 () : + Quadrature<1> (5) +{ + // points on [-1,1] + static const double xpts_normal[] = { -sqrt(1./9.*(5.-2*sqrt(10./7.))), + -sqrt(1./9.*(5.+2*sqrt(10./7.))), + 0, + +sqrt(1./9.*(5.-2*sqrt(10./7.))), + +sqrt(1./9.*(5.+2*sqrt(10./7.))) }; + // weights on [-1,1] + static const double wts_normal[] = { 0.3*(-0.7+5.*sqrt(0.7))/(-2.+5.*sqrt(0.7)), + 0.3*(+0.7+5.*sqrt(0.7))/(+2.+5.*sqrt(0.7)), + 128./225., + 0.3*(-0.7+5.*sqrt(0.7))/(-2.+5.*sqrt(0.7)), + 0.3*(+0.7+5.*sqrt(0.7))/(+2.+5.*sqrt(0.7)) }; + + // points and weights on [0,1] + static const double xpts[] = { (xpts_normal[0]+1)/2., + (xpts_normal[1]+1)/2., + (xpts_normal[2]+1)/2., + (xpts_normal[3]+1)/2., + (xpts_normal[4]+1)/2. }; + static const double wts[] = { wts_normal[0]/2., + wts_normal[1]/2., + wts_normal[2]/2., + wts_normal[3]/2., + wts_normal[4]/2. }; + + for (unsigned int i=0; i(xpts[i]); + weights[i] = wts[i]; + }; +}; + template <> -QGauss3<1>::QGauss3 () : - Quadrature<1> (3) +QGauss6<1>::QGauss6 () : + Quadrature<1> (6) { // points on [-1,1] - static const double xpts_normal[] = { -sqrt(3./5.), - 0., - sqrt(3./5.) }; + static const double xpts_normal[] = { -0.932469514203152, + -0.661209386466265, + -0.238619186083197, + +0.238619186083197, + +0.661209386466265, + +0.932469514203152 }; // weights on [-1,1] - static const double wts_normal[] = { 5./9., - 8./9., - 5./9. }; + static const double wts_normal[] = { 0.171324492379170, + 0.360761573048139, + 0.467913934572691, + 0.467913934572691, + 0.360761573048139, + 0.171324492379170 }; // points and weights on [0,1] static const double xpts[] = { (xpts_normal[0]+1)/2., (xpts_normal[1]+1)/2., - (xpts_normal[2]+1)/2. }; + (xpts_normal[2]+1)/2., + (xpts_normal[3]+1)/2., + (xpts_normal[4]+1)/2., + (xpts_normal[5]+1)/2. }; static const double wts[] = { wts_normal[0]/2., wts_normal[1]/2., - wts_normal[2]/2. }; + wts_normal[2]/2., + wts_normal[3]/2., + wts_normal[4]/2., + wts_normal[5]/2. }; for (unsigned int i=0; i::QGauss3 () : template <> -QGauss3<2>::QGauss3 () : - Quadrature<2> (9) +QGauss7<1>::QGauss7 () : + Quadrature<1> (7) { // points on [-1,1] - static const double xpts_normal[] = { -sqrt(3./5.), - 0., - sqrt(3./5.) }; + static const double xpts_normal[] = { -0.949107912342759, + -0.741531185599394, + -0.405845151377397, + 0, + +0.405845151377397, + +0.741531185599394, + +0.949107912342759 }; // weights on [-1,1] - static const double wts_normal[] = { 5./9., - 8./9., - 5./9. }; + static const double wts_normal[] = { 0.129484966168870, + 0.279705391489277, + 0.381830050505119, + 0.417959183673469, + 0.381830050505119, + 0.279705391489277, + 0.129484966168870 }; - // points and weights on [0,1]^2 + // points and weights on [0,1] static const double xpts[] = { (xpts_normal[0]+1)/2., (xpts_normal[1]+1)/2., (xpts_normal[2]+1)/2., - (xpts_normal[0]+1)/2., + (xpts_normal[3]+1)/2., + (xpts_normal[4]+1)/2., + (xpts_normal[5]+1)/2., + (xpts_normal[6]+1)/2. }; + static const double wts[] = { wts_normal[0]/2., + wts_normal[1]/2., + wts_normal[2]/2., + wts_normal[3]/2., + wts_normal[4]/2., + wts_normal[5]/2., + wts_normal[6]/2. }; + + for (unsigned int i=0; i(xpts[i]); + weights[i] = wts[i]; + }; +}; + + + +template <> +QGauss8<1>::QGauss8 () : + Quadrature<1> (8) +{ + // points on [-1,1] + static const double xpts_normal[] = { -0.960289856497536, + -0.796666477413627, + -0.525532409916329, + -0.183434642495650, + +0.183434642495650, + +0.525532409916329, + +0.796666477413627, + +0.960289856497536 }; + // weights on [-1,1] + static const double wts_normal[] = { 0.101228536200376, + 0.222381034453374, + 0.313706645877887, + 0.362683783378362, + 0.362683783378362, + 0.313706645877887, + 0.222381034453374, + 0.101228536200376 }; + + // points and weights on [0,1] + static const double xpts[] = { (xpts_normal[0]+1)/2., (xpts_normal[1]+1)/2., (xpts_normal[2]+1)/2., + (xpts_normal[3]+1)/2., + (xpts_normal[4]+1)/2., + (xpts_normal[5]+1)/2., + (xpts_normal[6]+1)/2., + (xpts_normal[7]+1)/2. }; + static const double wts[] = { wts_normal[0]/2., + wts_normal[1]/2., + wts_normal[2]/2., + wts_normal[3]/2., + wts_normal[4]/2., + wts_normal[5]/2., + wts_normal[6]/2., + wts_normal[7]/2. }; + + for (unsigned int i=0; i(xpts[i]); + weights[i] = wts[i]; + }; +}; + + + +template <> +QMidpoint<1>::QMidpoint () : + Quadrature<1>(1) +{ + quadrature_points[0] = Point<1>(0.5); + weights[0] = 1.0; +}; + + + +template <> +QSimpson<1>::QSimpson () : + Quadrature<1> (3) +{ + static const double xpts[] = { 0.0, 0.5, 1.0 }; + static const double wts[] = { 1./6., 2./3., 1./6. }; + + for (unsigned int i=0; i(xpts[i]); + weights[i] = wts[i]; + }; +}; + + + +template <> +QTrapez<1>::QTrapez () : + Quadrature<1> (2) +{ + static const double xpts[] = { 0.0, 1.0 }; + static const double wts[] = { 0.5, 0.5 }; + + for (unsigned int i=0; i(xpts[i]); + weights[i] = wts[i]; + }; +}; + +#endif + + + +#if deal_II_dimension >= 2 + +template <> +QGauss2<2>::QGauss2 () : + Quadrature<2> (4) +{ + // points on [-1,1] + static const double xpts_normal[] = { -sqrt(1./3.), sqrt(1./3.) }; + // weights on [-1,1] + static const double wts_normal[] = { 1., 1. }; + + // points and weights on [0,1]^2 + static const double xpts[] = { (xpts_normal[0]+1)/2., (xpts_normal[0]+1)/2., (xpts_normal[1]+1)/2., - (xpts_normal[2]+1)/2. }; + (xpts_normal[1]+1)/2. }; static const double ypts[] = { (xpts_normal[0]+1)/2., - (xpts_normal[0]+1)/2., - (xpts_normal[0]+1)/2., - (xpts_normal[1]+1)/2., - (xpts_normal[1]+1)/2., (xpts_normal[1]+1)/2., - (xpts_normal[2]+1)/2., - (xpts_normal[2]+1)/2., - (xpts_normal[2]+1)/2. }; - static const double wts[] = { wts_normal[0]/2.*wts_normal[0]/2., - wts_normal[1]/2.*wts_normal[0]/2., - wts_normal[2]/2.*wts_normal[0]/2., - wts_normal[0]/2.*wts_normal[1]/2., - wts_normal[1]/2.*wts_normal[1]/2., - wts_normal[2]/2.*wts_normal[1]/2., - wts_normal[0]/2.*wts_normal[2]/2., - wts_normal[1]/2.*wts_normal[2]/2., - wts_normal[2]/2.*wts_normal[2]/2. }; - + (xpts_normal[0]+1)/2., + (xpts_normal[1]+1)/2. }; + static const double wts[] = { wts_normal[0]/4., + wts_normal[1]/4., + wts_normal[0]/4., + wts_normal[1]/4. }; + for (unsigned int i=0; i(xpts[i], ypts[i]); @@ -144,37 +353,51 @@ QGauss3<2>::QGauss3 () : - - - template <> -QGauss4<1>::QGauss4 () : - Quadrature<1> (4) +QGauss3<2>::QGauss3 () : + Quadrature<2> (9) { // points on [-1,1] - static const double xpts_normal[] = { -sqrt(1./7.*(3-4*sqrt(0.3))), - -sqrt(1./7.*(3+4*sqrt(0.3))), - +sqrt(1./7.*(3-4*sqrt(0.3))), - +sqrt(1./7.*(3+4*sqrt(0.3))) }; + static const double xpts_normal[] = { -sqrt(3./5.), + 0., + sqrt(3./5.) }; // weights on [-1,1] - static const double wts_normal[] = { 1./2. + 1./12.*sqrt(10./3.), - 1./2. - 1./12.*sqrt(10./3.), - 1./2. + 1./12.*sqrt(10./3.), - 1./2. - 1./12.*sqrt(10./3.) }; + static const double wts_normal[] = { 5./9., + 8./9., + 5./9. }; - // points and weights on [0,1] + // points and weights on [0,1]^2 static const double xpts[] = { (xpts_normal[0]+1)/2., (xpts_normal[1]+1)/2., (xpts_normal[2]+1)/2., - (xpts_normal[3]+1)/2. }; - static const double wts[] = { wts_normal[0]/2., - wts_normal[1]/2., - wts_normal[2]/2., - wts_normal[3]/2. }; - + (xpts_normal[0]+1)/2., + (xpts_normal[1]+1)/2., + (xpts_normal[2]+1)/2., + (xpts_normal[0]+1)/2., + (xpts_normal[1]+1)/2., + (xpts_normal[2]+1)/2. }; + static const double ypts[] = { (xpts_normal[0]+1)/2., + (xpts_normal[0]+1)/2., + (xpts_normal[0]+1)/2., + (xpts_normal[1]+1)/2., + (xpts_normal[1]+1)/2., + (xpts_normal[1]+1)/2., + (xpts_normal[2]+1)/2., + (xpts_normal[2]+1)/2., + (xpts_normal[2]+1)/2. }; + static const double wts[] = { wts_normal[0]/2.*wts_normal[0]/2., + wts_normal[1]/2.*wts_normal[0]/2., + wts_normal[2]/2.*wts_normal[0]/2., + wts_normal[0]/2.*wts_normal[1]/2., + wts_normal[1]/2.*wts_normal[1]/2., + wts_normal[2]/2.*wts_normal[1]/2., + wts_normal[0]/2.*wts_normal[2]/2., + wts_normal[1]/2.*wts_normal[2]/2., + wts_normal[2]/2.*wts_normal[2]/2. }; + for (unsigned int i=0; i(xpts[i]); + quadrature_points[i] = Point<2>(xpts[i], ypts[i]); weights[i] = wts[i]; }; }; @@ -255,45 +478,6 @@ QGauss4<2>::QGauss4 () : - -template <> -QGauss5<1>::QGauss5 () : - Quadrature<1> (5) -{ - // points on [-1,1] - static const double xpts_normal[] = { -sqrt(1./9.*(5.-2*sqrt(10./7.))), - -sqrt(1./9.*(5.+2*sqrt(10./7.))), - 0, - +sqrt(1./9.*(5.-2*sqrt(10./7.))), - +sqrt(1./9.*(5.+2*sqrt(10./7.))) }; - // weights on [-1,1] - static const double wts_normal[] = { 0.3*(-0.7+5.*sqrt(0.7))/(-2.+5.*sqrt(0.7)), - 0.3*(+0.7+5.*sqrt(0.7))/(+2.+5.*sqrt(0.7)), - 128./225., - 0.3*(-0.7+5.*sqrt(0.7))/(-2.+5.*sqrt(0.7)), - 0.3*(+0.7+5.*sqrt(0.7))/(+2.+5.*sqrt(0.7)) }; - - // points and weights on [0,1] - static const double xpts[] = { (xpts_normal[0]+1)/2., - (xpts_normal[1]+1)/2., - (xpts_normal[2]+1)/2., - (xpts_normal[3]+1)/2., - (xpts_normal[4]+1)/2. }; - static const double wts[] = { wts_normal[0]/2., - wts_normal[1]/2., - wts_normal[2]/2., - wts_normal[3]/2., - wts_normal[4]/2. }; - - for (unsigned int i=0; i(xpts[i]); - weights[i] = wts[i]; - }; -}; - - - template <> QGauss5<2>::QGauss5 () : Quadrature<2> (25) @@ -411,160 +595,6 @@ QGauss5<2>::QGauss5 () : -template <> -QGauss6<1>::QGauss6 () : - Quadrature<1> (6) -{ - // points on [-1,1] - static const double xpts_normal[] = { -0.932469514203152, - -0.661209386466265, - -0.238619186083197, - +0.238619186083197, - +0.661209386466265, - +0.932469514203152 }; - // weights on [-1,1] - static const double wts_normal[] = { 0.171324492379170, - 0.360761573048139, - 0.467913934572691, - 0.467913934572691, - 0.360761573048139, - 0.171324492379170 }; - - // points and weights on [0,1] - static const double xpts[] = { (xpts_normal[0]+1)/2., - (xpts_normal[1]+1)/2., - (xpts_normal[2]+1)/2., - (xpts_normal[3]+1)/2., - (xpts_normal[4]+1)/2., - (xpts_normal[5]+1)/2. }; - static const double wts[] = { wts_normal[0]/2., - wts_normal[1]/2., - wts_normal[2]/2., - wts_normal[3]/2., - wts_normal[4]/2., - wts_normal[5]/2. }; - - for (unsigned int i=0; i(xpts[i]); - weights[i] = wts[i]; - }; -}; - - - -template <> -QGauss7<1>::QGauss7 () : - Quadrature<1> (7) -{ - // points on [-1,1] - static const double xpts_normal[] = { -0.949107912342759, - -0.741531185599394, - -0.405845151377397, - 0, - +0.405845151377397, - +0.741531185599394, - +0.949107912342759 }; - // weights on [-1,1] - static const double wts_normal[] = { 0.129484966168870, - 0.279705391489277, - 0.381830050505119, - 0.417959183673469, - 0.381830050505119, - 0.279705391489277, - 0.129484966168870 }; - - // points and weights on [0,1] - static const double xpts[] = { (xpts_normal[0]+1)/2., - (xpts_normal[1]+1)/2., - (xpts_normal[2]+1)/2., - (xpts_normal[3]+1)/2., - (xpts_normal[4]+1)/2., - (xpts_normal[5]+1)/2., - (xpts_normal[6]+1)/2. }; - static const double wts[] = { wts_normal[0]/2., - wts_normal[1]/2., - wts_normal[2]/2., - wts_normal[3]/2., - wts_normal[4]/2., - wts_normal[5]/2., - wts_normal[6]/2. }; - - for (unsigned int i=0; i(xpts[i]); - weights[i] = wts[i]; - }; -}; - - - -template <> -QGauss8<1>::QGauss8 () : - Quadrature<1> (8) -{ - // points on [-1,1] - static const double xpts_normal[] = { -0.960289856497536, - -0.796666477413627, - -0.525532409916329, - -0.183434642495650, - +0.183434642495650, - +0.525532409916329, - +0.796666477413627, - +0.960289856497536 }; - // weights on [-1,1] - static const double wts_normal[] = { 0.101228536200376, - 0.222381034453374, - 0.313706645877887, - 0.362683783378362, - 0.362683783378362, - 0.313706645877887, - 0.222381034453374, - 0.101228536200376 }; - - // points and weights on [0,1] - static const double xpts[] = { (xpts_normal[0]+1)/2., - (xpts_normal[1]+1)/2., - (xpts_normal[2]+1)/2., - (xpts_normal[3]+1)/2., - (xpts_normal[4]+1)/2., - (xpts_normal[5]+1)/2., - (xpts_normal[6]+1)/2., - (xpts_normal[7]+1)/2. }; - static const double wts[] = { wts_normal[0]/2., - wts_normal[1]/2., - wts_normal[2]/2., - wts_normal[3]/2., - wts_normal[4]/2., - wts_normal[5]/2., - wts_normal[6]/2., - wts_normal[7]/2. }; - - for (unsigned int i=0; i(xpts[i]); - weights[i] = wts[i]; - }; -}; - - - - - - - - - -template <> -QMidpoint<1>::QMidpoint () : - Quadrature<1>(1) -{ - quadrature_points[0] = Point<1>(0.5); - weights[0] = 1.0; -}; - - - template <> QMidpoint<2>::QMidpoint () : Quadrature<2>(1) @@ -575,23 +605,6 @@ QMidpoint<2>::QMidpoint () : - -template <> -QSimpson<1>::QSimpson () : - Quadrature<1> (3) -{ - static const double xpts[] = { 0.0, 0.5, 1.0 }; - static const double wts[] = { 1./6., 2./3., 1./6. }; - - for (unsigned int i=0; i(xpts[i]); - weights[i] = wts[i]; - }; -}; - - - template <> QSimpson<2>::QSimpson () : Quadrature<2> (9) @@ -615,25 +628,6 @@ QSimpson<2>::QSimpson () : - - - -template <> -QTrapez<1>::QTrapez () : - Quadrature<1> (2) -{ - static const double xpts[] = { 0.0, 1.0 }; - static const double wts[] = { 0.5, 0.5 }; - - for (unsigned int i=0; i(xpts[i]); - weights[i] = wts[i]; - }; -}; - - - template <> QTrapez<2>::QTrapez () : Quadrature<2> (4) @@ -649,6 +643,4 @@ QTrapez<2>::QTrapez () : }; }; - - - +#endif diff --git a/deal.II/deal.II/Attic/examples/poisson/Makefile b/deal.II/deal.II/Attic/examples/poisson/Makefile index 6c3cbc83fb..7fcb84c7b6 100644 --- a/deal.II/deal.II/Attic/examples/poisson/Makefile +++ b/deal.II/deal.II/Attic/examples/poisson/Makefile @@ -15,7 +15,7 @@ debug-mode = on # If you want your program to be linked with extra object or library # files, specify them here: -user-libs = ../../../mia/control.o +user-libs = ../../../mia/control.o ../../lib/libfe.g.a # To run the program, use "make run"; to give parameters to the program, # give the parameters to the following variable: diff --git a/deal.II/deal.II/Attic/examples/poisson/equation.cc b/deal.II/deal.II/Attic/examples/poisson/equation.cc index ea43603d23..c598c614be 100644 --- a/deal.II/deal.II/Attic/examples/poisson/equation.cc +++ b/deal.II/deal.II/Attic/examples/poisson/equation.cc @@ -5,7 +5,7 @@ - +#if deal_II_dimension == 1 void PoissonEquation<1>::assemble (dFMatrix &cell_matrix, dVector &rhs, @@ -24,8 +24,12 @@ void PoissonEquation<1>::assemble (dFMatrix &cell_matrix, }; }; +#endif + +#if deal_II_dimension == 2 + void PoissonEquation<2>::assemble (dFMatrix &cell_matrix, dVector &rhs, const FEValues<2> &fe_values, @@ -50,6 +54,8 @@ void PoissonEquation<2>::assemble (dFMatrix &cell_matrix, }; }; +#endif + template @@ -73,5 +79,4 @@ void PoissonEquation::assemble (dVector &, -template class PoissonEquation<1>; template class PoissonEquation<2>; diff --git a/deal.II/deal.II/Make.global_options b/deal.II/deal.II/Make.global_options index 482794363a..556c86ad32 100644 --- a/deal.II/deal.II/Make.global_options +++ b/deal.II/deal.II/Make.global_options @@ -1,16 +1,18 @@ # $Id$ # Global options for all compilations +deal_II_dimension=2 CXX = c++ INCLUDE = -I../../include -I../../../lac/include \ -I../../../base/include -I../../../mia/include CXXFLAGS.g= -DDEBUG -g -Wall -W -pedantic -Wconversion \ -Winline -Woverloaded-virtual -fno-rtti -fno-exceptions \ - $(INCLUDE) + $(INCLUDE) -Ddeal_II_dimension=$(deal_II_dimension) CXXFLAGS =-O3 -Wuninitialized -finline-functions -ffast-math \ -funroll-loops -felide-constructors -fnonnull-objects \ - -pg -fno-rtti -fno-exceptions $(INCLUDE) + -pg -fno-rtti -fno-exceptions $(INCLUDE) \ + -Ddeal_II_dimension=$(deal_II_dimension) ifeq ($(shell uname),Linux) CXX = /home/wolf/bin/gcc/bin/c++ diff --git a/deal.II/deal.II/source/dofs/dof_accessor.cc b/deal.II/deal.II/source/dofs/dof_accessor.cc index ab6223817d..06c0902934 100644 --- a/deal.II/deal.II/source/dofs/dof_accessor.cc +++ b/deal.II/deal.II/source/dofs/dof_accessor.cc @@ -15,7 +15,7 @@ /*------------------------- Functions: DoFLineAccessor -----------------------*/ -template +template int DoFLineAccessor::dof_index (const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected @@ -32,7 +32,7 @@ int DoFLineAccessor::dof_index (const unsigned int i) const { -template +template void DoFLineAccessor::set_dof_index (const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -49,7 +49,7 @@ void DoFLineAccessor::set_dof_index (const unsigned int i, -template +template int DoFLineAccessor::vertex_dof_index (const unsigned int vertex, const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -66,7 +66,7 @@ int DoFLineAccessor::vertex_dof_index (const unsigned int vertex, -template +template void DoFLineAccessor::set_vertex_dof_index (const unsigned int vertex, const unsigned int i, const int index) const { @@ -84,7 +84,7 @@ void DoFLineAccessor::set_vertex_dof_index (const unsigned int ve -template +template void DoFLineAccessor::get_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -105,7 +105,7 @@ DoFLineAccessor::get_dof_indices (vector &dof_indices) const -template +template TriaIterator > DoFLineAccessor::child (const unsigned int i) const { TriaIterator > q (tria, @@ -122,7 +122,7 @@ DoFLineAccessor::child (const unsigned int i) const { -template +template void DoFLineAccessor::copy_from (const DoFLineAccessor &a) { BaseClass::copy_from (a); set_dof_handler (a.dof_handler); @@ -133,7 +133,7 @@ void DoFLineAccessor::copy_from (const DoFLineAccessor +template int DoFQuadAccessor::dof_index (const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); // make sure a FE has been selected @@ -148,7 +148,7 @@ int DoFQuadAccessor::dof_index (const unsigned int i) const { -template +template void DoFQuadAccessor::set_dof_index (const unsigned int i, const int index) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -164,7 +164,7 @@ void DoFQuadAccessor::set_dof_index (const unsigned int i, -template +template int DoFQuadAccessor::vertex_dof_index (const unsigned int vertex, const unsigned int i) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -181,7 +181,7 @@ int DoFQuadAccessor::vertex_dof_index (const unsigned int vertex, -template +template void DoFQuadAccessor::set_vertex_dof_index (const unsigned int vertex, const unsigned int i, const int index) const { @@ -199,7 +199,7 @@ void DoFQuadAccessor::set_vertex_dof_index (const unsigned int ve -template +template void DoFQuadAccessor::get_dof_indices (vector &dof_indices) const { Assert (dof_handler != 0, ExcInvalidObject()); @@ -225,7 +225,7 @@ DoFQuadAccessor::get_dof_indices (vector &dof_indices) const -template +template TriaIterator > > DoFQuadAccessor::line (const unsigned int i) const { Assert (i<4, ExcInvalidIndex (i, 0, 4)); @@ -241,7 +241,7 @@ DoFQuadAccessor::line (const unsigned int i) const { -template +template TriaIterator > DoFQuadAccessor::child (const unsigned int i) const { TriaIterator > q (tria, @@ -258,7 +258,7 @@ DoFQuadAccessor::child (const unsigned int i) const { -template +template void DoFQuadAccessor::copy_from (const DoFQuadAccessor &a) { BaseClass::copy_from (a); set_dof_handler (a.dof_handler); @@ -303,6 +303,7 @@ DoFCellAccessor::child (const unsigned int i) const { +#if deal_II_dimension == 1 template <> DoFSubstructAccessor<1>::face_iterator @@ -313,14 +314,6 @@ DoFCellAccessor<1>::face (const unsigned int) const { -template <> -DoFSubstructAccessor<2>::face_iterator -DoFCellAccessor<2>::face (const unsigned int i) const { - return line(i); -}; - - - template <> void DoFCellAccessor<1>::get_dof_values (const dVector &values, @@ -342,6 +335,17 @@ DoFCellAccessor<1>::get_dof_values (const dVector &values, *next_dof_value++ = values(dof_index(d)); }; +#endif + + + +#if deal_II_dimension == 2 + +template <> +DoFSubstructAccessor<2>::face_iterator +DoFCellAccessor<2>::face (const unsigned int i) const { + return line(i); +}; @@ -370,7 +374,7 @@ DoFCellAccessor<2>::get_dof_values (const dVector &values, *next_dof_value++ = values(dof_index(d)); }; - +#endif @@ -379,23 +383,27 @@ DoFCellAccessor<2>::get_dof_values (const dVector &values, // explicit instantiations +#if deal_II_dimension == 1 template class DoFLineAccessor<1,CellAccessor<1> >; template class DoFCellAccessor<1>; +template class TriaRawIterator<1,DoFCellAccessor<1> >; +template class TriaIterator<1,DoFCellAccessor<1> >; +template class TriaActiveIterator<1,DoFCellAccessor<1> >; +#endif + +#if deal_II_dimension == 2 template class DoFLineAccessor<2,LineAccessor<2> >; template class DoFQuadAccessor<2,QuadAccessor<2> >; template class DoFQuadAccessor<2,CellAccessor<2> >; template class DoFCellAccessor<2>; -template class TriaRawIterator<1,DoFCellAccessor<1> >; template class TriaRawIterator<2,DoFLineAccessor<2,LineAccessor<2> > >; template class TriaRawIterator<2,DoFCellAccessor<2> >; - -template class TriaIterator<1,DoFCellAccessor<1> >; template class TriaIterator<2,DoFLineAccessor<2,LineAccessor<2> > >; template class TriaIterator<2,DoFCellAccessor<2> >; - -template class TriaActiveIterator<1,DoFCellAccessor<1> >; template class TriaActiveIterator<2,DoFLineAccessor<2,LineAccessor<2> > >; template class TriaActiveIterator<2,DoFCellAccessor<2> >; +#endif + diff --git a/deal.II/deal.II/source/dofs/dof_handler.cc b/deal.II/deal.II/source/dofs/dof_handler.cc index 2ec740af63..8b44e7658e 100644 --- a/deal.II/deal.II/source/dofs/dof_handler.cc +++ b/deal.II/deal.II/source/dofs/dof_handler.cc @@ -15,6 +15,7 @@ + template DoFHandler::DoFHandler (Triangulation *tria) : tria(tria), @@ -32,6 +33,9 @@ DoFHandler::~DoFHandler () { + +#if deal_II_dimension == 1 + template <> DoFHandler<1>::raw_cell_iterator DoFHandler<1>::begin_raw (const unsigned int level) const { @@ -112,183 +116,266 @@ DoFHandler<1>::last_active (const unsigned int level) const { - - template <> -DoFHandler<2>::raw_cell_iterator -DoFHandler<2>::begin_raw (const unsigned int level) const { - return begin_raw_quad (level); +DoFDimensionInfo<1>::raw_face_iterator +DoFHandler<1>::begin_raw_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -DoFHandler<2>::cell_iterator -DoFHandler<2>::begin (const unsigned int level) const { - return begin_quad (level); +DoFDimensionInfo<1>::face_iterator +DoFHandler<1>::begin_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -DoFHandler<2>::active_cell_iterator -DoFHandler<2>::begin_active (const unsigned int level) const { - return begin_active_quad (level); +DoFDimensionInfo<1>::active_face_iterator +DoFHandler<1>::begin_active_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -DoFHandler<2>::raw_cell_iterator -DoFHandler<2>::end () const { - return end_quad (); +DoFDimensionInfo<1>::raw_face_iterator +DoFHandler<1>::end_face () const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -DoFHandler<2>::raw_cell_iterator -DoFHandler<2>::last_raw () const { - return last_raw_quad (); +DoFDimensionInfo<1>::raw_face_iterator +DoFHandler<1>::last_raw_face () const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -DoFHandler<2>::raw_cell_iterator -DoFHandler<2>::last_raw (const unsigned int level) const { - return last_raw_quad (level); +DoFDimensionInfo<1>::raw_face_iterator +DoFHandler<1>::last_raw_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -DoFHandler<2>::cell_iterator -DoFHandler<2>::last () const { - return last_quad (); +DoFDimensionInfo<1>::face_iterator +DoFHandler<1>::last_face () const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -DoFHandler<2>::cell_iterator -DoFHandler<2>::last (const unsigned int level) const { - return last_quad (level); +DoFDimensionInfo<1>::face_iterator +DoFHandler<1>::last_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -DoFHandler<2>::active_cell_iterator -DoFHandler<2>::last_active () const { - return last_active_quad (); +DoFDimensionInfo<1>::active_face_iterator +DoFHandler<1>::last_active_face () const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -DoFHandler<2>::active_cell_iterator -DoFHandler<2>::last_active (const unsigned int level) const { - return last_active_quad (level); +DoFDimensionInfo<1>::active_face_iterator +DoFHandler<1>::last_active_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; -//------------------------------------------------------------------ +template <> +DoFHandler<1>::raw_quad_iterator +DoFHandler<1>::begin_raw_quad (const unsigned int) const { + Assert (false, ExcNotImplemented()); + return 0; +}; template <> -DoFDimensionInfo<1>::raw_face_iterator -DoFHandler<1>::begin_raw_face (const unsigned int) const { - Assert (false, ExcFunctionNotUseful()); +DoFHandler<1>::quad_iterator +DoFHandler<1>::begin_quad (const unsigned int) const { + Assert (false, ExcNotImplemented()); return 0; }; template <> -DoFDimensionInfo<1>::face_iterator -DoFHandler<1>::begin_face (const unsigned int) const { - Assert (false, ExcFunctionNotUseful()); +DoFHandler<1>::active_quad_iterator +DoFHandler<1>::begin_active_quad (const unsigned int) const { + Assert (false, ExcNotImplemented()); return 0; }; template <> -DoFDimensionInfo<1>::active_face_iterator -DoFHandler<1>::begin_active_face (const unsigned int) const { - Assert (false, ExcFunctionNotUseful()); +DoFHandler<1>::raw_quad_iterator +DoFHandler<1>::end_quad () const { + Assert (false, ExcNotImplemented()); return 0; }; template <> -DoFDimensionInfo<1>::raw_face_iterator -DoFHandler<1>::end_face () const { - Assert (false, ExcFunctionNotUseful()); +DoFHandler<1>::raw_quad_iterator +DoFHandler<1>::last_raw_quad (const unsigned int) const { + Assert (false, ExcNotImplemented()); return 0; }; - template <> -DoFDimensionInfo<1>::raw_face_iterator -DoFHandler<1>::last_raw_face () const { - Assert (false, ExcFunctionNotUseful()); +DoFHandler<1>::quad_iterator +DoFHandler<1>::last_quad (const unsigned int) const { + Assert (false, ExcNotImplemented()); return 0; }; template <> -DoFDimensionInfo<1>::raw_face_iterator -DoFHandler<1>::last_raw_face (const unsigned int) const { - Assert (false, ExcFunctionNotUseful()); +DoFHandler<1>::active_quad_iterator +DoFHandler<1>::last_active_quad (const unsigned int) const { + Assert (false, ExcNotImplemented()); return 0; }; template <> -DoFDimensionInfo<1>::face_iterator -DoFHandler<1>::last_face () const { - Assert (false, ExcFunctionNotUseful()); +DoFHandler<1>::raw_quad_iterator +DoFHandler<1>::last_raw_quad () const { + Assert (false, ExcNotImplemented()); return 0; }; template <> -DoFDimensionInfo<1>::face_iterator -DoFHandler<1>::last_face (const unsigned int) const { - Assert (false, ExcFunctionNotUseful()); +DoFHandler<1>::quad_iterator +DoFHandler<1>::last_quad () const { + Assert (false, ExcNotImplemented()); return 0; }; template <> -DoFDimensionInfo<1>::active_face_iterator -DoFHandler<1>::last_active_face () const { - Assert (false, ExcFunctionNotUseful()); +DoFHandler<1>::active_quad_iterator +DoFHandler<1>::last_active_quad () const { + Assert (false, ExcNotImplemented()); return 0; }; +#endif + +#if deal_II_dimension == 2 template <> -DoFDimensionInfo<1>::active_face_iterator -DoFHandler<1>::last_active_face (const unsigned int) const { - Assert (false, ExcFunctionNotUseful()); - return 0; +DoFHandler<2>::raw_cell_iterator +DoFHandler<2>::begin_raw (const unsigned int level) const { + return begin_raw_quad (level); +}; + + + +template <> +DoFHandler<2>::cell_iterator +DoFHandler<2>::begin (const unsigned int level) const { + return begin_quad (level); +}; + + + +template <> +DoFHandler<2>::active_cell_iterator +DoFHandler<2>::begin_active (const unsigned int level) const { + return begin_active_quad (level); }; +template <> +DoFHandler<2>::raw_cell_iterator +DoFHandler<2>::end () const { + return end_quad (); +}; + + + +template <> +DoFHandler<2>::raw_cell_iterator +DoFHandler<2>::last_raw () const { + return last_raw_quad (); +}; + + + +template <> +DoFHandler<2>::raw_cell_iterator +DoFHandler<2>::last_raw (const unsigned int level) const { + return last_raw_quad (level); +}; + + + +template <> +DoFHandler<2>::cell_iterator +DoFHandler<2>::last () const { + return last_quad (); +}; + + + +template <> +DoFHandler<2>::cell_iterator +DoFHandler<2>::last (const unsigned int level) const { + return last_quad (level); +}; + + + +template <> +DoFHandler<2>::active_cell_iterator +DoFHandler<2>::last_active () const { + return last_active_quad (); +}; + + + +template <> +DoFHandler<2>::active_cell_iterator +DoFHandler<2>::last_active (const unsigned int level) const { + return last_active_quad (level); +}; template <> @@ -369,10 +456,9 @@ DoFHandler<2>::last_active_face (const unsigned int level) const { return last_active_line (level); }; +#endif -// --------------------------------------------------------------- - template @@ -408,15 +494,6 @@ DoFHandler::begin_active_line (const unsigned int level) const { -template <> -DoFHandler<1>::raw_quad_iterator -DoFHandler<1>::begin_raw_quad (const unsigned int) const { - Assert (false, ExcNotImplemented()); - return 0; -}; - - - template typename DoFHandler::raw_quad_iterator DoFHandler::begin_raw_quad (const unsigned int level) const { @@ -428,15 +505,6 @@ DoFHandler::begin_raw_quad (const unsigned int level) const { -template <> -DoFHandler<1>::quad_iterator -DoFHandler<1>::begin_quad (const unsigned int) const { - Assert (false, ExcNotImplemented()); - return 0; -}; - - - template typename DoFHandler::quad_iterator DoFHandler::begin_quad (const unsigned int level) const { @@ -448,15 +516,6 @@ DoFHandler::begin_quad (const unsigned int level) const { -template <> -DoFHandler<1>::active_quad_iterator -DoFHandler<1>::begin_active_quad (const unsigned int) const { - Assert (false, ExcNotImplemented()); - return 0; -}; - - - template typename DoFHandler::active_quad_iterator DoFHandler::begin_active_quad (const unsigned int level) const { @@ -476,15 +535,6 @@ DoFHandler::end_line () const { -template <> -DoFHandler<1>::raw_quad_iterator -DoFHandler<1>::end_quad () const { - Assert (false, ExcNotImplemented()); - return 0; -}; - - - template typename DoFHandler::raw_quad_iterator DoFHandler::end_quad () const { @@ -493,7 +543,6 @@ DoFHandler::end_quad () const { - template typename DoFHandler::raw_line_iterator DoFHandler::last_raw_line (const unsigned int level) const { @@ -527,14 +576,6 @@ DoFHandler::last_active_line (const unsigned int level) const { -template <> -DoFHandler<1>::raw_quad_iterator -DoFHandler<1>::last_raw_quad (const unsigned int) const { - Assert (false, ExcNotImplemented()); - return 0; -}; - - template typename DoFHandler::raw_quad_iterator DoFHandler::last_raw_quad (const unsigned int level) const { @@ -547,15 +588,6 @@ DoFHandler::last_raw_quad (const unsigned int level) const { -template <> -DoFHandler<1>::quad_iterator -DoFHandler<1>::last_quad (const unsigned int) const { - Assert (false, ExcNotImplemented()); - return 0; -}; - - - template typename DoFHandler::quad_iterator DoFHandler::last_quad (const unsigned int level) const { @@ -568,15 +600,6 @@ DoFHandler::last_quad (const unsigned int level) const { -template <> -DoFHandler<1>::active_quad_iterator -DoFHandler<1>::last_active_quad (const unsigned int) const { - Assert (false, ExcNotImplemented()); - return 0; -}; - - - template typename DoFHandler::active_quad_iterator DoFHandler::last_active_quad (const unsigned int level) const { @@ -597,15 +620,6 @@ DoFHandler::last_raw_line () const { -template <> -DoFHandler<1>::raw_quad_iterator -DoFHandler<1>::last_raw_quad () const { - Assert (false, ExcNotImplemented()); - return 0; -}; - - - template typename DoFHandler::raw_quad_iterator DoFHandler::last_raw_quad () const { @@ -622,15 +636,6 @@ DoFHandler::last_line () const { -template <> -DoFHandler<1>::quad_iterator -DoFHandler<1>::last_quad () const { - Assert (false, ExcNotImplemented()); - return 0; -}; - - - template typename DoFHandler::quad_iterator DoFHandler::last_quad () const { @@ -648,15 +653,6 @@ DoFHandler::last_active_line () const { -template <> -DoFHandler<1>::active_quad_iterator -DoFHandler<1>::last_active_quad () const { - Assert (false, ExcNotImplemented()); - return 0; -}; - - - template typename DoFHandler::active_quad_iterator DoFHandler::last_active_quad () const { @@ -668,6 +664,13 @@ DoFHandler::last_active_quad () const { +//------------------------------------------------------------------ + + + + + + template unsigned int DoFHandler::n_dofs () const { @@ -676,6 +679,8 @@ unsigned int DoFHandler::n_dofs () const { +#if deal_II_dimension == 1 + template <> unsigned int DoFHandler<1>::n_boundary_dofs () const { Assert (selected_fe != 0, ExcNoFESelected()); @@ -685,6 +690,19 @@ unsigned int DoFHandler<1>::n_boundary_dofs () const { +template <> +unsigned int DoFHandler<1>::n_boundary_dofs (const FunctionMap &) const { + Assert (selected_fe != 0, ExcNoFESelected()); + Assert (false, ExcNotImplemented()); + return 0; +}; + +#endif + + + + + template unsigned int DoFHandler::n_boundary_dofs () const { Assert (selected_fe != 0, ExcNoFESelected()); @@ -707,14 +725,6 @@ unsigned int DoFHandler::n_boundary_dofs () const { -template <> -unsigned int DoFHandler<1>::n_boundary_dofs (const FunctionMap &) const { - Assert (selected_fe != 0, ExcNoFESelected()); - Assert (false, ExcNotImplemented()); - return 0; -}; - - template unsigned int DoFHandler::n_boundary_dofs (const FunctionMap &boundary_indicators) const { Assert (selected_fe != 0, ExcNoFESelected()); @@ -777,6 +787,8 @@ void DoFHandler::distribute_dofs (const FiniteElementBase &fe) { +#if deal_II_dimension == 1 + template <> unsigned int DoFHandler<1>::distribute_dofs_on_cell (active_cell_iterator &cell, unsigned int next_free_dof) { @@ -826,8 +838,10 @@ unsigned int DoFHandler<1>::distribute_dofs_on_cell (active_cell_iterator &cell, return next_free_dof; }; +#endif +#if deal_II_dimension == 2 template <> unsigned int DoFHandler<2>::distribute_dofs_on_cell (active_cell_iterator &cell, @@ -874,6 +888,8 @@ unsigned int DoFHandler<2>::distribute_dofs_on_cell (active_cell_iterator &cell, return next_free_dof; }; +#endif + template @@ -1058,6 +1074,7 @@ void DoFHandler::renumber_dofs (const RenumberingMethod method, }; +#if deal_II_dimension == 1 template <> void DoFHandler<1>::do_renumbering (const vector &new_numbers) { @@ -1078,8 +1095,11 @@ void DoFHandler<1>::do_renumbering (const vector &new_numbers) { *i = new_numbers[*i]; }; +#endif +#if deal_II_dimension == 2 + template <> void DoFHandler<2>::do_renumbering (const vector &new_numbers) { for (vector::iterator i=vertex_dofs.begin(); i!=vertex_dofs.end(); ++i) @@ -1099,8 +1119,10 @@ void DoFHandler<2>::do_renumbering (const vector &new_numbers) { }; }; +#endif +#if deal_II_dimension == 1 template <> void DoFHandler<1>::make_constraint_matrix (ConstraintMatrix &cm) const { @@ -1108,8 +1130,11 @@ void DoFHandler<1>::make_constraint_matrix (ConstraintMatrix &cm) const { cm.close (); }; +#endif - + + +#if deal_II_dimension == 2 template <> void DoFHandler<2>::make_constraint_matrix (ConstraintMatrix &constraints) const { @@ -1177,6 +1202,7 @@ void DoFHandler<2>::make_constraint_matrix (ConstraintMatrix &constraints) const constraints.close (); }; +#endif @@ -1204,6 +1230,7 @@ void DoFHandler::make_sparsity_pattern (dSMatrixStruct &sparsity) const { }; +#if deal_II_dimension == 1 template <> void DoFHandler<1>::make_boundary_sparsity_pattern (const vector &, @@ -1214,6 +1241,18 @@ void DoFHandler<1>::make_boundary_sparsity_pattern (const vector &, +template <> +void DoFHandler<1>::make_boundary_sparsity_pattern (const FunctionMap &, + const vector &, + dSMatrixStruct &) const { + Assert (selected_fe != 0, ExcNoFESelected()); + Assert (false, ExcInternalError()); +}; + +#endif + + + template void DoFHandler::make_boundary_sparsity_pattern (const vector &dof_to_boundary_mapping, dSMatrixStruct &sparsity) const { @@ -1252,16 +1291,6 @@ void DoFHandler::make_boundary_sparsity_pattern (const vector &dof_to_ -template <> -void DoFHandler<1>::make_boundary_sparsity_pattern (const FunctionMap &, - const vector &, - dSMatrixStruct &) const { - Assert (selected_fe != 0, ExcNoFESelected()); - Assert (false, ExcInternalError()); -}; - - - template void DoFHandler::make_boundary_sparsity_pattern (const FunctionMap &boundary_indicators, const vector &dof_to_boundary_mapping, @@ -1519,6 +1548,7 @@ void DoFHandler::transfer_cell (const typename DoFHandler::cell_iterat +#if deal_II_dimension == 1 template <> unsigned int DoFHandler<1>::max_couplings_between_dofs () const { @@ -1528,6 +1558,35 @@ unsigned int DoFHandler<1>::max_couplings_between_dofs () const { +template <> +unsigned int DoFHandler<1>::max_couplings_between_boundary_dofs () const { + Assert (selected_fe != 0, ExcNoFESelected()); + Assert (false, ExcInternalError()); + return 0; +}; + + + +template <> +unsigned int DoFHandler<1>::max_transfer_entries (const unsigned int max_level_diff) const { + Assert (max_level_diff<2, ExcOnlyOnelevelTransferImplemented()); + switch (max_level_diff) + { + case 0: + return 1; + case 1: + return (2*selected_fe->dofs_per_line+ + selected_fe->dofs_per_vertex) * 2 + 1; + }; + return 0; +}; + +#endif + + + +#if deal_II_dimension == 2 + template <> unsigned int DoFHandler<2>::max_couplings_between_dofs () const { Assert (selected_fe != 0, ExcNoFESelected()); @@ -1583,15 +1642,6 @@ unsigned int DoFHandler<2>::max_couplings_between_dofs () const { -template <> -unsigned int DoFHandler<1>::max_couplings_between_boundary_dofs () const { - Assert (selected_fe != 0, ExcNoFESelected()); - Assert (false, ExcInternalError()); - return 0; -}; - - - template <> unsigned int DoFHandler<2>::max_couplings_between_boundary_dofs () const { Assert (selected_fe != 0, ExcNoFESelected()); @@ -1600,23 +1650,6 @@ unsigned int DoFHandler<2>::max_couplings_between_boundary_dofs () const { - -template <> -unsigned int DoFHandler<1>::max_transfer_entries (const unsigned int max_level_diff) const { - Assert (max_level_diff<2, ExcOnlyOnelevelTransferImplemented()); - switch (max_level_diff) - { - case 0: - return 1; - case 1: - return (2*selected_fe->dofs_per_line+ - selected_fe->dofs_per_vertex) * 2 + 1; - }; - return 0; -}; - - - template <> unsigned int DoFHandler<2>::max_transfer_entries (const unsigned int max_level_diff) const { Assert (max_level_diff<2, ExcOnlyOnelevelTransferImplemented()); @@ -1632,6 +1665,10 @@ unsigned int DoFHandler<2>::max_transfer_entries (const unsigned int max_level_d return 0; }; +#endif + + + template @@ -1678,6 +1715,8 @@ void DoFHandler::distribute_cell_to_dof_vector (const dVector &cell_data, +#if deal_II_dimension == 1 + template <> void DoFHandler<1>::map_dof_to_boundary_indices (vector &) const { Assert (selected_fe != 0, ExcNoFESelected()); @@ -1686,6 +1725,17 @@ void DoFHandler<1>::map_dof_to_boundary_indices (vector &) const { +template <> +void DoFHandler<1>::map_dof_to_boundary_indices (const FunctionMap &, + vector &) const { + Assert (selected_fe != 0, ExcNoFESelected()); + Assert (false, ExcNotImplemented()); +}; + +#endif + + + template void DoFHandler::map_dof_to_boundary_indices (vector &mapping) const { Assert (selected_fe != 0, ExcNoFESelected()); @@ -1714,15 +1764,6 @@ void DoFHandler::map_dof_to_boundary_indices (vector &mapping) const { -template <> -void DoFHandler<1>::map_dof_to_boundary_indices (const FunctionMap &, - vector &) const { - Assert (selected_fe != 0, ExcNoFESelected()); - Assert (false, ExcNotImplemented()); -}; - - - template void DoFHandler::map_dof_to_boundary_indices (const FunctionMap &boundary_indicators, vector &mapping) const { @@ -1759,7 +1800,7 @@ void DoFHandler::map_dof_to_boundary_indices (const FunctionMap &boundary_i - +#if deal_II_dimension == 1 template <> void DoFHandler<1>::reserve_space () { @@ -1786,8 +1827,11 @@ void DoFHandler<1>::reserve_space () { }; }; +#endif +#if deal_II_dimension == 2 + template <> void DoFHandler<2>::reserve_space () { Assert (selected_fe != 0, ExcNoFESelected()); @@ -1818,13 +1862,12 @@ void DoFHandler<2>::reserve_space () { }; }; - +#endif /*-------------- Explicit Instantiations -------------------------------*/ -template class DoFHandler<1>; -template class DoFHandler<2>; +template class DoFHandler; diff --git a/deal.II/deal.II/source/fe/fe.cc b/deal.II/deal.II/source/fe/fe.cc index b564fa2b1b..e64d0b4710 100644 --- a/deal.II/deal.II/source/fe/fe.cc +++ b/deal.II/deal.II/source/fe/fe.cc @@ -12,6 +12,7 @@ /*------------------------------- FiniteElementData ----------------------*/ +#if deal_II_dimension == 1 bool FiniteElementData<1>::operator== (const FiniteElementData<1> &f) const { return ((dofs_per_vertex == f.dofs_per_vertex) && @@ -19,8 +20,12 @@ bool FiniteElementData<1>::operator== (const FiniteElementData<1> &f) const { (total_dofs == f.total_dofs)); }; +#endif + +#if deal_II_dimension == 2 + bool FiniteElementData<2>::operator== (const FiniteElementData<2> &f) const { return ((dofs_per_vertex == f.dofs_per_vertex) && (dofs_per_line == f.dofs_per_line) && @@ -28,14 +33,14 @@ bool FiniteElementData<2>::operator== (const FiniteElementData<2> &f) const { (total_dofs == f.total_dofs)); }; - +#endif /*------------------------------- FiniteElementBase ----------------------*/ - +#if deal_II_dimension == 1 template <> FiniteElementBase<1>::FiniteElementBase (const unsigned int dofs_per_vertex, @@ -56,7 +61,10 @@ FiniteElementBase<1>::FiniteElementBase (const unsigned int dofs_per_vertex, interface_constraints(0,0)=1.; }; +#endif + +#if deal_II_dimension == 2 template <> FiniteElementBase<2>::FiniteElementBase (const unsigned int dofs_per_vertex, @@ -76,6 +84,8 @@ FiniteElementBase<2>::FiniteElementBase (const unsigned int dofs_per_vertex, 2*dofs_per_vertex+dofs_per_line); }; +#endif + template @@ -126,6 +136,8 @@ bool FiniteElementBase::operator == (const FiniteElementBase &f) const // egcs wants this, but gcc2.8.1 produces an internal compiler error, so // we drop this declaration again for the time being +#if deal_II_dimension == 1 + //template <> //void FiniteElement<1>::get_ansatz_points (const DoFHandler<1>::cell_iterator &cell, // const Boundary<1> &, @@ -170,20 +182,6 @@ void FiniteElement<1>::fill_fe_values (const DoFHandler<1>::cell_iterator &cell, }; -template -void FiniteElement::fill_fe_values (const DoFHandler::cell_iterator &, - const vector > &, - vector &, - const bool, - vector > &, - const bool, - vector > &, - const bool, - const Boundary &) const { - Assert (false, ExcPureFunctionCalled()); -}; - - template <> void FiniteElement<1>::fill_fe_face_values (const DoFHandler<1>::cell_iterator &, @@ -205,6 +203,68 @@ void FiniteElement<1>::fill_fe_face_values (const DoFHandler<1>::cell_iterator & }; +template <> +void FiniteElement<1>::fill_fe_subface_values (const DoFHandler<1>::cell_iterator &, + const unsigned int , + const unsigned int , + const vector > &, + const vector > &, + vector &, + const bool , + vector > &, + const bool , + vector &, + const bool , + vector > &, + const bool, + const Boundary<1> &) const { + Assert (false, ExcNotImplemented()); +}; + + + +template <> +void FiniteElement<1>::get_ansatz_points (const DoFHandler<1>::cell_iterator &cell, + const Boundary<1> &, + vector > &ansatz_points) const { + Assert (ansatz_points.size() == total_dofs, + ExcWrongFieldDimension(ansatz_points.size(), total_dofs)); + // compute ansatz points. The first ones + // belong to vertex one, the second ones + // to vertex two, all following are + // equally spaced along the line + unsigned int next = 0; + // local mesh width + const double h=(cell->vertex(1)(0) - cell->vertex(0)(0)); + // first the dofs in the vertices + for (unsigned int vertex=0; vertex<2; vertex++) + for (unsigned int i=0; ivertex(vertex); + + // now dofs on line + for (unsigned int i=0; ivertex(0) + + Point<1>((i+1.0)/(total_dofs+1.0)*h); +}; + +#endif + + + +template +void FiniteElement::fill_fe_values (const DoFHandler::cell_iterator &, + const vector > &, + vector &, + const bool, + vector > &, + const bool, + vector > &, + const bool, + const Boundary &) const { + Assert (false, ExcPureFunctionCalled()); +}; + + template void FiniteElement::fill_fe_face_values (const DoFHandler::cell_iterator &cell, @@ -253,26 +313,6 @@ void FiniteElement::fill_fe_face_values (const DoFHandler::cell_iterat -template <> -void FiniteElement<1>::fill_fe_subface_values (const DoFHandler<1>::cell_iterator &, - const unsigned int , - const unsigned int , - const vector > &, - const vector > &, - vector &, - const bool , - vector > &, - const bool , - vector &, - const bool , - vector > &, - const bool, - const Boundary<1> &) const { - Assert (false, ExcNotImplemented()); -}; - - - template void FiniteElement::fill_fe_subface_values (const DoFHandler::cell_iterator &cell, const unsigned int face_no, @@ -313,33 +353,6 @@ void FiniteElement::fill_fe_subface_values (const DoFHandler::cell_ite - -template <> -void FiniteElement<1>::get_ansatz_points (const DoFHandler<1>::cell_iterator &cell, - const Boundary<1> &, - vector > &ansatz_points) const { - Assert (ansatz_points.size() == total_dofs, - ExcWrongFieldDimension(ansatz_points.size(), total_dofs)); - // compute ansatz points. The first ones - // belong to vertex one, the second ones - // to vertex two, all following are - // equally spaced along the line - unsigned int next = 0; - // local mesh width - const double h=(cell->vertex(1)(0) - cell->vertex(0)(0)); - // first the dofs in the vertices - for (unsigned int vertex=0; vertex<2; vertex++) - for (unsigned int i=0; ivertex(vertex); - - // now dofs on line - for (unsigned int i=0; ivertex(0) + - Point<1>((i+1.0)/(total_dofs+1.0)*h); -}; - - - template void FiniteElement::get_ansatz_points (const DoFHandler::cell_iterator &, const Boundary &, @@ -351,14 +364,8 @@ void FiniteElement::get_ansatz_points (const DoFHandler::cell_iterator /*------------------------------- Explicit Instantiations -------------*/ -template class FiniteElementData<1>; -template class FiniteElementData<2>; - -template class FiniteElementBase<1>; -template class FiniteElementBase<2>; - -template class FiniteElement<1>; -template class FiniteElement<2>; - +template class FiniteElementData; +template class FiniteElementBase; +template class FiniteElement; diff --git a/deal.II/deal.II/source/fe/fe_lib.linear.cc b/deal.II/deal.II/source/fe/fe_lib.linear.cc index aeb5c4707e..0dc692538b 100644 --- a/deal.II/deal.II/source/fe/fe_lib.linear.cc +++ b/deal.II/deal.II/source/fe/fe_lib.linear.cc @@ -7,6 +7,7 @@ #include +#if deal_II_dimension == 1 template <> FELinear<1>::FELinear () : @@ -60,6 +61,7 @@ FELinear<1>::shape_value(const unsigned int i, template <> +inline Point<1> FELinear<1>::shape_grad(const unsigned int i, const Point<1>&) const @@ -170,8 +172,13 @@ void FELinear<1>::get_local_mass_matrix (const DoFHandler<1>::cell_iterator &cel local_mass_matrix(0,1) = local_mass_matrix(1,0) = 1./6.*h; }; +#endif + + +#if deal_II_dimension == 2 + template <> FELinear<2>::FELinear () : FiniteElement<2> (1, 0, 0) @@ -281,6 +288,7 @@ FELinear<2>::shape_value (const unsigned int i, template <> +inline Point<2> FELinear<2>::shape_grad (const unsigned int i, const Point<2>& p) const @@ -402,6 +410,115 @@ void FELinear<2>::get_local_mass_matrix (const DoFHandler<2>::cell_iterator &cel +template <> +void FELinear<2>::get_face_jacobians (const DoFHandler<2>::face_iterator &face, + const Boundary<2> &, + const vector > &unit_points, + vector &face_jacobians) const { + Assert (unit_points.size() == face_jacobians.size(), + ExcWrongFieldDimension (unit_points.size(), face_jacobians.size())); + + // a linear mapping for a single line + // produces particularly simple + // expressions for the jacobi + // determinant :-) + const double h = sqrt((face->vertex(1) - face->vertex(0)).square()); + fill_n (face_jacobians.begin(), + unit_points.size(), + h); +}; + + + +template <> +void FELinear<2>::get_subface_jacobians (const DoFHandler<2>::face_iterator &face, + const unsigned int, + const vector > &unit_points, + vector &face_jacobians) const { + Assert (unit_points.size() == face_jacobians.size(), + ExcWrongFieldDimension (unit_points.size(), face_jacobians.size())); + Assert (face->at_boundary() == false, + ExcBoundaryFaceUsed ()); + + // a linear mapping for a single line + // produces particularly simple + // expressions for the jacobi + // determinant :-) + const double h = sqrt((face->vertex(1) - face->vertex(0)).square()); + fill_n (face_jacobians.begin(), + unit_points.size(), + h/2); +}; + + + +template <> +void FELinear<2>::get_normal_vectors (const DoFHandler<2>::cell_iterator &cell, + const unsigned int face_no, + const Boundary<2> &, + const vector > &unit_points, + vector > &normal_vectors) const { + Assert (unit_points.size() == normal_vectors.size(), + ExcWrongFieldDimension (unit_points.size(), normal_vectors.size())); + + const DoFHandler<2>::face_iterator face = cell->face(face_no); + // compute direction of line + const Point<2> line_direction = (face->vertex(1) - face->vertex(0)); + // rotate to the right by 90 degrees + const Point<2> normal_direction(line_direction(1), + -line_direction(0)); + + if (face_no <= 1) + // for sides 0 and 1: return the correctly + // scaled vector + fill (normal_vectors.begin(), normal_vectors.end(), + normal_direction / sqrt(normal_direction.square())); + else + // for sides 2 and 3: scale and invert + // vector + fill (normal_vectors.begin(), normal_vectors.end(), + normal_direction / (-sqrt(normal_direction.square()))); +}; + + + +template <> +void FELinear<2>::get_normal_vectors (const DoFHandler<2>::cell_iterator &cell, + const unsigned int face_no, + const unsigned int, + const vector > &unit_points, + vector > &normal_vectors) const { + // note, that in 2D the normal vectors to the + // subface have the same direction as that + // for the face + Assert (unit_points.size() == normal_vectors.size(), + ExcWrongFieldDimension (unit_points.size(), normal_vectors.size())); + Assert (cell->face(face_no)->at_boundary() == false, + ExcBoundaryFaceUsed ()); + + const DoFHandler<2>::face_iterator face = cell->face(face_no); + // compute direction of line + const Point<2> line_direction = (face->vertex(1) - face->vertex(0)); + // rotate to the right by 90 degrees + const Point<2> normal_direction(line_direction(1), + -line_direction(0)); + + if (face_no <= 1) + // for sides 0 and 1: return the correctly + // scaled vector + fill (normal_vectors.begin(), normal_vectors.end(), + normal_direction / sqrt(normal_direction.square())); + else + // for sides 2 and 3: scale and invert + // vector + fill (normal_vectors.begin(), normal_vectors.end(), + normal_direction / (-sqrt(normal_direction.square()))); +}; + +#endif + + + template void FELinear::fill_fe_values (const DoFHandler::cell_iterator &cell, const vector > &unit_points, @@ -523,115 +640,11 @@ void FELinear::get_face_ansatz_points (const typename DoFHandler::face -template <> -void FELinear<2>::get_face_jacobians (const DoFHandler<2>::face_iterator &face, - const Boundary<2> &, - const vector > &unit_points, - vector &face_jacobians) const { - Assert (unit_points.size() == face_jacobians.size(), - ExcWrongFieldDimension (unit_points.size(), face_jacobians.size())); - - // a linear mapping for a single line - // produces particularly simple - // expressions for the jacobi - // determinant :-) - const double h = sqrt((face->vertex(1) - face->vertex(0)).square()); - fill_n (face_jacobians.begin(), - unit_points.size(), - h); -}; - - - -template <> -void FELinear<2>::get_subface_jacobians (const DoFHandler<2>::face_iterator &face, - const unsigned int, - const vector > &unit_points, - vector &face_jacobians) const { - Assert (unit_points.size() == face_jacobians.size(), - ExcWrongFieldDimension (unit_points.size(), face_jacobians.size())); - Assert (face->at_boundary() == false, - ExcBoundaryFaceUsed ()); - - // a linear mapping for a single line - // produces particularly simple - // expressions for the jacobi - // determinant :-) - const double h = sqrt((face->vertex(1) - face->vertex(0)).square()); - fill_n (face_jacobians.begin(), - unit_points.size(), - h/2); -}; - - - -template <> -void FELinear<2>::get_normal_vectors (const DoFHandler<2>::cell_iterator &cell, - const unsigned int face_no, - const Boundary<2> &, - const vector > &unit_points, - vector > &normal_vectors) const { - Assert (unit_points.size() == normal_vectors.size(), - ExcWrongFieldDimension (unit_points.size(), normal_vectors.size())); - - const DoFHandler<2>::face_iterator face = cell->face(face_no); - // compute direction of line - const Point<2> line_direction = (face->vertex(1) - face->vertex(0)); - // rotate to the right by 90 degrees - const Point<2> normal_direction(line_direction(1), - -line_direction(0)); - - if (face_no <= 1) - // for sides 0 and 1: return the correctly - // scaled vector - fill (normal_vectors.begin(), normal_vectors.end(), - normal_direction / sqrt(normal_direction.square())); - else - // for sides 2 and 3: scale and invert - // vector - fill (normal_vectors.begin(), normal_vectors.end(), - normal_direction / (-sqrt(normal_direction.square()))); -}; - - - -template <> -void FELinear<2>::get_normal_vectors (const DoFHandler<2>::cell_iterator &cell, - const unsigned int face_no, - const unsigned int, - const vector > &unit_points, - vector > &normal_vectors) const { - // note, that in 2D the normal vectors to the - // subface have the same direction as that - // for the face - Assert (unit_points.size() == normal_vectors.size(), - ExcWrongFieldDimension (unit_points.size(), normal_vectors.size())); - Assert (cell->face(face_no)->at_boundary() == false, - ExcBoundaryFaceUsed ()); - - const DoFHandler<2>::face_iterator face = cell->face(face_no); - // compute direction of line - const Point<2> line_direction = (face->vertex(1) - face->vertex(0)); - // rotate to the right by 90 degrees - const Point<2> normal_direction(line_direction(1), - -line_direction(0)); - - if (face_no <= 1) - // for sides 0 and 1: return the correctly - // scaled vector - fill (normal_vectors.begin(), normal_vectors.end(), - normal_direction / sqrt(normal_direction.square())); - else - // for sides 2 and 3: scale and invert - // vector - fill (normal_vectors.begin(), normal_vectors.end(), - normal_direction / (-sqrt(normal_direction.square()))); -}; - +#if deal_II_dimension == 1 template <> FEQuadratic<1>::FEQuadratic () : @@ -716,9 +729,10 @@ void FEQuadratic<1>::get_normal_vectors (const DoFHandler<1>::cell_iterator &, Assert (false, ExcInternalError()); }; +#endif - +#if deal_II_dimension == 2 template <> FEQuadratic<2>::FEQuadratic () : @@ -737,6 +751,8 @@ FEQuadratic<2>::FEQuadratic () : Assert (false, ExcNotImplemented()); }; +#endif + template @@ -862,7 +878,7 @@ void FEQuadratic::get_local_mass_matrix (const DoFHandler::cell_iterat - +#if deal_II_dimension == 1 template <> FECubic<1>::FECubic () : @@ -947,12 +963,17 @@ void FECubic<1>::get_normal_vectors (const DoFHandler<1>::cell_iterator &, Assert (false, ExcInternalError()); }; +#endif + + +#if deal_II_dimension == 2 template <> FECubic<2>::FECubic () : FiniteElement<2> (1, 2, 4) {}; +#endif @@ -1080,10 +1101,7 @@ void FECubic::get_local_mass_matrix (const DoFHandler::cell_iterator & // explicit instantiations -template class FELinear<1>; -template class FELinear<2>; -template class FEQuadratic<1>; -template class FEQuadratic<2>; -template class FECubic<1>; -template class FECubic<2>; +template class FELinear; +template class FEQuadratic; +template class FECubic; diff --git a/deal.II/deal.II/source/fe/fe_values.cc b/deal.II/deal.II/source/fe/fe_values.cc index 83414049a8..afa2c70791 100644 --- a/deal.II/deal.II/source/fe/fe_values.cc +++ b/deal.II/deal.II/source/fe/fe_values.cc @@ -497,13 +497,11 @@ void FESubfaceValues::reinit (const typename DoFHandler::cell_iterator /*------------------------------- Explicit Instantiations -------------*/ -template class FEValuesBase<1>; -template class FEValuesBase<2>; - -template class FEValues<1>; -template class FEValues<2>; - -template class FEFaceValuesBase<2>; -template class FEFaceValues<2>; -template class FESubfaceValues<2>; - +template class FEValuesBase; +template class FEValues; + +#if deal_II_dimension >= 2 +template class FEFaceValuesBase; +template class FEFaceValues; +template class FESubfaceValues; +#endif diff --git a/deal.II/deal.II/source/grid/tria.cc b/deal.II/deal.II/source/grid/tria.cc index c133ffef77..7454caee48 100644 --- a/deal.II/deal.II/source/grid/tria.cc +++ b/deal.II/deal.II/source/grid/tria.cc @@ -38,7 +38,7 @@ Triangulation::~Triangulation () { for (unsigned int i=0; i::set_boundary (const Boundary *boundary_object) { /*--------- Put the next functions a bit out-or-order to avoid use before --------- explicit specialization, which is not allowed. */ +#if deal_II_dimension == 1 template <> TriaDimensionInfo<1>::cell_iterator Triangulation<1>::begin (const unsigned int level) const { @@ -60,29 +61,33 @@ Triangulation<1>::begin (const unsigned int level) const { }; - template <> -TriaDimensionInfo<2>::cell_iterator -Triangulation<2>::begin (const unsigned int level) const { - return begin_quad (level); +TriaDimensionInfo<1>::raw_cell_iterator +Triangulation<1>::end () const { + return end_line (); }; +#endif + +#if deal_II_dimension == 2 template <> -TriaDimensionInfo<1>::raw_cell_iterator -Triangulation<1>::end () const { - return end_line (); +TriaDimensionInfo<2>::cell_iterator +Triangulation<2>::begin (const unsigned int level) const { + return begin_quad (level); }; + template <> TriaDimensionInfo<2>::raw_cell_iterator Triangulation<2>::end () const { return end_quad (); }; +#endif /*-----------------------------------------------------------------*/ @@ -111,6 +116,8 @@ void Triangulation::copy_triangulation (const Triangulation &old_tria) +#if deal_II_dimension == 1 + template <> void Triangulation<1>::create_triangulation (const vector > &v, const vector > &cells, @@ -210,6 +217,44 @@ void Triangulation<1>::create_triangulation (const vector > &v, + +template <> +void Triangulation<1>::create_hypercube (const double left, + const double right) { + Assert (vertices.size() == 0, ExcTriangulationNotEmpty()); + Assert (n_lines() == 0, ExcTriangulationNotEmpty()); + + const Point<1> vertices[2] = { Point<1>(left), Point<1>(right) }; + vector > cells (1, CellData<1>()); + cells[0].vertices[0] = 0; + cells[0].vertices[1] = 1; + cells[0].material_id = 0; + + create_triangulation (vector >(&vertices[0], &vertices[2]), + cells, + SubCellData()); // no boundary information +}; + + + +template <> +void Triangulation<1>::create_hyper_L (const double, const double) { + Assert (false, ExcInternalError()); +}; + + + +template <> +void Triangulation<1>::create_hyper_ball (const Point<1> &, const double) { + Assert (false, ExcInternalError()); +}; + +#endif + + + +#if deal_II_dimension == 2 + template <> void Triangulation<2>::create_triangulation (const vector > &v, const vector > &c, @@ -497,26 +542,6 @@ void Triangulation<2>::create_triangulation (const vector > &v, }; - -template <> -void Triangulation<1>::create_hypercube (const double left, - const double right) { - Assert (vertices.size() == 0, ExcTriangulationNotEmpty()); - Assert (n_lines() == 0, ExcTriangulationNotEmpty()); - - const Point<1> vertices[2] = { Point<1>(left), Point<1>(right) }; - vector > cells (1, CellData<1>()); - cells[0].vertices[0] = 0; - cells[0].vertices[1] = 1; - cells[0].material_id = 0; - - create_triangulation (vector >(&vertices[0], &vertices[2]), - cells, - SubCellData()); // no boundary information -}; - - - template <> void Triangulation<2>::create_hypercube (const double left, @@ -542,13 +567,6 @@ void Triangulation<2>::create_hypercube (const double left, -template <> -void Triangulation<1>::create_hyper_L (const double, const double) { - Assert (false, ExcInternalError()); -}; - - - template <> void Triangulation<2>::create_hyper_L (const double a, const double b) { const unsigned int dim=2; @@ -580,13 +598,6 @@ void Triangulation<2>::create_hyper_L (const double a, const double b) { -template <> -void Triangulation<1>::create_hyper_ball (const Point<1> &, const double) { - Assert (false, ExcInternalError()); -}; - - - template <> void Triangulation<2>::create_hyper_ball (const Point<2> &p, const double radius) { const unsigned int dim=2; @@ -620,6 +631,9 @@ void Triangulation<2>::create_hyper_ball (const Point<2> &p, const double radius SubCellData()); // no boundary information }; +#endif + + @@ -711,7 +725,7 @@ void Triangulation::load_refine_flags (istream &in) { }; - +#if deal_II_dimension == 1 template <> void Triangulation<1>::clear_user_flags () { @@ -723,6 +737,16 @@ void Triangulation<1>::clear_user_flags () { +template <> +void Triangulation<1>::save_user_flags (ostream &out) const { + save_user_flags_line (out); +}; + +#endif + + +#if deal_II_dimension == 2 + template <> void Triangulation<2>::clear_user_flags () { line_iterator line = begin_line(), @@ -738,20 +762,14 @@ void Triangulation<2>::clear_user_flags () { - -template <> -void Triangulation<1>::save_user_flags (ostream &out) const { - save_user_flags_line (out); -}; - - - template <> void Triangulation<2>::save_user_flags (ostream &out) const { save_user_flags_line (out); save_user_flags_quad (out); }; +#endif + template @@ -821,12 +839,24 @@ void Triangulation::load_user_flags_line (istream &in) { + +#if deal_II_dimension == 1 + template <> void Triangulation<1>::save_user_flags_quad (ostream &) const { Assert (false, ExcFunctionNotUseful()); }; +template <> +void Triangulation<1>::load_user_flags_quad (istream &) { + Assert (false, ExcFunctionNotUseful()); +}; + +#endif + + + template void Triangulation::save_user_flags_quad (ostream &out) const { @@ -857,13 +887,6 @@ void Triangulation::save_user_flags_quad (ostream &out) const { -template <> -void Triangulation<1>::load_user_flags_quad (istream &) { - Assert (false, ExcFunctionNotUseful()); -}; - - - template void Triangulation::load_user_flags_quad (istream &in) { unsigned int magic_number; @@ -902,6 +925,12 @@ void Triangulation::load_user_flags_quad (istream &in) { + +/*------------------------ Iterator functions ------------------------*/ + + +#if deal_II_dimension == 1 + template <> TriaDimensionInfo<1>::raw_cell_iterator Triangulation<1>::begin_raw (const unsigned int level) const { @@ -966,79 +995,98 @@ Triangulation<1>::last_active (const unsigned int level) const { - - template <> -TriaDimensionInfo<2>::raw_cell_iterator -Triangulation<2>::begin_raw (const unsigned int level) const { - return begin_raw_quad (level); +TriaDimensionInfo<1>::raw_face_iterator +Triangulation<1>::begin_raw_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -TriaDimensionInfo<2>::active_cell_iterator -Triangulation<2>::begin_active (const unsigned int level) const { - return begin_active_quad (level); +TriaDimensionInfo<1>::face_iterator +Triangulation<1>::begin_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -TriaDimensionInfo<2>::raw_cell_iterator -Triangulation<2>::last_raw () const { - return last_raw_quad (); +TriaDimensionInfo<1>::active_face_iterator +Triangulation<1>::begin_active_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -TriaDimensionInfo<2>::raw_cell_iterator -Triangulation<2>::last_raw (const unsigned int level) const { - return last_raw_quad (level); +TriaDimensionInfo<1>::raw_face_iterator +Triangulation<1>::end_face () const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -TriaDimensionInfo<2>::cell_iterator -Triangulation<2>::last () const { - return last_quad (); +TriaDimensionInfo<1>::raw_face_iterator +Triangulation<1>::last_raw_face () const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -TriaDimensionInfo<2>::cell_iterator -Triangulation<2>::last (const unsigned int level) const { - return last_quad (level); +TriaDimensionInfo<1>::raw_face_iterator +Triangulation<1>::last_raw_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -TriaDimensionInfo<2>::active_cell_iterator -Triangulation<2>::last_active () const { - return last_active_quad (); +TriaDimensionInfo<1>::face_iterator +Triangulation<1>::last_face () const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; template <> -TriaDimensionInfo<2>::active_cell_iterator -Triangulation<2>::last_active (const unsigned int level) const { - return last_active_quad (level); +TriaDimensionInfo<1>::face_iterator +Triangulation<1>::last_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; }; +template <> +TriaDimensionInfo<1>::active_face_iterator +Triangulation<1>::last_active_face () const { + Assert (false, ExcFunctionNotUseful()); + return 0; +}; + +template <> +TriaDimensionInfo<1>::active_face_iterator +Triangulation<1>::last_active_face (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; +}; template <> -TriaDimensionInfo<1>::raw_face_iterator -Triangulation<1>::begin_raw_face (const unsigned int) const { +TriaDimensionInfo<1>::raw_quad_iterator +Triangulation<1>::begin_raw_quad (unsigned int) const { Assert (false, ExcFunctionNotUseful()); return 0; }; @@ -1046,8 +1094,8 @@ Triangulation<1>::begin_raw_face (const unsigned int) const { template <> -TriaDimensionInfo<1>::face_iterator -Triangulation<1>::begin_face (const unsigned int) const { +TriaDimensionInfo<1>::quad_iterator +Triangulation<1>::begin_quad (unsigned int) const { Assert (false, ExcFunctionNotUseful()); return 0; }; @@ -1055,8 +1103,8 @@ Triangulation<1>::begin_face (const unsigned int) const { template <> -TriaDimensionInfo<1>::active_face_iterator -Triangulation<1>::begin_active_face (const unsigned int) const { +TriaDimensionInfo<1>::active_quad_iterator +Triangulation<1>::begin_active_quad (unsigned int) const { Assert (false, ExcFunctionNotUseful()); return 0; }; @@ -1064,8 +1112,8 @@ Triangulation<1>::begin_active_face (const unsigned int) const { template <> -TriaDimensionInfo<1>::raw_face_iterator -Triangulation<1>::end_face () const { +TriaDimensionInfo<1>::raw_quad_iterator +Triangulation<1>::end_quad () const { Assert (false, ExcFunctionNotUseful()); return 0; }; @@ -1073,8 +1121,8 @@ Triangulation<1>::end_face () const { template <> -TriaDimensionInfo<1>::raw_face_iterator -Triangulation<1>::last_raw_face () const { +TriaDimensionInfo<1>::raw_quad_iterator +Triangulation<1>::last_raw_quad (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); return 0; }; @@ -1082,8 +1130,8 @@ Triangulation<1>::last_raw_face () const { template <> -TriaDimensionInfo<1>::raw_face_iterator -Triangulation<1>::last_raw_face (const unsigned int) const { +TriaDimensionInfo<1>::raw_quad_iterator +Triangulation<1>::last_raw_quad () const { Assert (false, ExcFunctionNotUseful()); return 0; }; @@ -1091,8 +1139,8 @@ Triangulation<1>::last_raw_face (const unsigned int) const { template <> -TriaDimensionInfo<1>::face_iterator -Triangulation<1>::last_face () const { +TriaDimensionInfo<1>::quad_iterator +Triangulation<1>::last_quad (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); return 0; }; @@ -1100,8 +1148,8 @@ Triangulation<1>::last_face () const { template <> -TriaDimensionInfo<1>::face_iterator -Triangulation<1>::last_face (const unsigned int) const { +TriaDimensionInfo<1>::quad_iterator +Triangulation<1>::last_quad () const { Assert (false, ExcFunctionNotUseful()); return 0; }; @@ -1109,8 +1157,8 @@ Triangulation<1>::last_face (const unsigned int) const { template <> -TriaDimensionInfo<1>::active_face_iterator -Triangulation<1>::last_active_face () const { +TriaDimensionInfo<1>::active_quad_iterator +Triangulation<1>::last_active_quad (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); return 0; }; @@ -1118,12 +1166,84 @@ Triangulation<1>::last_active_face () const { template <> -TriaDimensionInfo<1>::active_face_iterator -Triangulation<1>::last_active_face (const unsigned int) const { +TriaDimensionInfo<1>::active_quad_iterator +Triangulation<1>::last_active_quad () const { Assert (false, ExcFunctionNotUseful()); return 0; }; +#endif + + + + +#if deal_II_dimension == 2 + +template <> +TriaDimensionInfo<2>::raw_cell_iterator +Triangulation<2>::begin_raw (const unsigned int level) const { + return begin_raw_quad (level); +}; + + + +template <> +TriaDimensionInfo<2>::active_cell_iterator +Triangulation<2>::begin_active (const unsigned int level) const { + return begin_active_quad (level); +}; + + + +template <> +TriaDimensionInfo<2>::raw_cell_iterator +Triangulation<2>::last_raw () const { + return last_raw_quad (); +}; + + + +template <> +TriaDimensionInfo<2>::raw_cell_iterator +Triangulation<2>::last_raw (const unsigned int level) const { + return last_raw_quad (level); +}; + + + +template <> +TriaDimensionInfo<2>::cell_iterator +Triangulation<2>::last () const { + return last_quad (); +}; + + + +template <> +TriaDimensionInfo<2>::cell_iterator +Triangulation<2>::last (const unsigned int level) const { + return last_quad (level); +}; + + + +template <> +TriaDimensionInfo<2>::active_cell_iterator +Triangulation<2>::last_active () const { + return last_active_quad (); +}; + + + +template <> +TriaDimensionInfo<2>::active_cell_iterator +Triangulation<2>::last_active (const unsigned int level) const { + return last_active_quad (level); +}; + + + + @@ -1205,6 +1325,7 @@ Triangulation<2>::last_active_face (const unsigned int level) const { return last_active_line (level); }; +#endif @@ -1225,15 +1346,6 @@ Triangulation::begin_raw_line (unsigned int level) const { -template <> -TriaDimensionInfo<1>::raw_quad_iterator -Triangulation<1>::begin_raw_quad (unsigned int) const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - template typename TriaDimensionInfo::raw_quad_iterator Triangulation::begin_raw_quad (unsigned int level) const { @@ -1266,15 +1378,6 @@ Triangulation::begin_line (unsigned int level) const { -template <> -TriaDimensionInfo<1>::quad_iterator -Triangulation<1>::begin_quad (unsigned int) const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - template typename TriaDimensionInfo::quad_iterator Triangulation::begin_quad (unsigned int level) const { @@ -1306,15 +1409,6 @@ Triangulation::begin_active_line (unsigned int level) const { -template <> -TriaDimensionInfo<1>::active_quad_iterator -Triangulation<1>::begin_active_quad (unsigned int) const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - template typename TriaDimensionInfo::active_quad_iterator Triangulation::begin_active_quad (unsigned int level) const { @@ -1341,15 +1435,6 @@ Triangulation::end_line () const { -template <> -TriaDimensionInfo<1>::raw_quad_iterator -Triangulation<1>::end_quad () const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - template typename TriaDimensionInfo::raw_quad_iterator Triangulation::end_quad () const { @@ -1376,15 +1461,6 @@ Triangulation::last_raw_line (const unsigned int level) const { -template <> -TriaDimensionInfo<1>::raw_quad_iterator -Triangulation<1>::last_raw_quad (const unsigned int) const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - template typename TriaDimensionInfo::raw_quad_iterator Triangulation::last_raw_quad (const unsigned int level) const { @@ -1409,15 +1485,6 @@ Triangulation::last_raw_line () const { -template <> -TriaDimensionInfo<1>::raw_quad_iterator -Triangulation<1>::last_raw_quad () const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - template typename TriaDimensionInfo::raw_quad_iterator Triangulation::last_raw_quad () const { @@ -1442,15 +1509,6 @@ Triangulation::last_line (const unsigned int level) const { -template <> -TriaDimensionInfo<1>::quad_iterator -Triangulation<1>::last_quad (const unsigned int) const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - template typename TriaDimensionInfo::quad_iterator Triangulation::last_quad (const unsigned int level) const { @@ -1474,16 +1532,6 @@ Triangulation::last_line () const { -template <> -TriaDimensionInfo<1>::quad_iterator -Triangulation<1>::last_quad () const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - - template typename TriaDimensionInfo::quad_iterator Triangulation::last_quad () const { @@ -1508,16 +1556,6 @@ Triangulation::last_active_line (const unsigned int level) const { -template <> -TriaDimensionInfo<1>::active_quad_iterator -Triangulation<1>::last_active_quad (const unsigned int) const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - - template typename TriaDimensionInfo::active_quad_iterator Triangulation::last_active_quad (const unsigned int level) const { @@ -1542,15 +1580,6 @@ Triangulation::last_active_line () const { -template <> -TriaDimensionInfo<1>::active_quad_iterator -Triangulation<1>::last_active_quad () const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - template typename TriaDimensionInfo::active_quad_iterator @@ -1574,20 +1603,6 @@ unsigned int Triangulation::n_cells () const { -template <> -unsigned int Triangulation<1>::n_cells (const unsigned int level) const { - return n_lines (level); -}; - - - -template <> -unsigned int Triangulation<2>::n_cells (const unsigned int level) const { - return n_quads (level); -}; - - - template unsigned int Triangulation::n_active_cells () const { unsigned int n=0; @@ -1598,18 +1613,40 @@ unsigned int Triangulation::n_active_cells () const { +#if deal_II_dimension == 1 + template <> unsigned int Triangulation<1>::n_active_cells (const unsigned int level) const { return n_active_lines (level); }; +template <> +unsigned int Triangulation<1>::n_cells (const unsigned int level) const { + return n_lines (level); +}; + +#endif + + + +#if deal_II_dimension == 2 + +template <> +unsigned int Triangulation<2>::n_cells (const unsigned int level) const { + return n_quads (level); +}; + + template <> unsigned int Triangulation<2>::n_active_cells (const unsigned int level) const { return n_active_quads (level); }; +#endif + + template @@ -1680,6 +1717,8 @@ unsigned int Triangulation::n_quads () const { +#if deal_II_dimension == 1 + template <> unsigned int Triangulation<1>::n_quads (const unsigned int) const { Assert (false, ExcFunctionNotUseful()); @@ -1688,6 +1727,16 @@ unsigned int Triangulation<1>::n_quads (const unsigned int) const { +template <> +unsigned int Triangulation<1>::n_active_quads (const unsigned int) const { + Assert (false, ExcFunctionNotUseful()); + return 0; +}; + + +#endif + + template unsigned int Triangulation::n_quads (const unsigned int level) const { if (levels[level]->quads.quads.size() == 0) @@ -1717,14 +1766,6 @@ unsigned int Triangulation::n_active_quads () const { -template <> -unsigned int Triangulation<1>::n_active_quads (const unsigned int) const { - Assert (false, ExcFunctionNotUseful()); - return 0; -}; - - - template unsigned int Triangulation::n_active_quads (const unsigned int level) const { if (levels[level]->quads.quads.size() == 0) @@ -1752,11 +1793,15 @@ unsigned int Triangulation::n_levels () const { +#if deal_II_dimension == 1 + template <> unsigned int Triangulation<1>::max_adjacent_cells () const { return 2; }; +#endif + template @@ -1813,6 +1858,8 @@ void Triangulation::print_gnuplot (ostream &out, const unsigned int level) +#if deal_II_dimension == 1 + template <> void Triangulation<1>::print_gnuplot (ostream &out, const active_cell_iterator & cell) const { @@ -1821,7 +1868,10 @@ void Triangulation<1>::print_gnuplot (ostream &out, << endl; }; +#endif + +#if deal_II_dimension == 2 template <> void Triangulation<2>::print_gnuplot (ostream &out, @@ -1835,6 +1885,7 @@ void Triangulation<2>::print_gnuplot (ostream &out, << endl; }; +#endif @@ -1875,12 +1926,15 @@ void Triangulation::refine_fixed_number (const dVector &criteria, }; + +static inline double sqr(double a) { return a*a; }; + template void Triangulation::refine_fixed_fraction (const dVector &criteria, const double fraction_of_error, @@ -1965,6 +2019,8 @@ void Triangulation::refine_fixed_fraction (const dVector &criteria, +#if deal_II_dimension == 1 + template <> void Triangulation<1>::execute_refinement () { prepare_refinement (); @@ -2151,10 +2207,11 @@ void Triangulation<1>::execute_refinement () { #endif }; +#endif - +#if deal_II_dimension == 2 template <> void Triangulation<2>::execute_refinement () { @@ -2735,6 +2792,7 @@ void Triangulation<2>::execute_refinement () { #endif }; +#endif @@ -2955,6 +3013,8 @@ void TriangulationLevel<1>::monitor_memory (const unsigned int true_dimension) c +#if deal_II_dimension >= 2 + void TriangulationLevel<2>::reserve_space (const unsigned int new_quads) { vector::iterator u = quads.used.begin(), e = quads.used.end(); @@ -3018,12 +3078,11 @@ void TriangulationLevel<2>::monitor_memory (const unsigned int true_dimension) c TriangulationLevel<1>::monitor_memory (true_dimension); }; - +#endif // explicit instantiations -template class Triangulation<1>; -template class Triangulation<2>; +template class Triangulation; diff --git a/deal.II/deal.II/source/grid/tria_accessor.cc b/deal.II/deal.II/source/grid/tria_accessor.cc index 75d49dbf64..47a92f974f 100644 --- a/deal.II/deal.II/source/grid/tria_accessor.cc +++ b/deal.II/deal.II/source/grid/tria_accessor.cc @@ -69,10 +69,6 @@ IteratorState TriaAccessor::state () const { -template class TriaAccessor<1>; -template class TriaAccessor<2>; - - /*------------------------ Functions: LineAccessor ---------------------------*/ @@ -281,10 +277,6 @@ double LineAccessor::diameter () const { -template class LineAccessor<1>; -template class LineAccessor<2>; - - /*------------------------ Functions: QuadAccessor ---------------------------*/ template @@ -519,15 +511,14 @@ double QuadAccessor::diameter () const { -template class QuadAccessor<2>; - - /*------------------------ Functions: CellAccessor<1> -----------------------*/ +#if deal_II_dimension == 1 + template <> bool CellAccessor<1>::at_boundary () const { return at_boundary(0) || at_boundary(1); @@ -561,11 +552,13 @@ CellAccessor<1>::face (const unsigned int) const { return 0; }; - +#endif /*------------------------ Functions: CellAccessor<2> -----------------------*/ +#if deal_II_dimension == 2 + template <> bool CellAccessor<2>::at_boundary () const { return at_boundary(0) || at_boundary(1) || at_boundary(2) || at_boundary(3); @@ -598,6 +591,8 @@ CellAccessor<2>::face (const unsigned int i) const { return line(i); }; +#endif + /*------------------------ Functions: CellAccessor -----------------------*/ @@ -760,25 +755,25 @@ bool CellAccessor::active () const { // explicit instantiations -template class CellAccessor<1>; -template class CellAccessor<2>; - -template class TriaRawIterator<1,LineAccessor<1> >; -template class TriaRawIterator<1,CellAccessor<1> >; -template class TriaRawIterator<2,LineAccessor<2> >; -template class TriaRawIterator<2,QuadAccessor<2> >; -template class TriaRawIterator<2,CellAccessor<2> >; - -template class TriaIterator<1,LineAccessor<1> >; -template class TriaIterator<1,CellAccessor<1> >; -template class TriaIterator<2,LineAccessor<2> >; -template class TriaIterator<2,QuadAccessor<2> >; -template class TriaIterator<2,CellAccessor<2> >; - -template class TriaActiveIterator<1,LineAccessor<1> >; -template class TriaActiveIterator<1,CellAccessor<1> >; -template class TriaActiveIterator<2,LineAccessor<2> >; -template class TriaActiveIterator<2,QuadAccessor<2> >; -template class TriaActiveIterator<2,CellAccessor<2> >; +template class TriaAccessor; +template class LineAccessor; +template class CellAccessor; +template class TriaRawIterator >; +template class TriaRawIterator >; +template class TriaIterator >; +template class TriaIterator >; +template class TriaActiveIterator >; +template class TriaActiveIterator >; + +#if deal_II_dimension >= 2 +template class QuadAccessor; +template class TriaRawIterator >; +template class TriaIterator >; +template class TriaActiveIterator >; +#endif + + + + diff --git a/deal.II/deal.II/source/numerics/assembler.cc b/deal.II/deal.II/source/numerics/assembler.cc index 14303c4512..e62d3ef32e 100644 --- a/deal.II/deal.II/source/numerics/assembler.cc +++ b/deal.II/deal.II/source/numerics/assembler.cc @@ -158,20 +158,10 @@ void Assembler::assemble (const Equation &equation) { // explicit instantiations -template class Equation<1>; -template class Equation<2>; +template class Equation; +template class Assembler; +template class AssemblerData; -template class Assembler<1>; -template class Assembler<2>; - - -template class AssemblerData<1>; -template class AssemblerData<2>; - - -template class TriaRawIterator<1,Assembler<1> >; -template class TriaIterator<1,Assembler<1> >; -template class TriaActiveIterator<1,Assembler<1> >; -template class TriaRawIterator<2,Assembler<2> >; -template class TriaIterator<2,Assembler<2> >; -template class TriaActiveIterator<2,Assembler<2> >; +template class TriaRawIterator >; +template class TriaIterator >; +template class TriaActiveIterator >; diff --git a/deal.II/deal.II/source/numerics/base.cc b/deal.II/deal.II/source/numerics/base.cc index 42900b3918..3f517bb8f9 100644 --- a/deal.II/deal.II/source/numerics/base.cc +++ b/deal.II/deal.II/source/numerics/base.cc @@ -177,5 +177,4 @@ pair ProblemBase::get_solution_name () const { // explicit instantiations -template class ProblemBase<1>; -template class ProblemBase<2>; +template class ProblemBase; diff --git a/deal.II/deal.II/source/numerics/data_io.cc b/deal.II/deal.II/source/numerics/data_io.cc index b3d2d57135..52bc54b4ed 100644 --- a/deal.II/deal.II/source/numerics/data_io.cc +++ b/deal.II/deal.II/source/numerics/data_io.cc @@ -388,11 +388,15 @@ void DataOut::write_ucd (ostream &out) const { +#if deal_II_dimension == 1 + template <> unsigned int DataOut<1>::n_boundary_faces () const { return 0; }; +#endif + template @@ -411,11 +415,15 @@ unsigned int DataOut::n_boundary_faces () const { + +#if deal_II_dimension == 1 + template <> void DataOut<1>::write_ucd_faces (ostream &, const unsigned int) const { return; }; +#endif template @@ -594,7 +602,6 @@ string DataOut::default_suffix (const OutputFormat output_format) { //explicite instantiations -template class DataIn<1>; -template class DataIn<2>; -template class DataOut<1>; -template class DataOut<2>; + +template class DataIn; +template class DataOut; diff --git a/deal.II/deal.II/source/numerics/error_estimator.cc b/deal.II/deal.II/source/numerics/error_estimator.cc index f1bfe38536..b8c4177d7c 100644 --- a/deal.II/deal.II/source/numerics/error_estimator.cc +++ b/deal.II/deal.II/source/numerics/error_estimator.cc @@ -17,12 +17,14 @@ -inline double sqr (const double x) { +inline static double sqr (const double x) { return x*x; }; +#if deal_II_dimension == 1 + template <> void KellyErrorEstimator<1>::estimate_error (const DoFHandler<1> &, const Quadrature<0> &, @@ -34,6 +36,7 @@ void KellyErrorEstimator<1>::estimate_error (const DoFHandler<1> &, Assert(false, ExcNotImplemented()); }; +#endif template @@ -173,7 +176,7 @@ void KellyErrorEstimator::estimate_error (const DoFHandler &dof, - +#if deal_II_dimension == 1 template <> void KellyErrorEstimator<1>::integrate_over_regular_face (const active_cell_iterator &, @@ -191,6 +194,23 @@ void KellyErrorEstimator<1>::integrate_over_regular_face (const active_cell_iter +template <> +void KellyErrorEstimator<1>:: +integrate_over_irregular_face (const active_cell_iterator &, + const unsigned int , + const FiniteElement<1> &, + const Boundary<1> &, + const unsigned int , + FEFaceValues<1> &, + FESubfaceValues<1> &, + FaceIntegrals &, + const dVector &) { + Assert (false, ExcInternalError()); +}; + +#endif + + template void KellyErrorEstimator:: @@ -336,22 +356,6 @@ integrate_over_regular_face (const active_cell_iterator &cell, -template <> -void KellyErrorEstimator<1>:: -integrate_over_irregular_face (const active_cell_iterator &, - const unsigned int , - const FiniteElement<1> &, - const Boundary<1> &, - const unsigned int , - FEFaceValues<1> &, - FESubfaceValues<1> &, - FaceIntegrals &, - const dVector &) { - Assert (false, ExcInternalError()); -}; - - - template void KellyErrorEstimator:: integrate_over_irregular_face (const active_cell_iterator &cell, @@ -474,5 +478,4 @@ integrate_over_irregular_face (const active_cell_iterator &cell, // explicit instantiations -template class KellyErrorEstimator<1>; -template class KellyErrorEstimator<2>; +template class KellyErrorEstimator; diff --git a/deal.II/deal.II/source/numerics/matrices.cc b/deal.II/deal.II/source/numerics/matrices.cc index f13b4a666c..ce7f1c71f2 100644 --- a/deal.II/deal.II/source/numerics/matrices.cc +++ b/deal.II/deal.II/source/numerics/matrices.cc @@ -104,6 +104,7 @@ void MatrixCreator::create_mass_matrix (const DoFHandler &dof, +#if deal_II_dimension == 1 template <> void MatrixCreator<1>::create_boundary_mass_matrix (const DoFHandler<1> &, @@ -118,6 +119,8 @@ void MatrixCreator<1>::create_boundary_mass_matrix (const DoFHandler<1> &, Assert (false, ExcNotImplemented()); }; +#endif + template @@ -713,12 +716,8 @@ void LaplaceMatrix::assemble (dVector &rhs, -template class MatrixCreator<1>; -template class MatrixCreator<2>; -template class MatrixTools<1>; -template class MatrixTools<2>; -template class MassMatrix<1>; -template class MassMatrix<2>; -template class LaplaceMatrix<1>; -template class LaplaceMatrix<2>; +template class MatrixCreator; +template class MatrixTools; +template class MassMatrix; +template class LaplaceMatrix; diff --git a/deal.II/deal.II/source/numerics/vectors.cc b/deal.II/deal.II/source/numerics/vectors.cc index 2699f2451a..f206162778 100644 --- a/deal.II/deal.II/source/numerics/vectors.cc +++ b/deal.II/deal.II/source/numerics/vectors.cc @@ -71,6 +71,7 @@ void VectorTools::interpolate (const DoFHandler &dof, +#if deal_II_dimension == 1 template <> void VectorTools<1>::project (const DoFHandler<1> &, @@ -92,6 +93,8 @@ void VectorTools<1>::project (const DoFHandler<1> &, Assert (false, ExcNotImplemented()); }; +#endif + @@ -204,6 +207,8 @@ void VectorTools::create_right_hand_side (const DoFHandler &dof, +#if deal_II_dimension == 1 + template <> void VectorTools<1>::interpolate_boundary_values (const DoFHandler<1> &, @@ -214,6 +219,7 @@ VectorTools<1>::interpolate_boundary_values (const DoFHandler<1> &, Assert (false, ExcNotImplemented()); }; +#endif @@ -527,5 +533,4 @@ void VectorTools::integrate_difference (const DoFHandler &dof, }; -template VectorTools<1>; -template VectorTools<2>; +template VectorTools; diff --git a/tests/big-tests/poisson/Makefile b/tests/big-tests/poisson/Makefile index 6c3cbc83fb..7fcb84c7b6 100644 --- a/tests/big-tests/poisson/Makefile +++ b/tests/big-tests/poisson/Makefile @@ -15,7 +15,7 @@ debug-mode = on # If you want your program to be linked with extra object or library # files, specify them here: -user-libs = ../../../mia/control.o +user-libs = ../../../mia/control.o ../../lib/libfe.g.a # To run the program, use "make run"; to give parameters to the program, # give the parameters to the following variable: diff --git a/tests/big-tests/poisson/equation.cc b/tests/big-tests/poisson/equation.cc index ea43603d23..c598c614be 100644 --- a/tests/big-tests/poisson/equation.cc +++ b/tests/big-tests/poisson/equation.cc @@ -5,7 +5,7 @@ - +#if deal_II_dimension == 1 void PoissonEquation<1>::assemble (dFMatrix &cell_matrix, dVector &rhs, @@ -24,8 +24,12 @@ void PoissonEquation<1>::assemble (dFMatrix &cell_matrix, }; }; +#endif + +#if deal_II_dimension == 2 + void PoissonEquation<2>::assemble (dFMatrix &cell_matrix, dVector &rhs, const FEValues<2> &fe_values, @@ -50,6 +54,8 @@ void PoissonEquation<2>::assemble (dFMatrix &cell_matrix, }; }; +#endif + template @@ -73,5 +79,4 @@ void PoissonEquation::assemble (dVector &, -template class PoissonEquation<1>; template class PoissonEquation<2>;