]> https://gitweb.dealii.org/ - dealii.git/commitdiff
tests restructured and new tests added
authorGuido Kanschat <dr.guido.kanschat@gmail.com>
Fri, 18 Nov 2005 21:01:39 +0000 (21:01 +0000)
committerGuido Kanschat <dr.guido.kanschat@gmail.com>
Fri, 18 Nov 2005 21:01:39 +0000 (21:01 +0000)
git-svn-id: https://svn.dealii.org/trunk@11774 0785d39b-7218-0410-832d-ea1e28bc413d

tests/multigrid/Makefile
tests/multigrid/cycles.cc
tests/multigrid/transfer.cc
tests/multigrid/transfer/cmp/generic
tests/multigrid/transfer_block.cc [new file with mode: 0644]
tests/multigrid/transfer_block/cmp/generic [new file with mode: 0644]
tests/multigrid/transfer_select.cc [new file with mode: 0644]
tests/multigrid/transfer_select/cmp/generic [new file with mode: 0644]

index bde74913c5fc2d29c230c139ec057d422c80d0b2..8f69a242dc060222815ebca3c8cd63b5c3a5a228 100644 (file)
@@ -21,7 +21,7 @@ default: run-tests
 
 ############################################################
 
-tests_x = transfer cycles
+tests_x = cycles transfer transfer_select transfer_block
 
 # from above list of regular expressions, generate the real set of
 # tests
index fcac6040cdd553f18423fa3ecaa771609b80a5fa..76c0a17cb622b0dd51393bd70eeb3fd2bce07fda 100644 (file)
@@ -51,6 +51,9 @@ class MGAll
     virtual void restrict_and_add (const unsigned int,
                                   VECTOR &, const VECTOR &) const
       {}
+
+    virtual void clear () 
+      {}
     
     virtual void operator() (const unsigned int,
                             VECTOR &, const VECTOR &) const
index d9368a96941afe7417988597236da772d0d3f310..670ccf38ecd8b3d78d83fca1dd16e83b24f39ddb 100644 (file)
@@ -54,172 +54,42 @@ void check_simple(const FiniteElement<dim>& fe)
   Vector<double> u1(mgdof.n_dofs(1));
   Vector<double> u0(mgdof.n_dofs(0));
 
+                                  // First prolongate the constant
+                                  // vector.  For Lagrange elements,
+                                  // the values are just the number
+                                  // of degrees of freedom.
   u0 = 1;
   transfer.prolongate(1,u1,u0);
   transfer.prolongate(2,u2,u1);
-  deallog << "u0 " << u0.l2_norm()
-         << "\tu1 " << u1.l2_norm()
-         << "\tu2 " << u2.l2_norm();
+  deallog << "u0\t" << (int) (u0*u0+.5) << std::endl
+         << "u1\t" << (int) (u1*u1+.5) << std::endl
+         << "u2\t" << (int) (u2*u2+.5) << std::endl;
+                                  // Now restrict the same vectors.
   u1 = 0.;
   u0 = 0.;
   transfer.restrict_and_add(2,u1,u2);
   transfer.restrict_and_add(1,u0,u1);
-  deallog << "\tu1 " << u1.l2_norm()
-         << "\tu0 " << u0.l2_norm()
-         << std::endl;
-}
-
-template <int dim>
-void check_select(const FiniteElement<dim>& fe,
-                 unsigned int selected,
-                 unsigned int mg_selected,
-                 std::vector<unsigned int> target_component,
-                 std::vector<unsigned int> mg_target_component)
-{
-  deallog << fe.get_name()
-         << " select " << selected
-         << " (global) and " << mg_selected
-         << " (mg)" << std::endl;
-  
-  Triangulation<dim> tr;
-  GridGenerator::hyper_cube(tr);
-  tr.refine_global(2);
-  
-  MGDoFHandler<dim> mgdof(tr);
-  DoFHandler<dim>& dof=mgdof;
-  mgdof.distribute_dofs(fe);
-  DoFRenumbering::component_wise(mgdof, target_component);
-  vector<unsigned int> ndofs(fe.n_components());
-  DoFTools::count_dofs_per_component(mgdof, ndofs, true, target_component);
-  
-  for (unsigned int l=0;l<tr.n_levels();++l)
-    DoFRenumbering::component_wise(mgdof, l, mg_target_component);
-  std::vector<std::vector<unsigned int> > mg_ndofs(mgdof.get_tria().n_levels());  MGTools::count_dofs_per_component(mgdof, mg_ndofs, true, mg_target_component);
-
-  deallog << "Global  dofs:";
-  for (unsigned int i=0;i<ndofs.size();++i)
-    deallog << ' ' << ndofs[i];
-  deallog << std::endl;
-  for (unsigned int l=0;l<mg_ndofs.size();++l)
-    {
-      deallog << "Level " << l << " dofs:";
-      for (unsigned int i=0;i<mg_ndofs[l].size();++i)
-       deallog << ' ' << mg_ndofs[l][i];
-      deallog << std::endl;
-    }
+  deallog << "u1\t" << (int) (u1*u1+.5) << std::endl
+         << "u0\t" << (int) (u0*u0+.5) << std::endl;
   
-  
-  MGTransferSelect<double> transfer;
-  transfer.build_matrices(dof, mgdof, selected, mg_selected,
-                         target_component, mg_target_component);
-
-  Vector<double> u2(mg_ndofs[2][mg_selected]);
-  Vector<double> u1(mg_ndofs[1][mg_selected]);
-  Vector<double> u0(mg_ndofs[0][mg_selected]);
-
-  u0 = 1;
+                                  // Now the same for a non-constant
+                                  // vector
+  for (unsigned int i=0;i<u0.size();++i)
+    u0(i) = i;
   transfer.prolongate(1,u1,u0);
   transfer.prolongate(2,u2,u1);
-  deallog << "u0 " << u0*u0
-         << "\tu1 " << u1*u1
-         << "\tu2 " << u2*u2;
+  deallog << "u0\t" << (int) (u0*u0+.5) << std::endl
+         << "u1\t" << (int) (u1*u1+.5) << std::endl
+         << "u2\t" << (int) (u2*u2+.5) << std::endl;
+                                  // Now restrict the same vectors.
   u1 = 0.;
   u0 = 0.;
   transfer.restrict_and_add(2,u1,u2);
   transfer.restrict_and_add(1,u0,u1);
-  deallog << "\tu1 " << u1*u1
-         << "\tu0 " << u0*u0
-         << std::endl;
-
-                                  // Check copy to mg and back
-  BlockVector<double> u;
-  u.reinit (ndofs);
-  for (unsigned int i=0;i<u.size();++i)
-    u(i) = i;
-  
-  MGLevelObject<Vector<double> > v;
-  v.resize(2,2);
-  v[2].reinit(mg_ndofs[2][mg_selected]);
-
-  transfer.copy_to_mg(mgdof, v, u);
-  for (unsigned int i=0; i<v[2].size();++i)
-    deallog << ' ' << (int) v[2](i);
-  deallog << std::endl;
+  deallog << "u1\t" << (int) (u1*u1+.5) << std::endl
+         << "u0\t" << (int) (u0*u0+.5) << std::endl;  
 }
 
