From b46a974d9b135e24c54ead798a93c7a315677495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20He=C3=9F?= <rene.hess@iwr.uni-heidelberg.de> Date: Mon, 5 Mar 2018 16:30:27 +0100 Subject: [PATCH] Adjust penalty term in stokes dg examples --- applications/stokes_dg/stokes_dg.ufl | 28 ++++++++++++++-------- test/stokes/stokes_3d_dg_quadrilateral.ufl | 27 ++++++++++++++------- test/stokes/stokes_dg.ufl | 27 ++++++++++++++------- test/stokes/stokes_dg_quadrilateral.ufl | 27 ++++++++++++++------- 4 files changed, 72 insertions(+), 37 deletions(-) diff --git a/applications/stokes_dg/stokes_dg.ufl b/applications/stokes_dg/stokes_dg.ufl index 6189ae1b..d36556db 100644 --- a/applications/stokes_dg/stokes_dg.ufl +++ b/applications/stokes_dg/stokes_dg.ufl @@ -1,4 +1,5 @@ cell = hexahedron +dim = 3 x = SpatialCoordinate(cell) g_v = as_vector((4.*x[1]*(1.-x[1]), 0.0, 0.0)) @@ -14,21 +15,28 @@ u, p = TrialFunctions(TH) ds = ds(subdomain_id=1, subdomain_data=bctype) n = FacetNormal(cell)('+') -eps = -1.0 -sigma = 1.0 -h_e = Min(CellVolume(cell)('+'), CellVolume(cell)('-')) / FacetArea(cell) + +# SIPG: -1.0, IIPG: 0.0, NIPG: 1.0 +theta = -1.0 + +# penalty factor +alpha = 1.0 +h_ext = CellVolume(cell) / FacetArea(cell) +gamma_ext = (alpha * v_degree * (v_degree + dim - 1)) / h_ext +h_int = Min(CellVolume(cell)('+'), CellVolume(cell)('-')) / FacetArea(cell) +gamma_int = (alpha * v_degree * (v_degree + dim - 1)) / h_int r = inner(grad(u), grad(v))*dx \ - p*div(v)*dx \ - q*div(u)*dx \ - + inner(avg(grad(u))*n, jump(v))*dS \ - + sigma / h_e * inner(jump(u), jump(v))*dS \ - - eps * inner(avg(grad(v))*n, jump(u))*dS \ - - avg(p)*inner(jump(v), n)*dS \ - - avg(q)*inner(jump(u), n)*dS \ + - inner(avg(grad(u))*n, jump(v))*dS \ + + gamma_int * inner(jump(u), jump(v))*dS \ + + theta * inner(avg(grad(v))*n, jump(u))*dS \ + + avg(p)*inner(jump(v), n)*dS \ + + avg(q)*inner(jump(u), n)*dS \ - inner(grad(u)*n, v)*ds \ - + sigma / h_e * inner(u-g_v, v)*ds \ - + eps * inner(grad(v)*n, u-g_v)*ds \ + + gamma_ext * inner(u-g_v, v)*ds \ + + theta * inner(grad(v)*n, u-g_v)*ds \ + p*inner(v, n)*ds \ + q*inner(u-g_v, n)*ds diff --git a/test/stokes/stokes_3d_dg_quadrilateral.ufl b/test/stokes/stokes_3d_dg_quadrilateral.ufl index 8193a893..c47773f5 100644 --- a/test/stokes/stokes_3d_dg_quadrilateral.ufl +++ b/test/stokes/stokes_3d_dg_quadrilateral.ufl @@ -1,11 +1,13 @@ cell = hexahedron +degree = 2 +dim = 3 x = SpatialCoordinate(cell) g_v = as_vector((4.*x[1]*(1.-x[1]), 0.0, 0.0)) bctype = conditional(x[0] < 1. - 1e-8, 1, 0) -P2 = VectorElement("DG", cell, 2) -P1 = FiniteElement("DG", cell, 1) +P2 = VectorElement("DG", cell, degree) +P1 = FiniteElement("DG", cell, degree-1) TH = P2 * P1 v, q = TestFunctions(TH) @@ -14,21 +16,28 @@ u, p = TrialFunctions(TH) ds = ds(subdomain_id=1, subdomain_data=bctype) n = FacetNormal(cell)('+') -eps = -1.0 -sigma = 1.0 -h_e = Min(CellVolume(cell)('+'), CellVolume(cell)('-')) / FacetArea(cell) + +# SIPG: -1.0, IIPG: 0.0, NIPG: 1.0 +theta = -1.0 + +# penalty factor +alpha = 1.0 +h_ext = CellVolume(cell) / FacetArea(cell) +gamma_ext = (alpha * degree * (degree + dim - 1)) / h_ext +h_int = Min(CellVolume(cell)('+'), CellVolume(cell)('-')) / FacetArea(cell) +gamma_int = (alpha * degree * (degree + dim - 1)) / h_int r = inner(grad(u), grad(v))*dx \ - p*div(v)*dx \ - q*div(u)*dx \ - inner(avg(grad(u))*n, jump(v))*dS \ - + sigma / h_e * inner(jump(u), jump(v))*dS \ - + eps * inner(avg(grad(v))*n, jump(u))*dS \ + + gamma_int * inner(jump(u), jump(v))*dS \ + + theta * inner(avg(grad(v))*n, jump(u))*dS \ + avg(p)*inner(jump(v), n)*dS \ + avg(q)*inner(jump(u), n)*dS \ - inner(grad(u)*n, v)*ds \ - + sigma / h_e * inner(u-g_v, v)*ds \ - + eps * inner(grad(v)*n, u-g_v)*ds \ + + gamma_ext * inner(u-g_v, v)*ds \ + + theta * inner(grad(v)*n, u-g_v)*ds \ + p*inner(v, n)*ds \ + q*inner(u-g_v, n)*ds diff --git a/test/stokes/stokes_dg.ufl b/test/stokes/stokes_dg.ufl index 2398c6f6..d4f4225b 100644 --- a/test/stokes/stokes_dg.ufl +++ b/test/stokes/stokes_dg.ufl @@ -1,11 +1,13 @@ cell = triangle +degree = 2 +dim = 2 x = SpatialCoordinate(cell) g_v = as_vector((4*x[1]*(1.-x[1]), 0.0)) bctype = conditional(x[0] < 1. - 1e-8, 1, 0) -P2 = VectorElement("DG", cell, 2) -P1 = FiniteElement("DG", cell, 1) +P2 = VectorElement("DG", cell, degree) +P1 = FiniteElement("DG", cell, degree-1) TH = P2 * P1 v, q = TestFunctions(TH) @@ -14,21 +16,28 @@ u, p = TrialFunctions(TH) ds = ds(subdomain_id=1, subdomain_data=bctype) n = FacetNormal(cell)('+') -eps = -1.0 -sigma = 1.0 -h_e = Min(CellVolume(cell)('+'), CellVolume(cell)('-')) / FacetArea(cell) + +# SIPG: -1.0, IIPG: 0.0, NIPG: 1.0 +theta = -1.0 + +# penalty factor +alpha = 1.0 +h_ext = CellVolume(cell) / FacetArea(cell) +gamma_ext = (alpha * degree * (degree + dim - 1)) / h_ext +h_int = Min(CellVolume(cell)('+'), CellVolume(cell)('-')) / FacetArea(cell) +gamma_int = (alpha * degree * (degree + dim - 1)) / h_int r = inner(grad(u), grad(v))*dx \ - p*div(v)*dx \ - q*div(u)*dx \ - inner(avg(grad(u))*n, jump(v))*dS \ - + sigma / h_e * inner(jump(u), jump(v))*dS \ - + eps * inner(avg(grad(v))*n, jump(u))*dS \ + + gamma_int * inner(jump(u), jump(v))*dS \ + + theta * inner(avg(grad(v))*n, jump(u))*dS \ + avg(p)*inner(jump(v), n)*dS \ + avg(q)*inner(jump(u), n)*dS \ - inner(grad(u)*n, v)*ds \ - + sigma / h_e * inner(u-g_v, v)*ds \ - + eps * inner(grad(v)*n, u-g_v)*ds \ + + gamma_ext * inner(u-g_v, v)*ds \ + + theta * inner(grad(v)*n, u-g_v)*ds \ + p*inner(v, n)*ds \ + q*inner(u-g_v, n)*ds diff --git a/test/stokes/stokes_dg_quadrilateral.ufl b/test/stokes/stokes_dg_quadrilateral.ufl index 0062259b..0b37429b 100644 --- a/test/stokes/stokes_dg_quadrilateral.ufl +++ b/test/stokes/stokes_dg_quadrilateral.ufl @@ -1,11 +1,13 @@ cell = quadrilateral +degree = 2 +dim = 2 x = SpatialCoordinate(cell) g_v = as_vector((4*x[1]*(1.-x[1]), 0.0)) bctype = conditional(x[0] < 1. - 1e-8, 1, 0) -P2 = VectorElement("DG", cell, 2) -P1 = FiniteElement("DG", cell, 1) +P2 = VectorElement("DG", cell, degree) +P1 = FiniteElement("DG", cell, degree-1) TH = P2 * P1 v, q = TestFunctions(TH) @@ -14,21 +16,28 @@ u, p = TrialFunctions(TH) ds = ds(subdomain_id=1, subdomain_data=bctype) n = FacetNormal(cell)('+') -eps = -1.0 -sigma = 1.0 -h_e = Min(CellVolume(cell)('+'), CellVolume(cell)('-')) / FacetArea(cell) + +# SIPG: -1.0, IIPG: 0.0, NIPG: 1.0 +theta = -1.0 + +# penalty factor +alpha = 1.0 +h_ext = CellVolume(cell) / FacetArea(cell) +gamma_ext = (alpha * degree * (degree + dim - 1)) / h_ext +h_int = Min(CellVolume(cell)('+'), CellVolume(cell)('-')) / FacetArea(cell) +gamma_int = (alpha * degree * (degree + dim - 1)) / h_int r = inner(grad(u), grad(v))*dx \ - p*div(v)*dx \ - q*div(u)*dx \ - inner(avg(grad(u))*n, jump(v))*dS \ - + sigma / h_e * inner(jump(u), jump(v))*dS \ - + eps * inner(avg(grad(v))*n, jump(u))*dS \ + + gamma_int * inner(jump(u), jump(v))*dS \ + + theta * inner(avg(grad(v))*n, jump(u))*dS \ + avg(p)*inner(jump(v), n)*dS \ + avg(q)*inner(jump(u), n)*dS \ - inner(grad(u)*n, v)*ds \ - + sigma / h_e * inner(u-g_v, v)*ds \ - + eps * inner(grad(v)*n, u-g_v)*ds \ + + gamma_ext * inner(u-g_v, v)*ds \ + + theta * inner(grad(v)*n, u-g_v)*ds \ + p*inner(v, n)*ds \ + q*inner(u-g_v, n)*ds -- GitLab