62 double dx=l_x/double(n_x);
63 double dy=l_y/double(n_y);
64 double dz=l_z/double(n_z);
68 (n_x+1)*(n_y+1)*(n_z+1)+
76 unsigned nelem=24*n_x*n_y*n_z;
86 for (
unsigned k=0;k<n_z+1;k++)
88 for (
unsigned j=0;j<n_y+1;j++)
90 for (
unsigned i=0;
i<n_x+1;
i++)
93 if (((
i<n_x+1)&&(j<n_y+1)&&(k<n_z+1)) &&
94 ((
i==0) || (
i==n_x) || (j==0) || (j==n_y) || (k==0) ||
101 node_pt=
new Node(3,1,0);
107 node_pt->
x(0)=x_0+double(
i)*dx;
108 node_pt->
x(1)=y_0+double(j)*dy;
109 node_pt->
x(2)=z_0+double(k)*dz;
112 if ((
i<n_x+1)&&(j<n_y+1)&&(k<n_z+1))
160 for (
unsigned k=0;k<n_z+1;k++)
162 for (
unsigned j=0;j<n_y+1;j++)
164 for (
unsigned i=0;
i<n_x+1;
i++)
170 if (((
i<n_x)&&(k<n_z)) &&
171 ((j==0) || (j==n_y)))
177 node_pt=
new Node(3,1,0);
183 node_pt->
x(0)=x_0+0.5*dx+double(
i)*dx;
184 node_pt->
x(1)=y_0+double(j)*dy;
185 node_pt->
x(2)=z_0+0.5*dz+double(k)*dz;
188 if ((
i<n_x)&&(k<n_z))
208 if (((j<n_y)&&(k<n_z)) &&
209 ((
i==0) || (
i==n_x)))
215 node_pt=
new Node(3,1,0);
220 node_pt->
x(0)=x_0+double(
i)*dx;
221 node_pt->
x(1)=y_0+0.5*dy+double(j)*dy;
222 node_pt->
x(2)=z_0+0.5*dz+double(k)*dz;
226 if ((j<n_y)&&(k<n_z))
245 if (((
i<n_x)&&(j<n_y)) &&
246 ((k==0) || (k==n_z)))
252 node_pt=
new Node(3,1,0);
257 node_pt->
x(0)=x_0+0.5*dx+double(
i)*dx;
258 node_pt->
x(1)=y_0+0.5*dy+double(j)*dy;
259 node_pt->
x(2)=z_0+double(k)*dz;
263 if ((
i<n_x)&&(j<n_y))
286 for (
unsigned k=0;k<n_z;k++)
288 for (
unsigned j=0;j<n_y;j++)
290 for (
unsigned i=0;
i<n_x;
i++)
292 node_pt=
new Node(3,1,0);
295 node_pt->
x(0)=x_0+0.5*dx+double(
i)*dx;
296 node_pt->
x(1)=y_0+0.5*dy+double(j)*dy;
297 node_pt->
x(2)=z_0+0.5*dz+double(k)*dz;
305 for (
unsigned k=0;k<n_z;k++)
307 for (
unsigned j=0;j<n_y;j++)
309 for (
unsigned i=0;
i<n_x;
i++)
320 el_pt->node_pt(0)=vertex_node_pt(
i,j,k);
323 el_pt->node_pt(1)=front_face_node_pt(
i,j,k);
326 el_pt->node_pt(2)=vertex_node_pt(
i,j,k+1);
329 el_pt->node_pt(3)=central_node_pt(
i,j,k);
339 el_pt->node_pt(0)=vertex_node_pt(
i,j,k);
342 el_pt->node_pt(1)=vertex_node_pt(
i+1,j,k);
345 el_pt->node_pt(2)=front_face_node_pt(
i,j,k);
348 el_pt->node_pt(3)=central_node_pt(
i,j,k);
358 el_pt->node_pt(0)=vertex_node_pt(
i+1,j,k);
361 el_pt->node_pt(1)=vertex_node_pt(
i+1,j,k+1);
364 el_pt->node_pt(2)=front_face_node_pt(
i,j,k);
367 el_pt->node_pt(3)=central_node_pt(
i,j,k);
377 el_pt->node_pt(0)=vertex_node_pt(
i+1,j,k+1);
380 el_pt->node_pt(1)=vertex_node_pt(
i,j,k+1);
383 el_pt->node_pt(2)=front_face_node_pt(
i,j,k);
386 el_pt->node_pt(3)=central_node_pt(
i,j,k);
402 el_pt->node_pt(0)=vertex_node_pt(
i+1,j,k);
405 el_pt->node_pt(1)=left_face_node_pt(
i+1,j,k);
408 el_pt->node_pt(2)=vertex_node_pt(
i+1,j,k+1);
411 el_pt->node_pt(3)=central_node_pt(
i,j,k);
421 el_pt->node_pt(0)=vertex_node_pt(
i+1,j,k);
424 el_pt->node_pt(1)=vertex_node_pt(
i+1,j+1,k);
427 el_pt->node_pt(2)=left_face_node_pt(
i+1,j,k);
430 el_pt->node_pt(3)=central_node_pt(
i,j,k);
440 el_pt->node_pt(0)=vertex_node_pt(
i+1,j+1,k);
443 el_pt->node_pt(1)=vertex_node_pt(
i+1,j+1,k+1);
446 el_pt->node_pt(2)=left_face_node_pt(
i+1,j,k);
449 el_pt->node_pt(3)=central_node_pt(
i,j,k);
459 el_pt->node_pt(0)=vertex_node_pt(
i+1,j+1,k+1);
462 el_pt->node_pt(1)=vertex_node_pt(
i+1,j,k+1);
465 el_pt->node_pt(2)=left_face_node_pt(
i+1,j,k);
468 el_pt->node_pt(3)=central_node_pt(
i,j,k);
483 el_pt->node_pt(0)=vertex_node_pt(
i,j,k+1);
486 el_pt->node_pt(1)=vertex_node_pt(
i+1,j,k+1);
489 el_pt->node_pt(2)=down_face_node_pt(
i,j,k+1);
492 el_pt->node_pt(3)=central_node_pt(
i,j,k);
502 el_pt->node_pt(0)=vertex_node_pt(
i+1,j,k+1);
505 el_pt->node_pt(1)=vertex_node_pt(
i+1,j+1,k+1);
508 el_pt->node_pt(2)=down_face_node_pt(
i,j,k+1);
511 el_pt->node_pt(3)=central_node_pt(
i,j,k);
521 el_pt->node_pt(0)=vertex_node_pt(
i+1,j+1,k+1);
524 el_pt->node_pt(1)=vertex_node_pt(
i,j+1,k+1);
527 el_pt->node_pt(2)=down_face_node_pt(
i,j,k+1);
530 el_pt->node_pt(3)=central_node_pt(
i,j,k);
541 el_pt->node_pt(0)=vertex_node_pt(
i,j+1,k+1);
544 el_pt->node_pt(1)=vertex_node_pt(
i,j,k+1);
547 el_pt->node_pt(2)=down_face_node_pt(
i,j,k+1);
550 el_pt->node_pt(3)=central_node_pt(
i,j,k);
565 el_pt->node_pt(0)=vertex_node_pt(
i,j,k);
568 el_pt->node_pt(2)=vertex_node_pt(
i+1,j,k);
571 el_pt->node_pt(1)=down_face_node_pt(
i,j,k);
574 el_pt->node_pt(3)=central_node_pt(
i,j,k);
584 el_pt->node_pt(0)=vertex_node_pt(
i+1,j,k);
587 el_pt->node_pt(2)=vertex_node_pt(
i+1,j+1,k);
590 el_pt->node_pt(1)=down_face_node_pt(
i,j,k);
593 el_pt->node_pt(3)=central_node_pt(
i,j,k);
603 el_pt->node_pt(0)=vertex_node_pt(
i+1,j+1,k);
606 el_pt->node_pt(2)=vertex_node_pt(
i,j+1,k);
609 el_pt->node_pt(1)=down_face_node_pt(
i,j,k);
612 el_pt->node_pt(3)=central_node_pt(
i,j,k);
623 el_pt->node_pt(0)=vertex_node_pt(
i,j+1,k);
626 el_pt->node_pt(2)=vertex_node_pt(
i,j,k);
629 el_pt->node_pt(1)=down_face_node_pt(
i,j,k);
632 el_pt->node_pt(3)=central_node_pt(
i,j,k);
646 el_pt->node_pt(0)=vertex_node_pt(
i,j+1,k);
649 el_pt->node_pt(2)=front_face_node_pt(
i,j+1,k);
652 el_pt->node_pt(1)=vertex_node_pt(
i,j+1,k+1);
655 el_pt->node_pt(3)=central_node_pt(
i,j,k);
665 el_pt->node_pt(0)=vertex_node_pt(
i,j+1,k);
668 el_pt->node_pt(2)=vertex_node_pt(
i+1,j+1,k);
671 el_pt->node_pt(1)=front_face_node_pt(
i,j+1,k);
674 el_pt->node_pt(3)=central_node_pt(
i,j,k);
684 el_pt->node_pt(0)=vertex_node_pt(
i+1,j+1,k);
687 el_pt->node_pt(2)=vertex_node_pt(
i+1,j+1,k+1);
690 el_pt->node_pt(1)=front_face_node_pt(
i,j+1,k);
693 el_pt->node_pt(3)=central_node_pt(
i,j,k);
703 el_pt->node_pt(0)=vertex_node_pt(
i+1,j+1,k+1);
706 el_pt->node_pt(2)=vertex_node_pt(
i,j+1,k+1);
709 el_pt->node_pt(1)=front_face_node_pt(
i,j+1,k);
712 el_pt->node_pt(3)=central_node_pt(
i,j,k);
726 el_pt->node_pt(0)=vertex_node_pt(
i,j,k);
729 el_pt->node_pt(2)=left_face_node_pt(
i,j,k);
732 el_pt->node_pt(1)=vertex_node_pt(
i,j,k+1);
735 el_pt->node_pt(3)=central_node_pt(
i,j,k);
745 el_pt->node_pt(0)=vertex_node_pt(
i,j,k);
748 el_pt->node_pt(2)=vertex_node_pt(
i,j+1,k);
751 el_pt->node_pt(1)=left_face_node_pt(
i,j,k);
754 el_pt->node_pt(3)=central_node_pt(
i,j,k);
764 el_pt->node_pt(0)=vertex_node_pt(
i,j+1,k);
767 el_pt->node_pt(2)=vertex_node_pt(
i,j+1,k+1);
770 el_pt->node_pt(1)=left_face_node_pt(
i,j,k);
773 el_pt->node_pt(3)=central_node_pt(
i,j,k);
783 el_pt->node_pt(0)=vertex_node_pt(
i,j+1,k+1);
786 el_pt->node_pt(2)=vertex_node_pt(
i,j,k+1);
789 el_pt->node_pt(1)=left_face_node_pt(
i,j,k);
792 el_pt->node_pt(3)=central_node_pt(
i,j,k);
802 std::ostringstream error_stream;
803 error_stream <<
"Some internal error in the constructor\n" 804 <<
"Actual number of nodes : " 806 <<
"\ndoesn't match the prediction : " << nnod << std::endl;
810 OOMPH_CURRENT_FUNCTION,
811 OOMPH_EXCEPTION_LOCATION);
817 std::ostringstream error_stream;
818 error_stream <<
"Some internal error in the constructor\n" 819 <<
"Actual number of elements : " 821 <<
"\ndoesn't match the prediction : " << nelem
826 OOMPH_CURRENT_FUNCTION,
827 OOMPH_EXCEPTION_LOCATION);
Vector< Node * > Node_pt
Vector of pointers to nodes.
void add_boundary_node(const unsigned &b, Node *const &node_pt)
Add a (pointer to) a node to the b-th boundary.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
double & x(const unsigned &i)
Return the i-th nodal coordinate.
A template Class for BoundaryNodes; that is Nodes that MAY live on the boundary of a Mesh...
void set_nboundary(const unsigned &nbound)
Set the number of boundaries in the mesh.
Vector< GeneralisedElement * > Element_pt
Vector of pointers to generalised elements.
SimpleCubicScaffoldTetMesh(const unsigned &n_x, const unsigned &n_y, const unsigned &n_z, const double &l_x, const double &l_y, const double &l_z, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass number of elements and dimensions of cube.
Node *& node_pt(const unsigned long &n)
Return pointer to global node n.
Base class for time-stepping schemes. Timestepper provides an approximation of the temporal derivativ...