Skip to content
Merged

Bdmc #1488

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
8d4700c
DROP BEFORE MERGE
cyruscycheng21 Feb 18, 2019
e7a3047
tests for dpc element
cyruscycheng21 Mar 5, 2019
d443661
modified to test dPc element
cyruscycheng21 Mar 29, 2019
26cbe91
new tests for serendipity
cyruscycheng21 Apr 12, 2019
04f4145
new tests for serendipity element
cyruscycheng21 Apr 28, 2019
ffaab87
removed print statements
cyruscycheng21 Apr 28, 2019
bd48f1d
removed parallel comments
cyruscycheng21 Apr 29, 2019
8c9731a
DROP BEFORE MERGE
cyruscycheng21 Apr 29, 2019
9321f4b
DROP BEFORE MERGE
cyruscycheng21 Apr 29, 2019
99a7689
Test fixes
cyruscycheng21 May 20, 2019
12a0c85
Correct Jenkinsfile
cyruscycheng21 May 20, 2019
14513ae
new serendipity tests
cyruscycheng21 May 30, 2019
3749bbf
new dpc tests
cyruscycheng21 May 30, 2019
4aaaf49
test for serendipity 3d
cyruscycheng21 Jun 11, 2019
2f064c7
minor fix
cyruscycheng21 Jun 11, 2019
c71eafd
minor fix
cyruscycheng21 Jun 11, 2019
d004df7
Merge branch 'master' into cyrus-serendipity
cyruscycheng21 Jun 11, 2019
1eca4db
removed serendipity test
cyruscycheng21 Jun 11, 2019
f3bb218
new tests
cyruscycheng21 Jun 21, 2019
6343bb1
new tests
cyruscycheng21 Jun 21, 2019
52001d2
name change to DG0
cyruscycheng21 Jun 21, 2019
aae3da1
new tests for bdmc
cyruscycheng21 Jul 12, 2019
821feac
new tests
cyruscycheng21 Jul 12, 2019
ea136ed
new bdmc tests
cyruscycheng21 Jul 27, 2019
73541c5
bdmcf test
cyruscycheng21 Jul 28, 2019
885b256
Correct functionspace and quadrature degree
dham Aug 8, 2019
d96768c
passing bdmce/f test
dham Aug 8, 2019
1ec3acc
minor updates
cyruscycheng21 Aug 8, 2019
f397ea6
fix merge
cyruscycheng21 Aug 8, 2019
e27bded
minor changes
cyruscycheng21 Aug 9, 2019
204891d
correct functionspace name to DGDPC0
cyruscycheng21 Aug 9, 2019
13844df
rename DG to DPC
cyruscycheng21 Aug 9, 2019
eb5d8e8
remove bdmc tests
cyruscycheng21 Aug 9, 2019
ac1f55e
test BDMCF1 DPC0 case
cyruscycheng21 Aug 9, 2019
86b2c80
change DG to DPC
cyruscycheng21 Aug 9, 2019
06e9b34
change DG to DPC
cyruscycheng21 Aug 9, 2019
a7ac0c0
test degree 2 bdmc
cyruscycheng21 Aug 15, 2019
65bdea6
extrusion test for bdmc
cyruscycheng21 Aug 15, 2019
e8920f7
Merge branch 'master' into bdmc
cyruscycheng21 Aug 16, 2019
2704ce5
delete some bdmc tests
cyruscycheng21 Aug 24, 2019
7701c93
Merge branch 'master' into bdmc
cyruscycheng21 Aug 24, 2019
b0c9b0b
Merge branch 'master' into bdmc
pefarrell Jul 22, 2020
6a76ce8
Get lint passing
pefarrell Jul 22, 2020
b8ec6ad
Remove dud test
pefarrell Jul 22, 2020
dfc0bf8
Initial effort at Riesz map tests for BDMC[E/F]. Not converging for l…
pefarrell Jul 22, 2020
18814f7
Simplify test; AAF/AAE elements not implemented, so no need to test them
pefarrell Jul 22, 2020
2bc0781
Merge branch 'master' into bdmc
tommbendall Jan 26, 2021
eac78b8
update riesz map test for BDMCE/F elements
tommbendall Jan 26, 2021
a0a80f4
Merge branch 'master' into bdmc
tommbendall Jul 25, 2023
804d426
Merge branch 'master' into bdmc
JDBetteridge Sep 20, 2023
f0fff20
Revert package branches
JDBetteridge Sep 20, 2023
2f769ef
Merge branch 'master' into bdmc
JDBetteridge Sep 22, 2023
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
46 changes: 46 additions & 0 deletions tests/extrusion/test_bdmc_extr.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import numpy as np
from firedrake import *
import pytest


def project_bdmc(size, degree, family):
mesh = ExtrudedMesh(UnitIntervalMesh(2 ** size), layers=2 ** size)
x = SpatialCoordinate(mesh)

fs = FunctionSpace(mesh, family, degree)

f = Function(fs)
v = TestFunction(fs)

expr = as_vector((sin(2 * pi * x[0]) * sin(2 * pi * x[1]),
cos(2 * pi * x[0]) * cos(2 * pi * x[1])))

