~ubuntu-branches/ubuntu/trusty/ffc/trusty

« back to all changes in this revision

Viewing changes to test/regression/references/StabilisedStokes.h

  • Committer: Bazaar Package Importer
  • Author(s): Johannes Ring
  • Date: 2010-02-16 11:52:36 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20100216115236-n1yxo7mlyqq6kzuv
Tags: 0.9.1-1
* New upstream release.
* Update debian/copyright and debian/copyright_hints.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
// This code conforms with the UFC specification version 1.4
2
 
// and was automatically generated by FFC version 0.9.0.
 
2
// and was automatically generated by FFC version 0.9.1.
 
3
// 
 
4
// This code was generated with the following parameters:
 
5
// 
 
6
//   cache_dir:                      ''
 
7
//   convert_exceptions_to_warnings: True
 
8
//   cpp_optimize:                   False
 
9
//   epsilon:                        1e-14
 
10
//   form_postfix:                   True
 
11
//   format:                         'ufc'
 
12
//   log_level:                      10
 
13
//   log_prefix:                     ''
 
14
//   optimize:                       False
 
15
//   output_dir:                     '.'
 
16
//   precision:                      '8'
 
17
//   quadrature_degree:              'auto'
 
18
//   quadrature_rule:                'auto'
 
19
//   representation:                 'auto'
 
20
//   split:                          False
3
21
 
4
22
#ifndef __STABILISEDSTOKES_H
5
23
#define __STABILISEDSTOKES_H
85
103
    double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
86
104
    double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
87
105
    
88
 
    // Reset values
 
106
    // Reset values.
89
107
    *values = 0.00000000;
90
108
    
91
109
    // Map degree of freedom to element degree of freedom
92
110
    const unsigned int dof = i;
93
111
    
94
 
    // Array of basisvalues
 
112
    // Array of basisvalues.
95
113
    double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
96
114
    
97
 
    // Declare helper variables
 
115
    // Declare helper variables.
98
116
    unsigned int rr = 0;
99
117
    unsigned int ss = 0;
100
118
    double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
101
119
    
102
 
    // Compute basisvalues
 
120
    // Compute basisvalues.
103
121
    basisvalues[0] = 1.00000000;
104
122
    basisvalues[1] = tmp0;
105
123
    for (unsigned int r = 0; r < 1; r++)
117
135
      }// end loop over 's'
118
136
    }// end loop over 'r'
119
137
    
120
 
    // Table(s) of coefficients
 
138
    // Table(s) of coefficients.
121
139
    static const double coefficients0[3][3] = \
122
140
    {{0.47140452, -0.28867513, -0.16666667},
123
141
    {0.47140452, 0.28867513, -0.16666667},
180
198
    double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
181
199
    
182
200
    // Compute number of derivatives.
183
 
    unsigned int  num_derivatives = 1;
184
 
    
 
201
    unsigned int num_derivatives = 1;
185
202
    for (unsigned int r = 0; r < n; r++)
186
203
    {
187
204
      num_derivatives *= 2;
247
264
    // Map degree of freedom to element degree of freedom
248
265
    const unsigned int dof = i;
249
266
    
250
 
    // Array of basisvalues
 
267
    // Array of basisvalues.
251
268
    double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
252
269
    
253
 
    // Declare helper variables
 
270
    // Declare helper variables.
254
271
    unsigned int rr = 0;
255
272
    unsigned int ss = 0;
256
273
    double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
257
274
    
258
 
    // Compute basisvalues
 
275
    // Compute basisvalues.
259
276
    basisvalues[0] = 1.00000000;
260
277
    basisvalues[1] = tmp0;
261
278
    for (unsigned int r = 0; r < 1; r++)
273
290
      }// end loop over 's'
274
291
    }// end loop over 'r'
275
292
    
276
 
    // Table(s) of coefficients
 
293
    // Table(s) of coefficients.
277
294
    static const double coefficients0[3][3] = \
278
295
    {{0.47140452, -0.28867513, -0.16666667},
279
296
    {0.47140452, 0.28867513, -0.16666667},
290
307
    {2.44948974, 0.00000000, 0.00000000},
291
308
    {4.24264069, 0.00000000, 0.00000000}};
292
309
    
293
 
    // Compute reference derivatives
294
 
    // Declare pointer to array of derivatives on FIAT element
295
 
    double *derivatives = new double [num_derivatives];
 
310
    // Compute reference derivatives.
 
311
    // Declare pointer to array of derivatives on FIAT element.
 
312
    double *derivatives = new double[num_derivatives];
296
313
    for (unsigned int r = 0; r < num_derivatives; r++)
297
314
    {
298
315
      derivatives[r] = 0.00000000;
380
397
    }// end loop over 'r'
381
398
    
382
399
    // Transform derivatives back to physical element
383
 
    for (unsigned int row = 0; row < num_derivatives; row++)
 
400
    for (unsigned int r = 0; r < num_derivatives; r++)
