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

« back to all changes in this revision

Viewing changes to test/unit/symbolics/testelasticity2d.py

  • Committer: Bazaar Package Importer
  • Author(s): Johannes Ring
  • Date: 2010-02-03 20:22:35 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20100203202235-fe8d0kajuvgy2sqn
Tags: 0.9.0-1
* New upstream release.
* debian/control: Bump Standards-Version (no changes needed).
* Update debian/copyright and debian/copyright_hints.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
 
 
3
__author__ = "Kristian B. Oelgaard (k.b.oelgaard@gmail.com)"
 
4
__date__ = "2010-01-06"
 
5
__copyright__ = "Copyright (C) 2010 Kristian B. Oelgaard"
 
6
__license__  = "GNU GPL version 3 or any later version"
 
7
 
 
8
# Last changed: 2010-02-01
 
9
 
 
10
# Pyhton modules
 
11
import unittest
 
12
import time
 
13
 
 
14
# FFC modules
 
15
from ffc.quadrature.reduce_operations import operation_count, expand_operations, reduce_operations
 
16
from ffc.quadrature.symbolics import *
 
17
from ffc.cpp import format, set_float_formatting
 
18
from ffc.parameters import FFC_PARAMETERS
 
19
set_float_formatting(FFC_PARAMETERS['precision'])
 
20
class TestElasticity2D(unittest.TestCase):
 
21
 
 
22
    def testElasticity2D(self):
 
23
        elasticity = """(((Jinv_00*FE0_C0_D10_ip_j + Jinv_10*FE0_C0_D01_ip_j)*2*(Jinv_00*FE0_C0_D10_ip_k + Jinv_10*FE0_C0_D01_ip_k)*2 + ((Jinv_00*FE0_C1_D10_ip_j + Jinv_10*FE0_C1_D01_ip_j) + (Jinv_01*FE0_C0_D10_ip_j + Jinv_11*FE0_C0_D01_ip_j))*((Jinv_00*FE0_C1_D10_ip_k + Jinv_10*FE0_C1_D01_ip_k) + (Jinv_01*FE0_C0_D10_ip_k + Jinv_11*FE0_C0_D01_ip_k))) + ((Jinv_01*FE0_C1_D10_ip_j + Jinv_11*FE0_C1_D01_ip_j)*2*(Jinv_01*FE0_C1_D10_ip_k + Jinv_11*FE0_C1_D01_ip_k)*2 + ((Jinv_01*FE0_C0_D10_ip_j + Jinv_11*FE0_C0_D01_ip_j) + (Jinv_00*FE0_C1_D10_ip_j + Jinv_10*FE0_C1_D01_ip_j))*((Jinv_01*FE0_C0_D10_ip_k + Jinv_11*FE0_C0_D01_ip_k) + (Jinv_00*FE0_C1_D10_ip_k + Jinv_10*FE0_C1_D01_ip_k))))*0.25*W4_ip*det"""
 
