extruded_domain.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-2023 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_EXTRUDED_DOMAIN_HEADER
27 #define OOMPH_EXTRUDED_DOMAIN_HEADER
28 
29 // Config header generated by autoconfig
30 #ifdef HAVE_CONFIG_H
31 #include <oomph-lib-config.h>
32 #endif
33 
34 // oomph-lib headers
35 #include "domain.h"
36 // #include "extruded_macro_element.h"
37 
38 namespace oomph
39 {
40  // Forward declaration of the extruded macro element class
41  class ExtrudedMacroElement;
42 
43  //=================================================================
44  /// Base class for ExtrudedDomains with curvilinear and/or
45  /// time-dependent boundaries. ExtrudedDomain boundaries are
46  /// typically represented by GeomObjects and the ExtrudedDomain
47  /// itself is decomposed into a number of ExtrudedMacroElements.
48  /// Any instantiation of a specific ExtrudedDomain needs to
49  /// implement the pure virtual member function
50  /// \code ExtrudedDomain::macro_element_boundary(...) \endcode
51  /// which returns a Vector representation of each of the
52  /// ExtrudedMacroElements' boundaries, parametrised by the
53  /// coordinate(s) along this boundary. The ExtrudedMacroElements
54  /// obtain their boundary positions via member function pointers to
55  /// \c ExtrudedDomain::macro_element_boundary(...).
56  //=================================================================
57  class ExtrudedDomain : public virtual Domain
58  {
59  public:
60  /// Constructor
61  ExtrudedDomain(Domain* domain_pt,
62  const unsigned& n_extruded_element,
63  const double& extrusion_length);
64 
65  /// Constructor
66  ExtrudedDomain(Domain* domain_pt,
67  const unsigned& n_extruded_element,
68  const double& t_min,
69  const double& t_max);
70 
71  /// Destructor: Empty; the extruded macro elements will be deleted in Domain
73 
74  /// Broken copy constructor
75  ExtrudedDomain(const ExtrudedDomain&) = delete;
76 
77  /// Broken assignment operator
78  void operator=(const ExtrudedDomain&) = delete;
79 
80  /// Access to i-th extruded macro element
81  ExtrudedMacroElement* macro_element_pt(const unsigned& i);
82 
83  /// Number of macro elements in domain
84  unsigned nmacro_element();
85 
86  /// Vector representation of the i_macro-th macro element
87  /// boundary i_direct (e.g. N/S/W/E in 2D spatial = 3D space-time).
88  /// NOTE: Some extra care has to be taken here to translate the
89  /// OcTree enumeration to the QuadTree enumeration (in the
90  /// appropriate manner) so that the original Domain object can be
91  /// used to calculate the global coordinate associated with the
92  /// provided local coordinates.
93  void macro_element_boundary(const unsigned& time,
94  const unsigned& i_macro,
95  const unsigned& i_direct,
96  const Vector<double>& s,
97  Vector<double>& x);
98 
99  private:
100  /// Pointer to the Domain
102 
103  // The number of elements to create in the extrusion direction
105 
106  /// The minimum t-value (defaults to 0.0 if not specified)
107  double T_min;
108 
109  /// The maximum t-value
110  double T_max;
111  };
112 } // End of namespace oomph
113 
114 #endif
static char t char * s
Definition: cfortran.h:568
cstr elem_len * i
Definition: cfortran.h:603
Base class for Domains with curvilinear and/or time-dependent boundaries. Domain boundaries are typic...
Definition: domain.h:67
Base class for ExtrudedDomains with curvilinear and/or time-dependent boundaries. ExtrudedDomain boun...
void macro_element_boundary(const unsigned &time, const unsigned &i_macro, const unsigned &i_direct, const Vector< double > &s, Vector< double > &x)
Vector representation of the i_macro-th macro element boundary i_direct (e.g. N/S/W/E in 2D spatial =...
double T_max
The maximum t-value.
~ExtrudedDomain()
Destructor: Empty; the extruded macro elements will be deleted in Domain.
ExtrudedDomain(Domain *domain_pt, const unsigned &n_extruded_element, const double &extrusion_length)
Constructor.
unsigned nmacro_element()
Number of macro elements in domain.
ExtrudedMacroElement * macro_element_pt(const unsigned &i)
Access to i-th extruded macro element.
ExtrudedDomain(const ExtrudedDomain &)=delete
Broken copy constructor.
Domain * Domain_pt
Pointer to the Domain.
double T_min
The minimum t-value (defaults to 0.0 if not specified)
void operator=(const ExtrudedDomain &)=delete
Broken assignment operator.
DRAIG: FILL IN COMPLETE DESCRIPTION ONCE FINISHED...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...