384
401
    {
385
 
      for (unsigned int col = 0; col < num_derivatives; col++)
 
402
      for (unsigned int s = 0; s < num_derivatives; s++)
386
403
      {
387
 
        values[row] += transform[row][col]*derivatives[col];
388
 
      }
389
 
    }
 
404
        values[r] += transform[r][s]*derivatives[s];
 
405
      }// end loop over 's'
 
406
    }// end loop over 'r'
390
407
    
391
408
    // Delete pointer to array of derivatives on FIAT element
392
409
    delete [] derivatives;
395
412
    for (unsigned int r = 0; r < num_derivatives; r++)
396
413
    {
397
414
      delete [] combinations[r];
 
415
    }// end loop over 'r'
 
416
    delete [] combinations;
 
417
    for (unsigned int r = 0; r < num_derivatives; r++)
 
418
    {
398
419
      delete [] transform[r];
399
420
    }// end loop over 'r'
400
 
    delete [] combinations;
401
421
    delete [] transform;
402
422
  }
403
423
 
408
428
                                              const ufc::cell& c) const
409
429
  {
410
430
    // Compute number of derivatives.
411
 
    unsigned int  num_derivatives = 1;
412
 
    
 
431
    unsigned int num_derivatives = 1;
413
432
    for (unsigned int r = 0; r < n; r++)
414
433
    {
415
434
      num_derivatives *= 2;
416
435
    }// end loop over 'r'
417
436
    
418
437
    // Helper variable to hold values of a single dof.
419
 
    double *dof_values = new double [num_derivatives];
 
438
    double *dof_values = new double[num_derivatives];
420
439
    for (unsigned int r = 0; r < num_derivatives; r++)
421
440
    {
422
441
      dof_values[r] = 0.00000000;
441
460
                              const ufc::function& f,
442
461
                              const ufc::cell& c) const
443
462
  {
444
 
    // Declare variables for result of evaluation
 
463
    // Declare variables for result of evaluation.
445
464
    double vals[1];
446
465
    
447
 
    // Declare variable for physical coordinates
 
466
    // Declare variable for physical coordinates.
448
467
    double y[2];
449
 
    
450
468
    const double * const * x = c.coordinates;
451
469
    switch (i)
452
470
    {
476
494
      }
477
495
    }
478
496
    
479
 
    return 0.0;
 
497
    return 0.00000000;
480
498
  }
481
499
 
482
500
  /// Evaluate linear functionals for all dofs on the function f
484
502
                             const ufc::function& f,
485
503
                             const ufc::cell& c) const
486
504
  {
487
 
    // Declare variables for result of evaluation
 
505
    // Declare variables for result of evaluation.
488
506
    double vals[1];
489
507
    
490
 
    // Declare variable for physical coordinates
 
508
    // Declare variable for physical coordinates.
491
509
    double y[2];
492
 
    
493
510
    const double * const * x = c.coordinates;
494
511
    y[0] = x[0][0];
495
512
    y[1] = x[0][1];
615
632
    double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
616
633
    double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
617
634
    
618
 
    // Reset values
 
635
    // Reset values.
619
636
    values[0] = 0.00000000;
620
637
    values[1] = 0.00000000;
621
638
    if (0 <= i && i <= 2)
623
640
      // Map degree of freedom to element degree of freedom
624
641
      const unsigned int dof = i;
625
642
      
626
 
      // Array of basisvalues
 
643
      // Array of basisvalues.
627
644
      double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
628
645
      
629
 
      // Declare helper variables
 
646
      // Declare helper variables.
630
647
      unsigned int rr = 0;
631
648
      unsigned int ss = 0;
632
649
      double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
633
650
      
634
 
      // Compute basisvalues
 
651
      // Compute basisvalues.
635
652
      basisvalues[0] = 1.00000000;
636
653
      basisvalues[1] = tmp0;
637
654
      for (unsigned int r = 0; r < 1; r++)
649
666
        }// end loop over 's'
650
667
      }// end loop over 'r'
651
668
      
652
 
      // Table(s) of coefficients
 
669
      // Table(s) of coefficients.
653
670
      static const double coefficients0[3][3] = \
654
671
      {{0.47140452, -0.28867513, -0.16666667},
655
672
      {0.47140452, 0.28867513, -0.16666667},
667
684
      // Map degree of freedom to element degree of freedom
668
685
      const unsigned int dof = i - 3;
669
686
      
670
 
      // Array of basisvalues
 
687
      // Array of basisvalues.
671
688
      double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
672
689
      
673
 
      // Declare helper variables
 
690
      // Declare helper variables.
674
691
      unsigned int rr = 0;
675
692
      unsigned int ss = 0;
676
693
      double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
677
694
      
678
 
      // Compute basisvalues
 
695
      // Compute basisvalues.
679
696
      basisvalues[0] = 1.00000000;
680
697
      basisvalues[1] = tmp0;
681
698
      for (unsigned int r = 0; r < 1; r++)
693
710
        }// end loop over 's'
694
711
      }// end loop over 'r'
695
712
      
696
 
      // Table(s) of coefficients
 
713
      // Table(s) of coefficients.
697
714
      static const double coefficients0[3][3] = \
