29 #ifndef OOMPH_TETMESH_FACETED_SURFACES_HEADER
30 #define OOMPH_TETMESH_FACETED_SURFACES_HEADER
34 #include <oomph-lib-config.h>
44 namespace HelperForSortingVectorOfPairsOfVertexPtAndDouble
48 std::pair<TetMeshVertex*,double>
j)
50 return (
i.second<
j.second);
75 const double& box_half_length,
76 const unsigned& one_based_boundary_id_offset=0)
78 unsigned one_based_region_id=0;
84 one_based_boundary_id_offset);
91 const double& box_half_length,
93 const unsigned& one_based_boundary_id_offset=0)
95 unsigned one_based_region_id=0;
100 one_based_boundary_id_offset);
108 const double& box_half_width,
109 const double& box_half_length,
110 const unsigned& one_based_boundary_id_offset=0)
117 one_based_boundary_id_offset);
126 const double& box_half_width,
127 const double& box_half_length,
129 const unsigned& one_based_boundary_id_offset=0)
135 one_based_boundary_id_offset);
143 const double& box_half_width,
144 const double& box_half_length,
146 const unsigned& one_based_boundary_id_offset)
153 box_point[0] = offset[0]-box_half_width;
154 box_point[1] = offset[1]-box_half_width;
155 box_point[2] = offset[2]-box_half_length;
158 box_point[0] = offset[0]-box_half_width;
159 box_point[1] = offset[1]+box_half_width;
160 box_point[2] = offset[2]-box_half_length;
163 box_point[0] = offset[0]-box_half_width;
164 box_point[1] = offset[1]+box_half_width;
165 box_point[2] = offset[2]+box_half_length;
168 box_point[0] = offset[0]-box_half_width;
169 box_point[1] = offset[1]-box_half_width;
170 box_point[2] = offset[2]+box_half_length;
173 box_point[0] = offset[0]+box_half_width;
174 box_point[1] = offset[1]-box_half_width;
175 box_point[2] = offset[2]-box_half_length;
178 box_point[0] = offset[0]+box_half_width;
179 box_point[1] = offset[1]+box_half_width;
180 box_point[2] = offset[2]-box_half_length;
183 box_point[0] = offset[0]+box_half_width;
184 box_point[1] = offset[1]+box_half_width;
185 box_point[2] = offset[2]+box_half_length;
188 box_point[0] = offset[0]+box_half_width;
189 box_point[1] = offset[1]-box_half_width;
190 box_point[2] = offset[2]+box_half_length;
198 unsigned n_vertex_on_facet=4;
200 unsigned one_based_boundary_id=1+one_based_boundary_id_offset;
201 Facet_pt[0]->set_one_based_boundary_id(one_based_boundary_id);
208 one_based_boundary_id=2+one_based_boundary_id_offset;
209 Facet_pt[1]->set_one_based_boundary_id(one_based_boundary_id);
217 one_based_boundary_id=3+one_based_boundary_id_offset;
218 Facet_pt[2]->set_one_based_boundary_id(one_based_boundary_id);
225 one_based_boundary_id=4+one_based_boundary_id_offset;
226 Facet_pt[3]->set_one_based_boundary_id(one_based_boundary_id);
233 one_based_boundary_id=5+one_based_boundary_id_offset;
234 Facet_pt[4]->set_one_based_boundary_id(one_based_boundary_id);
242 one_based_boundary_id=6+one_based_boundary_id_offset;
243 Facet_pt[5]->set_one_based_boundary_id(one_based_boundary_id);
251 for (
unsigned f=0;
f<6;
f++)
253 Facet_pt[
f]->set_one_based_adjacent_region_id(one_based_region_id);
257 if (one_based_region_id>0)
293 const double& half_y_length,
295 const unsigned& one_based_boundary_id)
300 one_based_boundary_id);
309 const double& half_y_length,
311 const unsigned& one_based_boundary_id)
318 box_point[0] = offset[0]-half_x_width;
319 box_point[1] = offset[1]-half_y_length;
320 box_point[2] = offset[2];
323 box_point[0] = offset[0]+half_x_width;
324 box_point[1] = offset[1]-half_y_length;
325 box_point[2] = offset[2];
328 box_point[0] = offset[0]+half_x_width;
329 box_point[1] = offset[1]+half_y_length;
330 box_point[2] = offset[2];
333 box_point[0] = offset[0]-half_x_width;
334 box_point[1] = offset[1]+half_y_length;
335 box_point[2] = offset[2];
343 unsigned n_vertex_on_facet=4;
345 Facet_pt[0]->set_one_based_boundary_id(one_based_boundary_id);
379 disk_parametrised_by_nonsingular_coordinates_pt,
380 const unsigned& half_nsegment,
381 const unsigned& first_one_based_boundary_id_for_disk,
382 unsigned& last_one_based_boundary_id_for_disk)
386 disk_parametrised_by_nonsingular_coordinates_pt;
393 disk_parametrised_by_nonsingular_coordinates_pt->
394 boundary_parametrising_geom_object_pt(0);
395 double zeta_start=disk_parametrised_by_nonsingular_coordinates_pt->
396 zeta_boundary_start(0);
397 double zeta_end=disk_parametrised_by_nonsingular_coordinates_pt->
398 zeta_boundary_end(0);
399 unsigned nsegment=half_nsegment;
400 unsigned boundary_id=0;
402 outer_boundary_ellipse0_pt,zeta_start,zeta_end,nsegment,boundary_id);
406 disk_parametrised_by_nonsingular_coordinates_pt->
407 boundary_parametrising_geom_object_pt(1);
408 zeta_start=disk_parametrised_by_nonsingular_coordinates_pt->
409 zeta_boundary_start(1);
410 zeta_end=disk_parametrised_by_nonsingular_coordinates_pt->
411 zeta_boundary_end(1);
412 nsegment=half_nsegment;
415 outer_boundary_ellipse1_pt,zeta_start,zeta_end,nsegment,boundary_id);
427 if (disk_parametrised_by_nonsingular_coordinates_pt->
nboundary()==4)
435 disk_parametrised_by_nonsingular_coordinates_pt->
436 boundary_parametrising_geom_object_pt(2);
437 double zeta_start=disk_parametrised_by_nonsingular_coordinates_pt->
438 zeta_boundary_start(2);
439 double zeta_end=disk_parametrised_by_nonsingular_coordinates_pt->
440 zeta_boundary_end(2);
441 unsigned nsegment=half_nsegment;
442 unsigned boundary_id=2;
444 inner_boundary_ellipse0_pt,zeta_start,zeta_end,nsegment,boundary_id);
448 disk_parametrised_by_nonsingular_coordinates_pt->
449 boundary_parametrising_geom_object_pt(3);
450 zeta_start=disk_parametrised_by_nonsingular_coordinates_pt->
451 zeta_boundary_start(3);
452 zeta_end=disk_parametrised_by_nonsingular_coordinates_pt->
453 zeta_boundary_end(3);
454 nsegment=half_nsegment;
457 inner_boundary_ellipse1_pt,zeta_start,zeta_end,nsegment,boundary_id);
466 inner_boundaries_pt[0]=inner_curve_pt;
474 std::map<unsigned, Vector<double> > zeta_in_region_map=
475 disk_parametrised_by_nonsingular_coordinates_pt->
zeta_in_region();
477 zeta_in_region_map.begin();it!=zeta_in_region_map.end();it++)
480 unsigned r=(*it).first;
488 double uniform_element_area=
sqrt(3.0)/4.0*
490 triangle_mesh_parameters.
element_area() = uniform_element_area;
498 std::map<FiniteElement*,bool> is_on_boundary;
499 for (
unsigned b=0;
b<2;
b++)
502 for (
unsigned e=0;
e<nel;
e++)
506 for (
unsigned j=0;
j<3;
j++)
513 is_on_boundary[el_pt]=
true;
539 std::ostringstream error_message;
540 error_message <<
"This doesn't make sense!";
549 std::ostringstream error_message;
551 "Boundary simplex element doesn't have two nodes on boundary!";
563 for (
unsigned j=0;
j<nnod;
j++)
578 for (
unsigned e=0;
e<nel;
e++)
581 if (is_on_boundary[el_pt])
596 unsigned n_vertex_on_facet=3;
597 for (
unsigned e=0;
e<nel;
e++)
600 if (is_on_boundary[el_pt])
627 std::ostringstream error_message;
628 error_message <<
"never get here!";
636 unsigned one_based_boundary_id=first_one_based_boundary_id_for_disk+
e;
637 Facet_pt[
e]->set_one_based_boundary_id(one_based_boundary_id);
638 last_one_based_boundary_id_for_disk=one_based_boundary_id;
639 for (
unsigned j=0;
j<3;
j++)
660 const double& zeta_boundary,
667 double phi=phi0+(phi1-phi0)*zeta_boundary;
670 double zeta_bound=phi;
681 zeta[0]=zeta0[0]+(zeta1[0]-zeta0[0])*zeta_boundary;
682 zeta[1]=zeta0[1]+(zeta1[1]-zeta0[1])*zeta_boundary;
759 disk_parametrised_by_nonsingular_coordinates_pt,
760 const unsigned& half_nsegment,
761 const double& r_torus,
762 const unsigned& nvertex_torus,
763 const unsigned& first_one_based_boundary_id_for_disk,
764 const unsigned& one_based_torus_region_id,
765 unsigned& last_one_based_boundary_id_for_disk,
766 unsigned& first_one_based_boundary_id_for_torus,
767 unsigned& last_one_based_boundary_id_for_torus,
771 disk_parametrised_by_nonsingular_coordinates_pt,
773 first_one_based_boundary_id_for_disk,
774 last_one_based_boundary_id_for_disk)
777 one_based_boundary_id_for_disk_within_torus.clear();
778 one_based_boundary_id_for_disk_outside_torus.clear();
782 std::map<FiniteElement*,bool> is_in_torus_region;
788 for(
unsigned e=0;
e<nel;
e++)
791 is_in_torus_region[el_pt]=
true;
801 for (
unsigned e=0;
e<nel;
e++)
804 unsigned one_based_boundary_id=
Facet_pt[
e]->one_based_boundary_id();
805 if (is_in_torus_region[el_pt])
807 Facet_pt[
e]->set_one_based_region_that_facet_is_embedded_in
808 (one_based_torus_region_id);
809 one_based_boundary_id_for_disk_within_torus.push_back
810 (one_based_boundary_id);
814 one_based_boundary_id_for_disk_outside_torus.push_back
815 (one_based_boundary_id);
822 unsigned one_based_boundary_id=last_one_based_boundary_id_for_disk+1;
823 first_one_based_boundary_id_for_torus=one_based_boundary_id;
829 std::map<Node*,bool> done;
831 for (
unsigned b=2;
b<=3;
b++)
834 for (
unsigned j=0;
j<nnod;
j++)
840 vertex_pt_and_boundary_coord.push_back(
850 oomph_info <<
"Number of vertices on inner ring: "
851 << vertex_pt_and_boundary_coord.size() <<
" "
866 << point_in_torus[0] <<
" "
867 << point_in_torus[1] <<
" "
868 << point_in_torus[2] <<
" "
872 std::sort (vertex_pt_and_boundary_coord.begin(),
873 vertex_pt_and_boundary_coord.end(),
874 HelperForSortingVectorOfPairsOfVertexPtAndDouble::
878 unsigned n_vertices_on_annular_ring=nvertex_torus;
879 unsigned n_new_vertices_on_annular_ring=
880 n_vertices_on_annular_ring-2;
886 nv+=n_new_vertices_on_annular_ring*
887 vertex_pt_and_boundary_coord.size();
891 Nfacet+=(n_new_vertices_on_annular_ring+1)*
892 (vertex_pt_and_boundary_coord.size());
896 unsigned new_vertex_count=0;
897 unsigned new_facet_count=0;
898 unsigned n=vertex_pt_and_boundary_coord.size();
900 for (
unsigned j=0;
j<
n;
j++)
904 annulus_vertex_pt[
j].resize(n_vertices_on_annular_ring);
905 annulus_vertex_pt[
j][0]=vertex_pt_and_boundary_coord[
j].first;
906 annulus_vertex_pt[
j][n_vertices_on_annular_ring-1]=
907 vertex_pt_and_boundary_coord[
j].first;
911 vertex_position[0]=vertex_pt_and_boundary_coord[
j].first->x(0);
912 vertex_position[1]=vertex_pt_and_boundary_coord[
j].first->x(1);
913 vertex_position[2]=vertex_pt_and_boundary_coord[
j].first->x(2);
916 double theta=vertex_pt_and_boundary_coord[
j].second;
924 double zeta_bound=
theta;
942 distance_to_edge[0]=r_edge[0]-vertex_position[0];
943 distance_to_edge[1]=r_edge[1]-vertex_position[1];
944 distance_to_edge[2]=r_edge[2]-vertex_position[2];
945 double rho=
sqrt(distance_to_edge[0]*distance_to_edge[0]+
946 distance_to_edge[1]*distance_to_edge[1]+
947 distance_to_edge[2]*distance_to_edge[2]);
950 double cos_phi0=(distance_to_edge[0]*
normal[0]+
951 distance_to_edge[1]*
normal[1]+
952 distance_to_edge[2]*
normal[2])/rho;
953 if (cos_phi0>1.0) cos_phi0=1.0;
954 if (cos_phi0<-1.0) cos_phi0=-1.0;
956 double phi_0=
acos(cos_phi0);
958 for (
unsigned i=1;
i<n_vertices_on_annular_ring-1;
i++)
960 double phi=phi_0+
double(
i)/
double(n_vertices_on_annular_ring-1)*
962 x[0]=r_edge[0]+rho*
cos(phi)*
normal[0]+rho*
sin(phi)*normal_normal[0];
963 x[1]=r_edge[1]+rho*
cos(phi)*
normal[1]+rho*
sin(phi)*normal_normal[1];
964 x[2]=r_edge[2]+rho*
cos(phi)*
normal[2]+rho*
sin(phi)*normal_normal[2];
967 annulus_vertex_pt[
j][
i]=new_vertex_pt;
974 for (
unsigned i=0;
i<
n-1;
i++)
976 unsigned m=annulus_vertex_pt[
i].size();
977 for (
unsigned j=0;
j<
m-1;
j++)
979 unsigned n_vertex_on_facet=4;
987 unsigned region_id=one_based_torus_region_id;
988 Facet_pt[jf]->set_one_based_adjacent_region_id(region_id);
989 Facet_pt[jf]->set_one_based_boundary_id(one_based_boundary_id);
990 one_based_boundary_id++;
995 unsigned m=annulus_vertex_pt[
n-1].size();
996 for (
unsigned j=0;
j<
m-1;
j++)
998 unsigned n_vertex_on_facet=4;
1006 unsigned region_id=one_based_torus_region_id;
1007 Facet_pt[jf]->set_one_based_adjacent_region_id(region_id);
1008 Facet_pt[jf]->set_one_based_boundary_id(one_based_boundary_id);
1009 last_one_based_boundary_id_for_torus=one_based_boundary_id;
1010 one_based_boundary_id++;
1014 oomph_info <<
"First/last one-based disk boundary ID: "
1015 << first_one_based_boundary_id_for_disk <<
" "
1016 << last_one_based_boundary_id_for_disk << std::endl;
1019 oomph_info <<
"First/last one-based torus boundary ID: "
1020 << first_one_based_boundary_id_for_torus <<
" "
1021 << last_one_based_boundary_id_for_torus << std::endl;
1025 if (one_based_torus_region_id>0)
1031 std::ostringstream error_message;
1032 error_message <<
"one_based_torus_region_id must be strictly positive";
1088 disk_parametrised_by_nonsingular_coordinates_pt,
1089 const unsigned& half_nsegment,
1090 const unsigned& first_one_based_boundary_id_for_disk,
1091 const unsigned& one_based_region_id_above_disk,
1092 const unsigned& one_based_region_id_below_disk,
1093 unsigned& last_one_based_boundary_id_for_disk,
1094 unsigned& last_one_based_boundary_id) :
1097 first_one_based_boundary_id_for_disk,
1098 last_one_based_boundary_id_for_disk)
1106 Facet_pt[
e]->set_one_based_adjacent_region_id(
1107 one_based_region_id_above_disk);
1108 Facet_pt[
e]->set_one_based_adjacent_region_id(
1109 one_based_region_id_below_disk);
1121 std::set<TetMeshFacet*> boundary_facet_pt;
1123 for (
unsigned e=0;
e<nel;
e++)
1131 sorted_perimeter_vertex_pt.push_back(vertex0_pt);
1136 while (boundary_facet_pt.size()!=1)
1138 for (std::set<TetMeshFacet*>::iterator it=boundary_facet_pt.begin();
1139 it!=boundary_facet_pt.end();it++)
1141 unsigned n_last=sorted_perimeter_vertex_pt.size();
1142 if (sorted_perimeter_vertex_pt[n_last-1]==
1143 (*it)->vertex_pt(0))
1145 sorted_perimeter_vertex_pt.push_back((*it)->vertex_pt(1));
1146 boundary_facet_pt.erase(*it);
1154 double z_min= DBL_MAX;
1155 double z_max=-DBL_MAX;
1156 unsigned n=sorted_perimeter_vertex_pt.size();
1157 for (
unsigned j=0;
j<
n;
j++)
1159 double z=sorted_perimeter_vertex_pt[
j]->x(2);
1161 if (z>z_max) z_max=z;
1162 if (z<z_min) z_min=z;
1165 double layer_thickness=0.6*(z_max-z_min);
1168 unsigned facet_count=nel;
1170 unsigned one_based_boundary_id=last_one_based_boundary_id_for_disk+1;
1171 unsigned n_vertex_on_disk=
Vertex_pt.size();
1172 unsigned n_vertex_on_disk_perimeter=sorted_perimeter_vertex_pt.size();
1173 for (
unsigned i_offset=0;i_offset<2;i_offset++)
1175 unsigned one_based_region_id=one_based_region_id_below_disk;
1176 if (i_offset==1) one_based_region_id=one_based_region_id_above_disk;
1178 for (
unsigned j=0;
j<n_vertex_on_disk_perimeter;
j++)
1181 posn[0]=sorted_perimeter_vertex_pt[
j]->x(0);
1182 posn[1]=sorted_perimeter_vertex_pt[
j]->x(1);
1183 posn[2]=z_mean+
double(offset_sign)*layer_thickness;
1187 for (
unsigned j=0;
j<n_vertex_on_disk_perimeter-1;
j++)
1190 Facet_pt[facet_count]->set_one_based_boundary_id(one_based_boundary_id);
1191 Facet_pt[facet_count]->set_vertex_pt(0,sorted_perimeter_vertex_pt[
j]);
1192 Facet_pt[facet_count]->set_vertex_pt(1,sorted_perimeter_vertex_pt[
j+1]);
1194 set_vertex_pt(2,
Vertex_pt[n_vertex_on_disk+
1195 i_offset*n_vertex_on_disk_perimeter+
j+1]);
1197 set_vertex_pt(3,
Vertex_pt[n_vertex_on_disk+
1198 i_offset*n_vertex_on_disk_perimeter+
j ]);
1200 set_one_based_adjacent_region_id(one_based_region_id);
1203 one_based_boundary_id++;
1206 Facet_pt[facet_count]->set_one_based_boundary_id(one_based_boundary_id);
1207 Facet_pt[facet_count]->set_vertex_pt(0,sorted_perimeter_vertex_pt[count]);
1208 Facet_pt[facet_count]->set_vertex_pt(1,sorted_perimeter_vertex_pt[0]);
1210 set_vertex_pt(2,
Vertex_pt[n_vertex_on_disk+
1211 i_offset*n_vertex_on_disk_perimeter+0]);
1213 set_vertex_pt(3,
Vertex_pt[n_vertex_on_disk+
1214 i_offset*n_vertex_on_disk_perimeter+count]);
1216 set_one_based_adjacent_region_id(one_based_region_id);
1221 one_based_boundary_id++;
1223 Facet_pt[facet_count]->set_one_based_boundary_id(one_based_boundary_id);
1224 for (
unsigned j=0;
j<n_vertex_on_disk_perimeter;
j++)
1228 i_offset*n_vertex_on_disk_perimeter+
j]);
1231 set_one_based_adjacent_region_id(one_based_region_id);
1234 last_one_based_boundary_id=one_based_boundary_id;
1238 one_based_boundary_id++;
1242 region_point[2]=z_mean+0.5*
double(offset_sign)*layer_thickness;
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar acos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:138
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Scalar * b
Definition: benchVecAdd.cpp:17
CubicTetMeshFacetedClosedSurface from (+/- half width)^2 x +/- half length.
Definition: tetmesh_faceted_surfaces.h:66
CubicTetMeshFacetedSurface(const double &box_half_width, const double &box_half_length, const Vector< double > &offset, const unsigned &one_based_boundary_id_offset=0)
Definition: tetmesh_faceted_surfaces.h:90
CubicTetMeshFacetedSurface(const double &box_half_width, const double &box_half_length, const unsigned &one_based_boundary_id_offset=0)
Definition: tetmesh_faceted_surfaces.h:74
CubicTetMeshFacetedSurface(const unsigned &one_based_region_id, const double &box_half_width, const double &box_half_length, const Vector< double > &offset, const unsigned &one_based_boundary_id_offset=0)
Definition: tetmesh_faceted_surfaces.h:125
void build_it(const unsigned &one_based_region_id, const double &box_half_width, const double &box_half_length, const Vector< double > &offset, const unsigned &one_based_boundary_id_offset)
Build the thing.
Definition: tetmesh_faceted_surfaces.h:142
CubicTetMeshFacetedSurface(const unsigned &one_based_region_id, const double &box_half_width, const double &box_half_length, const unsigned &one_based_boundary_id_offset=0)
Definition: tetmesh_faceted_surfaces.h:107
Definition: geom_obj_with_boundary.h:67
std::map< unsigned, Vector< double > > zeta_in_region() const
Return map that stores zeta coordinates of points that identify regions.
Definition: geom_obj_with_boundary.h:307
double zeta_boundary_end(const unsigned &b) const
Definition: geom_obj_with_boundary.h:151
virtual void boundary_triad(const unsigned &b, const double &zeta_bound, Vector< double > &r, Vector< double > &tangent, Vector< double > &normal, Vector< double > &binormal)
Definition: geom_obj_with_boundary.h:159
unsigned nboundary() const
How many boundaries do we have?
Definition: geom_obj_with_boundary.h:73
void zeta_on_boundary(const unsigned &b, const double &zeta_bound, Vector< double > &zeta) const
Definition: geom_obj_with_boundary.h:91
TetMeshFacetedSurface that defines disk.
Definition: tetmesh_faceted_surfaces.h:366
~DiskTetMeshFacetedSurface()
Destructor.
Definition: tetmesh_faceted_surfaces.h:648
Vector< double > Right_boundary_coordinate
Right boundary coordinate of i-th facet.
Definition: tetmesh_faceted_surfaces.h:699
std::map< Node *, TetMeshVertex * > Equivalent_vertex_pt
Mapping between nodes and vertices.
Definition: tetmesh_faceted_surfaces.h:713
std::vector< bool > Facet_is_on_boundary
Is facet on boundary?
Definition: tetmesh_faceted_surfaces.h:693
DiskTetMeshFacetedSurface(DiskLikeGeomObjectWithBoundaries *disk_parametrised_by_nonsingular_coordinates_pt, const unsigned &half_nsegment, const unsigned &first_one_based_boundary_id_for_disk, unsigned &last_one_based_boundary_id_for_disk)
Definition: tetmesh_faceted_surfaces.h:377
Vector< double > Left_boundary_coordinate
Left boundary coordinate of i-th facet.
Definition: tetmesh_faceted_surfaces.h:696
Vector< unsigned > Boundary_id
ID of boundary the i-th facet is located on.
Definition: tetmesh_faceted_surfaces.h:702
unsigned Nfacet
Number of facets.
Definition: tetmesh_faceted_surfaces.h:690
TriangleMesh< TPoissonElement< 2, 2 > > * Tri_mesh_pt
Mesh used to facet-ise (discretise) disk.
Definition: tetmesh_faceted_surfaces.h:709
unsigned Nelement_on_disk_boundary
Number of elements on disk boundary.
Definition: tetmesh_faceted_surfaces.h:705
void boundary_zeta01(const unsigned &facet_id, const double &zeta_boundary, Vector< double > &zeta)
Definition: tetmesh_faceted_surfaces.h:659
TetMeshFacetedSurface that defines disk with torus around edge.
Definition: tetmesh_faceted_surfaces.h:732
DiskWithTorusAroundEdgeTetMeshFacetedSurface(DiskLikeGeomObjectWithBoundaries *disk_parametrised_by_nonsingular_coordinates_pt, const unsigned &half_nsegment, const double &r_torus, const unsigned &nvertex_torus, const unsigned &first_one_based_boundary_id_for_disk, const unsigned &one_based_torus_region_id, unsigned &last_one_based_boundary_id_for_disk, unsigned &first_one_based_boundary_id_for_torus, unsigned &last_one_based_boundary_id_for_torus, Vector< unsigned > &one_based_boundary_id_for_disk_within_torus, Vector< unsigned > &one_based_boundary_id_for_disk_outside_torus)
Definition: tetmesh_faceted_surfaces.h:757
Definition: tetmesh_faceted_surfaces.h:1067
DiskWithTwoLayersTetMeshFacetedSurface(DiskLikeGeomObjectWithBoundaries *disk_parametrised_by_nonsingular_coordinates_pt, const unsigned &half_nsegment, const unsigned &first_one_based_boundary_id_for_disk, const unsigned &one_based_region_id_above_disk, const unsigned &one_based_region_id_below_disk, unsigned &last_one_based_boundary_id_for_disk, unsigned &last_one_based_boundary_id)
Definition: tetmesh_faceted_surfaces.h:1086
Definition: elements.h:1313
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175
Definition: geom_objects.h:101
virtual void position(const Vector< double > &zeta, Vector< double > &r) const =0
Parametrised position on object at current time: r(zeta).
virtual bool is_on_boundary() const
Definition: nodes.h:1373
void position(Vector< double > &pos) const
Definition: nodes.cc:2499
virtual void get_coordinates_on_boundary(const unsigned &b, const unsigned &k, Vector< double > &boundary_zeta)
Definition: nodes.cc:2379
Definition: oomph_definitions.h:222
RectangularTetMeshFacetedSurface from (+/- half x width) x +/- half y length.
Definition: tetmesh_faceted_surfaces.h:284
void build_it(const double &half_x_width, const double &half_y_length, const Vector< double > &offset, const unsigned &one_based_boundary_id)
Build the thing.
Definition: tetmesh_faceted_surfaces.h:308
RectangularTetMeshFacetedSurface(const double &half_x_width, const double &half_y_length, const Vector< double > &offset, const unsigned &one_based_boundary_id)
Definition: tetmesh_faceted_surfaces.h:292
Definition: tet_mesh.h:168
void set_vertex_pt(const unsigned &j, TetMeshVertex *vertex_pt)
Definition: tet_mesh.h:194
Definition: tet_mesh.h:538
void enable_faceted_volume_represents_hole_for_gmsh()
Declare closed surface to represent hole for gmsh.
Definition: tet_mesh.h:550
void set_region_for_tetgen(const unsigned ®ion_id, const Vector< double > ®ion_point)
Definition: tet_mesh.h:582
void set_hole_for_tetgen(const Vector< double > &hole_point)
Specify coordinate of hole for tetgen.
Definition: tet_mesh.h:575
Definition: tet_mesh.h:306
Vector< TetMeshVertex * > Vertex_pt
Vector pointers to vertices.
Definition: tet_mesh.h:483
DiskLikeGeomObjectWithBoundaries * Geom_object_with_boundaries_pt
GeomObject with boundaries associated with this surface.
Definition: tet_mesh.h:497
Vector< TetMeshFacet * > Facet_pt
Vector of pointers to facets.
Definition: tet_mesh.h:486
TetMeshVertex * vertex_pt(const unsigned &j) const
Pointer to j-th vertex.
Definition: tet_mesh.h:379
Definition: tet_mesh.h:50
Vector< double > zeta_in_geom_object() const
Definition: tet_mesh.h:118
Base class defining a closed curve for the Triangle mesh generation.
Definition: unstructured_two_d_mesh_geometry_base.h:1339
Definition: unstructured_two_d_mesh_geometry_base.h:662
Definition: triangle_mesh.template.h:94
Vector< TriangleMeshClosedCurve * > internal_closed_curve_pt() const
Helper function for getting the internal closed boundaries.
Definition: triangle_mesh.template.h:163
double element_area() const
Helper function for getting the element area.
Definition: triangle_mesh.template.h:189
void add_region_coordinates(const unsigned &i, Vector< double > ®ion_coordinates)
Helper function for getting the extra regions.
Definition: triangle_mesh.template.h:213
Definition: triangle_mesh.template.h:424
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237
int * m
Definition: level2_cplx_impl.h:294
double theta
Definition: two_d_biharmonic.cc:236
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:152
void normal(const Vector< double > &x, Vector< double > &normal)
Definition: free_surface_rotation.cc:65
bool less_than_based_on_double(std::pair< TetMeshVertex *, double > i, std::pair< TetMeshVertex *, double > j)
Less than comparison based on double.
Definition: tetmesh_faceted_surfaces.h:47
const double Pi
50 digits from maple
Definition: oomph_utilities.h:157
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
list x
Definition: plotDoE.py:28
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2