SyFi 0.3
element_representations::ElementRepresentationTest Class Reference

List of all members.

Public Member Functions

def __init__
def setUp
def tearDown
def testSetup
def testValueShapes
def testGeometryDimensions
def testTopologyDimensions
def testBasisFunctions
def testDofTopology
def testPointEvaluation
def testCoordinates
def testSubHierarchy

Public Attributes

 P1
 P2
 Q
 VQ
 V1
 V2
 T1
 T2
 TH
 M
 P1rep
 P2rep
 Qrep
 VQrep
 V1rep
 V2rep
 T1rep
 T2rep
 THrep
 Mrep
 reps

Detailed Description

Definition at line 35 of file element_representations.py.


Constructor & Destructor Documentation

def element_representations::ElementRepresentationTest::__init__ (   self,
  args,
  kwargs 
)

Definition at line 36 of file element_representations.py.

00037                                        :
00038         unittest.TestCase.__init__(self, *args, **kwargs)
    

Member Function Documentation

def element_representations::ElementRepresentationTest::setUp (   self)

Definition at line 39 of file element_representations.py.

00040                    :
00041         SyFi.initSyFi(2)
00042         polygon = "triangle"
00043         
00044         self.P1 = FiniteElement("CG", polygon, 1)
00045         self.P2 = FiniteElement("CG", polygon, 2)
00046         self.Q  = FiniteElement("Q",  polygon, 1)
00047         self.VQ = VectorElement("Q",  polygon, 1)
00048         self.V1 = VectorElement("CG", polygon, 1)
00049         self.V2 = VectorElement("CG", polygon, 2)
00050         self.T1 = TensorElement("CG", polygon, 1, symmetry=True)
00051         self.T2 = TensorElement("CG", polygon, 2, symmetry=True)
00052         self.TH = self.V2 + self.P1
00053         self.M  = MixedElement(self.T1, self.V1, self.P1)
00054         
00055         self.P1rep = ElementRepresentation(self.P1)
00056         self.P2rep = ElementRepresentation(self.P2)
00057         self.Qrep  = ElementRepresentation(self.Q, quad_rule = find_quadrature_rule(polygon, 2))
00058         self.VQrep = ElementRepresentation(self.VQ, quad_rule = find_quadrature_rule(polygon, 2))
00059         self.V1rep = ElementRepresentation(self.V1)
00060         self.V2rep = ElementRepresentation(self.V2)
00061         self.T1rep = ElementRepresentation(self.T1)
00062         self.T2rep = ElementRepresentation(self.T2)
00063         self.THrep = ElementRepresentation(self.TH)
00064         self.Mrep  = ElementRepresentation(self.M)
00065         
00066         self.reps = [getattr(self, d) for d in dir(self) if isinstance(getattr(self, d), ElementRepresentation)]
    
def element_representations::ElementRepresentationTest::tearDown (   self)

Definition at line 67 of file element_representations.py.

00068                       :
00069         pass
    
def element_representations::ElementRepresentationTest::testBasisFunctions (   self)

Definition at line 109 of file element_representations.py.

00110                                 :
00111         # Tests that for each basisfunction there is at least one nonzero value component
00112         #for rep in (self.P1rep, self.V1rep, self.T1rep):
00113         #for rep in (self.V1rep, ):
00114         for rep in self.reps:
00115             if rep.ufl_element.family() == "Quadrature"\
00116                or rep.ufl_element.family() == "Boundary Quadrature":
00117                 continue
00118             #print 
00119             #print rep
00120             for i in range(rep.local_dimension):
00121                 zeros = 0
00122                 for c in ufl.permutation.compute_indices(rep.value_shape):
00123                     #print "Calling basisfunction(", i, c, ") for element ", repr(rep.ufl_element)
00124                     N = rep.basisfunction(i, c)
00125                     #print i, c, N
00126                     if N == 0.0:
00127                         zeros += 1
00128                 self.assertTrue(zeros < rep.value_size)
00129                 if rep.local_dimension > 1 and rep.value_size > 1:
00130                     self.assertTrue(zeros > 0) # This should hold for compositions of scalar elements
00131         # FIXME: Test something more
    
def element_representations::ElementRepresentationTest::testCoordinates (   self)

Definition at line 163 of file element_representations.py.

00164                              :
00165         for rep in self.reps:
00166             #print
00167             #print rep.ufl_element
00168             for i in range(rep.local_dimension):
00169                 x  = rep.dof_x[i]
00170                 xi = rep.dof_xi[i]
00171                 #print i, xi
00172                 #x2 = rep.xi_to_x(xi)
00173                 #xi2 = rep.x_to_xi(x)
00174                 #self.assertTrue(x2 == x)
00175                 #self.assertTrue(xi2 == xi)
00176         # FIXME: Test something more
    
def element_representations::ElementRepresentationTest::testDofTopology (   self)

Definition at line 132 of file element_representations.py.

