26 #ifndef COMB_CAN_MESH_HEADER
27 #define COMB_CAN_MESH_HEADER
46 using namespace oomph;
53 template <
class ELEMENT,
class INTERFACE_ELEMENT>
62 CombCanSpineMesh(
const unsigned int &nel_xz,
const unsigned int &nel_y,
const double &
alpha,
const double &length,
const double &
height,
68 {
return Interface_element_pt[
i];}
72 {
return Bulk_element_pt[
i];}
76 {
return Bulk_outlet_element_pt[
i];}
81 {
return Interface_line_element_pt[
i];}
89 unsigned long nbulk()
const {
return Bulk_element_pt.size();}
95 unsigned long nbulkoutlet()
const {
return Bulk_outlet_element_pt.size();}
98 unsigned long ninterfaceline()
const {
return Interface_line_element_pt.size();}
104 Bulk_element_pt.clear();
105 Interface_element_pt.clear();
116 double H = spine_node_pt->
h();
125 sqrt( (Xsim - origin_pt[0] ) * (Xsim - origin_pt[0] ) +
126 (Zsim - origin_pt[2] ) * (Zsim - origin_pt[2]) );
129 spine_node_pt->
x(0) = origin_pt[0] +
H*
W* (Xsim - origin_pt[0] )/norm;
132 spine_node_pt->
x(2) = origin_pt[2] +
H*
W* (Zsim - origin_pt[2] )/norm;
173 unsigned long nnode = rot_mesh_pt->
nnode();
174 for(
unsigned long i = 0;
i<nnode;
i++)
177 double x_node = node_pt->
x(0);
178 double z_node = node_pt->
x(2);
179 node_pt->
x(0) = 1.0 - z_node;
180 node_pt->
x(2) = 1.0 + x_node;
183 unsigned long nspines = rot_mesh_pt->
nspine();
184 for(
unsigned long i = 0;
i<nspines;
i++)
200 int nx = add_mesh_pt->
nx();
201 int ny = add_mesh_pt->
ny();
202 int nz = add_mesh_pt->
nz();
204 for(
int k =0;
k<
nz;
k++)
206 for(
int i =0;
i<
nx;
i++)
209 Bulk_outlet_element_pt.push_back(el_pt);
218 int nx = add_mesh_pt->
nx();
219 int ny = add_mesh_pt->
ny();
221 for(
int i =0;
i<
nx;
i++)
224 Interface_line_element_pt.push_back(el_pt);
230 virtual void build_single_layer_mesh(
TimeStepper* time_stepper_pt);
248 template<
class ELEMENT,
class INTERFACE_ELEMENT>
250 const double &
alpha,
const double &length,
const double &
height,
const double &
radius,
251 const unsigned int &flag,
TimeStepper* time_stepper_pt):
276 template<
class ELEMENT,
class INTERFACE_ELEMENT>
288 Face_index_outlet = 2;
290 unsigned n_x = Nel_xz;
291 unsigned n_y = Nel_y;
292 unsigned n_z = Nel_xz;
295 MyCanyonMesh<ELEMENT,INTERFACE_ELEMENT >* mesh1_pt =
new MyCanyonMesh<ELEMENT,INTERFACE_ELEMENT > (n_x,n_y,n_z,0.0,1.0,0.0,1.0,0.0,1.0,
Radius,0,time_stepper_pt);
305 for(
unsigned i = 0;
i< mesh1_pt->
nnode();
i++)
310 this->add_node_pt(mesh1_pt->
node_pt(
i));
314 for(
unsigned i = 0;
i< mesh1_pt->
nbulk();
i++)
333 for(
unsigned i = 0;
i< mesh1_pt->
nspine();
i++)
335 Spine_pt.push_back(mesh1_pt->
spine_pt(
i));
348 this->add_boundary_node(
b , node_pt);
353 add_outlet_bulk_elements(mesh1_pt);
354 add_line_interface_elements(mesh1_pt);
357 MyCanyonMesh<ELEMENT,INTERFACE_ELEMENT >* mesh2_pt =
new MyCanyonMesh<ELEMENT,INTERFACE_ELEMENT > (n_x,n_y,n_z,0.0,1.0,0.0,1.0,0.0,1.0,
Radius,1,time_stepper_pt);
363 int addmesh_map_boundary[6];
365 for(
unsigned int i =0;
i<6;
i++)
367 addmesh_map_boundary[
i] =
i;
370 addmesh_map_boundary[0] = 2;
371 addmesh_map_boundary[2] = 6;
372 addmesh_map_boundary[4] = -1;
375 add_outlet_bulk_elements(mesh2_pt);
376 add_line_interface_elements(mesh2_pt);
378 add_side_spinemesh(2, mesh2_pt ,addmesh_map_boundary, 7,
Flag);
382 MyCanyonMesh<ELEMENT,INTERFACE_ELEMENT >* mesh3_pt =
new MyCanyonMesh<ELEMENT,INTERFACE_ELEMENT > (n_x,n_y,n_z,0.0,1.0,0.0,1.0,0.0,1.0,
Radius,0,time_stepper_pt);
391 for(
unsigned int i =0;
i<6;
i++)
393 addmesh_map_boundary[
i] =
i;
396 addmesh_map_boundary[2] = 6;
397 addmesh_map_boundary[0] = 2;
398 addmesh_map_boundary[4] = -1;
400 add_side_spinemesh(6, mesh3_pt ,addmesh_map_boundary, 7,
Flag);
403 add_outlet_bulk_elements(mesh3_pt);
404 add_line_interface_elements(mesh3_pt);
407 MyCanyonMesh<ELEMENT,INTERFACE_ELEMENT >* mesh4_pt =
new MyCanyonMesh<ELEMENT,INTERFACE_ELEMENT > (n_x,n_y,n_z,0.0,1.0,0.0,1.0,0.0,1.0,
Radius,1,time_stepper_pt);
416 for(
unsigned int i =0;
i<6;
i++)
418 addmesh_map_boundary[
i] =
i;
421 addmesh_map_boundary[2] = 4;
422 addmesh_map_boundary[0] = 6;
423 addmesh_map_boundary[4] = -1;
426 add_outlet_bulk_elements(mesh4_pt);
427 add_line_interface_elements(mesh4_pt);
429 add_side_spinemesh(6, mesh4_pt ,addmesh_map_boundary, 7,
Flag);
433 <<
"The canyon mesh consists of "
434 <<nbulk()<<
" bulk elements and "
435 <<ninterface_element()<<
" interface elements."<<std::endl;
456 ncount = this->nnode();
457 for(
int i = 0;
i< ncount;
i++)
459 Node* node_pt = this->node_pt(
i);
460 node_pt->
x(0) = node_pt->
x(0) *
Alpha/2;
461 node_pt->
x(1) = node_pt->
x(1) *
Length;
462 node_pt->
x(2) = node_pt->
x(2) *
Height/2;
466 unsigned long nspines = this->nspine();
467 for(
unsigned long i = 0;
i<nspines;
i++)
469 Spine* spine_pt = this->spine_pt(
i);
482 ncount = this->nboundary_node(5);
484 for(
int i = 0;
i< ncount;
i++)
491 double dorg =
sqrt( (spine_node_pt->
x(0) - x_spine)*(spine_node_pt->
x(0) - x_spine)+
492 (spine_node_pt->
x(2) - z_spine)*(spine_node_pt->
x(2) - z_spine) );
493 spine_node_pt->
h() = dorg;
520 total_boundaries,spine_flag);
523 for(
unsigned i = 0;
i< addmesh_pt->
nbulk();
i++)
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
MatrixXf H
Definition: HessenbergDecomposition_matrixH.cpp:4
Scalar * b
Definition: benchVecAdd.cpp:17
Definition: comb_can_spine_mesh.h:55
double Height
Definition: comb_can_spine_mesh.h:146
double Radius
Definition: comb_can_spine_mesh.h:147
unsigned long nbulk() const
Number of elements in bulk.
Definition: comb_can_spine_mesh.h:89
unsigned int Nel_y
Definition: comb_can_spine_mesh.h:141
int face_index_outlet()
Definition: comb_can_spine_mesh.h:86
double Length
Definition: comb_can_spine_mesh.h:145
void add_side_spinemesh(unsigned int bound1, MyCanyonMesh< ELEMENT, INTERFACE_ELEMENT > *addmesh_pt, int *addmesh_map_boundary, int total_boundaries, unsigned flag)
Definition: comb_can_spine_mesh.h:514
FiniteElement *& interface_line_element_pt(const unsigned long &i)
Definition: comb_can_spine_mesh.h:80
unsigned long ninterface_element() const
Number of elements on interface.
Definition: comb_can_spine_mesh.h:92
CombCanSpineMesh(const unsigned int &nel_xz, const unsigned int &nel_y, const double &alpha, const double &length, const double &height, const double &radius, const unsigned int &flag, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Definition: comb_can_spine_mesh.h:249
FiniteElement *& bulk_outlet_element_pt(const unsigned long &i)
Definition: comb_can_spine_mesh.h:75
double Alpha
Aspect ratio, length, height and radius.
Definition: comb_can_spine_mesh.h:144
void add_line_interface_elements(MyCanyonMesh< ELEMENT, INTERFACE_ELEMENT > *add_mesh_pt)
Definition: comb_can_spine_mesh.h:216
virtual void spine_node_update(SpineNode *spine_node_pt)
Definition: comb_can_spine_mesh.h:111
Vector< FiniteElement * > Bulk_element_pt
Vector of pointers to element in the fluid layer.
Definition: comb_can_spine_mesh.h:160
unsigned long nbulkoutlet() const
Definition: comb_can_spine_mesh.h:95
Vector< FiniteElement * > Interface_element_pt
Vector of pointers to interface elements.
Definition: comb_can_spine_mesh.h:163
void flush_spine_element_and_node_storage()
Definition: comb_can_spine_mesh.h:100
int Face_index_outlet
Definition: comb_can_spine_mesh.h:155
unsigned int Flag
Definition: comb_can_spine_mesh.h:148
virtual void build_single_layer_mesh(TimeStepper *time_stepper_pt)
Definition: comb_can_spine_mesh.h:277
Vector< FiniteElement * > Interface_line_element_pt
Definition: comb_can_spine_mesh.h:169
void add_outlet_bulk_elements(SimpleCubicMesh< ELEMENT > *add_mesh_pt)
Definition: comb_can_spine_mesh.h:198
void rotate_90(SpineMesh *rot_mesh_pt)
Definition: comb_can_spine_mesh.h:171
Vector< FiniteElement * > Bulk_outlet_element_pt
Vector of pointers to the bulk outlet elements in the fluid layer.
Definition: comb_can_spine_mesh.h:166
FiniteElement *& bulk_element_pt(const unsigned long &i)
Access functions for pointers to elements in bulk.
Definition: comb_can_spine_mesh.h:71
double Xsim
Axis of Symmetry.
Definition: comb_can_spine_mesh.h:151
unsigned long ninterfaceline() const
Definition: comb_can_spine_mesh.h:98
double Zsim
Definition: comb_can_spine_mesh.h:152
unsigned int Nel_xz
Definition: comb_can_spine_mesh.h:140
FiniteElement *& interface_element_pt(const unsigned long &i)
Access functions for pointers to interface elements.
Definition: comb_can_spine_mesh.h:67
Definition: canyon_spine_mesh.h:48
FiniteElement *& interface_element_pt(const unsigned long &i)
Access functions for pointers to interface elements.
Definition: canyon_spine_mesh.h:75
void flush_spine_element_and_node_storage()
Definition: canyon_spine_mesh.h:171
unsigned long ninterface_element() const
Number of elements on interface.
Definition: canyon_spine_mesh.h:79
FiniteElement *& bulk_element_pt(const unsigned long &i)
Access functions for pointers to elements in bulk.
Definition: canyon_spine_mesh.h:83
unsigned long nbulk() const
Number of elements in bulk.
Definition: canyon_spine_mesh.h:87
Definition: elements.h:1313
unsigned long nboundary_node(const unsigned &ibound) const
Return number of nodes on a particular boundary.
Definition: mesh.h:833
static Steady< 0 > Default_TimeStepper
The Steady Timestepper.
Definition: mesh.h:75
unsigned nboundary() const
Return number of boundaries.
Definition: mesh.h:827
GeneralisedElement *& element_pt(const unsigned long &e)
Return pointer to element e.
Definition: mesh.h:448
unsigned long nnode() const
Return number of nodes in the mesh.
Definition: mesh.h:596
Node *& boundary_node_pt(const unsigned &b, const unsigned &n)
Return pointer to node n on boundary b.
Definition: mesh.h:493
unsigned long nelement() const
Return number of elements in the mesh.
Definition: mesh.h:590
double & x(const unsigned &i)
Return the i-th nodal coordinate.
Definition: nodes.h:1060
virtual void remove_from_boundary(const unsigned &b)
Definition: nodes.cc:2350
Simple cubic 3D Brick mesh class.
Definition: simple_cubic_mesh.template.h:47
const unsigned & ny() const
Access function for number of elements in y directions.
Definition: simple_cubic_mesh.template.h:114
const unsigned & nx() const
Access function for number of elements in x directions.
Definition: simple_cubic_mesh.template.h:108
const unsigned & nz() const
Access function for number of elements in y directions.
Definition: simple_cubic_mesh.template.h:120
SpineNode * node_pt(const unsigned long &n)
Return a pointer to the n-th global SpineNode.
Definition: spines.h:648
unsigned long nspine() const
Return the number of spines in the mesh.
Definition: spines.h:635
Spine *& spine_pt(const unsigned long &i)
Return the i-th spine in the mesh.
Definition: spines.h:623
void node_update(const bool &update_all_solid_nodes=false)
Definition: spines.cc:84
double & h()
Access function to spine height.
Definition: spines.h:397
SpineMesh *& spine_mesh_pt()
Definition: spines.h:391
Spine *& spine_pt()
Access function to spine.
Definition: spines.h:372
unsigned & node_update_fct_id()
Access function to ID of node update function (within specific mesh)
Definition: spines.h:384
double & fraction()
Set reference to fraction along spine.
Definition: spines.h:378
double & geom_parameter(const unsigned &i)
Definition: spines.h:287
Definition: timesteppers.h:231
RealScalar alpha
Definition: level1_cplx_impl.h:151
char char char int int * k
Definition: level2_impl.h:374
double Height
Height of domain.
Definition: flow_past_oscillating_cylinder.cc:316
double Radius
Radius of the pipe.
Definition: pipe.cc:55
double Length
Length of the pipe.
Definition: pipe.cc:52
double height(const double &x)
Height of domain.
Definition: simple_spine_channel.cc:429
const unsigned nz
Definition: ConstraintElementsUnitTest.cpp:32
const unsigned nx
Definition: ConstraintElementsUnitTest.cpp:30
const unsigned ny
Definition: ConstraintElementsUnitTest.cpp:31
double Alpha
Parameter for steepness of step.
Definition: two_d_adv_diff_adapt.cc:53
void merge_spine_meshes(MESH1 *mesh_pt, unsigned bound1, MESH2 *addmesh_pt, int *addmesh_map_boundary, int total_boundaries, unsigned spine_flag)
Definition: merge_meshes.h:32
unsigned Flag
Flag for solution.
Definition: navier_stokes_preconditioners.cc:42
@ W
Definition: quadtree.h:63
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2