1
// This code conforms with the UFC specification version 1.0
2
// and was automatically generated by FFC version 0.5.0.
11
/// This class defines the interface for a finite element.
13
class ffc_23_finite_element_0_0: public ufc::finite_element
18
ffc_23_finite_element_0_0() : ufc::finite_element()
24
virtual ~ffc_23_finite_element_0_0()
29
/// Return a string identifying the finite element
30
virtual const char* signature() const
32
return "Discontinuous Lagrange finite element of degree 2 on a tetrahedron";
35
/// Return the cell shape
36
virtual ufc::shape cell_shape() const
38
return ufc::tetrahedron;
41
/// Return the dimension of the finite element function space
42
virtual unsigned int space_dimension() const
47
/// Return the rank of the value space
48
virtual unsigned int value_rank() const
53
/// Return the dimension of the value space for axis i
54
virtual unsigned int value_dimension(unsigned int i) const
59
/// Evaluate basis function i at given point in cell
60
virtual void evaluate_basis(unsigned int i,
62
const double* coordinates,
63
const ufc::cell& c) const
65
throw std::runtime_error("// Function evaluate_basis not generated (compiled with -fno-evaluate_basis)");
68
/// Evaluate all basis functions at given point in cell
69
virtual void evaluate_basis_all(double* values,
70
const double* coordinates,
71
const ufc::cell& c) const
73
throw std::runtime_error("The vectorised version of evaluate_basis() is not yet implemented.");
76
/// Evaluate order n derivatives of basis function i at given point in cell
77
virtual void evaluate_basis_derivatives(unsigned int i,
80
const double* coordinates,
81
const ufc::cell& c) const
83
throw std::runtime_error("// Function evaluate_basis_derivatives not generated (compiled with -fno-evaluate_basis_derivatives)");
86
/// Evaluate order n derivatives of all basis functions at given point in cell
87
virtual void evaluate_basis_derivatives_all(unsigned int n,
89
const double* coordinates,
90
const ufc::cell& c) const
92
throw std::runtime_error("The vectorised version of evaluate_basis_derivatives() is not yet implemented.");
95
/// Evaluate linear functional for dof i on the function f
96
virtual double evaluate_dof(unsigned int i,
97
const ufc::function& f,
98
const ufc::cell& c) const
100
// The reference points, direction and weights:
101
const static double X[10][1][3] = {{{0, 0, 0}}, {{0.5, 0, 0}}, {{1, 0, 0}}, {{0, 0.5, 0}}, {{0.5, 0.5, 0}}, {{0, 1, 0}}, {{0, 0, 0.5}}, {{0.5, 0, 0.5}}, {{0, 0.5, 0.5}}, {{0, 0, 1}}};
102
const static double W[10][1] = {{1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}};
103
const static double D[10][1][1] = {{{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}};
105
const double * const * x = c.coordinates;
107
// Iterate over the points:
108
// Evaluate basis functions for affine mapping
109
const double w0 = 1.0 - X[i][0][0] - X[i][0][1] - X[i][0][2];
110
const double w1 = X[i][0][0];
111
const double w2 = X[i][0][1];
112
const double w3 = X[i][0][2];
114
// Compute affine mapping y = F(X)
116
y[0] = w0*x[0][0] + w1*x[1][0] + w2*x[2][0] + w3*x[3][0];
117
y[1] = w0*x[0][1] + w1*x[1][1] + w2*x[2][1] + w3*x[3][1];
118
y[2] = w0*x[0][2] + w1*x[1][2] + w2*x[2][2] + w3*x[3][2];
120
// Evaluate function at physical points
122
f.evaluate(values, y, c);
124
// Map function values using appropriate mapping
125
// Affine map: Do nothing
127
// Note that we do not map the weights (yet).
129
// Take directional components
130
for(int k = 0; k < 1; k++)
131
result += values[k]*D[i][0][k];
132
// Multiply by weights
138
/// Evaluate linear functionals for all dofs on the function f
139
virtual void evaluate_dofs(double* values,
140
const ufc::function& f,
141
const ufc::cell& c) const
143
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
146
/// Interpolate vertex values from dof values
147
virtual void interpolate_vertex_values(double* vertex_values,
148
const double* dof_values,
149
const ufc::cell& c) const
151
// Evaluate at vertices and use affine mapping
152
vertex_values[0] = dof_values[0];
153
vertex_values[1] = dof_values[2];
154
vertex_values[2] = dof_values[5];
155
vertex_values[3] = dof_values[9];
158
/// Return the number of sub elements (for a mixed element)
159
virtual unsigned int num_sub_elements() const
164
/// Create a new finite element for sub element i (for a mixed element)
165
virtual ufc::finite_element* create_sub_element(unsigned int i) const
167
return new ffc_23_finite_element_0_0();
172
/// This class defines the interface for a finite element.
174
class ffc_23_finite_element_0_1: public ufc::finite_element
179
ffc_23_finite_element_0_1() : ufc::finite_element()
185
virtual ~ffc_23_finite_element_0_1()
190
/// Return a string identifying the finite element
191
virtual const char* signature() const
193
return "Discontinuous Lagrange finite element of degree 2 on a tetrahedron";
196
/// Return the cell shape
197
virtual ufc::shape cell_shape() const
199
return ufc::tetrahedron;
202
/// Return the dimension of the finite element function space
203
virtual unsigned int space_dimension() const
208
/// Return the rank of the value space
209
virtual unsigned int value_rank() const
214
/// Return the dimension of the value space for axis i
215
virtual unsigned int value_dimension(unsigned int i) const
220
/// Evaluate basis function i at given point in cell
221
virtual void evaluate_basis(unsigned int i,
223
const double* coordinates,
224
const ufc::cell& c) const
226
throw std::runtime_error("// Function evaluate_basis not generated (compiled with -fno-evaluate_basis)");
229
/// Evaluate all basis functions at given point in cell
230
virtual void evaluate_basis_all(double* values,
231
const double* coordinates,
232
const ufc::cell& c) const
234
throw std::runtime_error("The vectorised version of evaluate_basis() is not yet implemented.");
237
/// Evaluate order n derivatives of basis function i at given point in cell
238
virtual void evaluate_basis_derivatives(unsigned int i,
241
const double* coordinates,
242
const ufc::cell& c) const
244
throw std::runtime_error("// Function evaluate_basis_derivatives not generated (compiled with -fno-evaluate_basis_derivatives)");
247
/// Evaluate order n derivatives of all basis functions at given point in cell
248
virtual void evaluate_basis_derivatives_all(unsigned int n,
250
const double* coordinates,
251
const ufc::cell& c) const
253
throw std::runtime_error("The vectorised version of evaluate_basis_derivatives() is not yet implemented.");
256
/// Evaluate linear functional for dof i on the function f
257
virtual double evaluate_dof(unsigned int i,
258
const ufc::function& f,
259
const ufc::cell& c) const
261
// The reference points, direction and weights:
262
const static double X[10][1][3] = {{{0, 0, 0}}, {{0.5, 0, 0}}, {{1, 0, 0}}, {{0, 0.5, 0}}, {{0.5, 0.5, 0}}, {{0, 1, 0}}, {{0, 0, 0.5}}, {{0.5, 0, 0.5}}, {{0, 0.5, 0.5}}, {{0, 0, 1}}};
263
const static double W[10][1] = {{1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}};
264
const static double D[10][1][1] = {{{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}};
266
const double * const * x = c.coordinates;
268
// Iterate over the points:
269
// Evaluate basis functions for affine mapping
270
const double w0 = 1.0 - X[i][0][0] - X[i][0][1] - X[i][0][2];
271
const double w1 = X[i][0][0];
272
const double w2 = X[i][0][1];
273
const double w3 = X[i][0][2];
275
// Compute affine mapping y = F(X)
277
y[0] = w0*x[0][0] + w1*x[1][0] + w2*x[2][0] + w3*x[3][0];
278
y[1] = w0*x[0][1] + w1*x[1][1] + w2*x[2][1] + w3*x[3][1];
279
y[2] = w0*x[0][2] + w1*x[1][2] + w2*x[2][2] + w3*x[3][2];
281
// Evaluate function at physical points
283
f.evaluate(values, y, c);
285
// Map function values using appropriate mapping
286
// Affine map: Do nothing
288
// Note that we do not map the weights (yet).
290
// Take directional components
291
for(int k = 0; k < 1; k++)
292
result += values[k]*D[i][0][k];
293
// Multiply by weights
299
/// Evaluate linear functionals for all dofs on the function f
300
virtual void evaluate_dofs(double* values,
301
const ufc::function& f,
302
const ufc::cell& c) const
304
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
307
/// Interpolate vertex values from dof values
308
virtual void interpolate_vertex_values(double* vertex_values,
309
const double* dof_values,
310
const ufc::cell& c) const
312
// Evaluate at vertices and use affine mapping
313
vertex_values[0] = dof_values[0];
314
vertex_values[1] = dof_values[2];
315
vertex_values[2] = dof_values[5];
316
vertex_values[3] = dof_values[9];
319
/// Return the number of sub elements (for a mixed element)
320
virtual unsigned int num_sub_elements() const
325
/// Create a new finite element for sub element i (for a mixed element)
326
virtual ufc::finite_element* create_sub_element(unsigned int i) const
328
return new ffc_23_finite_element_0_1();
333
/// This class defines the interface for a finite element.
335
class ffc_23_finite_element_0_2: public ufc::finite_element
340
ffc_23_finite_element_0_2() : ufc::finite_element()
346
virtual ~ffc_23_finite_element_0_2()
351
/// Return a string identifying the finite element
352
virtual const char* signature() const
354
return "Discontinuous Lagrange finite element of degree 2 on a tetrahedron";
357
/// Return the cell shape
358
virtual ufc::shape cell_shape() const
360
return ufc::tetrahedron;
363
/// Return the dimension of the finite element function space
364
virtual unsigned int space_dimension() const
369
/// Return the rank of the value space
370
virtual unsigned int value_rank() const
375
/// Return the dimension of the value space for axis i
376
virtual unsigned int value_dimension(unsigned int i) const
381
/// Evaluate basis function i at given point in cell
382
virtual void evaluate_basis(unsigned int i,
384
const double* coordinates,
385
const ufc::cell& c) const
387
throw std::runtime_error("// Function evaluate_basis not generated (compiled with -fno-evaluate_basis)");
390
/// Evaluate all basis functions at given point in cell
391
virtual void evaluate_basis_all(double* values,
392
const double* coordinates,
393
const ufc::cell& c) const
395
throw std::runtime_error("The vectorised version of evaluate_basis() is not yet implemented.");
398
/// Evaluate order n derivatives of basis function i at given point in cell
399
virtual void evaluate_basis_derivatives(unsigned int i,
402
const double* coordinates,
403
const ufc::cell& c) const
405
throw std::runtime_error("// Function evaluate_basis_derivatives not generated (compiled with -fno-evaluate_basis_derivatives)");
408
/// Evaluate order n derivatives of all basis functions at given point in cell
409
virtual void evaluate_basis_derivatives_all(unsigned int n,
411
const double* coordinates,
412
const ufc::cell& c) const
414
throw std::runtime_error("The vectorised version of evaluate_basis_derivatives() is not yet implemented.");
417
/// Evaluate linear functional for dof i on the function f
418
virtual double evaluate_dof(unsigned int i,
419
const ufc::function& f,
420
const ufc::cell& c) const
422
// The reference points, direction and weights:
423
const static double X[10][1][3] = {{{0, 0, 0}}, {{0.5, 0, 0}}, {{1, 0, 0}}, {{0, 0.5, 0}}, {{0.5, 0.5, 0}}, {{0, 1, 0}}, {{0, 0, 0.5}}, {{0.5, 0, 0.5}}, {{0, 0.5, 0.5}}, {{0, 0, 1}}};
424
const static double W[10][1] = {{1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}};
425
const static double D[10][1][1] = {{{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}, {{1}}};
427
const double * const * x = c.coordinates;
429
// Iterate over the points:
430
// Evaluate basis functions for affine mapping
431
const double w0 = 1.0 - X[i][0][0] - X[i][0][1] - X[i][0][2];
432
const double w1 = X[i][0][0];
433
const double w2 = X[i][0][1];
434
const double w3 = X[i][0][2];
436
// Compute affine mapping y = F(X)
438
y[0] = w0*x[0][0] + w1*x[1][0] + w2*x[2][0] + w3*x[3][0];
439
y[1] = w0*x[0][1] + w1*x[1][1] + w2*x[2][1] + w3*x[3][1];
440
y[2] = w0*x[0][2] + w1*x[1][2] + w2*x[2][2] + w3*x[3][2];
442
// Evaluate function at physical points
444
f.evaluate(values, y, c);
446
// Map function values using appropriate mapping
447
// Affine map: Do nothing
449
// Note that we do not map the weights (yet).
451
// Take directional components
452
for(int k = 0; k < 1; k++)
453
result += values[k]*D[i][0][k];
454
// Multiply by weights
460
/// Evaluate linear functionals for all dofs on the function f
461
virtual void evaluate_dofs(double* values,
462
const ufc::function& f,
463
const ufc::cell& c) const
465
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
468
/// Interpolate vertex values from dof values
469
virtual void interpolate_vertex_values(double* vertex_values,
470
const double* dof_values,
471
const ufc::cell& c) const
473
// Evaluate at vertices and use affine mapping
474
vertex_values[0] = dof_values[0];
475
vertex_values[1] = dof_values[2];
476
vertex_values[2] = dof_values[5];
477
vertex_values[3] = dof_values[9];
480
/// Return the number of sub elements (for a mixed element)
481
virtual unsigned int num_sub_elements() const
486
/// Create a new finite element for sub element i (for a mixed element)
487
virtual ufc::finite_element* create_sub_element(unsigned int i) const
489
return new ffc_23_finite_element_0_2();
494
/// This class defines the interface for a finite element.
496
class ffc_23_finite_element_0: public ufc::finite_element
501
ffc_23_finite_element_0() : ufc::finite_element()
507
virtual ~ffc_23_finite_element_0()
512
/// Return a string identifying the finite element
513
virtual const char* signature() const
515
return "Mixed finite element: [Discontinuous Lagrange finite element of degree 2 on a tetrahedron, Discontinuous Lagrange finite element of degree 2 on a tetrahedron, Discontinuous Lagrange finite element of degree 2 on a tetrahedron]";
518
/// Return the cell shape
519
virtual ufc::shape cell_shape() const
521
return ufc::tetrahedron;
524
/// Return the dimension of the finite element function space
525
virtual unsigned int space_dimension() const
530
/// Return the rank of the value space
531
virtual unsigned int value_rank() const
536
/// Return the dimension of the value space for axis i
537
virtual unsigned int value_dimension(unsigned int i) const
542
/// Evaluate basis function i at given point in cell
543
virtual void evaluate_basis(unsigned int i,
545
const double* coordinates,
546
const ufc::cell& c) const
548
throw std::runtime_error("// Function evaluate_basis not generated (compiled with -fno-evaluate_basis)");
551
/// Evaluate all basis functions at given point in cell
552
virtual void evaluate_basis_all(double* values,
553
const double* coordinates,
554
const ufc::cell& c) const
556
throw std::runtime_error("The vectorised version of evaluate_basis() is not yet implemented.");
559
/// Evaluate order n derivatives of basis function i at given point in cell
560
virtual void evaluate_basis_derivatives(unsigned int i,
563
const double* coordinates,
564
const ufc::cell& c) const
566
throw std::runtime_error("// Function evaluate_basis_derivatives not generated (compiled with -fno-evaluate_basis_derivatives)");
569
/// Evaluate order n derivatives of all basis functions at given point in cell
570
virtual void evaluate_basis_derivatives_all(unsigned int n,
572
const double* coordinates,
573
const ufc::cell& c) const
575
throw std::runtime_error("The vectorised version of evaluate_basis_derivatives() is not yet implemented.");
578
/// Evaluate linear functional for dof i on the function f
579
virtual double evaluate_dof(unsigned int i,
580
const ufc::function& f,
581
const ufc::cell& c) const
583
// The reference points, direction and weights:
584
const static double X[30][1][3] = {{{0, 0, 0}}, {{0.5, 0, 0}}, {{1, 0, 0}}, {{0, 0.5, 0}}, {{0.5, 0.5, 0}}, {{0, 1, 0}}, {{0, 0, 0.5}}, {{0.5, 0, 0.5}}, {{0, 0.5, 0.5}}, {{0, 0, 1}}, {{0, 0, 0}}, {{0.5, 0, 0}}, {{1, 0, 0}}, {{0, 0.5, 0}}, {{0.5, 0.5, 0}}, {{0, 1, 0}}, {{0, 0, 0.5}}, {{0.5, 0, 0.5}}, {{0, 0.5, 0.5}}, {{0, 0, 1}}, {{0, 0, 0}}, {{0.5, 0, 0}}, {{1, 0, 0}}, {{0, 0.5, 0}}, {{0.5, 0.5, 0}}, {{0, 1, 0}}, {{0, 0, 0.5}}, {{0.5, 0, 0.5}}, {{0, 0.5, 0.5}}, {{0, 0, 1}}};
585
const static double W[30][1] = {{1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}};
586
const static double D[30][1][3] = {{{1, 0, 0}}, {{1, 0, 0}}, {{1, 0, 0}}, {{1, 0, 0}}, {{1, 0, 0}}, {{1, 0, 0}}, {{1, 0, 0}}, {{1, 0, 0}}, {{1, 0, 0}}, {{1, 0, 0}}, {{0, 1, 0}}, {{0, 1, 0}}, {{0, 1, 0}}, {{0, 1, 0}}, {{0, 1, 0}}, {{0, 1, 0}}, {{0, 1, 0}}, {{0, 1, 0}}, {{0, 1, 0}}, {{0, 1, 0}}, {{0, 0, 1}}, {{0, 0, 1}}, {{0, 0, 1}}, {{0, 0, 1}}, {{0, 0, 1}}, {{0, 0, 1}}, {{0, 0, 1}}, {{0, 0, 1}}, {{0, 0, 1}}, {{0, 0, 1}}};
588
const double * const * x = c.coordinates;
590
// Iterate over the points:
591
// Evaluate basis functions for affine mapping
592
const double w0 = 1.0 - X[i][0][0] - X[i][0][1] - X[i][0][2];
593
const double w1 = X[i][0][0];
594
const double w2 = X[i][0][1];
595
const double w3 = X[i][0][2];
597
// Compute affine mapping y = F(X)
599
y[0] = w0*x[0][0] + w1*x[1][0] + w2*x[2][0] + w3*x[3][0];
600
y[1] = w0*x[0][1] + w1*x[1][1] + w2*x[2][1] + w3*x[3][1];
601
y[2] = w0*x[0][2] + w1*x[1][2] + w2*x[2][2] + w3*x[3][2];
603
// Evaluate function at physical points
605
f.evaluate(values, y, c);
607
// Map function values using appropriate mapping
608
// Affine map: Do nothing
610
// Note that we do not map the weights (yet).
612
// Take directional components
613
for(int k = 0; k < 3; k++)
614
result += values[k]*D[i][0][k];
615
// Multiply by weights
621
/// Evaluate linear functionals for all dofs on the function f
622
virtual void evaluate_dofs(double* values,
623
const ufc::function& f,
624
const ufc::cell& c) const
626
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
629
/// Interpolate vertex values from dof values
630
virtual void interpolate_vertex_values(double* vertex_values,
631
const double* dof_values,
632
const ufc::cell& c) const
634
// Evaluate at vertices and use affine mapping
635
vertex_values[0] = dof_values[0];
636
vertex_values[3] = dof_values[2];
637
vertex_values[6] = dof_values[5];
638
vertex_values[9] = dof_values[9];
639
// Evaluate at vertices and use affine mapping
640
vertex_values[1] = dof_values[10];
641
vertex_values[4] = dof_values[12];
642
vertex_values[7] = dof_values[15];
643
vertex_values[10] = dof_values[19];
644
// Evaluate at vertices and use affine mapping
645
vertex_values[2] = dof_values[20];
646
vertex_values[5] = dof_values[22];
647
vertex_values[8] = dof_values[25];
648
vertex_values[11] = dof_values[29];
651
/// Return the number of sub elements (for a mixed element)
652
virtual unsigned int num_sub_elements() const
657
/// Create a new finite element for sub element i (for a mixed element)
658
virtual ufc::finite_element* create_sub_element(unsigned int i) const
663
return new ffc_23_finite_element_0_0();
666
return new ffc_23_finite_element_0_1();
669
return new ffc_23_finite_element_0_2();
677
/// This class defines the interface for a local-to-global mapping of
678
/// degrees of freedom (dofs).
680
class ffc_23_dof_map_0_0: public ufc::dof_map
684
unsigned int __global_dimension;
689
ffc_23_dof_map_0_0() : ufc::dof_map()
691
__global_dimension = 0;
695
virtual ~ffc_23_dof_map_0_0()
700
/// Return a string identifying the dof map
701
virtual const char* signature() const
703
return "FFC dof map for Discontinuous Lagrange finite element of degree 2 on a tetrahedron";
706
/// Return true iff mesh entities of topological dimension d are needed
707
virtual bool needs_mesh_entities(unsigned int d) const
727
/// Initialize dof map for mesh (return true iff init_cell() is needed)
728
virtual bool init_mesh(const ufc::mesh& m)
730
__global_dimension = 10*m.num_entities[3];
734
/// Initialize dof map for given cell
735
virtual void init_cell(const ufc::mesh& m,
741
/// Finish initialization of dof map for cells
742
virtual void init_cell_finalize()
747
/// Return the dimension of the global finite element function space
748
virtual unsigned int global_dimension() const
750
return __global_dimension;
753
/// Return the dimension of the local finite element function space
754
virtual unsigned int local_dimension() const
759
// Return the geometric dimension of the coordinates this dof map provides
760
virtual unsigned int geometric_dimension() const
765
/// Return the number of dofs on each cell facet
766
virtual unsigned int num_facet_dofs() const
771
/// Return the number of dofs associated with each cell entity of dimension d
772
virtual unsigned int num_entity_dofs(unsigned int d) const
774
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
777
/// Tabulate the local-to-global mapping of dofs on a cell
778
virtual void tabulate_dofs(unsigned int* dofs,
780
const ufc::cell& c) const
782
dofs[0] = 10*c.entity_indices[3][0];
783
dofs[1] = 10*c.entity_indices[3][0] + 1;
784
dofs[2] = 10*c.entity_indices[3][0] + 2;
785
dofs[3] = 10*c.entity_indices[3][0] + 3;
786
dofs[4] = 10*c.entity_indices[3][0] + 4;
787
dofs[5] = 10*c.entity_indices[3][0] + 5;
788
dofs[6] = 10*c.entity_indices[3][0] + 6;
789
dofs[7] = 10*c.entity_indices[3][0] + 7;
790
dofs[8] = 10*c.entity_indices[3][0] + 8;
791
dofs[9] = 10*c.entity_indices[3][0] + 9;
794
/// Tabulate the local-to-local mapping from facet dofs to cell dofs
795
virtual void tabulate_facet_dofs(unsigned int* dofs,
796
unsigned int facet) const
815
/// Tabulate the local-to-local mapping of dofs on entity (d, i)
816
virtual void tabulate_entity_dofs(unsigned int* dofs,
817
unsigned int d, unsigned int i) const
819
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
822
/// Tabulate the coordinates of all dofs on a cell
823
virtual void tabulate_coordinates(double** coordinates,
824
const ufc::cell& c) const
826
const double * const * x = c.coordinates;
827
coordinates[0][0] = x[0][0];
828
coordinates[0][1] = x[0][1];
829
coordinates[0][2] = x[0][2];
830
coordinates[1][0] = 0.5*x[0][0] + 0.5*x[1][0];
831
coordinates[1][1] = 0.5*x[0][1] + 0.5*x[1][1];
832
coordinates[1][2] = 0.5*x[0][2] + 0.5*x[1][2];
833
coordinates[2][0] = x[1][0];
834
coordinates[2][1] = x[1][1];
835
coordinates[2][2] = x[1][2];
836
coordinates[3][0] = 0.5*x[0][0] + 0.5*x[2][0];
837
coordinates[3][1] = 0.5*x[0][1] + 0.5*x[2][1];
838
coordinates[3][2] = 0.5*x[0][2] + 0.5*x[2][2];
839
coordinates[4][0] = 0.5*x[1][0] + 0.5*x[2][0];
840
coordinates[4][1] = 0.5*x[1][1] + 0.5*x[2][1];
841
coordinates[4][2] = 0.5*x[1][2] + 0.5*x[2][2];
842
coordinates[5][0] = x[2][0];
843
coordinates[5][1] = x[2][1];
844
coordinates[5][2] = x[2][2];
845
coordinates[6][0] = 0.5*x[0][0] + 0.5*x[3][0];
846
coordinates[6][1] = 0.5*x[0][1] + 0.5*x[3][1];
847
coordinates[6][2] = 0.5*x[0][2] + 0.5*x[3][2];
848
coordinates[7][0] = 0.5*x[1][0] + 0.5*x[3][0];
849
coordinates[7][1] = 0.5*x[1][1] + 0.5*x[3][1];
850
coordinates[7][2] = 0.5*x[1][2] + 0.5*x[3][2];
851
coordinates[8][0] = 0.5*x[2][0] + 0.5*x[3][0];
852
coordinates[8][1] = 0.5*x[2][1] + 0.5*x[3][1];
853
coordinates[8][2] = 0.5*x[2][2] + 0.5*x[3][2];
854
coordinates[9][0] = x[3][0];
855
coordinates[9][1] = x[3][1];
856
coordinates[9][2] = x[3][2];
859
/// Return the number of sub dof maps (for a mixed element)
860
virtual unsigned int num_sub_dof_maps() const
865
/// Create a new dof_map for sub dof map i (for a mixed element)
866
virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const
868
return new ffc_23_dof_map_0_0();
873
/// This class defines the interface for a local-to-global mapping of
874
/// degrees of freedom (dofs).
876
class ffc_23_dof_map_0_1: public ufc::dof_map
880
unsigned int __global_dimension;
885
ffc_23_dof_map_0_1() : ufc::dof_map()
887
__global_dimension = 0;
891
virtual ~ffc_23_dof_map_0_1()
896
/// Return a string identifying the dof map
897
virtual const char* signature() const
899
return "FFC dof map for Discontinuous Lagrange finite element of degree 2 on a tetrahedron";
902
/// Return true iff mesh entities of topological dimension d are needed
903
virtual bool needs_mesh_entities(unsigned int d) const
923
/// Initialize dof map for mesh (return true iff init_cell() is needed)
924
virtual bool init_mesh(const ufc::mesh& m)
926
__global_dimension = 10*m.num_entities[3];
930
/// Initialize dof map for given cell
931
virtual void init_cell(const ufc::mesh& m,
937
/// Finish initialization of dof map for cells
938
virtual void init_cell_finalize()
943
/// Return the dimension of the global finite element function space
944
virtual unsigned int global_dimension() const
946
return __global_dimension;
949
/// Return the dimension of the local finite element function space
950
virtual unsigned int local_dimension() const
955
// Return the geometric dimension of the coordinates this dof map provides
956
virtual unsigned int geometric_dimension() const
961
/// Return the number of dofs on each cell facet
962
virtual unsigned int num_facet_dofs() const
967
/// Return the number of dofs associated with each cell entity of dimension d
968
virtual unsigned int num_entity_dofs(unsigned int d) const
970
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
973
/// Tabulate the local-to-global mapping of dofs on a cell
974
virtual void tabulate_dofs(unsigned int* dofs,
976
const ufc::cell& c) const
978
dofs[0] = 10*c.entity_indices[3][0];
979
dofs[1] = 10*c.entity_indices[3][0] + 1;
980
dofs[2] = 10*c.entity_indices[3][0] + 2;
981
dofs[3] = 10*c.entity_indices[3][0] + 3;
982
dofs[4] = 10*c.entity_indices[3][0] + 4;
983
dofs[5] = 10*c.entity_indices[3][0] + 5;
984
dofs[6] = 10*c.entity_indices[3][0] + 6;
985
dofs[7] = 10*c.entity_indices[3][0] + 7;
986
dofs[8] = 10*c.entity_indices[3][0] + 8;
987
dofs[9] = 10*c.entity_indices[3][0] + 9;
990
/// Tabulate the local-to-local mapping from facet dofs to cell dofs
991
virtual void tabulate_facet_dofs(unsigned int* dofs,
992
unsigned int facet) const
1011
/// Tabulate the local-to-local mapping of dofs on entity (d, i)
1012
virtual void tabulate_entity_dofs(unsigned int* dofs,
1013
unsigned int d, unsigned int i) const
1015
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
1018
/// Tabulate the coordinates of all dofs on a cell
1019
virtual void tabulate_coordinates(double** coordinates,
1020
const ufc::cell& c) const
1022
const double * const * x = c.coordinates;
1023
coordinates[0][0] = x[0][0];
1024
coordinates[0][1] = x[0][1];
1025
coordinates[0][2] = x[0][2];
1026
coordinates[1][0] = 0.5*x[0][0] + 0.5*x[1][0];
1027
coordinates[1][1] = 0.5*x[0][1] + 0.5*x[1][1];
1028
coordinates[1][2] = 0.5*x[0][2] + 0.5*x[1][2];
1029
coordinates[2][0] = x[1][0];
1030
coordinates[2][1] = x[1][1];
1031
coordinates[2][2] = x[1][2];
1032
coordinates[3][0] = 0.5*x[0][0] + 0.5*x[2][0];
1033
coordinates[3][1] = 0.5*x[0][1] + 0.5*x[2][1];
1034
coordinates[3][2] = 0.5*x[0][2] + 0.5*x[2][2];
1035
coordinates[4][0] = 0.5*x[1][0] + 0.5*x[2][0];
1036
coordinates[4][1] = 0.5*x[1][1] + 0.5*x[2][1];
1037
coordinates[4][2] = 0.5*x[1][2] + 0.5*x[2][2];
1038
coordinates[5][0] = x[2][0];
1039
coordinates[5][1] = x[2][1];
1040
coordinates[5][2] = x[2][2];
1041
coordinates[6][0] = 0.5*x[0][0] + 0.5*x[3][0];
1042
coordinates[6][1] = 0.5*x[0][1] + 0.5*x[3][1];
1043
coordinates[6][2] = 0.5*x[0][2] + 0.5*x[3][2];
1044
coordinates[7][0] = 0.5*x[1][0] + 0.5*x[3][0];
1045
coordinates[7][1] = 0.5*x[1][1] + 0.5*x[3][1];
1046
coordinates[7][2] = 0.5*x[1][2] + 0.5*x[3][2];
1047
coordinates[8][0] = 0.5*x[2][0] + 0.5*x[3][0];
1048
coordinates[8][1] = 0.5*x[2][1] + 0.5*x[3][1];
1049
coordinates[8][2] = 0.5*x[2][2] + 0.5*x[3][2];
1050
coordinates[9][0] = x[3][0];
1051
coordinates[9][1] = x[3][1];
1052
coordinates[9][2] = x[3][2];
1055
/// Return the number of sub dof maps (for a mixed element)
1056
virtual unsigned int num_sub_dof_maps() const
1061
/// Create a new dof_map for sub dof map i (for a mixed element)
1062
virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const
1064
return new ffc_23_dof_map_0_1();
1069
/// This class defines the interface for a local-to-global mapping of
1070
/// degrees of freedom (dofs).
1072
class ffc_23_dof_map_0_2: public ufc::dof_map
1076
unsigned int __global_dimension;
1081
ffc_23_dof_map_0_2() : ufc::dof_map()
1083
__global_dimension = 0;
1087
virtual ~ffc_23_dof_map_0_2()
1092
/// Return a string identifying the dof map
1093
virtual const char* signature() const
1095
return "FFC dof map for Discontinuous Lagrange finite element of degree 2 on a tetrahedron";
1098
/// Return true iff mesh entities of topological dimension d are needed
1099
virtual bool needs_mesh_entities(unsigned int d) const
1119
/// Initialize dof map for mesh (return true iff init_cell() is needed)
1120
virtual bool init_mesh(const ufc::mesh& m)
1122
__global_dimension = 10*m.num_entities[3];
1126
/// Initialize dof map for given cell
1127
virtual void init_cell(const ufc::mesh& m,
1133
/// Finish initialization of dof map for cells
1134
virtual void init_cell_finalize()
1139
/// Return the dimension of the global finite element function space
1140
virtual unsigned int global_dimension() const
1142
return __global_dimension;
1145
/// Return the dimension of the local finite element function space
1146
virtual unsigned int local_dimension() const
1151
// Return the geometric dimension of the coordinates this dof map provides
1152
virtual unsigned int geometric_dimension() const
1157
/// Return the number of dofs on each cell facet
1158
virtual unsigned int num_facet_dofs() const
1163
/// Return the number of dofs associated with each cell entity of dimension d
1164
virtual unsigned int num_entity_dofs(unsigned int d) const
1166
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
1169
/// Tabulate the local-to-global mapping of dofs on a cell
1170
virtual void tabulate_dofs(unsigned int* dofs,
1172
const ufc::cell& c) const
1174
dofs[0] = 10*c.entity_indices[3][0];
1175
dofs[1] = 10*c.entity_indices[3][0] + 1;
1176
dofs[2] = 10*c.entity_indices[3][0] + 2;
1177
dofs[3] = 10*c.entity_indices[3][0] + 3;
1178
dofs[4] = 10*c.entity_indices[3][0] + 4;
1179
dofs[5] = 10*c.entity_indices[3][0] + 5;
1180
dofs[6] = 10*c.entity_indices[3][0] + 6;
1181
dofs[7] = 10*c.entity_indices[3][0] + 7;
1182
dofs[8] = 10*c.entity_indices[3][0] + 8;
1183
dofs[9] = 10*c.entity_indices[3][0] + 9;
1186
/// Tabulate the local-to-local mapping from facet dofs to cell dofs
1187
virtual void tabulate_facet_dofs(unsigned int* dofs,
1188
unsigned int facet) const
1207
/// Tabulate the local-to-local mapping of dofs on entity (d, i)
1208
virtual void tabulate_entity_dofs(unsigned int* dofs,
1209
unsigned int d, unsigned int i) const
1211
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
1214
/// Tabulate the coordinates of all dofs on a cell
1215
virtual void tabulate_coordinates(double** coordinates,
1216
const ufc::cell& c) const
1218
const double * const * x = c.coordinates;
1219
coordinates[0][0] = x[0][0];
1220
coordinates[0][1] = x[0][1];
1221
coordinates[0][2] = x[0][2];
1222
coordinates[1][0] = 0.5*x[0][0] + 0.5*x[1][0];
1223
coordinates[1][1] = 0.5*x[0][1] + 0.5*x[1][1];
1224
coordinates[1][2] = 0.5*x[0][2] + 0.5*x[1][2];
1225
coordinates[2][0] = x[1][0];
1226
coordinates[2][1] = x[1][1];
1227
coordinates[2][2] = x[1][2];
1228
coordinates[3][0] = 0.5*x[0][0] + 0.5*x[2][0];
1229
coordinates[3][1] = 0.5*x[0][1] + 0.5*x[2][1];
1230
coordinates[3][2] = 0.5*x[0][2] + 0.5*x[2][2];
1231
coordinates[4][0] = 0.5*x[1][0] + 0.5*x[2][0];
1232
coordinates[4][1] = 0.5*x[1][1] + 0.5*x[2][1];
1233
coordinates[4][2] = 0.5*x[1][2] + 0.5*x[2][2];
1234
coordinates[5][0] = x[2][0];
1235
coordinates[5][1] = x[2][1];
1236
coordinates[5][2] = x[2][2];
1237
coordinates[6][0] = 0.5*x[0][0] + 0.5*x[3][0];
1238
coordinates[6][1] = 0.5*x[0][1] + 0.5*x[3][1];
1239
coordinates[6][2] = 0.5*x[0][2] + 0.5*x[3][2];
1240
coordinates[7][0] = 0.5*x[1][0] + 0.5*x[3][0];
1241
coordinates[7][1] = 0.5*x[1][1] + 0.5*x[3][1];
1242
coordinates[7][2] = 0.5*x[1][2] + 0.5*x[3][2];
1243
coordinates[8][0] = 0.5*x[2][0] + 0.5*x[3][0];
1244
coordinates[8][1] = 0.5*x[2][1] + 0.5*x[3][1];
1245
coordinates[8][2] = 0.5*x[2][2] + 0.5*x[3][2];
1246
coordinates[9][0] = x[3][0];
1247
coordinates[9][1] = x[3][1];
1248
coordinates[9][2] = x[3][2];
1251
/// Return the number of sub dof maps (for a mixed element)
1252
virtual unsigned int num_sub_dof_maps() const
1257
/// Create a new dof_map for sub dof map i (for a mixed element)
1258
virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const
1260
return new ffc_23_dof_map_0_2();
1265
/// This class defines the interface for a local-to-global mapping of
1266
/// degrees of freedom (dofs).
1268
class ffc_23_dof_map_0: public ufc::dof_map
1272
unsigned int __global_dimension;
1277
ffc_23_dof_map_0() : ufc::dof_map()
1279
__global_dimension = 0;
1283
virtual ~ffc_23_dof_map_0()
1288
/// Return a string identifying the dof map
1289
virtual const char* signature() const
1291
return "FFC dof map for Mixed finite element: [Discontinuous Lagrange finite element of degree 2 on a tetrahedron, Discontinuous Lagrange finite element of degree 2 on a tetrahedron, Discontinuous Lagrange finite element of degree 2 on a tetrahedron]";
1294
/// Return true iff mesh entities of topological dimension d are needed
1295
virtual bool needs_mesh_entities(unsigned int d) const
1315
/// Initialize dof map for mesh (return true iff init_cell() is needed)
1316
virtual bool init_mesh(const ufc::mesh& m)
1318
__global_dimension = 30*m.num_entities[3];
1322
/// Initialize dof map for given cell
1323
virtual void init_cell(const ufc::mesh& m,
1329
/// Finish initialization of dof map for cells
1330
virtual void init_cell_finalize()
1335
/// Return the dimension of the global finite element function space
1336
virtual unsigned int global_dimension() const
1338
return __global_dimension;
1341
/// Return the dimension of the local finite element function space
1342
virtual unsigned int local_dimension() const
1347
// Return the geometric dimension of the coordinates this dof map provides
1348
virtual unsigned int geometric_dimension() const
1353
/// Return the number of dofs on each cell facet
1354
virtual unsigned int num_facet_dofs() const
1359
/// Return the number of dofs associated with each cell entity of dimension d
1360
virtual unsigned int num_entity_dofs(unsigned int d) const
1362
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
1365
/// Tabulate the local-to-global mapping of dofs on a cell
1366
virtual void tabulate_dofs(unsigned int* dofs,
1368
const ufc::cell& c) const
1370
dofs[0] = 10*c.entity_indices[3][0];
1371
dofs[1] = 10*c.entity_indices[3][0] + 1;
1372
dofs[2] = 10*c.entity_indices[3][0] + 2;
1373
dofs[3] = 10*c.entity_indices[3][0] + 3;
1374
dofs[4] = 10*c.entity_indices[3][0] + 4;
1375
dofs[5] = 10*c.entity_indices[3][0] + 5;
1376
dofs[6] = 10*c.entity_indices[3][0] + 6;
1377
dofs[7] = 10*c.entity_indices[3][0] + 7;
1378
dofs[8] = 10*c.entity_indices[3][0] + 8;
1379
dofs[9] = 10*c.entity_indices[3][0] + 9;
1380
unsigned int offset = 10*m.num_entities[3];
1381
dofs[10] = offset + 10*c.entity_indices[3][0];
1382
dofs[11] = offset + 10*c.entity_indices[3][0] + 1;
1383
dofs[12] = offset + 10*c.entity_indices[3][0] + 2;
1384
dofs[13] = offset + 10*c.entity_indices[3][0] + 3;
1385
dofs[14] = offset + 10*c.entity_indices[3][0] + 4;
1386
dofs[15] = offset + 10*c.entity_indices[3][0] + 5;
1387
dofs[16] = offset + 10*c.entity_indices[3][0] + 6;
1388
dofs[17] = offset + 10*c.entity_indices[3][0] + 7;
1389
dofs[18] = offset + 10*c.entity_indices[3][0] + 8;
1390
dofs[19] = offset + 10*c.entity_indices[3][0] + 9;
1391
offset = offset + 10*m.num_entities[3];
1392
dofs[20] = offset + 10*c.entity_indices[3][0];
1393
dofs[21] = offset + 10*c.entity_indices[3][0] + 1;
1394
dofs[22] = offset + 10*c.entity_indices[3][0] + 2;
1395
dofs[23] = offset + 10*c.entity_indices[3][0] + 3;
1396
dofs[24] = offset + 10*c.entity_indices[3][0] + 4;
1397
dofs[25] = offset + 10*c.entity_indices[3][0] + 5;
1398
dofs[26] = offset + 10*c.entity_indices[3][0] + 6;
1399
dofs[27] = offset + 10*c.entity_indices[3][0] + 7;
1400
dofs[28] = offset + 10*c.entity_indices[3][0] + 8;
1401
dofs[29] = offset + 10*c.entity_indices[3][0] + 9;
1404
/// Tabulate the local-to-local mapping from facet dofs to cell dofs
1405
virtual void tabulate_facet_dofs(unsigned int* dofs,
1406
unsigned int facet) const
1425
/// Tabulate the local-to-local mapping of dofs on entity (d, i)
1426
virtual void tabulate_entity_dofs(unsigned int* dofs,
1427
unsigned int d, unsigned int i) const
1429
throw std::runtime_error("Not implemented (introduced in UFC v1.1).");
1432
/// Tabulate the coordinates of all dofs on a cell
1433
virtual void tabulate_coordinates(double** coordinates,
1434
const ufc::cell& c) const
1436
const double * const * x = c.coordinates;
1437
coordinates[0][0] = x[0][0];
1438
coordinates[0][1] = x[0][1];
1439
coordinates[0][2] = x[0][2];
1440
coordinates[1][0] = 0.5*x[0][0] + 0.5*x[1][0];
1441
coordinates[1][1] = 0.5*x[0][1] + 0.5*x[1][1];
1442
coordinates[1][2] = 0.5*x[0][2] + 0.5*x[1][2];
1443
coordinates[2][0] = x[1][0];
1444
coordinates[2][1] = x[1][1];
1445
coordinates[2][2] = x[1][2];
1446
coordinates[3][0] = 0.5*x[0][0] + 0.5*x[2][0];
1447
coordinates[3][1] = 0.5*x[0][1] + 0.5*x[2][1];
1448
coordinates[3][2] = 0.5*x[0][2] + 0.5*x[2][2];
1449
coordinates[4][0] = 0.5*x[1][0] + 0.5*x[2][0];
1450
coordinates[4][1] = 0.5*x[1][1] + 0.5*x[2][1];
1451
coordinates[4][2] = 0.5*x[1][2] + 0.5*x[2][2];
1452
coordinates[5][0] = x[2][0];
1453
coordinates[5][1] = x[2][1];
1454
coordinates[5][2] = x[2][2];
1455
coordinates[6][0] = 0.5*x[0][0] + 0.5*x[3][0];
1456
coordinates[6][1] = 0.5*x[0][1] + 0.5*x[3][1];
1457
coordinates[6][2] = 0.5*x[0][2] + 0.5*x[3][2];
1458
coordinates[7][0] = 0.5*x[1][0] + 0.5*x[3][0];
1459
coordinates[7][1] = 0.5*x[1][1] + 0.5*x[3][1];
1460
coordinates[7][2] = 0.5*x[1][2] + 0.5*x[3][2];
1461
coordinates[8][0] = 0.5*x[2][0] + 0.5*x[3][0];
1462
coordinates[8][1] = 0.5*x[2][1] + 0.5*x[3][1];
1463
coordinates[8][2] = 0.5*x[2][2] + 0.5*x[3][2];
1464
coordinates[9][0] = x[3][0];
1465
coordinates[9][1] = x[3][1];
1466
coordinates[9][2] = x[3][2];
1467
coordinates[10][0] = x[0][0];
1468
coordinates[10][1] = x[0][1];
1469
coordinates[10][2] = x[0][2];
1470
coordinates[11][0] = 0.5*x[0][0] + 0.5*x[1][0];
1471
coordinates[11][1] = 0.5*x[0][1] + 0.5*x[1][1];
1472
coordinates[11][2] = 0.5*x[0][2] + 0.5*x[1][2];
1473
coordinates[12][0] = x[1][0];
1474
coordinates[12][1] = x[1][1];
1475
coordinates[12][2] = x[1][2];
1476
coordinates[13][0] = 0.5*x[0][0] + 0.5*x[2][0];
1477
coordinates[13][1] = 0.5*x[0][1] + 0.5*x[2][1];
1478
coordinates[13][2] = 0.5*x[0][2] + 0.5*x[2][2];
1479
coordinates[14][0] = 0.5*x[1][0] + 0.5*x[2][0];
1480
coordinates[14][1] = 0.5*x[1][1] + 0.5*x[2][1];
1481
coordinates[14][2] = 0.5*x[1][2] + 0.5*x[2][2];
1482
coordinates[15][0] = x[2][0];
1483
coordinates[15][1] = x[2][1];
1484
coordinates[15][2] = x[2][2];
1485
coordinates[16][0] = 0.5*x[0][0] + 0.5*x[3][0];
1486
coordinates[16][1] = 0.5*x[0][1] + 0.5*x[3][1];
1487
coordinates[16][2] = 0.5*x[0][2] + 0.5*x[3][2];
1488
coordinates[17][0] = 0.5*x[1][0] + 0.5*x[3][0];
1489
coordinates[17][1] = 0.5*x[1][1] + 0.5*x[3][1];
1490
coordinates[17][2] = 0.5*x[1][2] + 0.5*x[3][2];
1491
coordinates[18][0] = 0.5*x[2][0] + 0.5*x[3][0];
1492
coordinates[18][1] = 0.5*x[2][1] + 0.5*x[3][1];
1493
coordinates[18][2] = 0.5*x[2][2] + 0.5*x[3][2];
1494
coordinates[19][0] = x[3][0];
1495
coordinates[19][1] = x[3][1];
1496
coordinates[19][2] = x[3][2];
1497
coordinates[20][0] = x[0][0];
1498
coordinates[20][1] = x[0][1];
1499
coordinates[20][2] = x[0][2];
1500
coordinates[21][0] = 0.5*x[0][0] + 0.5*x[1][0];
1501
coordinates[21][1] = 0.5*x[0][1] + 0.5*x[1][1];
1502
coordinates[21][2] = 0.5*x[0][2] + 0.5*x[1][2];
1503
coordinates[22][0] = x[1][0];
1504
coordinates[22][1] = x[1][1];
1505
coordinates[22][2] = x[1][2];
1506
coordinates[23][0] = 0.5*x[0][0] + 0.5*x[2][0];
1507
coordinates[23][1] = 0.5*x[0][1] + 0.5*x[2][1];
1508
coordinates[23][2] = 0.5*x[0][2] + 0.5*x[2][2];
1509
coordinates[24][0] = 0.5*x[1][0] + 0.5*x[2][0];
1510
coordinates[24][1] = 0.5*x[1][1] + 0.5*x[2][1];
1511
coordinates[24][2] = 0.5*x[1][2] + 0.5*x[2][2];
1512
coordinates[25][0] = x[2][0];
1513
coordinates[25][1] = x[2][1];
1514
coordinates[25][2] = x[2][2];
1515
coordinates[26][0] = 0.5*x[0][0] + 0.5*x[3][0];
1516
coordinates[26][1] = 0.5*x[0][1] + 0.5*x[3][1];
1517
coordinates[26][2] = 0.5*x[0][2] + 0.5*x[3][2];
1518
coordinates[27][0] = 0.5*x[1][0] + 0.5*x[3][0];
1519
coordinates[27][1] = 0.5*x[1][1] + 0.5*x[3][1];
1520
coordinates[27][2] = 0.5*x[1][2] + 0.5*x[3][2];
1521
coordinates[28][0] = 0.5*x[2][0] + 0.5*x[3][0];
1522
coordinates[28][1] = 0.5*x[2][1] + 0.5*x[3][1];
1523
coordinates[28][2] = 0.5*x[2][2] + 0.5*x[3][2];
1524
coordinates[29][0] = x[3][0];
1525
coordinates[29][1] = x[3][1];
1526
coordinates[29][2] = x[3][2];
1529
/// Return the number of sub dof maps (for a mixed element)
1530
virtual unsigned int num_sub_dof_maps() const
1535
/// Create a new dof_map for sub dof map i (for a mixed element)
1536
virtual ufc::dof_map* create_sub_dof_map(unsigned int i) const
1541
return new ffc_23_dof_map_0_0();
1544
return new ffc_23_dof_map_0_1();
1547
return new ffc_23_dof_map_0_2();