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 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 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_parameters() 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), 00061 os.path.join(_done_test_temp_dir, d)) 00062 00063 def testSetup(self): 00064 pass 00065 00066 def testJitMass(self): 00067 "Test the mass matrix." 00068 element = FiniteElement("CG", "triangle", 1) 00069 v = TestFunction(element) 00070 u = TrialFunction(element) 00071 a = u*v*dx 00072 form, module, formdata = sfc.jit(a, parameters = self.options) 00073 self.assertTrue(form.rank() == 2) 00074 self.assertTrue(form.num_coefficients() == 0) 00075 self.assertTrue(num_integrals(form) == (1,0,0)) 00076 A = assemble_on_cell(form, "triangle", coeffs=[5.43]) 00077 # TODO: Assert correct result 00078 00079 def testJitWeightedMass(self): 00080 "Test the weighted mass matrix." 00081 element = FiniteElement("CG", "triangle", 1) 00082 v = TestFunction(element) 00083 u = TrialFunction(element) 00084 f = Coefficient(element) 00085 a = f*u*v*dx 00086 form, module, formdata = sfc.jit(a, parameters = self.options) 00087 self.assertTrue(form.rank() == 2) 00088 self.assertTrue(form.num_coefficients() == 1) 00089 self.assertTrue(num_integrals(form) == (1,0,0)) 00090 A = assemble_on_cell(form, "triangle", coeffs=[5.43]) 00091 # TODO: Assert correct result 00092 00093 def testJitSource(self): 00094 "Test the source vector." 00095 element = FiniteElement("CG", "triangle", 1) 00096 v = TestFunction(element) 00097 f = Coefficient(element) 00098 a = f*v*dx 00099 form, module, formdata = sfc.jit(a, parameters = self.options) 00100 self.assertTrue(form.rank() == 1) 00101 self.assertTrue(form.num_coefficients() == 1) 00102 self.assertTrue(num_integrals(form) == (1,0,0)) 00103 A = assemble_on_cell(form, "triangle", coeffs=[3.14]) 00104 # TODO: Assert correct result 00105 00106 def testJitSplitTerms(self): 00107 "Test a form split over two foo*dx terms, using the mass matrix." 00108 element = FiniteElement("CG", "triangle", 1) 00109 v = TestFunction(element) 00110 u = TrialFunction(element) 00111 f = Coefficient(element) 00112 a = u*v*dx + f*u*v*dx 00113 form, module, formdata = sfc.jit(a, parameters = self.options) 00114 self.assertTrue(form.rank() == 2) 00115 self.assertTrue(form.num_coefficients() == 1) 00116 self.assertTrue(num_integrals(form) == (1,0,0)) 00117 A = assemble_on_cell(form, "triangle", coeffs=[4.43]) 00118 # TODO: Assert correct result 00119 00120 00121 tests = [JitTest] 00122 00123 if __name__ == "__main__": 00124 unittest.main() 00125