You do not have permission to edit this page, for the following reason:

You are not allowed to execute the action you have requested.


You can view and copy the source of this page.

x
 
1
<!-- metadata commented in wiki content
2
==Anisotropy in 2D Discrete Exterior Calculus==
3
4
''''''
5
-->
6
==Abstract==
7
8
We present a local formulation for 2D Discrete Exterior Calculus (DEC) similar to that of the Finite Element Method (FEM), which allows  a natural treatment of material heterogeneity (assigning material properties element by element). It also allows us to deduce, in a principled  manner, anisotropic fluxes and the DEC discretization of the pullback of 1-forms by the anisotropy tensor, i.e. we deduce the discrete action of the anisotropy tensor on primal 1-forms. Due to the local formulation,  the computational cost of DEC is similar to that of the Finite Element Method with Linear interpolating functions (FEML). The numerical  DEC solutions to the anisotropic Poisson equation show numerical convergence, are very close to those of FEML on fine meshes  and are slightly better than those of FEML on coarse meshes.
9
<!--
10
<span id="fn-1"></span>
11
<span style="text-align: center; font-size: 75%;">([[#fnc-1|<sup>1</sup>]]) Centro de Investigación en Matemáticas, Calle Jalisco s/n,  Guanajuato, GTO 36023, México. Email: esqueda,rherrera,botello@cimat.mx </span>
12
13
<span id="fn-2"></span>
14
<span style="text-align: center; font-size: 75%;">([[#fnc-2|<sup>2</sup>]]) Departamento de  Matemáticas, Universidad de Guanajuato,  Guanajuato, GTO 36023, México. Email: valerocar@gmail.com</span>
15
-->
16
17
==1. Introduction==
18
19
The theory of Discrete Exterior Calculus (DEC) is a relatively recent discretization  <span id='citeF-8'></span>[[#cite-8|[8]]] of the classical theory of  Exterior Differential Calculus developed by  E. Cartan <span id='citeF-3'></span>[[#cite-3|[3]]], which is a fundamental tool in Differential Geometry and Topology.  The aim of DEC is to solve partial differential equations preserving their geometrical and physical features as much as possible. There are only a few papers about implementions of DEC to solve certain PDEs, such as  the Darcy flow and Poisson's equation <span id='citeF-9'></span>[[#cite-9|[9]]],  the Navier-Stokes equations <span id='citeF-10'></span>[[#cite-10|[10]]], the simulation of  elasticity, plasticity and failure of isotropic materials <span id='citeF-5'></span>[[#cite-5|[5]]], some comparisons with  the finite differences and finite volume methods on regular flat meshes <span id='citeF-7'></span>[[#cite-7|[7]]], as well as applications in digital geometry processing <span id='citeF-4'></span>[[#cite-4|[4]]].
20
21
In this paper, we describe a local formulation of DEC which is reminiscent of that of the Finite Element Method  (FEM). Indeed,  once the local systems of equations have been established, they can be assembled into a global linear system. This local formulation is also efficient and helpful in understanding various features of DEC that can otherwise remain  unclear if one is dealing dealing with an entire mesh. Besides, we believe the local description to DEC will be accesible to a wide readership. We will, therefore, take a local approach when recalling all the objects required by 2D DEC <span id='citeF-6'></span>[[#cite-6|[6]]]. Our main results are the following:
22
23
* We present a local formulation of DEC analogous to that of FEM, which allows a natural treatment of heterogeneous material properties assigned to subdomains (element by element) and  eliminates the need of dealing with it through ad hoc modifications of the global discrete Hodge star operator.
24
25
* Guided by the local formulation, we deduce a natural way to approximate the flux/gradient-vector of a discretized function, as well as the anisotropic flux vector. We carry out a comparison of the formulas defining the flux in both DEC and Finite Element Method with linear interpolation functions (FEML).
26
27
* In order to understand how to discretize the anisotropic Poisson equation, we develop the discretization of the pull-back operator of 1-forms under an arbitrary linear trasformation or tensor. The pull-back operator is one of the basic ingredients in Exterior Differential Calculus in the smooth setting and is essential in all of its applications  in Topology [bott-Tu].  We discretize the ''pullback operator on primal 1-forms induced by an arbitrary tensor'' using Whitney interpolation (the Whitney map). The Whitney interpolation forms were introduced by Hassler Whitney in 1957 <span id='citeF-12'></span>[[#cite-12|[12]]] and  Bossavit <span id='citeF-1'></span>[[#cite-1|[1]]] explained their relevance in “mixed methods” of finite elements.  To our knowledge, this is the first time that the discrete version of this operator is presented in the DEC literature.   This has allowed us to discretize, in a principled manner, the anisotropic heat equation.
28
29
*  We carry out an analytic comparison of the DEC and FEML local formulations of the anisotropic Poisson equation.
30
31
* We present three numerical examples of the approximate solutions to the stationary anisotropic Poisson equation on different domains using DEC and FEML. The numerical DEC-solutions exhibit numerical convergence (see the error measurement tables) and a competitive performance, as well as a computational cost similar to that of FEML. In fact, the numerical solutions with both methods on fine meshes are identical, and DEC shows a slightly better performance than FEML on coarse meshes.
32
33
34
The paper is organized as follows. In Section [[#2 Preliminaries on DEC from a local viewpoint|2]], we describe the local versions of the discrete derivative operator, the dual mesh, the discrete Hodge star operator and the meaning of a continuous 1-form on the plane.  In Section [[#3 Pullback operator on primal 1-forms|3]], we deduce the discretization of the pullback operator on primal 1-forms. In Section [[#4 Flux and anisotropy|4]], we deduce the natural way of computing flux vectors in DEC  (which turns out to be equivalent to the FEML result), as well as the anisotropic flux vectors.  In Section [[#5 Anisotropic Poisson equation in 2D|5]],  we present the local DEC formulation of the 2D anisotropic Poisson equation and compare it with the local system of FEML, proving that the diffusion terms  are identical in both schemes, while the source terms are differentl due to a different area-weight assignment for the nodes.  In Section [[#6 Some remarks about DEC quantities|6]], we re-examine the geometry of some of the local DEC quantities. In Section [[#7 Numerical Examples|7]], we present and compare numerical examples of DEC and FEML approximate solutions to the 2D anisotropic  Poisson equation on different domains with meshes of various resolutions.  In Section [[#8 Conclusions|8]], we summarize the contributions of this paper.
35
<!--
36
''Acknowledgements''. The second named author was partially supported by a CONACyT grant, and would like to thank  the International Centre for Numerical Methods in Engineering (CIMNE) and the University of Swansea for their hospitality. We gratefully acknowledge the support of NVIDIA Corporation with the donation of the Titan X Pascal GPU used for this research.
37
-->
38
39
==2. Preliminaries on DEC from a local viewpoint==
40
41
In this section, we will recall the basic operators of Dicrete Exterior Calculus  restricting ourselves to a mesh made up of one simplex/triangle. The local results we derive in the  paper can be assembled, just as in the Finite elemnt Method,  due to the additivity of both differentiation and integration.
42
43
Let us consider a primal mesh made up of a single (positively oriented) triangle with vertices <math display="inline">v_1,v_2,v_3</math> (Figure 1).
44
45
<div id='img-1'></div>
46
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
47
|-
48
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Triangle01.png|328px|Triangle ]]
49
|- style="text-align: center; font-size: 75%;"
50
| colspan="1" style="padding-bottom:10px;"| '''Figure 1'''. Triangle <math display="inline">v_1,v_2,v_3</math>
51
|}
52
53
Such a mesh has
54
55
* one oriented 2-dimensional face
56
57
{| class="formulaSCP" style="width: 100%; text-align: left;" 
58
|-
59
| 
60
{| style="text-align: left; margin:auto;width: 100%;" 
61
|-
62
| style="text-align: center;" | <math>[v_1,v_2,v_3];</math>
63
|}
64
|}
65
* three oriented 1-dimensional edges
66
67
{| class="formulaSCP" style="width: 100%; text-align: left;" 
68
|-
69
| 
70
{| style="text-align: left; margin:auto;width: 100%;" 
71
|-
72
| style="text-align: center;" | <math>[v_1,v_2],\quad [v_1,v_3],\quad [v_2,v_3];</math>
73
|}
74
|}
75
* and three 0-dimensional vertices
76
77
{| class="formulaSCP" style="width: 100%; text-align: left;" 
78
|-
79
| 
80
{| style="text-align: left; margin:auto;width: 100%;" 
81
|-
82
| style="text-align: center;" | <math>[v_1],\quad [v_2],\quad [v_3].</math>
83
|}
84
|}
85
86
===2.1 Boundary operator===
87
88
There is a well known boundary operator
89
90
<span id="eq-1"></span>
91
{| class="formulaSCP" style="width: 100%; text-align: left;" 
92
|-
93
| 
94
{| style="text-align: left; margin:auto;width: 100%;" 
95
|-
96
| style="text-align: center;" | <math>\partial _{2,1} [v_1,v_2,v_3]=[v_2,v_3]-[v_1,v_3]+[v_1,v_2], </math>
97
|}
98
| style="width: 5px;text-align: right;white-space: nowrap;" | (1)
99
|}
100
101
which describes the boundary of the triangle as an alternated sum of its ordered oriented edges <math display="inline">[v_1,v_2]</math>, <math display="inline">[v_1,v_3]</math> and <math display="inline">[v_2,v_3]</math>.
102
103
Similarly, one can compute the boundary of each edge
104
105
<span id="eq-2"></span>
106
{| class="formulaSCP" style="width: 100%; text-align: left;" 
107
|-
108
| 
109
{| style="text-align: left; margin:auto;width: 100%;" 
110
|-
111
| style="text-align: center;" | <math>\partial _{1,0} [v_1,v_2] = [v_2]-[v_1], </math>
112
|-
113
| style="text-align: center;" | <math> \partial _{1,0} [v_1,v_3] = [v_3]-[v_1], </math>
114
| style="width: 5px;text-align: right;white-space: nowrap;" | (2)
115
|-
116
| style="text-align: center;" | <math> \partial _{1,0} [v_2,v_3] = [v_3]-[v_2].  </math>
117
|}
118
|}
119
120
If we consider
121
122
* the symbol <math display="inline">[v_1,v_2,v_3]</math> as a basis vector of a 1-dimensional vector space,
123
* the symbols <math display="inline">[v_1,v_2]</math>, <math display="inline">[v_1,v_3]</math>, <math display="inline">[v_2,v_3]</math> as an ordered basis of a 3-dimensional vector space,
124
* the symbols <math display="inline">[v_1]</math>, <math display="inline">[v_2]</math>, <math display="inline">[v_3]</math> as an ordered basis of a 3-dimensional vector space,
125
126
127
then the map ([[#eq-1|1]]), which sends the oriented triangle to a sum of its oriented edges, is represented by the matrix
128
129
{| class="formulaSCP" style="width: 100%; text-align: left;" 
130
|-
131
| 
132
{| style="text-align: left; margin:auto;width: 100%;" 
133
|-
134
| style="text-align: center;" | <math>[\partial _{2,1}]=\left(\begin{array}{r} 1 \\  -1 \\  1 \end{array}\right),</math>
135
|}
136
|}
137
138
while the map ([[#eq-2|2]]), which sends the oriented edges to sums of their oriented vertices, is represented by the matrix
139
140
{| class="formulaSCP" style="width: 100%; text-align: left;" 
141
|-
142
| 
143
{| style="text-align: left; margin:auto;width: 100%;" 
144
|-
145
| style="text-align: center;" | <math>[\partial _{1,0}]=\left(\begin{array}{rrr} -1 & -1 & 0 \\  1 & 0 & -1 \\  0 & 1 & 1 \end{array} \right).</math>
146
|}
147
|}
148
149
===2.2 Discrete derivative===
150
151
It has been argued that the DEC discretization of the differential of a function is given by the transpose of the matrix of the  boundary operator on edges  <span id='citeF-8'></span><span id='citeF-6'></span>[[#cite-8|[6,8]]]. More precisely, suppose we have a function discretized by its values at the vertices
152
153
{| class="formulaSCP" style="width: 100%; text-align: left;" 
154
|-
155
| 
156
{| style="text-align: left; margin:auto;width: 100%;" 
157
|-
158
| style="text-align: center;" | <math>f\sim \left(\begin{array}{l} f_1\\ f_2\\ f_3               \end{array} \right).</math>
159
|}
160
|}
161
162
Its discrete derivative, according to DEC, is
163
164
{| class="formulaSCP" style="width: 100%; text-align: left;" 
165
|-
166
| 
167
{| style="text-align: left; margin:auto;width: 100%;" 
168
|-
169
| style="text-align: center;" | <math>\left(\begin{array}{rrr}-1 & -1 & 0 \\  1 & 0 & -1 \\  0 & 1 & 1 \end{array} \right)^T \left(\begin{array}{l}f_1\\ f_2\\ f_3               \end{array} \right) =\left(\begin{array}{rrr}-1 & 1 & 0 \\  -1 & 0 & 1 \\  0 & -1 & 1 \end{array} \right) \left(\begin{array}{l}f_1\\ f_2\\ f_3               \end{array} \right)</math>
170
|-
171
| style="text-align: center;" | <math> =\left(\begin{array}{l}f_2-f_1\\ f_3-f_1\\ f_3-f_2               \end{array} \right). </math>
172
|}
173
|}
174
175
Indeed, such differences are rough approximations of the directional derivatives of <math display="inline">f</math> along the oriented edges.  For instance, <math display="inline">f_2-f_1</math> is a rough approximation of the directional derivative of <math display="inline">f</math> at <math display="inline">v_1</math> in the direction of the vector <math display="inline">v_2-v_1</math>, i.e.
176
177
{| class="formulaSCP" style="width: 100%; text-align: left;" 
178
|-
179
| 
180
{| style="text-align: left; margin:auto;width: 100%;" 
181
|-
182
| style="text-align: center;" | <math>f_2-f_1 \approx df_{v_1}(v_2-v_1) .</math>
183
|}
184
|}
185
186
It is precisely in this sense that, according to DEC,
187
188
* the value <math display="inline">f_2-f_1</math> is assigned to the edge <math display="inline">[v_1,v_2]</math>,
189
* the value <math display="inline">f_3-f_1</math> is assigned to the edge <math display="inline">[v_1,v_3]</math>,
190
* and the value <math display="inline">f_3-f_2</math> is assigned to the edge <math display="inline">[v_2,v_3]</math>.
191
192
Let
193
194
{| class="formulaSCP" style="width: 100%; text-align: left;" 
195
|-
196
| 
197
{| style="text-align: left; margin:auto;width: 100%;" 
198
|-
199
| style="text-align: center;" | <math>D_0:=\left(\begin{array}{rrr} -1 & 1 & 0 \\  -1 & 0 & 1 \\  0 & -1 & 1 \end{array} \right). </math>
200
|}
201
|}
202
203
===2.3 Dual mesh===
204
205
The dual mesh of the primal mesh consisting of a single triangle is constructured as follows:
206
207
* To the 2-dimensional triangular face <math display="inline">[v_1,v_2,v_3]</math> will correspond the 0-dimensional point given by the circumcenter <math display="inline">c</math> of the triangle (Figure 2).
208
209
<div id='img-2'></div>
210
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
211
|-
212
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Triangle02.png|340px|Circumcenter ]]
213
|- style="text-align: center; font-size: 75%;"
214
| colspan="1" style="padding-bottom:10px;"| '''Figure 2'''. Circumcenter <math display="inline">c</math> of the triangle <math display="inline">[v_1,v_2,v_3]</math>
215
|}
216
217
* To the 1-dimensional edge <math display="inline">[v_1,v_2]</math> will correspond the 1-dimensional straight line segment <math display="inline">[p_1,c]</math> joining the midpoint <math display="inline">p_1</math> of the edge <math display="inline">[v_1,v_2]</math> to the circumcenter <math display="inline">c</math> (Figure 3).   Similarly for the other edges.
218
219
<div id='img-3'></div>
220
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
221
|-
222
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Triangle03.png|340px|Dual segment ]]
223
|- style="text-align: center; font-size: 75%;"
224
| colspan="1" style="padding-bottom:10px;"| '''Figure 3'''. Dual segment <math display="inline">[p_1,c]</math> of the edge <math display="inline">[v_1,v_2]</math>
225
|}
226
227
* To the 0-dimensional vertex/node <math display="inline">[v_1]</math> will correspond the oriented <math display="inline">2</math>-dimensional quadrilateral <math display="inline">[v_1,p_1,c,p_3]</math> (Figure 4).
228
229
<div id='img-4'></div>
230
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: bottom;"
231
|-
232
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Triangle04.png|340px|Dual quadrilateral  ]]
233
|- style="text-align: center; font-size: 75%;"
234
| colspan="1" style="padding-bottom:10px;"| '''Figure 4'''. Dual quadrilateral <math display="inline">[v_1,p_1,c,p_3]</math> of the vertex  <math display="inline">[v_1]</math> 
235
|}
236
237
===2.4 Discrete Hodge star===
238
239
For the Poisson equation in 2D, we need two matrices: one relating original edges to dual edges, and another relating vertices to dual cells.
240
241
* The discrete Hodge star map <math display="inline">M_1</math> applied to the discrete differential of a discretized function <math display="inline">f\sim (f_1,f_2,f_3)</math>  is given as follows:
242
243
* the value <math display="inline">f_2-f_1</math> assigned to the edge <math display="inline">[v_1,v_2]</math> is changed to the new value
244
245
{| class="formulaSCP" style="width: 100%; text-align: left;" 
246
|-
247
| 
248
{| style="text-align: left; margin:auto;width: 100%;" 
249
|-
250
| style="text-align: center;" | <math>{{length}[p_1,c]\over {length}[v_1,v_2]}(f_2-f_1)</math>
251
|}
252
|}
253
254
assigned to the segment <math display="inline">[p_1,c]</math>;
255
* the value <math display="inline">f_3-f_1</math> assigned to the edge <math display="inline">[v_1,v_3]</math> is changed to the new value
256
257
{| class="formulaSCP" style="width: 100%; text-align: left;" 
258
|-
259
| 
260
{| style="text-align: left; margin:auto;width: 100%;" 
261
|-
262
| style="text-align: center;" | <math>{{length}[p_3,c]\over {length}[v_1,v_3]}(f_3-f_1)</math>
263
|}
264
|}
265
266
assigned to the edge <math display="inline">[p_3,c]</math>.
267
* the value <math display="inline">f_3-f_2</math> assigned to the edge <math display="inline">[v_2,v_3]</math> is changed to the new value
268
269
{| class="formulaSCP" style="width: 100%; text-align: left;" 
270
|-
271
| 
272
{| style="text-align: left; margin:auto;width: 100%;" 
273
|-
274
| style="text-align: center;" | <math>{{length}[p_2,c]\over {length}[v_2,v_3]}(f_3-f_2)</math>
275
|}
276
|}
277
278
assigned to the segment <math display="inline">[p_2,c]</math>;
279
280
In other words,
281
282
{| class="formulaSCP" style="width: 100%; text-align: left;" 
283
|-
284
| 
285
{| style="text-align: left; margin:auto;width: 100%;" 
286
|-
287
| style="text-align: center;" | <math>M_1=\left(\begin{array}{ccc} \displaystyle{{length}[p_1,c]\over {length}[v_1,v_2]} & 0 & 0 \\  0 & \displaystyle{{length}[p_3,c]\over {length}[v_1,v_3]} & 0 \\  0 & 0 & \displaystyle{{length}[p_2,c]\over {length}[v_2,v_3]} \end{array} \right).</math>
288
|}
289
|}
290
291
* Similarly, the discrete Hodge star map <math display="inline">M_0</math> on values on vertices is given as follows:
292
293
* the value <math display="inline">f_1</math> assigned to the vertex <math display="inline">[v_1]</math> is changed to the new value
294
295
{| class="formulaSCP" style="width: 100%; text-align: left;" 
296
|-
297
| 
298
{| style="text-align: left; margin:auto;width: 100%;" 
299
|-
300
| style="text-align: center;" | <math>{Area}[v_1,p_1,c,p_3]f_1</math>
301
|}
302
|}
303
304
assigned to the quadrilateral <math display="inline">[v_1,p_1,c,p_3]</math>;
305
* the value <math display="inline">f_2</math> assigned to the vertex <math display="inline">[v_2]</math> is changed to the new value
306
307
{| class="formulaSCP" style="width: 100%; text-align: left;" 
308
|-
309
| 
310
{| style="text-align: left; margin:auto;width: 100%;" 
311
|-
312
| style="text-align: center;" | <math>{Area}[v_2,p_2,c,p_1]f_2</math>
313
|}
314
|}
315
316
assigned to the quadrilateral <math display="inline">[v_2,p_2,c,p_1]</math>;
317
* the value <math display="inline">f_3</math> assigned to the vertex <math display="inline">[v_3]</math> is changed to the new value
318
319
{| class="formulaSCP" style="width: 100%; text-align: left;" 
320
|-
321
| 
322
{| style="text-align: left; margin:auto;width: 100%;" 
323
|-
324
| style="text-align: center;" | <math>{Area}[v_3,p_3,c,p_2]f_2</math>
325
|}
326
|}
327
328
assigned to the quadrilateral <math display="inline">[v_3,p_3,c,p_2]</math>.
329
330
In other words,
331
332
{| class="formulaSCP" style="width: 100%; text-align: left;" 
333
|-
334
| 
335
{| style="text-align: left; margin:auto;width: 100%;" 
336
|-
337
| style="text-align: center;" | <math>M_0=\left(\begin{array}{ccc} {Area}[v_1,p_1,c,p_3] & 0 & 0 \\  0 & {Area}[v_2,p_2,c,p_1] & 0 \\  0 & 0 & {Area}[v_3,p_3,c,p_2] \end{array} \right).</math>
338
|}
339
|}
340
341
===2.5 Continuous 1-forms===
342
343
A differential 1-form <math display="inline">\alpha </math> on <math display="inline">\mathbb{R}^2</math> can be thought of as a function whose arguments are  a point in <math display="inline">\mathbb{R} ^2</math> and a vector in <math display="inline">\mathbb{R} ^2</math>, i.e.
344
345
{| class="formulaSCP" style="width: 100%; text-align: left;" 
346
|-
347
| 
348
{| style="text-align: left; margin:auto;width: 100%;" 
349
|-
350
| style="text-align: center;" | <math>\alpha : \mathbb{R}^2 \times \mathbb{R}^2 \longrightarrow \mathbb{R},</math>
351
|}
352
|}
353
354
and which is linear on the vector argument.
355
356
The dot product of <math display="inline">\mathbb{R}^2</math> allows us to see continuous 1-forms in a more familiar form as vector fields in the following way: If <math display="inline">X</math> is a vector field on <math display="inline">\mathbb{R}^2</math>, at each point <math display="inline">p\in \mathbb{R}^2</math> we can consider the  1-form
357
358
{| class="formulaSCP" style="width: 100%; text-align: left;" 
359
|-
360
| 
361
{| style="text-align: left; margin:auto;width: 100%;" 
362
|-
363
| style="text-align: center;" | <math>(p,Y)\mapsto   \alpha (p,Y):=X(p)\cdot Y, </math>
364
|}
365
|}
366
367
where <math display="inline">Y\in \mathbb{R}^2</math>. On the other hand, from a continuos 1-form we can build a vector field as follows
368
369
{| class="formulaSCP" style="width: 100%; text-align: left;" 
370
|-
371
| 
372
{| style="text-align: left; margin:auto;width: 100%;" 
373
|-
374
| style="text-align: center;" | <math>X(p) := \alpha (p,e_1) e_1 + \alpha (p,e_2) e_2 = (\alpha (p,e_1),\alpha (p,e_2)),</math>
375
|}
376
|}
377
378
where
379
380
{| class="formulaSCP" style="width: 100%; text-align: left;" 
381
|-
382
| 
383
{| style="text-align: left; margin:auto;width: 100%;" 
384
|-
385
| style="text-align: center;" | <math> e_1=\left(\begin{array}{c} 1 \\  0 \end{array} \right) \quad  \mbox{and} \quad  e_2=\left(\begin{array}{c} 0 \\  1 \end{array} \right). </math>
386
|}
387
|}
388
389
====2.5.1 Pullback of a conitnuous 1-form====
390
391
Given a tensor <math display="inline">S</math> (a linear transformation) and the vector field <math display="inline">X</math> associated to a 1-form <math display="inline">\alpha </math> as above, consider the vector field <math display="inline">S(X)</math>. For any vector <math display="inline">Y</math>, the value of the corresponding continuous 1-form is given by the product
392
393
{| class="formulaSCP" style="width: 100%; text-align: left;" 
394
|-
395
| 
396
{| style="text-align: left; margin:auto;width: 100%;" 
397
|-
398
| style="text-align: center;" | <math>S(X(p))\cdot Y     =X(p)\cdot S^T Y  =\alpha (p, S^T Y)    =(S^T)^*\alpha (p, Y),  </math>
399
|}
400
|}
401
402
which is the value of the 1-form called ''the pullback of <math>\alpha </math> by the tensor <math>S^T</math>''.
403
404
====2.5.2 Discretization of continuous 1-forms====
405
406
In order to produce a primal 1-form from such a continuous 1-form we need to inegrate it along the edges of the mesh (the de Rham map). In our local description, this produces a collection of 3 numbers associated to the 3 oriented edges of the triangle, i.e. for the oriented edge joining <math display="inline">v_i</math> to <math display="inline">v_j</math> we have
407
408
{| class="formulaSCP" style="width: 100%; text-align: left;" 
409
|-
410
| 
411
{| style="text-align: left; margin:auto;width: 100%;" 
412
|-
413
| style="text-align: center;" | <math>\alpha _{ij}:=\int _0^1 \alpha (v_i+t(v_j-v_i), v_j-v_i) dt.</math>
414
|}
415
|}
416
417
This is equivalent to calculating the line integral (circulation) of the corresponding vector field <math display="inline">X</math> along the path <math display="inline">\gamma _{ij}:=v_i+t(v_j-v_i)</math>, <math display="inline">0\leq t\leq 1</math>, parametrizing the edge <math display="inline">[v_i,v_j]</math>
418
419
{| class="formulaSCP" style="width: 100%; text-align: left;" 
420
|-
421
| 
422
{| style="text-align: left; margin:auto;width: 100%;" 
423
|-
424
| style="text-align: center;" | <math>\alpha _{ij}:=\int _{\gamma _{ij}} X. </math>
425
|}
426
|}
427
428
==3. Pullback operator on primal 1-forms==
429
430
In Section [[#2 Preliminaries on DEC from a local viewpoint|2]], we dealt with the primal discretization of a continuous 1-form. Now we wish to understand the pullback of a primal 1-form. In order to do this, we will interpolate a primal 1-form using the Whitney interpolation forms to produce a  continuous 1-form (Whitney map) to which we can apply the pullback operator by a tensor (linear transformation), and then intergrate along the edges (de Rham map).
431
432
The Whitney interpolation forms were introduced by  Whitney in 1957 <span id='citeF-12'></span>[[#cite-12|[12]]], and Bossavit <span id='citeF-1'></span>[[#cite-1|[1]]] explained their relevance to “mixed methods” of finite elements.  For the sake of simplicity, we will only define the Whitney 0 and 1-forms.
433
434
First consider the Finite Element linear basis functions (or Whitney interpolation functions)
435
436
<span id="eq-3"></span>
437
{| class="formulaSCP" style="width: 100%; text-align: left;" 
438
|-
439
| 
440
{| style="text-align: left; margin:auto;width: 100%;" 
441
|-
442
| style="text-align: center;" | <math>N_1 = {1\over 2A}[(y_2-y_3)x+(x_3-x_2)y+x_2y_3-x_3y_2] ,</math>
443
|-
444
| style="text-align: center;" | <math> N_2 = {1\over 2A}[(y_3-y_1)x+(x_1-x_3)y+x_3y_1-x_1y_3] ,</math>
445
| style="width: 5px;text-align: right;white-space: nowrap;" | (3)
446
|-
447
| style="text-align: center;" | <math> N_3 = {1\over 2A}[(y_1-y_2)x+(x_2-x_1)y+x_1y_2-x_2y_1] , </math>
448
|}
449
|}
450
451
and their differentials
452
453
<span id="eq-4"></span>
454
{| class="formulaSCP" style="width: 100%; text-align: left;" 
455
|-
456
| 
457
{| style="text-align: left; margin:auto;width: 100%;" 
458
|-
459
| style="text-align: center;" | <math>dN_1 = {1\over 2A}[(y_2-y_3)dx+(x_3-x_2)dy] ,</math>
460
|-
461
| style="text-align: center;" | <math> dN_2 = {1\over 2A}[(y_3-y_1)dx+(x_1-x_3)dy] ,</math>
462
| style="width: 5px;text-align: right;white-space: nowrap;" | (4)
463
|-
464
| style="text-align: center;" | <math> dN_3 = {1\over 2A}[(y_1-y_2)dx+(x_2-x_1)dy] . </math>
465
|}
466
|}
467
468
The Whitney interpolation 1-forms are
469
470
<span id="eq-5"></span>
471
{| class="formulaSCP" style="width: 100%; text-align: left;" 
472
|-
473
| 
474
{| style="text-align: left; margin:auto;width: 100%;" 
475
|-
476
| style="text-align: center;" | <math>\phi _{12}=N_1dN_2-N_2dN_1,</math>
477
|-
478
| style="text-align: center;" | <math> \phi _{13}=N_1dN_3-N_3dN_1 ,</math>
479
| style="width: 5px;text-align: right;white-space: nowrap;" | (5)
480
|-
481
| style="text-align: center;" | <math> \phi _{23}=N_2dN_3-N_3dN_2. </math>
482
|}
483
|}
484
485
These differential 1-forms are such that, along the edge <math display="inline">[v_k,v_l]</math>
486
487
{| class="formulaSCP" style="width: 100%; text-align: left;" 
488
|-
489
| 
490
{| style="text-align: left; margin:auto;width: 100%;" 
491
|-
492
| style="text-align: center;" | <math>\int _{v_k}^{v_l}\phi _{ij} = \delta _{ik}\delta _{jl}-\delta _{il}\delta _{jk},</math>
493
|}
494
|}
495
496
i.e. <math display="inline">0</math> or <math display="inline">\pm 1</math>.
497
498
Now, suppose we have a primal 1-form given on our triangle by the collection of numbers
499
500
{| class="formulaSCP" style="width: 100%; text-align: left;" 
501
|-
502
| 
503
{| style="text-align: left; margin:auto;width: 100%;" 
504
|-
505
| style="text-align: center;" | <math>\beta _{12},\quad \beta _{13},\quad \beta _{23}.</math>
506
|}
507
|}
508
509
We form a continuous 1-form as follows
510
511
{| class="formulaSCP" style="width: 100%; text-align: left;" 
512
|-
513
| 
514
{| style="text-align: left; margin:auto;width: 100%;" 
515
|-
516
| style="text-align: center;" | <math>\beta :=\beta _{12}\phi _{12} + \beta _{13}\phi _{13} + \beta _{23}\phi _{23} </math>
517
|}
518
|}
519
520
which is such that, for <math display="inline">1\leq i <j \leq 3</math>
521
522
{| class="formulaSCP" style="width: 100%; text-align: left;" 
523
|-
524
| 
525
{| style="text-align: left; margin:auto;width: 100%;" 
526
|-
527
| style="text-align: center;" | <math>\int _{v_i}^{v_j} \beta = \beta _{ij}. </math>
528
|}
529
|}
530
531
Now we will calculate
532
533
{| class="formulaSCP" style="width: 100%; text-align: left;" 
534
|-
535
| 
536
{| style="text-align: left; margin:auto;width: 100%;" 
537
|-
538
| style="text-align: center;" | <math>\int _{v_i}^{v_j} S^*\beta </math>
539
|}
540
|}
541
542
for an arbitrary linear transformation
543
544
{| class="formulaSCP" style="width: 100%; text-align: left;" 
545
|-
546
| 
547
{| style="text-align: left; margin:auto;width: 100%;" 
548
|-
549
| style="text-align: center;" | <math>S:= \left( \begin{array}{cc} a & b \\  c & d \end{array}  \right)</math>
550
|}
551
|}
552
553
Let
554
555
{| class="formulaSCP" style="width: 100%; text-align: left;" 
556
|-
557
| 
558
{| style="text-align: left; margin:auto;width: 100%;" 
559
|-
560
| style="text-align: center;" | <math>w_1 = v_2-v_1,</math>
561
|-
562
| style="text-align: center;" | <math> w_2 = v_3-v_1,</math>
563
|-
564
| style="text-align: center;" | <math> w_3 = v_3-v_2, </math>
565
|}
566
|}
567
568
and
569
570
{| class="formulaSCP" style="width: 100%; text-align: left;" 
571
|-
572
| 
573
{| style="text-align: left; margin:auto;width: 100%;" 
574
|-
575
| style="text-align: center;" | <math>\eta _1  =           (y_2 - y_3)dx +  (x_3 - x_2)dy \quad =\quad  2A\,\, dN_1  \quad      =\quad \left|\begin{array}{cc}x_3-x_2 & y_3-y_2 \\      dx & dy     \end{array} \right|, </math>
576
|-
577
| style="text-align: center;" | <math>  \eta _2 =           (y_3- y_1 )dx +  (x_1 -  x_3)dy \quad =\quad  2A\,\, dN_2  \quad      =\quad \left|\begin{array}{cc}x_1-x_3 & y_1-y_3 \\      dx & dy     \end{array} \right|, </math>
578
|-
579
| style="text-align: center;" | <math>  \eta _3 =           (y_1 -  y_2)dx +  (x_2-x_1 )dy \quad =\quad  2A\,\, dN_3  \quad      =\quad \left|\begin{array}{cc}x_2-x_1 & y_2-y_1 \\      dx & dy     \end{array} \right|. </math>
580
|}
581
|}
582
583
As it turns out,
584
585
{| class="formulaSCP" style="width: 100%; text-align: left;" 
586
|-
587
| 
588
{| style="text-align: left; margin:auto;width: 100%;" 
589
|-
590
| style="text-align: center;" | <math>(S^*\beta )_{12}     =\int _{v_1}^{v_2} S^*\beta </math>
591
|-
592
| style="text-align: center;" | <math>    = {1\over 4A} \left[(\eta _2(S(w_1))-\eta _1(S(w_1)))\beta _{12} + \eta _3(S(w_1))\beta _{13} + \eta _3(S(w_1))\beta _{23}\right],</math>
593
|-
594
| style="text-align: center;" | <math> (S^*\beta )_{13}     =\int _{v_1}^{v_3} S^*\beta </math>
595
|-
596
| style="text-align: center;" | <math>    = {1\over 4A} \left[\eta _2(S(w_2))\beta _{12} + (\eta _3(S(w_2))-\eta _1(S(w_2)))\beta _{13}  - \eta _2(S(w_2))\beta _{23}\right],</math>
597
|-
598
| style="text-align: center;" | <math> (S^*\beta )_{23}     =\int _{v_2}^{v_3} S^*\beta </math>
599
|-
600
| style="text-align: center;" | <math>    = {1\over 4A} \left[- \eta _1(S(w_3))\beta _{12} - \eta _1(S(w_3))\beta _{13} (\eta _3(S(w_3))-\eta _2(S(w_3)))\beta _{23} \right], </math>
601
|}
602
|}
603
604
where
605
606
{| class="formulaSCP" style="width: 100%; text-align: left;" 
607
|-
608
| 
609
{| style="text-align: left; margin:auto;width: 100%;" 
610
|-
611
| style="text-align: center;" | <math>\eta _1(S(w_1))    = \left|\begin{array}{cc}x_3-x_2 & y_3-y_2 \\      a(x_2-x_1)+b(y_2-y_1) & c(x_2-x_1)+d(y_2-y_1)     \end{array} \right|,</math>
612
|-
613
| style="text-align: center;" | <math> \eta _1(S(w_2))    = \left|\begin{array}{cc}x_3-x_2 & y_3-y_2 \\      a(x_3-x_1)+b(y_3-y_1) & c(x_3-x_1)+d(y_3-y_1)     \end{array} \right|,</math>
614
|-
615
| style="text-align: center;" | <math> \eta _1(S(w_3))    = \left|\begin{array}{cc}x_3-x_2 & y_3-y_2 \\      a(x_3-x_2)+b(y_3-y_2) & c(x_3-x_2)+d(y_3-y_2)     \end{array} \right|,</math>
616
|-
617
| style="text-align: center;" | <math> \eta _2(S(w_1))    = \left|\begin{array}{cc}x_1-x_3 & y_1-y_3 \\      a(x_2-x_1)+b(y_2-y_1) & c(x_2-x_1)+d(y_2-y_1)     \end{array} \right|,</math>
618
|-
619
| style="text-align: center;" | <math> \eta _2(S(w_2))    = \left|\begin{array}{cc}x_1-x_3 & y_1-y_3 \\      a(x_3-x_1)+b(y_3-y_1) & c(x_3-x_1)+d(y_3-y_1)     \end{array} \right|,</math>
620
|-
621
| style="text-align: center;" | <math> \eta _2(S(w_3))    = \left|\begin{array}{cc}x_1-x_3 & y_1-y_3 \\      a(x_3-x_2)+b(y_3-y_2) & c(x_3-x_2)+d(y_3-y_2)     \end{array} \right|,</math>
622
|-
623
| style="text-align: center;" | <math> \eta _3(S(w_1))    = \left|\begin{array}{cc}x_2-x_1 & y_2-y_1 \\      a(x_2-x_1)+b(y_2-y_1) & c(x_2-x_1)+d(y_2-y_1)     \end{array} \right|,</math>
624
|-
625
| style="text-align: center;" | <math> \eta _3(S(w_2))    = \left|\begin{array}{cc}x_2-x_1 & y_2-y_1 \\      a(x_3-x_1)+b(y_3-y_1) & c(x_3-x_1)+d(y_3-y_1)     \end{array} \right|,</math>
626
|-
627
| style="text-align: center;" | <math> \eta _3(S(w_3))    = \left|\begin{array}{cc}x_2-x_1 & y_2-y_1 \\      a(x_3-x_2)+b(y_3-y_2) & c(x_3-x_2)+d(y_3-y_2)     \end{array} \right|. </math>
628
|}
629
|}
630
631
Anyhow, these quantities are areas of the parallelograms formed by one fixed edge of the original triangle and one edge transformed by <math display="inline">S</math>.
632
633
Thus, we have that the induced transformation on primal 1-forms is
634
635
<span id="eq-6"></span>
636
{| class="formulaSCP" style="width: 100%; text-align: left;" 
637
|-
638
| 
639
{| style="text-align: left; margin:auto;width: 100%;" 
640
|-
641
| style="text-align: center;" | <math> S^*\beta ={1\over 4A}\left(\begin{array}{ccc} \eta _2(S(w_1))-\eta _1(S(w_1)) & \eta _3(S(w_1)) & \eta _3(S(w_1)) \\  \eta _2(S(w_2)) & \eta _3(S(w_2))-\eta _1(S(w_2)) & -\eta _2(S(w_2)) \\  - \eta _1(S(w_3)) & - \eta _1(S(w_3)) & \eta _3(S(w_3))-\eta _2(S(w_3)) \end{array} \right) \left(\begin{array}{c} \beta _{12} \\  \beta _{13} \\  \beta _{23} \end{array} \right)   </math>
642
|}
643
| style="width: 5px;text-align: right;white-space: nowrap;" | (6)
644
|}
645
646
When the material is isotropic, i.e. <math display="inline">S</math> is a constant multiple of the <math display="inline">2\times 2</math> identity matrix,  we get a constant multiple of the <math display="inline">3\times 3</math> identity matrix above as discrete pull-back operator.
647
648
==4. Flux and anisotropy==
649
650
In this section, we deduce the DEC formulae for the local flux, the local anisotropic flux and the local anisotropy operator  for primal 1-forms.
651
652
===4.1 The flux in local DEC===
653
654
We wish to find a natural construction for the discrete flux (discrete gradient vector) of a discrete function. Recall from Vector Calculus that the directional derivative of a differentiable function <math display="inline">f:\mathbb{R}^2\longrightarrow \mathbb{R}</math> at a point <math display="inline">p\in \mathbb{R}^2</math> in the direction of <math display="inline">w\in \mathbb{R}^2</math> is defined by
655
656
{| class="formulaSCP" style="width: 100%; text-align: left;" 
657
|-
658
| 
659
{| style="text-align: left; margin:auto;width: 100%;" 
660
|-
661
| style="text-align: center;" | <math>df_p(w):=\lim _{t\rightarrow 0}{f(p+tw)-f(p)\over t}=\nabla f(p)\cdot w.</math>
662
|-
663
<!--| style="text-align: center;" | <math> =\nabla f(p)\cdot w. </math>-->
664
|}
665
|}
666
667
Thus, we have three Vector Calculus identities
668
669
{| class="formulaSCP" style="width: 100%; text-align: left;" 
670
|-
671
| 
672
{| style="text-align: left; margin:auto;width: 100%;" 
673
|-
674
| style="text-align: center;" | <math>df_{v_1}(v_2-v_1) = \nabla f(v_1)\cdot (v_2-v_1)  ,</math>
675
|-
676
| style="text-align: center;" | <math>  df_{v_2}(v_3-v_2) = \nabla f(v_2)\cdot (v_3-v_2),</math>
677
|-
678
| style="text-align: center;" | <math>  df_{v_3}(v_1-v_3) = \nabla f(v_3)\cdot (v_1-v_3) . </math>
679
|}
680
|}
681
682
As in Subsection [[#2.2 Discrete derivative|2.2]], the rough approximations to directional derivatives of a function <math display="inline">f</math> in the directions of the (oriented) edges are given as follows
683
684
{| class="formulaSCP" style="width: 100%; text-align: left;" 
685
|-
686
| 
687
{| style="text-align: left; margin:auto;width: 100%;" 
688
|-
689
| style="text-align: center;" | <math>df_{v_1}(v_2-v_1) \approx  f_2-f_1  ,</math>
690
|-
691
| style="text-align: center;" | <math>  df_{v_2}(v_3-v_2) \approx  f_3-f_2  ,</math>
692
|-
693
| style="text-align: center;" | <math>  df_{v_3}(v_1-v_3) \approx  f_1-f_3  . </math>
694
|}
695
|}
696
697
Thus, if we want to find a discrete gradient vector <math display="inline">W_1</math> of <math display="inline">f</math> at the point <math display="inline">v_1</math>,  we need to solve the equations
698
699
<span id="eq-7"></span>
700
<span id="eq-8"></span>
701
{| class="formulaSCP" style="width: 100%; text-align: left;" 
702
|-
703
| 
704
{| style="text-align: left; margin:auto;width: 100%;" 
705
|-
706
| style="text-align: center;" | <math>W_1\cdot (v_2-v_1) = f_2-f_1 </math>
707
| style="width: 5px;text-align: right;white-space: nowrap;" | (7)
708
|-
709
| style="text-align: center;" | <math> W_1\cdot (v_3-v_1) = f_3-f_1. </math>
710
| style="width: 5px;text-align: right;white-space: nowrap;" | (8)
711
|}
712
|}
713
714
If
715
716
{| class="formulaSCP" style="width: 100%; text-align: left;" 
717
|-
718
| 
719
{| style="text-align: left; margin:auto;width: 100%;" 
720
|-
721
| style="text-align: center;" | <math>v_1=(x_1,y_1),</math>
722
|-
723
| style="text-align: center;" | <math> v_2=(x_2,y_2),</math>
724
|-
725
| style="text-align: center;" | <math> v_3=(x_3,y_3), </math>
726
|}
727
|}
728
729
then
730
731
{| class="formulaSCP" style="width: 100%; text-align: left;" 
732
|-
733
| 
734
{| style="text-align: left; margin:auto;width: 100%;" 
735
|-
736
| style="text-align: center;" | <math>W_1 =\left({f_1y_2-f_1y_3-f_2y_1+f_2y_3+f_3y_1-f_3y_2\over x_1y_2-x_1y_3-x_2y_1+x_2y_3+x_3y_1-x_3y_2} ,  -{f_1x_2-f_1x_3-f_2x_1+f_2x_3+f_3x_1-f_3x_2\over x_1y_2-x_1y_3-x_2y_1+x_2y_3+x_3y_1-x_3y_2}\right)^T </math>
737
|}
738
|}
739
740
Now, if we were to find  a discrete gradient vector <math display="inline">W_2</math> of <math display="inline">f</math> at the point <math display="inline">v_2</math>,  we need to solve the equations
741
742
<span id="eq-9"></span>
743
{| class="formulaSCP" style="width: 100%; text-align: left;" 
744
|-
745
| 
746
{| style="text-align: left; margin:auto;width: 100%;" 
747
|-
748
| style="text-align: center;" | <math>W_2\cdot (v_1-v_2) = f_1-f_2</math>
749
| style="width: 5px;text-align: right;white-space: nowrap;" | (9)
750
|-
751
| style="text-align: center;" | <math> W_2\cdot (v_3-v_2) = f_3-f_2.</math>
752
|}
753
|}
754
755
The vectors <math display="inline">W_2</math> solving these equations is actually equal to <math display="inline">W_1</math>.  Indeed, consider
756
757
{| class="formulaSCP" style="width: 100%; text-align: left;" 
758
|-
759
| 
760
{| style="text-align: left; margin:auto;width: 100%;" 
761
|-
762
| style="text-align: center;" | <math>f_3-f_1 = W_1\cdot (v_3-v_1) = W_1\cdot (v_3-v_2+v_2-v_1)</math>
763
|-
764
| style="text-align: center;" | <math> = W_1\cdot (v_3-v_2)+W_1\cdot (v_2-v_1)= W_1\cdot (v_3-v_2)+f_2-f_1, </math>
765
|}
766
|}
767
768
so that
769
770
<span id="eq-10"></span>
771
{| class="formulaSCP" style="width: 100%; text-align: left;" 
772
|-
773
| 
774
{| style="text-align: left; margin:auto;width: 100%;" 
775
|-
776
| style="text-align: center;" | <math>W_1\cdot (v_3-v_2) = f_3-f_2. </math>
777
|}
778
| style="width: 5px;text-align: right;white-space: nowrap;" | (10)
779
|}
780
781
Thus, adding up ([[#eq-7|7]]) and ([[#eq-9|9]]) we get
782
783
<span id="eq-11"></span>
784
{| class="formulaSCP" style="width: 100%; text-align: left;" 
785
|-
786
| 
787
{| style="text-align: left; margin:auto;width: 100%;" 
788
|-
789
| style="text-align: center;" | <math>(W_1-W_2)\cdot (v_2-v_1)=0. </math>
790
|}
791
| style="width: 5px;text-align: right;white-space: nowrap;" | (11)
792
|}
793
794
Subtracting  ([[#eq-8|8]]) from ([[#eq-10|10]]) we get
795
796
<span id="eq-12"></span>
797
{| class="formulaSCP" style="width: 100%; text-align: left;" 
798
|-
799
| 
800
{| style="text-align: left; margin:auto;width: 100%;" 
801
|-
802
| style="text-align: center;" | <math>(W_1-W_2)\cdot (v_3-v_2)=0. </math>
803
|}
804
| style="width: 5px;text-align: right;white-space: nowrap;" | (12)
805
|}
806
807
Since <math display="inline">v_2-v_1</math> and <math display="inline">v_3-v_2</math> are linearly independent  and the two inner products in ([[#eq-11|11]]) and ([[#eq-12|12]]) vanish,
808
809
{| class="formulaSCP" style="width: 100%; text-align: left;" 
810
|-
811
| 
812
{| style="text-align: left; margin:auto;width: 100%;" 
813
|-
814
| style="text-align: center;" | <math>W_1-W_2=0.</math>
815
|}
816
|}
817
818
Analogously, the corresponding gradient vector <math display="inline">W_3</math> of <math display="inline">f</math> at the vertex <math display="inline">v_3</math> is equal to <math display="inline">W_1</math>. This means that the three approximate gradient vectors at the three vertices coincide, i.e. we have a unique discrete flux vector <math display="inline">W=W_1=W_2=W_3</math> on the given element.  Note that the discrete flux <math display="inline">W</math> satisfies
819
820
{| class="formulaSCP" style="width: 100%; text-align: left;" 
821
|-
822
| 
823
{| style="text-align: left; margin:auto;width: 100%;" 
824
|-
825
| style="text-align: center;" | <math>W\cdot (v_2-v_1) = f_2-f_1,</math>
826
|-
827
| style="text-align: center;" | <math> W\cdot (v_3-v_1) = f_3-f_1,</math>
828
|-
829
| style="text-align: center;" | <math> W\cdot (v_3-v_2) = f_3-f_2  . </math>
830
|}
831
|}
832
833
This means that the primal 1-form discretizing <math display="inline">df</math> can be obtained by performing the dot products of the discrete flux vector <math display="inline">W</math>  with the vectors given by the triangle's oriented edges.
834
835
====4.1.1 Comparison of DEC and FEML local fluxes====
836
837
The local flux (gradient) of <math display="inline">f</math> in FEML is given by
838
839
{| class="formulaSCP" style="width: 100%; text-align: left;" 
840
|-
841
| 
842
{| style="text-align: left; margin:auto;width: 100%;" 
843
|-
844
| style="text-align: center;" | <math> \left( \begin{array}{ccc} \displaystyle{\partial N_1\over \partial x} & \displaystyle\displaystyle{\partial N_2\over \partial x} & \displaystyle{\partial N_3\over \partial x} \\  \displaystyle{\partial N_1\over \partial y} & \displaystyle{\partial N_2\over \partial y} & \displaystyle{\partial N_3\over \partial y} \end{array}  \right) \left( \begin{array}{c} f_1 \\  f_2 \\  f_3 \end{array}  \right), </math>
845
|}
846
|}
847
848
where <math display="inline">N_1,N_2</math> and <math display="inline">N_3</math> are the basis functions given in ([[#eq-3|3]]). Explicitly
849
850
{| class="formulaSCP" style="width: 100%; text-align: left;" 
851
|-
852
| 
853
{| style="text-align: left; margin:auto;width: 100%;" 
854
|-
855
| style="text-align: center;" | <math>\left( \begin{array}{ccc}\displaystyle{\partial N_1\over \partial x} & \displaystyle{\partial N_2\over \partial x} & \displaystyle{\partial N_3\over \partial x} \\  \displaystyle{\partial N_1\over \partial y} & \displaystyle{\partial N_2\over \partial y} & \displaystyle{\partial N_3\over \partial y} \end{array}  \right) ={1\over 2A} \left( \begin{array}{ccc}y_2-y_3 & y_3-y_1 & y_1-y_2 \\  x_3-x_2 & x_1-x_3 & x_2-x_1 \end{array}  \right)  </math>
856
|}
857
|}
858
859
where
860
861
{| class="formulaSCP" style="width: 100%; text-align: left;" 
862
|-
863
| 
864
{| style="text-align: left; margin:auto;width: 100%;" 
865
|-
866
| style="text-align: center;" | <math>A = {1\over 2} [(x_2y_3-x_3y_2) -(x_1y_3-x_3y_1)+(x_1y_2-x_2y_1)] </math>
867
|}
868
|}
869
870
is the area of the triangle, so that the FEML flux is given by
871
872
{| class="formulaSCP" style="width: 100%; text-align: left;" 
873
|-
874
| 
875
{| style="text-align: left; margin:auto;width: 100%;" 
876
|-
877
| style="text-align: center;" | <math> \left( {[(y_2-y_3)f_1+(y_3-y_1)f_2+(y_1-y_2)f_3]\over 2A} , {[(x_3-x_2)f_1+(x_1-x_3)f_2+(x_2-x_1)f_3]\over 2A}  \right)^T, </math>
878
|}
879
|}
880
881
and we can see that it coincides with the DEC flux.
882
883
===4.2 The anisotropic flux vector in local DEC===
884
885
We will now discuss how to discretize anisotropy in 2D DEC. Let <math display="inline">K</math> denote the symmetric anisotropy tensor
886
887
{| class="formulaSCP" style="width: 100%; text-align: left;" 
888
|-
889
| 
890
{| style="text-align: left; margin:auto;width: 100%;" 
891
|-
892
| style="text-align: center;" | <math>K=\left(\begin{array}{cc} k_{11} & k_{12} \\  k_{12} & k_{22} \end{array} \right)</math>
893
|}
894
|}
895
896
and recall the anisotropic Poisson equation
897
898
{| class="formulaSCP" style="width: 100%; text-align: left;" 
899
|-
900
| 
901
{| style="text-align: left; margin:auto;width: 100%;" 
902
|-
903
| style="text-align: center;" | <math>-\nabla \cdot (K\, \nabla f) = q.</math>
904
|}
905
|}
906
907
First recall that, in Exterior Differential Calculus, for any <math display="inline">w\in \mathbb{R}^2</math>,
908
909
{| class="formulaSCP" style="width: 100%; text-align: left;" 
910
|-
911
| 
912
{| style="text-align: left; margin:auto;width: 100%;" 
913
|-
914
| style="text-align: center;" | <math>(K\nabla f(p))\cdot w =\nabla f(p)\cdot (K^Tw) =\nabla f(p)\cdot (Kw) </math>
915
|-
916
| style="text-align: center;" | <math>    =df_p(Kw)=(df_p\circ K)(w) =:(K^*df_p)(w), </math>
917
|}
918
|}
919
920
where <math display="inline">K^*df_p</math> is the ''pullback'' of <math display="inline">df_p</math> by <math display="inline">K</math>.
921
922
Since we already have a discrete candidate <math display="inline">W</math> for <math display="inline">\nabla f</math> on the given element, the product of the matrix <math display="inline">K</math> and <math display="inline">W</math> gives us a candidate <math display="inline">W':=K W</math> for the anisptropic flux vector on such an element
923
924
{| class="formulaSCP" style="width: 100%; text-align: left;" 
925
|-
926
| 
927
{| style="text-align: left; margin:auto;width: 100%;" 
928
|-
929
| style="text-align: center;" | <math> W' := KW =\left(\begin{array}{cc}k_{11} & k_{12} \\  k_{12} & k_{22} \end{array} \right) \left( \begin{array}{c}{[(y_2-y_3)f_1+(y_3-y_1)f_2+(y_1-y_2)f_3]\over 2A} \\  {[(x_3-x_2)f_1+(x_1-x_3)f_2+(x_2-x_1)f_3]\over 2A} \end{array}  \right)</math>
930
|-
931
| style="text-align: center;" | <math>    =\left( \begin{array}{c}{k_{11}[f_1(y_2-y_3)+f_2(y_3-y_1)+f_3(y_1-y_2)] +k_{12}[f_1(x_3-x_2)+f_2(x_1-x_3)+f_3(x_2-x_1)] \over x_1y_2-x_1y_3-x_2y_1+x_2y_3+x_3y_1-x_3y_2} \\ {k_{12}[f_1(y_2-y_3)+f_2(y_3-y_1)+f_3(y_1-y_2)] +k_{22}[f_1(x_3-x_2)+f_2(x_1-x_3)+f_3(x_2-x_1)] \over x_1y_2-x_1y_3-x_2y_1+x_2y_3+x_3y_1-x_3y_2} \end{array} \right). </math>
932
|}
933
|}
934
935
In order to produce a primal 1-form from <math display="inline">W'</math>, all we have to do is assume that <math display="inline">K</math> is constant on the given triangle and take  dot products with the edges of the triangle, i.e.
936
937
{| class="formulaSCP" style="width: 100%; text-align: left;" 
938
|-
939
| 
940
{| style="text-align: left; margin:auto;width: 100%;" 
941
|-
942
| style="text-align: center;" | <math>\left(\begin{array}{c}W'\cdot w_1 \\  W'\cdot w_2 \\  W'\cdot w_3 \end{array} \right). </math>
943
|}
944
|}
945
946
Nevertheless, in order to better understand the structure of the local system (as in FEML),  it is desirable to have a factorization of the result as a matrix product
947
948
{| class="formulaSCP" style="width: 100%; text-align: left;" 
949
|-
950
| 
951
{| style="text-align: left; margin:auto;width: 100%;" 
952
|-
953
| style="text-align: center;" | <math>\left(\begin{array}{c}W'\cdot w_1 \\  W'\cdot w_2 \\  W'\cdot w_3 \end{array} \right)= K^{DEC} D_0 \left(\begin{array}{l}f_1\\ f_2\\ f_3               \end{array} \right) </math>
954
|}
955
|}
956
957
where the matrix <math display="inline">K^{DEC}</math> is a real <math display="inline">3\times 3</math> matrix depending on the geometry of the triangle and the matrix <math display="inline">K</math>, and such that it is a multiple of the identity matrix when the domain is isotropic. In order to do this, we will use the discretization of the pullback opertator of Exterior Differential Calculus for arbitrary 1-forms from Section [[#3 Pullback operator on primal 1-forms|3]]. Thus, using ([[#eq-6|6]]), <math display="inline">K^{DEC}</math> is the following <math display="inline">3\times 3</math> matrix where we have set <math display="inline">S=K</math>, i.e.
958
959
{| class="formulaSCP" style="width: 100%; text-align: left;" 
960
|-
961
| 
962
{| style="text-align: left; margin:auto;width: 100%;" 
963
|-
964
| style="text-align: center;" | <math>K^{DEC}={1\over 4A}\left(\begin{array}{ccc} \eta ^K_{21}-\eta ^K_{11} & \eta ^K_{31} & \eta ^K_{31} \\  \eta ^K_{22} & \eta ^K_{32}-\eta ^K_{12} & -\eta ^K_{22} \\  - \eta ^K_{13} & - \eta ^K_{13} & \eta ^K_{33}-\eta ^K_{23} \end{array} \right) </math>
965
|}
966
|}
967
968
where
969
970
{| class="formulaSCP" style="width: 100%; text-align: left;" 
971
|-
972
| 
973
{| style="text-align: left; margin:auto;width: 100%;" 
974
|-
975
| style="text-align: center;" | <math>\eta ^K_{kl}=\eta _k(K(w_l)).</math>
976
|}
977
|}
978
979
====4.2.1 <span id='lb-4.2.1'></span>Geometric interpretation of the entries of <math>K^{DEC}</math>====
980
981
Consider the Figure [[#img-5|5]], where <math display="inline">J</math> denotes the <math display="inline">90^\circ </math> anti-clockwise rotation
982
983
{| class="formulaSCP" style="width: 100%; text-align: left;" 
984
|-
985
| 
986
{| style="text-align: left; margin:auto;width: 100%;" 
987
|-
988
| style="text-align: center;" | <math>J    =\left(\begin{array}{cc}0 & -1 \\    1 & 0   \end{array} \right). </math>
989
|}
990
|}
991
992
<div id='img-5'></div>
993
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
994
|-
995
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-DiscretizedAnisotropyOperator03-v2.png|420px|Geometric interpretation of the entries of the anisotropy tensor discretization ]]
996
|- style="text-align: center; font-size: 75%;"
997
| colspan="1" style="padding:10px;"| '''Figure 5'''. Geometric interpretation of the entries of the anisotropy tensor discretization <math>K^{DEC}</math>
998
|}
999
1000
We have
1001
1002
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1003
|-
1004
| 
1005
{| style="text-align: left; margin:auto;width: 100%;" 
1006
|-
1007
| style="text-align: center;" | <math>\eta ^K_{21}=-{J(w_2)\cdot K(w_1) \over 2A}= -{1\over 2A} |J(w_2)| |K(w_1)| \cos (\beta ) </math>
1008
|-
1009
| style="text-align: center;" | <math>    = -{1\over 2A} |w_2| |K(w_1)| \cos (\alpha{+\pi}/2) = {1\over 2A} |w_2| |K(w_1)| \sin (\alpha ) ={A'\over A}, </math>
1010
|}
1011
|}
1012
1013
where <math display="inline">A'</math> is the area of the red triangle.  Thus, the numbers <math display="inline">\eta ^K_{kl}</math> are quotients of areas of transformed triangles divided by the area of the original triangle.
1014
1015
==5. Anisotropic Poisson equation in 2D==
1016
1017
In this section, we describe the local DEC discretization of the 2D anisotropic Poisson equation and compare it to that of FEML.
1018
1019
===5.1 Local DEC discretization of the 2D anisotropic Poisson equation===
1020
1021
The anisotropic Poisson equation reads as follows
1022
1023
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1024
|-
1025
| 
1026
{| style="text-align: left; margin:auto;width: 100%;" 
1027
|-
1028
| style="text-align: center;" | <math>-\nabla \cdot (K\, \nabla f) = q,</math>
1029
|}
1030
|}
1031
1032
where <math display="inline">f</math> and <math display="inline">q</math> are two functions on a certain domain in <math display="inline">\mathbb{R}^2</math> and <math display="inline">K</math> is the anisotropy tensor. In terms of the exterior derivative <math display="inline">d</math> and the Hodge star operator <math display="inline">\star </math> it reads as follows
1033
1034
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1035
|-
1036
| 
1037
{| style="text-align: left; margin:auto;width: 100%;" 
1038
|-
1039
| style="text-align: center;" | <math>-\star d \star (K^*df) = q</math>
1040
|}
1041
|}
1042
1043
where <math display="inline">K^*df:=df\circ K</math> and <math display="inline">K=K^T</math>. Following the discretization of the discretized divergence operator <span id='citeF-6'></span>[[#cite-6|[6]]], the corresponding local DEC discretization of the anisotropic Poisson equation is
1044
1045
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1046
|-
1047
| 
1048
{| style="text-align: left; margin:auto;width: 100%;" 
1049
|-
1050
| style="text-align: center;" | <math>-M_0^{-1} \, \left(-D_0^T\right) \, M_1\, K^{DEC} \, D_0 \, [f] = [q], </math>
1051
|}
1052
|}
1053
1054
or equivalently
1055
1056
<span id="eq-13"></span>
1057
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1058
|-
1059
| 
1060
{| style="text-align: left; margin:auto;width: 100%;" 
1061
|-
1062
| style="text-align: center;" | <math>D_0^T  \, M_1\, K^{DEC}\, D_0 \, [f] = M_0 \, [q].  </math>
1063
|}
1064
| style="width: 5px;text-align: right;white-space: nowrap;" | (13)
1065
|}
1066
1067
In order to simplify the notation, consider the lengths and areas defined in the Figure [[#img-6|6]].
1068
1069
<div id='img-6'></div>
1070
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1071
|-
1072
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-WellCenteredTriangle02-eps-converted-to.png|310px|Triangle ]]
1073
|- style="text-align: center; font-size: 75%;"
1074
| colspan="1" style="padding-bottom:10px;"| '''Figure 6'''. Triangle 
1075
|}
1076
1077
Now, the discretized equation ([[#eq-13|13]]) looks as follows:
1078
1079
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1080
|-
1081
| 
1082
{| style="text-align: left; margin:auto;width: 100%;" 
1083
|-
1084
| style="text-align: center;" | <math> {1\over 4A} \left(\begin{array}{ccc} 1 & -1 & 0\\ -1 & 0 & -1\\ 0 & 1 & 1       \end{array} \right) \left(\begin{array}{ccc} {l_1\over L_1} & 0 & 0\\ 0 & {l_3\over L_3}  & 0\\ 0 & 0 & {l_2\over L_2}        \end{array} \right) \left(\begin{array}{ccc} \eta ^K_{21}-\eta ^K_{11} & \eta ^K_{31} & \eta ^K_{31} \\  \eta ^K_{22} & \eta ^K_{32}-\eta ^K_{12} & -\eta ^K_{22} \\  - \eta ^K_{13} & - \eta ^K_{13} & \eta ^K_{33}-\eta ^K_{23} \end{array} \right)\left(\begin{array}{rrr} -1 & 1 & 0 \\  -1 & 0 & 1 \\  0 & -1 & 1 \end{array} \right) \left(\begin{array}{c} f_1 \\  f_2 \\  f_3 \end{array} \right)    = \left(\begin{array}{c} A_1q_1 \\  A_2q_2 \\  A_3q_3 \end{array} \right). </math>
1085
|}
1086
|}
1087
1088
The diffusive term matrix  is actually symmetric (see Subsection [[#5.3.1 The diffusive term|5.3.1]]).
1089
1090
===5.2 Local FEML-Discretized 2D anisotropic Poisson equation===
1091
1092
The diffusive elemental matrix in FEM (frequently called “stiffness matrix”) on an element <math display="inline">e</math> is given by
1093
1094
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1095
|-
1096
| 
1097
{| style="text-align: left; margin:auto;width: 100%;" 
1098
|-
1099
| style="text-align: center;" | <math>K_e=\int B^tDBdA,</math>
1100
|}
1101
|}
1102
1103
where <math display="inline">D=K</math> is the matrix representing the anisotropic diffusion tensor,  and the matrix <math display="inline">B</math> is given explicitly by
1104
1105
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1106
|-
1107
| 
1108
{| style="text-align: left; margin:auto;width: 100%;" 
1109
|-
1110
| style="text-align: center;" | <math> B=\left( \begin{array}{ccc} \displaystyle{\partial N_1\over \partial x} & \displaystyle{\partial N_2\over \partial x} & \displaystyle{\partial N_3\over \partial x} \\  \displaystyle{\partial N_1\over \partial y} & \displaystyle{\partial N_2\over \partial y} & \displaystyle{\partial N_3\over \partial y} \end{array}  \right) = {1\over 2A} \left( \begin{array}{ccc} y_2-y_3 & y_3-y_1 & y_1-y_2 \\  x_3-x_2 & x_1-x_3 & x_2-x_1 \end{array}  \right).  </math>
1111
|}
1112
|}
1113
1114
Since the matrix <math display="inline">B</math> is constant on an element of the mesh, the integral is easy to compute. Thus, the difussive matrix <math display="inline">K_e</math> for a linear triangular element (FEML) is given by
1115
1116
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1117
|-
1118
| 
1119
{| style="text-align: left; margin:auto;width: 100%;" 
1120
|-
1121
| style="text-align: center;" | <math>K_e    =\int B^T DB dA =B^T D B A_e </math>
1122
|-
1123
| style="text-align: center;" | <math>    ={1\over 4A_e} \left( \begin{array}{ccc}y_2-y_3 & x_3-x_2  \\  y_3-y_1 & x_1-x_3  \\ y_1-y_2 & x_2-x_1 \end{array}  \right)   \left(\begin{array}{cc}k_{11} & k_{12} \\    k_{12} & k_{22}   \end{array} \right) \left( \begin{array}{ccc}y_2-y_3 & y_3-y_1 & y_1-y_2 \\  x_3-x_2 & x_1-x_3 & x_2-x_1 \end{array}  \right) </math>
1124
|}
1125
|}
1126
1127
Now, let us consider the first diagonal entry of the local FEML anisotropic Poisson diffusive matrix <math display="inline">K_e</math>,
1128
1129
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1130
|-
1131
| 
1132
{| style="text-align: left; margin:auto;width: 100%;" 
1133
|-
1134
| style="text-align: center;" | <math>(K_e)_{11}      ={1\over 4A}(k_{11}(y_2-y_3)^2 +(k_{12}+k_{12})(y_2-y_3)(x_3-x_2) + k_{22}(x_3-x_2)^2)</math>
1135
|-
1136
| style="text-align: center;" | <math>    ={1\over 4A}  (\begin{array}{cc}-(y_3-y_2), & x_3-x_2   \end{array} )   \left(\begin{array}{cc}k_{11} & k_{12} \\    k_{12} & k_{22}   \end{array} \right)   \left(\begin{array}{c}-(y_3-y_2) \\    x_3-x_2   \end{array} \right)</math>
1137
|-
1138
| style="text-align: center;" | <math>    ={1\over 4A}  (\begin{array}{cc}x_3-x_2, & y_3-y_2   \end{array} )   \left(\begin{array}{cc}0 & 1 \\    -1 & 0   \end{array} \right)   \left(\begin{array}{cc}k_{11} & k_{12} \\    k_{12} & k_{22}   \end{array} \right)   \left(\begin{array}{cc}0 & -1 \\    1 & 0   \end{array} \right)   \left(\begin{array}{c}x_3-x_2 \\    y_3-y_2   \end{array} \right)</math>
1139
|-
1140
| style="text-align: center;" | <math>    ={1\over 4A}  (J(v_3-v_2))^T K J(v_3-v_2)={1\over 4A}  J(v_3-v_2)\cdot K (J(v_3-v_2)), </math>
1141
|}
1142
|}
1143
1144
where <math display="inline">J</math> is the <math display="inline">90^\circ </math> anticlockwise rotation,
1145
1146
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1147
|-
1148
| 
1149
{| style="text-align: left; margin:auto;width: 100%;" 
1150
|-
1151
| style="text-align: center;" | <math>J    =\left(\begin{array}{cc}0 & -1 \\    1 & 0   \end{array} \right). </math>
1152
|}
1153
|}
1154
1155
In this notation, the diffusive term in local FEML is given as follows <span style="text-align: center; font-size: 75%;">
1156
1157
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1158
|-
1159
| 
1160
{| style="text-align: left; margin:auto;width: 100%;" 
1161
|-
1162
| style="text-align: center;" | <math> {1\over 4A} \left(\begin{array}{ccc} J(v_3-v_2)\cdot K(J(v_3-v_2)) & J(v_3-v_2)\cdot K(J(v_1-v_3)) & J(v_3-v_2)\cdot K(J(v_2-v_1)) \\  J(v_1-v_3)\cdot K(J(v_3-v_2)) & J(v_1-v_3)\cdot K(J(v_1-v_3)) & J(v_1-v_3)\cdot K(J(v_2-v_1)) \\  J(v_2-v_1)\cdot K(J(v_3-v_2)) & J(v_2-v_1)\cdot K(J(v_1-v_3)) & J(v_2-v_1)\cdot K(J(v_2-v_1)) \end{array}\right). </math>
1163
|}
1164
|}
1165
1166
</span>
1167
1168
===5.3 Comparison between local DEC and FEML discretizations===
1169
1170
For the sake of brevity,  we are only going to compare the entries of the first row and first column of each formulation. Consider the various lengths, areas and angles labeled in Figures [[#img-6|6]] and [[#img-7|7]].
1171
1172
<div id='img-7'></div>
1173
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1174
|-
1175
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-WellCenteredTriangle03-eps-converted-to.png|298px|Circumscribed triangle.]]
1176
|- style="text-align: center; font-size: 75%;"
1177
| colspan="1" style="padding-bottom:10px;"| '''Figure 7'''. Circumscribed triangle.
1178
|}
1179
1180
We have the following identities:
1181
1182
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1183
|-
1184
| 
1185
{| style="text-align: left; margin:auto;width: 100%;" 
1186
|-
1187
| style="text-align: center;" | <math>\pi = 2(\alpha _1+\alpha _2+\alpha _3),</math>
1188
|-
1189
| style="text-align: center;" | <math>  {2l_i\over L_i} = \tan (\alpha _i),</math>
1190
|-
1191
| style="text-align: center;" | <math>  {l_i\over R} = \sin (\alpha _i),</math>
1192
|-
1193
| style="text-align: center;" | <math>  {L_i\over 2R} = \cos (\alpha _i),</math>
1194
|-
1195
| style="text-align: center;" | <math>  A_1= {L_1l_1\over 4} + {L_3l_3\over 4},</math>
1196
|-
1197
| style="text-align: center;" | <math>  A_2= {L_1l_1\over 4} + {L_2l_2\over 4},</math>
1198
|-
1199
| style="text-align: center;" | <math>  A_3= {L_2l_2\over 4} + {L_3l_3\over 4}. </math>
1200
|}
1201
|}
1202
1203
====5.3.1 The diffusive term====
1204
1205
For instance, we claim that
1206
1207
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1208
|-
1209
| 
1210
{| style="text-align: left; margin:auto;width: 100%;" 
1211
|-
1212
| style="text-align: center;" | <math> {J(v_3-v_2)\cdot K(J(v_3-v_2))\over 4A} =  {1\over 4A}\left({l_1(\eta ^K_{3,1}+\eta ^K_{2, 1}-\eta ^K_{1, 1})\over L_1}+{l_3(\eta ^K_{3, 2}+\eta ^K_{2,2}-\eta ^K_{1, 2})\over L_3}\right) </math>
1213
|}
1214
|}
1215
1216
Indeed,
1217
1218
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1219
|-
1220
| 
1221
{| style="text-align: left; margin:auto;width: 100%;" 
1222
|-
1223
| style="text-align: center;" | <math>\eta ^K_{3,1}+\eta ^K_{2, 1}-\eta ^K_{1, 1}    =\left|\begin{array}{cc}x_2-x_1 & y_2-y_1 \\    dx(K(w_1)) & dy(K(w_1))   \end{array} \right|   +   \left|\begin{array}{cc}x_1-x_3 & y_1-y_3 \\    dx(K(w_1)) & dy(K(w_1))   \end{array} \right|   -   \left|\begin{array}{cc}x_3-x_2 & y_3-y_2 \\    dx(K(w_1)) & dy(K(w_1))   \end{array} \right|    </math>
1224
|-
1225
| style="text-align: center;" | <math>    =-2  \left|\begin{array}{cc}x_3-x_2 & y_3-y_2 \\    dx(K(w_1)) & dy(K(w_1))   \end{array} \right|   =-2 J(v_3-v_2)\cdot K(v_2-v_1)    </math>
1226
|-
1227
| style="text-align: center;padding-top:20px;" | <math> \eta ^K_{3, 2}+\eta ^K_{2,2}-\eta ^K_{1, 2}    =\left|\begin{array}{cc}x_2-x_1 & y_2-y_1 \\    dx(K(w_2)) & dy(K(w_2))   \end{array} \right|   +   \left|\begin{array}{cc}x_1-x_3 & y_1-y_3 \\    dx(K(w_2)) & dy(K(w_2))   \end{array} \right|   -   \left|\begin{array}{cc}x_3-x_2 & y_3-y_2 \\    dx(K(w_2)) & dy(K(w_2))   \end{array} \right|    </math>
1228
|-
1229
| style="text-align: center;" | <math>    =-2  \left|\begin{array}{cc}x_3-x_2 & y_3-y_2 \\    dx(K(w_2)) & dy(K(w_2))   \end{array} \right|   =-2 J(v_3-v_2)\cdot K(v_3-v_1) </math>
1230
|}
1231
|}
1232
1233
Thus,
1234
1235
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1236
|-
1237
| 
1238
{| style="text-align: left; margin:auto;width: 100%;" 
1239
|-
1240
| style="text-align: center;" | <math>\begin{array}{l} & \displaystyle{1\over 4A}\left(\displaystyle{l_1(\eta ^K_{3,1}+\eta ^K_{2, 1}-\eta ^K_{1, 1})\over L_1}+\displaystyle{l_3(\eta ^K_{3, 2}+\eta ^K_{2,2}-\eta ^K_{1, 2})\over L_3}\right)    =\\
1241
&\qquad = -\displaystyle{1 \over 2A }\left(\displaystyle{l_1\over L_1}J(v_3-v_2)\cdot K(v_2-v_1) +  \displaystyle{l_1\over L_1}J(v_3-v_2)\cdot K(v_3-v_1) \right)    \\     
1242
&\qquad =     \displaystyle{J(v_3-v_2)\cdot K(v_1-v_3)\over 2A}{\tan (\alpha _3)\over 2}    -\displaystyle{J(v_3-v_2)\cdot K( v_2-v_1)\over 2A}\displaystyle{\tan (\alpha _1)\over 2}\\    
1243
&\qquad =     \displaystyle{1\over 4A}J(v_3-v_2)\cdot K((v_1-v_3)\tan (\alpha _3)- (v_2-v_1)\tan (\alpha _1)). \end{array}</math>
1244
|}
1245
|}
1246
1247
All we have to do now is show that
1248
1249
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1250
|-
1251
| 
1252
{| style="text-align: left; margin:auto;width: 100%;" 
1253
|-
1254
| style="text-align: center;" | <math>(v_1-v_3)\tan (\alpha _3)- (v_2-v_1)\tan (\alpha _1) = J(v_3-v_2).</math>
1255
|}
1256
|}
1257
1258
Note that, since <math display="inline">J(v_3-v_2)</math> is orthogonal to <math display="inline">v_3-v_2</math>, <math display="inline">J(v_3-v_2)</math> must be parallel to <math display="inline">c -  {v_2+v_3\over 2}</math>. Thus,
1259
1260
<span id="eq-14"></span>
1261
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1262
|-
1263
| 
1264
{| style="text-align: left; margin:auto;width: 100%;" 
1265
|-
1266
| style="text-align: center;" | <math>J(v_3-v_2) = {L_2\over l_2}\left(c -  {v_2+v_3\over 2}\right).  </math>
1267
|}
1268
| style="width: 5px;text-align: right;white-space: nowrap;" | (14)
1269
|}
1270
1271
Now we are going to express <math display="inline">c</math> in terms of <math display="inline">v_1,v_2,v_3</math>. Let us consider
1272
1273
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1274
|-
1275
| 
1276
{| style="text-align: left; margin:auto;width: 100%;" 
1277
|-
1278
| style="text-align: center;" | <math>c-v_1 = a (v_2-v_1) + b(v_3-v_1)</math>
1279
|}
1280
|}
1281
1282
where <math display="inline">a,b</math> are coefficients to be determined. Taking inner products with <math display="inline">(v_2-v_1)</math> and <math display="inline">(v_3-v_1)</math> we get the two equations
1283
1284
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1285
|-
1286
| 
1287
{| style="text-align: left; margin:auto;width: 100%;" 
1288
|-
1289
| style="text-align: center;" | <math>R\cos (\alpha _1)    =aL_1+bL_3\cos (\alpha _1+\alpha _3),</math>
1290
|-
1291
| style="text-align: center;" | <math> R\cos (\alpha _3)    =aL_1\cos (\alpha _1+\alpha _3)+bL_3.  </math>
1292
|}
1293
|}
1294
1295
Solving for <math display="inline">a</math> and <math display="inline">b</math>
1296
1297
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1298
|-
1299
| 
1300
{| style="text-align: left; margin:auto;width: 100%;" 
1301
|-
1302
| style="text-align: center;" | <math>a    ={\sin (\alpha _3)\over 2\cos (\alpha _1)\sin (\alpha _1+\alpha _3)},</math>
1303
|-
1304
| style="text-align: center;" | <math> b    ={\sin (\alpha _1)\over 2\cos (\alpha _3)\sin (\alpha _1+\alpha _3)}. </math>
1305
|}
1306
|}
1307
1308
Substituting all the relevant quantities in ([[#eq-14|14]]) we have, for instance, that the coefficient of <math display="inline">(v_2-v_1)</math> is
1309
1310
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1311
|-
1312
| 
1313
{| style="text-align: left; margin:auto;width: 100%;" 
1314
|-
1315
| style="text-align: center;" | <math>2{\cos (\alpha _2)\over \sin (\alpha _2)}\left({\sin (\alpha _3)\over 2\cos (\alpha _1)\sin (\alpha _1+\alpha _3)}-{1\over 2}\right)    ={\cos (\alpha _2)\over \sin (\alpha _2)}\left({\sin (\alpha _3)-\cos (\alpha _1)\sin (\alpha _1+\alpha _3)\over \cos (\alpha _1)\sin (\alpha _1+\alpha _3)}\right)</math>
1316
|-
1317
| style="text-align: center;" | <math>     ={\cos (\alpha _2)\over \sin (\alpha _2)}\left({\sin (\alpha _3)-\cos (\alpha _1)(\sin (\alpha _1)\cos (\alpha _3)+\sin (\alpha _3)\cos (\alpha _1))\over \cos (\alpha _1)\sin (\pi /2-\alpha _2)}\right)</math>
1318
|-
1319
| style="text-align: center;" | <math>     ={\sin (\alpha _1)\over \sin (\alpha _2)}\left({\sin (\alpha _3)\sin (\alpha _1)-\cos (\alpha _1)\cos (\alpha _3)\over \cos (\alpha _1)}\right)</math>
1320
|-
1321
| style="text-align: center;" | <math>     =\tan (\alpha _1){-\cos (\alpha _1+\alpha _3)\over \sin (\alpha _2)}=\tan (\alpha _1){-\cos (\pi /2-\alpha _2)\over \sin (\alpha _2)}</math>
1322
|-
1323
| style="text-align: center;" | <math>    =\tan (\alpha _1){-\sin (\alpha _2)\over \sin (\alpha _2)}=-\tan (\alpha _1),  </math>
1324
|}
1325
|}
1326
1327
and similarly for the coefficient of <math display="inline">(v_1-v_3)</math>. The calculations for the remaining entries are similar.
1328
1329
Thus, the local DEC and FEML diffusive terms of the 2D anisotropic Poisson equation coincide.
1330
1331
====5.3.2 The source term====
1332
1333
As already observed in <span id='citeF-6'></span>[[#cite-6|[6]]], the right hand sides of the local DEC and FEML systems are different
1334
1335
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1336
|-
1337
| 
1338
{| style="text-align: left; margin:auto;width: 100%;" 
1339
|-
1340
| style="text-align: center;" | <math>\left(\begin{array}{c} A_1q_1\\ A_2q_2\\ A_3q_3       \end{array} \right) \not = {A\over 3}\left(\begin{array}{l} q_1\\ q_2\\ q_3         \end{array} \right).</math>
1341
|}
1342
|}
1343
1344
While FEML uses a barycentric subdivision to calculate the areas associated to each node/vertex, DEC uses a circumcentric subdivision. Eventually, this leads the DEC discretization to a better approximation of the solution (on coarse meshes).
1345
1346
==6. Some remarks about DEC quantities==
1347
1348
===6.1 The discrete Hodge star quantities revisited===
1349
1350
The numbers appearing in the local DEC matrices can be expressed both in terms of determinants and in terms of trigonometric functions. More precisely,
1351
1352
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1353
|-
1354
| 
1355
{| style="text-align: left; margin:auto;width: 100%;" 
1356
|-
1357
| style="text-align: center;" | <math>A_1 = {1\over 4}\left[\det \left(\begin{array}{ccc}x_1 & y_1 & 1\\ x_c & y_c & 1\\ x_2 & y_2 & 1                             \end{array} \right) +\det \left(\begin{array}{ccc}x_3 & y_3 & 1\\ x_c & y_c & 1\\ x_1 & y_1 & 1            \end{array} \right) \right]  \quad =\quad {R^2\over 4}(\sin (2\alpha _1)+\sin (2\alpha _3)),</math>
1358
|-
1359
| style="text-align: center;" | <math>  A_2  = {1\over 4}\left[\det \left(\begin{array}{ccc}x_1 & y_1 & 1\\ x_c & y_c & 1\\ x_2 & y_2 & 1                             \end{array} \right) +\det \left(\begin{array}{ccc}x_2 & y_2 & 1\\ x_c & y_c & 1\\ x_3 & y_3 & 1            \end{array} \right) \right] \quad = \quad {R^2\over 4}(\sin (2\alpha _1)+\sin (2\alpha _2)),</math>
1360
|-
1361
| style="text-align: center;" | <math>  A_3  = {1\over 4}\left[\det \left(\begin{array}{ccc}x_2 & y_2 & 1\\ x_c & y_c & 1\\ x_3 & y_3 & 1                             \end{array} \right) +\det \left(\begin{array}{ccc}x_3 & y_3 & 1\\ x_c & y_c & 1\\ x_1 & y_1 & 1            \end{array} \right) \right] \quad = \quad {R^2\over 4}(\sin (2\alpha _2)+\sin (2\alpha _3)),</math>
1362
|-
1363
| style="text-align: center;" | <math> {l_1\over L_1}  ={1\over L_1^2} \det \left(\begin{array}{ccc}x_1 & y_1 & 1\\ x_c & y_c & 1\\ x_2 & y_2 & 1                             \end{array} \right) \quad = \quad   {\tan (\alpha _1)\over 2},</math>
1364
|-
1365
| style="text-align: center;" | <math> {l_2\over L_2}  ={1\over L_2^2} \det \left(\begin{array}{ccc}x_2 & y_2 & 1\\ x_c & y_c & 1\\ x_3 & y_3 & 1                             \end{array} \right)  \quad = \quad  {\tan (\alpha _2)\over 2},</math>
1366
|-
1367
| style="text-align: center;" | <math> {l_3\over L_3}  ={1\over L_3^2} \det \left(\begin{array}{ccc}x_3 & y_3 & 1\\ x_c & y_c & 1\\ x_1 & y_1 & 1                             \end{array} \right)   \quad = \quad {\tan (\alpha _3)\over 2}. </math>
1368
|}
1369
|}
1370
1371
These expressions are valid regardless of the location of the circumcenter and can, indeed, take negative values. The angles that are measured in the scheme can be negative as in the obtuse triangle of Figure [[#img-8|8]].
1372
1373
<div id='img-8'></div>
1374
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1375
|-
1376
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle01a-eps-converted-to.png|180px|]]
1377
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NegativeAngles01-eps-converted-to.png|180px|Negative (exterior) angles measured in an obtuse triangle.]]
1378
|- style="text-align: center; font-size: 75%;"
1379
| colspan="2" style="padding:10px;"| '''Figure 8'''. Negative (exterior) angles measured in an obtuse triangle.
1380
|}
1381
1382
and some quantities can even be zero. For instance, if
1383
1384
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1385
|-
1386
| 
1387
{| style="text-align: left; margin:auto;width: 100%;" 
1388
|-
1389
| style="text-align: center;" | <math>\alpha _2={\pi \over 2}-2\alpha _1,</math>
1390
|}
1391
|}
1392
1393
then
1394
1395
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1396
|-
1397
| 
1398
{| style="text-align: left; margin:auto;width: 100%;" 
1399
|-
1400
| style="text-align: center;" | <math>A_1=0.</math>
1401
|}
1402
|}
1403
1404
===6.2 Area weights assigned to vertices===
1405
1406
In order to understand how local DEC assigns area weights to vertices differently from FEML, let us consider the obtuse triangle shown in Figure [[#img-8|8]]. Let <math display="inline">p_1,p_2,p_3</math> be the middle points of the segments <math display="inline">[v_1,v_2],[v_1,v_3],[v_2,v_3]</math> respectively.     As shown in Figure [[#img-9|9]], the triangle <math display="inline">[v_1,p_3,c]</math> lies completely outside of the triangle <math display="inline">[v_1,v_2,v_3]</math>. Geometrically,  this implies that its area must be assigned a negative sign, which is confirmed  by the determinant formulas of Subsection [[#6.1 The discrete Hodge star quantities revisited|6.1]]. On the other hand, the triangle <math display="inline">[v_1,p_1,c]</math> will have positive area.  Thus, their sum gives us the area <math display="inline">A_1</math> in Figure [[#img-9|9]].
1407
1408
<div id='img-9'></div>
1409
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1410
|-
1411
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle03a-eps-converted-to.png|200px|]]
1412
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle04a-eps-converted-to.png|200px|]]
1413
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle05a-eps-converted-to.png|200px|Area weight assigned to ]]
1414
|- style="text-align: center; font-size: 75%;"
1415
| colspan="3" style="padding-bottom:10px;"| '''Figure 9'''. Area weight assigned to <math display="inline">v_1</math>
1416
|}
1417
1418
1419
The area <math display="inline">A_3</math> is computed similarly, where the triangle <math display="inline">[p_3,v_3,c]</math> is assigned negative area (Figure [[#img-10|10]]).
1420
1421
<div id='img-10'></div>
1422
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1423
|-
1424
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle06a-eps-converted-to.png|200px|]]
1425
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle07a-eps-converted-to.png|200px|]]
1426
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle08a-eps-converted-to.png|200px|]]
1427
|- style="text-align: center; font-size: 75%;"
1428
| colspan="3" style="padding-bottom:10px;"| '''Figure 10'''. Area weight assigned to <math display="inline">v_3</math>
1429
|}
1430
1431
Note that for <math display="inline">A_2</math>, the two triangles <math display="inline">[p_1,v_2,c]</math> and <math display="inline">[v_2,p_2,c]</math> both have positive areas (Figure [[#img-11|11]]).
1432
1433
<div id='img-11'></div>
1434
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1435
|-
1436
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle09a-eps-converted-to.png|200px|]]
1437
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle10a-eps-converted-to.png|200px|]]
1438
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle11a-eps-converted-to.png|200px|Area weight assigned to ]]
1439
|- style="text-align: center; font-size: 75%;"
1440
| colspan="3" style="padding-bottom:10px;"| '''Figure 11'''. Area weight assigned to <math display="inline">v_2</math>
1441
|}
1442
1443
==7. Numerical examples==
1444
1445
In this section, we present three numerical examples in order to illustrate the performance of DEC resulting from the local formulation and its implementation.  In all cases, we solve the anisotropic Poisson equation. The FEML methodology that we have used in the comparison can be consulted <span id='citeF-11'></span><span id='citeF-13'></span><span id='citeF-2'></span>[[#cite-11|[2,11,13]]].
1446
1447
===7.1 First example: Heterogeneity===
1448
1449
This example is intended to highlight how Local DEC deals effectively with heterogeneous materials.  Consider the region in the plane given in Figure [[#img-12|12]]. 
1450
1451
<div id='img-12'></div>
1452
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1453
|-
1454
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_12_SquareWithConditions.png|220px|Square and inner circle with different conditions.]]
1455
|- style="text-align: center; font-size: 75%;"
1456
| colspan="1" style="padding:10px;"| '''Figure 12'''. Square and inner circle with different conditions
1457
|}
1458
1459
* The difussion constant for the region labelled mat1 is <math display="inline">k=12</math> and its source term is <math display="inline">q=20</math>.
1460
* The difussion constant for the region labelled mat2 is <math display="inline">k=6</math> and its source term is <math display="inline">q=5</math>.
1461
1462
1463
The meshes used in this example are shown in Figure [[#img-13|13]] and vary from coarse to very fine. 
1464
1465
<div id='img-13a'></div>
1466
<div id='img-13b'></div>
1467
<div id='img-13c'></div>
1468
<div id='img-13d'></div>
1469
<div id='img-13e'></div>
1470
<div id='img-13f'></div>
1471
<div id='img-13'></div>
1472
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1473
|-
1474
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m1.png|150px|]]
1475
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m2.png|144px|]]
1476
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m3.png|144px|]]
1477
|- style="text-align: center; font-size: 75%;"
1478
|  (a) 
1479
| (b) 
1480
| (c) 
1481
|-
1482
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m4.png|150px|]]
1483
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m5.png|150px|]]
1484
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m6.png|150px|]]
1485
|- style="text-align: center; font-size: 75%;"
1486
| (d) 
1487
| (e) 
1488
| (f) 
1489
|- style="text-align: center; font-size: 75%;"
1490
| colspan="3" style="padding:10px;"| '''Figure 13'''. Six of the meshes used in the first example
1491
|}
1492
1493
The numerical results for the maximum temperature value are exemplified in Table [[#table-1|1]].
1494
1495
<div id='table-1'></div>
1496
<div class="center" style="font-size: 75%;">'''Table 1'''. Numerical simulation results of the first example</div>
1497
1498
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1499
|- style="border-top: 2px solid;border-bottom: 2px solid;"
1500
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Mesh
1501
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" |  nodes
1502
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | elements
1503
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Temp. Value
1504
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Flux Magnitude
1505
|-style="border-top: 2px solid;border-bottom: 2px solid;"
1506
| style="border-left: 2px solid;border-right: 1px solid;" | DEC  
1507
| style="border-left: 1px solid;border-right: 1px solid;" | FEML
1508
| style="border-left: 1px solid;border-right: 1px solid;" | DEC  
1509
| style="border-left: 1px solid;border-right: 2px solid;" | FEML  
1510
|- style="border-top: 2px solid;"
1511
| style="border-left: 2px solid;border-right: 1px solid;" |    Figure [[#img-13|13]](a) 
1512
| style="border-left: 1px solid;border-right: 1px solid;" | 49 
1513
| style="border-left: 1px solid;border-right: 1px solid;" | 80 
1514
| style="border-left: 1px solid;border-right: 1px solid;" | 5.51836 
1515
| style="border-left: 1px solid;border-right: 1px solid;" | 5.53345 
1516
| style="border-left: 1px solid;border-right: 1px solid;" | 13.837 
1517
| style="border-left: 1px solid;border-right: 2px solid;" | 13.453 
1518
|-
1519
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-13|13]](b) 
1520
| style="border-left: 1px solid;border-right: 1px solid;" | 98 
1521
| style="border-left: 1px solid;border-right: 1px solid;" | 162 
1522
| style="border-left: 1px solid;border-right: 1px solid;" | 5.65826 
1523
| style="border-left: 1px solid;border-right: 1px solid;" | 5.66648 
1524
| style="border-left: 1px solid;border-right: 1px solid;" | 14.137 
1525
| style="border-left: 1px solid;border-right: 2px solid;" | 14.024 
1526
|-
1527
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-13|13]](c) 
1528
| style="border-left: 1px solid;border-right: 1px solid;" | 258 
1529
| style="border-left: 1px solid;border-right: 1px solid;" | 466 
1530
| style="border-left: 1px solid;border-right: 1px solid;" | 5.70585 
1531
| style="border-left: 1px solid;border-right: 1px solid;" | 5.71709 
1532
| style="border-left: 1px solid;border-right: 1px solid;" | 14.858 
1533
| style="border-left: 1px solid;border-right: 2px solid;" | 14.770 
1534
|-
1535
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-13|13]](d) 
1536
| style="border-left: 1px solid;border-right: 1px solid;" | 1,010 
1537
| style="border-left: 1px solid;border-right: 1px solid;" | 1,914 
1538
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72103 
1539
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72280 
1540
| style="border-left: 1px solid;border-right: 1px solid;" | 15.008 
1541
| style="border-left: 1px solid;border-right: 2px solid;" | 15.006 
1542
|-
1543
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-13|13]](e) 
1544
| style="border-left: 1px solid;border-right: 1px solid;" | 3,813 
1545
| style="border-left: 1px solid;border-right: 1px solid;" | 7,424 
1546
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72725 
1547
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72725 
1548
| style="border-left: 1px solid;border-right: 1px solid;" | 15.229 
1549
| style="border-left: 1px solid;border-right: 2px solid;" | 15.228 
1550
|-
1551
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-13|13]](f) 
1552
| style="border-left: 1px solid;border-right: 1px solid;" | 13,911 
1553
| style="border-left: 1px solid;border-right: 1px solid;" | 27,420 
1554
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72821 
1555
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72826 
1556
| style="border-left: 1px solid;border-right: 1px solid;" | 15.342 
1557
| style="border-left: 1px solid;border-right: 2px solid;" | 15.337 
1558
|-
1559
| style="border-left: 2px solid;border-right: 1px solid;" | 
1560
| style="border-left: 1px solid;border-right: 1px solid;" | 50,950 
1561
| style="border-left: 1px solid;border-right: 1px solid;" | 101,098 
1562
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72841 
1563
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72842 
1564
| style="border-left: 1px solid;border-right: 1px solid;" | 15.395 
1565
| style="border-left: 1px solid;border-right: 2px solid;" | 15.396 
1566
|-
1567
| style="border-left: 2px solid;border-right: 1px solid;" | 
1568
| style="border-left: 1px solid;border-right: 1px solid;" | 135,519 
1569
| style="border-left: 1px solid;border-right: 1px solid;" | 269,700 
1570
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72845 
1571
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72845 
1572
| style="border-left: 1px solid;border-right: 1px solid;" | 15.420 
1573
| style="border-left: 1px solid;border-right: 2px solid;" | 15.417 
1574
|-
1575
| style="border-left: 2px solid;border-right: 1px solid;" | 
1576
| style="border-left: 1px solid;border-right: 1px solid;" | 298,299 
1577
| style="border-left: 1px solid;border-right: 1px solid;" | 594,596 
1578
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1579
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1580
| style="border-left: 1px solid;border-right: 1px solid;" | 15.430 
1581
| style="border-left: 1px solid;border-right: 2px solid;" | 15.429 
1582
|-
1583
| style="border-left: 2px solid;border-right: 1px solid;" | 
1584
| style="border-left: 1px solid;border-right: 1px solid;" | 600,594 
1585
| style="border-left: 1px solid;border-right: 1px solid;" | 1,198,330 
1586
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1587
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1588
| style="border-left: 1px solid;border-right: 1px solid;" | 15.433 
1589
| style="border-left: 1px solid;border-right: 2px solid;" | 15.433 
1590
|- style="border-bottom: 2px solid;"
1591
| style="border-left: 2px solid;border-right: 1px solid;" | 
1592
| style="border-left: 1px solid;border-right: 1px solid;" | 1,175,238 
1593
| style="border-left: 1px solid;border-right: 1px solid;" | 2,346,474 
1594
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72849 
1595
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72849 
1596
| style="border-left: 1px solid;border-right: 1px solid;" | 15.43724 
1597
| style="border-left: 1px solid;border-right: 2px solid;" | 15.43724 
1598
|}
1599
1600
1601
The temperature and flux-magnitude distribution fields are shown in Figure [[#img-14|14]].     
1602
1603
<div id='img-14a'></div>
1604
<div id='img-14b'></div>
1605
<div id='img-14'></div>
1606
{| style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;max-width: auto;"
1607
|-
1608
|  style="text-align: center;padding:10px;"| [[Image:Esqueda_et_al_2020a-Fig_14_Square_contour_temp.png|240px|Contour Fill of Temperatures]]
1609
|  style="text-align: center;padding:10px;"| [[Image:Esqueda_et_al_2020a-Fig_14_Square_contour_flux.png|240px|Contour Fill of Flux vectors on Elems]] 
1610
|-
1611
|  style="text-align: center;font-size: 75%;"|(a) Contour fill of temperatures
1612
|  style="text-align: center;font-size: 75%;"|(b) Contour fill of flux vectors on Elems
1613
|- style="text-align: center; font-size: 75%;"
1614
| colspan="2" style="padding:10px;"| '''Figure 14'''. Temperature and flux-magnitude distribution fields of the first example
1615
|}
1616
1617
1618
Figure [[#img-15|15]] shows the graphs of the temperature and the flux-magnitude along a horizontal line crossing the inner circle for the first two meshes. 
1619
1620
<div id='img-15a'></div>
1621
<div id='img-15b'></div>
1622
<div id='img-15c'></div>
1623
<div id='img-15d'></div>
1624
<div id='img-15e'></div>
1625
<div id='img-15f'></div>
1626
<div id='img-15'></div>
1627
{| style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;max-width: auto;"
1628
|-
1629
|  style="text-align: center;padding:10px;"| [[Image:Esqueda_et_al_2020a-Fig_15_Square_m1_diametral_temp.png|300px|]]
1630
|  style="text-align: center;padding:10px;"| [[Image:Esqueda_et_al_2020a-Fig_15_Square_m1_diametral_flux.png|300px|]]
1631
|-
1632
|  style="text-align: center;font-size: 75%;"|(a) 
1633
|  style="text-align: center;font-size: 75%;"|(b) 
1634
|-
1635
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m2_diametral_temp.png|300px|]]
1636
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m2_diametral_flux.png|300px|]]
1637
|- 
1638
| style="text-align: center;font-size: 75%;"|(c) 
1639
| style="text-align: center;font-size: 75%;"|(d) 
1640
|-
1641
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m3_diametral_temp.png|300px|]]
1642
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m3_diametral_flux.png|300px|]]
1643
|- 
1644
| style="text-align: center;font-size: 75%;"|(e) 
1645
| style="text-align: center;font-size: 75%;"|(f) 
1646
|- style="text-align: center; font-size: 75%;"
1647
| colspan="2" style="padding:10px;"| '''Figure 15'''. Temperature and Flux magnitude graphs of the first example along a cross-section of the domain for different meshes
1648
|}
1649
1650
1651
Table [[#table-2|2]] shows some global error metrics for different meshes. Figure [[#img-16|16]] shows the error evolution in <math display="inline">L^2</math> norm for this example.
1652
1653
<div id='table-2'></div>
1654
<div class="center" style="font-size: 75%;">'''Table 2'''. DEC <math>L^2</math> errors in the first example</div>
1655
1656
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1657
|- style="border-top: 2px solid;"
1658
| style="border-left: 2px solid;border-right: 2px solid;" |    '''Mesh''' 
1659
| style="border-left: 2px solid;border-right: 2px solid;" | '''Nodes''' 
1660
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>    \sum (u-u_i)^2 \over nodes    </math>''' 
1661
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>L^2</math> norm''' 
1662
|- style="border-top: 2px solid;"
1663
| style="border-left: 2px solid;border-right: 1px solid;" |    1 
1664
| style="border-left: 1px solid;border-right: 1px solid;" | 49 
1665
| style="border-left: 1px solid;border-right: 1px solid;" | 1.0537e-02 
1666
| style="border-left: 1px solid;border-right: 2px solid;" | 1.4438e-01 
1667
|- 
1668
| style="border-left: 2px solid;border-right: 1px solid;" |    2 
1669
| style="border-left: 1px solid;border-right: 1px solid;" | 98 
1670
| style="border-left: 1px solid;border-right: 1px solid;" | 4.2447e-03 
1671
| style="border-left: 1px solid;border-right: 2px solid;" | 4.8558e-02 
1672
|- 
1673
| style="border-left: 2px solid;border-right: 1px solid;" |    3 
1674
| style="border-left: 1px solid;border-right: 1px solid;" | 258 
1675
| style="border-left: 1px solid;border-right: 1px solid;" | 6.9781e-04 
1676
| style="border-left: 1px solid;border-right: 2px solid;" | 3.0390e-03 
1677
|- 
1678
| style="border-left: 2px solid;border-right: 1px solid;" |    4 
1679
| style="border-left: 1px solid;border-right: 1px solid;" | 1,010 
1680
| style="border-left: 1px solid;border-right: 1px solid;" | 8.8386e-05 
1681
| style="border-left: 1px solid;border-right: 2px solid;" | 1.4877e-04 
1682
|- 
1683
| style="border-left: 2px solid;border-right: 1px solid;" |    5 
1684
| style="border-left: 1px solid;border-right: 1px solid;" | 3,813 
1685
| style="border-left: 1px solid;border-right: 1px solid;" | 1.0736e-05 
1686
| style="border-left: 1px solid;border-right: 2px solid;" | 7.7369e-06 
1687
|- 
1688
| style="border-left: 2px solid;border-right: 1px solid;" |    6 
1689
| style="border-left: 1px solid;border-right: 1px solid;" | 13,911 
1690
| style="border-left: 1px solid;border-right: 1px solid;" | 1.4422e-06 
1691
| style="border-left: 1px solid;border-right: 2px solid;" | 4.9791e-07 
1692
|- 
1693
| style="border-left: 2px solid;border-right: 1px solid;" |    7 
1694
| style="border-left: 1px solid;border-right: 1px solid;" | 50,950 
1695
| style="border-left: 1px solid;border-right: 1px solid;" | 1.7582e-07 
1696
| style="border-left: 1px solid;border-right: 2px solid;" | 2.9608e-08 
1697
|- 
1698
| style="border-left: 2px solid;border-right: 1px solid;" |    8 
1699
| style="border-left: 1px solid;border-right: 1px solid;" | 135,518 
1700
| style="border-left: 1px solid;border-right: 1px solid;" | 3.2621e-08 
1701
| style="border-left: 1px solid;border-right: 2px solid;" | 2.9233e-09 
1702
|- 
1703
| style="border-left: 2px solid;border-right: 1px solid;" |    9 
1704
| style="border-left: 1px solid;border-right: 1px solid;" | 298,299 
1705
| style="border-left: 1px solid;border-right: 1px solid;" | 7.3566e-09 
1706
| style="border-left: 1px solid;border-right: 2px solid;" | 3.3610e-10 
1707
|- style="border-top: 1px solid;border-bottom: 2px solid;"
1708
| style="border-left: 2px solid;border-right: 1px solid;" |    10 
1709
| style="border-left: 1px solid;border-right: 1px solid;" | 603,440 
1710
| style="border-left: 1px solid;border-right: 1px solid;" | 1.8577e-09 
1711
| style="border-left: 1px solid;border-right: 2px solid;" | 4.9496e-11 
1712
|}
1713
1714
1715
<div id='img-16'></div>
1716
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1717
|-
1718
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-DEC_Error_Graph_Square_Circle.png|430px|DEC ]]
1719
|- style="text-align: center; font-size: 75%;"
1720
| colspan="1" style="padding-bottom:10px;"| '''Figure 16'''. DEC <math>L^2</math> error in the first example
1721
|}
1722
1723
===7.2 Second example: Anisotropy===
1724
1725
Let us solve the Poisson equation in a circle of radius one centered at the origin <math display="inline">(0,0)</math> under the following conditions (Figure [[#img-17|17]]):
1726
1727
* heat anisotropic diffusion constants <math display="inline">K_x = 1.5, K_y=1.0</math>;
1728
* material angle <math display="inline">30^\circ </math>;
1729
* source term <math display="inline">q= 1</math>;
1730
* Dirichlet boundary condition <math display="inline">u=10</math>.
1731
1732
<div id='img-18'></div>
1733
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1734
|-
1735
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_16_CircleWithConditions.png|180px|Disk of radius one.]]
1736
|- style="text-align: center; font-size: 75%;"
1737
| colspan="1" style="padding-bottom:10px;"| '''Figure 17'''. Disk of radius one
1738
|}
1739
1740
1741
The meshes used in this example are shown in Figure [[#img-18|18]] and vary from very coarse to very fine. 
1742
1743
<div id='img-18a'></div>
1744
<div id='img-18b'></div>
1745
<div id='img-18c'></div>
1746
<div id='img-18d'></div>
1747
<div id='img-18e'></div>
1748
<div id='img-18f'></div>
1749
<div id='img-18'></div>
1750
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1751
|-
1752
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh1.png|144px|]]
1753
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh2.png|144px|]]
1754
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh3.png|144px|]]
1755
|- 
1756
| style="text-align: center;font-size: 75%;"|(a) 
1757
| style="text-align: center;font-size: 75%;"|(b) 
1758
| style="text-align: center;font-size: 75%;"|(c) 
1759
|-
1760
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh4.png|144px|]]
1761
|colspan="1" style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh5.png|144px|]]
1762
|colspan="1" style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh6.png|144px|]]
1763
|- 
1764
| style="text-align: center;font-size: 75%;"|(d) 
1765
|colspan="1"  style="text-align: center;font-size: 75%;"|(e) 
1766
| colspan="1" style="text-align: center;font-size: 75%;"|(f) 
1767
|- style="text-align: center; font-size: 75%;"
1768
| colspan="3" style="padding:10px;" | '''Figure 18'''. First six meshes used for unit disk
1769
|}
1770
1771
1772
The numerical results for the maximum temperature value (<math display="inline">u(0,0)=10.2</math>) are exemplified in Table [[#table-3|3]] where  a comparison with the Finite Element Method with linear interpolation functions (FEML) is also shown.
1773
1774
<div id='table-3'></div>
1775
<div style="text-align: center; font-size: 75%; ">'''Table 3'''. Temperature value at the point (0,0) and Flux magnitude value at the point (-1, 0) of the numerical simulations for the second example</div>  
1776
1777
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1778
|- style="border-top: 2px solid;border-bottom: 2px solid;"
1779
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Mesh
1780
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Nodes
1781
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Elements
1782
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Temp. Value at <math>(0,0)</math>
1783
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Flux Magnitude at <math>(-1,0)</math>
1784
|-style="border-top: 2px solid;border-bottom: 2px solid;"
1785
| style="border-left: 2px solid;border-right: 1px solid;" | DEC  
1786
| style="border-left: 1px solid;border-right: 1px solid;" | FEML
1787
| style="border-left: 1px solid;border-right: 1px solid;" | DEC  
1788
| style="border-left: 1px solid;border-right: 2px solid;" | FEML  
1789
|- 
1790
| style="border-left: 2px solid;border-right: 1px solid;" |    Figure [[#img-18|18]](a)
1791
| style="border-left: 1px solid;border-right: 1px solid;" | 17 
1792
| style="border-left: 1px solid;border-right: 1px solid;" | 20  
1793
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20014
1794
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19002  
1795
| style="border-left: 1px solid;border-right: 1px solid;" | 0.42133 
1796
| style="border-left: 1px solid;border-right: 2px solid;" | 0.43865
1797
|-
1798
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-18|18]](b)
1799
| style="border-left: 1px solid;border-right: 1px solid;" | 41 
1800
| style="border-left: 1px solid;border-right: 1px solid;" | 56  
1801
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20007
1802
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19678  
1803
| style="border-left: 1px solid;border-right: 1px solid;" | 0.48544 
1804
| style="border-left: 1px solid;border-right: 2px solid;" | 0.49387
1805
|-
1806
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-18|18]](c)
1807
| style="border-left: 1px solid;border-right: 1px solid;" | 201 
1808
| style="border-left: 1px solid;border-right: 1px solid;" | 344  
1809
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20012
1810
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20158  
1811
| style="border-left: 1px solid;border-right: 1px solid;" | 0.52470 
1812
| style="border-left: 1px solid;border-right: 2px solid;" | 0.52428
1813
|-
1814
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-18|18]](d)
1815
| style="border-left: 1px solid;border-right: 1px solid;" | 713 
1816
| style="border-left: 1px solid;border-right: 1px solid;" | 1304 
1817
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1818
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19969  
1819
| style="border-left: 1px solid;border-right: 1px solid;" | 0.54143 
1820
| style="border-left: 1px solid;border-right: 2px solid;" | 0.54224
1821
|-
1822
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-18|18]](e)
1823
| style="border-left: 1px solid;border-right: 1px solid;" | 2455
1824
| style="border-left: 1px solid;border-right: 1px solid;" | 4660 
1825
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1826
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19990  
1827
| style="border-left: 1px solid;border-right: 1px solid;" | 0.54971 
1828
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55138
1829
|-
1830
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-18|18]](f)
1831
| style="border-left: 1px solid;border-right: 1px solid;" | 8180
1832
| style="border-left: 1px solid;border-right: 1px solid;" | 15862 
1833
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1834
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20002  
1835
| style="border-left: 1px solid;border-right: 1px solid;" | 0.55326 
1836
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55409
1837
|-
1838
| style="border-left: 2px solid;border-right: 1px solid;" | 
1839
| style="border-left: 1px solid;border-right: 1px solid;" | 20016 
1840
| style="border-left: 1px solid;border-right: 1px solid;" | 39198 
1841
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1842
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19999  
1843
| style="border-left: 1px solid;border-right: 1px solid;" | 0.55470 
1844
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55520
1845
|- style="border-bottom: 2px solid;"
1846
| style="border-left: 2px solid;border-right: 1px solid;" | 
1847
| style="border-left: 1px solid;border-right: 1px solid;" | 42306 
1848
| style="border-left: 1px solid;border-right: 1px solid;" | 83362 
1849
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1850
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000  
1851
| style="border-left: 1px solid;border-right: 1px solid;" | 0.55540 
1852
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55572
1853
|}
1854
1855
1856
The temperature distribution and Flux magnitude fields for the finest mesh are shown in Figure [[#img-19|19]]. 
1857
1858
<div id='img-19a'></div>
1859
<div id='img-19b'></div>
1860
<div id='img-19'></div>
1861
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1862
|-
1863
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_18_CircleContourTemp.png|234px|Contour Fill of Temperatures]]
1864
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_18_CircleContourFlux.png|234px|Contour Fill of Flux vectors on Elems]]
1865
|- style="text-align: center; font-size: 75%;"
1866
| (a) Contour Fill of Temperatures
1867
| (b) Contour Fill of Flux vectors on Elems
1868
|- style="text-align: center; font-size: 75%;"
1869
| colspan="2" style="padding:10px;"| '''Figure 19'''. Temperature distribution and Flux magnitude fields for the finest mesh of the second example
1870
|}
1871
1872
1873
Figures [[#img-20|20]](a), (b) and (c)  show the graphs of the temperature and flux magnitude values along a diameter of the circle for the different meshes of Figures [[#img-19|18]](a), (b) and (c), respectively. 
1874
1875
<div id='img-20a'></div>
1876
<div id='img-20b'></div>
1877
<div id='img-20c'></div>
1878
<div id='img-20d'></div>
1879
<div id='img-20e'></div>
1880
<div id='img-20f'></div>
1881
<div id='img-20'></div>
1882
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1883
|-
1884
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleTempCrossSection01.png|300px|]]
1885
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleFluxCrossSection01.png|300px|]]
1886
|- style="text-align: center; font-size: 75%;"
1887
| (a) 
1888
| (b) 
1889
|-
1890
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleTempCrossSection02.png|300px|]]
1891
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleFluxCrossSection02.png|300px|]]
1892
|- style="text-align: center; font-size: 75%;"
1893
| (c) 
1894
| (d) 
1895
|-
1896
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleTempCrossSection03.png|300px|]]
1897
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleFluxCrossSection03.png|300px|]]
1898
|- style="text-align: center; font-size: 75%;"
1899
| (e) 
1900
| (f) 
1901
|- style="text-align: center; font-size: 75%;"
1902
| colspan="2" style="padding:10px;"| '''Figure 20'''. Temperature and Flux magnitude graphs of the second example along a diameter of the circle for different meshes: mesh in Figure Figure [[#img-18|18]](a), a-Temperature, b-Flux; mesh in Figure [[#img-18|18]](b), c-Temperature, d-Flux; mesh in Figure [[#img-18|18]](c), e-Temperature, f-Flux
1903
|}
1904
1905
1906
Table [[#table-4|4]] shows some global error metrics for different meshes.   Figure [[#img-21|21]] shows the  error evolution in <math display="inline">L^2</math> norm for this example.
1907
1908
<div id='table-4'></div>
1909
<div class="center" style="font-size: 75%;">'''Table 4'''. DEC errors in the second example</div>
1910
1911
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1912
|- style="border-top: 2px solid;"
1913
| style="border-left: 2px solid;border-right: 2px solid;" |    '''Mesh''' 
1914
| style="border-left: 2px solid;border-right: 2px solid;" | '''Nodes''' 
1915
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>    \sum (u-u_i)^2 \over nodes    </math>''' 
1916
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>L^2</math> norm''' 
1917
|- style="border-top: 2px solid;"
1918
| style="border-left: 2px solid;border-right: 1px solid;" |     1 
1919
| style="border-left: 1px solid;border-right: 1px solid;" | 17 
1920
| style="border-left: 1px solid;border-right: 1px solid;" | 1.5818e-04 
1921
| style="border-left: 1px solid;border-right: 2px solid;" | 2.3555e-06 
1922
|- style="border-top: 1px solid;"
1923
| style="border-left: 2px solid;border-right: 1px solid;" |     2 
1924
| style="border-left: 1px solid;border-right: 1px solid;" | 51 
1925
| style="border-left: 1px solid;border-right: 1px solid;" | 2.5395e-05 
1926
| style="border-left: 1px solid;border-right: 2px solid;" | 1.5639e-07 
1927
|- style="border-top: 1px solid;"
1928
| style="border-left: 2px solid;border-right: 1px solid;" |     3 
1929
| style="border-left: 1px solid;border-right: 1px solid;" | 201 
1930
| style="border-left: 1px solid;border-right: 1px solid;" | 3.3643e-06 
1931
| style="border-left: 1px solid;border-right: 2px solid;" | 1.0517e-08 
1932
|- style="border-top: 1px solid;"
1933
| style="border-left: 2px solid;border-right: 1px solid;" |     4 
1934
| style="border-left: 1px solid;border-right: 1px solid;" | 713 
1935
| style="border-left: 1px solid;border-right: 1px solid;" | 5.1563e-07 
1936
| style="border-left: 1px solid;border-right: 2px solid;" | 8.3543e-10 
1937
|- style="border-top: 1px solid;"
1938
| style="border-left: 2px solid;border-right: 1px solid;" |     5 
1939
| style="border-left: 1px solid;border-right: 1px solid;" | 2,455 
1940
| style="border-left: 1px solid;border-right: 1px solid;" | 8.9235e-08 
1941
| style="border-left: 1px solid;border-right: 2px solid;" | 7.6073e-11 
1942
|- style="border-top: 1px solid;"
1943
| style="border-left: 2px solid;border-right: 1px solid;" |     6 
1944
| style="border-left: 1px solid;border-right: 1px solid;" | 8,180 
1945
| style="border-left: 1px solid;border-right: 1px solid;" | 3.1731e-08 
1946
| style="border-left: 1px solid;border-right: 2px solid;" | 2.9858e-11 
1947
|- style="border-top: 1px solid;"
1948
| style="border-left: 2px solid;border-right: 1px solid;" |     7 
1949
| style="border-left: 1px solid;border-right: 1px solid;" | 20,016 
1950
| style="border-left: 1px solid;border-right: 1px solid;" | 2.0217e-08 
1951
| style="border-left: 1px solid;border-right: 2px solid;" | 2.6580e-11 
1952
|- style="border-top: 1px solid;"
1953
| style="border-left: 2px solid;border-right: 1px solid;" |     8 
1954
| style="border-left: 1px solid;border-right: 1px solid;" | 42,306 
1955
| style="border-left: 1px solid;border-right: 1px solid;" | 1.4421e-08 
1956
| style="border-left: 1px solid;border-right: 2px solid;" | 2.7062e-11 
1957
|- style="border-top: 1px solid;"
1958
| style="border-left: 2px solid;border-right: 1px solid;" |     9 
1959
| style="border-left: 1px solid;border-right: 1px solid;" | 82,722 
1960
| style="border-left: 1px solid;border-right: 1px solid;" | 9.8533e-09 
1961
| style="border-left: 1px solid;border-right: 2px solid;" | 2.6164e-11 
1962
|- style="border-top: 1px solid;"
1963
| style="border-left: 2px solid;border-right: 1px solid;" |     10 
1964
| style="border-left: 1px solid;border-right: 1px solid;" | 156,274 
1965
| style="border-left: 1px solid;border-right: 1px solid;" | 7.1352e-09 
1966
| style="border-left: 1px solid;border-right: 2px solid;" | 2.5954e-11 
1967
|- style="border-top: 1px solid;"
1968
| style="border-left: 2px solid;border-right: 1px solid;" |     11 
1969
| style="border-left: 1px solid;border-right: 1px solid;" | 420,013 
1970
| style="border-left: 1px solid;border-right: 1px solid;" | 4.4277e-09 
1971
| style="border-left: 1px solid;border-right: 2px solid;" | 2.6151e-11 
1972
|- style="border-top: 1px solid;border-bottom: 2px solid;"
1973
| style="border-left: 2px solid;border-right: 1px solid;" |     12 
1974
| style="border-left: 1px solid;border-right: 1px solid;" | 935,016 
1975
| style="border-left: 1px solid;border-right: 1px solid;" | 2.9635e-09 
1976
| style="border-left: 1px solid;border-right: 2px solid;" | 2.6003e-11 
1977
|}
1978
1979
1980
<div id='img-21'></div>
1981
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1982
|-
1983
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-DEC_Error_Graph_Circle.png|430px|DEC ]]
1984
|- style="text-align: center; font-size: 75%;"
1985
| colspan="1" style="padding-bottom:10px;"| '''Figure 21'''. DEC <math>L^2</math> error evolution in the second example
1986
|}
1987
1988
===7.3 Third example: Heterogeneity and anisotropy===
1989
1990
Let us solve the Poisson equation in a circle of radius on the following domain (Figure [[#img-22|22]]) with various material properties. The geometry of the domain is defined by segments of ellipses passing through the given points which have centers at the origin <math display="inline">(0,0)</math>.  
1991
1992
<div id='img-23'></div>
1993
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1994
|-
1995
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_20_HuevoGeometry.png|340px|Egg-like domain with different materials.]]
1996
|- style="text-align: center; font-size: 75%;"
1997
| colspan="1" style="padding:10px;"| '''Figure 22'''. Egg-like domain with different materials
1998
|}
1999
2000
2001
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:40%;font-size:85%;"
2002
|- style="border-top: 2px solid;"
2003
| style="border-left: 2px solid;border-right: 2px solid;" |    Point 
2004
| style="border-left: 2px solid;border-right: 2px solid;" | <math>x</math>
2005
| style="border-left: 2px solid;border-right: 2px solid;" | <math>y</math>
2006
| style="border-left: 2px solid;border-right: 2px solid;" | Point 
2007
| style="border-left: 2px solid;border-right: 2px solid;" | <math>x</math>
2008
| style="border-left: 2px solid;border-right: 2px solid;" | <math>y</math>
2009
|- style="border-top: 2px solid;"
2010
| style="border-left: 2px solid;border-right: 1px solid;" |    a 
2011
| style="border-left: 1px solid;border-right: 1px solid;" | -5 
2012
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2013
| style="border-left: 1px solid;border-right: 1px solid;" | A 
2014
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2015
| style="border-left: 1px solid;border-right: 2px solid;" | -4 
2016
|-
2017
| style="border-left: 2px solid;border-right: 1px solid;" | b 
2018
| style="border-left: 1px solid;border-right: 1px solid;" | -4 
2019
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2020
| style="border-left: 1px solid;border-right: 1px solid;" | B 
2021
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2022
| style="border-left: 1px solid;border-right: 2px solid;" | -3 
2023
|-
2024
| style="border-left: 2px solid;border-right: 1px solid;" | c 
2025
| style="border-left: 1px solid;border-right: 1px solid;" | -3 
2026
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2027
| style="border-left: 1px solid;border-right: 1px solid;" | C 
2028
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2029
| style="border-left: 1px solid;border-right: 2px solid;" | -2 
2030
|-
2031
| style="border-left: 2px solid;border-right: 1px solid;" | d 
2032
| style="border-left: 1px solid;border-right: 1px solid;" | -1 
2033
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2034
| style="border-left: 1px solid;border-right: 1px solid;" | D 
2035
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2036
| style="border-left: 1px solid;border-right: 2px solid;" | -1 
2037
|-
2038
| style="border-left: 2px solid;border-right: 1px solid;" | e 
2039
| style="border-left: 1px solid;border-right: 1px solid;" | 1 
2040
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2041
| style="border-left: 1px solid;border-right: 1px solid;" | E 
2042
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2043
| style="border-left: 1px solid;border-right: 2px solid;" | 1 
2044
|-
2045
| style="border-left: 2px solid;border-right: 1px solid;" | f 
2046
| style="border-left: 1px solid;border-right: 1px solid;" | 6 
2047
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2048
| style="border-left: 1px solid;border-right: 1px solid;" | F 
2049
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2050
| style="border-left: 1px solid;border-right: 2px solid;" | 2 
2051
|-
2052
| style="border-left: 2px solid;border-right: 1px solid;" | g 
2053
| style="border-left: 1px solid;border-right: 1px solid;" | 7 
2054
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2055
| style="border-left: 1px solid;border-right: 1px solid;" | G 
2056
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2057
| style="border-left: 1px solid;border-right: 2px solid;" | 3 
2058
|- style="border-bottom: 2px solid;"
2059
| style="border-left: 2px solid;border-right: 1px solid;" | h 
2060
| style="border-left: 1px solid;border-right: 1px solid;" | 8 
2061
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2062
| style="border-left: 1px solid;border-right: 1px solid;" | H 
2063
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2064
| style="border-left: 1px solid;border-right: 2px solid;" | 4 
2065
|}
2066
2067
2068
* The Dirichlet boundary condition is <math display="inline">u=10</math> and material properties (anisotropic heat diffusion constants, material angles and source terms) are given according to Figure [[#img-23|23]] and the table below.  
2069
2070
<div id='img-24'></div>
2071
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2072
|-
2073
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_21_HuevoWithConditions.png|300px|Dirichlet condition.]]
2074
|- style="text-align: center; font-size: 75%;"
2075
| colspan="1" style="padding:10px;"| '''Figure 23'''. Dirichlet condition
2076
|}
2077
2078
2079
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:40%;font-size:85%;"
2080
|- style="border-top: 2px solid;"
2081
| style="text-align: left;border-left: 2px solid;border-right: 2px solid;" |     
2082
| style="border-left: 2px solid;border-right: 2px solid;" | <math>K_x</math>
2083
| style="border-left: 2px solid;border-right: 2px solid;" | <math>K_y</math>
2084
| style="border-left: 2px solid;border-right: 2px solid;" | Angle
2085
| style="border-left: 2px solid;border-right: 2px solid;" | <math>q</math>
2086
|- style="border-top: 2px solid;"
2087
| style="text-align: left;border-left: 2px solid;border-right: 1px solid;" |     Domain mat1
2088
| style="border-left: 1px solid;border-right: 1px solid;" | 5 
2089
| style="border-left: 1px solid;border-right: 1px solid;" | 25 
2090
| style="border-left: 1px solid;border-right: 1px solid;" | 30 
2091
| style="border-left: 1px solid;border-right: 2px solid;" | 15
2092
|- style="border-top: 1px solid;"
2093
| style="text-align: left;border-left: 2px solid;border-right: 1px solid;" |     Domain mat2
2094
| style="border-left: 1px solid;border-right: 1px solid;" | 25 
2095
| style="border-left: 1px solid;border-right: 1px solid;" | 5 
2096
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2097
| style="border-left: 1px solid;border-right: 2px solid;" | 5
2098
|- style="border-top: 1px solid;"
2099
| style="text-align: left;border-left: 2px solid;border-right: 1px solid;" |     Domain mat3
2100
| style="border-left: 1px solid;border-right: 1px solid;" | 50 
2101
| style="border-left: 1px solid;border-right: 1px solid;" | 12
2102
| style="border-left: 1px solid;border-right: 1px solid;" | 45
2103
| style="border-left: 1px solid;border-right: 2px solid;" | 5
2104
|- style="border-top: 1px solid;border-bottom: 2px solid;"
2105
| style="text-align: left;border-left: 2px solid;border-right: 1px solid;" |     Domain mat4
2106
| style="border-left: 1px solid;border-right: 1px solid;" | 10 
2107
| style="border-left: 1px solid;border-right: 1px solid;" | 35 
2108
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2109
| style="border-left: 1px solid;border-right: 2px solid;" | 5
2110
|}
2111
2112
2113
The meshes used in this example are shown in Figure [[#img-24|24]]. 
2114
2115
<div id='img-24a'></div>
2116
<div id='img-24b'></div>
2117
<div id='img-24c'></div>
2118
<div id='img-24d'></div>
2119
<div id='img-24'></div>
2120
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2121
|-
2122
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh1.png|210px|]]
2123
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh2.png|210px|]]
2124
|- style="text-align: center; font-size: 75%;"
2125
| (a) 
2126
| (b) 
2127
|-
2128
| style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh3.png|210px|]]
2129
| style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh4.png|210px|]]
2130
|- style="text-align: center; font-size: 75%;"
2131
| (c) 
2132
| (d) 
2133
|- style="text-align: center; font-size: 75%;"
2134
| colspan="3" style="padding:10px;"| '''Figure 24'''. Meshes for layered egg-like figure
2135
|}
2136
2137
2138
The numerical results for the maximum temperature value (<math display="inline">u(0,0)=10.2</math>) are exemplified in Table [[#table-5|5]] where  a comparison with the Finite Element Method with linear interpolation functions (FEML) is also shown.
2139
2140
<div id='table-5'></div>
2141
<div style="text-align: center; font-size: 75%; ">'''Table 5'''. Maximum temperature and Flux magnitude values in the numerical simulations of the third example</div>  
2142
2143
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
2144
|- style="border-top: 2px solid;"
2145
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Mesh
2146
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Nodes
2147
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Elements
2148
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Temp. Value
2149
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Flux Magnitude
2150
|-style="border-top: 2px solid;"
2151
| style="border-left: 2px solid;border-right: 2px solid;" | DEC  
2152
| style="border-left: 2px solid;border-right: 2px solid;" | FEML
2153
| style="border-left: 2px solid;border-right: 2px solid;" | DEC  
2154
| style="border-left: 2px solid;border-right: 2px solid;" | FEML  
2155
|- style="border-top: 2px solid;"
2156
| style="border-left: 2px solid;border-right: 1px solid;" |    Figure [[#img-24|24]](a) 
2157
| style="border-left: 1px solid;border-right: 1px solid;" | 342 
2158
| style="border-left: 1px solid;border-right: 1px solid;" | 616 
2159
| style="border-left: 1px solid;border-right: 1px solid;" | 2.79221 
2160
| style="border-left: 1px solid;border-right: 1px solid;" | 2.79854 
2161
| style="border-left: 1px solid;border-right: 1px solid;" | 18.41066 
2162
| style="border-left: 1px solid;border-right: 2px solid;" | 18.40573 
2163
|-
2164
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-24|24]](b) 
2165
| style="border-left: 1px solid;border-right: 1px solid;" | 1,259 
2166
| style="border-left: 1px solid;border-right: 1px solid;" | 2,384 
2167
| style="border-left: 1px solid;border-right: 1px solid;" | 2.83929 
2168
| style="border-left: 1px solid;border-right: 1px solid;" | 2.84727 
2169
| style="border-left: 1px solid;border-right: 1px solid;" | 18.93838 
2170
| style="border-left: 1px solid;border-right: 2px solid;" | 18.91532 
2171
|-
2172
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-24|24]](c) 
2173
| style="border-left: 1px solid;border-right: 1px solid;" | 4,467 
2174
| style="border-left: 1px solid;border-right: 1px solid;" | 8,668 
2175
| style="border-left: 1px solid;border-right: 1px solid;" | 2.85608 
2176
| style="border-left: 1px solid;border-right: 1px solid;" | 2.85717 
2177
| style="border-left: 1px solid;border-right: 1px solid;" | 19.13297 
2178
| style="border-left: 1px solid;border-right: 2px solid;" | 19.13193 
2179
|-
2180
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-24|24]](d)  
2181
| style="border-left: 1px solid;border-right: 1px solid;" | 14,250  
2182
| style="border-left: 1px solid;border-right: 1px solid;" | 28,506 
2183
| style="border-left: 1px solid;border-right: 1px solid;" | 2.85994 
2184
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86056 
2185
| style="border-left: 1px solid;border-right: 1px solid;" | 19.20982 
2186
| style="border-left: 1px solid;border-right: 2px solid;" | 19.20909 
2187
|-
2188
| style="border-left: 2px solid;border-right: 1px solid;" | 
2189
| style="border-left: 1px solid;border-right: 1px solid;" | 20,493 
2190
| style="border-left: 1px solid;border-right: 1px solid;" | 40,316 
2191
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86120 
2192
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86177 
2193
| style="border-left: 1px solid;border-right: 1px solid;" | 19.23120 
2194
| style="border-left: 1px solid;border-right: 2px solid;" | 19.23457 
2195
|-
2196
| style="border-left: 2px solid;border-right: 1px solid;" | 
2197
| style="border-left: 1px solid;border-right: 1px solid;" | 60,380 
2198
| style="border-left: 1px solid;border-right: 1px solid;" | 119,418 
2199
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86219 
2200
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86231 
2201
| style="border-left: 1px solid;border-right: 1px solid;" | 19.26655 
2202
| style="border-left: 1px solid;border-right: 2px solid;" | 19.26628 
2203
|-
2204
| style="border-left: 2px solid;border-right: 1px solid;" | 
2205
| style="border-left: 1px solid;border-right: 1px solid;" | 142,702 
2206
| style="border-left: 1px solid;border-right: 1px solid;" | 283,162 
2207
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86249 
2208
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86256 
2209
| style="border-left: 1px solid;border-right: 1px solid;" | 19.28045 
2210
| style="border-left: 1px solid;border-right: 2px solid;" | 19.28028 
2211
|-
2212
| style="border-left: 2px solid;border-right: 1px solid;" | 
2213
| style="border-left: 1px solid;border-right: 1px solid;" | 291,363 
2214
| style="border-left: 1px solid;border-right: 1px solid;" | 579,360 
2215
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86263 
2216
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86267 
2217
| style="border-left: 1px solid;border-right: 1px solid;" | 19.28727 
2218
| style="border-left: 1px solid;border-right: 2px solid;" | 19.28755 
2219
|-
2220
| style="border-left: 2px solid;border-right: 1px solid;" | 
2221
| style="border-left: 1px solid;border-right: 1px solid;" | 495,607 
2222
| style="border-left: 1px solid;border-right: 1px solid;" | 986,724 
2223
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86275 
2224
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86269 
2225
| style="border-left: 1px solid;border-right: 1px solid;" | 19.29057 
2226
| style="border-left: 1px solid;border-right: 2px solid;" | 19.29081 
2227
|-
2228
| style="border-left: 2px solid;border-right: 1px solid;" | 
2229
| style="border-left: 1px solid;border-right: 1px solid;" | 1,064,447 
2230
| style="border-left: 1px solid;border-right: 1px solid;" | 2,122,160 
2231
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86272 
2232
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86273 
2233
| style="border-left: 1px solid;border-right: 1px solid;" | 19.29385 
2234
| style="border-left: 1px solid;border-right: 2px solid;" | 19.29389 
2235
|-
2236
| style="border-left: 2px solid;border-right: 1px solid;" | 
2237
| style="border-left: 1px solid;border-right: 1px solid;" | 2,106,077 
2238
| style="border-left: 1px solid;border-right: 1px solid;" | 4,202,536 
2239
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86274 
2240
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86274 
2241
| style="border-left: 1px solid;border-right: 1px solid;" | 19.29618 
2242
| style="border-left: 1px solid;border-right: 2px solid;" | 19.29615 
2243
|- style="border-bottom: 2px solid;"
2244
| style="border-left: 2px solid;border-right: 1px solid;" | 
2245
| style="border-left: 1px solid;border-right: 1px solid;" | 4,031,557 
2246
| style="border-left: 1px solid;border-right: 1px solid;" | 8,049,644 
2247
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86275 
2248
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86275 
2249
| style="border-left: 1px solid;border-right: 1px solid;" | 19.29763 
2250
| style="border-left: 1px solid;border-right: 2px solid;" | 19.29765 
2251
|}
2252
2253
2254
The temperature distribution and Flux magnitude fields for the finest mesh are shown in Figure [[#img-25|25]]. 
2255
2256
<div id='img-25a'></div>
2257
<div id='img-25b'></div>
2258
<div id='img-25'></div>
2259
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2260
|-
2261
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_23_HuevoContourTemp.png|300px|Contour Fill of Temperatures]]
2262
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_23_HuevoContourFlux.png|300px|Contour Fill of Flux vectors on Elems]]
2263
|- style="text-align: center; font-size: 75%;"
2264
| (a) Contour fill of temperatures
2265
| (b) Contour till of flux vectors on elems
2266
|- style="text-align: center; font-size: 75%;"
2267
| colspan="2" style="padding:10px;"| '''Figure 25'''. Temperature distribution and Flux magnitude fields for the finest mesh of the third example
2268
|}
2269
2270
2271
Figure [[#img-26|26]] shows the graphs of the temperature and flux magnitude values along a diameter of the circle for different meshes of Figure  [[#img-24|24]]. 
2272
2273
<div id='img-26a'></div>
2274
<div id='img-26b'></div>
2275
<div id='img-26c'></div>
2276
<div id='img-26d'></div>
2277
<div id='img-26e'></div>
2278
<div id='img-26f'></div>
2279
<div id='img-26'></div>
2280
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2281
|-
2282
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoTempCrossSection01.png|300px|]]
2283
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoFluxCrossSection01.png|300px|]]
2284
|- style="text-align: center; font-size: 75%;"
2285
| (a) 
2286
| (b) 
2287
|-
2288
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoTempCrossSection02.png|300px|]]
2289
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoFluxCrossSection02.png|300px|]]
2290
|- style="text-align: center; font-size: 75%;"
2291
| (c) 
2292
| (d) 
2293
|-
2294
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoTempCrossSection03.png|300px|]]
2295
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoFluxCrossSection03.png|300px|]]
2296
|- style="text-align: center; font-size: 75%;"
2297
| (e) 
2298
| (f) 
2299
|- style="text-align: center; font-size: 75%;"
2300
| colspan="2" style="padding:10px;"| '''Figure 26'''. Temperature and Flux magnitude graphs of the third example along a cross-section of the domain
2301
for different meshes: Mesh in Figure [[#img-24|24]](a), a-Temperature, b-Flux; Mesh in Figure [[#img-24|24]](b), c-Temperature, d-Flux; Mesh in Figure [[#img-24|24]](c), e-Temperature, f-Flux
2302
|}
2303
2304
Table [[#table-6|6]] shows some global error metrics for different meshes.   Figure [[#img-27|27]] shows the error evolution in <math display="inline">L^2</math> norm for this example.
2305
2306
<div id='table-6'></div>
2307
<div class="center" style="font-size: 75%;">'''Table 6'''. DEC errors in the third example</div>
2308
2309
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
2310
|- style="border-top: 2px solid;"
2311
| style="border-left: 2px solid;border-right: 2px solid;" | '''Mesh''' 
2312
| style="border-left: 2px solid;border-right: 2px solid;" | '''Nodes''' 
2313
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>    \sum (u-u_i)^2 \over nodes    </math>''' 
2314
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>L^2</math> norm''' 
2315
|- style="border-top: 2px solid;"
2316
| style="border-left: 2px solid;border-right: 1px solid;" |     1 
2317
| style="border-left: 1px solid;border-right: 1px solid;" | 342 
2318
| style="border-left: 1px solid;border-right: 1px solid;" | 9.3638e-04 
2319
| style="border-left: 1px solid;border-right: 2px solid;" | 2.7786e-02 
2320
|- style="border-top: 1px solid;"
2321
| style="border-left: 2px solid;border-right: 1px solid;" |     2 
2322
| style="border-left: 1px solid;border-right: 1px solid;" | 1,259 
2323
| style="border-left: 1px solid;border-right: 1px solid;" | 1.5173e-04 
2324
| style="border-left: 1px solid;border-right: 2px solid;" | 3.2731e-03 
2325
|- style="border-top: 1px solid;"
2326
| style="border-left: 2px solid;border-right: 1px solid;" |     3 
2327
| style="border-left: 1px solid;border-right: 1px solid;" | 4,467 
2328
| style="border-left: 1px solid;border-right: 1px solid;" | 2.2110e-05 
2329
| style="border-left: 1px solid;border-right: 2px solid;" | 2.2937e-04 
2330
|- style="border-top: 1px solid;"
2331
| style="border-left: 2px solid;border-right: 1px solid;" |     4 
2332
| style="border-left: 1px solid;border-right: 1px solid;" | 14,250 
2333
| style="border-left: 1px solid;border-right: 1px solid;" | 3.7233e-06 
2334
| style="border-left: 1px solid;border-right: 2px solid;" | 1.9151e-05 
2335
|- style="border-top: 1px solid;"
2336
| style="border-left: 2px solid;border-right: 1px solid;" |     5 
2337
| style="border-left: 1px solid;border-right: 1px solid;" | 20,492 
2338
| style="border-left: 1px solid;border-right: 1px solid;" | 2.2311e-06 
2339
| style="border-left: 1px solid;border-right: 2px solid;" | 9.5930e-06 
2340
|- style="border-top: 1px solid;"
2341
| style="border-left: 2px solid;border-right: 1px solid;" |     6 
2342
| style="border-left: 1px solid;border-right: 1px solid;" | 60,380 
2343
| style="border-left: 1px solid;border-right: 1px solid;" | 4.3769e-07 
2344
| style="border-left: 1px solid;border-right: 2px solid;" | 8.7330e-07 
2345
|- style="border-top: 1px solid;"
2346
| style="border-left: 2px solid;border-right: 1px solid;" |     7 
2347
| style="border-left: 1px solid;border-right: 1px solid;" | 142,702 
2348
| style="border-left: 1px solid;border-right: 1px solid;" | 1.1664e-07 
2349
| style="border-left: 1px solid;border-right: 2px solid;" | 1.3926e-07 
2350
|- style="border-top: 1px solid;"
2351
| style="border-left: 2px solid;border-right: 1px solid;" |     8 
2352
| style="border-left: 1px solid;border-right: 1px solid;" | 291,369 
2353
| style="border-left: 1px solid;border-right: 1px solid;" | 3.9764e-08 
2354
| style="border-left: 1px solid;border-right: 2px solid;" | 3.3314e-08 
2355
|- style="border-top: 1px solid;"
2356
| style="border-left: 2px solid;border-right: 1px solid;" |     9 
2357
| style="border-left: 1px solid;border-right: 1px solid;" | 497,378 
2358
| style="border-left: 1px solid;border-right: 1px solid;" | 1.6680e-08 
2359
| style="border-left: 1px solid;border-right: 2px solid;" | 1.0275e-08 
2360
|- style="border-top: 1px solid;"
2361
| style="border-left: 2px solid;border-right: 1px solid;" |     10 
2362
| style="border-left: 1px solid;border-right: 1px solid;" | 1,067,171 
2363
| style="border-left: 1px solid;border-right: 1px solid;" | 3.9594e-09 
2364
| style="border-left: 1px solid;border-right: 2px solid;" | 1.2190e-09 
2365
|- style="border-top: 1px solid;border-bottom: 2px solid;"
2366
| style="border-left: 2px solid;border-right: 1px solid;" |     11 
2367
| style="border-left: 1px solid;border-right: 1px solid;" | 2,106,248 
2368
| style="border-left: 1px solid;border-right: 1px solid;" | 9.6949e-10 
2369
| style="border-left: 1px solid;border-right: 2px solid;" | 1.4415e-10 
2370
|}
2371
2372
2373
<div id='img-27'></div>
2374
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2375
|-
2376
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-DEC_Error_Graph_Eliptic_Egg.png|410px|DEC ]]
2377
|- style="text-align: center; font-size: 75%;"
2378
| colspan="1" style="padding-bottom:10px;"| '''Figure 27'''. DEC <math display="inline">L^2</math> evolution in the third example
2379
|}
2380
2381
2382
'''Remark'''. As can be seen from the previous examples, DEC behaves well on coarse meshes.  As expected, the results of DEC and FEML are identical for fine meshes.  We would also like to point out the the computational costs of DEC and FEML are very similar  since the local matrices are very similar in profile, or even identical in some cases.
2383
2384
==8. Conclusions==
2385
2386
DEC is a relatively recent discretization scheme for PDE's which takes into account the geometric and analytic  features of the operators and the domains involved.  The main contributions of this paper are the following:
2387
2388
<ol>
2389
2390
<li>We have made explicit the local formulation of DEC, i.e. on each triangle of the mesh. As is customary, the local pieces can be assembled, which facilitates the implementation of DEC by the interested reader.   Furthermore, the profiles of the assembled DEC matrices are equal to those of assembled FEML matrices. </li>
2391
2392
<li> Guided by the local formulation, we have deduced a natural way to approximate the flux/gradient vector of a discretized function, which coincides with that of FEML. Such approximate flux vector automatically gives  the discretized version of the anisotropic flux. </li>
2393
2394
<li> We have discretized the pullback operator on continuous 1-forms using Whitney interpolation forms and have found the discrete anisotropy operator for primal 1-forms.  </li>
2395
2396
<li>We have deduced the local DEC formulation of the 2D anisotropic Poisson equation, and have proved that the DEC and FEML diffusion terms are identical, while the source terms are not  &#8211; due to the different area-weight allocation for the nodes. </li>
2397
2398
<li>Local DEC allows a simple treatment of heterogeneous material properties assigned to subdomains (element by element),  which eliminates the need of dealing with it through ad hoc modifications of the global discrete Hodge star operator matrix.  </li>
2399
</ol>
2400
2401
2402
On the other hand we would like to point the following features:
2403
2404
*   The area weights assigned to the nodes of the mesh when solving the 2D anisotropic Poisson equation can even be negative (when a triangle has an inner angle greater that <math display="inline">120^\circ </math>), in stark contrast to the FEML formulation.
2405
2406
* The computational cost of DEC is similar to that of FEML. While the numerical results of DEC and FEML on fine meshes are virtually identical, the DEC solutions are better than those of FEML on coarse meshes. Furthermore, DEC  solutions display numerical convergence,  as shown by the  error measurements.
2407
2408
2409
Our future work will include the DEC discretization of convective terms, and DEC on 2-dimensional simplicial surfaces in 3D.  Preliminary results on both problems are promising and competitive with FEML.
2410
2411
==Acknowledgements==
2412
2413
The second named author was partially supported by a CONACyT grant, and would like to thank  the International Centre for Numerical Methods in Engineering (CIMNE) and the University of Swansea for their hospitality. We gratefully acknowledge the support of NVIDIA Corporation with the donation of the Titan X Pascal GPU used for this research.
2414
2415
<span style="text-align: center; font-size: 75%;">
2416
2417
==References==
2418
2419
<div class="auto" style="text-align: left;width: auto; margin-left: auto; margin-right: auto;font-size: 85%;">
2420
2421
<div id="cite-1"></div>
2422
[[#citeF-1|[1]]]  Bossavit A. Mixed finite elements and the complex of Whitney forms. In J. Whiteman (ed.), The Mathematics of Finite Elements and Applications VI, pp. 137–144, Academic Press, 1988.  
2423
2424
<div id="cite-2"></div>
2425
[[#citeF-2|[2]]]  Botello S., Moreles M.Z., Oñate E. Módulo de aplicaciones del método de los elementos finitos para resolver la ecuación de Poisson: MEFIPOISS.   Aula CIMNE-CIMAT, Septiembre 2010.  
2426
2427
<div id="cite-3"></div>
2428
[[#citeF-3|[3]]]  Cartan E. Sur certaines expressions différentielles et le problème de Pfaff. Annales Scientifiques de l'École Normale Supérieure, Série 3, Paris, Gauthier-Villars, Tome 16, pp. 239-332, 1899.   
2429
2430
<div id="cite-4"></div>
2431
[[#citeF-4|[4]]]  Crane K., et al. Digital geometry processing with discrete exterior calculus. ACM SIGGRAPH 2013 Courses, pp. 1-126, July 2013.  
2432
2433
<div id="cite-5"></div>
2434
[[#citeF-5|[5]]]  Dassios I., et al. A mathematical model for plasticity and damage: A discrete calculus formulation. Journal of Computational and Applied Mathematics, 312:27-38, 2017.  
2435
2436
<div id="cite-6"></div>
2437
[[#citeF-6|[6]]]  Esqueda H., Herrera R., Botello S., Moreles M.A. A geometric description of discrete exterior calculus for general triangulations. Rev. Int. Métodos Numér. Cálc. Diseño Ing., 35(1), 2, 2019.   https://www.scipedia.com/public/Herrera_et_al_2018b  
2438
2439
<div id="cite-7"></div>
2440
[[#citeF-7|[7]]]  Griebel, M., Rieger C.,  Schier A. Upwind schemes for scalar advection-dominated problems in the Discrete Exterior Calculus. In Bothe D., Reusken A. (eds), Transport Processes at Fluidic Interfaces, Birkhäuser, Cham,  145-175, 2017.  
2441
2442
<div id="cite-8"></div>
2443
[[#citeF-8|[8]]]  Hirani A.N. Discrete exterior calculus. Thesis, California Institute of Technology, 2003.  
2444
2445
<div id="cite-9"></div>
2446
[[#citeF-9|[9]]]  Hirani A.N., Nakshatrala K.B.,   Chaudhry J.H. Numerical method for Darcy flow derived using discrete exterior calculus. International Journal for Computational Methods in Engineering Science and Mechanics, 16(3):151-169, 2015.  
2447
2448
<div id="cite-10"></div>
2449
[[#citeF-10|[10]]]  Mohamed M.S.,  Hirani A.N.,   Samtaney R. Discrete exterior calculus discretization of incompressible Navier-Stokes equations over surface simplicial meshes. Journal of Computational Physics, 312: 175-191, 2016.  
2450
2451
<div id="cite-11"></div>
2452
[[#citeF-11|[11]]]  Oñate E.  2D solids. Linear triangular and rectangular elements. In Structural Analysis with the Finite Element Method.  Linear Statics, Volume 1: Basis and Solids, Chapter 4, pp. 117-157, CIMNE-Springer, Barcelona, 2009. 
2453
2454
<div id="cite-12"></div>
2455
[[#citeF-12|[12]]]  Whitney H. Geometric integration theory. Princeton University Press, 1957.  
2456
2457
<div id="cite-13"></div>
2458
[[#citeF-13|[13]]]    Zienkiewicz O.C.,  Taylor R.L., Zhu J.Z. Generalization of the finite element concepts. Galerkin-weighted residual and variational approaches. In The Finite Element Method Set (Sixth Edition), Butterworth-Heinemann, Oxford, Chapter 3, pp. 54-102, 2005.  
2459
2460
</div>
2461

Return to Esqueda et al 2020a.

Back to Top