SyFi 0.3
|
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