698
715
      {{0.47140452, -0.28867513, -0.16666667},
699
716
      {0.47140452, 0.28867513, -0.16666667},
761
778
    double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
762
779
    
763
780
    // Compute number of derivatives.
764
 
    unsigned int  num_derivatives = 1;
765
 
    
 
781
    unsigned int num_derivatives = 1;
766
782
    for (unsigned int r = 0; r < n; r++)
767
783
    {
768
784
      num_derivatives *= 2;
830
846
      // Map degree of freedom to element degree of freedom
831
847
      const unsigned int dof = i;
832
848
      
833
 
      // Array of basisvalues
 
849
      // Array of basisvalues.
834
850
      double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
835
851
      
836
 
      // Declare helper variables
 
852
      // Declare helper variables.
837
853
      unsigned int rr = 0;
838
854
      unsigned int ss = 0;
839
855
      double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
840
856
      
841
 
      // Compute basisvalues
 
857
      // Compute basisvalues.
842
858
      basisvalues[0] = 1.00000000;
843
859
      basisvalues[1] = tmp0;
844
860
      for (unsigned int r = 0; r < 1; r++)
856
872
        }// end loop over 's'
857
873
      }// end loop over 'r'
858
874
      
859
 
      // Table(s) of coefficients
 
875
      // Table(s) of coefficients.
860
876
      static const double coefficients0[3][3] = \
861
877
      {{0.47140452, -0.28867513, -0.16666667},
862
878
      {0.47140452, 0.28867513, -0.16666667},
873
889
      {2.44948974, 0.00000000, 0.00000000},
874
890
      {4.24264069, 0.00000000, 0.00000000}};
875
891
      
876
 
      // Compute reference derivatives
877
 
      // Declare pointer to array of derivatives on FIAT element
878
 
      double *derivatives = new double [num_derivatives];
 
892
      // Compute reference derivatives.
 
893
      // Declare pointer to array of derivatives on FIAT element.
 
894
      double *derivatives = new double[num_derivatives];
879
895
      for (unsigned int r = 0; r < num_derivatives; r++)
880
896
      {
881
897
        derivatives[r] = 0.00000000;
963
979
      }// end loop over 'r'
964
980
      
965
981
      // Transform derivatives back to physical element
966
 
      for (unsigned int row = 0; row < num_derivatives; row++)
 
982
      for (unsigned int r = 0; r < num_derivatives; r++)
967
983
      {
968
 
        for (unsigned int col = 0; col < num_derivatives; col++)
 
984
        for (unsigned int s = 0; s < num_derivatives; s++)
969
985
        {
970
 
          values[row] += transform[row][col]*derivatives[col];
971
 
        }
972
 
      }
 
986
          values[r] += transform[r][s]*derivatives[s];
 
987
        }// end loop over 's'
 
988
      }// end loop over 'r'
973
989
      
974
990
      // Delete pointer to array of derivatives on FIAT element
975
991
      delete [] derivatives;
978
994
      for (unsigned int r = 0; r < num_derivatives; r++)
979
995
      {
980
996
        delete [] combinations[r];
 
997
      }// end loop over 'r'
 
998
      delete [] combinations;
 
999
      for (unsigned int r = 0; r < num_derivatives; r++)
 
1000
      {
981
1001
        delete [] transform[r];
982
1002
      }// end loop over 'r'
983
 
      delete [] combinations;
984
1003
      delete [] transform;
985
1004
    }
986
1005
    
989
1008
      // Map degree of freedom to element degree of freedom
990
1009
      const unsigned int dof = i - 3;
991
1010
      
992
 
      // Array of basisvalues
 
1011
      // Array of basisvalues.
993
1012
      double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
994
1013
      
995
 
      // Declare helper variables
 
1014
      // Declare helper variables.
996
1015
      unsigned int rr = 0;
997
1016
      unsigned int ss = 0;
998
1017
      double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
999
1018
      
1000
 
      // Compute basisvalues
 
1019
      // Compute basisvalues.
1001
1020
      basisvalues[0] = 1.00000000;
1002
1021
      basisvalues[1] = tmp0;
1003
1022
      for (unsigned int r = 0; r < 1; r++)
1015
1034
        }// end loop over 's'
1016
1035
      }// end loop over 'r'
1017
1036
      
1018
 
      // Table(s) of coefficients
 
1037
      // Table(s) of coefficients.
1019
1038
      static const double coefficients0[3][3] = \
1020
1039
      {{0.47140452, -0.28867513, -0.16666667},
1021
1040
      {0.47140452, 0.28867513, -0.16666667},
1032
1051
      {2.44948974, 0.00000000, 0.00000000},
1033
1052
      {4.24264069, 0.00000000, 0.00000000}};
1034
1053
      
1035
 
      // Compute reference derivatives
1036
 
      // Declare pointer to array of derivatives on FIAT element
1037
 
      double *derivatives = new double [num_derivatives];
 
1054
      // Compute reference derivatives.
 
1055
      // Declare pointer to array of derivatives on FIAT element.
 
