Qelement_face_coordinate_translation_schemes.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// Header containing functions that map face coordinates on
27// Qelements to bulk coordinates in those elements
28
29// Include guards
30#ifndef OOMPH_QELEMENT_FACE_COORDINATE_TRANSLATION_HEADER
31#define OOMPH_QELEMENT_FACE_COORDINATE_TRANSLATION_HEADER
32
33// Config header
34#ifdef HAVE_CONFIG_H
35#include <oomph-lib-config.h>
36#endif
37
38#ifdef OOMPH_HAS_MPI
39#include "mpi.h"
40#endif
41
42// oomph-lib headers
43#include "Vector.h"
44#include "matrices.h"
45
46namespace oomph
47{
48 //=============================================================
49 /// Namespace for helper functions that return the local
50 /// coordinates in the bulk elements
51 //==============================================================
52 namespace QElement1FaceToBulkCoordinates
53 {
54 /// The translation scheme for the face s0 = -1.0
55 void face0(const Vector<double>& s, Vector<double>& s_bulk);
56
57 /// The translation scheme for the face s0 = 1.0
58 void face1(const Vector<double>& s, Vector<double>& s_bulk);
59 } // namespace QElement1FaceToBulkCoordinates
60
61
62 //=============================================================
63 /// Namespace for helper functions that calculate derivatives
64 /// of the local coordinates in the bulk elements wrt the
65 /// local coordinates in the face element.
66 //=============================================================
67 namespace QElement1BulkCoordinateDerivatives
68 {
69 /// Function for both faces -- the bulk coordinate is fixed on both
70 void faces0(const Vector<double>& s,
71 DenseMatrix<double>& dsbulk_dsface,
72 unsigned& interior_direction);
73 } // namespace QElement1BulkCoordinateDerivatives
74
75
76 //===================================================================
77 /// Namespace for the functions that translate local face coordinates
78 /// to the coordinates in the bulk element
79 //==================================================================
80 namespace QElement2FaceToBulkCoordinates
81 {
82 /// The translation scheme for the west face (s0 = -1.0)
83 void face0(const Vector<double>& s, Vector<double>& s_bulk);
84
85 /// The translation scheme for the south face (s1 = -1.0)
86 void face1(const Vector<double>& s, Vector<double>& s_bulk);
87
88 /// The translation scheme for the east face (s0 = 1.0)
89 void face2(const Vector<double>& s, Vector<double>& s_bulk);
90
91 /// The translation scheme for the north face (s1 = 1.0)
92 void face3(const Vector<double>& s, Vector<double>& s_bulk);
93 } // namespace QElement2FaceToBulkCoordinates
94
95
96 //=============================================================
97 /// Namespace for helper functions that calculate derivatives
98 /// of the local coordinates in the bulk elements wrt the
99 /// local coordinates in the face element.
100 //=============================================================
101 namespace QElement2BulkCoordinateDerivatives
102 {
103 /// Function for the east and west faces, along which s0 is fixed
104 void faces0(const Vector<double>& s,
105 DenseMatrix<double>& dsbulk_dsface,
106 unsigned& interior_direction);
107
108 /// Function for the north and south faces, along which s1 is fixed
109 void faces1(const Vector<double>& s,
110 DenseMatrix<double>& dsbulk_dsface,
111 unsigned& interior_direction);
112 } // namespace QElement2BulkCoordinateDerivatives
113
114
115 //===================================================================
116 /// Namespace for the functions that translate local face coordinates
117 /// to the coordinates in the bulk element
118 //==================================================================
119 namespace QElement3FaceToBulkCoordinates
120 {
121 /// The translation scheme for the left face (s0 = -1.0)
122 void face0(const Vector<double>& s, Vector<double>& s_bulk);
123
124 /// The translation scheme for the down face (s1 = -1.0)
125 void face1(const Vector<double>& s, Vector<double>& s_bulk);
126
127 /// The translation scheme for the back face (s2 = -1.0)
128 void face2(const Vector<double>& s, Vector<double>& s_bulk);
129
130 /// The translation scheme for the right face (s0 = 1.0)
131 void face3(const Vector<double>& s, Vector<double>& s_bulk);
132
133 /// The translation scheme for the up face (s1 = 1.0)
134 void face4(const Vector<double>& s, Vector<double>& s_bulk);
135
136 /// The translation scheme for the front face (s2 = 1.0)
137 void face5(const Vector<double>& s, Vector<double>& s_bulk);
138 } // namespace QElement3FaceToBulkCoordinates
139
140
141 //=============================================================
142 /// Namespace for helper functions that calculate derivatives
143 /// of the local coordinates in the bulk elements wrt the
144 /// local coordinates in the face element.
145 //=============================================================
146 namespace QElement3BulkCoordinateDerivatives
147 {
148 /// Function for the back and front faces, along which s0 is fixed
149 void faces0(const Vector<double>& s,
150 DenseMatrix<double>& dsbulk_dsface,
151 unsigned& interior_direction);
152
153 /// Function for the up and down faces, along which s1 is fixed
154 void faces1(const Vector<double>& s,
155 DenseMatrix<double>& dsbulk_dsface,
156 unsigned& interior_direction);
157
158 /// Function for the left and right faces, along which s2 is fixed
159 void faces2(const Vector<double>& s,
160 DenseMatrix<double>& dsbulk_dsface,
161 unsigned& interior_direction);
162 } // namespace QElement3BulkCoordinateDerivatives
163
164} // namespace oomph
165
166#endif
static char t char * s
Definition cfortran.h:568
void faces0(const Vector< double > &s, DenseMatrix< double > &dsbulk_dsface, unsigned &interior_direction)
Function for both faces – the bulk coordinate is fixed on both.
void face1(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the face s0 = 1.0.
void face0(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the face s0 = -1.0.
void faces1(const Vector< double > &s, DenseMatrix< double > &dsbulk_dsface, unsigned &interior_direction)
Function for the north and south faces, along which s1 is fixed.
void faces0(const Vector< double > &s, DenseMatrix< double > &dsbulk_dsface, unsigned &interior_direction)
Function for the east and west faces, along which s0 is fixed.
void face2(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the east face (s0 = 1.0)
void face1(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the south face (s1 = -1.0)
void face0(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the west face (s0 = -1.0)
void face3(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the north face (s1 = 1.0)
void faces2(const Vector< double > &s, DenseMatrix< double > &dsbulk_dsface, unsigned &interior_direction)
Function for the left and right faces, along which s2 is fixed.
void faces0(const Vector< double > &s, DenseMatrix< double > &dsbulk_dsface, unsigned &interior_direction)
Function for the back and front faces, along which s0 is fixed.
void faces1(const Vector< double > &s, DenseMatrix< double > &dsbulk_dsface, unsigned &interior_direction)
Function for the up and down faces, along which s1 is fixed.
void face4(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the up face (s1 = 1.0)
void face1(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the down face (s1 = -1.0)
void face2(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the back face (s2 = -1.0)
void face0(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the left face (s0 = -1.0)
void face5(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the front face (s2 = 1.0)
void face3(const Vector< double > &s, Vector< double > &s_bulk)
The translation scheme for the right face (s0 = 1.0)
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).