-/*
- * The following code must be adapted to the new structures.
-
-template <int dim>
-void check_block(const FiniteElement<dim>& fe,
-                const vector<bool>& selected,
-                const vector<bool>& mg_selected,
-                std::vector<unsigned int> target_component,
-                std::vector<unsigned int> mg_target_component)
-{
-  deallog << fe.get_name() << std::endl;
-  
-  Triangulation<dim> tr;
-  GridGenerator::hyper_cube(tr);
-  tr.refine_global(2);
-  
-  MGDoFHandler<dim> mgdof(tr);
-  mgdof.distribute_dofs(fe);
-  DoFRenumbering::component_wise(mgdof, target_component);
-  for (unsigned int l=0;l<tr.n_levels();++l)
-    DoFRenumbering::component_wise(mgdof, l, mg_target_component);
-  
-  std::vector<std::vector<unsigned int> > mg_ndofs(mgdof.get_tria().n_levels());
-  MGTools::count_dofs_per_component(mgdof, mg_ndofs, mg_target_component);
-  for (unsigned int l=0;l<mg_ndofs.size();++l)
-    {
-      deallog << "Level " << l << " dofs:";
-      for (unsigned int i=0;i<mg_ndofs[l].size();++i)
-       deallog << ' ' << mg_ndofs[l][i];
-      deallog << std::endl;
-    }
-  
-  
-  MGTransferBlock<double> transfer;
-  transfer.build_matrices(mgdof, selected, mg_selected,
-                         target_component, mg_target_component);
-
-  BlockVector<double> u2(mg_ndofs[2]);
-  BlockVector<double> u1(mg_ndofs[1]);
-  BlockVector<double> u0(mg_ndofs[0]);
-
-  u0 = 1;
-  transfer.prolongate(1,u1,u0);
-  transfer.prolongate(2,u2,u1);
-  deallog << "u0 " << u0*u0
-         << "\tu1 " << u1*u1
-         << "\tu2 " << u2*u2;
-  u1 = 0.;
-  u0 = 0.;
-  transfer.restrict_and_add(2,u1,u2);
-  transfer.restrict_and_add(1,u0,u1);
-  deallog << "\tu1 " << u1*u1
-         << "\tu0 " << u0*u0
-         << std::endl;
-
-                                  // Check copy to mg and back
-  std::vector<unsigned int> ndofs (target_component.size());
-  DoFTools::count_dofs_per_component(mgdof, ndofs, target_component);
-  BlockVector<double> u;
-  u.reinit (ndofs);
-  for (unsigned int i=0;i<u.size();++i)
-    u(i) = i;
-  
-  MGLevelObject<Vector<double> > v;
-  v.resize(2,2);
-  v[2].reinit(mg_ndofs[2][mg_selected]);
-
-  transfer.copy_to_mg(mgdof, v, u);
-  for (unsigned int i=0; i<v[2].size();++i)
-    deallog << ' ' << (int) v[2](i);
-  deallog << std::endl;
-}
-*/
 
 int main()
 {
@@ -229,43 +99,15 @@ int main()
   deallog.depth_console(0);
   deallog.threshold_double(1.e-10);
   
-//  check_simple (FE_DGP<2>(0));
-//  check_simple (FE_DGP<2>(1));
+  check_simple (FE_DGP<2>(0));
+  check_simple (FE_DGP<2>(1));
   check_simple (FE_DGQ<2>(1));
-//  check_simple (FE_DGQ<2>(2));
-//  check_simple (FE_Q<2>(1));
-//  check_simple (FE_Q<2>(2));
-
-  std::vector<unsigned int> v1(4);
-  std::vector<unsigned int> v2(4);
-  std::vector<unsigned int> v3(4);
-  for (unsigned int i=0;i<4;++i)
-    {
-      v1[i] = i;
-      v2[i] = 0;
-      v3[i] = i;
-    }
-  v3[0] = 0;
-  v3[1] = 1;
-  v3[2] = 1;
-  v3[3] = 2;
-
-  FESystem<2> fe1(FE_DGQ<2>(1), 4);
-  
-  check_select (fe1, 0, 0, v1, v1);
-  check_select (fe1, 1, 1, v1, v1);
-  check_select (fe1, 1, 2, v1, v1);
-  check_select (fe1, 2, 1, v1, v1);
-  check_select (fe1, 0, 0, v2, v2);
-  check_select (fe1, 0, 0, v3, v3);
-  check_select (fe1, 1, 1, v3, v3);
-  check_select (fe1, 0, 0, v1, v3);
-  check_select (fe1, 1, 1, v1, v3);
-  check_select (fe1, 2, 1, v1, v3);
-  check_select (fe1, 0, 1, v1, v3);
-  check_select (fe1, 0, 0, v1, v2);
-
-//  vector<bool> s1(4, true);
-
-//  check_block(fe1, s1, s1, v1, v1);
+  check_simple (FE_DGQ<2>(2));
+  check_simple (FE_Q<2>(1));
+  check_simple (FE_Q<2>(2));
+  check_simple (FESystem<2>(FE_DGQ<2>(1), 2));
+  check_simple (FESystem<2>(FE_DGP<2>(1), 2, FE_DGQ<2>(1), 3));
+  
+  check_simple (FE_DGQ<3>(1));
+  check_simple (FE_Q<3>(2));
 }
