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 BasisFunction
00017 from ufl import TestFunction
00018 from ufl import TrialFunction
00019 
00020 from ufl import Function
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_options()
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), os.path.join(_done_test_temp_dir, d))
00061     
00062     def testSetup(self):
00063         pass
00064     
00065     def testJitMass(self):
00066         "Test the mass matrix."
00067         element = FiniteElement("CG", "triangle", 1)
00068         v = TestFunction(element)
00069         u = TrialFunction(element)
00070         a = u*v*dx
00071         form = sfc.jit(a, options = self.options)
00072         self.assertTrue(form.rank() == 2)
00073         self.assertTrue(form.num_coefficients() == 0)
00074         self.assertTrue(num_integrals(form) == (1,0,0))
00075         A = assemble_on_cell(form, "triangle", coeffs=[5.43])
00076         # TODO: Assert correct result
00077     
00078     def testJitWeightedMass(self):
00079         "Test the weighted mass matrix."
00080         element = FiniteElement("CG", "triangle", 1)
00081         v = TestFunction(element)
00082         u = TrialFunction(element)
00083         f = Function(element)
00084         a = f*u*v*dx
00085         form = sfc.jit(a, options = self.options)
00086         self.assertTrue(form.rank() == 2)
00087         self.assertTrue(form.num_coefficients() == 1)
00088         self.assertTrue(num_integrals(form) == (1,0,0))
00089         A = assemble_on_cell(form, "triangle", coeffs=[5.43])
00090         # TODO: Assert correct result
00091 
00092     def testJitSource(self):
00093         "Test the source vector."
00094         element = FiniteElement("CG", "triangle", 1)
00095         v = TestFunction(element)
00096         f = Function(element)
00097         a = f*v*dx
00098         form = sfc.jit(a, options = self.options)
00099         self.assertTrue(form.rank() == 1)
00100         self.assertTrue(form.num_coefficients() == 1)
00101         self.assertTrue(num_integrals(form) == (1,0,0))
00102         A = assemble_on_cell(form, "triangle", coeffs=[3.14])
00103         # TODO: Assert correct result
00104     
00105     def testJitSplitTerms(self):
00106         "Test a form split over two foo*dx terms, using the mass matrix."
00107         element = FiniteElement("CG", "triangle", 1)
00108         v = TestFunction(element)
00109         u = TrialFunction(element)
00110         f = Function(element)
00111         a = u*v*dx + f*u*v*dx
00112         form = sfc.jit(a, options = self.options)
00113         self.assertTrue(form.rank() == 2)
00114         self.assertTrue(form.num_coefficients() == 1)
00115         self.assertTrue(num_integrals(form) == (1,0,0))
00116         A = assemble_on_cell(form, "triangle", coeffs=[4.43])
00117         # TODO: Assert correct result
00118 
00119 
00120 tests = [JitTest]
00121 
00122 if __name__ == "__main__":
00123     unittest.main()
00124 

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