~ubuntu-branches/ubuntu/vivid/ffc/vivid

« back to all changes in this revision

Viewing changes to ffc/uflacsrepr/uflacsgenerator.py

  • Committer: Package Import Robot
  • Author(s): Johannes Ring
  • Date: 2014-06-03 18:26:02 UTC
  • mfrom: (1.1.15)
  • Revision ID: package-import@ubuntu.com-20140603182602-zvnubjjh7i78e1v0
Tags: 1.4.0-1
* New upstream release.
* debian/control:
  - Add swig in Build-Depends.
  - Remove python-ufc from Depends.
  - Add ufc and python-ufc to Provides, Conflicts and Replaces.
  - Remove python-ferari and python-dolfin from Suggests.
  - Bump minimum required version for python-fiat, python-instant and
    python-ufl to 1.4.0.
* debian/rules: Add override for auto clean target to remove generated
  cmake and pkg-config files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2013 Martin Alnaes
 
1
# Copyright (C) 2013-2014 Martin Alnaes
2
2
#
3
3
# This file is part of FFC.
4
4
#
14
14
#
15
15
# You should have received a copy of the GNU Lesser General Public License
16
16
# along with FFC. If not, see <http://www.gnu.org/licenses/>.
17
 
#
18
 
# First added:  2013-02-12
19
 
# Last changed: 2013-03-04
20
17
 
 
18
from ffc.log import info
21
19
from ffc.representationutils import initialize_integral_code
22
 
from ffc.log import info, error, begin, end, debug_ir, ffc_assert, warning
23
 
from ffc.cpp import format, indent
 
20
 
 
21
from uflacs.codeutils.cpp_expr_formatting_rules import CppExprFormatter
 
22
from uflacs.backends.ffc.ffc_backend import FFCAccessBackend, FFCDefinitionsBackend
 
23
from uflacs.generation.integralgenerator import IntegralGenerator
24
24
 
25
25
def generate_integral_code(ir, prefix, parameters):
26
26
    "Generate code for integral from intermediate representation."
30
30
    # Generate generic ffc code snippets
31
31
    code = initialize_integral_code(ir, prefix, parameters)
32
32
 
33
 
    # Delegate to uflacs to generate tabulate_tensor body
34
 
    import uflacs.backends.ffc
35
 
    ucode = uflacs.backends.ffc.generate_tabulate_tensor_code(ir, parameters)
36
 
    code["tabulate_tensor"] = ucode["tabulate_tensor"]
37
 
    code["additional_includes_set"] = ir.get("additional_includes_set",set()) | set(ucode["additional_includes_set"])
 
33
    # Generate tabulate_tensor body using uflacs algorithms
 
34
    uflacs_code = generate_tabulate_tensor_code(ir, parameters)
 
35
 
 
36
    code["tabulate_tensor"] = uflacs_code["tabulate_tensor"]
 
37
 
 
38
    code["additional_includes_set"] = set()
 
39
    code["additional_includes_set"].update(ir.get("additional_includes_set",()))
 
40
    code["additional_includes_set"].update(uflacs_code["additional_includes_set"])
 
41
 
 
42
    return code
 
43
 
 
44
def generate_tabulate_tensor_code(ir, parameters):
 
45
 
 
46
    # Create C++ backend
 
47
    language_formatter = CppExprFormatter()
 
48
 
 
49
    # Create FFC backend
 
50
    backend_access = FFCAccessBackend(ir, parameters)
 
51
    backend_definitions = FFCDefinitionsBackend(ir, parameters)
 
52
 
 
53
    # Create code generator for integral body
 
54
    ig = IntegralGenerator(ir, language_formatter, backend_access, backend_definitions)
 
55
 
 
56
    # Generate code for the tabulate_tensor body
 
57
    body = ig.generate()
 
58
 
 
59
    # Fetch includes
 
60
    includes = set()
 
61
    includes.update(ig.get_includes())
 
62
    includes.update(backend_definitions.get_includes())
 
63
 
 
64
    # Format uflacs specific code structures into a single
 
65
    # string and place in dict before returning to ffc
 
66
    code = {
 
67
        "tabulate_tensor": body,
 
68
        "additional_includes_set": includes,
 
69
        }
38
70
    return code