24
 
 
25
        expr = Product([
 
26
                     Sum([
 
27
                          Sum([
 
28
                               Product([
 
29
                                        Sum([
 
30
                                             Product([Symbol("Jinv_00", GEO), Symbol("FE0_C0_D10_ip_j", BASIS)])
 
31
                                             ,
 
32
                                             Product([Symbol("Jinv_10", GEO), Symbol("FE0_C0_D01_ip_j", BASIS)])
 
33
                                            ])
 
34
                                        ,
 
35
                                        FloatValue(2)
 
36
                                        ,
 
37
                                        Sum([
 
38
                                             Product([Symbol("Jinv_00", GEO), Symbol("FE0_C0_D10_ip_k", BASIS)])
 
39
                                             ,
 
40
                                             Product([Symbol("Jinv_10", GEO), Symbol("FE0_C0_D01_ip_k", BASIS)])
 
41
                                            ])
 
42
                                        ,
 
43
                                        FloatValue(2)
 
44
                                        ])
 
45
                               ,
 
46
                               Product([
 
47
                                        Sum([
 
48
                                             Sum([
 
49
                                                  Product([Symbol("Jinv_00", GEO), Symbol("FE0_C1_D10_ip_j", BASIS)])
 
50
                                                  ,
 
51
                                                  Product([Symbol("Jinv_10", GEO), Symbol("FE0_C1_D01_ip_j", BASIS)])
 
52
                                                 ])
 
53
                                             ,
 
54
                                             Sum([
 
55
                                                  Product([Symbol("Jinv_01", GEO), Symbol("FE0_C0_D10_ip_j", BASIS)])
 
56
                                                  ,
 
57
                                                  Product([Symbol("Jinv_11", GEO), Symbol("FE0_C0_D01_ip_j", BASIS)])
 
58
                                                 ])
 
59
                                            ])
 
60
                                        ,
 
61
                                        Sum([
 
62
                                             Sum([
 
63
                                                  Product([Symbol("Jinv_00", GEO), Symbol("FE0_C1_D10_ip_k", BASIS)])
 
64
                                                  ,
 
65
                                                  Product([Symbol("Jinv_10", GEO), Symbol("FE0_C1_D01_ip_k", BASIS)])
 
66
                                                 ])
 
67
                                             ,
 
68
                                             Sum([
 
69
                                                  Product([Symbol("Jinv_01", GEO), Symbol("FE0_C0_D10_ip_k", BASIS)])
 
70
                                                  ,
 
71
                                                  Product([Symbol("Jinv_11", GEO), Symbol("FE0_C0_D01_ip_k", BASIS)])
 
72
                                                 ])
 
73
                                            ])
 
74
                                       ])
 
75
                              ])
 
76
                          ,
 
77
                          Sum([
 
78
                               Product([
 
79
                                        Sum([
 
80
                                             Product([Symbol("Jinv_01", GEO), Symbol("FE0_C1_D10_ip_j", BASIS)])
 
81
                                             ,
 
82
                                             Product([Symbol("Jinv_11", GEO), Symbol("FE0_C1_D01_ip_j", BASIS)])
 
83
                                            ])
 
84
                                        ,
 
85
                                        FloatValue(2)
 
86
                                        ,
 
87
                                        Sum([
 
88
                                             Product([Symbol("Jinv_01", GEO), Symbol("FE0_C1_D10_ip_k", BASIS)])
 
89
                                             ,
 
90
                                             Product([Symbol("Jinv_11", GEO), Symbol("FE0_C1_D01_ip_k", BASIS)])
 
91
                                            ])
 
92
                                        ,
 
93
                                        FloatValue(2)
 
94
                                       ])
 
95
                               ,
 
96
                               Product([
 
97
                                        Sum([
 
98
                                             Sum([
 
99
                                                  Product([Symbol("Jinv_01", GEO), Symbol("FE0_C0_D10_ip_j", BASIS)])
 
100
                                                  ,
 
101
                                                  Product([Symbol("Jinv_11", GEO), Symbol("FE0_C0_D01_ip_j", BASIS)])
 
102
                                                 ])
 
103
                                             ,
 
104
                                             Sum([
 
105
                                                  Product([Symbol("Jinv_00", GEO), Symbol("FE0_C1_D10_ip_j", BASIS)])
 
106
                                                  ,
 
107
                                                  Product([Symbol("Jinv_10", GEO), Symbol("FE0_C1_D01_ip_j", BASIS)])
 
108
                                                 ])
 
109
                                            ])
 
110
                                        ,
 
111
                                        Sum([
 
112
                                             Sum([
 
113
                                                  Product([Symbol("Jinv_01", GEO), Symbol("FE0_C0_D10_ip_k", BASIS)])
 
114
                                                  ,
 
115
                                                  Product([Symbol("Jinv_11", GEO), Symbol("FE0_C0_D01_ip_k", BASIS)])
 
116
                                                 ])
 
117
                                             ,
 
118
                                             Sum([
 
119
                                                  Product([Symbol("Jinv_00", GEO), Symbol("FE0_C1_D10_ip_k", BASIS)])
 
120
                                                  ,
 
121
                                                  Product([Symbol("Jinv_10", GEO), Symbol("FE0_C1_D01_ip_k", BASIS)])
 
122
                                                 ])
 
123
                                            ])
 
124
                                       ])
 
125
                              ])
 
126
                     ])
 
127
                     ,
 
128
                     FloatValue(0.25)
 
129
                     ,
 
130
                     Symbol("W4_ip", IP)
 
131
                     ,
 
132
                     Symbol("det", GEO)
 
133
                     ])
 