solve(inner(f-expr, v) * dx(degree=8) == 0, f)

return np.sqrt(assemble(inner(f-expr, f-expr) * dx(degree=8)))


@pytest.mark.parametrize(('testcase', 'convrate', 'degree'),
[((3, 6), 1.9, 1),
((3, 6), 2.9, 2),
((3, 6), 3.9, 3),
((3, 6), 4.9, 4)])
def test_bdmcf(testcase, convrate, degree):
start, end = testcase
l2err = np.zeros(end - start)
for ii in [i + start for i in range(len(l2err))]:
l2err[ii - start] = project_bdmc(ii, degree, "BDMCF")
assert (np.log2(l2err[:-1] / l2err[1:]) > convrate).all()


@pytest.mark.parametrize(('testcase', 'convrate', 'degree'),
[((3, 6), 1.9, 1),
((3, 6), 2.9, 2),
((3, 6), 3.9, 3),
((3, 6), 4.9, 4)])
def test_bdmce(testcase, convrate, degree):
start, end = testcase
l2err = np.zeros(end - start)
for ii in [i + start for i in range(len(l2err))]:
l2err[ii - start] = project_bdmc(ii, degree, "BDMCE")
assert (np.log2(l2err[:-1] / l2err[1:]) > convrate).all()
46 changes: 46 additions & 0 deletions tests/regression/test_bdmc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import numpy as np
from firedrake import *
import pytest


def project_bdmc(size, degree, family):
mesh = UnitSquareMesh(2 ** size, 2 ** size, quadrilateral=True)
x = SpatialCoordinate(mesh)

fs = FunctionSpace(mesh, family, degree)

f = Function(fs)
v = TestFunction(fs)

expr = as_vector((sin(2 * pi * x[0]) * sin(2 * pi * x[1]),
cos(2 * pi * x[0]) * cos(2 * pi * x[1])))

solve(inner(f-expr, v) * dx(degree=8) == 0, f)

return np.sqrt(assemble(inner(f-expr, f-expr) * dx(degree=8)))


@pytest.mark.parametrize(('testcase', 'convrate', 'degree'),
[((3, 6), 1.9, 1),
((3, 6), 2.9, 2),
((3, 6), 3.9, 3),
((3, 6), 4.9, 4)])
def test_bdmcf(testcase, convrate, degree):
start, end = testcase
l2err = np.zeros(end - start)
for ii in [i + start for i in range(len(l2err))]:
l2err[ii - start] = project_bdmc(ii, degree, "BDMCF")
assert (np.log2(l2err[:-1] / l2err[1:]) > convrate).all()


@pytest.mark.parametrize(('testcase', 'convrate', 'degree'),
[((3, 6), 1.9, 1),
((3, 6), 2.9, 2),
((3, 6), 3.9, 3),
((3, 6), 4.9, 4)])
def test_bdmce(testcase, convrate, degree):
start, end = testcase
l2err = np.zeros(end - start)
for ii in [i + start for i in range(len(l2err))]:
l2err[ii - start] = project_bdmc(ii, degree, "BDMCE")
assert (np.log2(l2err[:-1] / l2err[1:]) > convrate).all()
70 changes: 70 additions & 0 deletions tests/regression/test_bdmc_riesz_map.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
from firedrake import *
import pytest
import numpy


@pytest.fixture(scope='module', params=["div", "curl"])
def problem(request):
return request.param


@pytest.fixture(scope='module', params=[1, 2, 3])
def degree(request):
return request.param


sp = {"snes_type": "ksponly",
"ksp_type": "preonly",
"pc_type": "lu",
"pc_factor_mat_solver_type": "mumps",
"mat_mumps_icntl_14": 200}


def error(N, problem, degree):
mesh = UnitSquareMesh(N, N, quadrilateral=True)

if problem == "div":
op = div
family = "BDMCF"
elif problem == "curl":
op = curl
family = "BDMCE"
else:
raise ValueError

V = FunctionSpace(mesh, family, degree)
u = Function(V)
v = TestFunction(V)

(x, y) = SpatialCoordinate(mesh)
u_ex = as_vector([sin(2*pi*x) * cos(2*pi*y),
x * (1-x) * y * (1-y)])

if problem == "div":
f = u_ex - grad(div(u_ex))
else:
f = u_ex + curl(curl(u_ex))

F = inner(op(u), op(v))*dx + inner(u, v)*dx - inner(f, v)*dx
bc = DirichletBC(V, project(u_ex, V, solver_parameters=sp), "on_boundary")

solve(F == 0, u, bc, solver_parameters=sp)

err = errornorm(u_ex, u, "L2")
return err


def test_bdmc_riesz_map(problem, degree):

errors = []
for N in [10, 20, 40]:
errors.append(error(N, problem, degree))

convergence_orders = lambda x: numpy.log2(numpy.array(x)[:-1] / numpy.array(x)[1:])
conv = convergence_orders(errors)
print("errors: ", errors)
print("convergence order: ", conv)

tol = 0.11

assert (conv > (degree + 1) - tol).all()