comb_can_spine_mesh.h
Go to the documentation of this file.
1 //LIC// ====================================================================
2 //LIC// This file forms part of oomph-lib, the object-oriented,
3 //LIC// multi-physics finite-element library, available
4 //LIC// at http://www.oomph-lib.org.
5 //LIC//
6 //LIC// Copyright (C) 2006-2022 Matthias Heil and Andrew Hazel
7 //LIC//
8 //LIC// This library is free software; you can redistribute it and/or
9 //LIC// modify it under the terms of the GNU Lesser General Public
10 //LIC// License as published by the Free Software Foundation; either
11 //LIC// version 2.1 of the License, or (at your option) any later version.
12 //LIC//
13 //LIC// This library is distributed in the hope that it will be useful,
14 //LIC// but WITHOUT ANY WARRANTY; without even the implied warranty of
15 //LIC// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 //LIC// Lesser General Public License for more details.
17 //LIC//
18 //LIC// You should have received a copy of the GNU Lesser General Public
19 //LIC// License along with this library; if not, write to the Free Software
20 //LIC// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 //LIC// 02110-1301 USA.
22 //LIC//
23 //LIC// The authors may be contacted at oomph-lib@maths.man.ac.uk.
24 //LIC//
25 //LIC//====================================================================
26 #ifndef COMB_CAN_MESH_HEADER
27 #define COMB_CAN_MESH_HEADER
28 
29 // Standard includes
30 #include <algorithm>
31 #include <iostream>
32 #include <cmath>
33 #include <map>
34 
35 
36 // oomph-lib includes
37 #include "generic/spines.h"
38 // This has been changed to make reference to my cubic mesh
39 //#include "meshes/Simple_Cubic_Mesh.h"
40 
41 #include "canyon_spine_mesh.h"
42 
43 
44 
45 //#include "my_spine_mesh.h"
46 using namespace oomph;
47 
48 
49 //======================================================================
52 //======================================================================
53 template <class ELEMENT, class INTERFACE_ELEMENT>
55 {
56 
57 public:
58 
61 // to the elements in each direction of each cubic mesh
62  CombCanSpineMesh(const unsigned int &nel_xz, const unsigned int &nel_y, const double &alpha, const double &length, const double &height,
63  const double &radius, const unsigned int &flag, TimeStepper* time_stepper_pt= &Mesh::Default_TimeStepper);
64 
65 
67  FiniteElement* &interface_element_pt(const unsigned long &i)
68  {return Interface_element_pt[i];}
69 
71  FiniteElement* &bulk_element_pt(const unsigned long &i)
72  {return Bulk_element_pt[i];}
73 
74 // /Access functions for pointers to elements in the outlet (here identified as boundary 3)
75  FiniteElement* &bulk_outlet_element_pt(const unsigned long &i)
76  {return Bulk_outlet_element_pt[i];}
77 
78 
79 // /Access functions for pointers to interface elements in the outlet (here identified as boundary 3)
80  FiniteElement* & interface_line_element_pt(const unsigned long &i)
81  {return Interface_line_element_pt[i];}
82 
83 //Acces functions for the fixed coordinates of the bulk outlet elements
84 
85  //Face index for the outlet elements
86  int face_index_outlet() {return Face_index_outlet;}
87 
89  unsigned long nbulk() const {return Bulk_element_pt.size();}
90 
92  unsigned long ninterface_element() const {return Interface_element_pt.size();}
93 
94 //Number of outlet elements
95  unsigned long nbulkoutlet() const {return Bulk_outlet_element_pt.size();}
96 
97 // Number of interface line elements
98  unsigned long ninterfaceline() const {return Interface_line_element_pt.size();}
99 
101  {
102  //Clear vectors of pointers to the nodes and elements
103  Node_pt.clear();
104  Bulk_element_pt.clear();
105  Interface_element_pt.clear();
106  Element_pt.clear();
107  Spine_pt.clear();
108  }
109 
110 
111  virtual void spine_node_update(SpineNode* spine_node_pt)
112  {
113  //Get fraction along the spine
114  double W = spine_node_pt->fraction();
115  //Get spine height
116  double H = spine_node_pt->h();
117 
118  //Get the position of the node at the origin
119  Vector<double> origin_pt(3);
120  origin_pt[0] = spine_node_pt->spine_pt()->geom_parameter(0);
121  origin_pt[2] = spine_node_pt->spine_pt()->geom_parameter(2);
122 
123  //set scale norm vector
124  double norm =
125  sqrt( (Xsim - origin_pt[0] ) * (Xsim - origin_pt[0] ) +
126  (Zsim - origin_pt[2] ) * (Zsim - origin_pt[2]) );
127 
128  //Set th x coordinate
129  spine_node_pt->x(0) = origin_pt[0] + H*W* (Xsim - origin_pt[0] )/norm;
130 
131  //Set the value of z
132  spine_node_pt->x(2) = origin_pt[2] + H*W* (Zsim - origin_pt[2] )/norm;
133 
134  }
135 
136 protected:
137 
138 
139 //Number of elements in x and z direction
140  unsigned int Nel_xz; //elements in x direction = N, elements in z direction = 2*N
141  unsigned int Nel_y; //Number of elements in y direction
142 
144  double Alpha;
145  double Length;
146  double Height;
147  double Radius;
148  unsigned int Flag;
149 
151  double Xsim;
152  double Zsim;
153 
154  //Face index for the outlet elements
156 
157 
158 
161 
164 
167 
168 // Vector of pointers to the surface elements which will generate the LinContElement
170 
171  void rotate_90( SpineMesh* rot_mesh_pt)
172  {
173  unsigned long nnode = rot_mesh_pt->nnode();
174  for(unsigned long i = 0; i<nnode;i++)
175  {
176  Node* node_pt = rot_mesh_pt->node_pt(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;
181  }
182 // We rotate as well the geometric parameters which were originally set as the coordinate of the node at the origin of the spine
183  unsigned long nspines = rot_mesh_pt->nspine();
184  for(unsigned long i = 0; i<nspines;i++)
185  {
186  Spine* spine_pt = rot_mesh_pt->spine_pt(i);
187  double x_spine = spine_pt->geom_parameter(0);
188  double z_spine = spine_pt->geom_parameter(2);
189  spine_pt->geom_parameter(0) = 1.0 - z_spine;
190  spine_pt->geom_parameter(2) = 1.0 + x_spine;
191  }
192 
193  //we update again the nodes
194  rot_mesh_pt->node_update();
195  }
196 
197 // Add the outlet elements from a quadratic mesh
199  {
200  int nx = add_mesh_pt->nx();
201  int ny = add_mesh_pt->ny();
202  int nz = add_mesh_pt->nz();
203  int j = ny -1;
204  for(int k =0; k<nz;k++)
205  {
206  for(int i =0; i<nx;i++)
207  {
208  ELEMENT *el_pt = dynamic_cast<ELEMENT*>(add_mesh_pt->element_pt(i+j*nx+k*nx*ny));
209  Bulk_outlet_element_pt.push_back(el_pt);
210  }
211  }
212 
213  }
214 
215  //Add the Interface Elements which will generate the LineCont Elements
217  {
218  int nx = add_mesh_pt->nx();
219  int ny = add_mesh_pt->ny();
220  int j = ny -1;
221  for(int i =0; i<nx;i++)
222  {
223  INTERFACE_ELEMENT *el_pt = dynamic_cast<INTERFACE_ELEMENT*>(add_mesh_pt->interface_element_pt(i+j*nx));
224  Interface_line_element_pt.push_back(el_pt);
225  }
226  }
227 
230  virtual void build_single_layer_mesh(TimeStepper* time_stepper_pt);
231 
232 // add side_mesh to the problem mesh
233  void add_side_spinemesh(unsigned int bound1, MyCanyonMesh<ELEMENT,INTERFACE_ELEMENT > *addmesh_pt,int *addmesh_map_boundary, int total_boundaries, unsigned flag);
234 
235 
236 };
237 
238 
239 
240 
241 //===========================================================================
246 
247 //===========================================================================
248 template<class ELEMENT, class INTERFACE_ELEMENT>
249 CombCanSpineMesh<ELEMENT, INTERFACE_ELEMENT>::CombCanSpineMesh(const unsigned int &nel_xz, const unsigned int &nel_y,
250  const double &alpha, const double &length, const double &height, const double &radius,
251  const unsigned int &flag, TimeStepper* time_stepper_pt):
252  Nel_xz(nel_xz), Nel_y(nel_y), Alpha(alpha), Length(length), Height(height), Radius(radius), Flag(flag)
253 {
254  // We've called the "generic" constructor for the RectangularQuadMesh
255  // which doesn't do much...
256  // Now set up the parameters that characterise the mesh geometry
257  // then call the constructor
258 
259 
260  // Periodic?
261 // MySimpleCubicQuadMesh<ELEMENT >::Xperiodic = false;
262 
263  // Now build the mesh:
264 
265 
266  build_single_layer_mesh(time_stepper_pt);
267 
268 }
269 
270 
271 
272 //===========================================================================
275 //===========================================================================
276 template<class ELEMENT, class INTERFACE_ELEMENT>
278  TimeStepper* time_stepper_pt)
279 {
280 
281 
282 // Axis pf simmetry
283  Xsim = 0.0;
284  Zsim = 1.0;
285 
286 // Fixed coordinate for the outlet bulk elements
287 
288  Face_index_outlet = 2;
289 
290  unsigned n_x = Nel_xz;
291  unsigned n_y = Nel_y;
292  unsigned n_z = Nel_xz;
293 
294  // Build the first canion mesh:
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);
296 
297 
298 //mesh1_pt->output("can1.dat");
299 
300 // We copy this mesh to our problem mesh
301 
302 
303 // add the nodes to the mesh
304 //we reasign the spine_nodes to point to the ptoblem mesh
305  for(unsigned i = 0; i< mesh1_pt->nnode(); i++)
306  {
307  //Set spine update flag equal to 0 for the nodes of this function
308  mesh1_pt->node_pt(i)->node_update_fct_id() = Flag;
309  mesh1_pt->node_pt(i)->spine_mesh_pt() = this;
310  this->add_node_pt(mesh1_pt->node_pt(i));
311  }
312 
313  // add the bulk elements to the mesh
314  for(unsigned i = 0; i< mesh1_pt->nbulk(); i++)
315  {
316  Bulk_element_pt.push_back(mesh1_pt->bulk_element_pt(i));
317  }
318 
319  // add the interface elements to the mesh
320 for(unsigned i = 0; i< mesh1_pt->ninterface_element(); i++)
321  {
322  Interface_element_pt.push_back(mesh1_pt->interface_element_pt(i));
323  }
324 
325 // add all the elements to the mesh
326 for(unsigned i = 0; i< mesh1_pt->nelement(); i++)
327  {
328  Element_pt.push_back(mesh1_pt->element_pt(i));
329  }
330 
331 
332  // add the spines to the mesh
333 for(unsigned i = 0; i< mesh1_pt->nspine(); i++)
334  {
335  Spine_pt.push_back(mesh1_pt->spine_pt(i));
336  }
337 
338 //add the boundaries
339  set_nboundary( mesh1_pt->nboundary());
340 
341 for(unsigned b =0; b< mesh1_pt->nboundary(); b++)
342  {
343  for(unsigned i = 0; i<mesh1_pt->nboundary_node(b); i++)
344  {
345  // We remove the node from the old boundary mesh ( This is not necessary and it is mainly wrotten for avoiding the warning message)
346  Node* node_pt = mesh1_pt->boundary_node_pt(b,i );
347  node_pt->remove_from_boundary(b);
348  this->add_boundary_node( b , node_pt);
349  }
350  }
351 
352 // add the outlet bulk and interface line elements
353  add_outlet_bulk_elements(mesh1_pt);
354  add_line_interface_elements(mesh1_pt);
355 
356 //We create a second mesh
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);
358 
359 
360  //mesh2_pt->output("can2.dat");
361 
362 //Resignation pointer for the boundary conditions of the second mesh
363  int addmesh_map_boundary[6];
364 
365  for(unsigned int i =0;i<6;i++)
366  {
367  addmesh_map_boundary[i] = i;
368  }
369 
370  addmesh_map_boundary[0] = 2;
371  addmesh_map_boundary[2] = 6;
372  addmesh_map_boundary[4] = -1;
373 
374 // add the outlet bulk and interface line elements
375  add_outlet_bulk_elements(mesh2_pt);
376  add_line_interface_elements(mesh2_pt);
377 
378  add_side_spinemesh(2, mesh2_pt ,addmesh_map_boundary, 7,Flag);
379 
380 
381 //We create a third mesh
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);
383 
384 //We rotate the mesh
385  rotate_90(mesh3_pt);
386 
387  //mesh3_pt->output("can3.dat");
388 
389 //Resignation pointer for the boundary conditions of the third mesh
390 
391  for(unsigned int i =0;i<6;i++)
392  {
393  addmesh_map_boundary[i] = i;
394  }
395 
396  addmesh_map_boundary[2] = 6;
397  addmesh_map_boundary[0] = 2;
398  addmesh_map_boundary[4] = -1;
399 
400  add_side_spinemesh(6, mesh3_pt ,addmesh_map_boundary, 7,Flag);
401 
402 // add the outlet bulk and interface line elements
403  add_outlet_bulk_elements(mesh3_pt);
404  add_line_interface_elements(mesh3_pt);
405 
406 //We create a fourth mesh
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);
408 
409 //We rotate the mesh
410  rotate_90(mesh4_pt);
411 
412  //mesh4_pt->output("can4.dat");
413 
414 //Resignation pointer for the boundary conditions of the third mesh
415 
416  for(unsigned int i =0;i<6;i++)
417  {
418  addmesh_map_boundary[i] = i;
419  }
420 
421  addmesh_map_boundary[2] = 4;
422  addmesh_map_boundary[0] = 6;
423  addmesh_map_boundary[4] = -1;
424 
425 // add the outlet bulk and interface line elements
426  add_outlet_bulk_elements(mesh4_pt);
427  add_line_interface_elements(mesh4_pt);
428 
429  add_side_spinemesh(6, mesh4_pt ,addmesh_map_boundary, 7,Flag);
430 
431 
432  std::cout
433  <<"The canyon mesh consists of "
434  <<nbulk()<<" bulk elements and "
435  <<ninterface_element()<< " interface elements."<<std::endl;
436 
437 
438 // At the end we destroy the block meshes in two steps
439 
440 // 1. We disconect the meshesh from the nodes and elements (if not we delete them at the time we delete the meshes)
445 
446 //2. Simply delete (this function can give a segmentation fault error when there are spines still attached to the old update functions written in the constructor)
447  delete mesh1_pt;
448  delete mesh2_pt;
449  delete mesh3_pt;
450  delete mesh4_pt;
451 
452 
453 // until now we have just worked with a square channel
454 // introduce the aspect ratio and different lenght (there is a factor 2 becasue 1 = halve height= b/2)
455  int ncount;
456  ncount = this->nnode();
457  for(int i = 0; i< ncount; i++)
458  {
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;
463  }
464 
465 // Update also the origin of the spines
466  unsigned long nspines = this->nspine();
467  for(unsigned long i = 0; i<nspines;i++)
468  {
469  Spine* spine_pt = this->spine_pt(i);
470  double x_spine = spine_pt->geom_parameter(0);
471  double y_spine = spine_pt->geom_parameter(1);
472  double z_spine = spine_pt->geom_parameter(2);
473  spine_pt->geom_parameter(0) = x_spine *Alpha/2.0;
474  spine_pt->geom_parameter(1) = y_spine * Length;
475  spine_pt->geom_parameter(2) = z_spine * Height/2.0;
476  }
477 
478 
479  Zsim = Zsim * Height/2.0;
480 
481 // Update the spines heigth according to the new geometry
482  ncount = this->nboundary_node(5);
483 
484  for(int i = 0; i< ncount; i++)
485  {
486  SpineNode* spine_node_pt = dynamic_cast<SpineNode*>(this->boundary_node_pt(5,i));
487  Spine* spine_pt = spine_node_pt->spine_pt();
488  double x_spine = spine_pt->geom_parameter(0);
489  double z_spine = spine_pt->geom_parameter(2);
490 
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;
494 
495  }
496 
497  //Get the position of the node at the origin
498 // SpineNode* origin_pt = dynamic_cast<SpineNode*>(spine_node_pt->spine_pt()->geom_data_pt(0));
499 
500 
501 }
502 
503 
504 
505 
506 //Agregate a MySpineMesh to the problem mesh mesh_pt
507 //The function neeeds the pointer to the new added mes;, the sahred boundary of the problem mesh;
508 //a pointer which is a map between the boundaries in the addeed mesh and their new values when the mesh
509 //is attached (we will set as convection boundary = -1 for the shared boundary), the new total value of boundaries and a flag
510 // which will be used by the function update_node ( so that all the sub meshes with the same flag will be updated using the same function)
511 
512 //This function can not be extended to adding every spine_mesh because the class SpineMesh lacks the bulk and interface element pointers
513 
514 template<class ELEMENT, class INTERFACE_ELEMENT> void CombCanSpineMesh<ELEMENT, INTERFACE_ELEMENT>::add_side_spinemesh(unsigned int bound1,
515  MyCanyonMesh<ELEMENT,INTERFACE_ELEMENT > *addmesh_pt, int *addmesh_map_boundary, int total_boundaries, unsigned spine_flag)
516 {
517 
518  //Call the generic function
519  MeshHelper::merge_spine_meshes(this,bound1,addmesh_pt,addmesh_map_boundary,
520  total_boundaries,spine_flag);
521 
522 // add the bulk elements to the mesh
523  for(unsigned i = 0; i< addmesh_pt->nbulk(); i++)
524  {
525  this->Bulk_element_pt.push_back(addmesh_pt->bulk_element_pt(i));
526  }
527 
528  // add the interface elements to the mesh
529 for(unsigned i = 0; i< addmesh_pt->ninterface_element(); i++)
530  {
531  this->Interface_element_pt.push_back(addmesh_pt->interface_element_pt(i));
532  }
533 
534 }
535 
536 
537 
538 #endif
539 
540 
544 
545 
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
Definition: nodes.h:906
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
Definition: spines.h:613
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
Definition: spines.h:328
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
Definition: spines.h:64
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
radius
Definition: UniformPSDSelfTest.py:15
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