1056
      double *derivatives = new double[num_derivatives];
1038
1057
      for (unsigned int r = 0; r < num_derivatives; r++)
1039
1058
      {
1040
1059
        derivatives[r] = 0.00000000;
1122
1141
      }// end loop over 'r'
1123
1142
      
1124
1143
      // Transform derivatives back to physical element
1125
 
      for (unsigned int row = 0; row < num_derivatives; row++)
 
1144
      for (unsigned int r = 0; r < num_derivatives; r++)
1126
1145
      {
1127
 
        for (unsigned int col = 0; col < num_derivatives; col++)
 
1146
        for (unsigned int s = 0; s < num_derivatives; s++)
1128
1147
        {
1129
 
          values[num_derivatives + row] += transform[row][col]*derivatives[col];
1130
 
        }
1131
 
      }
 
1148
          values[num_derivatives + r] += transform[r][s]*derivatives[s];
 
1149
        }// end loop over 's'
 
1150
      }// end loop over 'r'
1132
1151
      
1133
1152
      // Delete pointer to array of derivatives on FIAT element
1134
1153
      delete [] derivatives;
1137
1156
      for (unsigned int r = 0; r < num_derivatives; r++)
1138
1157
      {
1139
1158
        delete [] combinations[r];
 
1159
      }// end loop over 'r'
 
1160
      delete [] combinations;
 
1161
      for (unsigned int r = 0; r < num_derivatives; r++)
 
1162
      {
1140
1163
        delete [] transform[r];
1141
1164
      }// end loop over 'r'
1142
 
      delete [] combinations;
1143
1165
      delete [] transform;
1144
1166
    }
1145
1167
    
1152
1174
                                              const ufc::cell& c) const
1153
1175
  {
1154
1176
    // Compute number of derivatives.
1155
 
    unsigned int  num_derivatives = 1;
1156
 
    
 
1177
    unsigned int num_derivatives = 1;
1157
1178
    for (unsigned int r = 0; r < n; r++)
1158
1179
    {
1159
1180
      num_derivatives *= 2;
1160
1181
    }// end loop over 'r'
1161
1182
    
1162
1183
    // Helper variable to hold values of a single dof.
1163
 
    double *dof_values = new double [2*num_derivatives];
 
1184
    double *dof_values = new double[2*num_derivatives];
1164
1185
    for (unsigned int r = 0; r < 2*num_derivatives; r++)
1165
1186
    {
1166
1187
      dof_values[r] = 0.00000000;
1185
1206
                              const ufc::function& f,
1186
1207
                              const ufc::cell& c) const
1187
1208
  {
1188
 
    // Declare variables for result of evaluation
 
1209
    // Declare variables for result of evaluation.
1189
1210
    double vals[2];
1190
1211
    
1191
 
    // Declare variable for physical coordinates
 
1212
    // Declare variable for physical coordinates.
1192
1213
    double y[2];
1193
 
    
1194
1214
    const double * const * x = c.coordinates;
1195
1215
    switch (i)
1196
1216
    {
1244
1264
      }
1245
1265
    }
1246
1266
    
1247
 
    return 0.0;
 
1267
    return 0.00000000;
1248
1268
  }
1249
1269
 
1250
1270
  /// Evaluate linear functionals for all dofs on the function f
1252
1272
                             const ufc::function& f,
1253
1273
                             const ufc::cell& c) const
1254
1274
  {
1255
 
    // Declare variables for result of evaluation
 
1275
    // Declare variables for result of evaluation.
1256
1276
    double vals[2];
1257
1277
    
1258
 
    // Declare variable for physical coordinates
 
1278
    // Declare variable for physical coordinates.
1259
1279
    double y[2];
1260
 
    
1261
1280
    const double * const * x = c.coordinates;
1262
1281
    y[0] = x[0][0];
1263
1282
    y[1] = x[0][1];
1413
1432
    double X = (J_01*(C1 - 2.0*coordinates[1]) + J_11*(2.0*coordinates[0] - C0)) / detJ;
1414
1433
    double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
1415
1434
    
1416
 
    // Reset values
 
1435
    // Reset values.
1417
1436
    values[0] = 0.00000000;
1418
1437
    values[1] = 0.00000000;
1419
1438
    values[2] = 0.00000000;
1422
1441
      // Map degree of freedom to element degree of freedom
1423
1442
      const unsigned int dof = i;
1424
1443
      
1425
 
      // Array of basisvalues
 
1444
      // Array of basisvalues.
1426
1445
      double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1427
1446
      
1428
 
      // Declare helper variables
 
1447
      // Declare helper variables.
1429
1448
      unsigned int rr = 0;
1430
1449
      unsigned int ss = 0;
1431
1450
      double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1432
1451
      
1433
 
      // Compute basisvalues
 
1452
      // Compute basisvalues.
1434
1453
      basisvalues[0] = 1.00000000;
1435
1454
      basisvalues[1] = tmp0;
1436
1455
      for (unsigned int r = 0; r < 1; r++)
1448
1467
        }// end loop over 's'
1449
1468
      }// end loop over 'r'
1450
1469
      
1451
 
      // Table(s) of coefficients
 
1470
      // Table(s) of coefficients.
1452
1471
      static const double coefficients0[3][3] = \
1453
1472
      {{0.47140452, -0.28867513, -0.16666667},
1454
1473
      {0.47140452, 0.28867513, -0.16666667},
1466
1485
      // Map degree of freedom to element degree of freedom
1467
1486
      const unsigned int dof = i - 3;
1468
1487
      
1469
 
      // Array of basisvalues
 
1488
      // Array of basisvalues.
1470
1489
      double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1471
1490
      
1472
 
      // Declare helper variables
 
1491
      // Declare helper variables.
1473
1492
      unsigned int rr = 0;
1474
1493
      unsigned int ss = 0;
1475
1494
      double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1476
1495
      
1477
 
      // Compute basisvalues
 
1496
      // Compute basisvalues.
1478
1497
      basisvalues[0] = 1.00000000;
1479
1498
      basisvalues[1] = tmp0;
1480
1499
      for (unsigned int r = 0; r < 1; r++)
1492
1511
        }// end loop over 's'
1493
1512
      }// end loop over 'r'
1494
1513
      
1495
 
      // Table(s) of coefficients
 
1514
      // Table(s) of coefficients.
1496
1515
      static const double coefficients0[3][3] = \
1497
1516
      {{0.47140452, -0.28867513, -0.16666667},
1498
1517
      {0.47140452, 0.28867513, -0.16666667},
1510
1529
      // Map degree of freedom to element degree of freedom
1511
1530
      const unsigned int dof = i - 6;
1512
1531
      
1513
 
      // Array of basisvalues
 
1532
      // Array of basisvalues.
1514
1533
      double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1515
1534
      
1516
 
      // Declare helper variables
 
1535
      // Declare helper variables.
1517
1536
      unsigned int rr = 0;
1518
1537
      unsigned int ss = 0;
1519
1538
      double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1520
1539
      
1521
 
      // Compute basisvalues
 
1540
      // Compute basisvalues.
1522
1541
      basisvalues[0] = 1.00000000;
1523
1542
      basisvalues[1] = tmp0;
1524
1543
      for (unsigned int r = 0; r < 1; r++)
1536
1555
        }// end loop over 's'
1537
1556
      }// end loop over 'r'
1538
1557
      
1539
 
      // Table(s) of coefficients
 
1558
      // Table(s) of coefficients.
1540
1559
      static const double coefficients0[3][3] = \
1541
1560
      {{0.47140452, -0.28867513, -0.16666667},
1542
1561
      {0.47140452, 0.28867513, -0.16666667},
1604
1623
    double Y = (J_00*(2.0*coordinates[1] - C1) + J_10*(C0 - 2.0*coordinates[0])) / detJ;
1605
1624
    
1606
1625
    // Compute number of derivatives.
1607
 
    unsigned int  num_derivatives = 1;
1608
 
    
 
1626
    unsigned int num_derivatives = 1;
1609
1627
    for (unsigned int r = 0; r < n; r++)
1610
1628
    {
1611
1629
      num_derivatives *= 2;
1673
1691
      // Map degree of freedom to element degree of freedom
1674
1692
      const unsigned int dof = i;
1675
1693
      
1676
 
      // Array of basisvalues
 
1694
      // Array of basisvalues.
1677
1695
      double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1678
1696
      
1679
 
      // Declare helper variables
 
1697
      // Declare helper variables.
1680
1698
      unsigned int rr = 0;
1681
1699
      unsigned int ss = 0;
1682
1700
      double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1683
1701
      
1684
 
      // Compute basisvalues
 
1702
      // Compute basisvalues.
1685
1703
      basisvalues[0] = 1.00000000;
1686
1704
      basisvalues[1] = tmp0;
1687
1705
      for (unsigned int r = 0; r < 1; r++)
1699
1717
        }// end loop over 's'
1700
1718
      }// end loop over 'r'
1701
1719
      
1702
 
      // Table(s) of coefficients
 
1720
      // Table(s) of coefficients.
1703
1721
      static const double coefficients0[3][3] = \
1704
1722
      {{0.47140452, -0.28867513, -0.16666667},
1705
1723
      {0.47140452, 0.28867513, -0.16666667},
1716
1734
      {2.44948974, 0.00000000, 0.00000000},
1717
1735
      {4.24264069, 0.00000000, 0.00000000}};
1718
1736
      
1719
 
      // Compute reference derivatives
1720
 
      // Declare pointer to array of derivatives on FIAT element
1721
 
      double *derivatives = new double [num_derivatives];
 
1737
      // Compute reference derivatives.
 
1738
      // Declare pointer to array of derivatives on FIAT element.
 
1739
      double *derivatives = new double[num_derivatives];
1722
1740
      for (unsigned int r = 0; r < num_derivatives; r++)
1723
1741
      {
1724
1742
        derivatives[r] = 0.00000000;
1806
1824
      }// end loop over 'r'
1807
1825
      
1808
1826
      // Transform derivatives back to physical element
