Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
DLR-AMR
GitHub Repository: DLR-AMR/t8code
Path: blob/main/src/t8_cmesh/t8_cmesh_examples.h
900 views
1
/*
2
This file is part of t8code.
3
t8code is a C library to manage a collection (a forest) of multiple
4
connected adaptive space-trees of general element classes in parallel.
5
6
Copyright (C) 2015 the developers
7
8
t8code is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 2 of the License, or
11
(at your option) any later version.
12
13
t8code is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
GNU General Public License for more details.
17
18
You should have received a copy of the GNU General Public License
19
along with t8code; if not, write to the Free Software Foundation, Inc.,
20
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21
*/
22
23
/**
24
* \file t8_cmesh_examples.h
25
* We provide example coarse meshes in this file
26
*/
27
28
#ifndef T8_CMESH_EXAMPLES
29
#define T8_CMESH_EXAMPLES
30
#include <t8_cmesh/t8_cmesh.h>
31
#include <p4est_connectivity.h>
32
#include <p8est_connectivity.h>
33
34
T8_EXTERN_C_BEGIN ();
35
36
/** Constructs a cmesh from a given p4est_connectivity structure.
37
* \param[in] conn The p4est connectivity.
38
* \param[in] comm mpi communicator to be used with the new cmesh.
39
* \param[in] do_partition Flag whether the cmesh should be partitioned or not.
40
* \return A t8_cmesh structure that holds the same connectivity information
41
* as \a conn.
42
* \note This function requires that p4est is initialized. Make sure to call
43
* p4est_init before using this routine. If this is not the case, a
44
* warning is issued and p4est_init is called from within this function.
45
*/
46
t8_cmesh_t
47
t8_cmesh_new_from_p4est (p4est_connectivity_t *conn, sc_MPI_Comm comm, int do_partition);
48
49
/** Constructs a cmesh from a given p8est_connectivity structure.
50
* \param[in] conn The p8est connectivity.
51
* \param[in] comm mpi communicator to be used with the new cmesh.
52
* \param[in] do_partition Flag whether the cmesh should be partitioned or not.
53
* \return A t8_cmesh structure that holds the same connectivity information
54
* as \a conn.
55
* \note This function requires that p4est is initialized. Make sure to call
56
* p4est_init before using this routine. If this is not the case, a
57
* warning is issued and p4est_init is called from within this function.
58
*/
59
t8_cmesh_t
60
t8_cmesh_new_from_p8est (p8est_connectivity_t *conn, sc_MPI_Comm comm, int do_partition);
61
62
/** Construct a cmesh that has no trees. We do not know a special use case,
63
* this function is merely for debugging and to show the possibility.
64
* \param [in] comm mpi communicator to be used with the new cmesh.
65
* \param [in] do_partition Flag whether the cmesh should be partitioned or not.
66
* \param [in] dimension An empty cmesh requires a dimension nevertheless. 0 <= tree dimension <= 3.
67
* \return A committed t8_cmesh structure that has no trees.
68
*/
69
t8_cmesh_t
70
t8_cmesh_new_empty (sc_MPI_Comm comm, const int do_partition, const int dimension);
71
72
/** Constructs a cmesh that consists only of one tree of a given element class.
73
* \param [in] eclass The element class.
74
* \param [in] comm mpi communicator to be used with the new cmesh.
75
* \return A committed t8_cmesh structure with one tree of class \a eclass.
76
*/
77
t8_cmesh_t
78
t8_cmesh_new_from_class (t8_eclass_t eclass, sc_MPI_Comm comm);
79
80
/** Construct a hypercube forest from one primitive tree class.
81
* \param [in] eclass This element class determines the dimension and
82
* the number of trees needed to construct a cube.
83
* \param [in] comm The mpi communicator to be used.
84
* \param [in] do_bcast If this flag is nonzero the cmesh is only constructed
85
* on processor 0 and then broadcasted to the other
86
* processors in \a comm.
87
* TODO: this parameter will be moved to internal.
88
* \param [in] do_partition Create a partitioned cmesh.
89
* \param [in] periodic If true, the coarse mesh will be periodic in each direction.
90
* Not possible with \a eclass pyramid.
91
*/
92
t8_cmesh_t
93
t8_cmesh_new_hypercube (t8_eclass_t eclass, sc_MPI_Comm comm, int do_bcast, int do_partition, int periodic);
94
95
/** Construct a hypercube forest from one primitive tree class.
96
* \param [in] eclass This element class determines the dimension of the cube.
97
* \param [in] comm The mpi communicator to be used.
98
* \param [in] boundary The vertices, that define the hypercube boundary.
99
* \param [in] polygons_x The number of polygons along the x-axis.
100
* \param [in] polygons_y The number of polygons along the y-axis.
101
* Only required if \a eclass is 2D or 3D.
102
* \param [in] polygons_z The number of polygons along the z-axis.
103
* Only required if \a eclass is 3D.
104
* \param [in] use_axis_aligned Use the axis-aligned geometry. If used, only two points per tree are stored.
105
* \return A committed t8_cmesh structure with
106
* \a polygons_x * \a polygons_z * \a polygons_y many
107
* sub-hypercubes of class \a eclass.
108
*
109
* \note \a boundary must point to an array with 3*8 (3D), 3*4 (2D), 3*2 (1D), or 3 (0D) entries.
110
* \note Every sub-hypercube contains different number of trees depending on \a eclass.
111
* If \a eclass == T8_ECLASS_VERTEX, _LINE, _QUAD or _HEX every sub-hypercube contains
112
* one tree, if _TRIANGLE or _PRISM two trees and if _TET six trees.
113
* This is done in the same way as in \see t8_cmesh_new_hypercube.
114
* Example: let eclass = T8_ECLASS_TRIANGLE
115
* boundary coordinates = a(0,0,0), b(3,0,0), c(0,2,0), d(3,2,0)
116
* polygons_x, _y, _z = 3, 1, 0
117
*
118
* c--f--h--d The hypercube defined by the boundary coordinates
119
* | | | | is first split into 3 sub-hypercubes. The sub-hypercubes
120
* | | | | are ordered from left to right (and top to bottom).
121
* a--e--g--b Coordinates e,f,g,h are (1,0,0),(1,2,0),(2,0,0),(2,2,0).
122
*
123
* c--f--h--d Each sub-hypercube is the split into 2 triangle roots.
124
* |1/|3/|5/| The ordering is the same as in \see t8_cmesh_new_hypercube.
125
* |/0|/2|/4| Thus, we get 6 trees, which are ordered as shown in the picture.
126
* a--e--g--b
127
*
128
* See `example/cmesh/t8_cmesh_hypercube_pad.cxx` for a working example.
129
*/
130
t8_cmesh_t
131
t8_cmesh_new_hypercube_pad (const t8_eclass_t eclass, sc_MPI_Comm comm, const double *boundary, t8_locidx_t polygons_x,
132
t8_locidx_t polygons_y, t8_locidx_t polygons_z, const int use_axis_aligned);
133
134
/** Construct a hypercube forest from one primitive tree class.
135
* \param [in] eclass This element class determines the dimension of the cube.
136
* \param [in] comm The mpi communicator to be used.
137
* \param [in] boundary The vertices, that define the hypercube boundary.
138
* \param [in] polygons_x The number of polygons along the x-axis.
139
* \param [in] polygons_y The number of polygons along the y-axis.
140
* Only required if \a eclass is 2D or 3D.
141
* \param [in] polygons_z The number of polygons along the z-axis.
142
* Only required if \a eclass is 3D.
143
* \param [in] periodic_x Connect opposite sides of the hypercube in x-direction.
144
* \param [in] periodic_y Connect opposite sides of the hypercube in y-direction.
145
* \param [in] periodic_z Connect opposite sides of the hypercube in z-direction.
146
* \param [in] use_axis_aligned Use the axis-aligned geometry. If used, only two points per tree are stored.
147
* \param [in] set_partition If true, partition the cmesh.
148
* \param [in] offset Offset of the local tree ids for a given partition.
149
* \return A committed t8_cmesh structure with
150
* \a polygons_x * \a polygons_z * \a polygons_y many
151
* sub-hypercubes of class \a eclass.
152
* \note \a boundary must point to an array with 3*8 (3D), 3*4 (2D), 3*2 (1D), or 3 (0D) entries.
153
* Every sub-hypercube contains different number of trees depending on \a eclass.
154
* \note If \a eclass == T8_ECLASS_VERTEX, _LINE, _QUAD or _HEX every sub-hypercube contains
155
* one tree, if _TRIANGLE or _PRISM two trees and if _TET six trees.
156
* This is done in the same way as in \see t8_cmesh_new_hypercube.
157
* Example: let eclass = T8_ECLASS_TRIANGLE
158
* boundary coordinates = a(0,0,0), b(3,0,0), c(0,2,0), d(3,2,0)
159
* polygons_x, _y, _z = 3, 1, 0
160
*
161
* c--f--h--d The hypercube defined by the boundary coordinates
162
* | | | | is first split into 3 sub-hypercubes. The sub-hypercubes
163
* | | | | are ordered from left to right (and top to bottom).
164
* a--e--g--b Coordinates e,f,g,h are (1,0,0),(1,2,0),(2,0,0),(2,2,0).
165
*
166
* c--f--h--d Each sub-hypercube is the split into 2 triangle roots.
167
* |1/|3/|5/| The ordering is the same as in \see t8_cmesh_new_hypercube.
168
* |/0|/2|/4| Thus, we get 6 trees, which are ordered as shown in the picture.
169
* a--e--g--b
170
*
171
*/
172
t8_cmesh_t
173
t8_cmesh_new_hypercube_pad_ext (const t8_eclass_t eclass, sc_MPI_Comm comm, const double *boundary,
174
t8_locidx_t polygons_x, t8_locidx_t polygons_y, t8_locidx_t polygons_z,
175
const int periodic_x, const int periodic_y, const int periodic_z,
176
const int use_axis_aligned, const int set_partition, t8_gloidx_t offset);
177
178
/** Hybercube with 6 Tets, 6 Prism, 4 Hex.
179
* \param [in] comm The mpi communicator to be used.
180
* \param [in] do_partition If non-zero create a partitioned cmesh.
181
* \param [in] periodic If non-zero create a periodic cmesh in each direction
182
* \return A committed cmesh consisting of 6 Tets, 6 prism and 4 hex.
183
* Together, they form a cube.
184
*/
185
t8_cmesh_t
186
t8_cmesh_new_hypercube_hybrid (sc_MPI_Comm comm, int do_partition, int periodic);
187
188
/** Construct a unit interval/square/cube coarse mesh that is periodic in each direction.
189
* Element class?
190
* Hypercube?
191
* TODO: redundant, remove.
192
* \param [in] comm The mpi communicator to use.
193
* \param [in] dim The dimension of the forest, 1, 2 or 3.
194
* \return A valid cmesh, as if _init and _commit had been called.
195
*/
196
t8_cmesh_t
197
t8_cmesh_new_periodic (sc_MPI_Comm comm, int dim);
198
199
/** Construct a unit square of two triangles that is periodic in x and y.
200
* \param [in] comm The mpi communicator to use.
201
* \return A valid cmesh, as if _init and _commit had been called.
202
*/
203
t8_cmesh_t
204
t8_cmesh_new_periodic_tri (sc_MPI_Comm comm);
205
206
/** Construct a unit square of two quads and four triangles that is periodic in x and y.
207
* \param [in] comm The mpi communicator to use.
208
* \return A valid cmesh, as if _init and _commit had been called.
209
*/
210
t8_cmesh_t
211
t8_cmesh_new_periodic_hybrid (sc_MPI_Comm comm);
212
213
/** Construct a unit interval coarse mesh that consists of 3 trees and is
214
* periodic.
215
* \param [in] comm The mpi communicator to use.
216
* \return A valid cmesh, as is _init and _commit had been called.
217
*/
218
t8_cmesh_t
219
t8_cmesh_new_periodic_line_more_trees (sc_MPI_Comm comm);
220
221
/** Construct a mesh consisting of a given number of same type trees.
222
* \param [in] eclass This element class determines the dimension and
223
* the type trees used.
224
* \param [in] num_trees The number of trees to use.
225
* \param [in] comm The MPI_Communicator used to commit the cmesh.
226
* \return A valid cmesh, as if _init and _commit had been called.
227
*/
228
t8_cmesh_t
229
t8_cmesh_new_bigmesh (t8_eclass_t eclass, int num_trees, sc_MPI_Comm comm);
230
231
/** Construct a forest of three connected askew lines
232
* \param [in] comm The mpi communicator to use.
233
* \return A valid cmesh, as if _init and _commit had been called.
234
*/
235
t8_cmesh_t
236
t8_cmesh_new_line_zigzag (sc_MPI_Comm comm);
237
238
/** Construct a forest of num_of_prisms connected prism, all with one edge in 0,
239
* except for num_of_prisms = 2, then the return is the hypercube mesh
240
* \param [in] comm The mpi communicator to use.
241
* \param [in] num_of_prisms The number of prisms to be used.
242
* \return A valid cmesh, as if _init and _commit had been called.
243
*/
244
t8_cmesh_t
245
t8_cmesh_new_prism_cake (sc_MPI_Comm comm, int num_of_prisms);
246
247
/** Construct a single deformed prism
248
* \param [in] comm The mpi communicator to use.
249
* \return A valid cmesh; as if _init and _commit had been called.*/
250
t8_cmesh_t
251
t8_cmesh_new_prism_deformed (sc_MPI_Comm comm);
252
253
/** Construct a single deformed pyramid
254
* \param [in] comm The mpi communicator to use.
255
* \return A valid cmesh; as if _init and _commit had been called.*/
256
t8_cmesh_t
257
t8_cmesh_new_pyramid_deformed (sc_MPI_Comm comm);
258
259
/** Construct a forest of six connected noncannoical oriented prisms
260
* \param [in] comm The mpi communicator to use.
261
* \return A valid cmesh, as if _init and _commit had been called.
262
*/
263
t8_cmesh_t
264
t8_cmesh_new_prism_cake_funny_oriented (sc_MPI_Comm comm);
265
266
/** Construct a forest of six connected noncannoical oriented prisms
267
* \param [in] comm The mpi communicator to use.
268
* \return A valid cmesh, as if _init and _commit had been called.
269
*/
270
t8_cmesh_t
271
t8_cmesh_new_prism_geometry (sc_MPI_Comm comm);
272
273
/** Create a cmesh of quads whose trees are given by a `num_x * num_y` brick connectivity.
274
* \param [in] num_x The number of trees in x-direction. Must be >= 0.
275
* \param [in] num_y The number of trees in y-direction. Must be >= 0.
276
* \param [in] x_periodic If nonzero, the local brick connectivity is periodic in x direction.
277
* \param [in] y_periodic If nonzero, the local brick connectivity is periodic in y direction.
278
* \param [in] comm The MPI communicator used to commit the cmesh.
279
* \return A committed and partitioned cmesh.
280
*/
281
t8_cmesh_t
282
t8_cmesh_new_brick_2d (t8_gloidx_t num_x, t8_gloidx_t num_y, int x_periodic, int y_periodic, sc_MPI_Comm comm);
283
284
/** Create a cmesh of hexs whose trees are given by a `num_x * num_y * num_z` brick connectivity.
285
* \param [in] num_x The number of trees in x-direction. Must be >= 0.
286
* \param [in] num_y The number of trees in y-direction. Must be >= 0.
287
* \param [in] num_z The number of trees in z-direction. Must be >= 0.
288
* \param [in] x_periodic If nonzero, the local brick connectivity is periodic in x direction.
289
* \param [in] y_periodic If nonzero, the local brick connectivity is periodic in y direction.
290
* \param [in] z_periodic If nonzero, the local brick connectivity is periodic in z direction.
291
* \param [in] comm The MPI communicator used to commit the cmesh.
292
* \return A committed and partitioned cmesh.
293
*/
294
t8_cmesh_t
295
t8_cmesh_new_brick_3d (t8_gloidx_t num_x, t8_gloidx_t num_y, t8_gloidx_t num_z, int x_periodic, int y_periodic,
296
int z_periodic, sc_MPI_Comm comm);
297
298
/** Create a partitioned cmesh of quads whose local trees are given by an
299
* num_x by num_y brick connectivity from p4est
300
* or a num_x by num_y by num_z brick connectivity from p8est.
301
* num_x and num_y and num_z can be different for different MPI ranks.
302
* \param [in] num_x The number of trees in x direction for this rank. Must be >= 0.
303
* \param [in] num_y The number of trees in y direction for this rank. Must be >= 0.
304
* \param [in] num_z The number of trees in z direction for this rank. Must be >= 0.
305
* If nonzero, the cmesh is 3 dimensional.
306
* \param [in] x_periodic If nonzero, the local brick connectivity is periodic in x direction.
307
* \param [in] y_periodic If nonzero, the local brick connectivity is periodic in y direction.
308
* \param [in] z_periodic If nonzero and \a num_z > 0, the local brick connectivity is periodic in z direction.
309
* \param [in] comm The MPI communicator used to commit the cmesh.
310
* \return A committed and partitioned cmesh. The process local trees
311
* form a \a num_x by \a num_y (by \a num_z) brick.
312
* It is possible for num_x or num_y to be set to zero. In this case the local part
313
* of the cmesh will be empty.
314
* If num_z is set to zero, the cmesh is 2 dimensional.
315
*/
316
t8_cmesh_t
317
t8_cmesh_new_disjoint_bricks (t8_gloidx_t num_x, t8_gloidx_t num_y, t8_gloidx_t num_z, int x_periodic, int y_periodic,
318
int z_periodic, sc_MPI_Comm comm);
319
320
/** Construct a tetrahedral cmesh that has all possible face to face
321
* connections and orientations.
322
* This cmesh is used for testing and debugging.
323
* \param [in] comm The MPI communicator used to commit the cmesh.
324
* \return A committed and replicated cmesh of 24 tetrahedron trees
325
* in which each (face -> face, orientation) face connection
326
* is set at least once.
327
* Note that most faces in this cmesh are boundary faces.
328
*/
329
t8_cmesh_t
330
t8_cmesh_new_tet_orientation_test (sc_MPI_Comm comm);
331
332
/** Construct a hybrid cmesh with 2 tets, 2 prism, 1 hex.
333
* This cmesh is used for testing and debugging.
334
* \param [in] comm The MPI communicator used to commit the cmesh.
335
* \return A committed and replicated hybrid cmesh of 5 trees.
336
*/
337
t8_cmesh_t
338
t8_cmesh_new_hybrid_gate (sc_MPI_Comm comm);
339
340
/** Construct a hybrid cmesh with 2 tets, 2 prism, 1 hex and all are deformed.
341
* This cmesh is used for testing and debugging.
342
* \param [in] comm The MPI communicator used to commit the cmesh.
343
* \return A committed and replicated hybrid cmesh of 5 trees.
344
*/
345
t8_cmesh_t
346
t8_cmesh_new_hybrid_gate_deformed (sc_MPI_Comm comm);
347
348
/** Construct a full hybrig cmesh, with 1 hex, 1 pyra, 1 prism and 1 tet
349
* This cmesh is used for testing and debugging.
350
* \param [in] comm The MPI communicator used to commit the cmesh.
351
* \return A committed and replicated hybrid cmesh of 4 trees.
352
*/
353
t8_cmesh_t
354
t8_cmesh_new_full_hybrid (sc_MPI_Comm comm);
355
356
/** Construct a mesh out of num_of_pyra many pyramids. They form a circle, face 0 is
357
* connected with face 1 of the next pyramid.
358
* \param [in] comm The MPI communicator used to commit the cmesh
359
* \param [in] num_of_pyra The number of pyramids to construct. Should be larger than 2
360
* \return A cmesh with num_of_pyra many pyramids
361
*/
362
t8_cmesh_t
363
t8_cmesh_new_pyramid_cake (sc_MPI_Comm comm, int num_of_pyra);
364
365
/** Construct a bigger mesh, consisting of many cubes made by pyramids
366
* \param [in] comm The MPI communicator used to commit the cmesh
367
* \param [in] num_cubes The number of cubes of pyramids
368
* \return A cmesh with \a num_cubes many hypercubes
369
* */
370
t8_cmesh_t
371
t8_cmesh_new_long_brick_pyramid (sc_MPI_Comm comm, int num_cubes);
372
373
/** Construct \a num_trees many cubes each of length 1 connected along the x-axis
374
* without any additional attributes than the tree-vertices, or with additional attributes.
375
* \param [in] num_trees The number of trees along the x-axis
376
* \param [in] set_attributes If 1, set tree_id and num_trees as additional attribute for each tree.
377
* \param [in] do_partition Partition the cmesh.
378
* \param [in] comm The MPI communicator used to commit the cmesh.
379
* \param [in] package_id The package id to use for the cmesh. Cannot be the t8 or sc package id.
380
* \return A cmesh with \a num_trees many hexahedrons.
381
*/
382
t8_cmesh_t
383
t8_cmesh_new_row_of_cubes (t8_locidx_t num_trees, const int set_attributes, const int do_partition, sc_MPI_Comm comm,
384
const int package_id);
385
386
/** Construct a quadrangulated disk of given radius.
387
* \param [in] radius Radius of the sphere.
388
* \param [in] comm The MPI communicator used to commit the cmesh
389
* \return A cmesh representing the spherical surface.
390
*/
391
t8_cmesh_t
392
t8_cmesh_new_quadrangulated_disk (const double radius, sc_MPI_Comm comm);
393
394
/** Construct a triangulated spherical surface of given radius: octahedron version.
395
* \param [in] radius Radius of the sphere.
396
* \param [in] comm The MPI communicator used to commit the cmesh
397
* \return A cmesh representing the spherical surface.
398
*/
399
t8_cmesh_t
400
t8_cmesh_new_triangulated_spherical_surface_octahedron (const double radius, sc_MPI_Comm comm);
401
402
/** Construct a triangulated spherical surface of given radius: icosahedron version.
403
* \param [in] radius Radius of the sphere.
404
* \param [in] comm The MPI communicator used to commit the cmesh
405
* \return A cmesh representing the spherical surface.
406
*/
407
t8_cmesh_t
408
t8_cmesh_new_triangulated_spherical_surface_icosahedron (const double radius, sc_MPI_Comm comm);
409
410
/** Construct a triangulated spherical surface of given radius: cube version.
411
* \param [in] radius Radius of the sphere.
412
* \param [in] comm The MPI communicator used to commit the cmesh
413
* \return A cmesh representing the spherical surface.
414
*/
415
t8_cmesh_t
416
t8_cmesh_new_triangulated_spherical_surface_cube (const double radius, sc_MPI_Comm comm);
417
418
/** Construct a quadrangulated spherical surface of given radius.
419
* \param [in] radius Radius of the sphere.
420
* \param [in] comm The MPI communicator used to commit the cmesh
421
* \return A cmesh representing the spherical surface.
422
*/
423
t8_cmesh_t
424
t8_cmesh_new_quadrangulated_spherical_surface (const double radius, sc_MPI_Comm comm);
425
426
/** Construct a spherical shell discretized by prisms of given inner radius and thickness: octahedron version.
427
* \param [in] inner_radius Radius of the inner side of the shell.
428
* \param [in] shell_thickness Thickness of the shell.
429
* \param [in] num_levels Refinement level per patch in longitudinal and latitudinal direction.
430
* \param [in] num_layers Number of layers of the shell.
431
* \param [in] comm The MPI communicator used to commit the cmesh
432
* \return A cmesh representing the spherical surface.
433
*/
434
t8_cmesh_t
435
t8_cmesh_new_prismed_spherical_shell_octahedron (const double inner_radius, const double shell_thickness,
436
const int num_levels, const int num_layers, sc_MPI_Comm comm);
437
438
/** Construct a spherical shell discretized by prisms of given inner radius and thickness: icosahedron version.
439
* \param [in] inner_radius Radius of the inner side of the shell.
440
* \param [in] shell_thickness Thickness of the shell.
441
* \param [in] num_levels Refinement level per patch in longitudinal and latitudinal direction.
442
* \param [in] num_layers Number of layers of the shell.
443
* \param [in] comm The MPI communicator used to commit the cmesh
444
* \return A cmesh representing the spherical surface.
445
*/
446
t8_cmesh_t
447
t8_cmesh_new_prismed_spherical_shell_icosahedron (const double inner_radius, const double shell_thickness,
448
const int num_levels, const int num_layers, sc_MPI_Comm comm);
449
450
/** Construct a cubed spherical shell of given inner radius and thickness.
451
* \param [in] inner_radius Radius of the inner side of the shell.
452
* \param [in] shell_thickness Thickness of the shell.
453
* \param [in] num_trees Number of trees per patch in longitudinal and latitudinal direction.
454
* \param [in] num_layers Number of layers of the shell.
455
* \param [in] comm The MPI communicator used to commit the cmesh
456
* \return A cmesh representing the spherical surface.
457
*/
458
t8_cmesh_t
459
t8_cmesh_new_cubed_spherical_shell (const double inner_radius, const double shell_thickness, const int num_trees,
460
const int num_layers, sc_MPI_Comm comm);
461
462
/** Construct a cubed sphere of given radius.
463
* \param [in] radius Radius of the inner side of the shell.
464
* \param [in] comm The MPI communicator used to commit the cmesh
465
* \return A cmesh representing the spherical surface.
466
*/
467
t8_cmesh_t
468
t8_cmesh_new_cubed_sphere (const double radius, sc_MPI_Comm comm);
469
470
T8_EXTERN_C_END ();
471
472
#endif /* !T8_CMESH_EXAMPLES */
473
474