index 423a35df1f3e4f22964548493cce2738d20e1461..3c00cdf79c6628b1f54c48979a975d0771cf9f77 100644 (file)
 
+DEAL::FE_DGP<2>(0)
+DEAL::u0       1
+DEAL::u1       4
+DEAL::u2       16
+DEAL::u1       64
+DEAL::u0       256
+DEAL::u0       0
+DEAL::u1       0
+DEAL::u2       0
+DEAL::u1       0
+DEAL::u0       0
+DEAL::FE_DGP<2>(1)
+DEAL::u0       3
+DEAL::u1       12
+DEAL::u2       48
+DEAL::u1       192
+DEAL::u0       768
+DEAL::u0       5
+DEAL::u1       20
+DEAL::u2       80
+DEAL::u1       320
+DEAL::u0       1280
 DEAL::FE_DGQ<2>(1)
-DEAL::u0 2.00  u1 4.00 u2 8.00 u1 16.0 u0 32.0
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 0 (mg)
-DEAL::Global  dofs: 64 64 64 64
-DEAL::Level 0 dofs: 4 4 4 4
-DEAL::Level 1 dofs: 16 16 16 16
-DEAL::Level 2 dofs: 64 64 64 64
-DEAL::u0 4.00  u1 16.0 u2 64.0 u1 256. u0 1.02e+03
-DEAL:: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 1 (global) and 1 (mg)
-DEAL::Global  dofs: 64 64 64 64
-DEAL::Level 0 dofs: 4 4 4 4
-DEAL::Level 1 dofs: 16 16 16 16
-DEAL::Level 2 dofs: 64 64 64 64
-DEAL::u0 4.00  u1 16.0 u2 64.0 u1 256. u0 1.02e+03
-DEAL:: 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 1 (global) and 2 (mg)
-DEAL::Global  dofs: 64 64 64 64
-DEAL::Level 0 dofs: 4 4 4 4
-DEAL::Level 1 dofs: 16 16 16 16
-DEAL::Level 2 dofs: 64 64 64 64
-DEAL::u0 4.00  u1 16.0 u2 64.0 u1 256. u0 1.02e+03
-DEAL:: 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 2 (global) and 1 (mg)
-DEAL::Global  dofs: 64 64 64 64
-DEAL::Level 0 dofs: 4 4 4 4
-DEAL::Level 1 dofs: 16 16 16 16
-DEAL::Level 2 dofs: 64 64 64 64
-DEAL::u0 4.00  u1 16.0 u2 64.0 u1 256. u0 1.02e+03
-DEAL:: 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 0 (mg)
-DEAL::Global  dofs: 256 0 0 0
-DEAL::Level 0 dofs: 16 0 0 0
-DEAL::Level 1 dofs: 64 0 0 0
-DEAL::Level 2 dofs: 256 0 0 0
-DEAL::u0 16.0  u1 64.0 u2 256. u1 1.02e+03     u0 4.10e+03
-DEAL:: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 0 (mg)
-DEAL::Global  dofs: 64 128 64 0
-DEAL::Level 0 dofs: 4 8 4 0
-DEAL::Level 1 dofs: 16 32 16 0
-DEAL::Level 2 dofs: 64 128 64 0
-DEAL::u0 4.00  u1 16.0 u2 64.0 u1 256. u0 1.02e+03
-DEAL:: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 1 (global) and 1 (mg)
-DEAL::Global  dofs: 64 128 64 0
-DEAL::Level 0 dofs: 4 8 4 0
-DEAL::Level 1 dofs: 16 32 16 0
-DEAL::Level 2 dofs: 64 128 64 0
-DEAL::u0 8.00  u1 32.0 u2 128. u1 512. u0 2.05e+03
-DEAL:: 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 0 (mg)
-DEAL::Global  dofs: 64 64 64 64
-DEAL::Level 0 dofs: 4 8 4 0
-DEAL::Level 1 dofs: 16 32 16 0
-DEAL::Level 2 dofs: 64 128 64 0
-DEAL::u0 4.00  u1 16.0 u2 64.0 u1 256. u0 1.02e+03
-DEAL:: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 1 (global) and 1 (mg)
-DEAL::Global  dofs: 64 64 64 64
-DEAL::Level 0 dofs: 4 8 4 0
-DEAL::Level 1 dofs: 16 32 16 0
-DEAL::Level 2 dofs: 64 128 64 0
-DEAL::u0 8.00  u1 32.0 u2 128. u1 512. u0 2.05e+03
-DEAL:: 64 65 66 67 128 129 130 131 68 69 70 71 132 133 134 135 72 73 74 75 136 137 138 139 76 77 78 79 140 141 142 143 80 81 82 83 144 145 146 147 84 85 86 87 148 149 150 151 88 89 90 91 152 153 154 155 92 93 94 95 156 157 158 159 96 97 98 99 160 161 162 163 100 101 102 103 164 165 166 167 104 105 106 107 168 169 170 171 108 109 110 111 172 173 174 175 112 113 114 115 176 177 178 179 116 117 118 119 180 181 182 183 120 121 122 123 184 185 186 187 124 125 126 127 188 189 190 191
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 2 (global) and 1 (mg)
-DEAL::Global  dofs: 64 64 64 64
-DEAL::Level 0 dofs: 4 8 4 0
-DEAL::Level 1 dofs: 16 32 16 0
-DEAL::Level 2 dofs: 64 128 64 0
-DEAL::u0 8.00  u1 32.0 u2 128. u1 512. u0 2.05e+03
-DEAL:: 64 65 66 67 128 129 130 131 68 69 70 71 132 133 134 135 72 73 74 75 136 137 138 139 76 77 78 79 140 141 142 143 80 81 82 83 144 145 146 147 84 85 86 87 148 149 150 151 88 89 90 91 152 153 154 155 92 93 94 95 156 157 158 159 96 97 98 99 160 161 162 163 100 101 102 103 164 165 166 167 104 105 106 107 168 169 170 171 108 109 110 111 172 173 174 175 112 113 114 115 176 177 178 179 116 117 118 119 180 181 182 183 120 121 122 123 184 185 186 187 124 125 126 127 188 189 190 191
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 1 (mg)
-DEAL::Global  dofs: 64 64 64 64
-DEAL::Level 0 dofs: 4 8 4 0
-DEAL::Level 1 dofs: 16 32 16 0
-DEAL::Level 2 dofs: 64 128 64 0
-DEAL::u0 8.00  u1 32.0 u2 128. u1 512. u0 2.05e+03
-DEAL:: 64 65 66 67 128 129 130 131 68 69 70 71 132 133 134 135 72 73 74 75 136 137 138 139 76 77 78 79 140 141 142 143 80 81 82 83 144 145 146 147 84 85 86 87 148 149 150 151 88 89 90 91 152 153 154 155 92 93 94 95 156 157 158 159 96 97 98 99 160 161 162 163 100 101 102 103 164 165 166 167 104 105 106 107 168 169 170 171 108 109 110 111 172 173 174 175 112 113 114 115 176 177 178 179 116 117 118 119 180 181 182 183 120 121 122 123 184 185 186 187 124 125 126 127 188 189 190 191
-DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 0 (mg)
-DEAL::Global  dofs: 64 64 64 64
-DEAL::Level 0 dofs: 16 0 0 0
-DEAL::Level 1 dofs: 64 0 0 0
-DEAL::Level 2 dofs: 256 0 0 0
-DEAL::u0 16.0  u1 64.0 u2 256. u1 1.02e+03     u0 4.10e+03
-DEAL:: 0 1 2 3 64 65 66 67 128 129 130 131 192 193 194 195 4 5 6 7 68 69 70 71 132 133 134 135 196 197 198 199 8 9 10 11 72 73 74 75 136 137 138 139 200 201 202 203 12 13 14 15 76 77 78 79 140 141 142 143 204 205 206 207 16 17 18 19 80 81 82 83 144 145 146 147 208 209 210 211 20 21 22 23 84 85 86 87 148 149 150 151 212 213 214 215 24 25 26 27 88 89 90 91 152 153 154 155 216 217 218 219 28 29 30 31 92 93 94 95 156 157 158 159 220 221 222 223 32 33 34 35 96 97 98 99 160 161 162 163 224 225 226 227 36 37 38 39 100 101 102 103 164 165 166 167 228 229 230 231 40 41 42 43 104 105 106 107 168 169 170 171 232 233 234 235 44 45 46 47 108 109 110 111 172 173 174 175 236 237 238 239 48 49 50 51 112 113 114 115 176 177 178 179 240 241 242 243 52 53 54 55 116 117 118 119 180 181 182 183 244 245 246 247 56 57 58 59 120 121 122 123 184 185 186 187 248 249 250 251 60 61 62 63 124 125 126 127 188 189 190 191 252 253 254 255
+DEAL::u0       4
+DEAL::u1       16
+DEAL::u2       64
+DEAL::u1       256
+DEAL::u0       1024
+DEAL::u0       14
+DEAL::u1       46
+DEAL::u2       174
+DEAL::u1       676
+DEAL::u0       2484
+DEAL::FE_DGQ<2>(2)
+DEAL::u0       9
+DEAL::u1       36
+DEAL::u2       144
+DEAL::u1       946
+DEAL::u0       4774
+DEAL::u0       204
+DEAL::u1       726
+DEAL::u2       2814
+DEAL::u1       17973
+DEAL::u0       82623
+DEAL::FE_Q<2>(1)
+DEAL::u0       4
+DEAL::u1       9
+DEAL::u2       25
+DEAL::u1       72
+DEAL::u0       156
+DEAL::u0       14
+DEAL::u1       28
+DEAL::u2       72
+DEAL::u1       196
+DEAL::u0       400
+DEAL::FE_Q<2>(2)
+DEAL::u0       9
+DEAL::u1       25
+DEAL::u2       81
+DEAL::u1       320
+DEAL::u0       1197
+DEAL::u0       204
+DEAL::u1       770
+DEAL::u2       2854
+DEAL::u1       12165
+DEAL::u0       49857
+DEAL::FESystem<2>[FE_DGQ<2>(1)^2]
+DEAL::u0       8
+DEAL::u1       32
+DEAL::u2       128
+DEAL::u1       512
+DEAL::u0       2048
+DEAL::u0       140
+DEAL::u1       540
+DEAL::u2       2140
+DEAL::u1       8520
+DEAL::u0       33640
+DEAL::FESystem<2>[FE_DGP<2>(1)^2-FE_DGQ<2>(1)^3]
+DEAL::u0       18
+DEAL::u1       72
+DEAL::u2       288
+DEAL::u1       1152
+DEAL::u0       4608
+DEAL::u0       1785
+DEAL::u1       7110
+DEAL::u2       28410
+DEAL::u1       113580
+DEAL::u0       453660
+DEAL::FE_DGQ<3>(1)
+DEAL::u0       8
+DEAL::u1       64
+DEAL::u2       512
+DEAL::u1       4096
+DEAL::u0       32768
+DEAL::u0       140
+DEAL::u1       952
+DEAL::u2       7280
+DEAL::u1       56896
+DEAL::u0       425600
+DEAL::FE_Q<3>(2)
+DEAL::u0       27
+DEAL::u1       125
+DEAL::u2       729
+DEAL::u1       5711
+DEAL::u0       41399
+DEAL::u0       6201
+DEAL::u1       41649
+DEAL::u2       283614
+DEAL::u1       2428884
+DEAL::u0       19420365
diff --git a/tests/multigrid/transfer_block.cc b/tests/multigrid/transfer_block.cc
new file mode 100644 (file)
index 0000000..070aeee
--- /dev/null
@@ -0,0 +1,171 @@
+//----------------------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 2000 - 2005 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------------------
+
+
+#include <base/logstream.h>
+#include <lac/vector.h>
+#include <lac/block_vector.h>
+#include <grid/tria.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_renumbering.h>
+#include <dofs/dof_tools.h>
+#include <fe/fe_dgp.h>
+#include <fe/fe_dgq.h>
+#include <fe/fe_q.h>
+#include <fe/fe_system.h>
+#include <multigrid/mg_dof_handler.h>
+#include <multigrid/mg_transfer.h>
+#include <multigrid/mg_tools.h>
+#include <multigrid/mg_level_object.h>
+
+#include <fstream>
+#include <iostream>
+#include <iomanip>
+#include <algorithm>
+
+using namespace std;
+
+template <int dim>
+void check_block(const FiniteElement<dim>& fe,
+                const vector<bool>& /*selected*/,
+                const vector<bool>& /*mg_selected*/,
+                const vector<double>& factors,
+                std::vector<unsigned int> target_component,
+                std::vector<unsigned int> mg_target_component)
+{
+  deallog << fe.get_name() << std::endl;
+  
+  Triangulation<dim> tr;
+  GridGenerator::hyper_cube(tr);
+  tr.refine_global(2);
+  
+  MGDoFHandler<dim> mgdof(tr);
+  DoFHandler<dim>& dof=mgdof;
+  mgdof.distribute_dofs(fe);
+  DoFRenumbering::component_wise(mgdof, target_component);
+  vector<unsigned int> ndofs(fe.n_components());
+  DoFTools::count_dofs_per_component(mgdof, ndofs, true, target_component);
+  
+  for (unsigned int l=0;l<tr.n_levels();++l)
+    DoFRenumbering::component_wise(mgdof, l, mg_target_component);
+  
+  std::vector<std::vector<unsigned int> > mg_ndofs(mgdof.get_tria().n_levels());
+  MGTools::count_dofs_per_component(mgdof, mg_ndofs, true, mg_target_component);
+
+  deallog << "Global  dofs:";
+  for (unsigned int i=0;i<ndofs.size();++i)
+    deallog << ' ' << ndofs[i];
+  deallog << std::endl;
+  for (unsigned int l=0;l<mg_ndofs.size();++l)
+    {
+      deallog << "Level " << l << " dofs:";
+      for (unsigned int i=0;i<mg_ndofs[l].size();++i)
+       deallog << ' ' << mg_ndofs[l][i];
+      deallog << std::endl;
+    }  
+  
+  PrimitiveVectorMemory<Vector<double> > mem;
+  MGTransferBlock<double> transfer;
+  transfer.build_matrices(dof, mgdof, target_component, mg_target_component);
+  if (factors.size()>0)
+    transfer.initialize(factors, mem);
+
+  BlockVector<double> u2(mg_ndofs[2]);
+  BlockVector<double> u1(mg_ndofs[1]);
+  BlockVector<double> u0(mg_ndofs[0]);
+
+  u0 = 1;
+  transfer.prolongate(1,u1,u0);
+  transfer.prolongate(2,u2,u1);
+  deallog << "u0";
+  for (unsigned int b=0;b<u0.n_blocks();++b)
+    deallog << '\t' << (int) (u0.block(b)*u0.block(b)+.5);
+  deallog << std::endl << "u1";
+  for (unsigned int b=0;b<u1.n_blocks();++b)
+    deallog << '\t' << (int) (u1.block(b)*u1.block(b)+.5);
+  deallog << std::endl << "u2";
+  for (unsigned int b=0;b<u2.n_blocks();++b)
+    deallog << '\t' << (int) (u2.block(b)*u2.block(b)+.5);
+  deallog << std::endl;
+  
+  u1 = 0.;
+  u0 = 0.;
+  transfer.restrict_and_add(2,u1,u2);
+  transfer.restrict_and_add(1,u0,u1);
+
+  deallog << "u1";
+  for (unsigned int b=0;b<u1.n_blocks();++b)
+    deallog << '\t' << (int) (u1.block(b)*u1.block(b)+.5);
+  deallog << std::endl << "u0";
+  for (unsigned int b=0;b<u0.n_blocks();++b)
+    deallog << '\t' << (int) (u0.block(b)*u0.block(b)+.5);
+  deallog << std::endl;
+                                  // Check copy to mg and back
+  BlockVector<double> u;
+  u.reinit (ndofs);
+  for (unsigned int i=0;i<u.size();++i)
+    u(i) = i;
+  
+  MGLevelObject<BlockVector<double> > v;
+  v.resize(2,2);
+  v[2].reinit(mg_ndofs[2]);
+
+  transfer.copy_to_mg(mgdof, v, u);
+  for (unsigned int i=0; i<v[2].size();++i)
+    deallog << ' ' << (int) v[2](i);
+  deallog << std::endl;
+}
+
+
+int main()
+{
+  std::ofstream logfile("transfer_block/output");
+  logfile.precision(3);
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+  
+  std::vector<unsigned int> v1(4);
+  std::vector<unsigned int> v2(4);
+  std::vector<unsigned int> v3(4);
+  for (unsigned int i=0;i<4;++i)
+    {
+      v1[i] = i;
+      v2[i] = 0;
+      v3[i] = i;
+    }
+  v3[0] = 0;
+  v3[1] = 1;
+  v3[2] = 1;
+  v3[3] = 2;
+
+  std::vector<double> factors;
+  
+  FESystem<2> fe1(FE_DGQ<2>(1), 4);
+  
+  vector<bool> s1(4, true);
+  
+  deallog << "s1 s1 v1 v1" << std::endl;
+  check_block(fe1, s1, s1, factors, v1, v1);
+//   deallog << "s1 s1 v1 v2" << std::endl;
+//   check_block(fe1, s1, s1, factors, v1, v2);
+//   deallog << "s1 s1 v1 v3" << std::endl;
+//   check_block(fe1, s1, s1, factors, v1, v3);
+  
+  factors.resize(4, 1.);
+  factors[1] = 2.;
+  deallog << "s1 s1 v1 v1" << std::endl;
+  check_block(fe1, s1, s1, factors, v1, v1);  
+//   deallog << "s1 s1 v1 v3" << std::endl;
+//   check_block(fe1, s1, s1, factors, v1, v3);  
+}
diff --git a/tests/multigrid/transfer_block/cmp/generic b/tests/multigrid/transfer_block/cmp/generic
new file mode 100644 (file)
index 0000000..328d4db
--- /dev/null
@@ -0,0 +1,12 @@
+
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4]
+DEAL::Global  dofs: 64 64 64 64
+DEAL::Level 0 dofs: 4 4 4 4
+DEAL::Level 1 dofs: 16 16 16 16
+DEAL::Level 2 dofs: 64 64 64 64
+DEAL::u0       4       4       4       4
+DEAL::u1       15      15      15      15
+DEAL::u2       63      63      63      63
+DEAL::u1       255     255     255     255
+DEAL::u0       1023    1023    1023    1023
+DEAL:: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
diff --git a/tests/multigrid/transfer_select.cc b/tests/multigrid/transfer_select.cc
new file mode 100644 (file)
index 0000000..18b6726
--- /dev/null
@@ -0,0 +1,153 @@
+//----------------------------------------------------------------------------
+//    $Id$
+//    Version: $Name$
+//
+//    Copyright (C) 2000 - 2005 by the deal.II authors
+//
+//    This file is subject to QPL and may not be  distributed
+//    without copyright and license information. Please refer
+//    to the file deal.II/doc/license.html for the  text  and
+//    further information on this license.
+//
+//----------------------------------------------------------------------------
+
+
+#include <base/logstream.h>
+#include <lac/vector.h>
+#include <lac/block_vector.h>
+#include <grid/tria.h>
+#include <grid/grid_generator.h>
+#include <dofs/dof_renumbering.h>
+#include <dofs/dof_tools.h>
+#include <fe/fe_dgp.h>
+#include <fe/fe_dgq.h>
+#include <fe/fe_q.h>
+#include <fe/fe_system.h>
+#include <multigrid/mg_dof_handler.h>
+#include <multigrid/mg_transfer.h>
+#include <multigrid/mg_tools.h>
+#include <multigrid/mg_level_object.h>
+
+#include <fstream>
+#include <iostream>
+#include <iomanip>
+#include <algorithm>
+
+using namespace std;
+
+template <int dim>
+void check_select(const FiniteElement<dim>& fe,
+                 unsigned int selected,
+                 unsigned int mg_selected,
+                 std::vector<unsigned int> target_component,
+                 std::vector<unsigned int> mg_target_component)
+{
+  deallog << fe.get_name()
+         << " select " << selected
+         << " (global) and " << mg_selected
+         << " (mg)" << std::endl;
+  
+  Triangulation<dim> tr;
+  GridGenerator::hyper_cube(tr);
+  tr.refine_global(2);
+  
+  MGDoFHandler<dim> mgdof(tr);
+  DoFHandler<dim>& dof=mgdof;
+  mgdof.distribute_dofs(fe);
+  DoFRenumbering::component_wise(mgdof, target_component);
+  vector<unsigned int> ndofs(fe.n_components());
+  DoFTools::count_dofs_per_component(mgdof, ndofs, true, target_component);
+  
+  for (unsigned int l=0;l<tr.n_levels();++l)
+    DoFRenumbering::component_wise(mgdof, l, mg_target_component);
+  std::vector<std::vector<unsigned int> > mg_ndofs(mgdof.get_tria().n_levels());
+  MGTools::count_dofs_per_component(mgdof, mg_ndofs, true, mg_target_component);
+
+  deallog << "Global  dofs:";
+  for (unsigned int i=0;i<ndofs.size();++i)
+    deallog << ' ' << ndofs[i];
+  deallog << std::endl;
+  for (unsigned int l=0;l<mg_ndofs.size();++l)
+    {
+      deallog << "Level " << l << " dofs:";
+      for (unsigned int i=0;i<mg_ndofs[l].size();++i)
+       deallog << ' ' << mg_ndofs[l][i];
+      deallog << std::endl;
+    }
+  
+  
+  MGTransferSelect<double> transfer;
+  transfer.build_matrices(dof, mgdof, selected, mg_selected,
+                         target_component, mg_target_component);
+
+  Vector<double> u2(mg_ndofs[2][mg_selected]);
+  Vector<double> u1(mg_ndofs[1][mg_selected]);
+  Vector<double> u0(mg_ndofs[0][mg_selected]);
+
+  u0 = 1;
+  transfer.prolongate(1,u1,u0);
+  transfer.prolongate(2,u2,u1);
+  deallog << "u0\t" << (int) (u0*u0+.5) << std::endl
+         << "u1\t" << (int) (u1*u1+.5) << std::endl
+         << "u2\t" << (int) (u2*u2+.5) << std::endl;
+                                  // Now restrict the same vectors.
+  u1 = 0.;
+  u0 = 0.;
+  transfer.restrict_and_add(2,u1,u2);
+  transfer.restrict_and_add(1,u0,u1);
+  deallog << "u1\t" << (int) (u1*u1+.5) << std::endl
+         << "u0\t" << (int) (u0*u0+.5) << std::endl;
+                                  // Check copy to mg and back
+  BlockVector<double> u;
+  u.reinit (ndofs);
+  for (unsigned int i=0;i<u.size();++i)
+    u(i) = i;
+  
+  MGLevelObject<Vector<double> > v;
+  v.resize(2,2);
+  v[2].reinit(mg_ndofs[2][mg_selected]);
+
+  transfer.copy_to_mg(mgdof, v, u);
+  for (unsigned int i=0; i<v[2].size();++i)
+    deallog << ' ' << (int) v[2](i);
+  deallog << std::endl;
+}
+
+
+int main()
+{
+  std::ofstream logfile("transfer_select/output");
+  logfile.precision(3);
+  deallog.attach(logfile);
+  deallog.depth_console(0);
+  deallog.threshold_double(1.e-10);
+  
+  std::vector<unsigned int> v1(4);
+  std::vector<unsigned int> v2(4);
+  std::vector<unsigned int> v3(4);
+  for (unsigned int i=0;i<4;++i)
+    {
+      v1[i] = i;
+      v2[i] = 0;
+      v3[i] = i;
+    }
+  v3[0] = 0;
+  v3[1] = 1;
+  v3[2] = 1;
+  v3[3] = 2;
+
+  FESystem<2> fe1(FE_DGQ<2>(1), 4);
+  
+  check_select (fe1, 0, 0, v1, v1);
+  check_select (fe1, 1, 1, v1, v1);
+  check_select (fe1, 1, 2, v1, v1);
+  check_select (fe1, 2, 1, v1, v1);
+  check_select (fe1, 0, 0, v2, v2);
+  check_select (fe1, 0, 0, v3, v3);
+  check_select (fe1, 1, 1, v3, v3);
+  check_select (fe1, 0, 0, v1, v3);
+  check_select (fe1, 1, 1, v1, v3);
+  check_select (fe1, 2, 1, v1, v3);
+  check_select (fe1, 0, 1, v1, v3);
+  check_select (fe1, 0, 0, v1, v2);
+}
diff --git a/tests/multigrid/transfer_select/cmp/generic b/tests/multigrid/transfer_select/cmp/generic
new file mode 100644 (file)
index 0000000..14e41d1
--- /dev/null
@@ -0,0 +1,133 @@
+
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 0 (mg)
+DEAL::Global  dofs: 64 64 64 64
+DEAL::Level 0 dofs: 4 4 4 4
+DEAL::Level 1 dofs: 16 16 16 16
+DEAL::Level 2 dofs: 64 64 64 64
+DEAL::u0       4
+DEAL::u1       16
+DEAL::u2       64
+DEAL::u1       256
+DEAL::u0       1024
+DEAL:: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 1 (global) and 1 (mg)
+DEAL::Global  dofs: 64 64 64 64
+DEAL::Level 0 dofs: 4 4 4 4
+DEAL::Level 1 dofs: 16 16 16 16
+DEAL::Level 2 dofs: 64 64 64 64
+DEAL::u0       4
+DEAL::u1       16
+DEAL::u2       64
+DEAL::u1       256
+DEAL::u0       1024
+DEAL:: 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 1 (global) and 2 (mg)
+DEAL::Global  dofs: 64 64 64 64
+DEAL::Level 0 dofs: 4 4 4 4
+DEAL::Level 1 dofs: 16 16 16 16
+DEAL::Level 2 dofs: 64 64 64 64
+DEAL::u0       4
+DEAL::u1       16
+DEAL::u2       64
+DEAL::u1       256
+DEAL::u0       1024
+DEAL:: 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 2 (global) and 1 (mg)
+DEAL::Global  dofs: 64 64 64 64
+DEAL::Level 0 dofs: 4 4 4 4
+DEAL::Level 1 dofs: 16 16 16 16
+DEAL::Level 2 dofs: 64 64 64 64
+DEAL::u0       4
+DEAL::u1       16
+DEAL::u2       64
+DEAL::u1       256
+DEAL::u0       1024
+DEAL:: 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 0 (mg)
+DEAL::Global  dofs: 256 0 0 0
+DEAL::Level 0 dofs: 16 0 0 0
+DEAL::Level 1 dofs: 64 0 0 0
+DEAL::Level 2 dofs: 256 0 0 0
+DEAL::u0       16
+DEAL::u1       64
+DEAL::u2       256
+DEAL::u1       1024
+DEAL::u0       4096
+DEAL:: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 0 (mg)
+DEAL::Global  dofs: 64 128 64 0
+DEAL::Level 0 dofs: 4 8 4 0
+DEAL::Level 1 dofs: 16 32 16 0
+DEAL::Level 2 dofs: 64 128 64 0
+DEAL::u0       4
+DEAL::u1       16
+DEAL::u2       64
+DEAL::u1       256
+DEAL::u0       1024
+DEAL:: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 1 (global) and 1 (mg)
+DEAL::Global  dofs: 64 128 64 0
+DEAL::Level 0 dofs: 4 8 4 0
+DEAL::Level 1 dofs: 16 32 16 0
+DEAL::Level 2 dofs: 64 128 64 0
+DEAL::u0       8
+DEAL::u1       32
+DEAL::u2       128
+DEAL::u1       512
+DEAL::u0       2048
+DEAL:: 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 0 (mg)
+DEAL::Global  dofs: 64 64 64 64
+DEAL::Level 0 dofs: 4 8 4 0
+DEAL::Level 1 dofs: 16 32 16 0
+DEAL::Level 2 dofs: 64 128 64 0
+DEAL::u0       4
+DEAL::u1       16
+DEAL::u2       64
+DEAL::u1       256
+DEAL::u0       1024
+DEAL:: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 1 (global) and 1 (mg)
+DEAL::Global  dofs: 64 64 64 64
+DEAL::Level 0 dofs: 4 8 4 0
+DEAL::Level 1 dofs: 16 32 16 0
+DEAL::Level 2 dofs: 64 128 64 0
+DEAL::u0       8
+DEAL::u1       32
+DEAL::u2       128
+DEAL::u1       512
+DEAL::u0       2048
+DEAL:: 64 65 66 67 128 129 130 131 68 69 70 71 132 133 134 135 72 73 74 75 136 137 138 139 76 77 78 79 140 141 142 143 80 81 82 83 144 145 146 147 84 85 86 87 148 149 150 151 88 89 90 91 152 153 154 155 92 93 94 95 156 157 158 159 96 97 98 99 160 161 162 163 100 101 102 103 164 165 166 167 104 105 106 107 168 169 170 171 108 109 110 111 172 173 174 175 112 113 114 115 176 177 178 179 116 117 118 119 180 181 182 183 120 121 122 123 184 185 186 187 124 125 126 127 188 189 190 191
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 2 (global) and 1 (mg)
+DEAL::Global  dofs: 64 64 64 64
+DEAL::Level 0 dofs: 4 8 4 0
+DEAL::Level 1 dofs: 16 32 16 0
+DEAL::Level 2 dofs: 64 128 64 0
+DEAL::u0       8
+DEAL::u1       32
+DEAL::u2       128
+DEAL::u1       512
+DEAL::u0       2048
+DEAL:: 64 65 66 67 128 129 130 131 68 69 70 71 132 133 134 135 72 73 74 75 136 137 138 139 76 77 78 79 140 141 142 143 80 81 82 83 144 145 146 147 84 85 86 87 148 149 150 151 88 89 90 91 152 153 154 155 92 93 94 95 156 157 158 159 96 97 98 99 160 161 162 163 100 101 102 103 164 165 166 167 104 105 106 107 168 169 170 171 108 109 110 111 172 173 174 175 112 113 114 115 176 177 178 179 116 117 118 119 180 181 182 183 120 121 122 123 184 185 186 187 124 125 126 127 188 189 190 191
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 1 (mg)
+DEAL::Global  dofs: 64 64 64 64
+DEAL::Level 0 dofs: 4 8 4 0
+DEAL::Level 1 dofs: 16 32 16 0
+DEAL::Level 2 dofs: 64 128 64 0
+DEAL::u0       8
+DEAL::u1       32
+DEAL::u2       128
+DEAL::u1       512
+DEAL::u0       2048
+DEAL:: 64 65 66 67 128 129 130 131 68 69 70 71 132 133 134 135 72 73 74 75 136 137 138 139 76 77 78 79 140 141 142 143 80 81 82 83 144 145 146 147 84 85 86 87 148 149 150 151 88 89 90 91 152 153 154 155 92 93 94 95 156 157 158 159 96 97 98 99 160 161 162 163 100 101 102 103 164 165 166 167 104 105 106 107 168 169 170 171 108 109 110 111 172 173 174 175 112 113 114 115 176 177 178 179 116 117 118 119 180 181 182 183 120 121 122 123 184 185 186 187 124 125 126 127 188 189 190 191
+DEAL::FESystem<2>[FE_DGQ<2>(1)^4] select 0 (global) and 0 (mg)
+DEAL::Global  dofs: 64 64 64 64
+DEAL::Level 0 dofs: 16 0 0 0
+DEAL::Level 1 dofs: 64 0 0 0
+DEAL::Level 2 dofs: 256 0 0 0
+DEAL::u0       16
+DEAL::u1       64
+DEAL::u2       256
+DEAL::u1       1024
+DEAL::u0       4096
+DEAL:: 0 1 2 3 64 65 66 67 128 129 130 131 192 193 194 195 4 5 6 7 68 69 70 71 132 133 134 135 196 197 198 199 8 9 10 11 72 73 74 75 136 137 138 139 200 201 202 203 12 13 14 15 76 77 78 79 140 141 142 143 204 205 206 207 16 17 18 19 80 81 82 83 144 145 146 147 208 209 210 211 20 21 22 23 84 85 86 87 148 149 150 151 212 213 214 215 24 25 26 27 88 89 90 91 152 153 154 155 216 217 218 219 28 29 30 31 92 93 94 95 156 157 158 159 220 221 222 223 32 33 34 35 96 97 98 99 160 161 162 163 224 225 226 227 36 37 38 39 100 101 102 103 164 165 166 167 228 229 230 231 40 41 42 43 104 105 106 107 168 169 170 171 232 233 234 235 44 45 46 47 108 109 110 111 172 173 174 175 236 237 238 239 48 49 50 51 112 113 114 115 176 177 178 179 240 241 242 243 52 53 54 55 116 117 118 119 180 181 182 183 244 245 246 247 56 57 58 59 120 121 122 123 184 185 186 187 248 249 250 251 60 61 62 63 124 125 126 127 188 189 190 191 252 253 254 255

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.