00001
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
00047
00048
00049 self.options = sfc.default_options()
00050 self.options.compilation.cache_dir = os.path.abspath("test_cache")
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 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
00073 self.assertTrue(form.rank() == 1)
00074 self.assertTrue(form.num_coefficients() == 0)
00075 self.assertTrue(num_integrals(form) == (1,0,0))
00076
00077
00078
00079
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
00089 self.assertTrue(form.rank() == 0)
00090 self.assertTrue(form.num_coefficients() == 1)
00091 self.assertTrue(num_integrals(form) == (1,0,0))
00092
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
00105 self.assertTrue(form.rank() == 1)
00106 self.assertTrue(form.num_coefficients() == 0)
00107 self.assertTrue(num_integrals(form) == (1,0,0))
00108
00109
00110
00111
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
00121 self.assertTrue(form.rank() == 0)
00122 self.assertTrue(form.num_coefficients() == 1)
00123 self.assertTrue(num_integrals(form) == (1,0,0))
00124
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