SyFi
0.3
|
00001 #!/usr/bin/env python 00002 00003 __authors__ = "Martin Sandve Alnes" 00004 __date__ = "2008-09-04 -- 2012-16-05" 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, num_integrals 00030 00031 class JitTest(TempDirTestBase): 00032 def __init__(self, *args, **kwargs): 00033 TempDirTestBase.__init__(self, *args, **kwargs) 00034 00035 def setUp(self): 00036 TempDirTestBase.setUp(self) 00037 # TODO: Perhaps subclass JitTest and use different setup routines to test options? 00038 self.options.code.integral.integration_method = "quadrature" 00039 00040 def tearDown(self): 00041 TempDirTestBase.tearDown(self) 00042 00043 def testSetup(self): 00044 "Just see that setUp and tearDown works." 00045 self.assertTrue("Did not crash in setUp.") 00046 00047 def testJitMass(self): 00048 "Test the mass matrix." 00049 element = FiniteElement("CG", "triangle", 1) 00050 v = TestFunction(element) 00051 u = TrialFunction(element) 00052 a = u*v*dx 00053 form, module, formdata, prefix = sfc.jit(a, parameters = self.options) 00054 self.assertTrue(form.rank() == 2) 00055 self.assertTrue(form.num_coefficients() == 0) 00056 self.assertTrue(num_integrals(form) == (1,0,0)) 00057 A = assemble_on_cell(form, "triangle", coeffs=[], elements=[element,element]) 00058 # TODO: Assert correct result 00059 00060 def testJitWeightedMass(self): 00061 "Test the weighted mass matrix." 00062 element = FiniteElement("CG", "triangle", 1) 00063 v = TestFunction(element) 00064 u = TrialFunction(element) 00065 f = Coefficient(element) 00066 a = f*u*v*dx 00067 form, module, formdata, prefix = sfc.jit(a, parameters = self.options) 00068 self.assertTrue(form.rank() == 2) 00069 self.assertTrue(form.num_coefficients() == 1) 00070 self.assertTrue(num_integrals(form) == (1,0,0)) 00071 A = assemble_on_cell(form, "triangle", coeffs=[5.43], elements=[element,element]) 00072 # TODO: Assert correct result 00073 00074 def testJitSource(self): 00075 "Test the source vector." 00076 element = FiniteElement("CG", "triangle", 1) 00077 v = TestFunction(element) 00078 f = Coefficient(element) 00079 a = f*v*dx 00080 form, module, formdata, prefix = sfc.jit(a, parameters = self.options) 00081 self.assertTrue(form.rank() == 1) 00082 self.assertTrue(form.num_coefficients() == 1) 00083 self.assertTrue(num_integrals(form) == (1,0,0)) 00084 A = assemble_on_cell(form, "triangle", coeffs=[3.14], elements=[element]) 00085 # TODO: Assert correct result 00086 00087 def testJitSplitTerms(self): 00088 "Test a form split over two foo*dx terms, using the mass matrix." 00089 element = FiniteElement("CG", "triangle", 1) 00090 v = TestFunction(element) 00091 u = TrialFunction(element) 00092 f = Coefficient(element) 00093 a = u*v*dx + f*u*v*dx 00094 form, module, formdata, prefix = sfc.jit(a, parameters = self.options) 00095 self.assertTrue(form.rank() == 2) 00096 self.assertTrue(form.num_coefficients() == 1) 00097 self.assertTrue(num_integrals(form) == (1,0,0)) 00098 A = assemble_on_cell(form, "triangle", coeffs=[4.43], elements=[element,element]) 00099 # TODO: Assert correct result