64
64
/// Return the topological dimension of the cell shape
65
virtual unsigned int topological_dimension() const
65
virtual std::size_t topological_dimension() const
70
70
/// Return the geometric dimension of the cell shape
71
virtual unsigned int geometric_dimension() const
71
virtual std::size_t geometric_dimension() const
76
76
/// Return the dimension of the finite element function space
77
virtual unsigned int space_dimension() const
77
virtual std::size_t space_dimension() const
82
82
/// Return the rank of the value space
83
virtual unsigned int value_rank() const
83
virtual std::size_t value_rank() const
88
88
/// Return the dimension of the value space for axis i
89
virtual unsigned int value_dimension(unsigned int i) const
89
virtual std::size_t value_dimension(std::size_t i) const
94
/// Evaluate basis function i at given point in cell
95
virtual void evaluate_basis(unsigned int i,
94
/// Evaluate basis function i at given point x in cell
95
virtual void evaluate_basis(std::size_t i,
97
const double* coordinates,
98
const ufc::cell& c) const
98
const double* vertex_coordinates,
99
int cell_orientation) const
100
// Extract vertex coordinates
101
const double * const * x = c.coordinates;
103
// Compute Jacobian of affine map from reference cell
104
const double J_00 = x[1][0] - x[0][0];
105
const double J_01 = x[2][0] - x[0][0];
106
const double J_02 = x[3][0] - x[0][0];
107
const double J_10 = x[1][1] - x[0][1];
108
const double J_11 = x[2][1] - x[0][1];
109
const double J_12 = x[3][1] - x[0][1];
110
const double J_20 = x[1][2] - x[0][2];
111
const double J_21 = x[2][2] - x[0][2];
112
const double J_22 = x[3][2] - x[0][2];
114
// Compute sub determinants
115
const double d_00 = J_11*J_22 - J_12*J_21;
116
const double d_01 = J_12*J_20 - J_10*J_22;
117
const double d_02 = J_10*J_21 - J_11*J_20;
118
const double d_10 = J_02*J_21 - J_01*J_22;
119
const double d_11 = J_00*J_22 - J_02*J_20;
120
const double d_12 = J_01*J_20 - J_00*J_21;
121
const double d_20 = J_01*J_12 - J_02*J_11;
122
const double d_21 = J_02*J_10 - J_00*J_12;
123
const double d_22 = J_00*J_11 - J_01*J_10;
125
// Compute determinant of Jacobian
126
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
128
// Compute inverse of Jacobian
103
compute_jacobian_tetrahedron_3d(J, vertex_coordinates);
105
// Compute Jacobian inverse and determinant
108
compute_jacobian_inverse_tetrahedron_3d(K, detJ, J);
130
111
// Compute constants
131
const double C0 = x[3][0] + x[2][0] + x[1][0] - x[0][0];
132
const double C1 = x[3][1] + x[2][1] + x[1][1] - x[0][1];
133
const double C2 = x[3][2] + x[2][2] + x[1][2] - x[0][2];
112
const double C0 = vertex_coordinates[9] + vertex_coordinates[6] + vertex_coordinates[3] - vertex_coordinates[0];
113
const double C1 = vertex_coordinates[10] + vertex_coordinates[7] + vertex_coordinates[4] - vertex_coordinates[1];
114
const double C2 = vertex_coordinates[11] + vertex_coordinates[8] + vertex_coordinates[5] - vertex_coordinates[2];
116
// Compute subdeterminants
117
const double d_00 = J[4]*J[8] - J[5]*J[7];
118
const double d_01 = J[5]*J[6] - J[3]*J[8];
119
const double d_02 = J[3]*J[7] - J[4]*J[6];
120
const double d_10 = J[2]*J[7] - J[1]*J[8];
121
const double d_11 = J[0]*J[8] - J[2]*J[6];
122
const double d_12 = J[1]*J[6] - J[0]*J[7];
123
const double d_20 = J[1]*J[5] - J[2]*J[4];
124
const double d_21 = J[2]*J[3] - J[0]*J[5];
125
const double d_22 = J[0]*J[4] - J[1]*J[3];
135
127
// Get coordinates and map to the reference (FIAT) element
136
double X = (d_00*(2.0*coordinates[0] - C0) + d_10*(2.0*coordinates[1] - C1) + d_20*(2.0*coordinates[2] - C2)) / detJ;
137
double Y = (d_01*(2.0*coordinates[0] - C0) + d_11*(2.0*coordinates[1] - C1) + d_21*(2.0*coordinates[2] - C2)) / detJ;
138
double Z = (d_02*(2.0*coordinates[0] - C0) + d_12*(2.0*coordinates[1] - C1) + d_22*(2.0*coordinates[2] - C2)) / detJ;
128
double X = (d_00*(2.0*x[0] - C0) + d_10*(2.0*x[1] - C1) + d_20*(2.0*x[2] - C2)) / detJ;
129
double Y = (d_01*(2.0*x[0] - C0) + d_11*(2.0*x[1] - C1) + d_21*(2.0*x[2] - C2)) / detJ;
130
double Z = (d_02*(2.0*x[0] - C0) + d_12*(2.0*x[1] - C1) + d_22*(2.0*x[2] - C2)) / detJ;
148
// Array of basisvalues.
140
// Array of basisvalues
149
141
double basisvalues[4] = {0.0, 0.0, 0.0, 0.0};
151
// Declare helper variables.
143
// Declare helper variables
152
144
double tmp0 = 0.5*(2.0 + Y + Z + 2.0*X);
154
// Compute basisvalues.
146
// Compute basisvalues
155
147
basisvalues[0] = 1.0;
156
148
basisvalues[1] = tmp0;
157
149
basisvalues[2] = 0.5*(2.0 + 3.0*Y + Z)*basisvalues[0];
269
/// Evaluate all basis functions at given point in cell
261
/// Evaluate all basis functions at given point x in cell
270
262
virtual void evaluate_basis_all(double* values,
271
const double* coordinates,
272
const ufc::cell& c) const
264
const double* vertex_coordinates,
265
int cell_orientation) const
274
267
// Helper variable to hold values of a single dof.
275
268
double dof_values = 0.0;
277
// Loop dofs and call evaluate_basis.
270
// Loop dofs and call evaluate_basis
278
271
for (unsigned int r = 0; r < 4; r++)
280
evaluate_basis(r, &dof_values, coordinates, c);
273
evaluate_basis(r, &dof_values, x, vertex_coordinates, cell_orientation);
281
274
values[r] = dof_values;
282
275
}// end loop over 'r'
285
/// Evaluate order n derivatives of basis function i at given point in cell
286
virtual void evaluate_basis_derivatives(unsigned int i,
278
/// Evaluate order n derivatives of basis function i at given point x in cell
279
virtual void evaluate_basis_derivatives(std::size_t i,
289
const double* coordinates,
290
const ufc::cell& c) const
283
const double* vertex_coordinates,
284
int cell_orientation) const
292
// Extract vertex coordinates
293
const double * const * x = c.coordinates;
295
// Compute Jacobian of affine map from reference cell
296
const double J_00 = x[1][0] - x[0][0];
297
const double J_01 = x[2][0] - x[0][0];
298
const double J_02 = x[3][0] - x[0][0];
299
const double J_10 = x[1][1] - x[0][1];
300
const double J_11 = x[2][1] - x[0][1];
301
const double J_12 = x[3][1] - x[0][1];
302
const double J_20 = x[1][2] - x[0][2];
303
const double J_21 = x[2][2] - x[0][2];
304
const double J_22 = x[3][2] - x[0][2];
306
// Compute sub determinants
307
const double d_00 = J_11*J_22 - J_12*J_21;
308
const double d_01 = J_12*J_20 - J_10*J_22;
309
const double d_02 = J_10*J_21 - J_11*J_20;
310
const double d_10 = J_02*J_21 - J_01*J_22;
311
const double d_11 = J_00*J_22 - J_02*J_20;
312
const double d_12 = J_01*J_20 - J_00*J_21;
313
const double d_20 = J_01*J_12 - J_02*J_11;
314
const double d_21 = J_02*J_10 - J_00*J_12;
315
const double d_22 = J_00*J_11 - J_01*J_10;
317
// Compute determinant of Jacobian
318
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
320
// Compute inverse of Jacobian
321
const double K_00 = d_00 / detJ;
322
const double K_01 = d_10 / detJ;
323
const double K_02 = d_20 / detJ;
324
const double K_10 = d_01 / detJ;
325
const double K_11 = d_11 / detJ;
326
const double K_12 = d_21 / detJ;
327
const double K_20 = d_02 / detJ;
328
const double K_21 = d_12 / detJ;
329
const double K_22 = d_22 / detJ;
288
compute_jacobian_tetrahedron_3d(J, vertex_coordinates);
290
// Compute Jacobian inverse and determinant
293
compute_jacobian_inverse_tetrahedron_3d(K, detJ, J);
331
296
// Compute constants
332
const double C0 = x[3][0] + x[2][0] + x[1][0] - x[0][0];
333
const double C1 = x[3][1] + x[2][1] + x[1][1] - x[0][1];
334
const double C2 = x[3][2] + x[2][2] + x[1][2] - x[0][2];
297
const double C0 = vertex_coordinates[9] + vertex_coordinates[6] + vertex_coordinates[3] - vertex_coordinates[0];
298
const double C1 = vertex_coordinates[10] + vertex_coordinates[7] + vertex_coordinates[4] - vertex_coordinates[1];
299
const double C2 = vertex_coordinates[11] + vertex_coordinates[8] + vertex_coordinates[5] - vertex_coordinates[2];
301
// Compute subdeterminants
302
const double d_00 = J[4]*J[8] - J[5]*J[7];
303
const double d_01 = J[5]*J[6] - J[3]*J[8];
304
const double d_02 = J[3]*J[7] - J[4]*J[6];
305
const double d_10 = J[2]*J[7] - J[1]*J[8];
306
const double d_11 = J[0]*J[8] - J[2]*J[6];
307
const double d_12 = J[1]*J[6] - J[0]*J[7];
308
const double d_20 = J[1]*J[5] - J[2]*J[4];
309
const double d_21 = J[2]*J[3] - J[0]*J[5];
310
const double d_22 = J[0]*J[4] - J[1]*J[3];
336
312
// Get coordinates and map to the reference (FIAT) element
337
double X = (d_00*(2.0*coordinates[0] - C0) + d_10*(2.0*coordinates[1] - C1) + d_20*(2.0*coordinates[2] - C2)) / detJ;
338
double Y = (d_01*(2.0*coordinates[0] - C0) + d_11*(2.0*coordinates[1] - C1) + d_21*(2.0*coordinates[2] - C2)) / detJ;
339
double Z = (d_02*(2.0*coordinates[0] - C0) + d_12*(2.0*coordinates[1] - C1) + d_22*(2.0*coordinates[2] - C2)) / detJ;
313
double X = (d_00*(2.0*x[0] - C0) + d_10*(2.0*x[1] - C1) + d_20*(2.0*x[2] - C2)) / detJ;
314
double Y = (d_01*(2.0*x[0] - C0) + d_11*(2.0*x[1] - C1) + d_21*(2.0*x[2] - C2)) / detJ;
315
double Z = (d_02*(2.0*x[0] - C0) + d_12*(2.0*x[1] - C1) + d_22*(2.0*x[2] - C2)) / detJ;
342
318
// Compute number of derivatives.
1134
1111
/// Evaluate linear functional for dof i on the function f
1135
virtual double evaluate_dof(unsigned int i,
1112
virtual double evaluate_dof(std::size_t i,
1136
1113
const ufc::function& f,
1114
const double* vertex_coordinates,
1115
int cell_orientation,
1137
1116
const ufc::cell& c) const
1139
// Declare variables for result of evaluation.
1118
// Declare variables for result of evaluation
1140
1119
double vals[1];
1142
// Declare variable for physical coordinates.
1121
// Declare variable for physical coordinates
1144
const double * const * x = c.coordinates;
1127
y[0] = vertex_coordinates[0];
1128
y[1] = vertex_coordinates[1];
1129
y[2] = vertex_coordinates[2];
1152
1130
f.evaluate(vals, y, c);
1153
1131
return vals[0];
1136
y[0] = vertex_coordinates[3];
1137
y[1] = vertex_coordinates[4];
1138
y[2] = vertex_coordinates[5];
1161
1139
f.evaluate(vals, y, c);
1162
1140
return vals[0];
1145
y[0] = vertex_coordinates[6];
1146
y[1] = vertex_coordinates[7];
1147
y[2] = vertex_coordinates[8];
1170
1148
f.evaluate(vals, y, c);
1171
1149
return vals[0];
1154
y[0] = vertex_coordinates[9];
1155
y[1] = vertex_coordinates[10];
1156
y[2] = vertex_coordinates[11];
1179
1157
f.evaluate(vals, y, c);
1180
1158
return vals[0];
1188
1166
/// Evaluate linear functionals for all dofs on the function f
1189
1167
virtual void evaluate_dofs(double* values,
1190
1168
const ufc::function& f,
1169
const double* vertex_coordinates,
1170
int cell_orientation,
1191
1171
const ufc::cell& c) const
1193
// Declare variables for result of evaluation.
1173
// Declare variables for result of evaluation
1194
1174
double vals[1];
1196
// Declare variable for physical coordinates.
1176
// Declare variable for physical coordinates
1198
const double * const * x = c.coordinates;
1178
y[0] = vertex_coordinates[0];
1179
y[1] = vertex_coordinates[1];
1180
y[2] = vertex_coordinates[2];
1202
1181
f.evaluate(vals, y, c);
1203
1182
values[0] = vals[0];
1183
y[0] = vertex_coordinates[3];
1184
y[1] = vertex_coordinates[4];
1185
y[2] = vertex_coordinates[5];
1207
1186
f.evaluate(vals, y, c);
1208
1187
values[1] = vals[0];
1188
y[0] = vertex_coordinates[6];
1189
y[1] = vertex_coordinates[7];
1190
y[2] = vertex_coordinates[8];
1212
1191
f.evaluate(vals, y, c);
1213
1192
values[2] = vals[0];
1193
y[0] = vertex_coordinates[9];
1194
y[1] = vertex_coordinates[10];
1195
y[2] = vertex_coordinates[11];
1217
1196
f.evaluate(vals, y, c);
1218
1197
values[3] = vals[0];
1327
/// Initialize dofmap for mesh (return true iff init_cell() is needed)
1328
virtual bool init_mesh(const ufc::mesh& m)
1330
_global_dimension = m.num_entities[0];
1334
/// Initialize dofmap for given cell
1335
virtual void init_cell(const ufc::mesh& m,
1341
/// Finish initialization of dofmap for cells
1342
virtual void init_cell_finalize()
1347
1305
/// Return the topological dimension of the associated cell shape
1348
virtual unsigned int topological_dimension() const
1306
virtual std::size_t topological_dimension() const
1353
1311
/// Return the geometric dimension of the associated cell shape
1354
virtual unsigned int geometric_dimension() const
1312
virtual std::size_t geometric_dimension() const
1359
1317
/// Return the dimension of the global finite element function space
1360
virtual unsigned int global_dimension() const
1318
virtual std::size_t global_dimension(const std::vector<std::size_t>&
1319
num_global_entities) const
1362
return _global_dimension;
1321
return num_global_entities[0];
1365
1324
/// Return the dimension of the local finite element function space for a cell
1366
virtual unsigned int local_dimension(const ufc::cell& c) const
1325
virtual std::size_t local_dimension(const ufc::cell& c) const
1371
1330
/// Return the maximum dimension of the local finite element function space
1372
virtual unsigned int max_local_dimension() const
1331
virtual std::size_t max_local_dimension() const
1377
1336
/// Return the number of dofs on each cell facet
1378
virtual unsigned int num_facet_dofs() const
1337
virtual std::size_t num_facet_dofs() const
1383
1342
/// Return the number of dofs associated with each cell entity of dimension d
1384
virtual unsigned int num_entity_dofs(unsigned int d) const
1343
virtual std::size_t num_entity_dofs(std::size_t d) const
1525
1484
/// Tabulate the coordinates of all dofs on a cell
1526
virtual void tabulate_coordinates(double** coordinates,
1527
const ufc::cell& c) const
1485
virtual void tabulate_coordinates(double** dof_coordinates,
1486
const double* vertex_coordinates) const
1529
const double * const * x = c.coordinates;
1531
coordinates[0][0] = x[0][0];
1532
coordinates[0][1] = x[0][1];
1533
coordinates[0][2] = x[0][2];
1534
coordinates[1][0] = x[1][0];
1535
coordinates[1][1] = x[1][1];
1536
coordinates[1][2] = x[1][2];
1537
coordinates[2][0] = x[2][0];
1538
coordinates[2][1] = x[2][1];
1539
coordinates[2][2] = x[2][2];
1540
coordinates[3][0] = x[3][0];
1541
coordinates[3][1] = x[3][1];
1542
coordinates[3][2] = x[3][2];
1488
dof_coordinates[0][0] = vertex_coordinates[0];
1489
dof_coordinates[0][1] = vertex_coordinates[1];
1490
dof_coordinates[0][2] = vertex_coordinates[2];
1491
dof_coordinates[1][0] = vertex_coordinates[3];
1492
dof_coordinates[1][1] = vertex_coordinates[4];
1493
dof_coordinates[1][2] = vertex_coordinates[5];
1494
dof_coordinates[2][0] = vertex_coordinates[6];
1495
dof_coordinates[2][1] = vertex_coordinates[7];
1496
dof_coordinates[2][2] = vertex_coordinates[8];
1497
dof_coordinates[3][0] = vertex_coordinates[9];
1498
dof_coordinates[3][1] = vertex_coordinates[10];
1499
dof_coordinates[3][2] = vertex_coordinates[11];
1545
1502
/// Return the number of sub dofmaps (for a mixed element)
1546
virtual unsigned int num_sub_dofmaps() const
1503
virtual std::size_t num_sub_dofmaps() const
1551
1508
/// Create a new dofmap for sub dofmap i (for a mixed element)
1552
virtual ufc::dofmap* create_sub_dofmap(unsigned int i) const
1509
virtual ufc::dofmap* create_sub_dofmap(std::size_t i) const
1585
1542
/// Tabulate the tensor for the contribution from a local cell
1586
1543
virtual void tabulate_tensor(double* A,
1587
1544
const double * const * w,
1588
const ufc::cell& c) const
1545
const double* vertex_coordinates,
1546
int cell_orientation) const
1590
// Extract vertex coordinates
1591
const double * const * x = c.coordinates;
1593
// Compute Jacobian of affine map from reference cell
1594
const double J_00 = x[1][0] - x[0][0];
1595
const double J_01 = x[2][0] - x[0][0];
1596
const double J_02 = x[3][0] - x[0][0];
1597
const double J_10 = x[1][1] - x[0][1];
1598
const double J_11 = x[2][1] - x[0][1];
1599
const double J_12 = x[3][1] - x[0][1];
1600
const double J_20 = x[1][2] - x[0][2];
1601
const double J_21 = x[2][2] - x[0][2];
1602
const double J_22 = x[3][2] - x[0][2];
1604
// Compute sub determinants
1605
const double d_00 = J_11*J_22 - J_12*J_21;
1606
const double d_01 = J_12*J_20 - J_10*J_22;
1607
const double d_02 = J_10*J_21 - J_11*J_20;
1608
const double d_10 = J_02*J_21 - J_01*J_22;
1609
const double d_11 = J_00*J_22 - J_02*J_20;
1610
const double d_12 = J_01*J_20 - J_00*J_21;
1611
const double d_20 = J_01*J_12 - J_02*J_11;
1612
const double d_21 = J_02*J_10 - J_00*J_12;
1613
const double d_22 = J_00*J_11 - J_01*J_10;
1615
// Compute determinant of Jacobian
1616
double detJ = J_00*d_00 + J_10*d_10 + J_20*d_20;
1618
// Compute inverse of Jacobian
1619
const double K_00 = d_00 / detJ;
1620
const double K_01 = d_10 / detJ;
1621
const double K_02 = d_20 / detJ;
1622
const double K_10 = d_01 / detJ;
1623
const double K_11 = d_11 / detJ;
1624
const double K_12 = d_21 / detJ;
1625
const double K_20 = d_02 / detJ;
1626
const double K_21 = d_12 / detJ;
1627
const double K_22 = d_22 / detJ;
1550
compute_jacobian_tetrahedron_3d(J, vertex_coordinates);
1552
// Compute Jacobian inverse and determinant
1555
compute_jacobian_inverse_tetrahedron_3d(K, detJ, J);
1629
1557
// Set scale factor
1630
1558
const double det = std::abs(detJ);
1634
// Compute circumradius.
1637
// Facet Area (divide by two because 'det' is scaled by area of reference triangle).
1562
// Compute circumradius
1565
// Facet area (divide by two because 'det' is scaled by area of reference triangle)
1639
1567
// Array of quadrature weights.
1640
1568
static const double W4[4] = {0.041666667, 0.041666667, 0.041666667, 0.041666667};
1667
1595
// Number of operations to compute geometry constants: 39.
1669
G[0] = det*(K_00*K_00 + K_01*K_01 + K_02*K_02);
1670
G[1] = 2.0*det*(K_00*K_10 + K_01*K_11 + K_02*K_12);
1671
G[2] = 2.0*det*(K_00*K_20 + K_01*K_21 + K_02*K_22);
1672
G[3] = det*(K_10*K_10 + K_11*K_11 + K_12*K_12);
1673
G[4] = 2.0*det*(K_10*K_20 + K_11*K_21 + K_12*K_22);
1674
G[5] = det*(K_20*K_20 + K_21*K_21 + K_22*K_22);
1597
G[0] = det*(K[0]*K[0] + K[1]*K[1] + K[2]*K[2]);
1598
G[1] = 2.0*det*(K[0]*K[3] + K[1]*K[4] + K[2]*K[5]);
1599
G[2] = 2.0*det*(K[0]*K[6] + K[1]*K[7] + K[2]*K[8]);
1600
G[3] = det*(K[3]*K[3] + K[4]*K[4] + K[5]*K[5]);
1601
G[4] = 2.0*det*(K[3]*K[6] + K[4]*K[7] + K[5]*K[8]);
1602
G[5] = det*(K[6]*K[6] + K[7]*K[7] + K[8]*K[8]);
1676
1604
// Compute element tensor using UFL quadrature representation
1677
1605
// Optimisations: ('eliminate zeros', True), ('ignore ones', True), ('ignore zero tables', True), ('optimisation', 'simplify_expressions'), ('remove zero terms', True)
1761
1677
/// Return a string identifying the form
1762
1678
virtual const char* signature() const
1764
return "Form([Integral(Sum(IndexSum(Product(Indexed(ComponentTensor(SpatialDerivative(Coefficient(FiniteElement('Lagrange', Cell('tetrahedron', Space(3)), 1, None), 0), MultiIndex((Index(0),), {Index(0): 3})), MultiIndex((Index(0),), {Index(0): 3})), MultiIndex((Index(1),), {Index(1): 3})), Indexed(ComponentTensor(SpatialDerivative(Coefficient(FiniteElement('Lagrange', Cell('tetrahedron', Space(3)), 1, None), 0), MultiIndex((Index(2),), {Index(2): 3})), MultiIndex((Index(2),), {Index(2): 3})), MultiIndex((Index(1),), {Index(1): 3}))), MultiIndex((Index(1),), {Index(1): 3})), Power(Coefficient(FiniteElement('Lagrange', Cell('tetrahedron', Space(3)), 1, None), 0), IntValue(2, (), (), {}))), Measure('cell', 0, None))])";
1680
return "7abe8460e09620e5044bfb708b4424fe7f9dfe92cf8243a0bfb38e99b309f97dcce2d1420f2115612931a31f4dd52073821e8ffd99cab68d0f4e14d9d5f3e207";
1767
1683
/// Return the rank of the global tensor (r)
1768
virtual unsigned int rank() const
1684
virtual std::size_t rank() const
1773
1689
/// Return the number of coefficients (n)
1774
virtual unsigned int num_coefficients() const
1690
virtual std::size_t num_coefficients() const
1779
1695
/// Return the number of cell domains
1780
virtual unsigned int num_cell_domains() const
1696
virtual std::size_t num_cell_domains() const
1785
1701
/// Return the number of exterior facet domains
1786
virtual unsigned int num_exterior_facet_domains() const
1702
virtual std::size_t num_exterior_facet_domains() const
1791
1707
/// Return the number of interior facet domains
1792
virtual unsigned int num_interior_facet_domains() const
1708
virtual std::size_t num_interior_facet_domains() const
1713
/// Return the number of point domains
1714
virtual std::size_t num_point_domains() const
1719
/// Return whether the form has any cell integrals
1720
virtual bool has_cell_integrals() const
1725
/// Return whether the form has any exterior facet integrals
1726
virtual bool has_exterior_facet_integrals() const
1731
/// Return whether the form has any interior facet integrals
1732
virtual bool has_interior_facet_integrals() const
1737
/// Return whether the form has any point integrals
1738
virtual bool has_point_integrals() const
1797
1743
/// Create a new finite element for argument function i
1798
virtual ufc::finite_element* create_finite_element(unsigned int i) const
1744
virtual ufc::finite_element* create_finite_element(std::size_t i) const
1827
1773
/// Create a new cell integral on sub domain i
1828
virtual ufc::cell_integral* create_cell_integral(unsigned int i) const
1774
virtual ufc::cell_integral* create_cell_integral(std::size_t i) const
1834
return new energynorm_cell_integral_0_0();
1842
1779
/// Create a new exterior facet integral on sub domain i
1843
virtual ufc::exterior_facet_integral* create_exterior_facet_integral(unsigned int i) const
1780
virtual ufc::exterior_facet_integral* create_exterior_facet_integral(std::size_t i) const
1848
1785
/// Create a new interior facet integral on sub domain i
1849
virtual ufc::interior_facet_integral* create_interior_facet_integral(unsigned int i) const
1786
virtual ufc::interior_facet_integral* create_interior_facet_integral(std::size_t i) const
1791
/// Create a new point integral on sub domain i
1792
virtual ufc::point_integral* create_point_integral(std::size_t i) const
1797
/// Create a new cell integral on everywhere else
1798
virtual ufc::cell_integral* create_default_cell_integral() const
1800
return new energynorm_cell_integral_0_otherwise();
1803
/// Create a new exterior facet integral on everywhere else
1804
virtual ufc::exterior_facet_integral* create_default_exterior_facet_integral() const
1809
/// Create a new interior facet integral on everywhere else
1810
virtual ufc::interior_facet_integral* create_default_interior_facet_integral() const
1815
/// Create a new point integral on everywhere else
1816
virtual ufc::point_integral* create_default_point_integral() const