134
 
 
135
#        print "\nElasticity2D"
 
136
#        start = time.time()
 
137
        expr_exp = expr.expand()
 
138
#        print "Elasticity2D: time, expand():     ", time.time() - start
 
139
 
 
140
#        start = time.time()
 
141
        elasticity_exp = expand_operations(elasticity, get_format())
 
142
#        print "Elasticity2D: time, old expand(): ", time.time() - start
 
143
 
 
144
#        start = time.time()
 
145
        expr_red = expr_exp.reduce_ops()
 
146
#        print "Elasticity2D: time, reduce_ops(): ", time.time() - start
 
147
 
 
148
#        start = time.time()
 
149
        elasticity_red = reduce_operations(elasticity, get_format())
 
150
#        print "Elasticity2D: time, old reduce(): ", time.time() - start
 
151
 
 
152
        elasticity_exp_ops = operation_count(elasticity_exp, get_format())
 
153
        elasticity_red_ops = operation_count(elasticity_red, get_format())
 
154
#        print "expr.ops():                ", expr.ops()
 
155
#        print "Elasticity2D old exp: ops: ", elasticity_exp_ops
 
156
#        print "expr_exp.ops():            ", expr_exp.ops()
 
157
#        print "Elasticity2D old red: ops: ", elasticity_red_ops
 
158
#        print "expr_red.ops():            ", expr_red.ops()
 
159
 
 
160
#        print "expr:\n", expr
 
161
#        print "exp:\n", expr_exp
 
162
#        print "red:\n", expr_red
 
163
#        print "old red:\n", elasticity_red
 
164
 
 
165
        Jinv_00, Jinv_01, Jinv_10, Jinv_11, W4_ip, det = (1.1, 1.5, -4.3, 1.7, 11, 52.3)
 
166
        FE0_C0_D01_ip_j, FE0_C0_D10_ip_j, FE0_C0_D01_ip_k, FE0_C0_D10_ip_k = (1.12, 5.7, -9.3, 7.4)
 
167
        FE0_C1_D01_ip_j, FE0_C1_D10_ip_j, FE0_C1_D01_ip_k, FE0_C1_D10_ip_k = (3.12, -8.1, -45.3, 17.5)
 
168
 
 
169
        self.assertAlmostEqual(eval(str(expr)), eval(str(expr_exp)))
 
170
        self.assertAlmostEqual(eval(str(expr)), eval(str(expr_red)))
 
171
        self.assertAlmostEqual(eval(str(expr)), eval(str(elasticity)))
 
172
        self.assertAlmostEqual(eval(str(expr)), eval(str(elasticity_exp)))
 
173
        self.assertAlmostEqual(eval(str(expr)), eval(str(elasticity_red)))
 
174
        self.assertEqual(expr.ops(), 52)
 
175
        self.assertEqual(elasticity_exp_ops, 159)
 
176
        self.assertEqual(expr_exp.ops(), 159)
 
177
        self.assertEqual(elasticity_red_ops, 71)
 
178
        self.assertEqual(expr_red.ops(), 71)
 
179
 
 
180
if __name__ == "__main__":
 
181
 
 
182
    # Run all returned tests
 
183
    runner = unittest.TextTestRunner()
 
184
    runner.run(TestElasticity2D('testElasticity2D'))
 
185