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-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#ifndef OOMPH_EXTRUDED_DOMAIN_HEADER
27#define OOMPH_EXTRUDED_DOMAIN_HEADER
28
29// Config header
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
38namespace 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
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,
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.
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...
TAdvectionDiffusionReactionElement<NREAGENT,DIM,NNODE_1D> elements are isoparametric triangular DIM-d...
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).