SyFi  0.3
test_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 -- 2012-05-16"
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 test_tempdir_base import TempDirTestBase
00029 from cell_assembly import assemble_on_cell, cell2volume, num_integrals
00030 
00031 import instant
00032 instant.set_logging_level("warning")
00033 
00034 class ElementIndexingTest(TempDirTestBase):
00035     def __init__(self, *args, **kwargs):
00036         TempDirTestBase.__init__(self, *args, **kwargs)
00037 
00038     def setUp(self):
00039         TempDirTestBase.setUp(self)
00040 
00041     def tearDown(self):
00042         TempDirTestBase.tearDown(self)
00043 
00044     def testSetup(self):
00045         "Just see that setUp and tearDown works."
00046         self.assertTrue("Did not crash in setUp.")
00047 
00048     def testScalarArgument(self):
00049         polygon = "triangle"
00050         degree = 1
00051         element = FiniteElement("CG", polygon, degree)
00052         v = Argument(element)
00053         a = v*dx
00054         form, module, formdata, prefix = sfc.jit(a, parameters = self.options)
00055         # Test form properties
00056         self.assertTrue(form.rank() == 1)
00057         self.assertTrue(form.num_coefficients() == 0)
00058         self.assertTrue(num_integrals(form) == (1,0,0))
00059         # Test assembled values
00060         A = assemble_on_cell(form, polygon, coeffs=[], elements=[element])
00061         #self.assertAlmostEqual(A, cell2volume[polygon]) # TODO
00062 
00063     def testScalarCoefficient(self):
00064         polygon = "triangle"
00065         degree = 1
00066         element = FiniteElement("CG", polygon, degree)
00067         f = Coefficient(element)
00068         a = f*dx
00069         form, module, formdata, prefix = sfc.jit(a, parameters = self.options)
00070         # Test form properties
00071         self.assertTrue(form.rank() == 0)
00072         self.assertTrue(form.num_coefficients() == 1)
00073         self.assertTrue(num_integrals(form) == (1,0,0))
00074         # Test assembled values
00075         const = 1.23
00076         A = assemble_on_cell(form, polygon, coeffs=[const])
00077         self.assertAlmostEqual(A, const*cell2volume[polygon])
00078 
00079     def testVectorArgument(self):
00080         polygon = "triangle"
00081         degree = 1
00082         element = VectorElement("CG", polygon, degree)
00083         v = Argument(element)
00084         a = v[0]*dx
00085         form, module, formdata, prefix = sfc.jit(a, parameters = self.options)
00086         # Test form properties
00087         self.assertTrue(form.rank() == 1)
00088         self.assertTrue(form.num_coefficients() == 0)
00089         self.assertTrue(num_integrals(form) == (1,0,0))
00090         # Test assembled values
00091         A = assemble_on_cell(form, polygon, coeffs=[], elements=[element])
00092         #self.assertAlmostEqual(A, cell2volume[polygon]) # TODO
00093 
00094     def testVectorCoefficient(self):
00095         polygon = "triangle"
00096         degree = 1
00097         element = VectorElement("CG", polygon, degree)
00098         f = Coefficient(element)
00099         a = (f[0] + f[1])*dx
00100         form, module, formdata, prefix = sfc.jit(a, parameters = self.options)
00101         # Test form properties
00102         self.assertTrue(form.rank() == 0)
00103         self.assertTrue(form.num_coefficients() == 1)
00104         self.assertTrue(num_integrals(form) == (1,0,0))
00105         # Test assembled values
00106         const = (1.23, 4.56)
00107         A = assemble_on_cell(form, polygon, coeffs=[const])
00108         self.assertAlmostEqual(A, (float(const[0]) +
00109                                    float(const[1]))*cell2volume[polygon])
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines