00001
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
00046
00047
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
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
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
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
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
00118
00119
00120 tests = [JitTest]
00121
00122 if __name__ == "__main__":
00123 unittest.main()
00124