1809
 
      for (unsigned int row = 0; row < num_derivatives; row++)
 
1827
      for (unsigned int r = 0; r < num_derivatives; r++)
1810
1828
      {
1811
 
        for (unsigned int col = 0; col < num_derivatives; col++)
 
1829
        for (unsigned int s = 0; s < num_derivatives; s++)
1812
1830
        {
1813
 
          values[row] += transform[row][col]*derivatives[col];
1814
 
        }
1815
 
      }
 
1831
          values[r] += transform[r][s]*derivatives[s];
 
1832
        }// end loop over 's'
 
1833
      }// end loop over 'r'
1816
1834
      
1817
1835
      // Delete pointer to array of derivatives on FIAT element
1818
1836
      delete [] derivatives;
1821
1839
      for (unsigned int r = 0; r < num_derivatives; r++)
1822
1840
      {
1823
1841
        delete [] combinations[r];
 
1842
      }// end loop over 'r'
 
1843
      delete [] combinations;
 
1844
      for (unsigned int r = 0; r < num_derivatives; r++)
 
1845
      {
1824
1846
        delete [] transform[r];
1825
1847
      }// end loop over 'r'
1826
 
      delete [] combinations;
1827
1848
      delete [] transform;
1828
1849
    }
1829
1850
    
1832
1853
      // Map degree of freedom to element degree of freedom
1833
1854
      const unsigned int dof = i - 3;
1834
1855
      
1835
 
      // Array of basisvalues
 
1856
      // Array of basisvalues.
1836
1857
      double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1837
1858
      
1838
 
      // Declare helper variables
 
1859
      // Declare helper variables.
1839
1860
      unsigned int rr = 0;
1840
1861
      unsigned int ss = 0;
1841
1862
      double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
1842
1863
      
1843
 
      // Compute basisvalues
 
1864
      // Compute basisvalues.
1844
1865
      basisvalues[0] = 1.00000000;
1845
1866
      basisvalues[1] = tmp0;
1846
1867
      for (unsigned int r = 0; r < 1; r++)
1858
1879
        }// end loop over 's'
1859
1880
      }// end loop over 'r'
1860
1881
      
1861
 
      // Table(s) of coefficients
 
1882
      // Table(s) of coefficients.
1862
1883
      static const double coefficients0[3][3] = \
1863
1884
      {{0.47140452, -0.28867513, -0.16666667},
1864
1885
      {0.47140452, 0.28867513, -0.16666667},
1875
1896
      {2.44948974, 0.00000000, 0.00000000},
1876
1897
      {4.24264069, 0.00000000, 0.00000000}};
1877
1898
      
1878
 
      // Compute reference derivatives
1879
 
      // Declare pointer to array of derivatives on FIAT element
1880
 
      double *derivatives = new double [num_derivatives];
 
1899
      // Compute reference derivatives.
 
1900
      // Declare pointer to array of derivatives on FIAT element.
 
1901
      double *derivatives = new double[num_derivatives];
1881
1902
      for (unsigned int r = 0; r < num_derivatives; r++)
1882
1903
      {
1883
1904
        derivatives[r] = 0.00000000;
1965
1986
      }// end loop over 'r'
1966
1987
      
1967
1988
      // Transform derivatives back to physical element
1968
 
      for (unsigned int row = 0; row < num_derivatives; row++)
 
1989
      for (unsigned int r = 0; r < num_derivatives; r++)
1969
1990
      {
1970
 
        for (unsigned int col = 0; col < num_derivatives; col++)
 
1991
        for (unsigned int s = 0; s < num_derivatives; s++)
1971
1992
        {
1972
 
          values[num_derivatives + row] += transform[row][col]*derivatives[col];
1973
 
        }
1974
 
      }
 
1993
          values[num_derivatives + r] += transform[r][s]*derivatives[s];
 
1994
        }// end loop over 's'
 
1995
      }// end loop over 'r'
1975
1996
      
1976
1997
      // Delete pointer to array of derivatives on FIAT element
1977
1998
      delete [] derivatives;
1980
2001
      for (unsigned int r = 0; r < num_derivatives; r++)
1981
2002
      {
1982
2003
        delete [] combinations[r];
 
2004
      }// end loop over 'r'
 
2005
      delete [] combinations;
 
2006
      for (unsigned int r = 0; r < num_derivatives; r++)
 
2007
      {
1983
2008
        delete [] transform[r];
1984
2009
      }// end loop over 'r'
1985
 
      delete [] combinations;
1986
2010
      delete [] transform;
1987
2011
    }
1988
2012
    
1991
2015
      // Map degree of freedom to element degree of freedom
1992
2016
      const unsigned int dof = i - 6;
1993
2017
      
1994
 
      // Array of basisvalues
 
2018
      // Array of basisvalues.
1995
2019
      double basisvalues[3] = {0.00000000, 0.00000000, 0.00000000};
1996
2020
      
1997
 
      // Declare helper variables
 
2021
      // Declare helper variables.
1998
2022
      unsigned int rr = 0;
1999
2023
      unsigned int ss = 0;
