SyFi  0.3
fem_sympy Namespace Reference

Classes

class  ReferenceSimplex
class  Lagrange

Functions

def bernstein_space
def create_point_set
def create_matrix

Variables

tuple t = ReferenceSimplex(2)
 f = x+y
tuple fe = Lagrange(2,2)
int u = 0
list us = []
tuple ui = Symbol("u_%d" % i)
tuple J = zeronm(fe.nbf(), fe.nbf())
list Fi = u*fe.N[i]
list uj = us[j]
tuple integrands = diff(Fi, uj)

Function Documentation

def fem_sympy.bernstein_space (   order,
  nsd 
)

Definition at line 34 of file fem_sympy.py.

00034 
00035 def bernstein_space(order, nsd): 
00036     if nsd > 3: 
00037         raise RuntimeError("Bernstein only implemented in 1D, 2D, and 3D")
00038     sum = 0 
00039     basis = []
00040     coeff = []
00041 
00042     if nsd == 1: 
00043         b1, b2 = x, 1-x 
00044         for o1 in range(0,order+1): 
00045             for o2 in range(0,order+1): 
00046                 if o1 + o2  == order: 
00047                     aij = Symbol("a_%d_%d" % (o1,o2)) 
00048                     sum += aij*binomial(order,o1)*pow(b1, o1)*pow(b2, o2)
00049                     basis.append(binomial(order,o1)*pow(b1, o1)*pow(b2, o2))
00050                     coeff.append(aij)
00051 
00052 
00053     if nsd == 2: 
00054         b1, b2, b3 = x, y, 1-x-y 
00055         for o1 in range(0,order+1): 
00056             for o2 in range(0,order+1): 
00057                 for o3 in range(0,order+1): 
00058                     if o1 + o2 + o3 == order: 
00059                         aij = Symbol("a_%d_%d_%d" % (o1,o2,o3)) 
00060                         fac = factorial(order)/(factorial(o1)*factorial(o2)*factorial(o3))
00061                         sum += aij*fac*pow(b1, o1)*pow(b2, o2)*pow(b3, o3)
00062                         basis.append(fac*pow(b1, o1)*pow(b2, o2)*pow(b3, o3))
00063                         coeff.append(aij)
00064 
00065     if nsd == 3: 
00066         b1, b2, b3, b4 = x, y, z, 1-x-y-z 
00067         for o1 in range(0,order+1): 
00068             for o2 in range(0,order+1): 
00069                 for o3 in range(0,order+1): 
00070                     for o4 in range(0,order+1): 
00071                         if o1 + o2 + o3 + o4 == order: 
00072                             aij = Symbol("a_%d_%d_%d_%d" % (o1,o2,o3,o4)) 
00073                             fac = factorial(order)/(factorial(o1)*factorial(o2)*factorial(o3)*factorial(o4))
00074                             sum += aij*fac*pow(b1, o1)*pow(b2, o2)*pow(b3, o3)*pow(b4, o4)
00075                             basis.append(fac*pow(b1, o1)*pow(b2, o2)*pow(b3, o3)*pow(b4, o4))
00076                             coeff.append(aij)
00077 
00078 
00079     return sum, coeff, basis 

def fem_sympy.create_matrix (   equations,
  coeffs 
)

Definition at line 112 of file fem_sympy.py.

References SyFi.div().

00112 
00113 def create_matrix(equations, coeffs): 
00114     A = zeronm(len(equations), len(equations))
00115     i = 0;  j = 0 
00116     for j in range(0, len(coeffs)):  
00117         c = coeffs[j]
00118         for i in range(0, len(equations)):  
00119             e = equations[i]
00120             d, r = div(e, c)
00121             A[i,j] = d 
00122     return A 
00123 
00124 

def fem_sympy.create_point_set (   order,
  nsd 
)

Definition at line 80 of file fem_sympy.py.

00080 
00081 def create_point_set(order, nsd): 
00082     h = Rational(1,order)
00083     set = []
00084 
00085     if nsd == 1: 
00086         for i in range(0, order+1):
00087             x = i*h 
00088             if x <= 1: 
00089                 set.append((x,y))
00090 
00091     if nsd == 2: 
00092         for i in range(0, order+1):
00093             x = i*h 
00094             for j in range(0, order+1):
00095                 y = j*h 
00096                 if x + y <= 1: 
00097                     set.append((x,y))
00098 
00099     if nsd == 3: 
00100         for i in range(0, order+1):
00101             x = i*h 
00102             for j in range(0, order+1):
00103                 y = j*h 
00104                 for k in range(0, order+1):
00105                     z = j*h 
00106                     if x + y + z  <= 1: 
00107                         set.append((x,y,z))
00108 
00109     return set
00110 
00111 


Variable Documentation

fem_sympy::f = x+y

Definition at line 174 of file fem_sympy.py.

tuple fem_sympy::fe = Lagrange(2,2)

Definition at line 185 of file fem_sympy.py.

list fem_sympy::Fi = u*fe.N[i]
tuple fem_sympy::integrands = diff(Fi, uj)

Definition at line 206 of file fem_sympy.py.

tuple fem_sympy::J = zeronm(fe.nbf(), fe.nbf())

Definition at line 201 of file fem_sympy.py.

Definition at line 172 of file fem_sympy.py.

int fem_sympy::u = 0

Definition at line 192 of file fem_sympy.py.

tuple fem_sympy::ui = Symbol("u_%d" % i)

Definition at line 196 of file fem_sympy.py.

list fem_sympy::uj = us[j]
list fem_sympy::us = []

Definition at line 194 of file fem_sympy.py.

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines