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 (see <span id='citeF-12'></span>[[#cite-12|[12]]] p. 139) 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>.
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|228px|Triangle ]]
49
|- style="text-align: center; font-size: 75%;"
50
| colspan="1" style="padding-bottom:10px;"| '''Figure 1'''. Triangle 
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 (see <span id='citeF-8'></span><span id='citeF-6'></span>[[#cite-8|[8,6]]]). 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.
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|240px|Circumcenter ]]
213
|- style="text-align: center; font-size: 75%;"
214
| colspan="1" style="padding-bottom:10px;"| '''Figure 2'''. Circumcenter 
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>.   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|240px|Dual segment ]]
223
|- style="text-align: center; font-size: 75%;"
224
| colspan="1" style="padding-bottom:10px;"| '''Figure 3'''. Dual segment 
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>.
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|240px|Dual quadrilateral  ]]
233
|- style="text-align: center; font-size: 75%;"
234
| colspan="1" style="padding-bottom:10px;"| '''Figure 4'''. Dual quadrilateral  
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 </math>
399
|-
400
| style="text-align: center;" | <math>    =\alpha (p, S^T Y) </math>
401
|-
402
| style="text-align: center;" | <math>    =(S^T)^*\alpha (p, Y),  </math>
403
|}
404
|}
405
406
which is the value of the 1-form called ''the pullback of <math>\alpha </math> by the tensor <math>S^T</math>''.
407
408
====2.5.2 Discretization of continuous 1-forms====
409
410
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
411
412
{| class="formulaSCP" style="width: 100%; text-align: left;" 
413
|-
414
| 
415
{| style="text-align: left; margin:auto;width: 100%;" 
416
|-
417
| style="text-align: center;" | <math>\alpha _{ij}:=\int _0^1 \alpha (v_i+t(v_j-v_i), v_j-v_i) dt.</math>
418
|}
419
|}
420
421
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>
422
423
{| class="formulaSCP" style="width: 100%; text-align: left;" 
424
|-
425
| 
426
{| style="text-align: left; margin:auto;width: 100%;" 
427
|-
428
| style="text-align: center;" | <math>\alpha _{ij}:=\int _{\gamma _{ij}} X. </math>
429
|}
430
|}
431
432
==3. Pullback operator on primal 1-forms==
433
434
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).
435
436
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.
437
438
First consider the Finite Element linear basis functions (or Whitney interpolation functions)
439
440
<span id="eq-3"></span>
441
{| class="formulaSCP" style="width: 100%; text-align: left;" 
442
|-
443
| 
444
{| style="text-align: left; margin:auto;width: 100%;" 
445
|-
446
| 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>
447
|-
448
| 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>
449
| style="width: 5px;text-align: right;white-space: nowrap;" | (3)
450
|-
451
| 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>
452
|}
453
|}
454
455
and their differentials
456
457
<span id="eq-4"></span>
458
{| class="formulaSCP" style="width: 100%; text-align: left;" 
459
|-
460
| 
461
{| style="text-align: left; margin:auto;width: 100%;" 
462
|-
463
| style="text-align: center;" | <math>dN_1 = {1\over 2A}[(y_2-y_3)dx+(x_3-x_2)dy] ,</math>
464
|-
465
| style="text-align: center;" | <math> dN_2 = {1\over 2A}[(y_3-y_1)dx+(x_1-x_3)dy] ,</math>
466
| style="width: 5px;text-align: right;white-space: nowrap;" | (4)
467
|-
468
| style="text-align: center;" | <math> dN_3 = {1\over 2A}[(y_1-y_2)dx+(x_2-x_1)dy] . </math>
469
|}
470
|}
471
472
The Whitney interpolation 1-forms are
473
474
<span id="eq-5"></span>
475
{| class="formulaSCP" style="width: 100%; text-align: left;" 
476
|-
477
| 
478
{| style="text-align: left; margin:auto;width: 100%;" 
479
|-
480
| style="text-align: center;" | <math>\phi _{12}=N_1dN_2-N_2dN_1,</math>
481
|-
482
| style="text-align: center;" | <math> \phi _{13}=N_1dN_3-N_3dN_1 ,</math>
483
| style="width: 5px;text-align: right;white-space: nowrap;" | (5)
484
|-
485
| style="text-align: center;" | <math> \phi _{23}=N_2dN_3-N_3dN_2. </math>
486
|}
487
|}
488
489
These differential 1-forms are such that, along the edge <math display="inline">[v_k,v_l]</math>
490
491
{| class="formulaSCP" style="width: 100%; text-align: left;" 
492
|-
493
| 
494
{| style="text-align: left; margin:auto;width: 100%;" 
495
|-
496
| style="text-align: center;" | <math>\int _{v_k}^{v_l}\phi _{ij} = \delta _{ik}\delta _{jl}-\delta _{il}\delta _{jk},</math>
497
|}
498
|}
499
500
i.e. <math display="inline">0</math> or <math display="inline">\pm 1</math>.
501
502
Now, suppose we have a primal 1-form given on our triangle by the collection of numbers
503
504
{| class="formulaSCP" style="width: 100%; text-align: left;" 
505
|-
506
| 
507
{| style="text-align: left; margin:auto;width: 100%;" 
508
|-
509
| style="text-align: center;" | <math>\beta _{12},\quad \beta _{13},\quad \beta _{23}.</math>
510
|}
511
|}
512
513
We form a continuous 1-form as follows
514
515
{| class="formulaSCP" style="width: 100%; text-align: left;" 
516
|-
517
| 
518
{| style="text-align: left; margin:auto;width: 100%;" 
519
|-
520
| style="text-align: center;" | <math>\beta :=\beta _{12}\phi _{12} + \beta _{13}\phi _{13} + \beta _{23}\phi _{23} </math>
521
|}
522
|}
523
524
which is such that, for <math display="inline">1\leq i <j \leq 3</math>
525
526
{| class="formulaSCP" style="width: 100%; text-align: left;" 
527
|-
528
| 
529
{| style="text-align: left; margin:auto;width: 100%;" 
530
|-
531
| style="text-align: center;" | <math>\int _{v_i}^{v_j} \beta = \beta _{ij}. </math>
532
|}
533
|}
534
535
Now we will calculate
536
537
{| class="formulaSCP" style="width: 100%; text-align: left;" 
538
|-
539
| 
540
{| style="text-align: left; margin:auto;width: 100%;" 
541
|-
542
| style="text-align: center;" | <math>\int _{v_i}^{v_j} S^*\beta </math>
543
|}
544
|}
545
546
for an arbitrary linear transformation
547
548
{| class="formulaSCP" style="width: 100%; text-align: left;" 
549
|-
550
| 
551
{| style="text-align: left; margin:auto;width: 100%;" 
552
|-
553
| style="text-align: center;" | <math>S:= \left( \begin{array}{cc} a & b \\  c & d \end{array}  \right)</math>
554
|}
555
|}
556
557
Let
558
559
{| class="formulaSCP" style="width: 100%; text-align: left;" 
560
|-
561
| 
562
{| style="text-align: left; margin:auto;width: 100%;" 
563
|-
564
| style="text-align: center;" | <math>w_1 = v_2-v_1,</math>
565
|-
566
| style="text-align: center;" | <math> w_2 = v_3-v_1,</math>
567
|-
568
| style="text-align: center;" | <math> w_3 = v_3-v_2, </math>
569
|}
570
|}
571
572
and
573
574
{| class="formulaSCP" style="width: 100%; text-align: left;" 
575
|-
576
| 
577
{| style="text-align: left; margin:auto;width: 100%;" 
578
|-
579
| 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>
580
|-
581
| 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>
582
|-
583
| 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>
584
|}
585
|}
586
587
As it turns out,
588
589
{| class="formulaSCP" style="width: 100%; text-align: left;" 
590
|-
591
| 
592
{| style="text-align: left; margin:auto;width: 100%;" 
593
|-
594
| style="text-align: center;" | <math>(S^*\beta )_{12}     =\int _{v_1}^{v_2} S^*\beta </math>
595
|-
596
| 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>
597
|-
598
| style="text-align: center;" | <math> (S^*\beta )_{13}     =\int _{v_1}^{v_3} S^*\beta </math>
599
|-
600
| 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>
601
|-
602
| style="text-align: center;" | <math> (S^*\beta )_{23}     =\int _{v_2}^{v_3} S^*\beta </math>
603
|-
604
| 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>
605
|}
606
|}
607
608
where
609
610
{| class="formulaSCP" style="width: 100%; text-align: left;" 
611
|-
612
| 
613
{| style="text-align: left; margin:auto;width: 100%;" 
614
|-
615
| 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>
616
|-
617
| 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>
618
|-
619
| 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>
620
|-
621
| 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>
622
|-
623
| 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>
624
|-
625
| 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>
626
|-
627
| 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>
628
|-
629
| 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>
630
|-
631
| 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>
632
|}
633
|}
634
635
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>.
636
637
Thus, we have that the induced transformation on primal 1-forms is
638
639
<span id="eq-6"></span>
640
{| class="formulaSCP" style="width: 100%; text-align: left;" 
641
|-
642
| 
643
{| style="text-align: left; margin:auto;width: 100%;" 
644
|-
645
| 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>
646
|}
647
| style="width: 5px;text-align: right;white-space: nowrap;" | (6)
648
|}
649
650
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.
651
652
==4. Flux and anisotropy==
653
654
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.
655
656
===4.1 The flux in local DEC===
657
658
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
659
660
{| class="formulaSCP" style="width: 100%; text-align: left;" 
661
|-
662
| 
663
{| style="text-align: left; margin:auto;width: 100%;" 
664
|-
665
| 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>
666
|-
667
<!--| style="text-align: center;" | <math> =\nabla f(p)\cdot w. </math>-->
668
|}
669
|}
670
671
Thus, we have three Vector Calculus identities
672
673
{| class="formulaSCP" style="width: 100%; text-align: left;" 
674
|-
675
| 
676
{| style="text-align: left; margin:auto;width: 100%;" 
677
|-
678
| style="text-align: center;" | <math>df_{v_1}(v_2-v_1) = \nabla f(v_1)\cdot (v_2-v_1)  ,</math>
679
|-
680
| style="text-align: center;" | <math>  df_{v_2}(v_3-v_2) = \nabla f(v_2)\cdot (v_3-v_2),</math>
681
|-
682
| style="text-align: center;" | <math>  df_{v_3}(v_1-v_3) = \nabla f(v_3)\cdot (v_1-v_3) . </math>
683
|}
684
|}
685
686
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
687
688
{| class="formulaSCP" style="width: 100%; text-align: left;" 
689
|-
690
| 
691
{| style="text-align: left; margin:auto;width: 100%;" 
692
|-
693
| style="text-align: center;" | <math>df_{v_1}(v_2-v_1) \approx  f_2-f_1  ,</math>
694
|-
695
| style="text-align: center;" | <math>  df_{v_2}(v_3-v_2) \approx  f_3-f_2  ,</math>
696
|-
697
| style="text-align: center;" | <math>  df_{v_3}(v_1-v_3) \approx  f_1-f_3  . </math>
698
|}
699
|}
700
701
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
702
703
<span id="eq-7"></span>
704
<span id="eq-8"></span>
705
{| class="formulaSCP" style="width: 100%; text-align: left;" 
706
|-
707
| 
708
{| style="text-align: left; margin:auto;width: 100%;" 
709
|-
710
| style="text-align: center;" | <math>W_1\cdot (v_2-v_1) = f_2-f_1 </math>
711
| style="width: 5px;text-align: right;white-space: nowrap;" | (7)
712
|-
713
| style="text-align: center;" | <math> W_1\cdot (v_3-v_1) = f_3-f_1. </math>
714
| style="width: 5px;text-align: right;white-space: nowrap;" | (8)
715
|}
716
|}
717
718
If
719
720
{| class="formulaSCP" style="width: 100%; text-align: left;" 
721
|-
722
| 
723
{| style="text-align: left; margin:auto;width: 100%;" 
724
|-
725
| style="text-align: center;" | <math>v_1=(x_1,y_1),</math>
726
|-
727
| style="text-align: center;" | <math> v_2=(x_2,y_2),</math>
728
|-
729
| style="text-align: center;" | <math> v_3=(x_3,y_3), </math>
730
|}
731
|}
732
733
then
734
735
{| class="formulaSCP" style="width: 100%; text-align: left;" 
736
|-
737
| 
738
{| style="text-align: left; margin:auto;width: 100%;" 
739
|-
740
| 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>
741
|}
742
|}
743
744
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
745
746
<span id="eq-9"></span>
747
{| class="formulaSCP" style="width: 100%; text-align: left;" 
748
|-
749
| 
750
{| style="text-align: left; margin:auto;width: 100%;" 
751
|-
752
| style="text-align: center;" | <math>W_2\cdot (v_1-v_2) = f_1-f_2</math>
753
| style="width: 5px;text-align: right;white-space: nowrap;" | (9)
754
|-
755
| style="text-align: center;" | <math> W_2\cdot (v_3-v_2) = f_3-f_2.</math>
756
|}
757
|}
758
759
The vectors <math display="inline">W_2</math> solving these equations is actually equal to <math display="inline">W_1</math>.  Indeed, consider
760
761
{| class="formulaSCP" style="width: 100%; text-align: left;" 
762
|-
763
| 
764
{| style="text-align: left; margin:auto;width: 100%;" 
765
|-
766
| style="text-align: center;" | <math>f_3-f_1 = W_1\cdot (v_3-v_1) </math>
767
|-
768
| style="text-align: center;" | <math> = W_1\cdot (v_3-v_2+v_2-v_1)</math>
769
|-
770
| style="text-align: center;" | <math> = W_1\cdot (v_3-v_2)+W_1\cdot (v_2-v_1)</math>
771
|-
772
| style="text-align: center;" | <math> = W_1\cdot (v_3-v_2)+f_2-f_1, </math>
773
|}
774
|}
775
776
so that
777
778
<span id="eq-10"></span>
779
{| class="formulaSCP" style="width: 100%; text-align: left;" 
780
|-
781
| 
782
{| style="text-align: left; margin:auto;width: 100%;" 
783
|-
784
| style="text-align: center;" | <math>W_1\cdot (v_3-v_2) = f_3-f_2. </math>
785
|}
786
| style="width: 5px;text-align: right;white-space: nowrap;" | (10)
787
|}
788
789
Thus, adding up ([[#eq-7|7]]) and ([[#eq-9|9]]) we get
790
791
<span id="eq-11"></span>
792
{| class="formulaSCP" style="width: 100%; text-align: left;" 
793
|-
794
| 
795
{| style="text-align: left; margin:auto;width: 100%;" 
796
|-
797
| style="text-align: center;" | <math>(W_1-W_2)\cdot (v_2-v_1)=0. </math>
798
|}
799
| style="width: 5px;text-align: right;white-space: nowrap;" | (11)
800
|}
801
802
Subtracting  ([[#eq-8|8]]) from ([[#eq-10|10]]) we get
803
804
<span id="eq-12"></span>
805
{| class="formulaSCP" style="width: 100%; text-align: left;" 
806
|-
807
| 
808
{| style="text-align: left; margin:auto;width: 100%;" 
809
|-
810
| style="text-align: center;" | <math>(W_1-W_2)\cdot (v_3-v_2)=0. </math>
811
|}
812
| style="width: 5px;text-align: right;white-space: nowrap;" | (12)
813
|}
814
815
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,
816
817
{| class="formulaSCP" style="width: 100%; text-align: left;" 
818
|-
819
| 
820
{| style="text-align: left; margin:auto;width: 100%;" 
821
|-
822
| style="text-align: center;" | <math>W_1-W_2=0.</math>
823
|}
824
|}
825
826
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
827
828
{| class="formulaSCP" style="width: 100%; text-align: left;" 
829
|-
830
| 
831
{| style="text-align: left; margin:auto;width: 100%;" 
832
|-
833
| style="text-align: center;" | <math>W\cdot (v_2-v_1) = f_2-f_1,</math>
834
|-
835
| style="text-align: center;" | <math> W\cdot (v_3-v_1) = f_3-f_1,</math>
836
|-
837
| style="text-align: center;" | <math> W\cdot (v_3-v_2) = f_3-f_2  . </math>
838
|}
839
|}
840
841
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.
842
843
====4.1.1 Comparison of DEC and FEML local fluxes====
844
845
The local flux (gradient) of <math display="inline">f</math> in FEML is given by
846
847
{| class="formulaSCP" style="width: 100%; text-align: left;" 
848
|-
849
| 
850
{| style="text-align: left; margin:auto;width: 100%;" 
851
|-
852
| 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>
853
|}
854
|}
855
856
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
857
858
{| class="formulaSCP" style="width: 100%; text-align: left;" 
859
|-
860
| 
861
{| style="text-align: left; margin:auto;width: 100%;" 
862
|-
863
| 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>
864
|}
865
|}
866
867
where
868
869
{| class="formulaSCP" style="width: 100%; text-align: left;" 
870
|-
871
| 
872
{| style="text-align: left; margin:auto;width: 100%;" 
873
|-
874
| 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>
875
|}
876
|}
877
878
is the area of the triangle, so that the FEML flux is given by
879
880
{| class="formulaSCP" style="width: 100%; text-align: left;" 
881
|-
882
| 
883
{| style="text-align: left; margin:auto;width: 100%;" 
884
|-
885
| 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>
886
|}
887
|}
888
889
and we can see that it coincides with the DEC flux.
890
891
===4.2 The anisotropic flux vector in local DEC===
892
893
We will now discuss how to discretize anisotropy in 2D DEC. Let <math display="inline">K</math> denote the symmetric anisotropy tensor
894
895
{| class="formulaSCP" style="width: 100%; text-align: left;" 
896
|-
897
| 
898
{| style="text-align: left; margin:auto;width: 100%;" 
899
|-
900
| style="text-align: center;" | <math>K=\left(\begin{array}{cc} k_{11} & k_{12} \\  k_{12} & k_{22} \end{array} \right)</math>
901
|}
902
|}
903
904
and recall the anisotropic Poisson equation
905
906
{| class="formulaSCP" style="width: 100%; text-align: left;" 
907
|-
908
| 
909
{| style="text-align: left; margin:auto;width: 100%;" 
910
|-
911
| style="text-align: center;" | <math>-\nabla \cdot (K\, \nabla f) = q.</math>
912
|}
913
|}
914
915
First recall that, in Exterior Differential Calculus, for any <math display="inline">w\in \mathbb{R}^2</math>,
916
917
{| class="formulaSCP" style="width: 100%; text-align: left;" 
918
|-
919
| 
920
{| style="text-align: left; margin:auto;width: 100%;" 
921
|-
922
| style="text-align: center;" | <math>(K\nabla f(p))\cdot w =\nabla f(p)\cdot (K^Tw) =\nabla f(p)\cdot (Kw) </math>
923
|-
924
| style="text-align: center;" | <math>    =df_p(Kw)=(df_p\circ K)(w) =:(K^*df_p)(w), </math>
925
|}
926
|}
927
928
where <math display="inline">K^*df_p</math> is the ''pullback'' of <math display="inline">df_p</math> by <math display="inline">K</math>.
929
930
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
931
932
{| class="formulaSCP" style="width: 100%; text-align: left;" 
933
|-
934
| 
935
{| style="text-align: left; margin:auto;width: 100%;" 
936
|-
937
| 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>
938
|-
939
| 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>
940
|}
941
|}
942
943
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.
944
945
{| class="formulaSCP" style="width: 100%; text-align: left;" 
946
|-
947
| 
948
{| style="text-align: left; margin:auto;width: 100%;" 
949
|-
950
| 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>
951
|}
952
|}
953
954
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
955
956
{| class="formulaSCP" style="width: 100%; text-align: left;" 
957
|-
958
| 
959
{| style="text-align: left; margin:auto;width: 100%;" 
960
|-
961
| 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>
962
|}
963
|}
964
965
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.
966
967
{| class="formulaSCP" style="width: 100%; text-align: left;" 
968
|-
969
| 
970
{| style="text-align: left; margin:auto;width: 100%;" 
971
|-
972
| 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>
973
|}
974
|}
975
976
where
977
978
{| class="formulaSCP" style="width: 100%; text-align: left;" 
979
|-
980
| 
981
{| style="text-align: left; margin:auto;width: 100%;" 
982
|-
983
| style="text-align: center;" | <math>\eta ^K_{kl}=\eta _k(K(w_l)).</math>
984
|}
985
|}
986
987
====4.2.1 <span id='lb-4.2.1'></span>Geometric interpretation of the entries of <math>K^{DEC}</math>====
988
989
Consider the following figure, where <math display="inline">J</math> denotes the <math display="inline">90^\circ </math> anti-clockwise rotation
990
991
{| class="formulaSCP" style="width: 100%; text-align: left;" 
992
|-
993
| 
994
{| style="text-align: left; margin:auto;width: 100%;" 
995
|-
996
| style="text-align: center;" | <math>J    =\left(\begin{array}{cc}0 & -1 \\    1 & 0   \end{array} \right). </math>
997
|}
998
|}
999
1000
<div id='img-5'></div>
1001
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1002
|-
1003
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-DiscretizedAnisotropyOperator03-v2.png|360px|Geometric interpretation of the entries of the anisotropy tensor discretization ]]
1004
|- style="text-align: center; font-size: 75%;"
1005
| colspan="1" style="padding:10px;"| '''Figure 5'''. Geometric interpretation of the entries of the anisotropy tensor discretization 
1006
|}
1007
1008
We have
1009
1010
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1011
|-
1012
| 
1013
{| style="text-align: left; margin:auto;width: 100%;" 
1014
|-
1015
| 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>
1016
|-
1017
| 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>
1018
|}
1019
|}
1020
1021
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.
1022
1023
==5. Anisotropic Poisson equation in 2D==
1024
1025
In this section, we describe the local DEC discretization of the 2D anisotropic Poisson equation and compare it to that of FEML.
1026
1027
===5.1 Local DEC discretization of the 2D anisotropic Poisson equation===
1028
1029
The anisotropic Poisson equation reads as follows
1030
1031
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1032
|-
1033
| 
1034
{| style="text-align: left; margin:auto;width: 100%;" 
1035
|-
1036
| style="text-align: center;" | <math>-\nabla \cdot (K\, \nabla f) = q,</math>
1037
|}
1038
|}
1039
1040
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
1041
1042
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1043
|-
1044
| 
1045
{| style="text-align: left; margin:auto;width: 100%;" 
1046
|-
1047
| style="text-align: center;" | <math>-\star d \star (K^*df) = q</math>
1048
|}
1049
|}
1050
1051
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
1052
1053
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1054
|-
1055
| 
1056
{| style="text-align: left; margin:auto;width: 100%;" 
1057
|-
1058
| style="text-align: center;" | <math>-M_0^{-1} \, \left(-D_0^T\right) \, M_1\, K^{DEC} \, D_0 \, [f] = [q], </math>
1059
|}
1060
|}
1061
1062
or equivalently
1063
1064
<span id="eq-13"></span>
1065
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1066
|-
1067
| 
1068
{| style="text-align: left; margin:auto;width: 100%;" 
1069
|-
1070
| style="text-align: center;" | <math>D_0^T  \, M_1\, K^{DEC}\, D_0 \, [f] = M_0 \, [q].  </math>
1071
|}
1072
| style="width: 5px;text-align: right;white-space: nowrap;" | (13)
1073
|}
1074
1075
In order to simplify the notation, consider the lengths and areas defined in the Figure [[#img-6|6]].
1076
1077
<div id='img-6'></div>
1078
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1079
|-
1080
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-WellCenteredTriangle02-eps-converted-to.png|210px|Triangle ]]
1081
|- style="text-align: center; font-size: 75%;"
1082
| colspan="1" style="padding-bottom:10px;"| '''Figure 6'''. Triangle 
1083
|}
1084
1085
Now, the discretized equation ([[#eq-13|13]]) looks as follows:
1086
1087
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1088
|-
1089
| 
1090
{| style="text-align: left; margin:auto;width: 100%;" 
1091
|-
1092
| 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>
1093
|}
1094
|}
1095
1096
The diffusive term matrix  is actually symmetric (see Subsection [[#5.3.1 The diffusive term|5.3.1]]).
1097
1098
===5.2 Local FEML-Discretized 2D anisotropic Poisson equation===
1099
1100
The diffusive elemental matrix in FEM (frequently called “stiffness matrix”) on an element <math display="inline">e</math> is given by
1101
1102
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1103
|-
1104
| 
1105
{| style="text-align: left; margin:auto;width: 100%;" 
1106
|-
1107
| style="text-align: center;" | <math>K_e=\int B^tDBdA,</math>
1108
|}
1109
|}
1110
1111
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
1112
1113
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1114
|-
1115
| 
1116
{| style="text-align: left; margin:auto;width: 100%;" 
1117
|-
1118
| 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>
1119
|}
1120
|}
1121
1122
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
1123
1124
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1125
|-
1126
| 
1127
{| style="text-align: left; margin:auto;width: 100%;" 
1128
|-
1129
| style="text-align: center;" | <math>K_e    =\int B^T DB dA =B^T D B A_e </math>
1130
|-
1131
| 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>
1132
|}
1133
|}
1134
1135
Now, let us consider the first diagonal entry of the local FEML anisotropic Poisson diffusive matrix <math display="inline">K_e</math>,
1136
1137
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1138
|-
1139
| 
1140
{| style="text-align: left; margin:auto;width: 100%;" 
1141
|-
1142
| 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>
1143
|-
1144
| 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>
1145
|-
1146
| 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>
1147
|-
1148
| 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>
1149
|}
1150
|}
1151
1152
where <math display="inline">J</math> is the <math display="inline">90^\circ </math> anticlockwise rotation,
1153
1154
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1155
|-
1156
| 
1157
{| style="text-align: left; margin:auto;width: 100%;" 
1158
|-
1159
| style="text-align: center;" | <math>J    =\left(\begin{array}{cc}0 & -1 \\    1 & 0   \end{array} \right). </math>
1160
|}
1161
|}
1162
1163
In this notation, the diffusive term in local FEML is given as follows <span style="text-align: center; font-size: 75%;">
1164
1165
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1166
|-
1167
| 
1168
{| style="text-align: left; margin:auto;width: 100%;" 
1169
|-
1170
| 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>
1171
|}
1172
|}
1173
1174
</span>
1175
1176
===5.3 Comparison between local DEC and FEML discretizations===
1177
1178
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]].
1179
1180
<div id='img-7'></div>
1181
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1182
|-
1183
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-WellCenteredTriangle03-eps-converted-to.png|198px|Circumscribed triangle.]]
1184
|- style="text-align: center; font-size: 75%;"
1185
| colspan="1" style="padding-bottom:10px;"| '''Figure 7'''. Circumscribed triangle.
1186
|}
1187
1188
We have the following identities:
1189
1190
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1191
|-
1192
| 
1193
{| style="text-align: left; margin:auto;width: 100%;" 
1194
|-
1195
| style="text-align: center;" | <math>\pi = 2(\alpha _1+\alpha _2+\alpha _3),</math>
1196
|-
1197
| style="text-align: center;" | <math>  {2l_i\over L_i} = \tan (\alpha _i),</math>
1198
|-
1199
| style="text-align: center;" | <math>  {l_i\over R} = \sin (\alpha _i),</math>
1200
|-
1201
| style="text-align: center;" | <math>  {L_i\over 2R} = \cos (\alpha _i),</math>
1202
|-
1203
| style="text-align: center;" | <math>  A_1= {L_1l_1\over 4} + {L_3l_3\over 4},</math>
1204
|-
1205
| style="text-align: center;" | <math>  A_2= {L_1l_1\over 4} + {L_2l_2\over 4},</math>
1206
|-
1207
| style="text-align: center;" | <math>  A_3= {L_2l_2\over 4} + {L_3l_3\over 4}. </math>
1208
|}
1209
|}
1210
1211
====5.3.1 The diffusive term====
1212
1213
For instance, we claim that
1214
1215
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1216
|-
1217
| 
1218
{| style="text-align: left; margin:auto;width: 100%;" 
1219
|-
1220
| 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>
1221
|}
1222
|}
1223
1224
Indeed,
1225
1226
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1227
|-
1228
| 
1229
{| style="text-align: left; margin:auto;width: 100%;" 
1230
|-
1231
| 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>
1232
|-
1233
| 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>
1234
|-
1235
| 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>
1236
|-
1237
| 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>
1238
|}
1239
|}
1240
1241
Thus,
1242
1243
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1244
|-
1245
| 
1246
{| style="text-align: left; margin:auto;width: 100%;" 
1247
|-
1248
| 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)    &=&   -\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)    \\     &=&     \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}\\    &=&     \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>
1249
|}
1250
|}
1251
1252
All we have to do now is show that
1253
1254
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1255
|-
1256
| 
1257
{| style="text-align: left; margin:auto;width: 100%;" 
1258
|-
1259
| 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>
1260
|}
1261
|}
1262
1263
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,
1264
1265
<span id="eq-14"></span>
1266
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1267
|-
1268
| 
1269
{| style="text-align: left; margin:auto;width: 100%;" 
1270
|-
1271
| 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>
1272
|}
1273
| style="width: 5px;text-align: right;white-space: nowrap;" | (14)
1274
|}
1275
1276
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
1277
1278
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1279
|-
1280
| 
1281
{| style="text-align: left; margin:auto;width: 100%;" 
1282
|-
1283
| style="text-align: center;" | <math>c-v_1 = a (v_2-v_1) + b(v_3-v_1)</math>
1284
|}
1285
|}
1286
1287
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
1288
1289
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1290
|-
1291
| 
1292
{| style="text-align: left; margin:auto;width: 100%;" 
1293
|-
1294
| style="text-align: center;" | <math>R\cos (\alpha _1)    =aL_1+bL_3\cos (\alpha _1+\alpha _3),</math>
1295
|-
1296
| style="text-align: center;" | <math> R\cos (\alpha _3)    =aL_1\cos (\alpha _1+\alpha _3)+bL_3.  </math>
1297
|}
1298
|}
1299
1300
Solving for <math display="inline">a</math> and <math display="inline">b</math>
1301
1302
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1303
|-
1304
| 
1305
{| style="text-align: left; margin:auto;width: 100%;" 
1306
|-
1307
| style="text-align: center;" | <math>a    ={\sin (\alpha _3)\over 2\cos (\alpha _1)\sin (\alpha _1+\alpha _3)},</math>
1308
|-
1309
| style="text-align: center;" | <math> b    ={\sin (\alpha _1)\over 2\cos (\alpha _3)\sin (\alpha _1+\alpha _3)}. </math>
1310
|}
1311
|}
1312
1313
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
1314
1315
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1316
|-
1317
| 
1318
{| style="text-align: left; margin:auto;width: 100%;" 
1319
|-
1320
| 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>
1321
|-
1322
| 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>
1323
|-
1324
| 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>
1325
|-
1326
| 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>
1327
|-
1328
| style="text-align: center;" | <math>    =\tan (\alpha _1){-\sin (\alpha _2)\over \sin (\alpha _2)}=-\tan (\alpha _1),  </math>
1329
|}
1330
|}
1331
1332
and similarly for the coefficient of <math display="inline">(v_1-v_3)</math>. The calculations for the remaining entries are similar.
1333
1334
Thus, the local DEC and FEML diffusive terms of the 2D anisotropic Poisson equation coincide.
1335
1336
====5.3.2 The source term====
1337
1338
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
1339
1340
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1341
|-
1342
| 
1343
{| style="text-align: left; margin:auto;width: 100%;" 
1344
|-
1345
| 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>
1346
|}
1347
|}
1348
1349
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).
1350
1351
==6. Some remarks about DEC quantities==
1352
1353
===6.1 The discrete Hodge star quantities revisited===
1354
1355
The numbers appearing in the local DEC matrices can be expressed both in terms of determinants and in terms of trigonometric functions. More precisely,
1356
1357
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1358
|-
1359
| 
1360
{| style="text-align: left; margin:auto;width: 100%;" 
1361
|-
1362
| 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>
1363
|-
1364
| 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>
1365
|-
1366
| 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>
1367
|-
1368
| 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>
1369
|-
1370
| 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>
1371
|-
1372
| 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>
1373
|}
1374
|}
1375
1376
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]].
1377
1378
<div id='img-8'></div>
1379
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1380
|-
1381
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle01a-eps-converted-to.png|180px|]]
1382
|-
1383
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NegativeAngles01-eps-converted-to.png|180px|Negative (exterior) angles measured in an obtuse triangle.]]
1384
|- style="text-align: center; font-size: 75%;"
1385
| colspan="1" style="padding:10px;"| '''Figure 8'''. Negative (exterior) angles measured in an obtuse triangle.
1386
|}
1387
1388
and some quantities can even be zero. For instance, if
1389
1390
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1391
|-
1392
| 
1393
{| style="text-align: left; margin:auto;width: 100%;" 
1394
|-
1395
| style="text-align: center;" | <math>\alpha _2={\pi \over 2}-2\alpha _1,</math>
1396
|}
1397
|}
1398
1399
then
1400
1401
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1402
|-
1403
| 
1404
{| style="text-align: left; margin:auto;width: 100%;" 
1405
|-
1406
| style="text-align: center;" | <math>A_1=0.</math>
1407
|}
1408
|}
1409
1410
===6.2 Area weights assigned to vertices===
1411
1412
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]].
1413
1414
<div id='img-9'></div>
1415
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1416
|-
1417
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle03a-eps-converted-to.png|200px|]]
1418
|-
1419
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle04a-eps-converted-to.png|200px|]]
1420
|-
1421
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle05a-eps-converted-to.png|200px|Area weight assigned to ]]
1422
|- style="text-align: center; font-size: 75%;"
1423
| colspan="1" style="padding-bottom:10px;"| '''Figure 9:''' Area weight assigned to 
1424
|}
1425
1426
1427
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 (see Figure [[#img-10|10]]).
1428
1429
<div id='img-10'></div>
1430
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1431
|-
1432
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle06a-eps-converted-to.png|200px|]]
1433
|-
1434
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle07a-eps-converted-to.png|200px|]]
1435
|-
1436
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle08a-eps-converted-to.png|200px|]]
1437
|- style="text-align: center; font-size: 75%;"
1438
| colspan="1" style="padding-bottom:10px;"| '''Figure 10:''' Area weight assigned to 
1439
|}
1440
1441
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]]).
1442
1443
<div id='img-11'></div>
1444
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1445
|-
1446
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle09a-eps-converted-to.png|200px|]]
1447
|-
1448
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle10a-eps-converted-to.png|200px|]]
1449
|-
1450
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle11a-eps-converted-to.png|200px|Area weight assigned to ]]
1451
|- style="text-align: center; font-size: 75%;"
1452
| colspan="1" style="padding-bottom:10px;"| '''Figure 11:''' Area weight assigned to 
1453
|}
1454
1455
==7. Numerical examples==
1456
1457
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|[11,13,2]]].
1458
1459
===7.1 First example: Heterogeneity===
1460
1461
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]]. 
1462
1463
<div id='img-12'></div>
1464
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1465
|-
1466
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_12_SquareWithConditions.png|220px|Square and inner circle with different conditions.]]
1467
|- style="text-align: center; font-size: 75%;"
1468
| colspan="1" style="padding:10px;"| '''Figure 12'''. Square and inner circle with different conditions
1469
|}
1470
1471
* 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>.
1472
* 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>.
1473
1474
1475
The meshes used in this example are shown in Figure [[#img-14|14]] and vary from coarse to very fine. 
1476
1477
<div id='img-13'></div>
1478
<div id='img-13'></div>
1479
<div id='img-13c'></div>
1480
<div id='img-13'></div>
1481
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1482
|-
1483
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m1.png|150px|]]
1484
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m2.png|144px|]]
1485
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m3.png|144px|]]
1486
|- style="text-align: center; font-size: 75%;"
1487
| (a) 
1488
| (b) 
1489
| (c) 
1490
|- style="text-align: center; font-size: 75%;"
1491
| colspan="3" style="padding:10px;"| '''Figure 13''' 
1492
|}
1493
1494
<div id='img-14a'></div>
1495
<div id='img-14b'></div>
1496
<div id='img-14c'></div>
1497
<div id='img-14'></div>
1498
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1499
|-
1500
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m4.png|150px|]]
1501
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m5.png|150px|]]
1502
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m6.png|150px|]]
1503
|- style="text-align: center; font-size: 75%;"
1504
| (a) 
1505
| (b) 
1506
| (c) 
1507
|- style="text-align: center; font-size: 75%;"
1508
| colspan="3" style="padding:10px;"| '''Figure 14'''. Six of the meshes used in the first example
1509
|}
1510
1511
The numerical results for the maximum temperature value are exemplified in Table [[#7.1 First example: Heterogeneity|7.1]].
1512
1513
<div class="center" style="font-size: 75%;">Numerical simulation results of the first example</div>
1514
1515
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1516
|- style="border-top: 2px solid;border-bottom: 2px solid;"
1517
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Mesh
1518
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" |  nodes
1519
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | elements
1520
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Temp. Value
1521
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Flux Magnitude
1522
|-style="border-top: 2px solid;border-bottom: 2px solid;"
1523
| style="border-left: 2px solid;border-right: 1px solid;" | DEC  
1524
| style="border-left: 1px solid;border-right: 1px solid;" | FEML
1525
| style="border-left: 1px solid;border-right: 1px solid;" | DEC  
1526
| style="border-left: 1px solid;border-right: 2px solid;" | FEML  
1527
|- style="border-top: 2px solid;"
1528
| style="border-left: 2px solid;border-right: 1px solid;" |    Figure [[#img-14|14]](a) 
1529
| style="border-left: 1px solid;border-right: 1px solid;" | 49 
1530
| style="border-left: 1px solid;border-right: 1px solid;" | 80 
1531
| style="border-left: 1px solid;border-right: 1px solid;" | 5.51836 
1532
| style="border-left: 1px solid;border-right: 1px solid;" | 5.53345 
1533
| style="border-left: 1px solid;border-right: 1px solid;" | 13.837 
1534
| style="border-left: 1px solid;border-right: 2px solid;" | 13.453 
1535
|-
1536
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-14|14]](b) 
1537
| style="border-left: 1px solid;border-right: 1px solid;" | 98 
1538
| style="border-left: 1px solid;border-right: 1px solid;" | 162 
1539
| style="border-left: 1px solid;border-right: 1px solid;" | 5.65826 
1540
| style="border-left: 1px solid;border-right: 1px solid;" | 5.66648 
1541
| style="border-left: 1px solid;border-right: 1px solid;" | 14.137 
1542
| style="border-left: 1px solid;border-right: 2px solid;" | 14.024 
1543
|-
1544
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-14|14]](c) 
1545
| style="border-left: 1px solid;border-right: 1px solid;" | 258 
1546
| style="border-left: 1px solid;border-right: 1px solid;" | 466 
1547
| style="border-left: 1px solid;border-right: 1px solid;" | 5.70585 
1548
| style="border-left: 1px solid;border-right: 1px solid;" | 5.71709 
1549
| style="border-left: 1px solid;border-right: 1px solid;" | 14.858 
1550
| style="border-left: 1px solid;border-right: 2px solid;" | 14.770 
1551
|-
1552
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-14|14]](d) 
1553
| style="border-left: 1px solid;border-right: 1px solid;" | 1,010 
1554
| style="border-left: 1px solid;border-right: 1px solid;" | 1,914 
1555
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72103 
1556
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72280 
1557
| style="border-left: 1px solid;border-right: 1px solid;" | 15.008 
1558
| style="border-left: 1px solid;border-right: 2px solid;" | 15.006 
1559
|-
1560
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-14|14]](e) 
1561
| style="border-left: 1px solid;border-right: 1px solid;" | 3,813 
1562
| style="border-left: 1px solid;border-right: 1px solid;" | 7,424 
1563
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72725 
1564
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72725 
1565
| style="border-left: 1px solid;border-right: 1px solid;" | 15.229 
1566
| style="border-left: 1px solid;border-right: 2px solid;" | 15.228 
1567
|-
1568
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-14|14]](f) 
1569
| style="border-left: 1px solid;border-right: 1px solid;" | 13,911 
1570
| style="border-left: 1px solid;border-right: 1px solid;" | 27,420 
1571
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72821 
1572
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72826 
1573
| style="border-left: 1px solid;border-right: 1px solid;" | 15.342 
1574
| style="border-left: 1px solid;border-right: 2px solid;" | 15.337 
1575
|-
1576
| style="border-left: 2px solid;border-right: 1px solid;" | 
1577
| style="border-left: 1px solid;border-right: 1px solid;" | 50,950 
1578
| style="border-left: 1px solid;border-right: 1px solid;" | 101,098 
1579
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72841 
1580
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72842 
1581
| style="border-left: 1px solid;border-right: 1px solid;" | 15.395 
1582
| style="border-left: 1px solid;border-right: 2px solid;" | 15.396 
1583
|-
1584
| style="border-left: 2px solid;border-right: 1px solid;" | 
1585
| style="border-left: 1px solid;border-right: 1px solid;" | 135,519 
1586
| style="border-left: 1px solid;border-right: 1px solid;" | 269,700 
1587
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72845 
1588
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72845 
1589
| style="border-left: 1px solid;border-right: 1px solid;" | 15.420 
1590
| style="border-left: 1px solid;border-right: 2px solid;" | 15.417 
1591
|-
1592
| style="border-left: 2px solid;border-right: 1px solid;" | 
1593
| style="border-left: 1px solid;border-right: 1px solid;" | 298,299 
1594
| style="border-left: 1px solid;border-right: 1px solid;" | 594,596 
1595
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1596
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1597
| style="border-left: 1px solid;border-right: 1px solid;" | 15.430 
1598
| style="border-left: 1px solid;border-right: 2px solid;" | 15.429 
1599
|-
1600
| style="border-left: 2px solid;border-right: 1px solid;" | 
1601
| style="border-left: 1px solid;border-right: 1px solid;" | 600,594 
1602
| style="border-left: 1px solid;border-right: 1px solid;" | 1,198,330 
1603
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1604
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1605
| style="border-left: 1px solid;border-right: 1px solid;" | 15.433 
1606
| style="border-left: 1px solid;border-right: 2px solid;" | 15.433 
1607
|- style="border-bottom: 2px solid;"
1608
| style="border-left: 2px solid;border-right: 1px solid;" | 
1609
| style="border-left: 1px solid;border-right: 1px solid;" | 1,175,238 
1610
| style="border-left: 1px solid;border-right: 1px solid;" | 2,346,474 
1611
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72849 
1612
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72849 
1613
| style="border-left: 1px solid;border-right: 1px solid;" | 15.43724 
1614
| style="border-left: 1px solid;border-right: 2px solid;" | 15.43724 
1615
|}
1616
1617
1618
The temperature and flux-magnitude distribution fields are shown in Figure [[#img-15|15]].     
1619
1620
<div id='img-15a'></div>
1621
<div id='img-15b'></div>
1622
<div id='img-15'></div>
1623
{| style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;max-width: auto;"
1624
|-
1625
|  style="text-align: center;padding:10px;"| [[Image:Esqueda_et_al_2020a-Fig_14_Square_contour_temp.png|240px|Contour Fill of Temperatures]]
1626
|  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]] 
1627
|-
1628
|  style="text-align: center;font-size: 75%;"|(a) Contour fill of temperatures
1629
|  style="text-align: center;font-size: 75%;"|(b) Contour fill of flux vectors on Elems
1630
|- style="text-align: center; font-size: 75%;"
1631
| colspan="2" style="padding:10px;"| '''Figure 15'''. Temperature and flux-magnitude distribution fields of the first example
1632
|}
1633
1634
1635
Figure [[#img-16|16]] shows the graphs of the temperature and the flux-magnitude along a horizontal line crossing the inner circle for the first two meshes. 
1636
1637
<div id='img-16a'></div>
1638
<div id='img-16b'></div>
1639
<div id='img-16c'></div>
1640
<div id='img-16d'></div>
1641
<div id='img-16e'></div>
1642
<div id='img-16f'></div>
1643
<div id='img-16'></div>
1644
{| style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;max-width: auto;"
1645
|-
1646
|  style="text-align: center;padding:10px;"| [[Image:Esqueda_et_al_2020a-Fig_15_Square_m1_diametral_temp.png|300px|]]
1647
|  style="text-align: center;padding:10px;"| [[Image:Esqueda_et_al_2020a-Fig_15_Square_m1_diametral_flux.png|300px|]]
1648
|-
1649
|  style="text-align: center;font-size: 75%;"|(a) 
1650
|  style="text-align: center;font-size: 75%;"|(b) 
1651
|-
1652
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m2_diametral_temp.png|300px|]]
1653
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m2_diametral_flux.png|300px|]]
1654
|- 
1655
| style="text-align: center;font-size: 75%;"|(c) 
1656
| style="text-align: center;font-size: 75%;"|(d) 
1657
|-
1658
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m3_diametral_temp.png|300px|]]
1659
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m3_diametral_flux.png|300px|]]
1660
|- 
1661
| style="text-align: center;font-size: 75%;"|(e) 
1662
| style="text-align: center;font-size: 75%;"|(f) 
1663
|- style="text-align: center; font-size: 75%;"
1664
| colspan="2" style="padding:10px;"| '''Figure 16'''. Temperature and Flux magnitude graphs of the first example along a cross-section of the domain for different meshes
1665
|}
1666
1667
1668
In Table [[#table-1|1]], we show some global error metrics for different meshes. Figure [[#img-17|17]] shows the error evolution in <math display="inline">L^2</math> norm for this example.
1669
1670
<div class="center" style="font-size: 75%;">'''Table 1'''. tableDEC <math>L^2</math> errors in the first example</div>
1671
1672
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1673
|- style="border-top: 2px solid;"
1674
| style="border-left: 2px solid;border-right: 2px solid;" |    '''Mesh''' 
1675
| style="border-left: 2px solid;border-right: 2px solid;" | '''Nodes''' 
1676
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>    \sum (u-u_i)^2 \over nodes    </math>''' 
1677
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>L^2</math> norm''' 
1678
|- style="border-top: 2px solid;"
1679
| style="border-left: 2px solid;border-right: 1px solid;" |    1 
1680
| style="border-left: 1px solid;border-right: 1px solid;" | 49 
1681
| style="border-left: 1px solid;border-right: 1px solid;" | 1.0537e-02 
1682
| style="border-left: 1px solid;border-right: 2px solid;" | 1.4438e-01 
1683
|- 
1684
| style="border-left: 2px solid;border-right: 1px solid;" |    2 
1685
| style="border-left: 1px solid;border-right: 1px solid;" | 98 
1686
| style="border-left: 1px solid;border-right: 1px solid;" | 4.2447e-03 
1687
| style="border-left: 1px solid;border-right: 2px solid;" | 4.8558e-02 
1688
|- 
1689
| style="border-left: 2px solid;border-right: 1px solid;" |    3 
1690
| style="border-left: 1px solid;border-right: 1px solid;" | 258 
1691
| style="border-left: 1px solid;border-right: 1px solid;" | 6.9781e-04 
1692
| style="border-left: 1px solid;border-right: 2px solid;" | 3.0390e-03 
1693
|- 
1694
| style="border-left: 2px solid;border-right: 1px solid;" |    4 
1695
| style="border-left: 1px solid;border-right: 1px solid;" | 1,010 
1696
| style="border-left: 1px solid;border-right: 1px solid;" | 8.8386e-05 
1697
| style="border-left: 1px solid;border-right: 2px solid;" | 1.4877e-04 
1698
|- 
1699
| style="border-left: 2px solid;border-right: 1px solid;" |    5 
1700
| style="border-left: 1px solid;border-right: 1px solid;" | 3,813 
1701
| style="border-left: 1px solid;border-right: 1px solid;" | 1.0736e-05 
1702
| style="border-left: 1px solid;border-right: 2px solid;" | 7.7369e-06 
1703
|- 
1704
| style="border-left: 2px solid;border-right: 1px solid;" |    6 
1705
| style="border-left: 1px solid;border-right: 1px solid;" | 13,911 
1706
| style="border-left: 1px solid;border-right: 1px solid;" | 1.4422e-06 
1707
| style="border-left: 1px solid;border-right: 2px solid;" | 4.9791e-07 
1708
|- 
1709
| style="border-left: 2px solid;border-right: 1px solid;" |    7 
1710
| style="border-left: 1px solid;border-right: 1px solid;" | 50,950 
1711
| style="border-left: 1px solid;border-right: 1px solid;" | 1.7582e-07 
1712
| style="border-left: 1px solid;border-right: 2px solid;" | 2.9608e-08 
1713
|- 
1714
| style="border-left: 2px solid;border-right: 1px solid;" |    8 
1715
| style="border-left: 1px solid;border-right: 1px solid;" | 135,518 
1716
| style="border-left: 1px solid;border-right: 1px solid;" | 3.2621e-08 
1717
| style="border-left: 1px solid;border-right: 2px solid;" | 2.9233e-09 
1718
|- 
1719
| style="border-left: 2px solid;border-right: 1px solid;" |    9 
1720
| style="border-left: 1px solid;border-right: 1px solid;" | 298,299 
1721
| style="border-left: 1px solid;border-right: 1px solid;" | 7.3566e-09 
1722
| style="border-left: 1px solid;border-right: 2px solid;" | 3.3610e-10 
1723
|- style="border-top: 1px solid;border-bottom: 2px solid;"
1724
| style="border-left: 2px solid;border-right: 1px solid;" |    10 
1725
| style="border-left: 1px solid;border-right: 1px solid;" | 603,440 
1726
| style="border-left: 1px solid;border-right: 1px solid;" | 1.8577e-09 
1727
| style="border-left: 1px solid;border-right: 2px solid;" | 4.9496e-11 
1728
|}
1729
1730
1731
<div id='img-17'></div>
1732
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1733
|-
1734
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-DEC_Error_Graph_Square_Circle.png|430px|DEC ]]
1735
|- style="text-align: center; font-size: 75%;"
1736
| colspan="1" style="padding-bottom:10px;"| '''Figure 17'''. DEC 
1737
|}
1738
1739
===7.2 Second example: Anisotropy===
1740
1741
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 (see Figure [[#img-18|18]]):
1742
1743
* heat anisotropic diffusion constants <math display="inline">K_x = 1.5, K_y=1.0</math>;
1744
* material angle <math display="inline">30^\circ </math>;
1745
* source term <math display="inline">q= 1</math>;
1746
* Dirichlet boundary condition <math display="inline">u=10</math>.
1747
1748
<div id='img-18'></div>
1749
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1750
|-
1751
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_16_CircleWithConditions.png|180px|Disk of radius one.]]
1752
|- style="text-align: center; font-size: 75%;"
1753
| colspan="1" style="padding-bottom:10px;"| '''Figure 18'''. Disk of radius one.
1754
|}
1755
1756
1757
The meshes used in this example are shown in Figure [[#img-19|19]] and vary from very coarse to very fine. 
1758
1759
<div id='img-19a'></div>
1760
<div id='img-19b'></div>
1761
<div id='img-19c'></div>
1762
<div id='img-19d'></div>
1763
<div id='img-19e'></div>
1764
<div id='img-19f'></div>
1765
<div id='img-19'></div>
1766
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1767
|-
1768
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh1.png|144px|]]
1769
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh2.png|144px|]]
1770
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh3.png|144px|]]
1771
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh4.png|144px|]]
1772
|- 
1773
| style="text-align: center;font-size: 75%;"|(a) 
1774
| style="text-align: center;font-size: 75%;"|(b) 
1775
| style="text-align: center;font-size: 75%;"|(c) 
1776
| style="text-align: center;font-size: 75%;"|(d) 
1777
|-
1778
|
1779
|colspan="1" style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh5.png|144px|]]
1780
|colspan="1" style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh6.png|144px|]]
1781
|
1782
|- 
1783
|
1784
|colspan="1"  style="text-align: center;font-size: 75%;"|(e) 
1785
| colspan="1" style="text-align: center;font-size: 75%;"|(f) 
1786
|
1787
|- style="text-align: center; font-size: 75%;"
1788
| colspan="4" style="padding:10px;" | '''Figure 19'''. First six meshes used for unit disk.
1789
|}
1790
The numerical results for the maximum temperature value (<math display="inline">u(0,0)=10.2</math>) are exemplified in Table [[#7.2 Second example: Anisotropy|7.2]] where  a comparison with the Finite Element Method with linear interpolation functions (FEML) is also shown.
1791
1792
<div style="text-align: center; font-size: 75%; ">Temperature value at the point </div>  
1793
1794
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1795
|- style="border-top: 2px solid;border-bottom: 2px solid;"
1796
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Mesh
1797
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Nodes
1798
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Elements
1799
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Temp. Value at <math>(0,0)</math>
1800
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Flux Magnitude at <math>(-1,0)</math>
1801
|-style="border-top: 2px solid;border-bottom: 2px solid;"
1802
| style="border-left: 2px solid;border-right: 1px solid;" | DEC  
1803
| style="border-left: 1px solid;border-right: 1px solid;" | FEML
1804
| style="border-left: 1px solid;border-right: 1px solid;" | DEC  
1805
| style="border-left: 1px solid;border-right: 2px solid;" | FEML  
1806
|- 
1807
| style="border-left: 2px solid;border-right: 1px solid;" |    Figure [[#img-19|19]](a)
1808
| style="border-left: 1px solid;border-right: 1px solid;" | 17 
1809
| style="border-left: 1px solid;border-right: 1px solid;" | 20  
1810
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20014
1811
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19002  
1812
| style="border-left: 1px solid;border-right: 1px solid;" | 0.42133 
1813
| style="border-left: 1px solid;border-right: 2px solid;" | 0.43865
1814
|-
1815
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-19|19]](b)
1816
| style="border-left: 1px solid;border-right: 1px solid;" | 41 
1817
| style="border-left: 1px solid;border-right: 1px solid;" | 56  
1818
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20007
1819
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19678  
1820
| style="border-left: 1px solid;border-right: 1px solid;" | 0.48544 
1821
| style="border-left: 1px solid;border-right: 2px solid;" | 0.49387
1822
|-
1823
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-19|19]](c)
1824
| style="border-left: 1px solid;border-right: 1px solid;" | 201 
1825
| style="border-left: 1px solid;border-right: 1px solid;" | 344  
1826
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20012
1827
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20158  
1828
| style="border-left: 1px solid;border-right: 1px solid;" | 0.52470 
1829
| style="border-left: 1px solid;border-right: 2px solid;" | 0.52428
1830
|-
1831
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-19|19]](d)
1832
| style="border-left: 1px solid;border-right: 1px solid;" | 713 
1833
| style="border-left: 1px solid;border-right: 1px solid;" | 1304 
1834
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1835
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19969  
1836
| style="border-left: 1px solid;border-right: 1px solid;" | 0.54143 
1837
| style="border-left: 1px solid;border-right: 2px solid;" | 0.54224
1838
|-
1839
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-19|19]](e)
1840
| style="border-left: 1px solid;border-right: 1px solid;" | 2455
1841
| style="border-left: 1px solid;border-right: 1px solid;" | 4660 
1842
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1843
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19990  
1844
| style="border-left: 1px solid;border-right: 1px solid;" | 0.54971 
1845
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55138
1846
|-
1847
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-19|19]](f)
1848
| style="border-left: 1px solid;border-right: 1px solid;" | 8180
1849
| style="border-left: 1px solid;border-right: 1px solid;" | 15862 
1850
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1851
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20002  
1852
| style="border-left: 1px solid;border-right: 1px solid;" | 0.55326 
1853
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55409
1854
|-
1855
| style="border-left: 2px solid;border-right: 1px solid;" | 
1856
| style="border-left: 1px solid;border-right: 1px solid;" | 20016 
1857
| style="border-left: 1px solid;border-right: 1px solid;" | 39198 
1858
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1859
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19999  
1860
| style="border-left: 1px solid;border-right: 1px solid;" | 0.55470 
1861
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55520
1862
|- style="border-bottom: 2px solid;"
1863
| style="border-left: 2px solid;border-right: 1px solid;" | 
1864
| style="border-left: 1px solid;border-right: 1px solid;" | 42306 
1865
| style="border-left: 1px solid;border-right: 1px solid;" | 83362 
1866
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1867
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000  
1868
| style="border-left: 1px solid;border-right: 1px solid;" | 0.55540 
1869
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55572
1870
1871
|}
1872
1873
1874
The temperature distribution and Flux magnitude fields for the finest mesh are shown in Figure [[#img-20|20]]. <div id='img-20a'></div>
1875
<div id='img-20b'></div>
1876
<div id='img-20'></div>
1877
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: 100%;max-width: 100%;"
1878
|-
1879
|[[Image:Esqueda_et_al_2020a-Fig_18_CircleContourTemp.png|234px|Contour Fill of Temperatures]]
1880
|[[Image:Esqueda_et_al_2020a-Fig_18_CircleContourFlux.png|234px|Contour Fill of Flux vectors on Elems]]
1881
|- style="text-align: center; font-size: 75%;"
1882
| (a) Contour Fill of Temperatures
1883
| (b) Contour Fill of Flux vectors on Elems
1884
|- style="text-align: center; font-size: 75%;"
1885
| colspan="2" | '''Figure 20:''' Temperature distribution and Flux magnitude fields for the finest mesh of the second example.
1886
|}
1887
1888
Figures [[#img-21|21]](a), [[#img-21|21]](b)  and [[#img-21|21]](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|19]](a), [[#img-19|19]](b) and [[#img-19|19]](c) respectively. <div id='img-21a'></div>
1889
<div id='img-21b'></div>
1890
<div id='img-21c'></div>
1891
<div id='img-21d'></div>
1892
<div id='img-21e'></div>
1893
<div id='img-21f'></div>
1894
<div id='img-21'></div>
1895
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: 100%;max-width: 100%;"
1896
|-
1897
|[[Image:Esqueda_et_al_2020a-Fig_19_CircleTempCrossSection01.png|234px|]]
1898
|[[Image:Esqueda_et_al_2020a-Fig_19_CircleFluxCrossSection01.png|234px|]]
1899
|- style="text-align: center; font-size: 75%;"
1900
| (a) 
1901
| (b) 
1902
|-
1903
|[[Image:Esqueda_et_al_2020a-Fig_19_CircleTempCrossSection02.png|234px|]]
1904
|[[Image:Esqueda_et_al_2020a-Fig_19_CircleFluxCrossSection02.png|234px|]]
1905
|- style="text-align: center; font-size: 75%;"
1906
| (c) 
1907
| (d) 
1908
|-
1909
|[[Image:Esqueda_et_al_2020a-Fig_19_CircleTempCrossSection03.png|234px|]]
1910
|[[Image:Esqueda_et_al_2020a-Fig_19_CircleFluxCrossSection03.png|234px|]]
1911
|- style="text-align: center; font-size: 75%;"
1912
| (e) 
1913
| (f) 
1914
|- style="text-align: center; font-size: 75%;"
1915
| colspan="2" | '''Figure 21:''' Temperature and Flux magnitude graphs of the second example along a diameter of the circle for different meshes:    mesh in Figure 
1916
|}
1917
1918
In Table [[#table-2|2]], we show some global error metrics for different meshes.   Figure [[#img-22|22]] shows the  error evolution in <math display="inline">L^2</math> norm for this example.
1919
1920
1921
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;"
1922
|+ style="font-size: 75%;" |<span id='table-2'></span>Table. 2 tableDEC errors in the second example.
1923
|- style="border-top: 2px solid;"
1924
| style="border-left: 2px solid;border-right: 2px solid;" |    '''Mesh''' 
1925
| style="border-left: 2px solid;border-right: 2px solid;" | '''Nodes''' 
1926
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>    \sum (u-u_i)^2 \over nodes    </math>''' 
1927
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>L^2</math> norm''' 
1928
|- style="border-top: 2px solid;"
1929
| style="border-left: 2px solid;border-right: 2px solid;" |     1 
1930
| style="border-left: 2px solid;border-right: 2px solid;" | 17 
1931
| style="border-left: 2px solid;border-right: 2px solid;" | 1.5818e-04 
1932
| style="border-left: 2px solid;border-right: 2px solid;" | 2.3555e-06 
1933
|- style="border-top: 2px solid;"
1934
| style="border-left: 2px solid;border-right: 2px solid;" |     2 
1935
| style="border-left: 2px solid;border-right: 2px solid;" | 51 
1936
| style="border-left: 2px solid;border-right: 2px solid;" | 2.5395e-05 
1937
| style="border-left: 2px solid;border-right: 2px solid;" | 1.5639e-07 
1938
|- style="border-top: 2px solid;"
1939
| style="border-left: 2px solid;border-right: 2px solid;" |     3 
1940
| style="border-left: 2px solid;border-right: 2px solid;" | 201 
1941
| style="border-left: 2px solid;border-right: 2px solid;" | 3.3643e-06 
1942
| style="border-left: 2px solid;border-right: 2px solid;" | 1.0517e-08 
1943
|- style="border-top: 2px solid;"
1944
| style="border-left: 2px solid;border-right: 2px solid;" |     4 
1945
| style="border-left: 2px solid;border-right: 2px solid;" | 713 
1946
| style="border-left: 2px solid;border-right: 2px solid;" | 5.1563e-07 
1947
| style="border-left: 2px solid;border-right: 2px solid;" | 8.3543e-10 
1948
|- style="border-top: 2px solid;"
1949
| style="border-left: 2px solid;border-right: 2px solid;" |     5 
1950
| style="border-left: 2px solid;border-right: 2px solid;" | 2,455 
1951
| style="border-left: 2px solid;border-right: 2px solid;" | 8.9235e-08 
1952
| style="border-left: 2px solid;border-right: 2px solid;" | 7.6073e-11 
1953
|- style="border-top: 2px solid;"
1954
| style="border-left: 2px solid;border-right: 2px solid;" |     6 
1955
| style="border-left: 2px solid;border-right: 2px solid;" | 8,180 
1956
| style="border-left: 2px solid;border-right: 2px solid;" | 3.1731e-08 
1957
| style="border-left: 2px solid;border-right: 2px solid;" | 2.9858e-11 
1958
|- style="border-top: 2px solid;"
1959
| style="border-left: 2px solid;border-right: 2px solid;" |     7 
1960
| style="border-left: 2px solid;border-right: 2px solid;" | 20,016 
1961
| style="border-left: 2px solid;border-right: 2px solid;" | 2.0217e-08 
1962
| style="border-left: 2px solid;border-right: 2px solid;" | 2.6580e-11 
1963
|- style="border-top: 2px solid;"
1964
| style="border-left: 2px solid;border-right: 2px solid;" |     8 
1965
| style="border-left: 2px solid;border-right: 2px solid;" | 42,306 
1966
| style="border-left: 2px solid;border-right: 2px solid;" | 1.4421e-08 
1967
| style="border-left: 2px solid;border-right: 2px solid;" | 2.7062e-11 
1968
|- style="border-top: 2px solid;"
1969
| style="border-left: 2px solid;border-right: 2px solid;" |     9 
1970
| style="border-left: 2px solid;border-right: 2px solid;" | 82,722 
1971
| style="border-left: 2px solid;border-right: 2px solid;" | 9.8533e-09 
1972
| style="border-left: 2px solid;border-right: 2px solid;" | 2.6164e-11 
1973
|- style="border-top: 2px solid;"
1974
| style="border-left: 2px solid;border-right: 2px solid;" |     10 
1975
| style="border-left: 2px solid;border-right: 2px solid;" | 156,274 
1976
| style="border-left: 2px solid;border-right: 2px solid;" | 7.1352e-09 
1977
| style="border-left: 2px solid;border-right: 2px solid;" | 2.5954e-11 
1978
|- style="border-top: 2px solid;"
1979
| style="border-left: 2px solid;border-right: 2px solid;" |     11 
1980
| style="border-left: 2px solid;border-right: 2px solid;" | 420,013 
1981
| style="border-left: 2px solid;border-right: 2px solid;" | 4.4277e-09 
1982
| style="border-left: 2px solid;border-right: 2px solid;" | 2.6151e-11 
1983
|- style="border-top: 2px solid;border-bottom: 2px solid;"
1984
| style="border-left: 2px solid;border-right: 2px solid;" |     12 
1985
| style="border-left: 2px solid;border-right: 2px solid;" | 935,016 
1986
| style="border-left: 2px solid;border-right: 2px solid;" | 2.9635e-09 
1987
| style="border-left: 2px solid;border-right: 2px solid;" | 2.6003e-11 
1988
1989
|}
1990
1991
<div id='img-22'></div>
1992
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: 100%;max-width: 100%;"
1993
|-
1994
|[[Image:Esqueda_et_al_2020a-DEC_Error_Graph_Circle.png|330px|DEC ]]
1995
|- style="text-align: center; font-size: 75%;"
1996
| colspan="1" | '''Figure 22:''' DEC 
1997
|}
1998
1999
===7.3 Third example: Heterogeneity and anisotropy===
2000
2001
Let us solve the Poisson equation in a circle of radius on the following domain (see Figure [[#img-23|23]]) 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>.  <div id='img-23'></div>
2002
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: 100%;max-width: 100%;"
2003
|-
2004
|[[Image:Esqueda_et_al_2020a-Fig_20_HuevoGeometry.png|240px|Egg-like domain with different materials.]]
2005
|- style="text-align: center; font-size: 75%;"
2006
| colspan="1" | '''Figure 23:''' Egg-like domain with different materials.
2007
|}
2008
2009
2010
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;"
2011
|- style="border-top: 2px solid;"
2012
| style="border-left: 2px solid;border-right: 2px solid;" |    Point 
2013
| style="border-left: 2px solid;border-right: 2px solid;" | <math>x</math>
2014
| style="border-left: 2px solid;border-right: 2px solid;" | <math>y</math>
2015
| style="border-left: 2px solid;border-right: 2px solid;" | Point 
2016
| style="border-left: 2px solid;border-right: 2px solid;" | <math>x</math>
2017
| style="border-left: 2px solid;border-right: 2px solid;" | <math>y</math>
2018
|- style="border-top: 2px solid;"
2019
| style="border-left: 2px solid;border-right: 2px solid;" |    a 
2020
| style="border-left: 2px solid;border-right: 2px solid;" | -5 
2021
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2022
| style="border-left: 2px solid;border-right: 2px solid;" | A 
2023
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2024
| style="border-left: 2px solid;border-right: 2px solid;" | -4 
2025
|-
2026
| style="border-left: 2px solid;border-right: 2px solid;" | b 
2027
| style="border-left: 2px solid;border-right: 2px solid;" | -4 
2028
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2029
| style="border-left: 2px solid;border-right: 2px solid;" | B 
2030
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2031
| style="border-left: 2px solid;border-right: 2px solid;" | -3 
2032
|-
2033
| style="border-left: 2px solid;border-right: 2px solid;" | c 
2034
| style="border-left: 2px solid;border-right: 2px solid;" | -3 
2035
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2036
| style="border-left: 2px solid;border-right: 2px solid;" | C 
2037
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2038
| style="border-left: 2px solid;border-right: 2px solid;" | -2 
2039
|-
2040
| style="border-left: 2px solid;border-right: 2px solid;" | d 
2041
| style="border-left: 2px solid;border-right: 2px solid;" | -1 
2042
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2043
| style="border-left: 2px solid;border-right: 2px solid;" | D 
2044
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2045
| style="border-left: 2px solid;border-right: 2px solid;" | -1 
2046
|-
2047
| style="border-left: 2px solid;border-right: 2px solid;" | e 
2048
| style="border-left: 2px solid;border-right: 2px solid;" | 1 
2049
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2050
| style="border-left: 2px solid;border-right: 2px solid;" | E 
2051
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2052
| style="border-left: 2px solid;border-right: 2px solid;" | 1 
2053
|-
2054
| style="border-left: 2px solid;border-right: 2px solid;" | f 
2055
| style="border-left: 2px solid;border-right: 2px solid;" | 6 
2056
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2057
| style="border-left: 2px solid;border-right: 2px solid;" | F 
2058
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2059
| style="border-left: 2px solid;border-right: 2px solid;" | 2 
2060
|-
2061
| style="border-left: 2px solid;border-right: 2px solid;" | g 
2062
| style="border-left: 2px solid;border-right: 2px solid;" | 7 
2063
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2064
| style="border-left: 2px solid;border-right: 2px solid;" | G 
2065
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2066
| style="border-left: 2px solid;border-right: 2px solid;" | 3 
2067
|- style="border-bottom: 2px solid;"
2068
| style="border-left: 2px solid;border-right: 2px solid;" | h 
2069
| style="border-left: 2px solid;border-right: 2px solid;" | 8 
2070
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2071
| style="border-left: 2px solid;border-right: 2px solid;" | H 
2072
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2073
| style="border-left: 2px solid;border-right: 2px solid;" | 4 
2074
2075
|}
2076
2077
* 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-24|24]] and the table below.  <div id='img-24'></div>
2078
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: 100%;max-width: 100%;"
2079
|-
2080
|[[Image:Esqueda_et_al_2020a-Fig_21_HuevoWithConditions.png|228px|Dirichlet condition.]]
2081
|- style="text-align: center; font-size: 75%;"
2082
| colspan="1" | '''Figure 24:''' Dirichlet condition.
2083
|}
2084
2085
2086
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;"
2087
|- style="border-top: 2px solid;"
2088
| style="text-align: left;border-left: 2px solid;border-right: 2px solid;" |     
2089
| style="border-left: 2px solid;border-right: 2px solid;" | <math>K_x</math>
2090
| style="border-left: 2px solid;border-right: 2px solid;" | <math>K_y</math>
2091
| style="border-left: 2px solid;border-right: 2px solid;" | angle
2092
| style="border-left: 2px solid;border-right: 2px solid;" | <math>q</math>
2093
|- style="border-top: 2px solid;"
2094
| style="text-align: left;border-left: 2px solid;border-right: 2px solid;" |     Domain mat1
2095
| style="border-left: 2px solid;border-right: 2px solid;" | 5 
2096
| style="border-left: 2px solid;border-right: 2px solid;" | 25 
2097
| style="border-left: 2px solid;border-right: 2px solid;" | 30 
2098
| style="border-left: 2px solid;border-right: 2px solid;" | 15
2099
|- style="border-top: 2px solid;"
2100
| style="text-align: left;border-left: 2px solid;border-right: 2px solid;" |     Domain mat2
2101
| style="border-left: 2px solid;border-right: 2px solid;" | 25 
2102
| style="border-left: 2px solid;border-right: 2px solid;" | 5 
2103
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2104
| style="border-left: 2px solid;border-right: 2px solid;" | 5
2105
|- style="border-top: 2px solid;"
2106
| style="text-align: left;border-left: 2px solid;border-right: 2px solid;" |     Domain mat3
2107
| style="border-left: 2px solid;border-right: 2px solid;" | 50 
2108
| style="border-left: 2px solid;border-right: 2px solid;" | 12
2109
| style="border-left: 2px solid;border-right: 2px solid;" | 45
2110
| style="border-left: 2px solid;border-right: 2px solid;" | 5
2111
|- style="border-top: 2px solid;border-bottom: 2px solid;"
2112
| style="text-align: left;border-left: 2px solid;border-right: 2px solid;" |     Domain mat4
2113
| style="border-left: 2px solid;border-right: 2px solid;" | 10 
2114
| style="border-left: 2px solid;border-right: 2px solid;" | 35 
2115
| style="border-left: 2px solid;border-right: 2px solid;" | 0 
2116
| style="border-left: 2px solid;border-right: 2px solid;" | 5
2117
2118
|}
2119
2120
The meshes used in this example are shown in Figure [[#img-25|25]]. <div id='img-25a'></div>
2121
<div id='img-25b'></div>
2122
<div id='img-25c'></div>
2123
<div id='img-25d'></div>
2124
<div id='img-25'></div>
2125
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: 100%;max-width: 100%;"
2126
|-
2127
|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh1.png|210px|]]
2128
|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh2.png|210px|]]
2129
|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh3.png|210px|]]
2130
|- style="text-align: center; font-size: 75%;"
2131
| (a) 
2132
| (b) 
2133
| (c) 
2134
|-
2135
| colspan="3"|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh4.png|210px|]]
2136
|- style="text-align: center; font-size: 75%;"
2137
| (d) 
2138
|- style="text-align: center; font-size: 75%;"
2139
| colspan="3" | '''Figure 25:''' Meshes for layered egg-like figure.
2140
|}
2141
The numerical results for the maximum temperature value (<math display="inline">u(0,0)=10.2</math>) are exemplified in Table [[#7.3 Third example: Heterogeneity and anisotropy|7.3]] where  a comparison with the Finite Element Method with linear interpolation functions (FEML) is also shown.
2142
2143
2144
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;"
2145
|- style="border-top: 2px solid;"
2146
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Mesh
2147
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" |  nodes
2148
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | elements
2149
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Temp. Value
2150
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Flux Magnitude
2151
|-
2152
| style="border-left: 2px solid;border-right: 2px solid;" | DEC  
2153
| style="border-left: 2px solid;border-right: 2px solid;" | FEML
2154
| style="border-left: 2px solid;border-right: 2px solid;" | DEC  
2155
| style="border-left: 2px solid;border-right: 2px solid;" | FEML  
2156
|- style="border-top: 2px solid;"
2157
| style="border-left: 2px solid;border-right: 2px solid;" |    Figure [[#img-25|25]](a) 
2158
| style="border-left: 2px solid;border-right: 2px solid;" | 342 
2159
| style="border-left: 2px solid;border-right: 2px solid;" | 616 
2160
| style="border-left: 2px solid;border-right: 2px solid;" | 2.79221 
2161
| style="border-left: 2px solid;border-right: 2px solid;" | 2.79854 
2162
| style="border-left: 2px solid;border-right: 2px solid;" | 18.41066 
2163
| style="border-left: 2px solid;border-right: 2px solid;" | 18.40573 
2164
|-
2165
| style="border-left: 2px solid;border-right: 2px solid;" | Figure [[#img-25|25]](b) 
2166
| style="border-left: 2px solid;border-right: 2px solid;" | 1,259 
2167
| style="border-left: 2px solid;border-right: 2px solid;" | 2,384 
2168
| style="border-left: 2px solid;border-right: 2px solid;" | 2.83929 
2169
| style="border-left: 2px solid;border-right: 2px solid;" | 2.84727 
2170
| style="border-left: 2px solid;border-right: 2px solid;" | 18.93838 
2171
| style="border-left: 2px solid;border-right: 2px solid;" | 18.91532 
2172
|-
2173
| style="border-left: 2px solid;border-right: 2px solid;" | Figure [[#img-25|25]](c) 
2174
| style="border-left: 2px solid;border-right: 2px solid;" | 4,467 
2175
| style="border-left: 2px solid;border-right: 2px solid;" | 8,668 
2176
| style="border-left: 2px solid;border-right: 2px solid;" | 2.85608 
2177
| style="border-left: 2px solid;border-right: 2px solid;" | 2.85717 
2178
| style="border-left: 2px solid;border-right: 2px solid;" | 19.13297 
2179
| style="border-left: 2px solid;border-right: 2px solid;" | 19.13193 
2180
|-
2181
| style="border-left: 2px solid;border-right: 2px solid;" | Figure [[#img-25|25]](d)  
2182
| style="border-left: 2px solid;border-right: 2px solid;" | 14,250  
2183
| style="border-left: 2px solid;border-right: 2px solid;" | 28,506 
2184
| style="border-left: 2px solid;border-right: 2px solid;" | 2.85994 
2185
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86056 
2186
| style="border-left: 2px solid;border-right: 2px solid;" | 19.20982 
2187
| style="border-left: 2px solid;border-right: 2px solid;" | 19.20909 
2188
|-
2189
| style="border-left: 2px solid;border-right: 2px solid;" | 
2190
| style="border-left: 2px solid;border-right: 2px solid;" | 20,493 
2191
| style="border-left: 2px solid;border-right: 2px solid;" | 40,316 
2192
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86120 
2193
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86177 
2194
| style="border-left: 2px solid;border-right: 2px solid;" | 19.23120 
2195
| style="border-left: 2px solid;border-right: 2px solid;" | 19.23457 
2196
|-
2197
| style="border-left: 2px solid;border-right: 2px solid;" | 
2198
| style="border-left: 2px solid;border-right: 2px solid;" | 60,380 
2199
| style="border-left: 2px solid;border-right: 2px solid;" | 119,418 
2200
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86219 
2201
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86231 
2202
| style="border-left: 2px solid;border-right: 2px solid;" | 19.26655 
2203
| style="border-left: 2px solid;border-right: 2px solid;" | 19.26628 
2204
|-
2205
| style="border-left: 2px solid;border-right: 2px solid;" | 
2206
| style="border-left: 2px solid;border-right: 2px solid;" | 142,702 
2207
| style="border-left: 2px solid;border-right: 2px solid;" | 283,162 
2208
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86249 
2209
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86256 
2210
| style="border-left: 2px solid;border-right: 2px solid;" | 19.28045 
2211
| style="border-left: 2px solid;border-right: 2px solid;" | 19.28028 
2212
|-
2213
| style="border-left: 2px solid;border-right: 2px solid;" | 
2214
| style="border-left: 2px solid;border-right: 2px solid;" | 291,363 
2215
| style="border-left: 2px solid;border-right: 2px solid;" | 579,360 
2216
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86263 
2217
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86267 
2218
| style="border-left: 2px solid;border-right: 2px solid;" | 19.28727 
2219
| style="border-left: 2px solid;border-right: 2px solid;" | 19.28755 
2220
|-
2221
| style="border-left: 2px solid;border-right: 2px solid;" | 
2222
| style="border-left: 2px solid;border-right: 2px solid;" | 495,607 
2223
| style="border-left: 2px solid;border-right: 2px solid;" | 986,724 
2224
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86275 
2225
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86269 
2226
| style="border-left: 2px solid;border-right: 2px solid;" | 19.29057 
2227
| style="border-left: 2px solid;border-right: 2px solid;" | 19.29081 
2228
|-
2229
| style="border-left: 2px solid;border-right: 2px solid;" | 
2230
| style="border-left: 2px solid;border-right: 2px solid;" | 1,064,447 
2231
| style="border-left: 2px solid;border-right: 2px solid;" | 2,122,160 
2232
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86272 
2233
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86273 
2234
| style="border-left: 2px solid;border-right: 2px solid;" | 19.29385 
2235
| style="border-left: 2px solid;border-right: 2px solid;" | 19.29389 
2236
|-
2237
| style="border-left: 2px solid;border-right: 2px solid;" | 
2238
| style="border-left: 2px solid;border-right: 2px solid;" | 2,106,077 
2239
| style="border-left: 2px solid;border-right: 2px solid;" | 4,202,536 
2240
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86274 
2241
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86274 
2242
| style="border-left: 2px solid;border-right: 2px solid;" | 19.29618 
2243
| style="border-left: 2px solid;border-right: 2px solid;" | 19.29615 
2244
|- style="border-bottom: 2px solid;"
2245
| style="border-left: 2px solid;border-right: 2px solid;" | 
2246
| style="border-left: 2px solid;border-right: 2px solid;" | 4,031,557 
2247
| style="border-left: 2px solid;border-right: 2px solid;" | 8,049,644 
2248
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86275 
2249
| style="border-left: 2px solid;border-right: 2px solid;" | 2.86275 
2250
| style="border-left: 2px solid;border-right: 2px solid;" | 19.29763 
2251
| style="border-left: 2px solid;border-right: 2px solid;" | 19.29765 
2252
2253
|}
2254
<div style="text-align: center; font-size: 75%; ">Maximum temperature and Flux magnitude values in the numerical simulations of the third example.</div>  
2255
2256
The temperature distribution and Flux magnitude fields for the finest mesh are shown in Figure [[#img-26|26]]. <div id='img-26a'></div>
2257
<div id='img-26b'></div>
2258
<div id='img-26'></div>
2259
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: 100%;max-width: 100%;"
2260
|-
2261
|[[Image:Esqueda_et_al_2020a-Fig_23_HuevoContourTemp.png|264px|Contour Fill of Temperatures]]
2262
|[[Image:Esqueda_et_al_2020a-Fig_23_HuevoContourFlux.png|264px|Contour Fill of Flux vectors on Elems]]
2263
|- style="text-align: center; font-size: 75%;"
2264
| (a) Contour Fill of Temperatures
2265
| (b) Contour Fill of Flux vectors on Elems
2266
|- style="text-align: center; font-size: 75%;"
2267
| colspan="2" | '''Figure 26:''' Temperature distribution and Flux magnitude fields for the finest mesh of the third example.
2268
|}
2269
Figure [[#img-27|27]] shows the graphs of the temperature and flux magnitude values along a diameter of the circle for different meshes of Figure  [[#img-25|25]] <div id='img-27a'></div>
2270
<div id='img-27b'></div>
2271
<div id='img-27c'></div>
2272
<div id='img-27d'></div>
2273
<div id='img-27e'></div>
2274
<div id='img-27f'></div>
2275
<div id='img-27'></div>
2276
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: 100%;max-width: 100%;"
2277
|-
2278
|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoTempCrossSection01.png|252px|]]
2279
|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoFluxCrossSection01.png|252px|]]
2280
|- style="text-align: center; font-size: 75%;"
2281
| (a) 
2282
| (b) 
2283
|-
2284
|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoTempCrossSection02.png|252px|]]
2285
|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoFluxCrossSection02.png|252px|]]
2286
|- style="text-align: center; font-size: 75%;"
2287
| (c) 
2288
| (d) 
2289
|-
2290
|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoTempCrossSection03.png|252px|]]
2291
|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoFluxCrossSection03.png|252px|]]
2292
|- style="text-align: center; font-size: 75%;"
2293
| (e) 
2294
| (f) 
2295
|- style="text-align: center; font-size: 75%;"
2296
| colspan="2" | '''Figure 27:''' Temperature and Flux magnitude graphs of the third example along a cross-section of the domain for different meshes:    Mesh in Figure 
2297
|}
2298
2299
In Table [[#table-3|3]], we show some global error metrics for different meshes.   Figure [[#img-28|28]] shows the error evolution in <math display="inline">L^2</math> norm for this example.
2300
2301
2302
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;"
2303
|+ style="font-size: 75%;" |<span id='table-3'></span>Table. 3 tableDEC errors in the third example.
2304
|- style="border-top: 2px solid;"
2305
| style="border-left: 2px solid;border-right: 2px solid;" |    '''Mesh''' 
2306
| style="border-left: 2px solid;border-right: 2px solid;" | '''Nodes''' 
2307
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>    \sum (u-u_i)^2 \over nodes    </math>''' 
2308
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>L^2</math> norm''' 
2309
|- style="border-top: 2px solid;"
2310
| style="border-left: 2px solid;border-right: 2px solid;" |     1 
2311
| style="border-left: 2px solid;border-right: 2px solid;" | 342 
2312
| style="border-left: 2px solid;border-right: 2px solid;" | 9.3638e-04 
2313
| style="border-left: 2px solid;border-right: 2px solid;" | 2.7786e-02 
2314
|- style="border-top: 2px solid;"
2315
| style="border-left: 2px solid;border-right: 2px solid;" |     2 
2316
| style="border-left: 2px solid;border-right: 2px solid;" | 1,259 
2317
| style="border-left: 2px solid;border-right: 2px solid;" | 1.5173e-04 
2318
| style="border-left: 2px solid;border-right: 2px solid;" | 3.2731e-03 
2319
|- style="border-top: 2px solid;"
2320
| style="border-left: 2px solid;border-right: 2px solid;" |     3 
2321
| style="border-left: 2px solid;border-right: 2px solid;" | 4,467 
2322
| style="border-left: 2px solid;border-right: 2px solid;" | 2.2110e-05 
2323
| style="border-left: 2px solid;border-right: 2px solid;" | 2.2937e-04 
2324
|- style="border-top: 2px solid;"
2325
| style="border-left: 2px solid;border-right: 2px solid;" |     4 
2326
| style="border-left: 2px solid;border-right: 2px solid;" | 14,250 
2327
| style="border-left: 2px solid;border-right: 2px solid;" | 3.7233e-06 
2328
| style="border-left: 2px solid;border-right: 2px solid;" | 1.9151e-05 
2329
|- style="border-top: 2px solid;"
2330
| style="border-left: 2px solid;border-right: 2px solid;" |     5 
2331
| style="border-left: 2px solid;border-right: 2px solid;" | 20,492 
2332
| style="border-left: 2px solid;border-right: 2px solid;" | 2.2311e-06 
2333
| style="border-left: 2px solid;border-right: 2px solid;" | 9.5930e-06 
2334
|- style="border-top: 2px solid;"
2335
| style="border-left: 2px solid;border-right: 2px solid;" |     6 
2336
| style="border-left: 2px solid;border-right: 2px solid;" | 60,380 
2337
| style="border-left: 2px solid;border-right: 2px solid;" | 4.3769e-07 
2338
| style="border-left: 2px solid;border-right: 2px solid;" | 8.7330e-07 
2339
|- style="border-top: 2px solid;"
2340
| style="border-left: 2px solid;border-right: 2px solid;" |     7 
2341
| style="border-left: 2px solid;border-right: 2px solid;" | 142,702 
2342
| style="border-left: 2px solid;border-right: 2px solid;" | 1.1664e-07 
2343
| style="border-left: 2px solid;border-right: 2px solid;" | 1.3926e-07 
2344
|- style="border-top: 2px solid;"
2345
| style="border-left: 2px solid;border-right: 2px solid;" |     8 
2346
| style="border-left: 2px solid;border-right: 2px solid;" | 291,369 
2347
| style="border-left: 2px solid;border-right: 2px solid;" | 3.9764e-08 
2348
| style="border-left: 2px solid;border-right: 2px solid;" | 3.3314e-08 
2349
|- style="border-top: 2px solid;"
2350
| style="border-left: 2px solid;border-right: 2px solid;" |     9 
2351
| style="border-left: 2px solid;border-right: 2px solid;" | 497,378 
2352
| style="border-left: 2px solid;border-right: 2px solid;" | 1.6680e-08 
2353
| style="border-left: 2px solid;border-right: 2px solid;" | 1.0275e-08 
2354
|- style="border-top: 2px solid;"
2355
| style="border-left: 2px solid;border-right: 2px solid;" |     10 
2356
| style="border-left: 2px solid;border-right: 2px solid;" | 1,067,171 
2357
| style="border-left: 2px solid;border-right: 2px solid;" | 3.9594e-09 
2358
| style="border-left: 2px solid;border-right: 2px solid;" | 1.2190e-09 
2359
|- style="border-top: 2px solid;border-bottom: 2px solid;"
2360
| style="border-left: 2px solid;border-right: 2px solid;" |     11 
2361
| style="border-left: 2px solid;border-right: 2px solid;" | 2,106,248 
2362
| style="border-left: 2px solid;border-right: 2px solid;" | 9.6949e-10 
2363
| style="border-left: 2px solid;border-right: 2px solid;" | 1.4415e-10 
2364
2365
|}
2366
2367
<div id='img-28'></div>
2368
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: 100%;max-width: 100%;"
2369
|-
2370
|[[Image:Esqueda_et_al_2020a-DEC_Error_Graph_Eliptic_Egg.png|330px|DEC ]]
2371
|- style="text-align: center; font-size: 75%;"
2372
| colspan="1" | '''Figure 28:''' DEC 
2373
|}
2374
2375
'''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.
2376
2377
==8. Conclusions==
2378
2379
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:
2380
2381
<ol>
2382
2383
<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>
2384
2385
<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>
2386
2387
<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>
2388
2389
<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>
2390
2391
<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>
2392
2393
</ol>
2394
2395
On the other hand we would like to point the following features:
2396
2397
*   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.
2398
2399
* 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.
2400
2401
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.
2402
2403
==Acknowledgements==
2404
2405
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.
2406
2407
<span style="text-align: center; font-size: 75%;">
2408
2409
==References==
2410
2411
<div id="cite-1"></div>
2412
'''[[#citeF-1|[1]]]'''  Bossavit, A.: “Mixed finite elements and the complex of Whitney forms.” In J. Whiteman, editor, The mathematics of finite elements and applications VI, pages 137–144. Academic Press, 1988.  <div id="cite-2"></div>
2413
'''[[#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, ISBN 978-84-96736-95-5.  <div id="cite-3"></div>
2414
'''[[#citeF-3|[3]]]'''  Cartan, E.: ``Sur certaines expressions différentielles et le probleme de Pfaff". Annales Scientifiques de l'École Normale Supérieure. Série 3. Paris: Gauthier-Villars. 16: 239?332 (1899)   <div id="cite-4"></div>
2415
'''[[#citeF-4|[4]]]'''  Crane, Keenan, et al. “Digital geometry processing with discrete exterior calculus.” ACM SIGGRAPH 2013 Courses. ACM, 2013.  <div id="cite-5"></div>
2416
'''[[#citeF-5|[5]]]'''  Dassios, Ioannis, et al. “A mathematical model for plasticity and damage: A discrete calculus formulation.” Journal of Computational and Applied Mathematics 312 (2017): 27-38.  <div id="cite-6"></div>
2417
'''[[#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. (Online first).   https://www.scipedia.com/public/Herrera_et_al_2018b  <div id="cite-7"></div>
2418
'''[[#citeF-7|[7]]]'''  Griebel, Michael, Christian Rieger, and Alexander Schier. “Upwind Schemes for Scalar Advection-Dominated Problems in the Discrete Exterior Calculus.” Transport Processes at Fluidic Interfaces. Birkhäuser, Cham, 2017. 145-175.  <div id="cite-8"></div>
2419
'''[[#citeF-8|[8]]]'''  Hirani, Anil Nirmal. “Discrete exterior calculus”. Diss. California Institute of Technology, 2003.  <div id="cite-9"></div>
2420
'''[[#citeF-9|[9]]]'''  Hirani, Anil N., Kalyana B. Nakshatrala, and Jehanzeb H. Chaudhry. “Numerical method for Darcy flow derived using Discrete Exterior Calculus.” International Journal for Computational Methods in Engineering Science and Mechanics 16.3 (2015): 151-169.  <div id="cite-10"></div>
2421
'''[[#citeF-10|[10]]]'''  Mohamed, Mamdouh S., Anil N. Hirani, and Ravi Samtaney. “Discrete exterior calculus discretization of incompressible Navier-Stokes equations over surface simplicial meshes.” Journal of Computational Physics 312 (2016): 175-191.  <div id="cite-11"></div>
2422
'''[[#citeF-11|[11]]]'''  Oñate, E.:  “4 - 2D Solids. Linear Triangular and Rectangular Elements,” in Structural Analysis with the Finite Element Method.  Linear Statics, Volume 1: Basis and Solids, CIMNE-Springer, Barcelona, 2009. Pages 117-157, ISBN 978-1-4020-8733-2   <div id="cite-12"></div>
2423
'''[[#citeF-12|[12]]]'''  Whitney, H.: “Geometric Integration Theory.” Princeton University Press, 1957.  <div id="cite-13"></div>
2424
'''[[#citeF-13|[13]]]'''   O. C. Zienkiewicz, R. L. Taylor and J. Z. Zhu: “3 - Generalization of the finite element concepts. Galerkin-weighted residual and variational approaches,” In The Finite Element Method Set (Sixth Edition), Butterworth-Heinemann, Oxford, 2005, Pages 54-102, ISBN 9780750664318,    
2425
2426
</span>
2427

Return to Esqueda et al 2020a.

Back to Top