collapsible_channel_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-2025 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// Include guards
27#ifndef OOMPH_COLLAPSIBLE_CHANNEL_MESH_HEADER
28#define OOMPH_COLLAPSIBLE_CHANNEL_MESH_HEADER
29
30// Generic includes
33#include "generic/domain.h"
34#include "generic/quad_mesh.h"
35
36// Mesh is based on simple_rectangular_quadmesh
38
39// Include *.template.cc to allow building the templated member functions
41
42// We need to include the templated sources for algebraic meshes
43// to allow the build of all templates.
45
46// Include the headers file for collapsible channel
48
49namespace oomph
50{
51 //========================================================================
52 /// Basic collapsible channel mesh.
53 /// The mesh is derived from the \c SimpleRectangularQuadMesh
54 /// so it's node and element numbering scheme is the same
55 /// as in that mesh. Only the boundaries are numbered differently
56 /// to allow the easy identification of the "collapsible" segment.
57 /// Boundary coordinates are set up for all nodes
58 /// located on boundary 3 (the collapsible segment).
59 /// The curvilinear ("collapsible") segment is defined by
60 /// a \c GeomObject.
61 //========================================================================
62 template<class ELEMENT>
64 {
65 public:
66 /// Constructor: Pass number of elements in upstream/collapsible/
67 /// downstream segment and across the channel; lengths of upstream/
68 /// collapsible/downstream segments and width of channel, pointer to
69 /// GeomObject that defines the collapsible segment and pointer to
70 /// TimeStepper (defaults to the default timestepper, Steady).
72 const unsigned& nup,
73 const unsigned& ncollapsible,
74 const unsigned& ndown,
75 const unsigned& ny,
76 const double& lup,
77 const double& lcollapsible,
78 const double& ldown,
79 const double& ly,
81 TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper);
82
83 /// destructor
85 {
86 delete Domain_pt;
87 }
88
89 /// Access function to GeomObject representing wall
91 {
92 return Wall_pt;
93 }
94
95 /// Access function to domain
100
101 /// Function pointer for function that squashes
102 /// the mesh near the walls. Default trivial mapping (the identity)
103 /// leaves vertical nodal positions unchanged. Mapping is
104 /// used in underlying CollapsibleChannelDomain. Virtual
105 /// so we can break it in derived classes (e.g. the Algebraic
106 /// versions of this mesh where it doesn't make any sense
107 /// to provide the bl_squash_fct after the mesh has been built).
112
113
114 /// Function pointer for function that squashes
115 /// the mesh near the walls. Default trivial mapping (the identity)
116 /// leaves vertical nodal positions unchanged. Mapping is
117 /// used in underlying CollapsibleChannelDomain. Const version.
122
123
124 /// Function pointer for function that redistributes the
125 /// elements in the axial direction. Virtual
126 /// so we can break it in derived classes (e.g. the Algebraic
127 /// versions of this mesh where it doesn't make any sense
128 /// to provide the bl_squash_fct after the mesh has been built).
133
134
135 /// Function pointer for function that redistributes the
136 /// elements in the axial direction. Const version
142
143 protected:
144 /// Pointer to domain
146
147 /// Number of element columns in upstream part
148 unsigned Nup;
149
150 /// Number of element columns in collapsible part
151 unsigned Ncollapsible;
152
153 /// Number of element columns in downstream part
154 unsigned Ndown;
155
156 /// Number of element rows across channel
157 unsigned Ny;
158
159 /// Pointer to geometric object that represents the moving wall
161 };
162
163
164 /////////////////////////////////////////////////////////////////////
165 /////////////////////////////////////////////////////////////////////
166 /////////////////////////////////////////////////////////////////////
167
168 //===================================================================
169 /// Refineable collapsible channel mesh.
170 /// The mesh is derived from the \c SimpleRectangularQuadMesh
171 /// so it's node and element numbering scheme is the same
172 /// as in that mesh. Only the boundaries are numbered differently
173 /// to allow the easy identification of the "collapsible" segment.
174 /// Boundary coordinates are set up for all nodes
175 /// located on boundary 3 (the collapsible segment).
176 /// The curvilinear ("collapsible") segment is defined by
177 /// a \c GeomObject.
178 //====================================================================
179 template<class ELEMENT>
181 : public virtual CollapsibleChannelMesh<ELEMENT>,
182 public RefineableQuadMesh<ELEMENT>
183 {
184 public:
185 /// Constructor: Pass number of elements, lengths, pointer to
186 /// geometric object that describes the wall and timestepper
188 const unsigned& nup,
189 const unsigned& ncollapsible,
190 const unsigned& ndown,
191 const unsigned& ny,
192 const double& lup,
193 const double& lcollapsible,
194 const double& ldown,
195 const double& ly,
197 TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
198 : CollapsibleChannelMesh<ELEMENT>(nup,
199 ncollapsible,
200 ndown,
201 ny,
202 lup,
204 ldown,
205 ly,
206 wall_pt,
207 time_stepper_pt)
208 {
209 // Build quadtree forest
210 this->setup_quadtree_forest();
211 }
212
213 /// Destructor(empty)
215 };
216
217
218 /////////////////////////////////////////////////////////////////////
219 /////////////////////////////////////////////////////////////////////
220 /////////////////////////////////////////////////////////////////////
221
222 //=====start_of_mesh=======================================================
223 /// Collapsible channel mesh with MacroElement-based node update.
224 /// The collapsible segment is represented by the specified geometric object.
225 /// Some or all of the geometric Data in that geometric object
226 /// may contain unknowns in the global Problem. The dependency
227 /// on these unknowns is taken into account when setting up
228 /// the Jacobian matrix of the elements. For this purpose,
229 /// the element (whose type is specified by the template parameter)
230 /// must inherit from MacroElementNodeUpdateElementBase.
231 //========================================================================
232 template<class ELEMENT>
234 : public virtual MacroElementNodeUpdateMesh,
235 public virtual CollapsibleChannelMesh<ELEMENT>
236 {
237 public:
238 /// Constructor: Pass numbers of elements and dimensions of the
239 /// various parts of the collapsible channel, pointer to
240 /// geometric object that represents the wall and pointer to
241 /// timestepper (defaults to Steady).
243 const unsigned& nup,
244 const unsigned& ncollapsible,
245 const unsigned& ndown,
246 const unsigned& ny,
247 const double& lup,
248 const double& lcollapsible,
249 const double& ldown,
250 const double& ly,
252 TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
253 : CollapsibleChannelMesh<ELEMENT>(nup,
254 ncollapsible,
255 ndown,
256 ny,
257 lup,
259 ldown,
260 ly,
261 wall_pt,
262 time_stepper_pt)
263 {
264#ifdef PARANOID
265 ELEMENT* el_pt = new ELEMENT;
266 if (dynamic_cast<MacroElementNodeUpdateElementBase*>(el_pt) == 0)
267 {
268 std::ostringstream error_message;
269 error_message << "Base class for ELEMENT in "
270 << "MacroElementNodeUpdateCollapsibleChannelMesh needs"
271 << "to be of type MacroElementNodeUpdateElement!\n";
272 error_message << "Whereas it is: typeid(el_pt).name()"
273 << typeid(el_pt).name() << std::endl;
274
275 std::string function_name =
276 "MacroElementNodeUpdateCollapsibleChannelMesh::\n";
277 function_name += "MacroElementNodeUpdateCollapsibleChannelMesh()";
278
279 throw OomphLibError(error_message.str(),
282 }
283 delete el_pt;
284#endif
285
286 // Setup all the information that's required for MacroElement-based
287 // node update: Tell the elements that their geometry depends on the
288 // wall geometric object
289 unsigned n_element = this->nelement();
290 for (unsigned i = 0; i < n_element; i++)
291 {
292 // Upcast from FiniteElement to the present element
293 ELEMENT* el_pt = dynamic_cast<ELEMENT*>(this->element_pt(i));
294
295#ifdef PARANOID
296 // Check if cast is successful
299 if (m_el_pt == 0)
300 {
301 std::ostringstream error_message;
302 error_message
303 << "Failed to upcast to MacroElementNodeUpdateElementBase\n";
304 error_message << "Element must be derived from "
305 "MacroElementNodeUpdateElementBase\n";
306 error_message << "but it is of type " << typeid(el_pt).name();
307
308 std::string function_name =
309 "MacroElementNodeUpdateCollapsibleChannelMesh::\n";
310 function_name += "MacroElementNodeUpdateCollapsibleChannelMesh()";
311
312 throw OomphLibError(error_message.str(),
315 }
316#endif
317
318 // There's just one GeomObject
319 Vector<GeomObject*> geom_object_pt(1);
320 geom_object_pt[0] = this->Wall_pt;
321
322 // Tell the element which geom objects its macro-element-based
323 // node update depends on
324 el_pt->set_node_update_info(geom_object_pt);
325 }
326
327 // Add the geometric object(s) for the wall to the mesh's storage
328 Vector<GeomObject*> geom_object_pt(1);
329 geom_object_pt[0] = this->Wall_pt;
331
332 // Fill in the domain pointer to the mesh's storage in the base class
334
335 } // end of constructor
336
337
338 /// Destructor: empty
340
341 }; // end of mesh
342
343
344 ////////////////////////////////////////////////////////////////////////////
345 ////////////////////////////////////////////////////////////////////////////
346 ////////////////////////////////////////////////////////////////////////////
347
348 //=====start_of_mesh=======================================================
349 /// Refineable collapsible channel mesh with MacroElement-based node update.
350 /// The collapsible segment is represented by the specified geometric object.
351 /// Some or all of the geometric Data in that geometric object
352 /// may contain unknowns in the global Problem. The dependency
353 /// on these unknowns is taken into account when setting up
354 /// the Jacobian matrix of the elements. For this purpose,
355 /// the element (whose type is specified by the template parameter)
356 /// must inherit from MacroElementNodeUpdateElementBase.
357 //========================================================================
358 template<class ELEMENT>
360 : public virtual MacroElementNodeUpdateCollapsibleChannelMesh<ELEMENT>,
361 public virtual RefineableQuadMesh<ELEMENT>
362 {
363 public:
364 /// Constructor: Pass numbers of elements and dimensions of the
365 /// various parts of the collapsible channel, pointer to
366 /// geometric object that represents the wall and pointer to
367 /// timestepper (defaults to Steady).
369 const unsigned& nup,
370 const unsigned& ncollapsible,
371 const unsigned& ndown,
372 const unsigned& ny,
373 const double& lup,
374 const double& lcollapsible,
375 const double& ldown,
376 const double& ly,
378 TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
379 : CollapsibleChannelMesh<ELEMENT>(nup,
380 ncollapsible,
381 ndown,
382 ny,
383 lup,
385 ldown,
386 ly,
387 wall_pt,
388 time_stepper_pt),
390 ncollapsible,
391 ndown,
392 ny,
393 lup,
395 ldown,
396 ly,
397 wall_pt,
398 time_stepper_pt)
399 {
400 // Build quadtree forest
401 this->setup_quadtree_forest();
402 }
403
404 /// Destructor: empty
406
407 }; // end of mesh
408
409
410 /////////////////////////////////////////////////////////////////////
411 /////////////////////////////////////////////////////////////////////
412 /////////////////////////////////////////////////////////////////////
413
414 //========start_of_algebraic_collapsible_channel_mesh==============
415 /// Collapsible channel mesh with algebraic node update
416 //=================================================================
417 template<class ELEMENT>
419 : public virtual CollapsibleChannelMesh<ELEMENT>,
420 public AlgebraicMesh
421 {
422 public:
423 /// Constructor: Pass number of elements in upstream/collapsible/
424 /// downstream segment and across the channel; lengths of upstream/
425 /// collapsible/downstream segments and width of channel, pointer to
426 /// GeomObject that defines the collapsible segment and pointer to
427 /// TimeStepper (defaults to the default timestepper, Steady).
429 const unsigned& nup,
430 const unsigned& ncollapsible,
431 const unsigned& ndown,
432 const unsigned& ny,
433 const double& lup,
434 const double& lcollapsible,
435 const double& ldown,
436 const double& ly,
438 TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
439 : CollapsibleChannelMesh<ELEMENT>(nup,
440 ncollapsible,
441 ndown,
442 ny,
443 lup,
445 ldown,
446 ly,
447 wall_pt,
448 time_stepper_pt)
449 {
450 // Add the geometric object to the list associated with this AlgebraicMesh
452
453 // Setup algebraic node update operations
455 }
456
457 /// Destructor: empty
459
460
461 /// Constructor: Pass number of elements in upstream/collapsible/
462 /// downstream segment and across the channel; lengths of upstream/
463 /// collapsible/downstream segments and width of channel, pointer to
464 /// GeomObject that defines the collapsible segment and pointer to
465 /// TimeStepper (defaults to the default timestepper, Steady).
467 const unsigned& nup,
468 const unsigned& ncollapsible,
469 const unsigned& ndown,
470 const unsigned& ny,
471 const double& lup,
472 const double& lcollapsible,
473 const double& ldown,
474 const double& ly,
477 TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
478 : CollapsibleChannelMesh<ELEMENT>(nup,
479 ncollapsible,
480 ndown,
481 ny,
482 lup,
484 ldown,
485 ly,
486 wall_pt,
487 time_stepper_pt)
488 {
489 // Add the geometric object to the list associated with this AlgebraicMesh
491
492 // Set boundary layer squash function
493 this->Domain_pt->bl_squash_fct_pt() = bl_squash_function_pt;
494
495 // Do MacroElement-based node update
497
498 // Setup algebraic node update operations
500 }
501
502 /// Function pointer for function that squashes
503 /// the mesh near the walls. Default trivial mapping (the identity)
504 /// leaves vertical nodal positions unchanged. Mapping is
505 /// used in underlying CollapsibleChannelDomain. Broken function
506 /// that overloads the version in the CollapsibleChannelMesh.
507 /// It does not make sense to specify the function pointer
508 /// after the mesh has been set up!
510 {
511 std::ostringstream error_message;
512 error_message
513 << "It does not make sense to set the bl_squash_fct_pt \n"
514 << "outside the constructor as it's only used to set up the \n"
515 << "algebraic remesh data when the algebraic mesh is first built. \n";
516 std::string function_name =
517 "AlgebraicCollapsibleChannelMesh::bl_squash_fct_pt()\n";
518
519 throw OomphLibError(
521
522 // Dummy return
523 return Dummy_fct_pt;
524 }
525
526
527 /// Function pointer for function that redistributes nodes
528 /// axially. Default trivial mapping (the identity)
529 /// leaves vertical nodal positions unchanged. Mapping is
530 /// used in underlying CollapsibleChannelDomain. Broken function
531 /// that overloads the version in the CollapsibleChannelMesh.
532 /// It does not make sense to specify the function pointer
533 /// after the mesh has been set up!
535 {
536 std::ostringstream error_message;
537 error_message
538 << "It does not make sense to set the axial_spacing_fct_pt \n"
539 << "outside the constructor as it's only used to set up the \n"
540 << "algebraic remesh data when the algebraic mesh is first built. \n";
541 std::string function_name =
542 "AlgebraicCollapsibleChannelMesh::axial_spacing_fct_pt()\n";
543
544 throw OomphLibError(
546
547 // Dummy return
548 return Dummy_fct_pt;
549 }
550
551
552 /// Update nodal position at time level t (t=0: present;
553 /// t>0: previous)
554 void algebraic_node_update(const unsigned& t, AlgebraicNode*& node_pt);
555
556 /// Update the node-udate data after mesh adaptation.
557 /// Empty -- no update of node update required as this is
558 /// non-refineable mesh.
560
561 protected:
562 /// Function to setup the algebraic node update
564
565 /// Dummy function pointer
567 };
568
569
570 ///////////////////////////////////////////////////////////////////////////
571 ///////////////////////////////////////////////////////////////////////////
572 ///////////////////////////////////////////////////////////////////////////
573
574 //=====start_of_refineable_algebraic_collapsible_channel_mesh=====
575 /// Refineable version of the CollapsibleChannel mesh with
576 /// algebraic node update.
577 //=================================================================
578 template<class ELEMENT>
580 : public RefineableQuadMesh<ELEMENT>,
581 public virtual AlgebraicCollapsibleChannelMesh<ELEMENT>
582 {
583 public:
584 /// Constructor: Pass number of elements in upstream/collapsible/
585 /// downstream segment and across the channel; lengths of upstream/
586 /// collapsible/downstream segments and width of channel, pointer to
587 /// GeomObject that defines the collapsible segment and pointer to
588 /// TimeStepper (defaults to the default timestepper, Steady).
590 const unsigned& nup,
591 const unsigned& ncollapsible,
592 const unsigned& ndown,
593 const unsigned& ny,
594 const double& lup,
595 const double& lcollapsible,
596 const double& ldown,
597 const double& ly,
599 TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
600 : CollapsibleChannelMesh<ELEMENT>(nup,
601 ncollapsible,
602 ndown,
603 ny,
604 lup,
606 ldown,
607 ly,
608 wall_pt,
609 time_stepper_pt),
611 ncollapsible,
612 ndown,
613 ny,
614 lup,
616 ldown,
617 ly,
618 wall_pt,
619 time_stepper_pt)
620 {
621 // Build quadtree forest
622 this->setup_quadtree_forest();
623 }
624
625
626 /// Constructor: Pass number of elements in upstream/collapsible/
627 /// downstream segment and across the channel; lengths of upstream/
628 /// collapsible/downstream segments and width of channel, pointer to
629 /// GeomObject that defines the collapsible segment and pointer to
630 /// TimeStepper (defaults to the default timestepper, Steady).
632 const unsigned& nup,
633 const unsigned& ncollapsible,
634 const unsigned& ndown,
635 const unsigned& ny,
636 const double& lup,
637 const double& lcollapsible,
638 const double& ldown,
639 const double& ly,
642 TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
643 : CollapsibleChannelMesh<ELEMENT>(nup,
644 ncollapsible,
645 ndown,
646 ny,
647 lup,
649 ldown,
650 ly,
651 wall_pt,
652 time_stepper_pt),
654 ncollapsible,
655 ndown,
656 ny,
657 lup,
659 ldown,
660 ly,
661 wall_pt,
663 time_stepper_pt)
664 {
665 // Build quadtree forest
666 this->setup_quadtree_forest();
667 }
668
669 /// Update the node update data for specified node following
670 /// any mesh adapation
672 };
673
674} // namespace oomph
675
677#endif
cstr elem_len * i
Definition cfortran.h:603
char t
Definition cfortran.h:568
Collapsible channel mesh with algebraic node update.
AlgebraicCollapsibleChannelMesh(const unsigned &nup, const unsigned &ncollapsible, const unsigned &ndown, const unsigned &ny, const double &lup, const double &lcollapsible, const double &ldown, const double &ly, GeomObject *wall_pt, CollapsibleChannelDomain::BLSquashFctPt bl_squash_function_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass number of elements in upstream/collapsible/ downstream segment and across the chann...
void setup_algebraic_node_update()
Function to setup the algebraic node update.
CollapsibleChannelDomain::BLSquashFctPt Dummy_fct_pt
Dummy function pointer.
virtual ~AlgebraicCollapsibleChannelMesh()
Destructor: empty.
void update_node_update(AlgebraicNode *&node_pt)
Update the node-udate data after mesh adaptation. Empty – no update of node update required as this i...
AlgebraicCollapsibleChannelMesh(const unsigned &nup, const unsigned &ncollapsible, const unsigned &ndown, const unsigned &ny, const double &lup, const double &lcollapsible, const double &ldown, const double &ly, GeomObject *wall_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass number of elements in upstream/collapsible/ downstream segment and across the chann...
CollapsibleChannelDomain::BLSquashFctPt & bl_squash_fct_pt()
Function pointer for function that squashes the mesh near the walls. Default trivial mapping (the ide...
CollapsibleChannelDomain::BLSquashFctPt & axial_spacing_fct_pt()
Function pointer for function that redistributes nodes axially. Default trivial mapping (the identity...
void algebraic_node_update(const unsigned &t, AlgebraicNode *&node_pt)
Update nodal position at time level t (t=0: present; t>0: previous)
Algebraic meshes contain AlgebraicElements and AlgebraicNodes. They implement the node update functio...
void add_geom_object_list_pt(GeomObject *geom_object_pt)
Add the specified GeomObject to the list of geometric objects associated with this AlgebraicMesh; rem...
AlgebraicNode * node_pt(const unsigned long &n)
Return a pointer to the n-th global AlgebraicNode.
Algebraic nodes are nodes with an algebraic positional update function.
AxialSpacingFctPt & axial_spacing_fct_pt()
Function pointer for function that implements axial spacing of macro elements.
double(* BLSquashFctPt)(const double &s)
Typedef for function pointer for function that squashes the macro elements near the wall to help reso...
double(* AxialSpacingFctPt)(const double &xi)
Typedef for function pointer for function that implements axial spacing of macro elements.
BLSquashFctPt & bl_squash_fct_pt()
Function pointer for function that squashes the macro elements near wall. Default mapping (identity) ...
Basic collapsible channel mesh. The mesh is derived from the SimpleRectangularQuadMesh so it's node a...
virtual CollapsibleChannelDomain::AxialSpacingFctPt & axial_spacing_fct_pt()
Function pointer for function that redistributes the elements in the axial direction....
GeomObject * Wall_pt
Pointer to geometric object that represents the moving wall.
CollapsibleChannelDomain * domain_pt()
Access function to domain.
virtual CollapsibleChannelDomain::BLSquashFctPt & bl_squash_fct_pt()
Function pointer for function that squashes the mesh near the walls. Default trivial mapping (the ide...
CollapsibleChannelDomain::BLSquashFctPt bl_squash_fct_pt() const
Function pointer for function that squashes the mesh near the walls. Default trivial mapping (the ide...
GeomObject *& wall_pt()
Access function to GeomObject representing wall.
virtual CollapsibleChannelDomain::AxialSpacingFctPt & axial_spacing_fct_pt() const
Function pointer for function that redistributes the elements in the axial direction....
unsigned Ncollapsible
Number of element columns in collapsible part.
unsigned Nup
Number of element columns in upstream part.
unsigned Ndown
Number of element columns in downstream part.
CollapsibleChannelDomain * Domain_pt
Pointer to domain.
unsigned Ny
Number of element rows across channel.
A geometric object is an object that provides a parametrised description of its shape via the functio...
Collapsible channel mesh with MacroElement-based node update. The collapsible segment is represented ...
MacroElementNodeUpdateCollapsibleChannelMesh(const unsigned &nup, const unsigned &ncollapsible, const unsigned &ndown, const unsigned &ny, const double &lup, const double &lcollapsible, const double &ldown, const double &ly, GeomObject *wall_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass numbers of elements and dimensions of the various parts of the collapsible channel,...
Base class for elements that allow MacroElement-based node update.
MacroElementNodeUpdateMeshes contain MacroElementNodeUpdateNodes which have their own node update fun...
void set_geom_object_vector_pt(Vector< GeomObject * > geom_object_vector_pt)
Set geometric objects associated with MacroElementNodeUpdateMesh; this must also be called from the c...
Domain *& macro_domain_pt()
Broken assignment operator.
Refineable collapsible channel mesh with MacroElement-based node update. The collapsible segment is r...
MacroElementNodeUpdateRefineableCollapsibleChannelMesh(const unsigned &nup, const unsigned &ncollapsible, const unsigned &ndown, const unsigned &ny, const double &lup, const double &lcollapsible, const double &ldown, const double &ly, GeomObject *wall_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass numbers of elements and dimensions of the various parts of the collapsible channel,...
static Steady< 0 > Default_TimeStepper
Default Steady Timestepper, to be used in default arguments to Mesh constructors.
Definition mesh.h:75
virtual void node_update(const bool &update_all_solid_nodes=false)
Update nodal positions in response to changes in the domain shape. Uses the FiniteElement::get_x(....
Definition mesh.cc:287
const Vector< GeneralisedElement * > & element_pt() const
Return reference to the Vector of elements.
Definition mesh.h:464
unsigned long nelement() const
Return number of elements in the mesh.
Definition mesh.h:598
An OomphLibError object which should be thrown when an run-time error is encountered....
Refineable version of the CollapsibleChannel mesh with algebraic node update.
void update_node_update(AlgebraicNode *&node_pt)
Update the node update data for specified node following any mesh adapation.
RefineableAlgebraicCollapsibleChannelMesh(const unsigned &nup, const unsigned &ncollapsible, const unsigned &ndown, const unsigned &ny, const double &lup, const double &lcollapsible, const double &ldown, const double &ly, GeomObject *wall_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass number of elements in upstream/collapsible/ downstream segment and across the chann...
RefineableAlgebraicCollapsibleChannelMesh(const unsigned &nup, const unsigned &ncollapsible, const unsigned &ndown, const unsigned &ny, const double &lup, const double &lcollapsible, const double &ldown, const double &ly, GeomObject *wall_pt, CollapsibleChannelDomain::BLSquashFctPt bl_squash_function_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass number of elements in upstream/collapsible/ downstream segment and across the chann...
Refineable collapsible channel mesh. The mesh is derived from the SimpleRectangularQuadMesh so it's n...
RefineableCollapsibleChannelMesh(const unsigned &nup, const unsigned &ncollapsible, const unsigned &ndown, const unsigned &ny, const double &lup, const double &lcollapsible, const double &ldown, const double &ly, GeomObject *wall_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass number of elements, lengths, pointer to geometric object that describes the wall an...
Intermediate mesh class that implements the mesh adaptation functions specified in the TreeBasedRefin...
void setup_quadtree_forest()
Set up QuadTreeForest. Wipes any existing tree structure below the minimum refinement level and regar...
Simple rectangular 2D Quad mesh class. Nx : number of elements in the x direction.
const unsigned & ny() const
Access function for number of elements in y directions.
TAdvectionDiffusionReactionElement<NREAGENT,DIM,NNODE_1D> elements are isoparametric triangular DIM-d...
Base class for time-stepping schemes. Timestepper provides an approximation of the temporal derivativ...
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).