2000
2024
      double tmp0 = (1.00000000 + Y + 2.00000000*X)/2.00000000;
2001
2025
      
2002
 
      // Compute basisvalues
 
2026
      // Compute basisvalues.
2003
2027
      basisvalues[0] = 1.00000000;
2004
2028
      basisvalues[1] = tmp0;
2005
2029
      for (unsigned int r = 0; r < 1; r++)
2017
2041
        }// end loop over 's'
2018
2042
      }// end loop over 'r'
2019
2043
      
2020
 
      // Table(s) of coefficients
 
2044
      // Table(s) of coefficients.
2021
2045
      static const double coefficients0[3][3] = \
2022
2046
      {{0.47140452, -0.28867513, -0.16666667},
2023
2047
      {0.47140452, 0.28867513, -0.16666667},
2034
2058
      {2.44948974, 0.00000000, 0.00000000},
2035
2059
      {4.24264069, 0.00000000, 0.00000000}};
2036
2060
      
2037
 
      // Compute reference derivatives
2038
 
      // Declare pointer to array of derivatives on FIAT element
2039
 
      double *derivatives = new double [num_derivatives];
 
2061
      // Compute reference derivatives.
 
2062
      // Declare pointer to array of derivatives on FIAT element.
 
2063
      double *derivatives = new double[num_derivatives];
2040
2064
      for (unsigned int r = 0; r < num_derivatives; r++)
2041
2065
      {
2042
2066
        derivatives[r] = 0.00000000;
2124
2148
      }// end loop over 'r'
2125
2149
      
2126
2150
      // Transform derivatives back to physical element
2127
 
      for (unsigned int row = 0; row < num_derivatives; row++)
 
2151
      for (unsigned int r = 0; r < num_derivatives; r++)
2128
2152
      {
2129
 
        for (unsigned int col = 0; col < num_derivatives; col++)
 
2153
        for (unsigned int s = 0; s < num_derivatives; s++)
2130
2154
        {
2131
 
          values[2*num_derivatives + row] += transform[row][col]*derivatives[col];
2132
 
        }
2133
 
      }
 
2155
          values[2*num_derivatives + r] += transform[r][s]*derivatives[s];
 
2156
        }// end loop over 's'
 
2157
      }// end loop over 'r'
2134
2158
      
2135
2159
      // Delete pointer to array of derivatives on FIAT element
2136
2160
      delete [] derivatives;
2139
2163
      for (unsigned int r = 0; r < num_derivatives; r++)
2140
2164
      {
2141
2165
        delete [] combinations[r];
 
2166
      }// end loop over 'r'
 
2167
      delete [] combinations;
 
2168
      for (unsigned int r = 0; r < num_derivatives; r++)
 
2169
      {
2142
2170
        delete [] transform[r];
2143
2171
      }// end loop over 'r'
2144
 
      delete [] combinations;
2145
2172
      delete [] transform;
2146
2173
    }
2147
2174
    
2154
2181
                                              const ufc::cell& c) const
2155
2182
  {
2156
2183
    // Compute number of derivatives.
2157
 
    unsigned int  num_derivatives = 1;
2158
 
    
 
2184
    unsigned int num_derivatives = 1;
2159
2185
    for (unsigned int r = 0; r < n; r++)
2160
2186
    {
2161
2187
      num_derivatives *= 2;
2162
2188
    }// end loop over 'r'
2163
2189
    
2164
2190
    // Helper variable to hold values of a single dof.
2165
 
    double *dof_values = new double [3*num_derivatives];
 
2191
    double *dof_values = new double[3*num_derivatives];
2166
2192
    for (unsigned int r = 0; r < 3*num_derivatives; r++)
2167
2193
    {
2168
2194
      dof_values[r] = 0.00000000;
2187
2213
                              const ufc::function& f,
2188
2214
                              const ufc::cell& c) const
2189
2215
  {
2190
 
    // Declare variables for result of evaluation
 
2216
    // Declare variables for result of evaluation.
2191
2217
    double vals[3];
2192
2218
    
2193
 
    // Declare variable for physical coordinates
 
2219
    // Declare variable for physical coordinates.
2194
2220
    double y[2];
2195
 
    
2196
2221
    const double * const * x = c.coordinates;
2197
2222
    switch (i)
2198
2223
    {
2270
2295
      }
2271
2296
    }
2272
2297
    
2273
 
    return 0.0;
 
2298
    return 0.00000000;
2274
2299
  }
2275
2300
 
2276
2301
  /// Evaluate linear functionals for all dofs on the function f
2278
2303
                             const ufc::function& f,
2279
2304
                             const ufc::cell& c) const
