SyFi
0.3
|
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 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, 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_parameters() 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 testScalarArgument(self): 00066 polygon = "triangle" 00067 degree = 1 00068 element = FiniteElement("CG", polygon, degree) 00069 v = Argument(element) 00070 a = v*dx 00071 form, module, formdata = sfc.jit(a, parameters = 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 testScalarCoefficient(self): 00082 polygon = "triangle" 00083 degree = 1 00084 element = FiniteElement("CG", polygon, degree) 00085 f = Coefficient(element) 00086 a = f*dx 00087 form, module, formdata = sfc.jit(a, parameters = 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 testVectorArgument(self): 00098 polygon = "triangle" 00099 degree = 1 00100 element = VectorElement("CG", polygon, degree) 00101 v = Argument(element) 00102 a = v[0]*dx 00103 form, module, formdata = sfc.jit(a, parameters = 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 testVectorCoefficient(self): 00114 polygon = "triangle" 00115 degree = 1 00116 element = VectorElement("CG", polygon, degree) 00117 f = Coefficient(element) 00118 a = (f[0] + f[1])*dx 00119 form, module, formdata = sfc.jit(a, parameters = 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