ufl2swiginac.py

Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 
00003 __authors__ = "Martin Sandve Alnes"
00004 __date__ = "2008-10-15 -- 2008-10-15"
00005 
00006 import unittest
00007 
00008 import ufl
00009 from ufl import *
00010 from ufl.algorithms import expand_compounds
00011 
00012 import sfc as sfc
00013 from sfc.representation.swiginac_eval import SwiginacEvaluator
00014 
00015 from sfc.symbolic_utils import symbolic_matrix, symbolic_vector 
00016 
00017 class MockFormRep:
00018     def __init__(self, nsd):
00019         self.rank = 0
00020         self.nsd = nsd
00021 
00022 class MockVariables:
00023     def __init__(self, nsd):
00024         self.x = symbolic_vector(nsd, "x")
00025         self.Ginv_sym = symbolic_matrix(nsd, nsd, "Ginv")
00026 
00027 def ufl2swiginac(expression, nsd):
00028     formrep = MockFormRep(nsd)
00029     variables = MockVariables(nsd)
00030     use_symbols = False
00031     s = SwiginacEvaluator(formrep, variables, use_symbols)
00032     return s.transform(expression)
00033 
00034 class Ufl2SwiginacTest(unittest.TestCase):
00035     def __init__(self, *args, **kwargs):
00036         unittest.TestCase.__init__(self, *args, **kwargs)
00037     
00038     def setUp(self):
00039         pass
00040     
00041     def tearDown(self):
00042         pass
00043     
00044     def testSetup(self):
00045         pass
00046     
00047     def testIndexed1(self):
00048         A = as_vector((1,2,3))
00049         a = A[0] + A[1] +A[2]
00050         b = ufl2swiginac(a, 3)
00051         c = 1 + 2 + 3
00052         self.assertEqual(c, b)
00053     
00054     def testIndexed2(self):
00055         A = as_matrix(((1,2),(3,4)))
00056         a = sum(A[i,j] for i in (0,1) for j in (0,1))
00057         b = ufl2swiginac(a, 2)
00058         c = 1 + 2 + 3 + 4
00059         self.assertEqual(c, b)
00060     
00061     def testIndexed3(self):
00062         A = as_tensor(((1,2,3), (4,5,6), (7,8,9)))
00063         a = A[i,i]
00064         b = ufl2swiginac(a, 3)
00065         c = 1+5+9
00066         self.assertEqual(c, b)
00067     
00068     def testProduct1(self):
00069         A = as_vector((1,2,3))
00070         a = A[0]*A[1]*A[2]
00071         b = ufl2swiginac(a, 3)
00072         c = 1 * 2 * 3
00073         self.assertEqual(c, b)
00074     
00075     def testProduct2(self):
00076         u = as_vector((2,3,5))
00077         v = as_vector((7,11,13))
00078         a = u[i]*v[i]
00079         b = ufl2swiginac(a, 3)
00080         c = 2*7 + 3*11 + 5*13
00081         self.assertEqual(c, b)
00082     
00083     def testProduct3(self):
00084         u = as_tensor(((1,2,3), (4,5,6), (7,8,9)))
00085         v = as_tensor(((4,5,6), (1,2,3), (4,5,6)))
00086         a = u[i,j]*v[i,j]
00087         b = ufl2swiginac(a, 3)
00088         c = (4+10+18)*2 + 7*4+8*5+9*6
00089         self.assertEqual(c, b)
00090 
00091     def testProduct4(self):
00092         u = as_tensor(((1,2,3), (4,5,6), (7,8,9)))
00093         v = as_tensor(u[i,j], (j,i))
00094         a = inner(u, v.T)
00095         a = expand_compounds(a, 3)
00096         b = ufl2swiginac(a, 3)
00097         c = sum(ii**2 for ii in range(10)) 
00098         self.assertEqual(c, b)
00099     
00100     def testSpatialDiff1(self):
00101         "Test a single constant dx"
00102         A = as_vector((2,3))
00103         a = A[0].dx(0)
00104         b = ufl2swiginac(a, 2)
00105         c = 0
00106         self.assertEqual(c, b)
00107     
00108     def testSpatialDiff2(self):
00109         "Test a single div-type df_i/dx_i"
00110         A = as_vector((2,3))
00111         a = A[i].dx(i)
00112         b = ufl2swiginac(a, 2)
00113         c = 0
00114         self.assertEqual(c, b)
00115     
00116     def testSpatialDiff3(self):
00117         "Test a double div-type df_ij/dx_ij"
00118         A = as_vector(((2,3),(4,5)))
00119         a = A[i,j].dx(j,i)
00120         b = ufl2swiginac(a, 2)
00121         c = 0
00122         self.assertEqual(c, b)
00123         
00124 
00125 tests = [Ufl2SwiginacTest]
00126 
00127 if __name__ == "__main__":
00128     unittest.main()

Generated on Mon Aug 31 16:16:49 2009 for SyFi by  doxygen 1.5.9