2280
2305
  {
2281
 
    // Declare variables for result of evaluation
 
2306
    // Declare variables for result of evaluation.
2282
2307
    double vals[3];
2283
2308
    
2284
 
    // Declare variable for physical coordinates
 
2309
    // Declare variable for physical coordinates.
2285
2310
    double y[2];
2286
 
    
2287
2311
    const double * const * x = c.coordinates;
2288
2312
    y[0] = x[0][0];
2289
2313
    y[1] = x[0][1];
2378
2402
private:
2379
2403
 
2380
2404
  unsigned int _global_dimension;
2381
 
 
2382
2405
public:
2383
2406
 
2384
2407
  /// Constructor
2626
2649
private:
2627
2650
 
2628
2651
  unsigned int _global_dimension;
2629
 
 
2630
2652
public:
2631
2653
 
2632
2654
  /// Constructor
2675
2697
  /// Initialize dof map for mesh (return true iff init_cell() is needed)
2676
2698
  virtual bool init_mesh(const ufc::mesh& m)
2677
2699
  {
2678
 
    _global_dimension = 2*m.num_entities[0];
 
2700
    _global_dimension = 2.00000000*m.num_entities[0];
2679
2701
    return false;
2680
2702
  }
2681
2703
 
2753
2775
                             const ufc::cell& c) const
2754
2776
  {
2755
2777
    unsigned int offset = 0;
2756
 
    
2757
2778
    dofs[0] = offset + c.entity_indices[0][0];
2758
2779
    dofs[1] = offset + c.entity_indices[0][1];
2759
2780
    dofs[2] = offset + c.entity_indices[0][2];
2910
2931
private:
2911
2932
 
2912
2933
  unsigned int _global_dimension;
2913
 
 
2914
2934
public:
2915
2935
 
2916
2936
  /// Constructor
2959
2979
  /// Initialize dof map for mesh (return true iff init_cell() is needed)
2960
2980
  virtual bool init_mesh(const ufc::mesh& m)
2961
2981
  {
2962
 
    _global_dimension = 3*m.num_entities[0];
 
2982
    _global_dimension = 3.00000000*m.num_entities[0];
2963
2983
    return false;
2964
2984
  }
2965
2985
 
3037
3057
                             const ufc::cell& c) const
3038
3058
  {
3039
3059
    unsigned int offset = 0;
3040
 
    
3041
3060
    dofs[0] = offset + c.entity_indices[0][0];
3042
3061
    dofs[1] = offset + c.entity_indices[0][1];
3043
3062
    dofs[2] = offset + c.entity_indices[0][2];
3251
3270
    // Set scale factor
3252
3271
    const double det = std::abs(detJ);
3253
3272
    
3254
 
    // Array of quadrature weights
 
3273
    // Array of quadrature weights.
3255
3274
    static const double W4[4] = {0.15902069, 0.09097931, 0.15902069, 0.09097931};
3256
3275
    // Quadrature points on the UFC reference element: (0.17855873, 0.15505103), (0.07503111, 0.64494897), (0.66639025, 0.15505103), (0.28001992, 0.64494897)
3257
3276
    
3304
3323
    {0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, -1.00000000, 1.00000000, 0.00000000},
3305
3324
    {0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, -1.00000000, 1.00000000, 0.00000000}};
3306
3325
    
 
3326
    // Reset values in the element tensor.
3307
3327
    for (unsigned int r = 0; r < 81; r++)
3308
3328
    {
3309
3329
      A[r] = 0.00000000;
3312
3332
    // Compute element tensor using UFL quadrature representation
3313
3333
    // Optimisations: ('simplify expressions', False), ('ignore zero tables', False), ('non zero columns', False), ('remove zero terms', False), ('ignore ones', False)
3314
3334
    
3315
 
    // Loop quadrature points for integral
 
3335
    // Loop quadrature points for integral.
3316
3336
    // Number of operations to compute element tensor for following IP loop = 23352
3317
3337
    for (unsigned int ip = 0; ip < 4; ip++)
3318
3338
    {
3386
3406
    // Set scale factor
3387
3407
    const double det = std::abs(detJ);
3388
3408
    
3389
 
    // Array of quadrature weights
 
3409
    // Array of quadrature weights.
3390
3410
    static const double W4[4] = {0.15902069, 0.09097931, 0.15902069, 0.09097931};
3391
3411
    // Quadrature points on the UFC reference element: (0.17855873, 0.15505103), (0.07503111, 0.64494897), (0.66639025, 0.15505103), (0.28001992, 0.64494897)
3392
3412
    
3433
3453
    {0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, -1.00000000, 1.00000000, 0.00000000},
3434
3454
    {0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, 0.00000000, -1.00000000, 1.00000000, 0.00000000}};
3435
3455
    
 
3456
    // Reset values in the element tensor.
3436
3457
    for (unsigned int r = 0; r < 9; r++)
3437
3458
    {
3438
3459
      A[r] = 0.00000000;
3441
3462
    // Compute element tensor using UFL quadrature representation
3442
3463
    // Optimisations: ('simplify expressions', False), ('ignore zero tables', False), ('non zero columns', False), ('remove zero terms', False), ('ignore ones', False)
3443
3464
    
3444
 
    // Loop quadrature points for integral
 
3465
    // Loop quadrature points for integral.
3445
3466
    // Number of operations to compute element tensor for following IP loop = 840
3446
3467
    for (unsigned int ip = 0; ip < 4; ip++)
3447
3468
    {