@@ -118,13 +118,23 @@ SPECTRE_TEST_CASE("Unit.Domain.Structure.CreateInitialMesh", "[Domain][Unit]") {
118118 {Spectral::Basis::Legendre, Spectral::Basis::Chebyshev}) {
119119 for (const auto & i1_quadrature :
120120 {Spectral::Quadrature::GaussLobatto, Spectral::Quadrature::Gauss}) {
121- CHECK (create_initial_mesh ({{{3 , 4 }}}, disk, element_id_2d, i1_basis,
122- i1_quadrature) ==
121+ CHECK (create_initial_mesh (
122+ {{{3 , 4 }}}, disk,
123+ ElementId<2 >{0 , {{SegmentId{1 , 0 }, SegmentId{0 , 0 }}}},
124+ i1_basis, i1_quadrature) ==
123125 Mesh<2 >{{{3 , 4 }},
124126 std::array{Spectral::Basis::ZernikeB2,
125127 Spectral::Basis::ZernikeB2},
126128 std::array{Spectral::Quadrature::GaussRadauUpper,
127129 Spectral::Quadrature::Equiangular}});
130+ CHECK (create_initial_mesh (
131+ {{{3 , 4 }}}, disk,
132+ ElementId<2 >{0 , {{SegmentId{1 , 1 }, SegmentId{0 , 0 }}}},
133+ i1_basis, i1_quadrature) ==
134+ Mesh<2 >{{{3 , 4 }},
135+ std::array{i1_basis, Spectral::Basis::Fourier},
136+ std::array{i1_quadrature,
137+ Spectral::Quadrature::Equiangular}});
128138 }
129139 }
130140 }
@@ -154,19 +164,32 @@ SPECTRE_TEST_CASE("Unit.Domain.Structure.CreateInitialMesh", "[Domain][Unit]") {
154164 {Spectral::Basis::Legendre, Spectral::Basis::Chebyshev}) {
155165 for (const auto & i1_quadrature :
156166 {Spectral::Quadrature::GaussLobatto, Spectral::Quadrature::Gauss}) {
157- CHECK (create_initial_mesh ({{{3 , 2 , 4 }}}, full_cylinder, element_id_3d,
158- i1_basis, i1_quadrature) ==
167+ CHECK (create_initial_mesh (
168+ {{{3 , 2 , 4 }}}, full_cylinder,
169+ ElementId<3 >{
170+ 0 , {{SegmentId{1 , 0 }, SegmentId{0 , 0 }, SegmentId{0 , 0 }}}},
171+ i1_basis, i1_quadrature) ==
159172 Mesh<3 >{{{3 , 2 , 4 }},
160173 std::array{Spectral::Basis::ZernikeB2,
161174 Spectral::Basis::ZernikeB2, i1_basis},
162175 std::array{Spectral::Quadrature::GaussRadauUpper,
163176 Spectral::Quadrature::Equiangular,
164177 i1_quadrature}});
178+ CHECK (
179+ create_initial_mesh (
180+ {{{3 , 2 , 4 }}}, full_cylinder,
181+ ElementId<3 >{
182+ 0 , {{SegmentId{1 , 1 }, SegmentId{0 , 0 }, SegmentId{0 , 0 }}}},
183+ i1_basis, i1_quadrature) ==
184+ Mesh<3 >{{{3 , 2 , 4 }},
185+ std::array{i1_basis, Spectral::Basis::Fourier, i1_basis},
186+ std::array{i1_quadrature, Spectral::Quadrature::Equiangular,
187+ i1_quadrature}});
165188 }
166189 }
167190 }
168191 {
169- INFO (" spheriical_shell " );
192+ INFO (" spherical_shell " );
170193 const Element<3 > spherical_shell (element_id_3d, {},
171194 domain::topologies::spherical_shell);
172195 for (const auto & i1_basis :
@@ -191,15 +214,28 @@ SPECTRE_TEST_CASE("Unit.Domain.Structure.CreateInitialMesh", "[Domain][Unit]") {
191214 {Spectral::Basis::Legendre, Spectral::Basis::Chebyshev}) {
192215 for (const auto & i1_quadrature :
193216 {Spectral::Quadrature::GaussLobatto, Spectral::Quadrature::Gauss}) {
194- CHECK (create_initial_mesh ({{{3 , 2 , 4 }}}, full_sphere, element_id_3d,
195- i1_basis, i1_quadrature) ==
217+ CHECK (create_initial_mesh (
218+ {{{3 , 2 , 4 }}}, full_sphere,
219+ ElementId<3 >{
220+ 0 , {{SegmentId{1 , 0 }, SegmentId{0 , 0 }, SegmentId{0 , 0 }}}},
221+ i1_basis, i1_quadrature) ==
196222 Mesh<3 >{{{3 , 2 , 4 }},
197223 std::array{Spectral::Basis::ZernikeB3,
198224 Spectral::Basis::ZernikeB3,
199225 Spectral::Basis::ZernikeB3},
200226 std::array{Spectral::Quadrature::GaussRadauUpper,
201227 Spectral::Quadrature::Gauss,
202228 Spectral::Quadrature::Equiangular}});
229+ CHECK (create_initial_mesh (
230+ {{{3 , 2 , 4 }}}, full_sphere,
231+ ElementId<3 >{
232+ 0 , {{SegmentId{1 , 1 }, SegmentId{0 , 0 }, SegmentId{0 , 0 }}}},
233+ i1_basis, i1_quadrature) ==
234+ Mesh<3 >{{{3 , 2 , 4 }},
235+ std::array{i1_basis, Spectral::Basis::SphericalHarmonic,
236+ Spectral::Basis::SphericalHarmonic},
237+ std::array{i1_quadrature, Spectral::Quadrature::Gauss,
238+ Spectral::Quadrature::Equiangular}});
203239 }
204240 }
205241 }
@@ -239,14 +275,113 @@ SPECTRE_TEST_CASE("Unit.Domain.Structure.CreateInitialMesh", "[Domain][Unit]") {
239275 }
240276 }
241277 }
278+ {
279+ const ElementId<3 > element_id_on_axis{
280+ 0 , std::array{SegmentId{1 , 0 }, SegmentId{0 , 0 }, SegmentId{0 , 0 }}};
281+ const ElementId<3 > element_id_off_axis{
282+ 0 , std::array{SegmentId{1 , 1 }, SegmentId{0 , 0 }, SegmentId{0 , 0 }}};
283+ {
284+ INFO (" cartoon_sphere_inner" );
285+ const Element<3 > cartoon_sphere_on_axis (
286+ element_id_on_axis, {}, domain::topologies::cartoon_sphere_inner);
287+ const Element<3 > cartoon_sphere_off_axis (
288+ element_id_off_axis, {}, domain::topologies::cartoon_sphere_inner);
289+ for (const auto & i1_basis :
290+ {Spectral::Basis::Legendre, Spectral::Basis::Chebyshev}) {
291+ for (const auto & i1_quadrature : {Spectral::Quadrature::GaussLobatto,
292+ Spectral::Quadrature::Gauss}) {
293+ CHECK (create_initial_mesh ({{{3 , 1 , 1 }}}, cartoon_sphere_on_axis,
294+ i1_basis, i1_quadrature) ==
295+ Mesh<3 >{{{3 , 1 , 1 }},
296+ std::array{Spectral::Basis::ZernikeB1,
297+ Spectral::Basis::Cartoon,
298+ Spectral::Basis::Cartoon},
299+ std::array{Spectral::Quadrature::GaussRadauUpper,
300+ Spectral::Quadrature::SphericalSymmetry,
301+ Spectral::Quadrature::SphericalSymmetry}});
302+ CHECK (create_initial_mesh ({{{3 , 1 , 1 }}}, cartoon_sphere_off_axis,
303+ i1_basis, i1_quadrature) ==
304+ Mesh<3 >{{{3 , 1 , 1 }},
305+ std::array{i1_basis, Spectral::Basis::Cartoon,
306+ Spectral::Basis::Cartoon},
307+ std::array{i1_quadrature,
308+ Spectral::Quadrature::SphericalSymmetry,
309+ Spectral::Quadrature::SphericalSymmetry}});
310+ }
311+ }
312+ }
313+ {
314+ INFO (" cartoon_cylinder_inner" );
315+ const Block<3 > cartoon_cylinder_block (
316+ nullptr , 0 , {}, " " , domain::topologies::cartoon_cylinder_inner);
317+ for (const auto & i1_basis :
318+ {Spectral::Basis::Legendre, Spectral::Basis::Chebyshev}) {
319+ for (const auto & i1_quadrature : {Spectral::Quadrature::GaussLobatto,
320+ Spectral::Quadrature::Gauss}) {
321+ CHECK (create_initial_mesh ({{{3 , 2 , 1 }}}, cartoon_cylinder_block,
322+ element_id_on_axis, i1_basis,
323+ i1_quadrature) ==
324+ Mesh<3 >{{{3 , 2 , 1 }},
325+ std::array{Spectral::Basis::ZernikeB1, i1_basis,
326+ Spectral::Basis::Cartoon},
327+ std::array{Spectral::Quadrature::GaussRadauUpper,
328+ i1_quadrature,
329+ Spectral::Quadrature::AxialSymmetry}});
330+ CHECK (
331+ create_initial_mesh ({{{3 , 2 , 1 }}}, cartoon_cylinder_block,
332+ element_id_off_axis, i1_basis,
333+ i1_quadrature) ==
334+ Mesh<3 >{{{3 , 2 , 1 }},
335+ std::array{i1_basis, i1_basis, Spectral::Basis::Cartoon},
336+ std::array{i1_quadrature, i1_quadrature,
337+ Spectral::Quadrature::AxialSymmetry}});
338+ }
339+ }
340+ }
341+ }
342+
242343#ifdef SPECTRE_DEBUG
243344 CHECK_THROWS_WITH (
244345 create_initial_mesh (
245346 {{{3 , 4 }}}, Block<2 >{nullptr , 0 , {}, " " , domain::topologies::disk},
246- ElementId<2 >{0 , {{SegmentId{1 , 0 }, SegmentId{0 , 0 }}}},
347+ ElementId<2 >{0 , {{SegmentId{1 , 0 }, SegmentId{1 , 0 }}}},
348+ Spectral::Basis::Legendre, Spectral::Quadrature::GaussLobatto),
349+ Catch::Matchers::ContainsSubstring (
350+ " Angular dimensions cannot be angularly refined" ));
351+ CHECK_THROWS_WITH (
352+ create_initial_mesh (
353+ {{{3 , 4 }}}, Block<2 >{nullptr , 0 , {}, " " , domain::topologies::disk},
354+ ElementId<2 >{0 , {{SegmentId{1 , 0 }, SegmentId{1 , 1 }}}},
355+ Spectral::Basis::Legendre, Spectral::Quadrature::GaussLobatto),
356+ Catch::Matchers::ContainsSubstring (
357+ " Angular dimensions cannot be angularly refined" ));
358+ CHECK_THROWS_WITH (
359+ create_initial_mesh (
360+ {{{3 , 4 , 5 }}},
361+ Block<3 >{nullptr , 0 , {}, " " , domain::topologies::full_cylinder},
362+ ElementId<3 >{0 ,
363+ {{SegmentId{0 , 0 }, SegmentId{1 , 1 }, SegmentId{0 , 0 }}}},
364+ Spectral::Basis::Legendre, Spectral::Quadrature::GaussLobatto),
365+ Catch::Matchers::ContainsSubstring (
366+ " Angular dimensions cannot be angularly refined" ));
367+ CHECK_THROWS_WITH (
368+ create_initial_mesh (
369+ {{{3 , 4 , 5 }}},
370+ Block<3 >{nullptr , 0 , {}, " " , domain::topologies::full_sphere},
371+ ElementId<3 >{0 ,
372+ {{SegmentId{1 , 0 }, SegmentId{1 , 1 }, SegmentId{0 , 0 }}}},
373+ Spectral::Basis::Legendre, Spectral::Quadrature::GaussLobatto),
374+ Catch::Matchers::ContainsSubstring (
375+ " Angular dimensions cannot be angularly refined" ));
376+ CHECK_THROWS_WITH (
377+ create_initial_mesh (
378+ {{{3 , 4 , 5 }}},
379+ Block<3 >{nullptr , 0 , {}, " " , domain::topologies::spherical_shell},
380+ ElementId<3 >{0 ,
381+ {{SegmentId{1 , 0 }, SegmentId{0 , 0 }, SegmentId{1 , 1 }}}},
247382 Spectral::Basis::Legendre, Spectral::Quadrature::GaussLobatto),
248383 Catch::Matchers::ContainsSubstring (
249- " Splitting Topology::B2Radial is not yet supported " ));
384+ " Angular dimensions cannot be angularly refined " ));
250385#endif // SPECTRE_DEBUG
251386}
252387} // namespace domain
0 commit comments