From: Guido Kanschat Date: Fri, 18 Nov 2005 21:01:39 +0000 (+0000) Subject: tests restructured and new tests added X-Git-Tag: v8.0.0~12861 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c6f7ba37214dc4a5b8d8aa3c4b0840c8b2f3af33;p=dealii.git tests restructured and new tests added git-svn-id: https://svn.dealii.org/trunk@11774 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/tests/multigrid/Makefile b/tests/multigrid/Makefile index bde74913c5..8f69a242dc 100644 --- a/tests/multigrid/Makefile +++ b/tests/multigrid/Makefile @@ -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 diff --git a/tests/multigrid/cycles.cc b/tests/multigrid/cycles.cc index fcac6040cd..76c0a17cb6 100644 --- a/tests/multigrid/cycles.cc +++ b/tests/multigrid/cycles.cc @@ -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 diff --git a/tests/multigrid/transfer.cc b/tests/multigrid/transfer.cc index d9368a9694..670ccf38ec 100644 --- a/tests/multigrid/transfer.cc +++ b/tests/multigrid/transfer.cc @@ -54,172 +54,42 @@ void check_simple(const FiniteElement& fe) Vector u1(mgdof.n_dofs(1)); Vector 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 -void check_select(const FiniteElement& fe, - unsigned int selected, - unsigned int mg_selected, - std::vector target_component, - std::vector mg_target_component) -{ - deallog << fe.get_name() - << " select " << selected - << " (global) and " << mg_selected - << " (mg)" << std::endl; - - Triangulation tr; - GridGenerator::hyper_cube(tr); - tr.refine_global(2); - - MGDoFHandler mgdof(tr); - DoFHandler& dof=mgdof; - mgdof.distribute_dofs(fe); - DoFRenumbering::component_wise(mgdof, target_component); - vector ndofs(fe.n_components()); - DoFTools::count_dofs_per_component(mgdof, ndofs, true, target_component); - - for (unsigned int l=0;l > 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 transfer; - transfer.build_matrices(dof, mgdof, selected, mg_selected, - target_component, mg_target_component); - - Vector u2(mg_ndofs[2][mg_selected]); - Vector u1(mg_ndofs[1][mg_selected]); - Vector u0(mg_ndofs[0][mg_selected]); - - u0 = 1; + // Now the same for a non-constant + // vector + for (unsigned int i=0;i u; - u.reinit (ndofs); - for (unsigned int i=0;i > 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 -void check_block(const FiniteElement& fe, - const vector& selected, - const vector& mg_selected, - std::vector target_component, - std::vector mg_target_component) -{ - deallog << fe.get_name() << std::endl; - - Triangulation tr; - GridGenerator::hyper_cube(tr); - tr.refine_global(2); - - MGDoFHandler mgdof(tr); - mgdof.distribute_dofs(fe); - DoFRenumbering::component_wise(mgdof, target_component); - for (unsigned int l=0;l > mg_ndofs(mgdof.get_tria().n_levels()); - MGTools::count_dofs_per_component(mgdof, mg_ndofs, mg_target_component); - for (unsigned int l=0;l transfer; - transfer.build_matrices(mgdof, selected, mg_selected, - target_component, mg_target_component); - - BlockVector u2(mg_ndofs[2]); - BlockVector u1(mg_ndofs[1]); - BlockVector 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 ndofs (target_component.size()); - DoFTools::count_dofs_per_component(mgdof, ndofs, target_component); - BlockVector u; - u.reinit (ndofs); - for (unsigned int i=0;i > 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(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 v1(4); - std::vector v2(4); - std::vector 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 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)); } diff --git a/tests/multigrid/transfer/cmp/generic b/tests/multigrid/transfer/cmp/generic index 423a35df1f..3c00cdf79c 100644 --- a/tests/multigrid/transfer/cmp/generic +++ b/tests/multigrid/transfer/cmp/generic @@ -1,87 +1,111 @@ +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 index 0000000000..070aeee1fb --- /dev/null +++ b/tests/multigrid/transfer_block.cc @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +using namespace std; + +template +void check_block(const FiniteElement& fe, + const vector& /*selected*/, + const vector& /*mg_selected*/, + const vector& factors, + std::vector target_component, + std::vector mg_target_component) +{ + deallog << fe.get_name() << std::endl; + + Triangulation tr; + GridGenerator::hyper_cube(tr); + tr.refine_global(2); + + MGDoFHandler mgdof(tr); + DoFHandler& dof=mgdof; + mgdof.distribute_dofs(fe); + DoFRenumbering::component_wise(mgdof, target_component); + vector ndofs(fe.n_components()); + DoFTools::count_dofs_per_component(mgdof, ndofs, true, target_component); + + for (unsigned int l=0;l > 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 > mem; + MGTransferBlock transfer; + transfer.build_matrices(dof, mgdof, target_component, mg_target_component); + if (factors.size()>0) + transfer.initialize(factors, mem); + + BlockVector u2(mg_ndofs[2]); + BlockVector u1(mg_ndofs[1]); + BlockVector u0(mg_ndofs[0]); + + u0 = 1; + transfer.prolongate(1,u1,u0); + transfer.prolongate(2,u2,u1); + deallog << "u0"; + for (unsigned int b=0;b u; + u.reinit (ndofs); + for (unsigned int i=0;i > v; + v.resize(2,2); + v[2].reinit(mg_ndofs[2]); + + transfer.copy_to_mg(mgdof, v, u); + for (unsigned int i=0; i v1(4); + std::vector v2(4); + std::vector 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 factors; + + FESystem<2> fe1(FE_DGQ<2>(1), 4); + + vector 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 index 0000000000..328d4db60b --- /dev/null +++ b/tests/multigrid/transfer_block/cmp/generic @@ -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 index 0000000000..18b6726758 --- /dev/null +++ b/tests/multigrid/transfer_select.cc @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +using namespace std; + +template +void check_select(const FiniteElement& fe, + unsigned int selected, + unsigned int mg_selected, + std::vector target_component, + std::vector mg_target_component) +{ + deallog << fe.get_name() + << " select " << selected + << " (global) and " << mg_selected + << " (mg)" << std::endl; + + Triangulation tr; + GridGenerator::hyper_cube(tr); + tr.refine_global(2); + + MGDoFHandler mgdof(tr); + DoFHandler& dof=mgdof; + mgdof.distribute_dofs(fe); + DoFRenumbering::component_wise(mgdof, target_component); + vector ndofs(fe.n_components()); + DoFTools::count_dofs_per_component(mgdof, ndofs, true, target_component); + + for (unsigned int l=0;l > 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 transfer; + transfer.build_matrices(dof, mgdof, selected, mg_selected, + target_component, mg_target_component); + + Vector u2(mg_ndofs[2][mg_selected]); + Vector u1(mg_ndofs[1][mg_selected]); + Vector 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 u; + u.reinit (ndofs); + for (unsigned int i=0;i > 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 v1(4); + std::vector v2(4); + std::vector 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 index 0000000000..14e41d11fa --- /dev/null +++ b/tests/multigrid/transfer_select/cmp/generic @@ -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