00133                              :
00134         def triangle_entities():
00135             for d in range(2):
00136                 for i in range((3,3,1)[d]):
00137                     yield (d,i)
00138         for rep in self.reps:
00139             for (d,i) in triangle_entities():
00140                 dofs = rep.entity_dofs[d][i]
00141                 self.assertTrue(len(dofs) == rep.num_entity_dofs[d])
00142         # FIXME: Test something more
    
def element_representations::ElementRepresentationTest::testGeometryDimensions (   self)

Definition at line 85 of file element_representations.py.

00086                                     :
00087         self.assertTrue( self.P1rep.geometric_dimension == 2 )
00088         self.assertTrue( self.P2rep.geometric_dimension == 2 )
00089         self.assertTrue( self.Qrep.geometric_dimension  == 2 )
00090         self.assertTrue( self.VQrep.geometric_dimension == 2 )
00091         self.assertTrue( self.V1rep.geometric_dimension == 2 )
00092         self.assertTrue( self.V2rep.geometric_dimension == 2 )
00093         self.assertTrue( self.T1rep.geometric_dimension == 2 )
00094         self.assertTrue( self.T2rep.geometric_dimension == 2 )
00095         self.assertTrue( self.THrep.geometric_dimension == 2 )
00096         self.assertTrue( self.Mrep.geometric_dimension  == 2 )
    
def element_representations::ElementRepresentationTest::testPointEvaluation (   self)

Definition at line 143 of file element_representations.py.

00144                                  :
00145         # Tests that the property { N_k(\xi_j) == \delta_{kj} } holds for scalar elements.
00146         for rep in (self.P1rep, self.P2rep):
00147             for i in range(rep.local_dimension):
00148                 x  = rep.dof_x[i]
00149                 xi = rep.dof_xi[i]
00150                 
00151                 repmap = swiginac.exmap()
00152                 for j in range(2):
00153                     repmap[rep.p[j]] = xi[j]
00154                 
00155                 for k in range(rep.local_dimension):
00156                     c = () # Assuming scalar element here:
00157                     N = rep.basisfunction(k, c)
00158                     Nxi = N.subs(repmap)
00159                     if i == k:
00160                         self.assertTrue(Nxi == 1.0)
00161                     else:
00162                         self.assertTrue(Nxi == 0.0)
    
def element_representations::ElementRepresentationTest::testSetup (   self)

Definition at line 70 of file element_representations.py.

00071                        :
00072         pass

def element_representations::ElementRepresentationTest::testSubHierarchy (   self)

Definition at line 177 of file element_representations.py.

00178                               :
00179         self.assertTrue( self.P1rep.num_sub_elements == 0 )
00180         self.assertTrue( self.P2rep.num_sub_elements == 0 )
00181         self.assertTrue( self.Qrep.num_sub_elements  == 0 )
00182         self.assertTrue( self.VQrep.num_sub_elements == 2 )
00183         self.assertTrue( self.V1rep.num_sub_elements == 2 )
00184         self.assertTrue( self.V2rep.num_sub_elements == 2 )
00185         self.assertTrue( self.T1rep.num_sub_elements == 3 )
00186         self.assertTrue( self.T2rep.num_sub_elements == 3 )
00187         self.assertTrue( self.THrep.num_sub_elements == 2 )
00188         self.assertTrue( self.Mrep.num_sub_elements  == 3 )
00189 

def element_representations::ElementRepresentationTest::testTopologyDimensions (   self)

Definition at line 97 of file element_representations.py.

00098                                     :
00099         self.assertTrue( self.P1rep.topological_dimension == 2 )
00100         self.assertTrue( self.P2rep.topological_dimension == 2 )
00101         self.assertTrue( self.Qrep.topological_dimension  == 2 )
00102         self.assertTrue( self.VQrep.topological_dimension == 2 )
00103         self.assertTrue( self.V1rep.topological_dimension == 2 )
00104         self.assertTrue( self.V2rep.topological_dimension == 2 )
00105         self.assertTrue( self.T1rep.topological_dimension == 2 )
00106         self.assertTrue( self.T2rep.topological_dimension == 2 )
00107         self.assertTrue( self.THrep.topological_dimension == 2 )
00108         self.assertTrue( self.Mrep.topological_dimension  == 2 )
    
def element_representations::ElementRepresentationTest::testValueShapes (   self)

Definition at line 73 of file element_representations.py.

00074                              :
00075         self.assertTrue( self.P1rep.value_shape == () )
00076         self.assertTrue( self.P2rep.value_shape == () )
00077         self.assertTrue( self.Qrep.value_shape  == () )
00078         self.assertTrue( self.VQrep.value_shape == (2,) )
00079         self.assertTrue( self.V1rep.value_shape == (2,) )
00080         self.assertTrue( self.V2rep.value_shape == (2,) )
00081         self.assertTrue( self.T1rep.value_shape == (2,2) )
00082         self.assertTrue( self.T2rep.value_shape == (2,2) )
00083         self.assertTrue( self.THrep.value_shape == (2+1,) )
00084         self.assertTrue( self.Mrep.value_shape  == (4+2+1,) )


Member Data Documentation


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines