Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
66f473e
remove pytest-cases dependency
dham Oct 21, 2019
852d203
Merge remote-tracking branch 'fenics/master' into test_fixes
dham Oct 21, 2019
825b23a
Merge pull request #37 from FEniCS/test_fixes
dham Oct 21, 2019
e17f215
Add Gauss-Radau points and a corresponding finite element.
rckirby Apr 24, 2020
838bfa7
flake8 quadrature.py
rckirby Apr 24, 2020
a44d94b
Fix flake8 on __init__.py
rckirby Apr 24, 2020
44e82a4
Add Actions testing.
garth-wells Apr 25, 2020
9cb6e0c
Install pytest
garth-wells Apr 25, 2020
1954d97
Install xdist
garth-wells Apr 25, 2020
021f5d1
More tuning on Actions.
garth-wells Apr 25, 2020
c536171
Run test in serial
garth-wells Apr 25, 2020
a76bba6
Allow a QuadratureElement to take in the weights.
pefarrell Apr 28, 2020
29bdfbf
Merge pull request #42 from FEniCS/garth/actions
garth-wells Apr 28, 2020
c1fac33
Merge branch 'master' into pefarrell/quadrature-element-weights
pefarrell Apr 28, 2020
4ca7e9a
Merge pull request #43 from firedrakeproject/pefarrell/quadrature-ele…
wence- Apr 29, 2020
b3accbe
Add radau quadrature to tests
rckirby Apr 29, 2020
2d0fa1a
Add test for GaussRadau element
rckirby Apr 29, 2020
d4a0b13
flake8
rckirby Apr 29, 2020
b33bc07
Merge remote-tracking branch 'origin/master' into radau
rckirby Apr 29, 2020
d326f92
serendipity: Massively speed up tabulation
wence- May 1, 2020
6cd7732
Merge pull request #45 from FEniCS/wence/feature/faster-serendipity
dham May 1, 2020
37b48ee
Fix serendipity tabulation for non-3D cells
wence- May 1, 2020
cea4908
Merge pull request #46 from FEniCS/wence/fix/serendipity
wence- May 1, 2020
3240e97
Merge branch 'master' into radau
rckirby May 1, 2020
a6e249c
Merge pull request #44 from firedrakeproject/radau
wence- May 11, 2020
63e3192
setup: Ignore ambiguous variable names for flake8
wence- May 18, 2020
a8c4d48
Merge pull request #47 from FEniCS/wence/flake8-updates
wence- May 18, 2020
a420cfa
Work on coveralls
garth-wells Jun 2, 2020
da43e59
Disable CircleCI coveralls
garth-wells Jun 2, 2020
691fb52
Run pytest in serial
garth-wells Jun 2, 2020
8efa7c7
Reduce test size
garth-wells Jun 2, 2020
0ecc107
Work around coveralls bug
garth-wells Jun 2, 2020
c5699dd
Another attempt
garth-wells Jun 2, 2020
612953a
Set env variable
garth-wells Jun 2, 2020
a0bdd15
Remove CircleCI
garth-wells Jun 2, 2020
f54aee1
Run more versions
garth-wells Jun 2, 2020
e404609
Remove duplicate if statements
garth-wells Jun 2, 2020
5abc9d6
Test if
garth-wells Jun 2, 2020
9f5eb86
Test if again
garth-wells Jun 2, 2020
2fef3d2
More testing
garth-wells Jun 2, 2020
9dd3e98
Syntax fix
garth-wells Jun 2, 2020
bebac84
Add version num
garth-wells Jun 2, 2020
3604c4f
Add test version
garth-wells Jun 2, 2020
51cd623
Enable all tests
garth-wells Jun 2, 2020
c453dd2
Update README
garth-wells Jun 2, 2020
0eded59
Upddate Action name
garth-wells Jun 2, 2020
ada2220
Move badges
garth-wells Jun 2, 2020
9d6907f
Toriesz (#48)
rckirby Jun 3, 2020
7d02fbd
Merge branch 'master' into garth/actions-testing
garth-wells Jun 3, 2020
2bb137d
Merge pull request #49 from FEniCS/garth/actions-testing
garth-wells Jun 3, 2020
cf6b194
Do not push coveralls on forks
garth-wells Jun 3, 2020
e17a90f
Merge pull request #50 from FEniCS/garth/coveralls-update
garth-wells Jun 3, 2020
ccc94c3
Fix failing coveralls (#51)
michalhabera Jun 8, 2020
09c34de
Add Point Cell and PointExpansionSet
ReubenHill Jun 26, 2020
e74e070
Merge pull request #41 from firedrakeproject/vertexcell
wence- Jun 26, 2020
74373d9
Textbook functionals for H(div/curl) elements
FabianL1908 Apr 1, 2020
b71eaa0
Add tests for new variants of RT and Nedelec spaces
FabianL1908 Jun 26, 2020
21b447d
Test if user-specified integration degree is too low
FabianL1908 Jun 29, 2020
d9aac42
Merge pull request #52 from firedrakeproject/wence/feature/interpolat…
wence- Jul 21, 2020
f2f5150
Add test of higher derivatives of serendipity element
wence- Jul 22, 2020
8cac8ab
Broadcast result of lambdify in Serendipity tabulation
wence- Jul 16, 2020
e16d9f3
Merge pull request #54 from firedrakeproject/wence/fix/serendipity-de…
wence- Jul 22, 2020
7f95abd
N1curl: Correctly advertise shape of interior moments
wence- Aug 14, 2020
d085f35
Merge pull request #55 from FEniCS/wence/fix/nedelec-integral-moment
wence- Aug 17, 2020
1d562d6
Some Zany H(div) elements (#56)
rckirby Aug 26, 2020
8535057
Adding Kong-Mulder-Veldhuizen simplicial elements (#59)
Sep 10, 2020
b65559a
"Pointwise" dual sets (#60)
rckirby Sep 14, 2020
42ceef3
wence/fix/serendipity tensor product (#62)
wence- Sep 18, 2020
0439689
FIX manual.rst (#63)
nindanaoto Jan 15, 2021
7d418fa
GL/GLL tabulation via barycentric interpolation (#65)
pbrubeck Apr 19, 2021
3233823
SminusCurl Whitespace
jmv2009 May 27, 2021
4560079
SminusDiv Whitespace
jmv2009 May 27, 2021
12ad000
SminusCurl variable unambiguous
jmv2009 May 27, 2021
7e2a0fe
Update SminusDiv.py
jmv2009 May 27, 2021
fe49f2d
Update Sminus.py
jmv2009 May 27, 2021
a5385f6
Update Sminus.py
jmv2009 May 27, 2021
530251b
Update SminusDiv.py
jmv2009 May 27, 2021
4ff5b77
Update __init__.py
jmv2009 May 27, 2021
3baccb9
Update __init__.py
jmv2009 May 27, 2021
f1f079b
Merge branch 'FEniCS:master' into patch-2
jmv2009 May 27, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 0 additions & 26 deletions .circleci/config.yml

This file was deleted.

41 changes: 41 additions & 0 deletions .github/workflows/pythonapp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# This workflow will install Python dependencies, run tests and lint
# with a single version of Python For more information see:
# https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: FIAT CI

on: [push, pull_request]

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
python-version: [3.7, 3.8]

steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Lint with flake8
run: |
pip install flake8
flake8 --statistics .
- name: Check documentation style
run: |
pip install pydocstyle
python -m pydocstyle .
- name: Install FIAT
run: pip install .
- name: Test with pytest
run: |
pip install coveralls pytest pytest-cov pytest-xdist
DATA_REPO_GIT="" pytest --cov=FIAT/ test/
- name: Coveralls
if: ${{ github.repository == 'FEniCS/fiat' && github.head_ref == '' && matrix.os == 'ubuntu-latest' && matrix.python-version == '3.8' }}
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
run: coveralls
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@
/.cache/
/doc/sphinx/source/api-doc
release/

/doc/sphinx/source/_build/
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ python:

before_install:
- pip install flake8
- pip install pytest pytest-cases
- pip install pytest

install:
- pip install .
Expand Down
3 changes: 3 additions & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,6 @@ Contributors:

Cyrus Cheng
email: cyruscycheng21@gmail.com

Reuben W. Hill
email: reuben.hill10@imperial.ac.uk
5 changes: 4 additions & 1 deletion FIAT/P0.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@ def __init__(self, ref_el):
entity_ids = {}
nodes = []
vs = numpy.array(ref_el.get_vertices())
bary = tuple(numpy.average(vs, 0))
if ref_el.get_dimension() == 0:
bary = ()
else:
bary = tuple(numpy.average(vs, 0))

nodes = [functional.PointEvaluation(ref_el, bary)]
entity_ids = {}
Expand Down
103 changes: 51 additions & 52 deletions FIAT/Sminus.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,15 @@
def triangular_number(n):
return int((n+1)*n/2)


def choose_ijk_total(degree):
top = 1
for i in range(1, 2 + degree + 1):
top = i * top
bottom = 1
for i in range(1, degree + 1):
bottom = i * bottom
return int(top /(2 * bottom))
return int(top / (2 * bottom))


class TrimmedSerendipity(FiniteElement):
Expand Down Expand Up @@ -69,17 +70,17 @@ def __init__(self, ref_el, degree, mapping):

if(degree >= 2):
entity_ids[2][0] = list(range(cur, cur + 2*triangular_number(degree - 2) + degree))

cur += 2*triangular_number(degree - 2) + degree

else:
#3-d case.
# 3-d case.
entity_ids[3] = {}
for j in sorted(flat_topology[1]):
entity_ids[1][j] = list(range(cur, cur + degree))
cur = cur + degree
if (degree >= 2 ):

if (degree >= 2):
if (degree < 4):
for j in sorted(flat_topology[2]):
entity_ids[2][j] = list(range(cur, cur + 2*triangular_number(degree - 2) + degree))
Expand All @@ -88,8 +89,7 @@ def __init__(self, ref_el, degree, mapping):
for j in sorted(flat_topology[2]):
entity_ids[2][j] = list(range(cur, cur + 3 * degree - 4))
cur = cur + 3*degree - 4



if (degree >= 4):
if (degree == 4):
entity_ids[3][0] = list(range(cur, cur + 6))
Expand Down Expand Up @@ -172,7 +172,6 @@ def tabulate(self, order, points, entity=None):
phivals[alpha] = T
return phivals


def entity_dofs(self):
"""Return the map of topological entities to degrees of
freedom for the finite element."""
Expand Down Expand Up @@ -284,113 +283,113 @@ def trimmed_f_lambda_2d(deg, dx, dy, x_mid, y_mid):

def e_lambda_1_3d_trimmed(max_deg, dx, dy, dz, x_mid, y_mid, z_mid):
EL = tuple([])
##assignment to edge x=y=0
for i in range (0, max_deg):
# #assignment to edge x=y=0
for i in range(0, max_deg):
EL += tuple([(0, 0, leg(i, z_mid) * dx[0] * dy[0])])
##assignment to edge x=0, y=1
# #assignment to edge x=0, y=1
for i in range(0, max_deg):
EL += tuple([(0, 0, leg(i, z_mid) * dy[1] * dx[0])])
##assignment to edge x = 1, y = 0
# #assignment to edge x = 1, y = 0
for i in range(0, max_deg):
EL += tuple([(0, 0, leg(i, z_mid) * dx[1] * dy[0])])
##assignment to edge x = 1, y = 1
# #assignment to edge x = 1, y = 1
for i in range(0, max_deg):
EL += tuple([(0, 0, leg(i, z_mid) * dx[1] * dy[1])])
##assignment to edge x = 0, z = 0
# #assignment to edge x = 0, z = 0
for i in range(0, max_deg):
EL += tuple([(0, leg(i, y_mid) * dx[0] * dz[0], 0)])
##assignment to edge x = 0, z = 1
# #assignment to edge x = 0, z = 1
for i in range(0, max_deg):
EL += tuple([(0, leg(i, y_mid) * dx[0] * dz[1], 0)])
##assignment to edge x = 1, z = 0
# #assignment to edge x = 1, z = 0
for i in range(0, max_deg):
EL += tuple([(0, leg(i, y_mid) * dx[1] * dz[0], 0)])
##assignment to edge x = 1, z = 1
# #assignment to edge x = 1, z = 1
for i in range(0, max_deg):
EL += tuple([(0, leg(i, y_mid) * dx[1] * dz[1], 0)])
##assignment to edge y = 0, z = 0
# #assignment to edge y = 0, z = 0
for i in range(0, max_deg):
EL += tuple([(leg(i, x_mid) * dy[0] * dz[0], 0, 0)])
##assignment to edge y = 0, z = 1
# #assignment to edge y = 0, z = 1
for i in range(0, max_deg):
EL += tuple([(leg(i, x_mid) * dy[0] * dz[1], 0, 0)])
##assignment to edge y = 1, z = 0
# #assignment to edge y = 1, z = 0
for i in range(0, max_deg):
EL += tuple([(leg(i, x_mid) * dy[1] * dz[0], 0, 0)])
##assignment to edge y = 1, z = 1
# #assignment to edge y = 1, z = 1
for i in range(0, max_deg):
EL += tuple([(leg(i, x_mid) * dy[1] * dz[1], 0, 0)])
return EL


def f_lambda_1_3d_trimmed(max_deg, dx, dy, dz, x_mid, y_mid, z_mid):
FL = tuple([])
##Assignment to face x = 0, Ftilde
# #Assignment to face x = 0, Ftilde
FL += tuple([(0, leg(max_deg - 2, z_mid) * dx[0] * dz[0] * dz[1], 0)])
FL += tuple([(0, 0, leg(max_deg - 2, y_mid) * dx[0] * dy[0] * dy[1])])
for j in range(1, max_deg - 1):
FL += tuple([(0, leg(j, y_mid) * leg(max_deg - j - 2, z_mid) * dx[0] * dz[0] * dz[1],
-leg(j - 1, y_mid) * leg(max_deg - j - 1, z_mid) * dx[0] * dy[0] * dy[1])])
##Assignment to face x = 0, F
FL += tuple([(0, leg(j, y_mid) * leg(max_deg - j - 2, z_mid) * dx[0] * dz[0] * dz[1],
-leg(j - 1, y_mid) * leg(max_deg - j - 1, z_mid) * dx[0] * dy[0] * dy[1])])
# #Assignment to face x = 0, F
for j in range(1, max_deg - 1):
k = max_deg - j - 2
FL += tuple([(0, leg(j, y_mid) * leg(k, z_mid) * dx[0] * dz[0] * dz[1], 0)])
FL += tuple([(0, 0, leg(j, z_mid) * leg(k, x_mid) * dx[0] * dy[0] * dy[1])])
##Assignment to face x = 1, Ftilde
# #Assignment to face x = 1, Ftilde
FL += tuple([(0, leg(max_deg - 2, z_mid) * dx[1] * dz[0] * dz[1], 0)])
FL += tuple([(0, 0, leg(max_deg - 2, y_mid) * dx[1] * dy[0] * dy[1])])
for j in range(1, max_deg - 1):
FL += tuple([(0, leg(j, y_mid) * leg(max_deg - j - 2, z_mid) * dx[1] * dz[0] * dz[1],
-leg(j - 1, y_mid) * leg(max_deg - j - 1, z_mid) * dx[1] * dy[0] * dy[1])])
##Assignment to face x = 1, F
FL += tuple([(0, leg(j, y_mid) * leg(max_deg - j - 2, z_mid) * dx[1] * dz[0] * dz[1],
-leg(j - 1, y_mid) * leg(max_deg - j - 1, z_mid) * dx[1] * dy[0] * dy[1])])
# #Assignment to face x = 1, F
for j in range(1, max_deg - 1):
k = max_deg - j - 2
FL += tuple([(0, leg(j, y_mid) * leg(k, z_mid) * dx[1] * dz[0] * dz[1], 0)])
FL += tuple([(0, 0, leg(j, z_mid) * leg(k, x_mid) * dx[1] * dy[0] * dy[1])])

##Assignment to face y = 0, Ftilde
# #Assignment to face y = 0, Ftilde
FL += tuple([(leg(max_deg - 2, z_mid) * dy[0] * dz[0] * dz[1], 0, 0)])
FL += tuple([(0, 0, leg(max_deg - 2, x_mid) * dy[0] * dx[0] * dx[1])])
for j in range(1, max_deg - 1):
FL += tuple([(leg(j, x_mid) * leg(max_deg - j - 2, z_mid) * dy[0] * dz[0] * dz[1], 0,
-leg(j - 1, x_mid) * leg(max_deg - j - 1, z_mid) * dy[0] * dx[0] * dx[1])])
##Assignment to face y = 0, F
FL += tuple([(leg(j, x_mid) * leg(max_deg - j - 2, z_mid) * dy[0] * dz[0] * dz[1], 0,
-leg(j - 1, x_mid) * leg(max_deg - j - 1, z_mid) * dy[0] * dx[0] * dx[1])])
# #Assignment to face y = 0, F
for j in range(1, max_deg - 1):
k = max_deg - j - 2
FL += tuple([(leg(j, x_mid) * leg(k, z_mid) * dy[0] * dz[0] * dz[1], 0, 0)])
FL += tuple([(0, 0, leg(j, z_mid) * leg(k, y_mid) * dy[0] * dx[0] * dx[1])])

##Assignment to face y = 1, Ftilde
# #Assignment to face y = 1, Ftilde
FL += tuple([(leg(max_deg - 2, z_mid) * dy[1] * dz[0] * dz[1], 0, 0)])
FL += tuple([(0, 0, leg(max_deg - 2, x_mid) * dy[1] * dx[0] * dx[1])])
for j in range(1, max_deg - 1):
FL += tuple([(leg(j, x_mid) * leg(max_deg - j - 2, z_mid) * dy[1] * dz[0] * dz[1], 0,
-leg(j - 1, x_mid) * leg(max_deg - j - 1, z_mid) * dy[1] * dx[0] * dx[1])])
##Assignment to face y = 1, F
FL += tuple([(leg(j, x_mid) * leg(max_deg - j - 2, z_mid) * dy[1] * dz[0] * dz[1], 0,
-leg(j - 1, x_mid) * leg(max_deg - j - 1, z_mid) * dy[1] * dx[0] * dx[1])])
# #Assignment to face y = 1, F
for j in range(1, max_deg - 1):
k = max_deg - j - 2
FL += tuple([(leg(j, x_mid) * leg(k, z_mid) * dy[1] * dz[0] * dz[1], 0, 0)])
FL += tuple([(0, 0, leg(j, z_mid) * leg(k, y_mid) * dy[1] * dx[0] * dx[1])])

##Assignment to face z = 0, Ftilde
# #Assignment to face z = 0, Ftilde
FL += tuple([(leg(max_deg - 2, y_mid) * dz[0] * dy[0] * dy[1], 0, 0)])
FL += tuple([(0, leg(max_deg - 2, x_mid) * dz[0] * dx[0] * dx[1], 0)])
for j in range(1, max_deg - 1):
FL += tuple([(leg(j, x_mid) * leg(max_deg - j - 2, y_mid) * dz[0] * dy[0] * dy[1],
-leg(j - 1, x_mid) * leg(max_deg - j - 1, y_mid) * dz[0] * dx[0] * dx[1], 0)])
##Assignment to face z = 0, F
-leg(j - 1, x_mid) * leg(max_deg - j - 1, y_mid) * dz[0] * dx[0] * dx[1], 0)])
# #Assignment to face z = 0, F
for j in range(1, max_deg - 1):
k = max_deg - j - 2
FL += tuple([(leg(j, x_mid) * leg(k, y_mid) * dz[0] * dy[0] * dy[1], 0, 0)])
FL += tuple([(0, leg(j, y_mid) * leg(k, x_mid) * dz[0] * dx[0] * dx[1], 0)])

##Assignment to face z = 1, Ftilde
# #Assignment to face z = 1, Ftilde
FL += tuple([(leg(max_deg - 2, y_mid) * dz[1] * dy[0] * dy[1], 0, 0)])
FL += tuple([(0, leg(max_deg - 2, x_mid) * dz[1] * dx[0] * dx[1], 0)])
for j in range(1, max_deg - 1):
FL += tuple([(leg(j, x_mid) * leg(max_deg - j - 2, y_mid) * dz[1] * dy[0] * dy[1],
-leg(j - 1, x_mid) * leg(max_deg - j - 1, y_mid) * dz[1] * dx[0] * dx[1], 0)])
##Assignment to face z = 1, F
-leg(j - 1, x_mid) * leg(max_deg - j - 1, y_mid) * dz[1] * dx[0] * dx[1], 0)])
# #Assignment to face z = 1, F
for j in range(1, max_deg - 1):
k = max_deg - j - 2
FL += tuple([(leg(j, x_mid) * leg(k, y_mid) * dz[1] * dy[0] * dy[1], 0, 0)])
Expand Down Expand Up @@ -418,11 +417,11 @@ def I_lambda_1_3d(deg, dx, dy, dz, x_mid, y_mid, z_mid):
DegsOfIteration = determine_I_lambda_1_portions_3d(deg)
IL = tuple([])
for Degs in DegsOfIteration:
IL += tuple([(leg(Degs[0], x_mid) * leg(Degs[1], y_mid) * leg(Degs[2], z_mid) *
IL += tuple([(leg(Degs[0], x_mid) * leg(Degs[1], y_mid) * leg(Degs[2], z_mid) *
dy[0] * dy[1] * dz[0] * dz[1], 0, 0)])
IL += tuple([(0, leg(Degs[0], x_mid) * leg(Degs[1], y_mid) * leg(Degs[2], z_mid) *
IL += tuple([(0, leg(Degs[0], x_mid) * leg(Degs[1], y_mid) * leg(Degs[2], z_mid) *
dx[0] * dx[1] * dz[0] * dz[1], 0)])
IL += tuple([(0, 0, leg(Degs[0], x_mid) * leg(Degs[1], y_mid) * leg(Degs[2], z_mid) *
IL += tuple([(0, 0, leg(Degs[0], x_mid) * leg(Degs[1], y_mid) * leg(Degs[2], z_mid) *
dy[0] * dy[1] * dy[0] * dy[1])])
return IL

Expand All @@ -443,10 +442,10 @@ def I_lambda_1_tilde_3d(deg, dx, dy, dz, x_mid, y_mid, z_mid):
if(deg > 5):
ILtilde += tuple([(0, leg(j, y_mid) * leg(deg - j - 4, z_mid) * dx[0] * dx[1] * dz[0] * dz[1],
-leg(j - 1, y_mid) * leg(deg - j - 3, z_mid) * dx[0] * dx[1] * dy[0] * dy[1])])
return ILtilde
return ILtilde


#This is always 1-forms regardless of 2 or 3 dimensions.
# This is always 1-forms regardless of 2 or 3 dimensions.
class TrimmedSerendipityEdge(TrimmedSerendipity):
def __init__(self, ref_el, degree):
if degree < 1:
Expand Down Expand Up @@ -489,11 +488,11 @@ def __init__(self, ref_el, degree):
y_mid, z_mid)
else:
IL = ()

Sminus_list = EL + FL
if dim == 3:
Sminus_list = Sminus_list + IL

if dim == 2:
self.basis = {(0, 0): Array(Sminus_list)}
else:
Expand All @@ -517,7 +516,7 @@ def __init__(self, ref_el, degree):
dy = ((verts[-1][1] - y)/(verts[-1][1] - verts[0][1]), (y - verts[0][1])/(verts[-1][1] - verts[0][1]))
x_mid = 2*x-(verts[-1][0] + verts[0][0])
y_mid = 2*y-(verts[-1][1] + verts[0][1])

EL = e_lambda_1_2d_part_one(degree, dx, dy, x_mid, y_mid)
if degree >= 2:
FL = trimmed_f_lambda_2d(degree, dx, dy, x_mid, y_mid)
Expand All @@ -527,4 +526,4 @@ def __init__(self, ref_el, degree):
Sminus_list = EL + FL
Sminus_list = [[-a[1], a[0]] for a in Sminus_list]
self.basis = {(0, 0): Array(Sminus_list)}
super(TrimmedSerendipityFace, self).__init__(ref_el=ref_el, degree=degree, mapping="contravariant piola")
super(TrimmedSerendipityFace, self).__init__(ref_el=ref_el, degree=degree, mapping="contravariant piola")
Loading