element_indexing.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-09-04"
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, cell2volume
00029 
00030 import instant
00031 instant.set_logging_level("warning")
00032 
00033 def num_integrals(form):
00034     return (form.num_cell_integrals(), form.num_exterior_facet_integrals(), form.num_interior_facet_integrals())
00035 
00036 
00037 _test_temp_dir = "volume_temp_dir"
00038 _done_test_temp_dir = "done_volume_temp_dir"
00039 class ElementIndexingTest(unittest.TestCase):
00040     def __init__(self, *args, **kwargs):
00041         unittest.TestCase.__init__(self, *args, **kwargs)
00042         shutil.rmtree(_done_test_temp_dir, ignore_errors=True)
00043         os.mkdir(_done_test_temp_dir)
00044     
00045     def setUp(self):
00046         #print "Running sfc jit test in testdir"
00047         #print "Imported SyFi from location", SyFi.__file__
00048         #print "Imported sfc  from location", sfc.__file__
00049         self.options = sfc.default_options()
00050         self.options.compilation.cache_dir = os.path.abspath("test_cache")
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 testScalarBasisFunction(self):
00066         polygon = "triangle"
00067         degree = 1
00068         element = FiniteElement("CG", polygon, degree)
00069         v = BasisFunction(element)
00070         a = v*dx
00071         form = sfc.jit(a, options = self.options)
00072         # Test form properties
00073         self.assertTrue(form.rank() == 1)
00074         self.assertTrue(form.num_coefficients() == 0)
00075         self.assertTrue(num_integrals(form) == (1,0,0))
00076         # TODO: Test values
00077         #const = 1.23
00078         #A = assemble_on_cell(form, polygon, coeffs=[const])
00079         #self.assertAlmostEqual(A, const*cell2volume[polygon])
00080 
00081     def testScalarFunction(self):
00082         polygon = "triangle"
00083         degree = 1
00084         element = FiniteElement("CG", polygon, degree)
00085         f = Function(element)
00086         a = f*dx
00087         form = sfc.jit(a, options = self.options)
00088         # Test form properties
00089         self.assertTrue(form.rank() == 0)
00090         self.assertTrue(form.num_coefficients() == 1)
00091         self.assertTrue(num_integrals(form) == (1,0,0))
00092         # Test values
00093         const = 1.23
00094         A = assemble_on_cell(form, polygon, coeffs=[const])
00095         self.assertAlmostEqual(A, const*cell2volume[polygon])
00096 
00097     def testVectorBasisFunction(self):
00098         polygon = "triangle"
00099         degree = 1
00100         element = VectorElement("CG", polygon, degree)
00101         v = BasisFunction(element)
00102         a = v[0]*dx
00103         form = sfc.jit(a, options = self.options)
00104         # Test form properties
00105         self.assertTrue(form.rank() == 1)
00106         self.assertTrue(form.num_coefficients() == 0)
00107         self.assertTrue(num_integrals(form) == (1,0,0))
00108         # TODO: Test values
00109         #const = ("1.23", "4.56")
00110         #A = assemble_on_cell(form, polygon, coeffs=[const])
00111         #self.assertAlmostEqual(A, (float(const[0]) + float(const[1]))*cell2volume[polygon])
00112 
00113     def testVectorFunction(self):
00114         polygon = "triangle"
00115         degree = 1
00116         element = VectorElement("CG", polygon, degree)
00117         f = Function(element)
00118         a = (f[0] + f[1])*dx
00119         form = sfc.jit(a, options = self.options)
00120         # Test form properties
00121         self.assertTrue(form.rank() == 0)
00122         self.assertTrue(form.num_coefficients() == 1)
00123         self.assertTrue(num_integrals(form) == (1,0,0))
00124         # Test values
00125         const = ("1.23", "4.56")
00126         A = assemble_on_cell(form, polygon, coeffs=[const])
00127         self.assertAlmostEqual(A, (float(const[0]) + float(const[1]))*cell2volume[polygon])
00128 
00129 
00130 tests = [ElementIndexingTest]
00131 
00132 if __name__ == "__main__":
00133     unittest.main()
00134 

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