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

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


You can view and copy the source of this page.

x
 
1
<!-- metadata commented in wiki content
2
==Anisotropy in 2D Discrete Exterior Calculus==
3
4
''''''
5
-->
6
==Abstract==
7
8
We present a local formulation for 2D Discrete Exterior Calculus (DEC) similar to that of the Finite Element Method (FEM), which allows  a natural treatment of material heterogeneity (assigning material properties element by element). It also allows us to deduce, in a principled  manner, anisotropic fluxes and the DEC discretization of the pullback of 1-forms by the anisotropy tensor, i.e. we deduce the discrete action of the anisotropy tensor on primal 1-forms. Due to the local formulation,  the computational cost of DEC is similar to that of the Finite Element Method with Linear interpolating functions (FEML). The numerical  DEC solutions to the anisotropic Poisson equation show numerical convergence, are very close to those of FEML on fine meshes  and are slightly better than those of FEML on coarse meshes.
9
<!--
10
<span id="fn-1"></span>
11
<span style="text-align: center; font-size: 75%;">([[#fnc-1|<sup>1</sup>]]) Centro de Investigación en Matemáticas, Calle Jalisco s/n,  Guanajuato, GTO 36023, México. Email: esqueda,rherrera,botello@cimat.mx </span>
12
13
<span id="fn-2"></span>
14
<span style="text-align: center; font-size: 75%;">([[#fnc-2|<sup>2</sup>]]) Departamento de  Matemáticas, Universidad de Guanajuato,  Guanajuato, GTO 36023, México. Email: valerocar@gmail.com</span>
15
-->
16
17
==1. Introduction==
18
19
The theory of Discrete Exterior Calculus (DEC) is a relatively recent discretization  <span id='citeF-8'></span>[[#cite-8|[8]]] of the classical theory of  Exterior Differential Calculus developed by  E. Cartan <span id='citeF-3'></span>[[#cite-3|[3]]], which is a fundamental tool in Differential Geometry and Topology.  The aim of DEC is to solve partial differential equations preserving their geometrical and physical features as much as possible. There are only a few papers about implementions of DEC to solve certain PDEs, such as  the Darcy flow and Poisson's equation <span id='citeF-9'></span>[[#cite-9|[9]]],  the Navier-Stokes equations <span id='citeF-10'></span>[[#cite-10|[10]]], the simulation of  elasticity, plasticity and failure of isotropic materials <span id='citeF-5'></span>[[#cite-5|[5]]], some comparisons with  the finite differences and finite volume methods on regular flat meshes <span id='citeF-7'></span>[[#cite-7|[7]]], as well as applications in digital geometry processing <span id='citeF-4'></span>[[#cite-4|[4]]].
20
21
In this paper, we describe a local formulation of DEC which is reminiscent of that of the Finite Element Method  (FEM). Indeed,  once the local systems of equations have been established, they can be assembled into a global linear system. This local formulation is also efficient and helpful in understanding various features of DEC that can otherwise remain  unclear if one is dealing dealing with an entire mesh. Besides, we believe the local description to DEC will be accesible to a wide readership. We will, therefore, take a local approach when recalling all the objects required by 2D DEC <span id='citeF-6'></span>[[#cite-6|[6]]]. Our main results are the following:
22
23
* We present a local formulation of DEC analogous to that of FEM, which allows a natural treatment of heterogeneous material properties assigned to subdomains (element by element) and  eliminates the need of dealing with it through ad hoc modifications of the global discrete Hodge star operator.
24
25
* Guided by the local formulation, we deduce a natural way to approximate the flux/gradient-vector of a discretized function, as well as the anisotropic flux vector. We carry out a comparison of the formulas defining the flux in both DEC and Finite Element Method with linear interpolation functions (FEML).
26
27
* In order to understand how to discretize the anisotropic Poisson equation, we develop the discretization of the pull-back operator of 1-forms under an arbitrary linear trasformation or tensor. The pull-back operator is one of the basic ingredients in Exterior Differential Calculus in the smooth setting and is essential in all of its applications  in Topology [bott-Tu].  We discretize the ''pullback operator on primal 1-forms induced by an arbitrary tensor'' using Whitney interpolation (the Whitney map). The Whitney interpolation forms were introduced by Hassler Whitney in 1957 <span id='citeF-12'></span>[[#cite-12|[12]]] and  Bossavit <span id='citeF-1'></span>[[#cite-1|[1]]] explained their relevance in “mixed methods” of finite elements.  To our knowledge, this is the first time that the discrete version of this operator is presented in the DEC literature.   This has allowed us to discretize, in a principled manner, the anisotropic heat equation.
28
29
*  We carry out an analytic comparison of the DEC and FEML local formulations of the anisotropic Poisson equation.
30
31
* We present three numerical examples of the approximate solutions to the stationary anisotropic Poisson equation on different domains using DEC and FEML. The numerical DEC-solutions exhibit numerical convergence (see the error measurement tables) and a competitive performance, as well as a computational cost similar to that of FEML. In fact, the numerical solutions with both methods on fine meshes are identical, and DEC shows a slightly better performance than FEML on coarse meshes.
32
33
34
The paper is organized as follows. In Section [[#2 Preliminaries on DEC from a local viewpoint|2]], we describe the local versions of the discrete derivative operator, the dual mesh, the discrete Hodge star operator and the meaning of a continuous 1-form on the plane.  In Section [[#3 Pullback operator on primal 1-forms|3]], we deduce the discretization of the pullback operator on primal 1-forms. In Section [[#4 Flux and anisotropy|4]], we deduce the natural way of computing flux vectors in DEC  (which turns out to be equivalent to the FEML result), as well as the anisotropic flux vectors.  In Section [[#5 Anisotropic Poisson equation in 2D|5]],  we present the local DEC formulation of the 2D anisotropic Poisson equation and compare it with the local system of FEML, proving that the diffusion terms  are identical in both schemes, while the source terms are differentl due to a different area-weight assignment for the nodes.  In Section [[#6 Some remarks about DEC quantities|6]], we re-examine the geometry of some of the local DEC quantities. In Section [[#7 Numerical Examples|7]], we present and compare numerical examples of DEC and FEML approximate solutions to the 2D anisotropic  Poisson equation on different domains with meshes of various resolutions.  In Section [[#8 Conclusions|8]], we summarize the contributions of this paper.
35
<!--
36
''Acknowledgements''. The second named author was partially supported by a CONACyT grant, and would like to thank  the International Centre for Numerical Methods in Engineering (CIMNE) and the University of Swansea for their hospitality. We gratefully acknowledge the support of NVIDIA Corporation with the donation of the Titan X Pascal GPU used for this research.
37
-->
38
39
==2. Preliminaries on DEC from a local viewpoint==
40
41
In this section, we will recall the basic operators of Dicrete Exterior Calculus  restricting ourselves to a mesh made up of one simplex/triangle. The local results we derive in the  paper can be assembled, just as in the Finite elemnt Method,  due to the additivity of both differentiation and integration.
42
43
Let us consider a primal mesh made up of a single (positively oriented) triangle with vertices <math display="inline">v_1,v_2,v_3</math> (Figure 1).
44
45
<div id='img-1'></div>
46
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
47
|-
48
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Triangle01.png|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  <span id='citeF-8'></span><span id='citeF-6'></span>[[#cite-8|[6,8]]]. More precisely, suppose we have a function discretized by its values at the vertices
152
153
{| class="formulaSCP" style="width: 100%; text-align: left;" 
154
|-
155
| 
156
{| style="text-align: left; margin:auto;width: 100%;" 
157
|-
158
| style="text-align: center;" | <math>f\sim \left(\begin{array}{l} f_1\\ f_2\\ f_3               \end{array} \right).</math>
159
|}
160
|}
161
162
Its discrete derivative, according to DEC, is
163
164
{| class="formulaSCP" style="width: 100%; text-align: left;" 
165
|-
166
| 
167
{| style="text-align: left; margin:auto;width: 100%;" 
168
|-
169
| style="text-align: center;" | <math>\left(\begin{array}{rrr}-1 & -1 & 0 \\  1 & 0 & -1 \\  0 & 1 & 1 \end{array} \right)^T \left(\begin{array}{l}f_1\\ f_2\\ f_3               \end{array} \right) =\left(\begin{array}{rrr}-1 & 1 & 0 \\  -1 & 0 & 1 \\  0 & -1 & 1 \end{array} \right) \left(\begin{array}{l}f_1\\ f_2\\ f_3               \end{array} \right)</math>
170
|-
171
| style="text-align: center;" | <math> =\left(\begin{array}{l}f_2-f_1\\ f_3-f_1\\ f_3-f_2               \end{array} \right). </math>
172
|}
173
|}
174
175
Indeed, such differences are rough approximations of the directional derivatives of <math display="inline">f</math> along the oriented edges.  For instance, <math display="inline">f_2-f_1</math> is a rough approximation of the directional derivative of <math display="inline">f</math> at <math display="inline">v_1</math> in the direction of the vector <math display="inline">v_2-v_1</math>, i.e.
176
177
{| class="formulaSCP" style="width: 100%; text-align: left;" 
178
|-
179
| 
180
{| style="text-align: left; margin:auto;width: 100%;" 
181
|-
182
| style="text-align: center;" | <math>f_2-f_1 \approx df_{v_1}(v_2-v_1) .</math>
183
|}
184
|}
185
186
It is precisely in this sense that, according to DEC,
187
188
* the value <math display="inline">f_2-f_1</math> is assigned to the edge <math display="inline">[v_1,v_2]</math>,
189
* the value <math display="inline">f_3-f_1</math> is assigned to the edge <math display="inline">[v_1,v_3]</math>,
190
* and the value <math display="inline">f_3-f_2</math> is assigned to the edge <math display="inline">[v_2,v_3]</math>.
191
192
Let
193
194
{| class="formulaSCP" style="width: 100%; text-align: left;" 
195
|-
196
| 
197
{| style="text-align: left; margin:auto;width: 100%;" 
198
|-
199
| style="text-align: center;" | <math>D_0:=\left(\begin{array}{rrr} -1 & 1 & 0 \\  -1 & 0 & 1 \\  0 & -1 & 1 \end{array} \right). </math>
200
|}
201
|}
202
203
===2.3 Dual mesh===
204
205
The dual mesh of the primal mesh consisting of a single triangle is constructured as follows:
206
207
* To the 2-dimensional triangular face <math display="inline">[v_1,v_2,v_3]</math> will correspond the 0-dimensional point given by the circumcenter <math display="inline">c</math> of the triangle (Figure 2).
208
209
<div id='img-2'></div>
210
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
211
|-
212
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Triangle02.png|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> (Figure 3).   Similarly for the other edges.
218
219
<div id='img-3'></div>
220
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
221
|-
222
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Triangle03.png|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> (Figure 4).
228
229
<div id='img-4'></div>
230
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: bottom;"
231
|-
232
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Triangle04.png|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 Figure [[#img-5|5]], 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)    =\\
1249
&\qquad = -\displaystyle{1 \over 2A }\left(\displaystyle{l_1\over L_1}J(v_3-v_2)\cdot K(v_2-v_1) +  \displaystyle{l_1\over L_1}J(v_3-v_2)\cdot K(v_3-v_1) \right)    \\     
1250
&\qquad =     \displaystyle{J(v_3-v_2)\cdot K(v_1-v_3)\over 2A}{\tan (\alpha _3)\over 2}    -\displaystyle{J(v_3-v_2)\cdot K( v_2-v_1)\over 2A}\displaystyle{\tan (\alpha _1)\over 2}\\    
1251
&\qquad =     \displaystyle{1\over 4A}J(v_3-v_2)\cdot K((v_1-v_3)\tan (\alpha _3)- (v_2-v_1)\tan (\alpha _1)). \end{array}</math>
1252
|}
1253
|}
1254
1255
All we have to do now is show that
1256
1257
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1258
|-
1259
| 
1260
{| style="text-align: left; margin:auto;width: 100%;" 
1261
|-
1262
| 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>
1263
|}
1264
|}
1265
1266
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,
1267
1268
<span id="eq-14"></span>
1269
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1270
|-
1271
| 
1272
{| style="text-align: left; margin:auto;width: 100%;" 
1273
|-
1274
| 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>
1275
|}
1276
| style="width: 5px;text-align: right;white-space: nowrap;" | (14)
1277
|}
1278
1279
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
1280
1281
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1282
|-
1283
| 
1284
{| style="text-align: left; margin:auto;width: 100%;" 
1285
|-
1286
| style="text-align: center;" | <math>c-v_1 = a (v_2-v_1) + b(v_3-v_1)</math>
1287
|}
1288
|}
1289
1290
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
1291
1292
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1293
|-
1294
| 
1295
{| style="text-align: left; margin:auto;width: 100%;" 
1296
|-
1297
| style="text-align: center;" | <math>R\cos (\alpha _1)    =aL_1+bL_3\cos (\alpha _1+\alpha _3),</math>
1298
|-
1299
| style="text-align: center;" | <math> R\cos (\alpha _3)    =aL_1\cos (\alpha _1+\alpha _3)+bL_3.  </math>
1300
|}
1301
|}
1302
1303
Solving for <math display="inline">a</math> and <math display="inline">b</math>
1304
1305
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1306
|-
1307
| 
1308
{| style="text-align: left; margin:auto;width: 100%;" 
1309
|-
1310
| style="text-align: center;" | <math>a    ={\sin (\alpha _3)\over 2\cos (\alpha _1)\sin (\alpha _1+\alpha _3)},</math>
1311
|-
1312
| style="text-align: center;" | <math> b    ={\sin (\alpha _1)\over 2\cos (\alpha _3)\sin (\alpha _1+\alpha _3)}. </math>
1313
|}
1314
|}
1315
1316
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
1317
1318
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1319
|-
1320
| 
1321
{| style="text-align: left; margin:auto;width: 100%;" 
1322
|-
1323
| 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>
1324
|-
1325
| 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>
1326
|-
1327
| 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>
1328
|-
1329
| 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>
1330
|-
1331
| style="text-align: center;" | <math>    =\tan (\alpha _1){-\sin (\alpha _2)\over \sin (\alpha _2)}=-\tan (\alpha _1),  </math>
1332
|}
1333
|}
1334
1335
and similarly for the coefficient of <math display="inline">(v_1-v_3)</math>. The calculations for the remaining entries are similar.
1336
1337
Thus, the local DEC and FEML diffusive terms of the 2D anisotropic Poisson equation coincide.
1338
1339
====5.3.2 The source term====
1340
1341
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
1342
1343
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1344
|-
1345
| 
1346
{| style="text-align: left; margin:auto;width: 100%;" 
1347
|-
1348
| 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>
1349
|}
1350
|}
1351
1352
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).
1353
1354
==6. Some remarks about DEC quantities==
1355
1356
===6.1 The discrete Hodge star quantities revisited===
1357
1358
The numbers appearing in the local DEC matrices can be expressed both in terms of determinants and in terms of trigonometric functions. More precisely,
1359
1360
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1361
|-
1362
| 
1363
{| style="text-align: left; margin:auto;width: 100%;" 
1364
|-
1365
| 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>
1366
|-
1367
| 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>
1368
|-
1369
| 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>
1370
|-
1371
| 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>
1372
|-
1373
| 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>
1374
|-
1375
| 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>
1376
|}
1377
|}
1378
1379
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]].
1380
1381
<div id='img-8'></div>
1382
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1383
|-
1384
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle01a-eps-converted-to.png|180px|]]
1385
|-
1386
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NegativeAngles01-eps-converted-to.png|180px|Negative (exterior) angles measured in an obtuse triangle.]]
1387
|- style="text-align: center; font-size: 75%;"
1388
| colspan="1" style="padding:10px;"| '''Figure 8'''. Negative (exterior) angles measured in an obtuse triangle.
1389
|}
1390
1391
and some quantities can even be zero. For instance, if
1392
1393
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1394
|-
1395
| 
1396
{| style="text-align: left; margin:auto;width: 100%;" 
1397
|-
1398
| style="text-align: center;" | <math>\alpha _2={\pi \over 2}-2\alpha _1,</math>
1399
|}
1400
|}
1401
1402
then
1403
1404
{| class="formulaSCP" style="width: 100%; text-align: left;" 
1405
|-
1406
| 
1407
{| style="text-align: left; margin:auto;width: 100%;" 
1408
|-
1409
| style="text-align: center;" | <math>A_1=0.</math>
1410
|}
1411
|}
1412
1413
===6.2 Area weights assigned to vertices===
1414
1415
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]].
1416
1417
<div id='img-9'></div>
1418
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1419
|-
1420
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle03a-eps-converted-to.png|200px|]]
1421
|-
1422
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle04a-eps-converted-to.png|200px|]]
1423
|-
1424
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle05a-eps-converted-to.png|200px|Area weight assigned to ]]
1425
|- style="text-align: center; font-size: 75%;"
1426
| colspan="1" style="padding-bottom:10px;"| '''Figure 9'''. Area weight assigned to 
1427
|}
1428
1429
1430
The area <math display="inline">A_3</math> is computed similarly, where the triangle <math display="inline">[p_3,v_3,c]</math> is assigned negative area (Figure [[#img-10|10]]).
1431
1432
<div id='img-10'></div>
1433
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1434
|-
1435
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle06a-eps-converted-to.png|200px|]]
1436
|-
1437
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle07a-eps-converted-to.png|200px|]]
1438
|-
1439
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle08a-eps-converted-to.png|200px|]]
1440
|- style="text-align: center; font-size: 75%;"
1441
| colspan="1" style="padding-bottom:10px;"| '''Figure 10'''. Area weight assigned to 
1442
|}
1443
1444
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]]).
1445
1446
<div id='img-11'></div>
1447
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1448
|-
1449
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle09a-eps-converted-to.png|200px|]]
1450
|-
1451
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle10a-eps-converted-to.png|200px|]]
1452
|-
1453
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-NonWellCenteredTriangle11a-eps-converted-to.png|200px|Area weight assigned to ]]
1454
|- style="text-align: center; font-size: 75%;"
1455
| colspan="1" style="padding-bottom:10px;"| '''Figure 11'''. Area weight assigned to 
1456
|}
1457
1458
==7. Numerical examples==
1459
1460
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]]].
1461
1462
===7.1 First example: Heterogeneity===
1463
1464
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]]. 
1465
1466
<div id='img-12'></div>
1467
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1468
|-
1469
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_12_SquareWithConditions.png|220px|Square and inner circle with different conditions.]]
1470
|- style="text-align: center; font-size: 75%;"
1471
| colspan="1" style="padding:10px;"| '''Figure 12'''. Square and inner circle with different conditions
1472
|}
1473
1474
* 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>.
1475
* 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>.
1476
1477
1478
The meshes used in this example are shown in Figure [[#img-13|13]] and vary from coarse to very fine. 
1479
1480
<div id='img-13a'></div>
1481
<div id='img-13b'></div>
1482
<div id='img-13c'></div>
1483
<div id='img-13d'></div>
1484
<div id='img-13e'></div>
1485
<div id='img-13f'></div>
1486
<div id='img-13'></div>
1487
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1488
|-
1489
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m1.png|150px|]]
1490
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m2.png|144px|]]
1491
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m3.png|144px|]]
1492
|- style="text-align: center; font-size: 75%;"
1493
|  (a) 
1494
| (b) 
1495
| (c) 
1496
|-
1497
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m4.png|150px|]]
1498
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m5.png|150px|]]
1499
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_13_Square_m6.png|150px|]]
1500
|- style="text-align: center; font-size: 75%;"
1501
| (d) 
1502
| (e) 
1503
| (f) 
1504
|- style="text-align: center; font-size: 75%;"
1505
| colspan="3" style="padding:10px;"| '''Figure 13'''. Six of the meshes used in the first example
1506
|}
1507
1508
The numerical results for the maximum temperature value are exemplified in Table [[#table-1|1]].
1509
1510
<div id='table-1'></div>
1511
<div class="center" style="font-size: 75%;">'''Table 1'''. Numerical simulation results of the first example</div>
1512
1513
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1514
|- style="border-top: 2px solid;border-bottom: 2px solid;"
1515
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Mesh
1516
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" |  nodes
1517
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | elements
1518
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Temp. Value
1519
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Flux Magnitude
1520
|-style="border-top: 2px solid;border-bottom: 2px solid;"
1521
| style="border-left: 2px solid;border-right: 1px solid;" | DEC  
1522
| style="border-left: 1px solid;border-right: 1px solid;" | FEML
1523
| style="border-left: 1px solid;border-right: 1px solid;" | DEC  
1524
| style="border-left: 1px solid;border-right: 2px solid;" | FEML  
1525
|- style="border-top: 2px solid;"
1526
| style="border-left: 2px solid;border-right: 1px solid;" |    Figure [[#img-13|13]](a) 
1527
| style="border-left: 1px solid;border-right: 1px solid;" | 49 
1528
| style="border-left: 1px solid;border-right: 1px solid;" | 80 
1529
| style="border-left: 1px solid;border-right: 1px solid;" | 5.51836 
1530
| style="border-left: 1px solid;border-right: 1px solid;" | 5.53345 
1531
| style="border-left: 1px solid;border-right: 1px solid;" | 13.837 
1532
| style="border-left: 1px solid;border-right: 2px solid;" | 13.453 
1533
|-
1534
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-13|13]](b) 
1535
| style="border-left: 1px solid;border-right: 1px solid;" | 98 
1536
| style="border-left: 1px solid;border-right: 1px solid;" | 162 
1537
| style="border-left: 1px solid;border-right: 1px solid;" | 5.65826 
1538
| style="border-left: 1px solid;border-right: 1px solid;" | 5.66648 
1539
| style="border-left: 1px solid;border-right: 1px solid;" | 14.137 
1540
| style="border-left: 1px solid;border-right: 2px solid;" | 14.024 
1541
|-
1542
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-13|13]](c) 
1543
| style="border-left: 1px solid;border-right: 1px solid;" | 258 
1544
| style="border-left: 1px solid;border-right: 1px solid;" | 466 
1545
| style="border-left: 1px solid;border-right: 1px solid;" | 5.70585 
1546
| style="border-left: 1px solid;border-right: 1px solid;" | 5.71709 
1547
| style="border-left: 1px solid;border-right: 1px solid;" | 14.858 
1548
| style="border-left: 1px solid;border-right: 2px solid;" | 14.770 
1549
|-
1550
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-13|13]](d) 
1551
| style="border-left: 1px solid;border-right: 1px solid;" | 1,010 
1552
| style="border-left: 1px solid;border-right: 1px solid;" | 1,914 
1553
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72103 
1554
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72280 
1555
| style="border-left: 1px solid;border-right: 1px solid;" | 15.008 
1556
| style="border-left: 1px solid;border-right: 2px solid;" | 15.006 
1557
|-
1558
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-13|13]](e) 
1559
| style="border-left: 1px solid;border-right: 1px solid;" | 3,813 
1560
| style="border-left: 1px solid;border-right: 1px solid;" | 7,424 
1561
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72725 
1562
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72725 
1563
| style="border-left: 1px solid;border-right: 1px solid;" | 15.229 
1564
| style="border-left: 1px solid;border-right: 2px solid;" | 15.228 
1565
|-
1566
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-13|13]](f) 
1567
| style="border-left: 1px solid;border-right: 1px solid;" | 13,911 
1568
| style="border-left: 1px solid;border-right: 1px solid;" | 27,420 
1569
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72821 
1570
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72826 
1571
| style="border-left: 1px solid;border-right: 1px solid;" | 15.342 
1572
| style="border-left: 1px solid;border-right: 2px solid;" | 15.337 
1573
|-
1574
| style="border-left: 2px solid;border-right: 1px solid;" | 
1575
| style="border-left: 1px solid;border-right: 1px solid;" | 50,950 
1576
| style="border-left: 1px solid;border-right: 1px solid;" | 101,098 
1577
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72841 
1578
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72842 
1579
| style="border-left: 1px solid;border-right: 1px solid;" | 15.395 
1580
| style="border-left: 1px solid;border-right: 2px solid;" | 15.396 
1581
|-
1582
| style="border-left: 2px solid;border-right: 1px solid;" | 
1583
| style="border-left: 1px solid;border-right: 1px solid;" | 135,519 
1584
| style="border-left: 1px solid;border-right: 1px solid;" | 269,700 
1585
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72845 
1586
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72845 
1587
| style="border-left: 1px solid;border-right: 1px solid;" | 15.420 
1588
| style="border-left: 1px solid;border-right: 2px solid;" | 15.417 
1589
|-
1590
| style="border-left: 2px solid;border-right: 1px solid;" | 
1591
| style="border-left: 1px solid;border-right: 1px solid;" | 298,299 
1592
| style="border-left: 1px solid;border-right: 1px solid;" | 594,596 
1593
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1594
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1595
| style="border-left: 1px solid;border-right: 1px solid;" | 15.430 
1596
| style="border-left: 1px solid;border-right: 2px solid;" | 15.429 
1597
|-
1598
| style="border-left: 2px solid;border-right: 1px solid;" | 
1599
| style="border-left: 1px solid;border-right: 1px solid;" | 600,594 
1600
| style="border-left: 1px solid;border-right: 1px solid;" | 1,198,330 
1601
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1602
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72848 
1603
| style="border-left: 1px solid;border-right: 1px solid;" | 15.433 
1604
| style="border-left: 1px solid;border-right: 2px solid;" | 15.433 
1605
|- style="border-bottom: 2px solid;"
1606
| style="border-left: 2px solid;border-right: 1px solid;" | 
1607
| style="border-left: 1px solid;border-right: 1px solid;" | 1,175,238 
1608
| style="border-left: 1px solid;border-right: 1px solid;" | 2,346,474 
1609
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72849 
1610
| style="border-left: 1px solid;border-right: 1px solid;" | 5.72849 
1611
| style="border-left: 1px solid;border-right: 1px solid;" | 15.43724 
1612
| style="border-left: 1px solid;border-right: 2px solid;" | 15.43724 
1613
|}
1614
1615
1616
The temperature and flux-magnitude distribution fields are shown in Figure [[#img-14|14]].     
1617
1618
<div id='img-14a'></div>
1619
<div id='img-14b'></div>
1620
<div id='img-14'></div>
1621
{| style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;max-width: auto;"
1622
|-
1623
|  style="text-align: center;padding:10px;"| [[Image:Esqueda_et_al_2020a-Fig_14_Square_contour_temp.png|240px|Contour Fill of Temperatures]]
1624
|  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]] 
1625
|-
1626
|  style="text-align: center;font-size: 75%;"|(a) Contour fill of temperatures
1627
|  style="text-align: center;font-size: 75%;"|(b) Contour fill of flux vectors on Elems
1628
|- style="text-align: center; font-size: 75%;"
1629
| colspan="2" style="padding:10px;"| '''Figure 14'''. Temperature and flux-magnitude distribution fields of the first example
1630
|}
1631
1632
1633
Figure [[#img-15|15]] shows the graphs of the temperature and the flux-magnitude along a horizontal line crossing the inner circle for the first two meshes. 
1634
1635
<div id='img-15a'></div>
1636
<div id='img-15b'></div>
1637
<div id='img-15c'></div>
1638
<div id='img-15d'></div>
1639
<div id='img-15e'></div>
1640
<div id='img-15f'></div>
1641
<div id='img-15'></div>
1642
{| style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;max-width: auto;"
1643
|-
1644
|  style="text-align: center;padding:10px;"| [[Image:Esqueda_et_al_2020a-Fig_15_Square_m1_diametral_temp.png|300px|]]
1645
|  style="text-align: center;padding:10px;"| [[Image:Esqueda_et_al_2020a-Fig_15_Square_m1_diametral_flux.png|300px|]]
1646
|-
1647
|  style="text-align: center;font-size: 75%;"|(a) 
1648
|  style="text-align: center;font-size: 75%;"|(b) 
1649
|-
1650
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m2_diametral_temp.png|300px|]]
1651
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m2_diametral_flux.png|300px|]]
1652
|- 
1653
| style="text-align: center;font-size: 75%;"|(c) 
1654
| style="text-align: center;font-size: 75%;"|(d) 
1655
|-
1656
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m3_diametral_temp.png|300px|]]
1657
|style="text-align: center;padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_15_Square_m3_diametral_flux.png|300px|]]
1658
|- 
1659
| style="text-align: center;font-size: 75%;"|(e) 
1660
| style="text-align: center;font-size: 75%;"|(f) 
1661
|- style="text-align: center; font-size: 75%;"
1662
| colspan="2" style="padding:10px;"| '''Figure 15'''. Temperature and Flux magnitude graphs of the first example along a cross-section of the domain for different meshes
1663
|}
1664
1665
1666
In Table [[#table-2|2]], we show some global error metrics for different meshes. Figure [[#img-16|16]] shows the error evolution in <math display="inline">L^2</math> norm for this example.
1667
1668
<div id='table-2'></div>
1669
<div class="center" style="font-size: 75%;">'''Table 2'''. tableDEC <math>L^2</math> errors in the first example</div>
1670
1671
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1672
|- style="border-top: 2px solid;"
1673
| style="border-left: 2px solid;border-right: 2px solid;" |    '''Mesh''' 
1674
| style="border-left: 2px solid;border-right: 2px solid;" | '''Nodes''' 
1675
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>    \sum (u-u_i)^2 \over nodes    </math>''' 
1676
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>L^2</math> norm''' 
1677
|- style="border-top: 2px solid;"
1678
| style="border-left: 2px solid;border-right: 1px solid;" |    1 
1679
| style="border-left: 1px solid;border-right: 1px solid;" | 49 
1680
| style="border-left: 1px solid;border-right: 1px solid;" | 1.0537e-02 
1681
| style="border-left: 1px solid;border-right: 2px solid;" | 1.4438e-01 
1682
|- 
1683
| style="border-left: 2px solid;border-right: 1px solid;" |    2 
1684
| style="border-left: 1px solid;border-right: 1px solid;" | 98 
1685
| style="border-left: 1px solid;border-right: 1px solid;" | 4.2447e-03 
1686
| style="border-left: 1px solid;border-right: 2px solid;" | 4.8558e-02 
1687
|- 
1688
| style="border-left: 2px solid;border-right: 1px solid;" |    3 
1689
| style="border-left: 1px solid;border-right: 1px solid;" | 258 
1690
| style="border-left: 1px solid;border-right: 1px solid;" | 6.9781e-04 
1691
| style="border-left: 1px solid;border-right: 2px solid;" | 3.0390e-03 
1692
|- 
1693
| style="border-left: 2px solid;border-right: 1px solid;" |    4 
1694
| style="border-left: 1px solid;border-right: 1px solid;" | 1,010 
1695
| style="border-left: 1px solid;border-right: 1px solid;" | 8.8386e-05 
1696
| style="border-left: 1px solid;border-right: 2px solid;" | 1.4877e-04 
1697
|- 
1698
| style="border-left: 2px solid;border-right: 1px solid;" |    5 
1699
| style="border-left: 1px solid;border-right: 1px solid;" | 3,813 
1700
| style="border-left: 1px solid;border-right: 1px solid;" | 1.0736e-05 
1701
| style="border-left: 1px solid;border-right: 2px solid;" | 7.7369e-06 
1702
|- 
1703
| style="border-left: 2px solid;border-right: 1px solid;" |    6 
1704
| style="border-left: 1px solid;border-right: 1px solid;" | 13,911 
1705
| style="border-left: 1px solid;border-right: 1px solid;" | 1.4422e-06 
1706
| style="border-left: 1px solid;border-right: 2px solid;" | 4.9791e-07 
1707
|- 
1708
| style="border-left: 2px solid;border-right: 1px solid;" |    7 
1709
| style="border-left: 1px solid;border-right: 1px solid;" | 50,950 
1710
| style="border-left: 1px solid;border-right: 1px solid;" | 1.7582e-07 
1711
| style="border-left: 1px solid;border-right: 2px solid;" | 2.9608e-08 
1712
|- 
1713
| style="border-left: 2px solid;border-right: 1px solid;" |    8 
1714
| style="border-left: 1px solid;border-right: 1px solid;" | 135,518 
1715
| style="border-left: 1px solid;border-right: 1px solid;" | 3.2621e-08 
1716
| style="border-left: 1px solid;border-right: 2px solid;" | 2.9233e-09 
1717
|- 
1718
| style="border-left: 2px solid;border-right: 1px solid;" |    9 
1719
| style="border-left: 1px solid;border-right: 1px solid;" | 298,299 
1720
| style="border-left: 1px solid;border-right: 1px solid;" | 7.3566e-09 
1721
| style="border-left: 1px solid;border-right: 2px solid;" | 3.3610e-10 
1722
|- style="border-top: 1px solid;border-bottom: 2px solid;"
1723
| style="border-left: 2px solid;border-right: 1px solid;" |    10 
1724
| style="border-left: 1px solid;border-right: 1px solid;" | 603,440 
1725
| style="border-left: 1px solid;border-right: 1px solid;" | 1.8577e-09 
1726
| style="border-left: 1px solid;border-right: 2px solid;" | 4.9496e-11 
1727
|}
1728
1729
1730
<div id='img-16'></div>
1731
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1732
|-
1733
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-DEC_Error_Graph_Square_Circle.png|430px|DEC ]]
1734
|- style="text-align: center; font-size: 75%;"
1735
| colspan="1" style="padding-bottom:10px;"| '''Figure 16'''. DEC 
1736
|}
1737
1738
===7.2 Second example: Anisotropy===
1739
1740
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]]):
1741
1742
* heat anisotropic diffusion constants <math display="inline">K_x = 1.5, K_y=1.0</math>;
1743
* material angle <math display="inline">30^\circ </math>;
1744
* source term <math display="inline">q= 1</math>;
1745
* Dirichlet boundary condition <math display="inline">u=10</math>.
1746
1747
<div id='img-18'></div>
1748
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1749
|-
1750
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_16_CircleWithConditions.png|180px|Disk of radius one.]]
1751
|- style="text-align: center; font-size: 75%;"
1752
| colspan="1" style="padding-bottom:10px;"| '''Figure 18'''. Disk of radius one.
1753
|}
1754
1755
1756
The meshes used in this example are shown in Figure [[#img-19|19]] and vary from very coarse to very fine. 
1757
1758
<div id='img-19a'></div>
1759
<div id='img-19b'></div>
1760
<div id='img-19c'></div>
1761
<div id='img-19d'></div>
1762
<div id='img-19e'></div>
1763
<div id='img-19f'></div>
1764
<div id='img-19'></div>
1765
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1766
|-
1767
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh1.png|144px|]]
1768
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh2.png|144px|]]
1769
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh3.png|144px|]]
1770
|- 
1771
| style="text-align: center;font-size: 75%;"|(a) 
1772
| style="text-align: center;font-size: 75%;"|(b) 
1773
| style="text-align: center;font-size: 75%;"|(c) 
1774
|-
1775
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh4.png|144px|]]
1776
|colspan="1" style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh5.png|144px|]]
1777
|colspan="1" style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_17_CircleMesh6.png|144px|]]
1778
|- 
1779
| style="text-align: center;font-size: 75%;"|(d) 
1780
|colspan="1"  style="text-align: center;font-size: 75%;"|(e) 
1781
| colspan="1" style="text-align: center;font-size: 75%;"|(f) 
1782
|- style="text-align: center; font-size: 75%;"
1783
| colspan="3" style="padding:10px;" | '''Figure 19'''. First six meshes used for unit disk.
1784
|}
1785
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.
1786
1787
<div style="text-align: center; font-size: 75%; ">Temperature value at the point </div>  
1788
1789
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1790
|- style="border-top: 2px solid;border-bottom: 2px solid;"
1791
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Mesh
1792
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Nodes
1793
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Elements
1794
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Temp. Value at <math>(0,0)</math>
1795
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Flux Magnitude at <math>(-1,0)</math>
1796
|-style="border-top: 2px solid;border-bottom: 2px solid;"
1797
| style="border-left: 2px solid;border-right: 1px solid;" | DEC  
1798
| style="border-left: 1px solid;border-right: 1px solid;" | FEML
1799
| style="border-left: 1px solid;border-right: 1px solid;" | DEC  
1800
| style="border-left: 1px solid;border-right: 2px solid;" | FEML  
1801
|- 
1802
| style="border-left: 2px solid;border-right: 1px solid;" |    Figure [[#img-19|19]](a)
1803
| style="border-left: 1px solid;border-right: 1px solid;" | 17 
1804
| style="border-left: 1px solid;border-right: 1px solid;" | 20  
1805
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20014
1806
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19002  
1807
| style="border-left: 1px solid;border-right: 1px solid;" | 0.42133 
1808
| style="border-left: 1px solid;border-right: 2px solid;" | 0.43865
1809
|-
1810
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-19|19]](b)
1811
| style="border-left: 1px solid;border-right: 1px solid;" | 41 
1812
| style="border-left: 1px solid;border-right: 1px solid;" | 56  
1813
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20007
1814
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19678  
1815
| style="border-left: 1px solid;border-right: 1px solid;" | 0.48544 
1816
| style="border-left: 1px solid;border-right: 2px solid;" | 0.49387
1817
|-
1818
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-19|19]](c)
1819
| style="border-left: 1px solid;border-right: 1px solid;" | 201 
1820
| style="border-left: 1px solid;border-right: 1px solid;" | 344  
1821
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20012
1822
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20158  
1823
| style="border-left: 1px solid;border-right: 1px solid;" | 0.52470 
1824
| style="border-left: 1px solid;border-right: 2px solid;" | 0.52428
1825
|-
1826
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-19|19]](d)
1827
| style="border-left: 1px solid;border-right: 1px solid;" | 713 
1828
| style="border-left: 1px solid;border-right: 1px solid;" | 1304 
1829
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1830
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19969  
1831
| style="border-left: 1px solid;border-right: 1px solid;" | 0.54143 
1832
| style="border-left: 1px solid;border-right: 2px solid;" | 0.54224
1833
|-
1834
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-19|19]](e)
1835
| style="border-left: 1px solid;border-right: 1px solid;" | 2455
1836
| style="border-left: 1px solid;border-right: 1px solid;" | 4660 
1837
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1838
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19990  
1839
| style="border-left: 1px solid;border-right: 1px solid;" | 0.54971 
1840
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55138
1841
|-
1842
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-19|19]](f)
1843
| style="border-left: 1px solid;border-right: 1px solid;" | 8180
1844
| style="border-left: 1px solid;border-right: 1px solid;" | 15862 
1845
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1846
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20002  
1847
| style="border-left: 1px solid;border-right: 1px solid;" | 0.55326 
1848
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55409
1849
|-
1850
| style="border-left: 2px solid;border-right: 1px solid;" | 
1851
| style="border-left: 1px solid;border-right: 1px solid;" | 20016 
1852
| style="border-left: 1px solid;border-right: 1px solid;" | 39198 
1853
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1854
| style="border-left: 1px solid;border-right: 1px solid;" | 10.19999  
1855
| style="border-left: 1px solid;border-right: 1px solid;" | 0.55470 
1856
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55520
1857
|- style="border-bottom: 2px solid;"
1858
| style="border-left: 2px solid;border-right: 1px solid;" | 
1859
| style="border-left: 1px solid;border-right: 1px solid;" | 42306 
1860
| style="border-left: 1px solid;border-right: 1px solid;" | 83362 
1861
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000
1862
| style="border-left: 1px solid;border-right: 1px solid;" | 10.20000  
1863
| style="border-left: 1px solid;border-right: 1px solid;" | 0.55540 
1864
| style="border-left: 1px solid;border-right: 2px solid;" | 0.55572
1865
|}
1866
1867
1868
The temperature distribution and Flux magnitude fields for the finest mesh are shown in Figure [[#img-20|20]]. 
1869
1870
<div id='img-20a'></div>
1871
<div id='img-20b'></div>
1872
<div id='img-20'></div>
1873
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1874
|-
1875
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_18_CircleContourTemp.png|234px|Contour Fill of Temperatures]]
1876
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_18_CircleContourFlux.png|234px|Contour Fill of Flux vectors on Elems]]
1877
|- style="text-align: center; font-size: 75%;"
1878
| (a) Contour Fill of Temperatures
1879
| (b) Contour Fill of Flux vectors on Elems
1880
|- style="text-align: center; font-size: 75%;"
1881
| colspan="2" style="padding:10px;"| '''Figure 20'''. Temperature distribution and Flux magnitude fields for the finest mesh of the second example.
1882
|}
1883
1884
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. 
1885
1886
<div id='img-21a'></div>
1887
<div id='img-21b'></div>
1888
<div id='img-21c'></div>
1889
<div id='img-21d'></div>
1890
<div id='img-21e'></div>
1891
<div id='img-21f'></div>
1892
<div id='img-21'></div>
1893
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1894
|-
1895
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleTempCrossSection01.png|300px|]]
1896
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleFluxCrossSection01.png|300px|]]
1897
|- style="text-align: center; font-size: 75%;"
1898
| (a) 
1899
| (b) 
1900
|-
1901
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleTempCrossSection02.png|300px|]]
1902
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleFluxCrossSection02.png|300px|]]
1903
|- style="text-align: center; font-size: 75%;"
1904
| (c) 
1905
| (d) 
1906
|-
1907
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleTempCrossSection03.png|300px|]]
1908
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_19_CircleFluxCrossSection03.png|300px|]]
1909
|- style="text-align: center; font-size: 75%;"
1910
| (e) 
1911
| (f) 
1912
|- style="text-align: center; font-size: 75%;"
1913
| colspan="2" style="padding:10px;"| '''Figure 21'''. Temperature and Flux magnitude graphs of the second example along a diameter of the circle for different meshes:    mesh in Figure 
1914
|}
1915
1916
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.
1917
1918
<div class="center" style="font-size: 75%;">'''Table 2'''. tableDEC errors in the second example</div>
1919
1920
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
1921
|- style="border-top: 2px solid;"
1922
| style="border-left: 2px solid;border-right: 2px solid;" |    '''Mesh''' 
1923
| style="border-left: 2px solid;border-right: 2px solid;" | '''Nodes''' 
1924
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>    \sum (u-u_i)^2 \over nodes    </math>''' 
1925
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>L^2</math> norm''' 
1926
|- style="border-top: 2px solid;"
1927
| style="border-left: 2px solid;border-right: 1px solid;" |     1 
1928
| style="border-left: 1px solid;border-right: 1px solid;" | 17 
1929
| style="border-left: 1px solid;border-right: 1px solid;" | 1.5818e-04 
1930
| style="border-left: 1px solid;border-right: 2px solid;" | 2.3555e-06 
1931
|- style="border-top: 1px solid;"
1932
| style="border-left: 2px solid;border-right: 1px solid;" |     2 
1933
| style="border-left: 1px solid;border-right: 1px solid;" | 51 
1934
| style="border-left: 1px solid;border-right: 1px solid;" | 2.5395e-05 
1935
| style="border-left: 1px solid;border-right: 2px solid;" | 1.5639e-07 
1936
|- style="border-top: 1px solid;"
1937
| style="border-left: 2px solid;border-right: 1px solid;" |     3 
1938
| style="border-left: 1px solid;border-right: 1px solid;" | 201 
1939
| style="border-left: 1px solid;border-right: 1px solid;" | 3.3643e-06 
1940
| style="border-left: 1px solid;border-right: 2px solid;" | 1.0517e-08 
1941
|- style="border-top: 1px solid;"
1942
| style="border-left: 2px solid;border-right: 1px solid;" |     4 
1943
| style="border-left: 1px solid;border-right: 1px solid;" | 713 
1944
| style="border-left: 1px solid;border-right: 1px solid;" | 5.1563e-07 
1945
| style="border-left: 1px solid;border-right: 2px solid;" | 8.3543e-10 
1946
|- style="border-top: 1px solid;"
1947
| style="border-left: 2px solid;border-right: 1px solid;" |     5 
1948
| style="border-left: 1px solid;border-right: 1px solid;" | 2,455 
1949
| style="border-left: 1px solid;border-right: 1px solid;" | 8.9235e-08 
1950
| style="border-left: 1px solid;border-right: 2px solid;" | 7.6073e-11 
1951
|- style="border-top: 1px solid;"
1952
| style="border-left: 2px solid;border-right: 1px solid;" |     6 
1953
| style="border-left: 1px solid;border-right: 1px solid;" | 8,180 
1954
| style="border-left: 1px solid;border-right: 1px solid;" | 3.1731e-08 
1955
| style="border-left: 1px solid;border-right: 2px solid;" | 2.9858e-11 
1956
|- style="border-top: 1px solid;"
1957
| style="border-left: 2px solid;border-right: 1px solid;" |     7 
1958
| style="border-left: 1px solid;border-right: 1px solid;" | 20,016 
1959
| style="border-left: 1px solid;border-right: 1px solid;" | 2.0217e-08 
1960
| style="border-left: 1px solid;border-right: 2px solid;" | 2.6580e-11 
1961
|- style="border-top: 1px solid;"
1962
| style="border-left: 2px solid;border-right: 1px solid;" |     8 
1963
| style="border-left: 1px solid;border-right: 1px solid;" | 42,306 
1964
| style="border-left: 1px solid;border-right: 1px solid;" | 1.4421e-08 
1965
| style="border-left: 1px solid;border-right: 2px solid;" | 2.7062e-11 
1966
|- style="border-top: 1px solid;"
1967
| style="border-left: 2px solid;border-right: 1px solid;" |     9 
1968
| style="border-left: 1px solid;border-right: 1px solid;" | 82,722 
1969
| style="border-left: 1px solid;border-right: 1px solid;" | 9.8533e-09 
1970
| style="border-left: 1px solid;border-right: 2px solid;" | 2.6164e-11 
1971
|- style="border-top: 1px solid;"
1972
| style="border-left: 2px solid;border-right: 1px solid;" |     10 
1973
| style="border-left: 1px solid;border-right: 1px solid;" | 156,274 
1974
| style="border-left: 1px solid;border-right: 1px solid;" | 7.1352e-09 
1975
| style="border-left: 1px solid;border-right: 2px solid;" | 2.5954e-11 
1976
|- style="border-top: 1px solid;"
1977
| style="border-left: 2px solid;border-right: 1px solid;" |     11 
1978
| style="border-left: 1px solid;border-right: 1px solid;" | 420,013 
1979
| style="border-left: 1px solid;border-right: 1px solid;" | 4.4277e-09 
1980
| style="border-left: 1px solid;border-right: 2px solid;" | 2.6151e-11 
1981
|- style="border-top: 1px solid;border-bottom: 2px solid;"
1982
| style="border-left: 2px solid;border-right: 1px solid;" |     12 
1983
| style="border-left: 1px solid;border-right: 1px solid;" | 935,016 
1984
| style="border-left: 1px solid;border-right: 1px solid;" | 2.9635e-09 
1985
| style="border-left: 1px solid;border-right: 2px solid;" | 2.6003e-11 
1986
|}
1987
1988
1989
<div id='img-22'></div>
1990
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
1991
|-
1992
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-DEC_Error_Graph_Circle.png|430px|DEC ]]
1993
|- style="text-align: center; font-size: 75%;"
1994
| colspan="1" style="padding-bottom:10px;"| '''Figure 22'''. DEC 
1995
|}
1996
1997
===7.3 Third example: Heterogeneity and anisotropy===
1998
1999
Let us solve the Poisson equation in a circle of radius on the following domain (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>.  
2000
2001
<div id='img-23'></div>
2002
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2003
|-
2004
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_20_HuevoGeometry.png|340px|Egg-like domain with different materials.]]
2005
|- style="text-align: center; font-size: 75%;"
2006
| colspan="1" style="padding:10px;"| '''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:40%;font-size:85%;"
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: 1px solid;" |    a 
2020
| style="border-left: 1px solid;border-right: 1px solid;" | -5 
2021
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2022
| style="border-left: 1px solid;border-right: 1px solid;" | A 
2023
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2024
| style="border-left: 1px solid;border-right: 2px solid;" | -4 
2025
|-
2026
| style="border-left: 2px solid;border-right: 1px solid;" | b 
2027
| style="border-left: 1px solid;border-right: 1px solid;" | -4 
2028
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2029
| style="border-left: 1px solid;border-right: 1px solid;" | B 
2030
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2031
| style="border-left: 1px solid;border-right: 2px solid;" | -3 
2032
|-
2033
| style="border-left: 2px solid;border-right: 1px solid;" | c 
2034
| style="border-left: 1px solid;border-right: 1px solid;" | -3 
2035
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2036
| style="border-left: 1px solid;border-right: 1px solid;" | C 
2037
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2038
| style="border-left: 1px solid;border-right: 2px solid;" | -2 
2039
|-
2040
| style="border-left: 2px solid;border-right: 1px solid;" | d 
2041
| style="border-left: 1px solid;border-right: 1px solid;" | -1 
2042
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2043
| style="border-left: 1px solid;border-right: 1px solid;" | D 
2044
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2045
| style="border-left: 1px solid;border-right: 2px solid;" | -1 
2046
|-
2047
| style="border-left: 2px solid;border-right: 1px solid;" | e 
2048
| style="border-left: 1px solid;border-right: 1px solid;" | 1 
2049
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2050
| style="border-left: 1px solid;border-right: 1px solid;" | E 
2051
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2052
| style="border-left: 1px solid;border-right: 2px solid;" | 1 
2053
|-
2054
| style="border-left: 2px solid;border-right: 1px solid;" | f 
2055
| style="border-left: 1px solid;border-right: 1px solid;" | 6 
2056
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2057
| style="border-left: 1px solid;border-right: 1px solid;" | F 
2058
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2059
| style="border-left: 1px solid;border-right: 2px solid;" | 2 
2060
|-
2061
| style="border-left: 2px solid;border-right: 1px solid;" | g 
2062
| style="border-left: 1px solid;border-right: 1px solid;" | 7 
2063
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2064
| style="border-left: 1px solid;border-right: 1px solid;" | G 
2065
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2066
| style="border-left: 1px solid;border-right: 2px solid;" | 3 
2067
|- style="border-bottom: 2px solid;"
2068
| style="border-left: 2px solid;border-right: 1px solid;" | h 
2069
| style="border-left: 1px solid;border-right: 1px solid;" | 8 
2070
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2071
| style="border-left: 1px solid;border-right: 1px solid;" | H 
2072
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2073
| style="border-left: 1px 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.  
2078
2079
<div id='img-24'></div>
2080
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2081
|-
2082
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_21_HuevoWithConditions.png|300px|Dirichlet condition.]]
2083
|- style="text-align: center; font-size: 75%;"
2084
| colspan="1" style="padding:10px;"| '''Figure 24'''. Dirichlet condition
2085
|}
2086
2087
2088
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:40%;font-size:85%;"
2089
|- style="border-top: 2px solid;"
2090
| style="text-align: left;border-left: 2px solid;border-right: 2px solid;" |     
2091
| style="border-left: 2px solid;border-right: 2px solid;" | <math>K_x</math>
2092
| style="border-left: 2px solid;border-right: 2px solid;" | <math>K_y</math>
2093
| style="border-left: 2px solid;border-right: 2px solid;" | Angle
2094
| style="border-left: 2px solid;border-right: 2px solid;" | <math>q</math>
2095
|- style="border-top: 2px solid;"
2096
| style="text-align: left;border-left: 2px solid;border-right: 1px solid;" |     Domain mat1
2097
| style="border-left: 1px solid;border-right: 1px solid;" | 5 
2098
| style="border-left: 1px solid;border-right: 1px solid;" | 25 
2099
| style="border-left: 1px solid;border-right: 1px solid;" | 30 
2100
| style="border-left: 1px solid;border-right: 2px solid;" | 15
2101
|- style="border-top: 1px solid;"
2102
| style="text-align: left;border-left: 2px solid;border-right: 1px solid;" |     Domain mat2
2103
| style="border-left: 1px solid;border-right: 1px solid;" | 25 
2104
| style="border-left: 1px solid;border-right: 1px solid;" | 5 
2105
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2106
| style="border-left: 1px solid;border-right: 2px solid;" | 5
2107
|- style="border-top: 1px solid;"
2108
| style="text-align: left;border-left: 2px solid;border-right: 1px solid;" |     Domain mat3
2109
| style="border-left: 1px solid;border-right: 1px solid;" | 50 
2110
| style="border-left: 1px solid;border-right: 1px solid;" | 12
2111
| style="border-left: 1px solid;border-right: 1px solid;" | 45
2112
| style="border-left: 1px solid;border-right: 2px solid;" | 5
2113
|- style="border-top: 1px solid;border-bottom: 2px solid;"
2114
| style="text-align: left;border-left: 2px solid;border-right: 1px solid;" |     Domain mat4
2115
| style="border-left: 1px solid;border-right: 1px solid;" | 10 
2116
| style="border-left: 1px solid;border-right: 1px solid;" | 35 
2117
| style="border-left: 1px solid;border-right: 1px solid;" | 0 
2118
| style="border-left: 1px solid;border-right: 2px solid;" | 5
2119
|}
2120
2121
2122
The meshes used in this example are shown in Figure [[#img-25|25]]. 
2123
2124
<div id='img-25a'></div>
2125
<div id='img-25b'></div>
2126
<div id='img-25c'></div>
2127
<div id='img-25d'></div>
2128
<div id='img-25'></div>
2129
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2130
|-
2131
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh1.png|210px|]]
2132
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh2.png|210px|]]
2133
|- style="text-align: center; font-size: 75%;"
2134
| (a) 
2135
| (b) 
2136
|-
2137
| style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh3.png|210px|]]
2138
| style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_22_HuevoMesh4.png|210px|]]
2139
|- style="text-align: center; font-size: 75%;"
2140
| (c) 
2141
| (d) 
2142
|- style="text-align: center; font-size: 75%;"
2143
| colspan="3" style="padding:10px;"| '''Figure 25'''. Meshes for layered egg-like figure
2144
|}
2145
2146
2147
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.
2148
2149
<div style="text-align: center; font-size: 75%; ">Maximum temperature and Flux magnitude values in the numerical simulations of the third example</div>  
2150
2151
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
2152
|- style="border-top: 2px solid;"
2153
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Mesh
2154
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Nodes
2155
| rowspan='2' style="border-left: 2px solid;border-right: 2px solid;" | Elements
2156
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Temp. Value
2157
| colspan='2' style="border-right: 2px solid;border-left: 2px solid;border-right: 2px solid;" | Max. Flux Magnitude
2158
|-style="border-top: 2px solid;"
2159
| style="border-left: 2px solid;border-right: 2px solid;" | DEC  
2160
| style="border-left: 2px solid;border-right: 2px solid;" | FEML
2161
| style="border-left: 2px solid;border-right: 2px solid;" | DEC  
2162
| style="border-left: 2px solid;border-right: 2px solid;" | FEML  
2163
|- style="border-top: 2px solid;"
2164
| style="border-left: 2px solid;border-right: 1px solid;" |    Figure [[#img-25|25]](a) 
2165
| style="border-left: 1px solid;border-right: 1px solid;" | 342 
2166
| style="border-left: 1px solid;border-right: 1px solid;" | 616 
2167
| style="border-left: 1px solid;border-right: 1px solid;" | 2.79221 
2168
| style="border-left: 1px solid;border-right: 1px solid;" | 2.79854 
2169
| style="border-left: 1px solid;border-right: 1px solid;" | 18.41066 
2170
| style="border-left: 1px solid;border-right: 2px solid;" | 18.40573 
2171
|-
2172
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-25|25]](b) 
2173
| style="border-left: 1px solid;border-right: 1px solid;" | 1,259 
2174
| style="border-left: 1px solid;border-right: 1px solid;" | 2,384 
2175
| style="border-left: 1px solid;border-right: 1px solid;" | 2.83929 
2176
| style="border-left: 1px solid;border-right: 1px solid;" | 2.84727 
2177
| style="border-left: 1px solid;border-right: 1px solid;" | 18.93838 
2178
| style="border-left: 1px solid;border-right: 2px solid;" | 18.91532 
2179
|-
2180
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-25|25]](c) 
2181
| style="border-left: 1px solid;border-right: 1px solid;" | 4,467 
2182
| style="border-left: 1px solid;border-right: 1px solid;" | 8,668 
2183
| style="border-left: 1px solid;border-right: 1px solid;" | 2.85608 
2184
| style="border-left: 1px solid;border-right: 1px solid;" | 2.85717 
2185
| style="border-left: 1px solid;border-right: 1px solid;" | 19.13297 
2186
| style="border-left: 1px solid;border-right: 2px solid;" | 19.13193 
2187
|-
2188
| style="border-left: 2px solid;border-right: 1px solid;" | Figure [[#img-25|25]](d)  
2189
| style="border-left: 1px solid;border-right: 1px solid;" | 14,250  
2190
| style="border-left: 1px solid;border-right: 1px solid;" | 28,506 
2191
| style="border-left: 1px solid;border-right: 1px solid;" | 2.85994 
2192
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86056 
2193
| style="border-left: 1px solid;border-right: 1px solid;" | 19.20982 
2194
| style="border-left: 1px solid;border-right: 2px solid;" | 19.20909 
2195
|-
2196
| style="border-left: 2px solid;border-right: 1px solid;" | 
2197
| style="border-left: 1px solid;border-right: 1px solid;" | 20,493 
2198
| style="border-left: 1px solid;border-right: 1px solid;" | 40,316 
2199
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86120 
2200
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86177 
2201
| style="border-left: 1px solid;border-right: 1px solid;" | 19.23120 
2202
| style="border-left: 1px solid;border-right: 2px solid;" | 19.23457 
2203
|-
2204
| style="border-left: 2px solid;border-right: 1px solid;" | 
2205
| style="border-left: 1px solid;border-right: 1px solid;" | 60,380 
2206
| style="border-left: 1px solid;border-right: 1px solid;" | 119,418 
2207
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86219 
2208
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86231 
2209
| style="border-left: 1px solid;border-right: 1px solid;" | 19.26655 
2210
| style="border-left: 1px solid;border-right: 2px solid;" | 19.26628 
2211
|-
2212
| style="border-left: 2px solid;border-right: 1px solid;" | 
2213
| style="border-left: 1px solid;border-right: 1px solid;" | 142,702 
2214
| style="border-left: 1px solid;border-right: 1px solid;" | 283,162 
2215
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86249 
2216
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86256 
2217
| style="border-left: 1px solid;border-right: 1px solid;" | 19.28045 
2218
| style="border-left: 1px solid;border-right: 2px solid;" | 19.28028 
2219
|-
2220
| style="border-left: 2px solid;border-right: 1px solid;" | 
2221
| style="border-left: 1px solid;border-right: 1px solid;" | 291,363 
2222
| style="border-left: 1px solid;border-right: 1px solid;" | 579,360 
2223
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86263 
2224
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86267 
2225
| style="border-left: 1px solid;border-right: 1px solid;" | 19.28727 
2226
| style="border-left: 1px solid;border-right: 2px solid;" | 19.28755 
2227
|-
2228
| style="border-left: 2px solid;border-right: 1px solid;" | 
2229
| style="border-left: 1px solid;border-right: 1px solid;" | 495,607 
2230
| style="border-left: 1px solid;border-right: 1px solid;" | 986,724 
2231
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86275 
2232
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86269 
2233
| style="border-left: 1px solid;border-right: 1px solid;" | 19.29057 
2234
| style="border-left: 1px solid;border-right: 2px solid;" | 19.29081 
2235
|-
2236
| style="border-left: 2px solid;border-right: 1px solid;" | 
2237
| style="border-left: 1px solid;border-right: 1px solid;" | 1,064,447 
2238
| style="border-left: 1px solid;border-right: 1px solid;" | 2,122,160 
2239
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86272 
2240
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86273 
2241
| style="border-left: 1px solid;border-right: 1px solid;" | 19.29385 
2242
| style="border-left: 1px solid;border-right: 2px solid;" | 19.29389 
2243
|-
2244
| style="border-left: 2px solid;border-right: 1px solid;" | 
2245
| style="border-left: 1px solid;border-right: 1px solid;" | 2,106,077 
2246
| style="border-left: 1px solid;border-right: 1px solid;" | 4,202,536 
2247
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86274 
2248
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86274 
2249
| style="border-left: 1px solid;border-right: 1px solid;" | 19.29618 
2250
| style="border-left: 1px solid;border-right: 2px solid;" | 19.29615 
2251
|- style="border-bottom: 2px solid;"
2252
| style="border-left: 2px solid;border-right: 1px solid;" | 
2253
| style="border-left: 1px solid;border-right: 1px solid;" | 4,031,557 
2254
| style="border-left: 1px solid;border-right: 1px solid;" | 8,049,644 
2255
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86275 
2256
| style="border-left: 1px solid;border-right: 1px solid;" | 2.86275 
2257
| style="border-left: 1px solid;border-right: 1px solid;" | 19.29763 
2258
| style="border-left: 1px solid;border-right: 2px solid;" | 19.29765 
2259
|}
2260
2261
2262
The temperature distribution and Flux magnitude fields for the finest mesh are shown in Figure [[#img-26|26]]. 
2263
2264
<div id='img-26a'></div>
2265
<div id='img-26b'></div>
2266
<div id='img-26'></div>
2267
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2268
|-
2269
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_23_HuevoContourTemp.png|300px|Contour Fill of Temperatures]]
2270
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_23_HuevoContourFlux.png|300px|Contour Fill of Flux vectors on Elems]]
2271
|- style="text-align: center; font-size: 75%;"
2272
| (a) Contour fill of temperatures
2273
| (b) Contour till of flux vectors on elems
2274
|- style="text-align: center; font-size: 75%;"
2275
| colspan="2" style="padding:10px;"| '''Figure 26'''. Temperature distribution and Flux magnitude fields for the finest mesh of the third example
2276
|}
2277
2278
2279
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]]. 
2280
2281
<div id='img-27a'></div>
2282
<div id='img-27b'></div>
2283
<div id='img-27c'></div>
2284
<div id='img-27d'></div>
2285
<div id='img-27e'></div>
2286
<div id='img-27f'></div>
2287
<div id='img-27'></div>
2288
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2289
|-
2290
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoTempCrossSection01.png|300px|]]
2291
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoFluxCrossSection01.png|300px|]]
2292
|- style="text-align: center; font-size: 75%;"
2293
| (a) 
2294
| (b) 
2295
|-
2296
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoTempCrossSection02.png|300px|]]
2297
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoFluxCrossSection02.png|300px|]]
2298
|- style="text-align: center; font-size: 75%;"
2299
| (c) 
2300
| (d) 
2301
|-
2302
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoTempCrossSection03.png|300px|]]
2303
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-Fig_24_HuevoFluxCrossSection03.png|300px|]]
2304
|- style="text-align: center; font-size: 75%;"
2305
| (e) 
2306
| (f) 
2307
|- style="text-align: center; font-size: 75%;"
2308
| colspan="2" style="padding:10px;"| '''Figure 27'''. Temperature and Flux magnitude graphs of the third example along a cross-section of the domain for different meshes:  Mesh in Figure 
2309
|}
2310
2311
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.
2312
2313
<div class="center" style="font-size: 75%;">'''Table 3'''. tableDEC errors in the third example</div>
2314
2315
{|  class="floating_tableSCP wikitable" style="text-align: center; margin: 1em auto;min-width:50%;font-size:85%;"
2316
|- style="border-top: 2px solid;"
2317
| style="border-left: 2px solid;border-right: 2px solid;" | '''Mesh''' 
2318
| style="border-left: 2px solid;border-right: 2px solid;" | '''Nodes''' 
2319
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>    \sum (u-u_i)^2 \over nodes    </math>''' 
2320
| style="border-left: 2px solid;border-right: 2px solid;" | '''<math>L^2</math> norm''' 
2321
|- style="border-top: 2px solid;"
2322
| style="border-left: 2px solid;border-right: 1px solid;" |     1 
2323
| style="border-left: 1px solid;border-right: 1px solid;" | 342 
2324
| style="border-left: 1px solid;border-right: 1px solid;" | 9.3638e-04 
2325
| style="border-left: 1px solid;border-right: 2px solid;" | 2.7786e-02 
2326
|- style="border-top: 1px solid;"
2327
| style="border-left: 2px solid;border-right: 1px solid;" |     2 
2328
| style="border-left: 1px solid;border-right: 1px solid;" | 1,259 
2329
| style="border-left: 1px solid;border-right: 1px solid;" | 1.5173e-04 
2330
| style="border-left: 1px solid;border-right: 2px solid;" | 3.2731e-03 
2331
|- style="border-top: 1px solid;"
2332
| style="border-left: 2px solid;border-right: 1px solid;" |     3 
2333
| style="border-left: 1px solid;border-right: 1px solid;" | 4,467 
2334
| style="border-left: 1px solid;border-right: 1px solid;" | 2.2110e-05 
2335
| style="border-left: 1px solid;border-right: 2px solid;" | 2.2937e-04 
2336
|- style="border-top: 1px solid;"
2337
| style="border-left: 2px solid;border-right: 1px solid;" |     4 
2338
| style="border-left: 1px solid;border-right: 1px solid;" | 14,250 
2339
| style="border-left: 1px solid;border-right: 1px solid;" | 3.7233e-06 
2340
| style="border-left: 1px solid;border-right: 2px solid;" | 1.9151e-05 
2341
|- style="border-top: 1px solid;"
2342
| style="border-left: 2px solid;border-right: 1px solid;" |     5 
2343
| style="border-left: 1px solid;border-right: 1px solid;" | 20,492 
2344
| style="border-left: 1px solid;border-right: 1px solid;" | 2.2311e-06 
2345
| style="border-left: 1px solid;border-right: 2px solid;" | 9.5930e-06 
2346
|- style="border-top: 1px solid;"
2347
| style="border-left: 2px solid;border-right: 1px solid;" |     6 
2348
| style="border-left: 1px solid;border-right: 1px solid;" | 60,380 
2349
| style="border-left: 1px solid;border-right: 1px solid;" | 4.3769e-07 
2350
| style="border-left: 1px solid;border-right: 2px solid;" | 8.7330e-07 
2351
|- style="border-top: 1px solid;"
2352
| style="border-left: 2px solid;border-right: 1px solid;" |     7 
2353
| style="border-left: 1px solid;border-right: 1px solid;" | 142,702 
2354
| style="border-left: 1px solid;border-right: 1px solid;" | 1.1664e-07 
2355
| style="border-left: 1px solid;border-right: 2px solid;" | 1.3926e-07 
2356
|- style="border-top: 1px solid;"
2357
| style="border-left: 2px solid;border-right: 1px solid;" |     8 
2358
| style="border-left: 1px solid;border-right: 1px solid;" | 291,369 
2359
| style="border-left: 1px solid;border-right: 1px solid;" | 3.9764e-08 
2360
| style="border-left: 1px solid;border-right: 2px solid;" | 3.3314e-08 
2361
|- style="border-top: 1px solid;"
2362
| style="border-left: 2px solid;border-right: 1px solid;" |     9 
2363
| style="border-left: 1px solid;border-right: 1px solid;" | 497,378 
2364
| style="border-left: 1px solid;border-right: 1px solid;" | 1.6680e-08 
2365
| style="border-left: 1px solid;border-right: 2px solid;" | 1.0275e-08 
2366
|- style="border-top: 1px solid;"
2367
| style="border-left: 2px solid;border-right: 1px solid;" |     10 
2368
| style="border-left: 1px solid;border-right: 1px solid;" | 1,067,171 
2369
| style="border-left: 1px solid;border-right: 1px solid;" | 3.9594e-09 
2370
| style="border-left: 1px solid;border-right: 2px solid;" | 1.2190e-09 
2371
|- style="border-top: 1px solid;border-bottom: 2px solid;"
2372
| style="border-left: 2px solid;border-right: 1px solid;" |     11 
2373
| style="border-left: 1px solid;border-right: 1px solid;" | 2,106,248 
2374
| style="border-left: 1px solid;border-right: 1px solid;" | 9.6949e-10 
2375
| style="border-left: 1px solid;border-right: 2px solid;" | 1.4415e-10 
2376
|}
2377
2378
2379
<div id='img-28'></div>
2380
{| class="floating_imageSCP" style="text-align: center; border: 1px solid #BBB; margin: 1em auto; width: auto;"
2381
|-
2382
|style="padding:10px;"|[[Image:Esqueda_et_al_2020a-DEC_Error_Graph_Eliptic_Egg.png|410px|DEC ]]
2383
|- style="text-align: center; font-size: 75%;"
2384
| colspan="1" style="padding-bottom:10px;"| '''Figure 28'''. DEC 
2385
|}
2386
2387
2388
'''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.
2389
2390
==8. Conclusions==
2391
2392
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:
2393
2394
<ol>
2395
2396
<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>
2397
2398
<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>
2399
2400
<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>
2401
2402
<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>
2403
2404
<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>
2405
</ol>
2406
2407
2408
On the other hand we would like to point the following features:
2409
2410
*   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.
2411
2412
* 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.
2413
2414
2415
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.
2416
2417
==Acknowledgements==
2418
2419
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.
2420
2421
<span style="text-align: center; font-size: 75%;">
2422
2423
==References==
2424
2425
<div class="auto" style="text-align: left;width: auto; margin-left: auto; margin-right: auto;font-size: 85%;">
2426
2427
<div id="cite-1"></div>
2428
[[#citeF-1|[1]]]  Bossavit A. Mixed finite elements and the complex of Whitney forms. In J. Whiteman (ed.), The Mathematics of Finite Elements and Applications VI, pp. 137–144, Academic Press, 1988.  
2429
2430
<div id="cite-2"></div>
2431
[[#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.  
2432
2433
<div id="cite-3"></div>
2434
[[#citeF-3|[3]]]  Cartan E. Sur certaines expressions différentielles et le problème de Pfaff. Annales Scientifiques de l'École Normale Supérieure, Série 3, Paris, Gauthier-Villars, Tome 16, pp. 239-332, 1899.   
2435
2436
<div id="cite-4"></div>
2437
[[#citeF-4|[4]]]  Crane K., et al. Digital geometry processing with discrete exterior calculus. ACM SIGGRAPH 2013 Courses, pp. 1-126, July 2013.  
2438
2439
<div id="cite-5"></div>
2440
[[#citeF-5|[5]]]  Dassios I., et al. A mathematical model for plasticity and damage: A discrete calculus formulation. Journal of Computational and Applied Mathematics, 312:27-38, 2017.  
2441
2442
<div id="cite-6"></div>
2443
[[#citeF-6|[6]]]  Esqueda H., Herrera R., Botello S., Moreles M.A. A geometric description of discrete exterior calculus for general triangulations. Rev. Int. Métodos Numér. Cálc. Diseño Ing., 35(1), 2, 2019.   https://www.scipedia.com/public/Herrera_et_al_2018b  
2444
2445
<div id="cite-7"></div>
2446
[[#citeF-7|[7]]]  Griebel, M., Rieger C.,  Schier A. Upwind schemes for scalar advection-dominated problems in the Discrete Exterior Calculus. In Bothe D., Reusken A. (eds), Transport Processes at Fluidic Interfaces, Birkhäuser, Cham,  145-175, 2017.  
2447
2448
<div id="cite-8"></div>
2449
[[#citeF-8|[8]]]  Hirani A.N. Discrete exterior calculus. Thesis, California Institute of Technology, 2003.  
2450
2451
<div id="cite-9"></div>
2452
[[#citeF-9|[9]]]  Hirani A.N., Nakshatrala K.B.,   Chaudhry J.H. Numerical method for Darcy flow derived using discrete exterior calculus. International Journal for Computational Methods in Engineering Science and Mechanics, 16(3):151-169, 2015.  
2453
2454
<div id="cite-10"></div>
2455
[[#citeF-10|[10]]]  Mohamed M.S.,  Hirani A.N.,   Samtaney R. Discrete exterior calculus discretization of incompressible Navier-Stokes equations over surface simplicial meshes. Journal of Computational Physics, 312: 175-191, 2016.  
2456
2457
<div id="cite-11"></div>
2458
[[#citeF-11|[11]]]  Oñate E.  2D solids. Linear triangular and rectangular elements. In Structural Analysis with the Finite Element Method.  Linear Statics, Volume 1: Basis and Solids, Chapter 4, pp. 117-157, CIMNE-Springer, Barcelona, 2009. 
2459
2460
<div id="cite-12"></div>
2461
[[#citeF-12|[12]]]  Whitney H. Geometric integration theory. Princeton University Press, 1957.  
2462
2463
<div id="cite-13"></div>
2464
[[#citeF-13|[13]]]    Zienkiewicz O.C.,  Taylor R.L., Zhu J.Z. Generalization of the finite element concepts. Galerkin-weighted residual and variational approaches. In The Finite Element Method Set (Sixth Edition), Butterworth-Heinemann, Oxford, Chapter 3, pp. 54-102, 2005.  
2465
2466
</div>
2467

Return to Esqueda et al 2020a.

Back to Top