SyFi  0.3
jit.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 
00003 __authors__ = "Martin Sandve Alnes"
00004 __date__ = "2008-09-04 -- 2008-10-17"
00005 
00006 import unittest
00007 import os, sys, glob, shutil, commands
00008 
00009 import ufl
00010 
00011 from ufl import FiniteElement
00012 from ufl import VectorElement
00013 from ufl import TensorElement
00014 from ufl import MixedElement
00015 
00016 from ufl import Argument
00017 from ufl import TestFunction
00018 from ufl import TrialFunction
00019 
00020 from ufl import Coefficient
00021 from ufl import Constant
00022 
00023 from ufl import dx, ds
00024 
00025 import SyFi
00026 import sfc as sfc
00027 
00028 from cell_assembly import assemble_on_cell
00029 
00030 
00031 
00032 def num_integrals(form):
00033     return (form.num_cell_integrals(), form.num_exterior_facet_integrals(), form.num_interior_facet_integrals())
00034 
00035 
00036 _test_temp_dir = "temp_dir"
00037 _done_test_temp_dir = "done_temp_dir"
00038 class JitTest(unittest.TestCase):
00039     def __init__(self, *args, **kwargs):
00040         unittest.TestCase.__init__(self, *args, **kwargs)
00041         shutil.rmtree(_done_test_temp_dir, ignore_errors=True)
00042         os.mkdir(_done_test_temp_dir)
00043     
00044     def setUp(self):
00045         #print "Running sfc jit test in testdir"
00046         #print "Imported SyFi from location", SyFi.__file__
00047         #print "Imported sfc  from location", sfc.__file__
00048         self.options = sfc.default_parameters()
00049         self.options.compilation.cache_dir = os.path.abspath("test_cache")
00050         self.options.code.integral.integration_method = "quadrature"
00051         # Generate code in a clean directory:
00052         shutil.rmtree(_test_temp_dir, ignore_errors=True)
00053         os.mkdir(_test_temp_dir)
00054         os.chdir(_test_temp_dir)
00055     
00056     def tearDown(self):
00057         dirs = glob.glob("*")
00058         os.chdir("..")
00059         for d in dirs:
00060             os.rename(os.path.join(_test_temp_dir, d),
00061                       os.path.join(_done_test_temp_dir, d))
00062     
00063     def testSetup(self):
00064         pass
00065     
00066     def testJitMass(self):
00067         "Test the mass matrix."
00068         element = FiniteElement("CG", "triangle", 1)
00069         v = TestFunction(element)
00070         u = TrialFunction(element)
00071         a = u*v*dx
00072         form, module, formdata = sfc.jit(a, parameters = self.options)
00073         self.assertTrue(form.rank() == 2)
00074         self.assertTrue(form.num_coefficients() == 0)
00075         self.assertTrue(num_integrals(form) == (1,0,0))
00076         A = assemble_on_cell(form, "triangle", coeffs=[5.43])
00077         # TODO: Assert correct result
00078     
00079     def testJitWeightedMass(self):
00080         "Test the weighted mass matrix."
00081         element = FiniteElement("CG", "triangle", 1)
00082         v = TestFunction(element)
00083         u = TrialFunction(element)
00084         f = Coefficient(element)
00085         a = f*u*v*dx
00086         form, module, formdata = sfc.jit(a, parameters = self.options)
00087         self.assertTrue(form.rank() == 2)
00088         self.assertTrue(form.num_coefficients() == 1)
00089         self.assertTrue(num_integrals(form) == (1,0,0))
00090         A = assemble_on_cell(form, "triangle", coeffs=[5.43])
00091         # TODO: Assert correct result
00092 
00093     def testJitSource(self):
00094         "Test the source vector."
00095         element = FiniteElement("CG", "triangle", 1)
00096         v = TestFunction(element)
00097         f = Coefficient(element)
00098         a = f*v*dx
00099         form, module, formdata = sfc.jit(a, parameters = self.options)
00100         self.assertTrue(form.rank() == 1)
00101         self.assertTrue(form.num_coefficients() == 1)
00102         self.assertTrue(num_integrals(form) == (1,0,0))
00103         A = assemble_on_cell(form, "triangle", coeffs=[3.14])
00104         # TODO: Assert correct result
00105     
00106     def testJitSplitTerms(self):
00107         "Test a form split over two foo*dx terms, using the mass matrix."
00108         element = FiniteElement("CG", "triangle", 1)
00109         v = TestFunction(element)
00110         u = TrialFunction(element)
00111         f = Coefficient(element)
00112         a = u*v*dx + f*u*v*dx
00113         form, module, formdata = sfc.jit(a, parameters = self.options)
00114         self.assertTrue(form.rank() == 2)
00115         self.assertTrue(form.num_coefficients() == 1)
00116         self.assertTrue(num_integrals(form) == (1,0,0))
00117         A = assemble_on_cell(form, "triangle", coeffs=[4.43])
00118         # TODO: Assert correct result
00119 
00120 
00121 tests = [JitTest]
00122 
00123 if __name__ == "__main__":
00124     unittest.main()
00125 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines