File: cppcode.py

package info (click to toggle)
ffc 0.9.3-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 31,928 kB
  • ctags: 5,610
  • sloc: cpp: 200,834; python: 14,417; perl: 351; makefile: 21; sh: 6
file content (61 lines) | stat: -rw-r--r-- 1,902 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"This module provides simple C++ code for verification of UFC code."

__author__ = "Kristian B. Oelgaard (k.b.oelgaard@gmail.com)"
__date__ = "2010-01-18"
__copyright__ = "Copyright (C) 2010 Kristian B. Oelgaard"
__license__  = "GNU GPL version 3 or any later version"

# Common code for all integral types
evaluate_basis_derivatives_code = """\
#include <iostream>
#include <ufc.h>
#include "test.h"

int main()
{
  // Create element
  %(element)s element;

  // Size of dof_values
  // FIXME: This will not work for TensorElements
  int N = element.value_dimension(0)*%(num_derivatives)d;

  // Create values
  double* dof_values = new double[N];
  for (int i = 0; i < N; i++)
    dof_values[i] = 0.0;

  // Create cell and fill with some arbitrary data
  double cell_coordinates[8][3] = {{0.90, 0.34, 0.45},
                                   {0.56, 0.76, 0.83},
                                   {0.98, 0.78, 0.19},
                                   {0.12, 0.56, 0.66},
                                   {0.96, 0.78, 0.63},
                                   {0.11, 0.35, 0.49},
                                   {0.51, 0.88, 0.65},
                                   {0.98, 0.45, 0.01}};
  ufc::cell cell;
  cell.coordinates = new double * [8];
  for (int i = 0; i < 8; i++)
  {
    cell.coordinates[i] = new double[3];
    for (int j = 0; j < 3; j++)
      cell.coordinates[i][j] = cell_coordinates[i][j];
  }

  // Random coordinates where we want to evaluate the basis functions
  double coordinates[3] = {0.32, 0.51, 0.05};

  // Loop element space dimension and call evaluate_basis.
  for (unsigned int i = 0; i < element.space_dimension(); i++)
  {
    element.evaluate_basis_derivatives(i, %(derivative_order)d, dof_values, coordinates, cell);
    // Print values
    for (int j = 0; j < N; j++)
      std::cout << dof_values[j] << " ";
  }
  std::cout << std::endl;
  return 0;
}
"""