thin_layer_brick_on_tet_mesh.template.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 OOMPH_THIN_LAYER_BRICK_ON_TET_MESH_HEADER
27 #define OOMPH_THIN_LAYER_BRICK_ON_TET_MESH_HEADER
28 
29 
30 #include "../generic/brick_mesh.h"
31 #include "../generic/refineable_brick_mesh.h"
32 
33 namespace oomph
34 {
35  //========================================================================
39  //========================================================================
40  template<class ELEMENT>
41  class ThinLayerBrickOnTetMesh : public virtual BrickMeshBase
42  {
43  public:
46  typedef void (*ThicknessFctPt)(const Vector<double>& x, double& h_thick);
47 
63  Mesh* tet_mesh_pt,
64  const Vector<unsigned>& boundary_ids,
65  ThicknessFctPt thickness_fct_pt,
66  const unsigned& nlayer,
68  TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper);
69 
70 
75  {
76  return FSI_boundary_id;
77  }
78 
82  unsigned outer_boundary_id()
83  {
84  return Outer_boundary_id;
85  }
86 
90  Vector<unsigned> in_out_boundary_id(const unsigned& boundary_id)
91  {
92  return In_out_boundary_id[boundary_id];
93  }
94 
95 
96  private:
101 
105 
109 
113  };
114 
115 
119 
120 
121  //========================================================================
125  //========================================================================
126  template<class ELEMENT>
128  : public virtual ThinLayerBrickOnTetMesh<ELEMENT>,
129  public virtual RefineableBrickMesh<ELEMENT>
130  {
131  public:
134  typedef void (*ThicknessFctPt)(const Vector<double>& x, double& h_thick);
135 
151  Mesh* tet_mesh_pt,
152  const Vector<unsigned>& boundary_ids,
153  ThicknessFctPt thickness_fct_pt,
154  const unsigned& nlayer,
156  TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
157  : ThinLayerBrickOnTetMesh<ELEMENT>(tet_mesh_pt,
158  boundary_ids,
159  thickness_fct_pt,
160  nlayer,
162  time_stepper_pt)
163  {
164  // Nodal positions etc. were created in constructor for
165  // nonrefineable mesh. Only need to setup quadtree forest
166  this->setup_octree_forest();
167  }
168  };
169 
170 
174 
175 
176  //========================================================================
180  //========================================================================
181  template<class ELEMENT>
183  : public virtual ThinLayerBrickOnTetMesh<ELEMENT>,
184  public virtual SolidMesh
185  {
186  public:
189  typedef void (*ThicknessFctPt)(const Vector<double>& x, double& h_thick);
190 
206  Mesh* tet_mesh_pt,
207  const Vector<unsigned>& boundary_ids,
208  ThicknessFctPt thickness_fct_pt,
209  const unsigned& nlayer,
211  TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
212  : ThinLayerBrickOnTetMesh<ELEMENT>(tet_mesh_pt,
213  boundary_ids,
214  thickness_fct_pt,
215  nlayer,
217  time_stepper_pt)
218  {
219  // Make the current configuration the undeformed one by
220  // setting the nodal Lagrangian coordinates to their current
221  // Eulerian ones
223  }
224  };
225 
226 
230 
231 
232  //========================================================================
236  //========================================================================
237  template<class ELEMENT>
239  : public virtual ThinLayerBrickOnTetMesh<ELEMENT>,
240  public virtual RefineableBrickMesh<ELEMENT>,
241  public virtual SolidMesh
242  {
243  public:
246  typedef void (*ThicknessFctPt)(const Vector<double>& x, double& h_thick);
247 
263  Mesh* tet_mesh_pt,
264  const Vector<unsigned>& boundary_ids,
265  ThicknessFctPt thickness_fct_pt,
266  const unsigned& nlayer,
268  TimeStepper* time_stepper_pt = &Mesh::Default_TimeStepper)
269  : ThinLayerBrickOnTetMesh<ELEMENT>(tet_mesh_pt,
270  boundary_ids,
271  thickness_fct_pt,
272  nlayer,
274  time_stepper_pt)
275  {
276  // Make the current configuration the undeformed one by
277  // setting the nodal Lagrangian coordinates to their current
278  // Eulerian ones
280 
281  // Nodal positions etc. were created in constructor for
282  // nonrefineable mesh. Only need to setup quadtree forest
283  this->setup_octree_forest();
284  }
285  };
286 
287 
288 } // namespace oomph
289 
290 #endif
Base class for brick meshes (meshes made of 3D brick elements).
Definition: brick_mesh.h:178
Definition: mesh.h:67
static Steady< 0 > Default_TimeStepper
The Steady Timestepper.
Definition: mesh.h:75
Definition: refineable_brick_mesh.h:61
void setup_octree_forest()
Do what it says...
Definition: refineable_brick_mesh.h:88
Definition: thin_layer_brick_on_tet_mesh.template.h:242
void(* ThicknessFctPt)(const Vector< double > &x, double &h_thick)
Definition: thin_layer_brick_on_tet_mesh.template.h:246
RefineableSolidThinLayerBrickOnTetMesh(Mesh *tet_mesh_pt, const Vector< unsigned > &boundary_ids, ThicknessFctPt thickness_fct_pt, const unsigned &nlayer, const Vector< Vector< unsigned >> &in_out_boundary_id, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Definition: thin_layer_brick_on_tet_mesh.template.h:262
Definition: thin_layer_brick_on_tet_mesh.template.h:130
void(* ThicknessFctPt)(const Vector< double > &x, double &h_thick)
Definition: thin_layer_brick_on_tet_mesh.template.h:134
RefineableThinLayerBrickOnTetMesh(Mesh *tet_mesh_pt, const Vector< unsigned > &boundary_ids, ThicknessFctPt thickness_fct_pt, const unsigned &nlayer, const Vector< Vector< unsigned >> &in_out_boundary_id, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Definition: thin_layer_brick_on_tet_mesh.template.h:150
Definition: mesh.h:2562
void set_lagrangian_nodal_coordinates()
Definition: mesh.cc:9564
Definition: thin_layer_brick_on_tet_mesh.template.h:185
SolidThinLayerBrickOnTetMesh(Mesh *tet_mesh_pt, const Vector< unsigned > &boundary_ids, ThicknessFctPt thickness_fct_pt, const unsigned &nlayer, const Vector< Vector< unsigned >> &in_out_boundary_id, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Definition: thin_layer_brick_on_tet_mesh.template.h:205
void(* ThicknessFctPt)(const Vector< double > &x, double &h_thick)
Definition: thin_layer_brick_on_tet_mesh.template.h:189
Definition: thin_layer_brick_on_tet_mesh.template.h:42
Vector< unsigned > in_out_boundary_id(const unsigned &boundary_id)
Definition: thin_layer_brick_on_tet_mesh.template.h:90
ThicknessFctPt Thickness_fct_pt
Definition: thin_layer_brick_on_tet_mesh.template.h:112
unsigned Outer_boundary_id
Definition: thin_layer_brick_on_tet_mesh.template.h:104
unsigned outer_boundary_id()
Definition: thin_layer_brick_on_tet_mesh.template.h:82
Vector< Vector< unsigned > > In_out_boundary_id
Definition: thin_layer_brick_on_tet_mesh.template.h:108
ThinLayerBrickOnTetMesh(Mesh *tet_mesh_pt, const Vector< unsigned > &boundary_ids, ThicknessFctPt thickness_fct_pt, const unsigned &nlayer, const Vector< Vector< unsigned >> &in_out_boundary_id, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Definition: thin_layer_brick_on_tet_mesh.template.cc:53
Vector< unsigned > FSI_boundary_id
Definition: thin_layer_brick_on_tet_mesh.template.h:100
Vector< unsigned > fsi_boundary_id()
Definition: thin_layer_brick_on_tet_mesh.template.h:74
void(* ThicknessFctPt)(const Vector< double > &x, double &h_thick)
Definition: thin_layer_brick_on_tet_mesh.template.h:46
Definition: timesteppers.h:231
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
list x
Definition: plotDoE.py:28