From 7938210d4f1987ad83ba28b11e613e1c956907af Mon Sep 17 00:00:00 2001 From: arshiiyyaa Date: Tue, 4 Aug 2026 17:55:21 -0400 Subject: [PATCH 1/8] Add k-epsilon turbulence model Add wall-function and slope-limiter support, integrate turbulent viscosity with the INS formulation, and provide unit and full- system test coverage. --- opencmp/helpers/dg.py | 42 ++ opencmp/helpers/limiter.py | 562 ++++++++++++++++ opencmp/helpers/wall_func.py | 499 ++++++++++++++ opencmp/models/__init__.py | 5 +- opencmp/models/ins.py | 35 +- opencmp/models/k_epsilon.py | 611 ++++++++++++++++++ opencmp/models/stokes.py | 4 +- .../full_system/k_epsilon/bc_dir/bc_config | 13 + pytests/full_system/k_epsilon/config | 48 ++ .../full_system/k_epsilon/ic_dir/ic_config | 5 + .../k_epsilon/model_dir/model_config | 22 + .../k_epsilon/ref_sol_dir/ref_sol_config | 3 + .../k_epsilon/test_k_epsilon_full_system.py | 35 + pytests/helpers/test_k_epsilon_wall_func.py | 382 +++++++++++ pytests/models/test_k_epsilon.py | 92 +++ 15 files changed, 2344 insertions(+), 14 deletions(-) create mode 100644 opencmp/helpers/limiter.py create mode 100644 opencmp/helpers/wall_func.py create mode 100644 opencmp/models/k_epsilon.py create mode 100644 pytests/full_system/k_epsilon/bc_dir/bc_config create mode 100644 pytests/full_system/k_epsilon/config create mode 100644 pytests/full_system/k_epsilon/ic_dir/ic_config create mode 100644 pytests/full_system/k_epsilon/model_dir/model_config create mode 100644 pytests/full_system/k_epsilon/ref_sol_dir/ref_sol_config create mode 100644 pytests/full_system/k_epsilon/test_k_epsilon_full_system.py create mode 100644 pytests/helpers/test_k_epsilon_wall_func.py create mode 100644 pytests/models/test_k_epsilon.py diff --git a/opencmp/helpers/dg.py b/opencmp/helpers/dg.py index edd0f5c..3ad41c6 100644 --- a/opencmp/helpers/dg.py +++ b/opencmp/helpers/dg.py @@ -81,3 +81,45 @@ def grad_avg(q: CoefficientFunction) -> CoefficientFunction: return 0.5 * (Grad(q) + Grad(q.Other())) else: return 0.5 * (Grad(q) + Grad(q).Other()) + + +def weighted_grad_avg(q: CoefficientFunction, c: CoefficientFunction) -> CoefficientFunction: + """ + Returns the average of the gradient of a field weighted by a (possibly discontinuous) coefficient. + + Args: + q: The field. + c: The coefficient weighting the gradient on each side of the facet. + + Returns: + The average of c * Grad(q) at every facet of the mesh. + """ + + # Grad must be called differently if q is a trial or testfunction instead of a coefficientfunction/gridfunction. + if isinstance(q, ProxyFunction): + return 0.5 * (c * Grad(q) + c.Other() * Grad(q.Other())) + else: + return 0.5 * (c * Grad(q) + c.Other() * Grad(q).Other()) + + +def weighted_div_avg(q: CoefficientFunction, c: CoefficientFunction) -> CoefficientFunction: + """ + Returns the average of the divergence of a field weighted by a (possibly discontinuous) coefficient. + + Args: + q: The field. + c: The coefficient weighting the divergence on each side of the facet. + + Returns: + The average of c * div(q) at every facet of the mesh. + """ + + # Grad must be called differently if q is a trial or testfunction instead of a coefficientfunction/gridfunction. + if isinstance(q, ProxyFunction): + div_q = sum(Grad(q)[i, i] for i in range(q.dim)) + div_q_other = sum(Grad(q.Other())[i, i] for i in range(q.dim)) + else: + div_q = sum(Grad(q)[i, i] for i in range(q.dim)) + div_q_other = div_q.Other() + + return 0.5 * (div_q * c + div_q_other * c.Other()) diff --git a/opencmp/helpers/limiter.py b/opencmp/helpers/limiter.py new file mode 100644 index 0000000..7ad7332 --- /dev/null +++ b/opencmp/helpers/limiter.py @@ -0,0 +1,562 @@ +######################################################################################################################## +# Copyright 2021 the authors (see AUTHORS file for full list). # +# # +# This file is part of OpenCMP. # +# # +# OpenCMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public # +# License as published by the Free Software Foundation, either version 2.1 of the License, or (at your option) any # +# later version. # +# # +# OpenCMP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied # +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License along with OpenCMP. If not, see # +# . # +######################################################################################################################## + +""" +Slope / bound-preserving limiters for L2 DG scalar GridFunctions. Provides: + + - bound_limiter_Joshaghani : vertex-based scaling limiter (P1 Dunbar basis) + - barth_jespersen : Barth-Jespersen / Venkatakrishnan (any order) + - kuzmin : Kuzmin (2010) vertex-based (any order) + - bezier_bound : Bernstein/Bezier maximum-principle-preserving + limiter -- GUARANTEES the per-element polynomial + stays in bounds everywhere (any order). +""" + +import ngsolve as ngs +import numpy as np + + +class Limiter: + def __init__(self, mesh): + self.mesh = mesh + self._slope_cache = {} # (id(fes), order, kind) -> built slope limiter + + # ── Vertex-based / Barth-Jespersen slope limiters ─────────────────────────── + # Thin accessors over BJLimiter2D / KuzminLimiter2D (defined below). The built + # limiter precomputes eval matrices + adjacency tables, so it is cached and + # reused across calls — keep the Limiter instance alive to avoid rebuilding. + + def _slope_limiter(self, kind, fes, order): + key = (id(fes), order, kind) + lim = self._slope_cache.get(key) + if lim is None: + cls = {"bj": BJLimiter2D, "kuzmin": KuzminLimiter2D, + "bezier": BezierBoundLimiter}[kind] + lim = cls(self.mesh, fes, order) + self._slope_cache[key] = lim + return lim + + def barth_jespersen(self, gfu, fes, order, bounds=(0.0, 1.0), **kwargs): + '''Barth-Jespersen / Venkatakrishnan slope limiter (TRIG/TET, any order). + Returns number of modified elements. See BJLimiter2D.apply for kwargs + (use_indicator, indicator_threshold, venkat_eps).''' + return self._slope_limiter("bj", fes, order).apply(gfu, bounds, **kwargs) + + def bezier_bound(self, gfu, fes, order, bounds=(0.0, 1.0)): + '''Bound-preserving scaling limiter via the Bernstein/Bezier convex-hull + property. Unlike node-sampling limiters, this GUARANTEES the per-element + polynomial stays in `bounds` everywhere (no between-node leakage). + Returns number of modified elements.''' + return self._slope_limiter("bezier", fes, order).apply(gfu, bounds) + + def kuzmin(self, gfu, fes, order, bounds=(0.0, 1.0)): + '''Kuzmin (2010) vertex-based slope limiter (TRIG/TET, any order). + Less diffusive than BJ. Returns number of modified elements.''' + return self._slope_limiter("kuzmin", fes, order).apply(gfu, bounds) + + def ref_element_vertices_val(self, gfu: ngs.GridFunction, vertices: np.ndarray, + element_index: int, element_type: str) -> np.ndarray: + ''' + Evaluates the value of gfu at vertices of a specified element (by gfu_index). + The coefficients from gfu and Dunbar basis functions (L2) space are used to do the calculation. + ''' + if element_type == "TRIG": + [a, b, c] = gfu.vec[element_index: element_index + 3] # coefficients + val = (a - b - c) + (3 * b + c) * vertices[:, 0] + (2 * c) * vertices[:, 1] + + if element_type == "TET": + [a, b, c, d] = gfu.vec[element_index: element_index + 4] # coefficients + val = ((a - b - 2 * c - 4 * d) + (4 * b + 2 * c + 4 * d) * vertices[:, 0] + (6 * c + 4 * d) * + vertices[:, 1] + 8 * d * vertices[:, 2]) + return val + + def vertices_gfu_val(self, gfu: ngs.GridFunction, element_type: str = "TRIG") -> np.ndarray: + """ + Evaluates gfu at the vertices of every mesh cell. + """ + dof_per_element = int(len(gfu.vec) / self.mesh.ne) # dof per element + gfu_vertices_val = np.zeros((self.mesh.ne, dof_per_element)) + + if element_type == "TRIG": + vertices = np.array([(0, 0), (1, 0), (0, 1)]) + elif element_type == "TET": + vertices = np.array([(0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)]) + else: + raise ValueError("Bound limiter is only implemented for element_type TRIG and TET.") + + for i in range(self.mesh.ne): # iterate over every mesh element + gfu_index = i * dof_per_element # index pointer for coefficients corresponding to the element + gfu_vertices_val[i, :] = self.ref_element_vertices_val(gfu, vertices, gfu_index, element_type) + + return gfu_vertices_val + + def bound_limiter_Joshaghani(self, gfu: ngs.GridFunction, bounds: tuple) -> None: + ''' + Scales the grid function within each element if the max/min value at the mesh cell violates the + upper/lower bound. (P1 Dunbar reconstruction — prefer bezier_bound for order >= 2.) + ''' + (r1, r2) = bounds # lower and upper bounds + if self.mesh.dim == 2: + element_type = "TRIG" + elif self.mesh.dim == 3: + element_type = "TET" + + number_of_elements = self.mesh.ne # number of mesh elements + dof_per_element = int(len(gfu.vec) / number_of_elements) # dofs per element + quad_val_gfu = self.vertices_gfu_val(gfu, element_type) # gf at the vertices + quad_min_val, quad_max_val = quad_val_gfu.min(axis=1), quad_val_gfu.max(axis=1) + theta = np.ones(number_of_elements, dtype=float) # scaling coefficients + + for i in range(number_of_elements): + nn = dof_per_element * i # index of the cell averaged value + if gfu.vec[nn] < r1: + gfu.vec[nn] = r1 + elif gfu.vec[nn] > r2: + gfu.vec[nn] = r2 + if (quad_min_val[i] < r1): + theta[i] = (gfu.vec[nn] - r1) / (gfu.vec[nn] - quad_min_val[i]) + if (quad_max_val[i] > r2): + theta2 = (gfu.vec[nn] - r2) / (gfu.vec[nn] - quad_max_val[i]) + theta[i] = min(theta[i], theta2) + if theta[i] < 1: + for k in range(1, dof_per_element): + gfu.vec[nn + k] = theta[i] * gfu.vec[nn + k] + + +# ── Vertex-based slope limiters ────────────────────────────────────────────── + + +def _ndof_el(order: int, dim: int) -> int: + """DOFs per element on the reference simplex.""" + if dim == 2: + return (order + 1) * (order + 2) // 2 + return (order + 1) * (order + 2) * (order + 3) // 6 + + +def _lagrange_nodes(p: int, dim: int) -> np.ndarray: + """Uniform Lagrange nodes on the reference simplex for degree p.""" + if p == 0: + return np.ones((1, dim)) / (dim + 1) # centroid only + if dim == 2: + nodes = [(i/p, j/p) + for i in range(p + 1) + for j in range(p + 1 - i)] + else: + nodes = [(i/p, j/p, k/p) + for i in range(p + 1) + for j in range(p + 1 - i) + for k in range(p + 1 - i - j)] + return np.array(nodes, dtype=float) + + +# Reference simplex vertices keyed by dimension +_VERTEX_NODES = { + 2: np.array([[0., 0.], [1., 0.], [0., 1.]]), + 3: np.array([[0., 0., 0.], [1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]), +} + + +def _vertex_clustered_nodes(dim: int, + fracs: tuple = (0.05, 0.12, 0.25)) -> np.ndarray: + """Extra check nodes packed near each reference-simplex vertex, where a + degree>=2 polynomial overshoots most. For every vertex, places points a + small fraction `t` of the way toward each other vertex and the centroid.""" + V = _VERTEX_NODES[dim] + targets = list(V) + [V.mean(axis=0)] # other vertices + centroid + pts = [v + t * (tgt - v) + for v in V for tgt in targets for t in fracs + if not np.allclose(v, tgt)] + return np.array(pts, dtype=float) + + +def _build_eval_matrix_ngs(fes: ngs.FESpace, order: int, dim: int, + nodes: np.ndarray = None) -> np.ndarray: + """Build evaluation matrix via NGSolve's FiniteElement.CalcShape.""" + if nodes is None: + nodes = _lagrange_nodes(order, dim) + else: + nodes = np.asarray(nodes, dtype=float) + ndof_el = _ndof_el(order, dim) + M = np.zeros((len(nodes), ndof_el)) + fe = fes.GetFE(ngs.ElementId(ngs.VOL, 0)) + for i, node in enumerate(nodes): + # CalcShape(x, y, z) evaluates the REFERENCE shape functions directly — + # geometry-independent, so this is correct for every element regardless + # of mesh anisotropy/curvature. (Raw-coord overload; pad 2D with z=0.) + coords = (*node, 0.0) if dim == 2 else tuple(node) + M[i, :] = np.asarray(fe.CalcShape(*coords)) + return M + + +def _build_eval_matrix_gf(mesh: ngs.Mesh, fes: ngs.FESpace, order: int, dim: int, + nodes: np.ndarray = None) -> np.ndarray: + """Fallback: build evaluation matrix by probing individual basis vectors. + + Uses a centroid-ward nudge (EPS=1e-10) to keep points strictly inside + element 0, avoiding ambiguous lookups at shared vertices/faces. + """ + ndof_el = _ndof_el(order, dim) + if nodes is None: + nodes = _lagrange_nodes(order, dim) + else: + nodes = np.asarray(nodes, dtype=float) + M = np.zeros((len(nodes), ndof_el)) + + el0 = list(mesh.Elements(ngs.VOL))[0] + verts = [np.array(list(mesh[v].point)[:dim]) for v in el0.vertices] + dofs = fes.GetDofNrs(ngs.ElementId(ngs.VOL, 0)) + gf = ngs.GridFunction(fes) + gf_np = gf.vec.FV().NumPy() + ctr = np.ones(dim) / (dim + 1) # reference centroid + EPS = 1e-10 + + for j in range(ndof_el): + gf_np[:] = 0.0 + gf_np[int(dofs[j])] = 1.0 + for i, node in enumerate(nodes): + node_n = node + EPS * (ctr - node) + bary = np.concatenate(([1.0 - node_n.sum()], node_n)) + phys = sum(b * v for b, v in zip(bary, verts)) + M[i, j] = float(gf(mesh(*phys))) + return M + + +def _build_eval_matrix(mesh, fes, order, dim, nodes=None): + """Try CalcShape first, fall back to GridFunction probing.""" + try: + return _build_eval_matrix_ngs(fes, order, dim, nodes) + except Exception: + return _build_eval_matrix_gf(mesh, fes, order, dim, nodes) + + +# ── Neighbour tables ────────────────────────────────────────────────────────── + +def build_neighbor_table(mesh: ngs.Mesh) -> list: + """Face-adjacency by iteration index (0..ne-1). + + Two simplices share a face when they share dim vertices: + dim=2 (triangles): shared edge = 2 shared vertices + dim=3 (tets): shared face = 3 shared vertices + """ + dim = mesh.dim + el_list = list(mesh.Elements(ngs.VOL)) + v2e: dict = {} + for idx, el in enumerate(el_list): + for v in el.vertices: + v2e.setdefault(v.nr, []).append(idx) + + neighbors = [[] for _ in range(mesh.ne)] + for idx, el in enumerate(el_list): + shared: dict = {} + for v in el.vertices: + for nb_idx in v2e[v.nr]: + if nb_idx != idx: + shared[nb_idx] = shared.get(nb_idx, 0) + 1 + for nb_idx, cnt in shared.items(): + if cnt == dim: + neighbors[idx].append(nb_idx) + return neighbors + + +def build_vertex_star_table(mesh: ngs.Mesh) -> list: + """For each element, the list of elements sharing each of its vertices + (used by KuzminLimiter2D for per-vertex bounds). Works for any dimension.""" + el_list = list(mesh.Elements(ngs.VOL)) + v2e: dict = {} + for idx, el in enumerate(el_list): + for v in el.vertices: + v2e.setdefault(v.nr, []).append(idx) + return [[v2e[v.nr] for v in el.vertices] for el in el_list] + + +# ── BJ Limiter ──────────────────────────────────────────────────────────────── + +class BJLimiter2D: + """Barth-Jespersen slope limiter for NGSolve DG. + Works on triangular (2D) and tetrahedral (3D) meshes, any polynomial order. + """ + + def __init__(self, mesh: ngs.Mesh, fes: ngs.FESpace, order: int = 1): + self.mesh = mesh + self.order = order + self.dim = mesh.dim + self.ndof_el = _ndof_el(order, self.dim) + # Check nodes: uniform 2*order oversample + extra nodes clustered near + # vertices (where degree>=2 polynomials overshoot most). Dedup so the + # eval matrix stays small. + _check_nodes = np.vstack([ + _VERTEX_NODES[self.dim], + _lagrange_nodes(max(2 * order, 1), self.dim), + _vertex_clustered_nodes(self.dim), + ]) + _check_nodes = np.unique(np.round(_check_nodes, 12), axis=0) + self._eval_mat = _build_eval_matrix(mesh, fes, order, self.dim, + nodes=_check_nodes) + self.neighbors = build_neighbor_table(mesh) + self.dof_starts = np.array([ + fes.GetDofNrs(ngs.ElementId(ngs.VOL, i))[0] + for i in range(mesh.ne) + ], dtype=np.intp) + + def _cell_averages(self, gfu: ngs.GridFunction) -> np.ndarray: + return gfu.vec.FV().NumPy()[self.dof_starts].copy() + + def troubled_cells(self, u0: np.ndarray, threshold: float = 0.1) -> np.ndarray: + """Boolean mask: element i is troubled if the cell-average jump across + any face exceeds threshold × (global variation).""" + var = float(u0.max() - u0.min()) + if var < 1e-14: + return np.zeros(len(u0), dtype=bool) + thr = threshold * var + troubled = np.zeros(len(u0), dtype=bool) + for i, nbs in enumerate(self.neighbors): + if nbs and float(np.max(np.abs(u0[i] - u0[nbs]))) > thr: + troubled[i] = True + return troubled + + @staticmethod + def _theta(uv: float, ubar: float, u_bound: float, eps2: float) -> float: + """Per-node θ: standard BJ (eps2=0) or Venkatakrishnan smooth limiter.""" + b = uv - ubar + if abs(b) < 1e-14: + return 1.0 + a = u_bound - ubar + if a * b <= 0.0: + return 1.0 + if eps2 == 0.0: + return min(1.0, a / b) + return (a*a + 2.0*a*b + eps2) / (a*a + a*b + 2.0*b*b + eps2) + + def apply(self, gfu: ngs.GridFunction, + bounds: tuple = (0.0, 1.0), + use_indicator: bool = True, + indicator_threshold: float = 0.1, + venkat_eps: float = 0.0) -> int: + """Apply BJ / Venkatakrishnan limiter in-place. Returns number of modified elements. + + venkat_eps: 0.0 = standard BJ (hard), 0.3 = recommended smooth, 1.0 = very smooth. + """ + r1, r2 = bounds + nd = self.ndof_el + ne = self.mesh.ne + u0 = self._cell_averages(gfu) + vec = gfu.vec.FV().NumPy() + troubled = (self.troubled_cells(u0, indicator_threshold) + if use_indicator else np.ones(ne, dtype=bool)) + var = float(u0.max() - u0.min()) + eps2 = (venkat_eps * var) ** 2 + n_lim = 0 + + for i in range(ne): + base = self.dof_starts[i] + ū = u0[i] + + if ū < r1 or ū > r2: + vec[base] = float(np.clip(ū, r1, r2)) + vec[base + 1 : base + nd] = 0.0 + n_lim += 1 + continue + + dofs = vec[base : base + nd].copy() + u_nodes = self._eval_mat @ dofs + + theta = 1.0 + if troubled[i]: + nbs = self.neighbors[i] + if nbs: + nb_u0 = u0[nbs] + u_max = min(r2, max(ū, float(nb_u0.max()))) + u_min = max(r1, min(ū, float(nb_u0.min()))) + else: + u_max, u_min = float(r2), float(r1) + for uv in u_nodes: + if uv > ū + 1e-12: + theta = min(theta, self._theta(uv, ū, u_max, eps2)) + elif uv < ū - 1e-12: + theta = min(theta, self._theta(uv, ū, u_min, eps2)) + + # Hard global bound — applied to all cells + theta_gb = 1.0 + for uv in u_nodes: + if uv > r2 + 1e-12 and uv > ū + 1e-12: + theta_gb = min(theta_gb, (r2 - ū) / (uv - ū)) + elif uv < r1 - 1e-12 and uv < ū - 1e-12: + theta_gb = min(theta_gb, (r1 - ū) / (uv - ū)) + theta_gb = max(0.0, min(1.0, theta_gb)) + theta = min(max(0.0, min(1.0, theta)), theta_gb) + + if theta < 1.0 - 1e-14: + vec[base + 1 : base + nd] *= theta + n_lim += 1 + + return n_lim + + +# ── Kuzmin Vertex-Based Limiter ─────────────────────────────────────────────── + +class KuzminLimiter2D: + """Kuzmin (2010) vertex-based slope limiter for NGSolve DG. + Works on triangular (2D) and tetrahedral (3D) meshes, any polynomial order. + + Less diffusive than BJ: bounds come from the wider vertex star and only + the simplex vertices (3 in 2D, 4 in 3D) are checked instead of all Lagrange nodes. + """ + + def __init__(self, mesh: ngs.Mesh, fes: ngs.FESpace, order: int = 1): + self.mesh = mesh + self.order = order + self.dim = mesh.dim + self.ndof_el = _ndof_el(order, self.dim) + self._vert_eval = _build_eval_matrix(mesh, fes, order, self.dim, + nodes=_VERTEX_NODES[self.dim]) + self.vertex_star = build_vertex_star_table(mesh) + self.dof_starts = np.array([ + fes.GetDofNrs(ngs.ElementId(ngs.VOL, i))[0] + for i in range(mesh.ne) + ], dtype=np.intp) + + def _cell_averages(self, gfu: ngs.GridFunction) -> np.ndarray: + return gfu.vec.FV().NumPy()[self.dof_starts].copy() + + def apply(self, gfu: ngs.GridFunction, + bounds: tuple = (0.0, 1.0)) -> int: + """Apply Kuzmin vertex-based limiter in-place. Returns number of modified elements.""" + r1, r2 = bounds + nd = self.ndof_el + ne = self.mesh.ne + u0 = self._cell_averages(gfu) + vec = gfu.vec.FV().NumPy() + n_lim = 0 + + for i in range(ne): + base = self.dof_starts[i] + ū = u0[i] + + if ū < r1 or ū > r2: + vec[base] = float(np.clip(ū, r1, r2)) + vec[base + 1 : base + nd] = 0.0 + n_lim += 1 + continue + + dofs = vec[base : base + nd].copy() + u_verts = self._vert_eval @ dofs # (3,) in 2D, (4,) in 3D + + theta = 1.0 + for j, uv in enumerate(u_verts): + star = self.vertex_star[i][j] + u_max_v = min(r2, float(u0[star].max())) + u_min_v = max(r1, float(u0[star].min())) + if uv > ū + 1e-12: + theta = min(theta, (u_max_v - ū) / (uv - ū)) + elif uv < ū - 1e-12: + theta = min(theta, (u_min_v - ū) / (uv - ū)) + + theta = max(0.0, min(1.0, theta)) + if theta < 1.0 - 1e-14: + vec[base + 1 : base + nd] *= theta + n_lim += 1 + + return n_lim + + +# ── Bound-preserving Bezier/Bernstein limiter ───────────────────────────────── + +def _multiindices(p: int, n: int): + """All length-n nonneg integer tuples summing to p.""" + if n == 1: + yield (p,) + return + for i in range(p + 1): + for rest in _multiindices(p - i, n - 1): + yield (i,) + rest + + +def _bernstein_matrix(nodes: np.ndarray, p: int, dim: int) -> np.ndarray: + """Degree-p Bernstein basis values at `nodes` on the reference simplex. + B_alpha(lambda) = (p!/prod alpha_i!) * prod lambda_i^alpha_i.""" + from math import factorial + idx = list(_multiindices(p, dim + 1)) + M = np.zeros((len(nodes), len(idx))) + pf = factorial(p) + for k, node in enumerate(nodes): + lam = np.concatenate(([1.0 - node.sum()], node)) # barycentric coords + for j, a in enumerate(idx): + term = pf + for d in range(dim + 1): + term *= lam[d] ** a[d] / factorial(a[d]) + M[k, j] = term + return M + + +class BezierBoundLimiter: + """Maximum-principle-preserving scaling limiter for NGSolve DG on simplices, + any order. Scales each element's polynomial about its cell mean by a single + theta computed from the Bernstein/Bezier ordinates. Because the polynomial + lies within the convex hull of its ordinates, bounding the ordinates bounds + the polynomial EVERYWHERE — not just at sample nodes (the failure mode of + BJ/Kuzmin on high-order, high-curvature near-wall cells).""" + + def __init__(self, mesh: ngs.Mesh, fes: ngs.FESpace, order: int = 1): + self.mesh = mesh + self.order = order + self.dim = mesh.dim + self.ndof_el = _ndof_el(order, self.dim) + # Change-of-basis: L2 element dofs -> Bezier ordinates. Built once on the + # reference element. b = T @ c, where v = Lmat@c = Bmat@b at unisolvent + # degree-p Lagrange nodes, so T = Bmat^{-1} @ Lmat. + ref_nodes = _lagrange_nodes(order, self.dim) # ndof_el points + Lmat = _build_eval_matrix(mesh, fes, order, self.dim, nodes=ref_nodes) + Bmat = _bernstein_matrix(ref_nodes, order, self.dim) + self._to_bezier = np.linalg.solve(Bmat, Lmat) + self.dof_starts = np.array([ + fes.GetDofNrs(ngs.ElementId(ngs.VOL, i))[0] + for i in range(mesh.ne) + ], dtype=np.intp) + + def apply(self, gfu: ngs.GridFunction, bounds: tuple = (0.0, 1.0)) -> int: + r1, r2 = bounds + nd = self.ndof_el + vec = gfu.vec.FV().NumPy() + n_lim = 0 + + for base in self.dof_starts: + c = vec[base : base + nd] + ubar = c[0] # cell mean (NGSolve L2: phi0 == 1) + + # bound the average first + if ubar < r1 or ubar > r2: + ubar = float(np.clip(ubar, r1, r2)) + vec[base] = ubar + vec[base + 1 : base + nd] = 0.0 + n_lim += 1 + continue + + b = self._to_bezier @ c # Bezier ordinates: poly in [b.min, b.max] + bmin, bmax = float(b.min()), float(b.max()) + + theta = 1.0 + if bmax > r2 + 1e-14: + theta = min(theta, (r2 - ubar) / (bmax - ubar)) + if bmin < r1 - 1e-14: + theta = min(theta, (r1 - ubar) / (bmin - ubar)) + theta = max(0.0, min(1.0, theta)) + + if theta < 1.0 - 1e-14: + vec[base + 1 : base + nd] *= theta + n_lim += 1 + + return n_lim diff --git a/opencmp/helpers/wall_func.py b/opencmp/helpers/wall_func.py new file mode 100644 index 0000000..f648baf --- /dev/null +++ b/opencmp/helpers/wall_func.py @@ -0,0 +1,499 @@ +######################################################################################################################## +# Copyright 2021 the authors (see AUTHORS file for full list). # +# # +# This file is part of OpenCMP. # +# # +# OpenCMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public # +# License as published by the Free Software Foundation, either version 2.1 of the License, or (at your option) any # +# later version. # +# # +# OpenCMP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied # +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License along with OpenCMP. If not, see # +# . # +######################################################################################################################## + +""" +Wall-function eddy-viscosity model for the k-epsilon two-fluid turbulence +closure. Every physical constant and region/boundary name is passed in +through the constructor so the class carries no global state. +""" + +import numpy as np +import ngsolve as ngs +from typing import Optional + +from .ngsolve_ import construct_identity_mat + + +class WallFunc: + """Law-of-the-wall blended turbulent viscosity. + + nu_t = bulk C_mu k^2/eps in the core region, replaced by a wall-function + value in the near-wall region. The wall-normal distance comes from a + regularized-Eikonal solve; the wall-function value needs the per-x + cross-section-averaged wall shear stress, refreshed each step via + ``update_tau_avg``. + """ + + def __init__(self, mesh: ngs.comp.Mesh, mu: float, rho: float, nu: float, + C_mu: float, kappa: float, E: float, + cylinder_r: Optional[float] = None, + wall_boundary: str = "wall", + nearwall_region: str = "nearwall", + core_region_2d: str = "surface", + core_region_3d: str = "vol", + n_xbins: int = 100, dist_order: int = 2, + dist_relax: float = 0.1) -> None: + self.mesh = mesh + self.mu = mu + self.rho = rho + self.nu = nu # laminar kinematic viscosity nu_c + self.C_mu = C_mu + self.kappa = kappa + self.E = E + self.cylinder_r = cylinder_r + self.wall_boundary = wall_boundary + self.nearwall_region = nearwall_region + self.core_region = core_region_2d if mesh.dim == 2 else core_region_3d + self.n_xbins = n_xbins + self.n = ngs.specialcf.normal(mesh.dim) + self.h = ngs.specialcf.mesh_size + self.IM = construct_identity_mat(mesh.dim) + + # Wall-distance field, solved once via the regularized Eikonal equation. + self._dist_gf = self._compute_distance_field(dist_order, dist_relax) + + # Per-cell wall-normal distance (cell average of y_normal). + self._dist_cell = ngs.GridFunction(ngs.L2(mesh, order=0)) + self._dist_cell.Set(self._dist_gf) + + # Domain bounds. cylinder_r remains accepted for compatibility with + # the original pipe model, but arbitrary cross-sections use the mesh + # bounds when no radius is supplied. + points = np.array([v.point for v in mesh.vertices], dtype=float) + xs = points[:, 0] + self.x_min, self.x_max = float(xs.min()), float(xs.max()) + self._domain_min = tuple(points.min(axis=0)) + self._domain_max = tuple(points.max(axis=0)) + + # tau_avg(x) placeholder, refreshed each step by update_tau_avg(). + self._tau_fes = ngs.H1(mesh, order=1) + self.tau_avg_gf = ngs.GridFunction(self._tau_fes) + self.tau_avg_gf.Set(ngs.CoefficientFunction(1e-12)) + + # (surface-element nr, x-centroid) for all wall facets, computed once. + self._wall_els = [ + (el.nr, float(np.mean([mesh.vertices[v.nr].point[0] for v in el.vertices]))) + for el in mesh.Elements(ngs.BND) if el.mat == wall_boundary + ] + if not self._wall_els: + raise ValueError( + f"WallFunc: boundary marker '{wall_boundary}' has no boundary elements.") + + def _compute_distance_field(self, order: int, relax: float) -> ngs.GridFunction: + """Distance to the "wall" boundary via the regularized Eikonal equation + |grad(y)| = 1 with y = 0 on the wall. Poisson warm start, then Newton.""" + eps = relax * self.h + fes = ngs.H1(self.mesh, order=order, dirichlet=self.wall_boundary) + u, v = fes.TnT() + y = ngs.GridFunction(fes) + + a = ngs.BilinearForm(fes) + a += ngs.grad(u) * ngs.grad(v) * ngs.dx + f = ngs.LinearForm(fes) + f += 1.0 * v * ngs.dx + a.Assemble(); f.Assemble() + y.vec.data = a.mat.Inverse(fes.FreeDofs()) * f.vec + + gu = ngs.grad(u) + F = ngs.BilinearForm(fes) + F += (ngs.sqrt(gu * gu + 1e-12) * v - 1.0 * v + eps * gu * ngs.grad(v)) * ngs.dx + ngs.solvers.Newton(F, y, printing=False) + return y + + def y_normal(self) -> ngs.CoefficientFunction: + return self._dist_gf + + def wall_distance_cell(self) -> ngs.GridFunction: + return self._dist_cell + + def _tau_norm_cf(self, U) -> ngs.CoefficientFunction: + """|tau . n| on the wall (boundary-only CF).""" + tau = self.mu * (ngs.grad(U) + ngs.grad(U).trans - 2 / 3 * ngs.div(U) * self.IM) + tau_n = ngs.BoundaryFromVolumeCF(tau) * self.n + return ngs.sqrt(ngs.InnerProduct(tau_n, tau_n)) + + def update_tau_avg(self, U) -> None: + """Recompute the cross-section-averaged wall shear stress tau_avg(x) and + store it in self.tau_avg_gf. Call once per Picard iteration, BEFORE nu_t + is evaluated. Bins wall facets by x-centroid -> length-weighted average, + then extends into the volume as a function of x via VoxelCoefficient.""" + wall_region = self.mesh.Boundaries(self.wall_boundary) + tau_el = ngs.Integrate(self._tau_norm_cf(U), self.mesh, + definedon=wall_region, element_wise=True) + len_el = ngs.Integrate(ngs.CoefficientFunction(1.0), self.mesh, + definedon=wall_region, element_wise=True) + + edges = np.linspace(self.x_min, self.x_max, self.n_xbins + 1) + num = np.zeros(self.n_xbins) + den = np.zeros(self.n_xbins) + for nr, xc in self._wall_els: + i = int(np.clip(np.searchsorted(edges, xc) - 1, 0, self.n_xbins - 1)) + num[i] += tau_el[nr] + den[i] += len_el[nr] + + centers = 0.5 * (edges[:-1] + edges[1:]) + ok = den > 0 + tau_x = np.interp(centers, centers[ok], num[ok] / den[ok]) + tau_x = np.maximum(tau_x, 1e-12) + + # VoxelCoefficient expects x as the LAST (fastest) index. + if self.mesh.dim == 2: + vals = np.tile(tau_x, (2, 1)) + if self.cylinder_r is None: + start, end = self._domain_min, self._domain_max + else: + start = (self.x_min, -self.cylinder_r) + end = (self.x_max, self.cylinder_r) + else: + vals = np.tile(tau_x, (2, 2, 1)) + if self.cylinder_r is None: + start, end = self._domain_min, self._domain_max + else: + start = (self.x_min, -self.cylinder_r, -self.cylinder_r) + end = (self.x_max, self.cylinder_r, self.cylinder_r) + + self.tau_avg_gf.Set(ngs.VoxelCoefficient(start, end, vals, linear=True)) + + def evaluate_yplus(self, K: ngs.GridFunction, U) -> ngs.CoefficientFunction: + """y_plus = y_normal * u_t / nu, with u_t = sqrt(tau_avg(x) / rho).""" + u_t = ngs.sqrt(self.tau_avg_gf / self.rho) + return self.y_normal() * u_t / self.nu + + def eval_nu_wall_func(self, K: ngs.GridFunction, E, U) -> ngs.CoefficientFunction: + yplus = self.evaluate_yplus(K, U) + log = self.nu * (yplus / ((1 / self.kappa) * ngs.log(self.E * yplus)) - 1) + wall_function = ngs.IfPos((yplus - 11.25) * (200 - yplus), log, 0) + wf_final = ngs.IfPos(200 - yplus, wall_function, self.C_mu * K ** 2 / E) + return wf_final + + def eval_nu_t(self, K: ngs.GridFunction, E: ngs.GridFunction, U) -> ngs.CoefficientFunction: + wall_nu_t = self.eval_nu_wall_func(K, E, U) + nu_t_bulk = self.C_mu * K ** 2 / E + nu_t = self.mesh.MaterialCF( + {self.core_region: nu_t_bulk, self.nearwall_region: wall_nu_t}) + return ngs.IfPos(nu_t, nu_t, 0) # turbulent viscosity cannot be negative + + def eval_P_k(self, nu_t, U): + """Standard production term for turbulent kinetic energy.""" + P_k = 2 * (self.nu + nu_t) * ngs.InnerProduct( + ngs.grad(U), ngs.grad(U) + ngs.grad(U).trans - 2 / 3 * ngs.div(U) * self.IM) + return ngs.IfPos(P_k, P_k, 0) # production cannot be negative + + +class KEpsilonWallFunction: + """Geometry-independent law-of-the-wall eddy viscosity for ``KEpsilonINS``. + + Numerical contract + ------------------ + * The near-wall region is *exactly one* layer of volume cells: those owning a + facet on ``wall_boundary``, found from mesh topology. No named near-wall or + core material regions, no cylinder radius, no axis-aligned binning. + * Wall shear is local and per-cell: the tangential viscous traction averaged + over that cell's own wall facet(s). Because the layer is one cell thick + every marked cell owns a wall facet, so no extension PDE is needed. + * ``update()`` must be called once per Picard iteration, BEFORE ``eval_nu_t``. + * Cells outside the mask *always* use bulk k-epsilon viscosity, whatever their + y+ happens to be. + + Limitations + ----------- + * y+ is solution dependent and is not validated at construction. If the first + cell layer sits outside the log-law's valid band, use :meth:`y_plus_cell` to + inspect it and adjust the wall-normal mesh size. + * The y+ distance comes from the Eikonal wall-distance field. The epsilon + wall condition separately uses half the local cell size as its first-cell + distance. + * Turbulence production and the epsilon wall condition are NOT handled here; + ``KEpsilonINS`` keeps ownership of both. + + All values are held on ``L2(mesh, order=0)`` and indexed by DOF, never by + element number -- the linear forms, the mask and the shear field share one DOF + numbering, so no element-to-DOF mapping is needed internally. + """ + + #: y+ below which the viscous sublayer is assumed (no wall eddy viscosity). + YPLUS_VISCOUS = 11.25 + #: End of the smooth buffer-to-log-layer transition. + YPLUS_LOG_MIN = 30.0 + #: Smooth transition from the equilibrium wall law to bulk k-epsilon. + + def __init__(self, mesh: ngs.comp.Mesh, mu: float, rho: float, nu: float, + C_mu: float, kappa: float, E: float, + wall_boundary: str = "wall", + dist_order: int = 2, dist_relax: float = 0.1, + tau_floor: float = 1e-12) -> None: + self.mesh = mesh + self.mu = mu + self.rho = rho + self.nu = nu # laminar kinematic viscosity + self.C_mu = C_mu + self.kappa = kappa + self.E = E + self.wall_boundary = wall_boundary + self.tau_floor = tau_floor + + self.n = ngs.specialcf.normal(mesh.dim) + self.h = ngs.specialcf.mesh_size + self.IM = construct_identity_mat(mesh.dim) + + # Piecewise-constant space shared by the mask, the wall measure, the + # cell distance and the wall shear. + self._fes0 = ngs.L2(mesh, order=0) + + # An L2 basis function has no boundary trace, so a plain ds() integral + # assembles to zero. skeleton=True evaluates the volume basis function + # on the facet, which is what puts the wall integral on the owning cell. + self._wall_ds = ngs.ds(definedon=mesh.Boundaries(wall_boundary), + skeleton=True) + + # Per-cell measure (length in 2D, area in 3D) of the cell's wall facets. + self._wall_measure = self._assemble_wall(ngs.CoefficientFunction(1.0)) + wall_marked = self._wall_measure > 0.0 + if not wall_marked.any(): + raise ValueError( + f"KEpsilonWallFunction: boundary marker '{wall_boundary}' has no " + f"boundary elements. Available boundaries: {mesh.GetBoundaries()}.") + # Keep the true wall-facet owners separate: wall shear and the algebraic + # boundary integral can be evaluated directly only on these cells. + self._marked = wall_marked + self.wall_facet_cell_mask = ngs.GridFunction(self._fes0) + self.wall_facet_cell_mask.vec.FV().NumPy()[:] = wall_marked.astype(float) + + # Wall-function viscosity mask: wall-facet owners plus one complete + # face-connected neighbour layer. This suppresses bulk-model production + # on cells immediately touching the wall layer across an interior facet. + marked = self._expand_by_one_facet_layer(wall_marked) + self.mask = ngs.GridFunction(self._fes0) + self.mask.vec.FV().NumPy()[:] = marked.astype(float) + self.wall_cell_mask = ngs.GridFunction(self._fes0) + self.wall_cell_mask.vec.FV().NumPy()[:] = marked.astype(float) + + # Eikonal wall distance used by y+ and diagnostics, projected into the + # same piecewise-constant space as the mask and wall viscosity. + self._dist_gf = self._compute_distance_field(dist_order, dist_relax) + self._dist_cell = ngs.GridFunction(self._fes0) + self._dist_cell.Set(self._dist_gf) + + # The epsilon wall condition uses the first-cell approximation y_P=h/2, + # independently of the Eikonal distance used above. + self._epsilon_dist_cell = ngs.GridFunction(self._fes0) + self._epsilon_dist_cell.Set(0.5 * self.h) + + # Local wall shear, refreshed by update(). Floor everywhere until then so + # sqrt() and log() are safe if eval_nu_t runs before the first update. + self.tau_cell = ngs.GridFunction(self._fes0) + self.tau_cell.vec.FV().NumPy()[:] = tau_floor + + # ------------------------------------------------------------------ + # Construction helpers + # ------------------------------------------------------------------ + + def _assemble_wall(self, integrand: ngs.CoefficientFunction) -> np.ndarray: + """Integrate ``integrand`` over each cell's wall facets -> DOF-indexed array.""" + test = self._fes0.TestFunction() + lf = ngs.LinearForm(self._fes0) + lf += integrand * test * self._wall_ds + lf.Assemble() + return np.array(lf.vec).ravel() + + def _expand_by_one_facet_layer(self, wall_marked: np.ndarray) -> np.ndarray: + """Add every volume cell sharing a facet with a wall-facet owner.""" + elements = list(self._fes0.Elements(ngs.VOL)) + wall_elements = { + element.nr for element in elements + if any(wall_marked[dof] for dof in element.dofs) + } + + facet_to_elements = {} + element_by_number = {element.nr: element for element in elements} + self._element_dofs = { + element.nr: tuple(element.dofs) for element in elements + } + for element in elements: + for facet in element.facets: + facet_to_elements.setdefault(facet.nr, set()).add(element.nr) + + expanded_elements = set(wall_elements) + neighbour_sources = {} + for element_number in wall_elements: + for facet in element_by_number[element_number].facets: + neighbours = facet_to_elements[facet.nr] + expanded_elements.update(neighbours) + for neighbour in neighbours - wall_elements: + neighbour_sources.setdefault(neighbour, set()).add( + element_number) + self._wall_layer_sources = neighbour_sources + + expanded = np.zeros_like(wall_marked, dtype=bool) + for element in elements: + if element.nr in expanded_elements: + expanded[list(element.dofs)] = True + return expanded + + def _compute_distance_field(self, order: int, relax: float) -> ngs.GridFunction: + """Distance to ``wall_boundary`` from a regularized Eikonal solve.""" + eps = relax * self.h + fes = ngs.H1(self.mesh, order=order, dirichlet=self.wall_boundary) + u, v = fes.TnT() + y = ngs.GridFunction(fes) + + a = ngs.BilinearForm(fes) + a += ngs.grad(u) * ngs.grad(v) * ngs.dx + f = ngs.LinearForm(fes) + f += 1.0 * v * ngs.dx + a.Assemble() + f.Assemble() + y.vec.data = a.mat.Inverse(fes.FreeDofs()) * f.vec + + gu = ngs.grad(u) + residual = ngs.BilinearForm(fes) + residual += ( + ngs.sqrt(gu * gu + 1e-12) * v - v + + eps * gu * ngs.grad(v) + ) * ngs.dx + ngs.solvers.Newton(residual, y, printing=False) + return y + + # ------------------------------------------------------------------ + # Per-iteration update + # ------------------------------------------------------------------ + + def tau_wall_cf(self, U) -> ngs.CoefficientFunction: + """Magnitude of the *tangential* viscous traction on the wall. + + ``t = sigma.n - n (sigma.n . n)`` removes the normal traction, which the + legacy ``|sigma.n|`` wrongly included. The normal's sign cancels. + """ + sigma = self.mu * (ngs.Grad(U) + ngs.Grad(U).trans + - 2 / 3 * ngs.div(U) * self.IM) + traction = ngs.BoundaryFromVolumeCF(sigma) * self.n + tangential = traction - self.n * ngs.InnerProduct(traction, self.n) + # +tau_floor**2 keeps the derivative of sqrt finite at zero traction. + return ngs.sqrt(ngs.InnerProduct(tangential, tangential) + self.tau_floor ** 2) + + def update(self, U) -> None: + """Refresh the per-cell wall shear. Call once per Picard iteration, + BEFORE ``eval_nu_t``. + + The facet integral is divided by the facet measure for true wall cells. + Its value is then propagated to the face-connected wall-layer cells; + cells connected to multiple wall owners receive their arithmetic mean. + + TODO: cells owning more than one wall facet (corners, and any cell with + two faces on a re-entrant wall) fall out of this as an area-weighted + aggregate of all their wall facets. That is a plausible value but it is + NOT validated -- the tests only cover one wall facet per cell. Validate + against a corner case before relying on it. + """ + shear = self._assemble_wall(self.tau_wall_cf(U)) + tau = np.full_like(shear, self.tau_floor) + tau[self._marked] = np.maximum( + shear[self._marked] / self._wall_measure[self._marked], self.tau_floor) + for element_number, source_numbers in self._wall_layer_sources.items(): + source_values = [ + tau[self._element_dofs[source_number][0]] + for source_number in source_numbers + ] + value = max(float(np.mean(source_values)), self.tau_floor) + tau[list(self._element_dofs[element_number])] = value + self.tau_cell.vec.FV().NumPy()[:] = tau + + # ------------------------------------------------------------------ + # Diagnostics + # ------------------------------------------------------------------ + + def near_wall_mask(self) -> ngs.GridFunction: + """1 on wall cells and their first face-connected neighbours.""" + return self.mask + + def first_cell_mask(self) -> ngs.GridFunction: + """1 on every cell treated as part of the expanded wall layer.""" + return self.wall_cell_mask + + def wall_facet_mask(self) -> ngs.GridFunction: + """1 only on cells owning a physical wall facet.""" + return self.wall_facet_cell_mask + + def wall_distance_cell(self) -> ngs.GridFunction: + return self._dist_cell + + def wall_distance_field(self) -> ngs.GridFunction: + """Continuous Eikonal wall-distance field used by y+.""" + return self._dist_gf + + def y_plus_cell(self, K) -> ngs.CoefficientFunction: + """Return cellwise y+ using the high-Re k-epsilon equilibrium relation. + + The friction velocity is ``u_tau = C_mu**0.25 * sqrt(k)``. It therefore + depends on the current turbulent kinetic energy rather than the resolved + molecular traction, which is generally under-resolved on a wall-function + mesh. + """ + k_nonnegative = ngs.IfPos(K, K, 0.0) + u_tau = self.C_mu ** 0.25 * ngs.sqrt(k_nonnegative) + return self._dist_cell * u_tau / self.nu + + def epsilon_wall_cell(self, K) -> ngs.CoefficientFunction: + """High-Re equilibrium dissipation in the wall-adjacent cell. + + ``epsilon_P = C_mu**0.75 * k_P**1.5 / (kappa * y_P)``. + The distance field is cell-averaged and strictly positive in the cells + that own wall facets. + """ + k_nonnegative = ngs.IfPos(K, K, 0.0) + return (self.C_mu ** 0.75 * k_nonnegative ** 1.5 + / (self.kappa * self._epsilon_dist_cell)) + + # ------------------------------------------------------------------ + # Eddy viscosity + # ------------------------------------------------------------------ + + @staticmethod + def _smooth_step(value, lower: float, upper: float): + """C1-continuous transition from zero to one over ``[lower, upper]``.""" + scaled = (value - lower) / (upper - lower) + clipped = ngs.IfPos( + scaled, ngs.IfPos(1.0 - scaled, scaled, 1.0), 0.0) + return clipped ** 2 * (3.0 - 2.0 * clipped) + + def eval_nu_wall(self, K, E) -> ngs.CoefficientFunction: + """Continuous equilibrium wall-law viscosity in the near-wall layer. + + Constant total shear together with ``du+/dy+ = 1/(kappa*y+)`` gives + ``nu_t/nu = kappa*y+ - 1``. Smooth transitions avoid the large + constitutive jumps produced by the legacy hard switches. + """ + yplus = self.y_plus_cell(K) + equilibrium = self.nu * (self.kappa * yplus - 1.0) + equilibrium = ngs.IfPos(equilibrium, equilibrium, 0.0) + + buffer_weight = self._smooth_step( + yplus, self.YPLUS_VISCOUS, self.YPLUS_LOG_MIN) + # The topological mask already selects only wall-adjacent cells. Keep + # those cells on the wall law for all y+; blending them back to + # C_mu*k^2/epsilon creates a strong positive feedback when epsilon lags. + return buffer_weight * equilibrium + + def eval_nu_t(self, K, E, U=None) -> ngs.CoefficientFunction: + """Blended turbulent viscosity. + + ``U`` is accepted and ignored: the shear it would supply comes from + :meth:`update`, which must already have run this iteration. + """ + nu_t_bulk = self.C_mu * K ** 2 / E + nu_t = self.mask * self.eval_nu_wall(K, E) + (1 - self.mask) * nu_t_bulk + return ngs.IfPos(nu_t, nu_t, 0) # turbulent viscosity cannot be negative diff --git a/opencmp/models/__init__.py b/opencmp/models/__init__.py index 63b8790..f3999b2 100644 --- a/opencmp/models/__init__.py +++ b/opencmp/models/__init__.py @@ -26,6 +26,8 @@ from .stokes import Stokes from .stokes_dim import StokesDIM from .multi_component_ins import MultiComponentINS +from .k_epsilon import KEpsilonINS + models_dict = {"INS": INS, "INS-DIM": INSDIM, @@ -33,7 +35,8 @@ "Poisson-DIM": PoissonDIM, "Stokes": Stokes, "Stokes-DIM": StokesDIM, - "MultiComponentINS": MultiComponentINS} + "MultiComponentINS": MultiComponentINS, + "KEpsilonINS": KEpsilonINS} # Helper functions from .misc import get_model_class diff --git a/opencmp/models/ins.py b/opencmp/models/ins.py index 602b4d5..f8b2891 100644 --- a/opencmp/models/ins.py +++ b/opencmp/models/ins.py @@ -25,7 +25,7 @@ Preconditioner, div, dx from ..helpers.ngsolve_ import get_special_functions -from ..helpers.dg import avg, jump, grad_avg +from ..helpers.dg import avg, jump, weighted_grad_avg from . import Model from ..helpers.error import norm, mean @@ -92,6 +92,12 @@ def _set_model_parameters(self) -> None: # Remove the source term for the conservation of momentum if it's not being solved. self.f.pop('u') + def _get_kinematic_viscosity(self, time_step: int): + """ + Return the viscosity used by the momentum weak form. + """ + return self.kv[time_step] + def _construct_fes(self) -> FESpace: return FESpace(self._construct_fes_helper(), dgjumps=self.DG) @@ -179,6 +185,7 @@ def construct_bilinear_time_ODE(self, U: Union[List[ProxyFunction], List[GridFun dt: Parameter = Parameter(1.0), time_step: int = 0) -> List[BilinearForm]: w = self._get_wind(U, time_step) + kv = self._get_kinematic_viscosity(time_step) # Define the special DG functions n, _, alpha, I_mat = get_special_functions(self.mesh, self.nu) @@ -188,7 +195,7 @@ def construct_bilinear_time_ODE(self, U: Union[List[ProxyFunction], List[GridFun v = V[self.model_components['u']] # Domain integrals. Newtonian Stress - a = dt * (self.kv[time_step] * InnerProduct(Grad(u), Grad(v))) * dx + a = dt * (kv * InnerProduct(Grad(u), Grad(v))) * dx if self.linearize == 'Oseen': # Linearized convection term. @@ -198,9 +205,9 @@ def construct_bilinear_time_ODE(self, U: Union[List[ProxyFunction], List[GridFun # Penalty for dirichlet BCs if self.dirichlet_names.get('u', None) is not None: a += dt * ( - self.kv[time_step] * alpha * u * v # 1/2 of penalty term for u=g on 𝚪_D from ∇u^ - - self.kv[time_step] * InnerProduct(Grad(u), OuterProduct(v, n)) # ∇u^ = ∇u - - self.kv[time_step] * InnerProduct(Grad(v), OuterProduct(u, n)) # 1/2 of penalty for u=g on 𝚪_D + kv * alpha * u * v # 1/2 of penalty term for u=g on 𝚪_D from ∇u^ + - kv * InnerProduct(Grad(u), OuterProduct(v, n)) # ∇u^ = ∇u + - kv * InnerProduct(Grad(v), OuterProduct(u, n)) # 1/2 of penalty for u=g on 𝚪_D ) * self._ds(self.dirichlet_names['u']) if self.linearize == 'Oseen': @@ -228,6 +235,7 @@ def construct_bilinear_time_coefficient(self, U: List[ProxyFunction], V: List[Pr time_step: int) -> List[BilinearForm]: w = self._get_wind(U, time_step) + kv = self._get_kinematic_viscosity(time_step) # Define the special DG functions. n, _, alpha, I_mat = get_special_functions(self.mesh, self.nu) @@ -246,10 +254,12 @@ def construct_bilinear_time_coefficient(self, U: List[ProxyFunction], V: List[Pr if self.DG: avg_u = avg(u) jump_u = jump(u) - avg_grad_u = grad_avg(u) + facet_kv = ngsolve.CoefficientFunction(kv) + avg_kv = avg(facet_kv) + avg_grad_u = weighted_grad_avg(u, facet_kv) jump_v = jump(v) - avg_grad_v = grad_avg(v) + avg_grad_v = weighted_grad_avg(v, facet_kv) # Penalty for discontinuities # TODO: Why are these in here? @@ -258,9 +268,9 @@ def construct_bilinear_time_coefficient(self, U: List[ProxyFunction], V: List[Pr # E.g. p is an unknown, grad(p) would be fixed in terms of a previous value of p and could NOT be # solved for. a += dt * ( - self.kv[time_step] * alpha * InnerProduct(jump_u, jump_v) # Penalty term for u+=u- on 𝚪_I from ∇u^ - - self.kv[time_step] * InnerProduct(avg_grad_u, OuterProduct(jump_v, n)) # Stress - - self.kv[time_step] * InnerProduct(avg_grad_v, OuterProduct(jump_u, n)) # U + avg_kv * alpha * InnerProduct(jump_u, jump_v) # Penalty term for u+=u- on 𝚪_I from ∇u^ + - InnerProduct(avg_grad_u, OuterProduct(jump_v, n)) # Stress + - InnerProduct(avg_grad_v, OuterProduct(jump_u, n)) # U ) * dx(skeleton=True) if self.linearize == 'Oseen': @@ -273,6 +283,7 @@ def construct_linear(self, V: List[ProxyFunction], gfu_0: Optional[List[GridFunc dt: Parameter, time_step: int) -> List[LinearForm]: w = self._get_wind(gfu_0, time_step) + kv = self._get_kinematic_viscosity(time_step) # Define the special DG functions. n, h, alpha, I_mat = get_special_functions(self.mesh, self.nu) @@ -288,8 +299,8 @@ def construct_linear(self, V: List[ProxyFunction], gfu_0: Optional[List[GridFunc for marker in self.BC.get('dirichlet', {}).get('u', {}): g = self.BC['dirichlet']['u'][marker][time_step] L += dt * ( - self.kv[time_step] * alpha * g * v # 1/2 of penalty for u=g from ∇u^ on 𝚪_D - - self.kv[time_step] * InnerProduct(Grad(v), OuterProduct(g, n)) # 1/2 of penalty for u=g + kv * alpha * g * v # 1/2 of penalty for u=g from ∇u^ on 𝚪_D + - kv * InnerProduct(Grad(v), OuterProduct(g, n)) # 1/2 of penalty for u=g ) * self._ds(marker) if self.linearize == 'Oseen': diff --git a/opencmp/models/k_epsilon.py b/opencmp/models/k_epsilon.py new file mode 100644 index 0000000..ac9bb8f --- /dev/null +++ b/opencmp/models/k_epsilon.py @@ -0,0 +1,611 @@ +######################################################################################################################## +# Copyright 2021 the authors (see AUTHORS file for full list). # +# # +# This file is part of OpenCMP. # +# # +# OpenCMP is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public # +# License as published by the Free Software Foundation, either version 2.1 of the License, or (at your option) any # +# later version. # +# # +# OpenCMP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied # +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more # +# details. # +# # +# You should have received a copy of the GNU Lesser General Public License along with OpenCMP. If not, see # +# . # +######################################################################################################################## + +"""Single-phase incompressible Navier--Stokes with a k-epsilon closure.""" + +import logging +from typing import Dict, List, Optional, Union + +import ngsolve as ngs +from ngsolve import (BilinearForm, FESpace, GridFunction, LinearForm, + Parameter, Preconditioner) +from ngsolve.comp import ProxyFunction + +from .ins import INS +from ..helpers.dg import avg, grad_avg, jump +from ..helpers.limiter import Limiter +from ..helpers.math import Max +from ..helpers.ngsolve_ import get_special_functions +from ..helpers.wall_func import KEpsilonWallFunction + + +class KEpsilonINS(INS): + """RANS INS model closed with the standard high-Reynolds-number k-epsilon equations. + + The momentum and continuity equations are inherited from :class:`INS`. + This class adds transport equations for turbulent kinetic energy and dissipation. + """ + + def _optional_config(self, key: str, value_type, default): + try: + value = self.config.get_item(['OTHER', key], value_type, quiet=True) + except Exception: + return default + return default if value is None else value + + def _pre_init(self) -> None: + self.wall_function = self._optional_config('wall_function', bool, False) + self.wall_boundary = self._optional_config('wall_boundary', str, 'wall') + self.slope_limiter = self._optional_config('slope_limiter', bool, False) + self.production_limiter = self._optional_config( + 'production_limiter', bool, True) + self.epsilon_wall_relaxation = self._optional_config( + 'epsilon_wall_relaxation', float, 0.15) + self.epsilon_wall_max_change_factor = self._optional_config( + 'epsilon_wall_max_change_factor', float, 2.0) + if not 0.0 < self.epsilon_wall_relaxation <= 1.0: + raise ValueError('epsilon_wall_relaxation must be in (0, 1].') + if self.epsilon_wall_max_change_factor < 1.0: + raise ValueError('epsilon_wall_max_change_factor must be at least 1.') + + def _define_model_components(self) -> Dict[str, Optional[int]]: + return {'u': 0, 'p': 1, 'k': 2, 'epsilon': 3} + + def _define_model_local_error_components(self) -> Dict[str, bool]: + return {'u': True, 'p': False, 'k': True, 'epsilon': True} + + def _define_time_derivative_components(self) -> List[Dict[str, bool]]: + return [{'u': True, 'p': False, 'k': True, 'epsilon': True}] + + def _define_bc_types(self) -> List[str]: + return super()._define_bc_types() + ['neumann'] + + def _construct_fes(self) -> FESpace: + spaces = self._construct_fes_helper() + scalar_order = max(self.interp_ord - 1, 0) + + for component in ('k', 'epsilon'): + element = self.element[component] + kwargs = { + 'mesh': self.mesh, + 'order': scalar_order if element == 'L2' else self.interp_ord, + 'dgjumps': self.DG, + } + if element != 'L2': + kwargs['dirichlet'] = self.dirichlet_names.get(component, '') + spaces.append(getattr(ngs, element)(**kwargs)) + + return FESpace(spaces, dgjumps=self.DG) + + def _set_model_parameters(self) -> None: + super()._set_model_parameters() + parameters = self.model_functions.model_parameters_dict + self.C_mu = parameters['c_mu']['all'] + self.C_1 = parameters['c_1']['all'] + self.C_2 = parameters['c_2']['all'] + self.sigma_k = parameters['sigma_k']['all'] + self.sigma_epsilon = parameters['sigma_epsilon']['all'] + + # Floors and the viscosity ratio cap are numerical safeguards, not + # replacements for physically meaningful ICs and BCs. + self.k_floor = parameters.get('k_floor', {'all': [1e-10] * len(self.t_param)})['all'] + self.epsilon_floor = parameters.get( + 'epsilon_floor', {'all': [1e-10] * len(self.t_param)})['all'] + self.max_viscosity_ratio = parameters.get( + 'max_viscosity_ratio', {'all': [1e5] * len(self.t_param)})['all'] + self.production_limit_coefficient = parameters.get( + 'production_limit_coefficient', + {'all': [10.0] * len(self.t_param)})['all'] + + if any(value <= 0.0 for value in self.production_limit_coefficient): + raise ValueError('production_limit_coefficient must be positive.') + + if self.wall_function: + self.density = parameters['density']['all'] + self.kappa = parameters['kappa']['all'] + self.E_log = parameters['e_log']['all'] + + def _post_init(self) -> None: + super()._post_init() + if self.linearize != 'Oseen': + raise NotImplementedError('KEpsilonINS currently supports Oseen linearization only.') + + self.UIter = ngs.GridFunction(self.fes) + self.UIter.vec.data = self.IC.vec + + try: + relaxation = self.config.get_list(['SOLVER', 'relaxation_factors'], float) + except Exception: + relaxation = [] + self.relaxation_factors = ( + relaxation if len(relaxation) == len(self.model_components) + else [1.0] * len(self.model_components) + ) + self._limiter = Limiter(self.mesh) if self.slope_limiter else None + self._wallf = None + self._epsilon_wall_element_dofs = {} + self._epsilon_wall_values = None + if self.wall_function: + nu = self.kv[0] + self._wallf = KEpsilonWallFunction( + self.mesh, + mu=self.density[0] * nu, + rho=self.density[0], + nu=nu, + C_mu=self.C_mu[0], + kappa=self.kappa[0], + E=self.E_log[0], + wall_boundary=self.wall_boundary, + ) + self._wallf.update( + self.UIter.components[self.model_components['u']]) + + self._initialize_first_cell_epsilon() + + # Build and compile the turbulent viscosity once per time level so every + # form reuses the same optimized evaluation tree. This benefits both the + # bulk k-epsilon expression and the deeper wall-law expression. + self._turbulent_viscosity = [] + for time_step in range(len(self.t_param)): + nu_t = self._build_turbulent_viscosity(time_step) + self._turbulent_viscosity.append(nu_t.Compile()) + + self._normal, _, self._penalty, _ = get_special_functions(self.mesh, self.nu) + + def _regularized_turbulence(self, time_step: int): + """Return turbulence fields bounded below by their configured floors. + + The bounded fields are used in ratios such as ``k**2 / epsilon`` and + ``epsilon / k`` to prevent division by zero and invalid negative + coefficients during nonlinear iterations. The solution fields stored + in ``UIter`` are not modified. + + Args: + time_step: Index selecting the floor values for the current time level. + + Returns: + The floor-bounded turbulent kinetic energy and dissipation fields. + """ + comp = self.model_components + k = self.UIter.components[comp['k']] + epsilon = self.UIter.components[comp['epsilon']] + k_safe = Max(k, ngs.CoefficientFunction(self.k_floor[time_step])) + epsilon_safe = Max( + epsilon, ngs.CoefficientFunction(self.epsilon_floor[time_step])) + return k_safe, epsilon_safe + + def _build_turbulent_viscosity(self, time_step: int): + k, epsilon = self._regularized_turbulence(time_step) + comp = self.model_components + k_raw = self.UIter.components[comp['k']] + epsilon_raw = self.UIter.components[comp['epsilon']] + velocity = self.UIter.components[self.model_components['u']] + bulk_valid = ngs.IfPos( + k_raw, ngs.IfPos(epsilon_raw, 1.0, 0.0), 0.0) + + if self._wallf is not None: + nu_t = self._wallf.eval_nu_t(k, epsilon, velocity) + wall_mask = self._wallf.near_wall_mask() + # The wall law remains active throughout the topological wall layer. + # In the bulk, an invalid raw turbulence state must switch turbulence + # off instead of turning the epsilon floor into a huge viscosity. + nu_t = wall_mask * nu_t + (1.0 - wall_mask) * bulk_valid * nu_t + else: + nu_t = bulk_valid * self.C_mu[time_step] * k ** 2 / epsilon + + cap = self.max_viscosity_ratio[time_step] * self.kv[time_step] + return ngs.IfPos(nu_t, ngs.IfPos(cap - nu_t, nu_t, cap), 0.0) + + def _get_turbulent_viscosity(self, time_step: int): + return self._turbulent_viscosity[time_step] + + def _get_kinematic_viscosity(self, time_step: int): + return self.kv[time_step] + self._get_turbulent_viscosity(time_step) + + def _initialize_first_cell_epsilon(self) -> None: + """Initialize the algebraic epsilon treatment in wall-adjacent cells. + + This maps cells selected by the wall-function topology mask to the + corresponding epsilon-space DOFs. It then evaluates the equilibrium + wall-law epsilon from the initial turbulent kinetic energy, stores one + continuation value per wall cell, and applies those values to ``UIter`` + before the first Picard system is assembled. + + Raises: + NotImplementedError: If epsilon does not use a discontinuous L2 space. + RuntimeError: If a marked wall cell cannot be mapped to epsilon DOFs. + """ + if not self.DG or self.element['epsilon'] != 'L2': + raise NotImplementedError( + 'The first-cell epsilon treatment requires a discontinuous L2 ' + 'epsilon space.') + + mask_values = self._wallf.first_cell_mask().vec.FV().NumPy() + wall_elements = { + element.nr + for element in self._wallf._fes0.Elements(ngs.VOL) + if any(mask_values[dof] > 0.5 for dof in element.dofs) + } + epsilon_space = self.fes.components[self.model_components['epsilon']] + for element in epsilon_space.Elements(ngs.VOL): + if element.nr not in wall_elements: + continue + self._epsilon_wall_element_dofs[element.nr] = tuple(element.dofs) + + if len(self._epsilon_wall_element_dofs) != len(wall_elements): + raise RuntimeError('Could not map every wall-adjacent cell to epsilon DOFs.') + + # Start the nonlinear solve on the same equilibrium wall relation that + # will be enforced later. Initializing this continuation state from the + # domain/inlet epsilon made every wall cell climb geometrically toward a + # much larger target, so its absolute Picard update grew by construction. + initial_k = ngs.GridFunction(self._wallf._fes0) + initial_k.Set(self.UIter.components[self.model_components['k']]) + initial_target = ngs.GridFunction(self._wallf._fes0) + initial_target.Set(self._wallf.epsilon_wall_cell(initial_k)) + initial_values = initial_target.vec.FV().NumPy() + self._epsilon_wall_values = { + element.nr: max(float(initial_values[element.dofs[0]]), + self.epsilon_floor[0]) + for element in self._wallf._fes0.Elements(ngs.VOL) + if element.nr in wall_elements + } + # The coefficient functions assembled for the first Picard step read + # UIter, so put the equilibrium values into that iterate immediately as + # well as into the continuation history above. + self._apply_first_cell_epsilon(self.UIter, 0) + + def _apply_first_cell_epsilon(self, gfu: GridFunction, time_step: int) -> None: + """Update epsilon in wall-adjacent cells from the equilibrium wall law. + + The wall-law target is evaluated using the Picard-lagged turbulent + kinetic energy in ``UIter``. Each cell value is limited relative to its + previous value, under-relaxed, bounded by the epsilon floor, and then + projected into every local epsilon DOF of the wall-adjacent element. + Non-wall cells in ``gfu`` are left unchanged. + + Args: + gfu: Solution grid function whose epsilon component is updated. + time_step: Index selecting the epsilon floor for the current time level. + """ + if self._wallf is None: + return + + comp = self.model_components + epsilon_component = gfu.components[comp['epsilon']] + # Picard-lag the nonlinear wall target. Using the just-solved k here + # couples two new fields outside the assembled linear system and turns + # the post-solve overwrite into an unrelaxed same-iteration feedback. + k_cell = ngs.GridFunction(self._wallf._fes0) + k_cell.Set(self.UIter.components[comp['k']]) + raw_target = ngs.GridFunction(self._wallf._fes0) + raw_target.Set(self._wallf.epsilon_wall_cell(k_cell)) + raw_values = raw_target.vec.FV().NumPy() + + applied_cell = ngs.GridFunction(self._wallf._fes0) + applied_cell_values = applied_cell.vec.FV().NumPy() + mask_values = self._wallf.first_cell_mask().vec.FV().NumPy() + epsilon_values = epsilon_component.vec.FV().NumPy() + + relaxation = self.epsilon_wall_relaxation + change_factor = self.epsilon_wall_max_change_factor + for element in self._wallf._fes0.Elements(ngs.VOL): + if not any(mask_values[dof] > 0.5 for dof in element.dofs): + continue + cell_dof = element.dofs[0] + previous = self._epsilon_wall_values[element.nr] + target_value = max(float(raw_values[cell_dof]), + self.epsilon_floor[time_step]) + value, _ = self._relax_epsilon_wall_value( + target_value, previous, relaxation, change_factor) + value = max(value, self.epsilon_floor[time_step]) + applied_cell_values[cell_dof] = value + self._epsilon_wall_values[element.nr] = value + + # Let NGSolve represent the P0 field in the actual high-order basis, + # then copy every local coefficient on wall cells. This removes all + # higher epsilon modes there without changing the global FESpace. + projected = ngs.GridFunction(epsilon_component.space) + projected.Set(applied_cell) + projected_values = projected.vec.FV().NumPy() + for dofs in self._epsilon_wall_element_dofs.values(): + epsilon_values[list(dofs)] = projected_values[list(dofs)] + + @staticmethod + def _relax_epsilon_wall_value(raw_target: float, previous: float, + relaxation: float, + change_factor: float) -> tuple: + """Limit and relax one algebraic first-cell epsilon target.""" + limited_target = min( + max(raw_target, previous / change_factor), + previous * change_factor) + value = ((1.0 - relaxation) * previous + + relaxation * limited_target) + return value, limited_target != raw_target + + def _limit_production(self, production, epsilon, time_step: int): + """Use equilibrium limiting at walls and the configured limit in bulk.""" + bulk_limit = self.production_limit_coefficient[time_step] * epsilon + bulk_production = ngs.IfPos( + bulk_limit - production, production, bulk_limit) + if self._wallf is None: + return bulk_production + + # The high-Re wall treatment assumes local equilibrium, P_k ~= epsilon. + # Apply that coefficient throughout the same expanded wall layer used by + # wall viscosity and first-cell epsilon; retain the user's coefficient + # only in the non-equilibrium interior. + wall_production = ngs.IfPos( + epsilon - production, production, epsilon) + wall_mask = self._wallf.near_wall_mask() + return (wall_mask * wall_production + + (1.0 - wall_mask) * bulk_production) + + def _production(self, time_step: int): + velocity = self.UIter.components[self.model_components['u']] + nu_t = self._get_turbulent_viscosity(time_step) + strain = 0.5 * (ngs.grad(velocity) + ngs.grad(velocity).trans) + production = 2.0 * nu_t * ngs.InnerProduct(strain, strain) + production = ngs.IfPos(production, production, 0.0) + + if self.production_limiter: + _, epsilon = self._regularized_turbulence(time_step) + production = self._limit_production( + production, epsilon, time_step) + + return production + + def _neumann_markers(self, component: str) -> str: + return '|'.join(self.BC.get('neumann', {}).get(component, {}).keys()) + + def _epsilon_dirichlet_markers(self) -> str: + """Configured epsilon boundaries; wall-function walls use zero flux.""" + return '|'.join(self.BC.get('dirichlet', {}).get('epsilon', {}).keys()) + + def _add_scalar_transport(self, form, scalar, test, wind, diffusivity, + dirichlet_markers: str, neumann_markers: str, + dt: Parameter): + n = self._normal + form += -dt * scalar * (wind * ngs.grad(test)) * ngs.dx + form += dt * diffusivity * ngs.grad(scalar) * ngs.grad(test) * ngs.dx + + if self.DG: + wind_n = wind * n + flux = avg(scalar) * wind_n + 0.5 * ngs.Norm(wind_n) * jump(scalar) + form += dt * jump(test) * flux * ngs.dx(skeleton=True) + form += -dt * diffusivity * (n * grad_avg(test)) * jump(scalar) * ngs.dx(skeleton=True) + form += dt * diffusivity * ( + self._penalty * jump(scalar) - grad_avg(scalar) * n + ) * jump(test) * ngs.dx(skeleton=True) + + if dirichlet_markers: + form += dt * test * ( + 0.5 * scalar * wind_n + 0.5 * scalar * ngs.Norm(wind_n) + ) * self._ds(dirichlet_markers) + form += -dt * diffusivity * scalar * ( + ngs.grad(test) * n) * self._ds(dirichlet_markers) + form += dt * diffusivity * ( + self._penalty * scalar - ngs.grad(scalar) * n + ) * test * self._ds(dirichlet_markers) + + if neumann_markers: + form += dt * test * scalar * Max( + wind_n, ngs.CoefficientFunction(0.0) + ) * self._ds(neumann_markers) + + return form + + def construct_bilinear_time_ODE( + self, U: Union[List[ProxyFunction], List[GridFunction]], + V: List[ProxyFunction], dt: Parameter = Parameter(1.0), + time_step: int = 0) -> List[BilinearForm]: + forms = super().construct_bilinear_time_ODE(U, V, dt, time_step) + comp = self.model_components + wind = self._get_wind(U, time_step) + nu_t = self._get_turbulent_viscosity(time_step) + k = U[comp['k']] + epsilon = U[comp['epsilon']] + zeta = V[comp['k']] + psi = V[comp['epsilon']] + + d_k = self.kv[time_step] + nu_t / self.sigma_k[time_step] + d_epsilon = self.kv[time_step] + nu_t / self.sigma_epsilon[time_step] + k_previous, epsilon_previous = self._regularized_turbulence(time_step) + form = forms[0] + form = self._add_scalar_transport( + form, k, zeta, wind, d_k, + self.dirichlet_names.get('k', ''), self._neumann_markers('k'), dt) + form = self._add_scalar_transport( + form, epsilon, psi, wind, d_epsilon, + self._epsilon_dirichlet_markers(), + self._neumann_markers('epsilon'), dt) + # Treat the sink terms as positive implicit contributions. Lag only + # their coefficients, following the standard segregated k-epsilon + # linearization used by production CFD solvers. Keeping these terms + # on the right-hand side makes the Picard iteration highly unstable + # when either turbulence variable changes rapidly. + form += dt * (epsilon_previous / k_previous) * k * zeta * ngs.dx + form += dt * self.C_2[time_step] * ( + epsilon_previous / k_previous) * epsilon * psi * ngs.dx + forms[0] = form + return forms + + def construct_linear(self, V: List[ProxyFunction], + gfu_0: Optional[List[GridFunction]], dt: Parameter, + time_step: int) -> List[LinearForm]: + forms = super().construct_linear(V, gfu_0, dt, time_step) + comp = self.model_components + zeta = V[comp['k']] + psi = V[comp['epsilon']] + wind = self._get_wind(gfu_0, time_step) + k, epsilon = self._regularized_turbulence(time_step) + nu_t = self._get_turbulent_viscosity(time_step) + production = self._production(time_step) + form = forms[0] + + source_k = self.f.get('k', [0.0] * len(self.t_param))[time_step] + source_epsilon = self.f.get( + 'epsilon', [0.0] * len(self.t_param))[time_step] + form += dt * ( + production + source_k + ) * zeta * ngs.dx + form += dt * ( + self.C_1[time_step] * epsilon / k * production + + source_epsilon + ) * psi * ngs.dx + + if self.DG: + n = self._normal + d_k = self.kv[time_step] + nu_t / self.sigma_k[time_step] + d_epsilon = ( + self.kv[time_step] + nu_t / self.sigma_epsilon[time_step]) + for component, test, diffusivity in ( + ('k', zeta, d_k), ('epsilon', psi, d_epsilon)): + for marker, values in self.BC.get( + 'dirichlet', {}).get(component, {}).items(): + value = values[time_step] + wind_n = wind * n + form += -dt * test * ( + 0.5 * value * wind_n + - 0.5 * value * ngs.Norm(wind_n) + ) * self._ds(marker) + form += dt * diffusivity * self._penalty * value * test * self._ds(marker) + form += -dt * diffusivity * value * ( + ngs.grad(test) * n) * self._ds(marker) + + for component, test in (('k', zeta), ('epsilon', psi)): + for marker, values in self.BC.get( + 'neumann', {}).get(component, {}).items(): + form += -dt * test * values[time_step] * self._ds(marker) + + forms[0] = form + return forms + + def solve_single_step(self, a_lst: List[BilinearForm], + L_lst: List[LinearForm], + precond_lst: List[Preconditioner], + gfu: GridFunction, time_step: int = 0) -> None: + comp = self.model_components + if (gfu.components[comp['k']].vec.Norm() == 0.0 + or gfu.components[comp['epsilon']].vec.Norm() == 0.0): + gfu.vec.data = self.IC.vec + + previous = ngs.GridFunction(self.fes) + scalar_order = max(self.interp_ord - 1, 0) + + for iteration in range(self.nonlinear_max_iters): + previous.vec.data = gfu.vec + self.UIter.vec.data = gfu.vec + self.W[0].vec.data = gfu.components[comp['u']].vec + + if self._wallf is not None: + self._wallf.update(self.UIter.components[comp['u']]) + + self.apply_dirichlet_bcs_to(gfu, time_step) + a_lst[0].Assemble() + L_lst[0].Assemble() + if precond_lst[0] is not None: + precond_lst[0].Update() + self.linear_solve(a_lst[0], L_lst[0], precond_lst[0], gfu) + + for index, factor in enumerate(self.relaxation_factors): + if factor < 1.0: + gfu.components[index].vec.data = ( + factor * gfu.components[index].vec + + (1.0 - factor) * previous.components[index].vec) + + self._apply_first_cell_epsilon(gfu, time_step) + + if self._limiter is not None: + self._limiter.bezier_bound( + gfu.components[comp['k']], + gfu.components[comp['k']].space, + scalar_order, (self.k_floor[time_step], 1e20)) + self._limiter.bezier_bound( + gfu.components[comp['epsilon']], + gfu.components[comp['epsilon']].space, + scalar_order, (self.epsilon_floor[time_step], 1e20)) + + difference = gfu.vec.CreateVector() + difference.data = gfu.vec - previous.vec + tolerance = ( + self.abs_nonlinear_tolerance + + self.rel_nonlinear_tolerance * gfu.vec.Norm()) + if difference.Norm() < tolerance: + logging.info( + 'KEpsilonINS converged in %d nonlinear iteration(s).', + iteration + 1) + break + else: + logging.warning( + 'KEpsilonINS did not converge within %d nonlinear iterations.', + self.nonlinear_max_iters) + + self.UIter.vec.data = gfu.vec + self.W[0].vec.data = gfu.components[comp['u']].vec + + def linearized_solve(self, a_assembled: BilinearForm, L_assembled: LinearForm, + precond: Preconditioner, gfu: GridFunction): + """Perform one stationary Picard update.""" + super().linearized_solve(a_assembled, L_assembled, precond, gfu) + + for index, factor in enumerate(self.relaxation_factors): + if factor < 1.0: + gfu.components[index].vec.data = ( + factor * gfu.components[index].vec + + (1.0 - factor) * self.UIter.components[index].vec) + + self._apply_first_cell_epsilon(gfu, 0) + + comp = self.model_components + if self._limiter is not None: + scalar_order = max(self.interp_ord - 1, 0) + self._limiter.bezier_bound( + gfu.components[comp['k']], gfu.components[comp['k']].space, + scalar_order, (self.k_floor[0], 1e20)) + self._limiter.bezier_bound( + gfu.components[comp['epsilon']], + gfu.components[comp['epsilon']].space, + scalar_order, (self.epsilon_floor[0], 1e20)) + + error_squared = 0.0 + norm_squared = 0.0 + for component in ('u', 'k', 'epsilon'): + index = comp[component] + difference = gfu.components[index].vec.CreateVector() + difference.data = ( + gfu.components[index].vec - self.UIter.components[index].vec) + error_squared += difference.Norm() ** 2 + norm_squared += gfu.components[index].vec.Norm() ** 2 + return error_squared ** 0.5, norm_squared ** 0.5 + + def update_linearization(self, gfu: GridFunction) -> None: + if self._limiter is not None: + comp = self.model_components + scalar_order = max(self.interp_ord - 1, 0) + self._limiter.bezier_bound( + gfu.components[comp['k']], gfu.components[comp['k']].space, + scalar_order, (self.k_floor[0], 1e20)) + self._limiter.bezier_bound( + gfu.components[comp['epsilon']], + gfu.components[comp['epsilon']].space, + scalar_order, (self.epsilon_floor[0], 1e20)) + super().update_linearization(gfu) + self.UIter.vec.data = gfu.vec + if self._wallf is not None: + self._wallf.update( + self.UIter.components[self.model_components['u']]) diff --git a/opencmp/models/stokes.py b/opencmp/models/stokes.py index d54ce91..8761be0 100644 --- a/opencmp/models/stokes.py +++ b/opencmp/models/stokes.py @@ -31,7 +31,9 @@ class Stokes(INS): """ def _define_bc_types(self) -> List[str]: - return ['dirichlet', 'stress', 'pinned'] + # Accept NEUMANN sections in shared multiphysics BC files. Entries for + # variables not present in Stokes (for example k and epsilon) are ignored. + return ['dirichlet', 'stress', 'pinned', 'neumann'] def _post_init(self) -> None: # TODO: see if this override is still needed when transient tests are added diff --git a/pytests/full_system/k_epsilon/bc_dir/bc_config b/pytests/full_system/k_epsilon/bc_dir/bc_config new file mode 100644 index 0000000..1f27a9c --- /dev/null +++ b/pytests/full_system/k_epsilon/bc_dir/bc_config @@ -0,0 +1,13 @@ +[DIRICHLET] +u = top -> [0.0, 0.0] + bottom -> [0.0, 0.0] + right -> [0.0, 0.0] + left -> [0.0, 0.0] +k = top -> 0.001 + bottom -> 0.001 + right -> 0.001 + left -> 0.001 +epsilon = top -> 0.001 + bottom -> 0.001 + right -> 0.001 + left -> 0.001 diff --git a/pytests/full_system/k_epsilon/config b/pytests/full_system/k_epsilon/config new file mode 100644 index 0000000..6048795 --- /dev/null +++ b/pytests/full_system/k_epsilon/config @@ -0,0 +1,48 @@ +[MESH] +filename = pytests/mesh_files/coarse_large_square_4bcs.vol + +[DIM] +diffuse_interface_method = False + +[FINITE ELEMENT SPACE] +elements = u -> VectorH1 + p -> H1 + k -> H1 + epsilon -> H1 +interpolant_order = 2 + +[DG] +DG = False +interior_penalty_coefficient = 10.0 + +[SOLVER] +linear_solver = default +preconditioner = default +linearization_method = Oseen +nonlinear_solver = default +nonlinear_tolerance = relative -> 1e-6 + absolute -> 1e-10 +nonlinear_max_iterations = 5 +relaxation_factors = 1.0, 1.0, 1.0, 1.0 + +[TRANSIENT] +transient = True +scheme = implicit euler +time_range = 0.0, 0.001 +dt = 0.001 +dt_range = 1e-12, 0.001 +dt_tolerance = relative -> 1e-6 + absolute -> 1e-6 + +[VISUALIZATION] +save_to_file = False + +[ERROR ANALYSIS] +check_error = False + +[OTHER] +num_threads = 1 +model = KEpsilonINS +run_dir = pytests/full_system/k_epsilon +wall_function = False +slope_limiter = False diff --git a/pytests/full_system/k_epsilon/ic_dir/ic_config b/pytests/full_system/k_epsilon/ic_dir/ic_config new file mode 100644 index 0000000..0e45816 --- /dev/null +++ b/pytests/full_system/k_epsilon/ic_dir/ic_config @@ -0,0 +1,5 @@ +[KEpsilonINS] +u = all -> [0.0, 0.0] +p = all -> 0.0 +k = all -> 0.001 +epsilon = all -> 0.001 diff --git a/pytests/full_system/k_epsilon/model_dir/model_config b/pytests/full_system/k_epsilon/model_dir/model_config new file mode 100644 index 0000000..abe01af --- /dev/null +++ b/pytests/full_system/k_epsilon/model_dir/model_config @@ -0,0 +1,22 @@ +[PARAMETERS] +kinematic_viscosity = all -> 1.0 +c_mu = all -> 0.09 +c_1 = all -> 1.44 +c_2 = all -> 1.92 +sigma_k = all -> 1.0 +sigma_epsilon = all -> 1.3 +k_floor = all -> 1e-10 +epsilon_floor = all -> 1e-10 +max_viscosity_ratio = all -> 1e5 +production_limit_coefficient = all -> 10.0 +; Only read when wall_function = True. +density = all -> 1.0 +kappa = all -> 0.41 +e_log = all -> 9.8 + +[FUNCTIONS] +; A body force, so the no-slip cavity has a non-trivial flow and the wall +; function sees real shear. The smoke tests do not check against a reference. +source = u -> [1.0, 0.0] + k -> 0.0 + epsilon -> 0.0 diff --git a/pytests/full_system/k_epsilon/ref_sol_dir/ref_sol_config b/pytests/full_system/k_epsilon/ref_sol_dir/ref_sol_config new file mode 100644 index 0000000..b0ece3e --- /dev/null +++ b/pytests/full_system/k_epsilon/ref_sol_dir/ref_sol_config @@ -0,0 +1,3 @@ +[REFERENCE SOLUTIONS] + +[METRICS] diff --git a/pytests/full_system/k_epsilon/test_k_epsilon_full_system.py b/pytests/full_system/k_epsilon/test_k_epsilon_full_system.py new file mode 100644 index 0000000..10dec72 --- /dev/null +++ b/pytests/full_system/k_epsilon/test_k_epsilon_full_system.py @@ -0,0 +1,35 @@ +"""Full-system smoke coverage for the single-phase k-epsilon model.""" + +from opencmp.config_functions import ConfigParser +from opencmp.helpers.testing import run_example + + +def test_transient_cg_smoke() -> None: + config = ConfigParser('pytests/full_system/k_epsilon/config') + run_example(config) + + +def test_transient_dg_smoke() -> None: + config = ConfigParser('pytests/full_system/k_epsilon/config') + config['DG']['DG'] = 'True' + config['FINITE ELEMENT SPACE']['elements'] = ( + 'u -> HDiv\n' + 'p -> L2\n' + 'k -> L2\n' + 'epsilon -> L2' + ) + run_example(config) + + +def test_wall_function_smoke() -> None: + config = ConfigParser('pytests/full_system/k_epsilon/config') + config['DG']['DG'] = 'True' + config['FINITE ELEMENT SPACE']['elements'] = ( + 'u -> HDiv\n' + 'p -> L2\n' + 'k -> L2\n' + 'epsilon -> L2' + ) + config['OTHER']['wall_function'] = 'True' + config['OTHER']['wall_boundary'] = 'bottom' + run_example(config) diff --git a/pytests/helpers/test_k_epsilon_wall_func.py b/pytests/helpers/test_k_epsilon_wall_func.py new file mode 100644 index 0000000..844107f --- /dev/null +++ b/pytests/helpers/test_k_epsilon_wall_func.py @@ -0,0 +1,382 @@ +"""Tests for the geometry-independent k-epsilon wall function. + +The point of ``KEpsilonWallFunction`` is that it needs no cylinder radius and no +hand-labelled near-wall/core materials, so most of these tests check that the +near-wall layer, the wall distance and the wall shear come out right on meshes +that carry none of that information. +""" + +import numpy as np +import ngsolve as ngs +import pytest + +from opencmp.helpers.wall_func import KEpsilonWallFunction + +SQUARE = 'pytests/mesh_files/unit_square_coarse.vol' +CHANNEL = 'pytests/mesh_files/channel_3bcs.vol' + +MU = 3.0 +RHO = 2.0 +NU = MU / RHO + + +def build(mesh, wall='bottom', **kwargs): + return KEpsilonWallFunction(mesh, mu=MU, rho=RHO, nu=NU, C_mu=0.09, + kappa=0.41, E=9.8, wall_boundary=wall, **kwargs) + + +def marked_element_numbers(wf): + """Element numbers of the marked cells, via the space's element->DOF map. + + Deliberately does not assume DOF number == element number. + """ + values = wf.mask.vec.FV().NumPy() + return {el.nr for el in wf._fes0.Elements(ngs.VOL) + if any(values[dof] > 0.5 for dof in el.dofs)} + + +def elements_owning_a_facet_on(mesh, wall): + """Ground truth: an element owns a wall facet when at least ``dim`` of its + vertices lie on that boundary (``dim - 1`` vertices is a vertex/edge touch).""" + wall_vertices = set() + for sel in mesh.Elements(ngs.BND): + if sel.mat == wall: + wall_vertices.update(v.nr for v in sel.vertices) + return {el.nr for el in mesh.Elements(ngs.VOL) + if sum(1 for v in el.vertices if v.nr in wall_vertices) >= mesh.dim} + + +def add_one_face_connected_layer(mesh, element_numbers): + """Ground truth for one topological dilation through volume-cell facets.""" + elements = list(mesh.Elements(ngs.VOL)) + facet_to_elements = {} + element_by_number = {element.nr: element for element in elements} + for element in elements: + for facet in element.facets: + facet_to_elements.setdefault(facet.nr, set()).add(element.nr) + + expanded = set(element_numbers) + for element_number in element_numbers: + for facet in element_by_number[element_number].facets: + expanded.update(facet_to_elements[facet.nr]) + return expanded + + +# ---------------------------------------------------------------------- +# Topology: the near-wall mask +# ---------------------------------------------------------------------- + +@pytest.mark.parametrize('meshfile, wall', [(SQUARE, 'bottom'), (CHANNEL, 'wall')]) +def test_mask_includes_wall_cells_and_one_face_connected_layer(meshfile, wall): + mesh = ngs.Mesh(meshfile) + wf = build(mesh, wall) + wall_cells = elements_owning_a_facet_on(mesh, wall) + expected = add_one_face_connected_layer(mesh, wall_cells) + assert marked_element_numbers(wf) == expected + + +def test_first_cell_mask_matches_the_full_expanded_wall_layer(): + mesh = ngs.Mesh(CHANNEL) + wf = build(mesh, 'wall') + values = wf.first_cell_mask().vec.FV().NumPy() + actual = {element.nr for element in wf._fes0.Elements(ngs.VOL) + if any(values[dof] > 0.5 for dof in element.dofs)} + wall_cells = elements_owning_a_facet_on(mesh, 'wall') + assert actual == add_one_face_connected_layer(mesh, wall_cells) + + +def test_wall_facet_mask_retains_the_true_boundary_owners(): + mesh = ngs.Mesh(CHANNEL) + wf = build(mesh, 'wall') + values = wf.wall_facet_mask().vec.FV().NumPy() + actual = {element.nr for element in wf._fes0.Elements(ngs.VOL) + if any(values[dof] > 0.5 for dof in element.dofs)} + assert actual == elements_owning_a_facet_on(mesh, 'wall') + + +def test_mask_is_not_empty_and_is_a_strict_subset(): + mesh = ngs.Mesh(CHANNEL) + wf = build(mesh, 'wall') + marked = marked_element_numbers(wf) + assert 0 < len(marked) < mesh.ne + + +def test_wall_measure_sums_to_the_exact_boundary_measure(): + """Every wall facet is attributed to exactly one cell -- no double counting, + none dropped.""" + mesh = ngs.Mesh(CHANNEL) + wf = build(mesh, 'wall') + exact = ngs.Integrate(ngs.CoefficientFunction(1.0), mesh, + definedon=mesh.Boundaries('wall')) + assert wf._wall_measure.sum() == pytest.approx(exact, rel=1e-12) + + +def test_cell_touching_the_wall_only_at_a_vertex_is_not_marked(): + """A vertex-only touch is excluded unless it shares a facet with layer one.""" + mesh = ngs.Mesh(SQUARE) + wf = build(mesh, 'bottom') + marked = marked_element_numbers(wf) + + bottom_vertices = set() + for sel in mesh.Elements(ngs.BND): + if sel.mat == 'bottom': + bottom_vertices.update(v.nr for v in sel.vertices) + + vertex_only = {el.nr for el in mesh.Elements(ngs.VOL) + if sum(1 for v in el.vertices if v.nr in bottom_vertices) == 1} + assert vertex_only, 'mesh exercises no vertex-only touch; test is vacuous' + wall_cells = elements_owning_a_facet_on(mesh, 'bottom') + expected = add_one_face_connected_layer(mesh, wall_cells) + assert vertex_only & marked == vertex_only & expected + + +def test_missing_wall_marker_raises_a_clear_error(): + mesh = ngs.Mesh(SQUARE) + with pytest.raises(ValueError, match='no boundary elements'): + build(mesh, 'not_a_boundary') + + +# ---------------------------------------------------------------------- +# Wall distance +# ---------------------------------------------------------------------- + +def test_wall_distance_is_zero_on_the_wall_and_grows_inward(): + mesh = ngs.Mesh(SQUARE) + wf = build(mesh, 'bottom') + dist = wf.wall_distance_field() + + assert abs(dist(mesh(0.5, 0.0))) < 1e-8 + samples = [dist(mesh(0.5, y)) for y in (0.1, 0.3, 0.6, 0.9)] + assert all(b > a for a, b in zip(samples, samples[1:])) + assert samples[0] == pytest.approx(0.1, abs=0.05) + + +def test_epsilon_wall_uses_high_re_equilibrium_relation(): + mesh = ngs.Mesh(SQUARE) + wf = build(mesh, 'bottom') + k = 0.4 + epsilon = ngs.GridFunction(wf._fes0) + epsilon.Set(wf.epsilon_wall_cell(ngs.CoefficientFunction(k))) + distance = wf._epsilon_dist_cell.vec.FV().NumPy() + expected = 0.09 ** 0.75 * k ** 1.5 / (0.41 * distance) + assert epsilon.vec.FV().NumPy() == pytest.approx(expected, rel=1e-9) + + +def test_marked_cells_are_the_closest_cells_to_the_wall(): + mesh = ngs.Mesh(CHANNEL) + wf = build(mesh, 'wall') + dist = wf.wall_distance_cell().vec.FV().NumPy() + marked = wf.mask.vec.FV().NumPy() > 0.5 + assert dist[marked].max() < dist[~marked].max() + + +# ---------------------------------------------------------------------- +# Tangential traction +# ---------------------------------------------------------------------- + +def set_velocity(mesh, cf): + gfu = ngs.GridFunction(ngs.VectorH1(mesh, order=2)) + gfu.Set(cf) + return gfu + + +def tau_on_marked(wf): + values = wf.tau_cell.vec.FV().NumPy() + return values[wf.first_cell_mask().vec.FV().NumPy() > 0.5] + + +def test_manufactured_tangential_traction_gives_its_known_magnitude(): + """u = (y, 0) on the y = 0 wall: sigma_xy = mu * du_x/dy = mu, purely + tangential, so tau_wall == mu.""" + mesh = ngs.Mesh(SQUARE) + wf = build(mesh, 'bottom') + wf.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.y, 0.0)))) + assert tau_on_marked(wf) == pytest.approx(MU, rel=1e-9) + + +def test_pure_normal_traction_gives_zero_tangential_shear(): + """u = (x, -y) is divergence free with traction purely normal on a flat + y = 0 wall, so the tangential projection must annihilate it.""" + mesh = ngs.Mesh(SQUARE) + wf = build(mesh, 'bottom') + wf.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.x, -ngs.y)))) + assert tau_on_marked(wf).max() < 1e-9 + + +def test_normal_traction_does_not_leak_into_the_shear(): + """Superposing a normal-traction field on a shear field must leave tau + unchanged -- this is what the legacy |sigma.n| got wrong.""" + mesh = ngs.Mesh(SQUARE) + wf = build(mesh, 'bottom') + + wf.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.y, 0.0)))) + shear_only = tau_on_marked(wf).copy() + + wf.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.y + ngs.x, -ngs.y)))) + combined = tau_on_marked(wf) + + assert combined == pytest.approx(shear_only, rel=1e-9) + + +def test_shear_is_invariant_under_rotation_of_wall_and_velocity(): + """The whole point of the change: rotate the geometry and the velocity field + together and the wall shear is unchanged. The legacy x-binning could not do + this. 'left' is the y-axis wall; u = (0, x) shears along it exactly as + u = (y, 0) shears along 'bottom'.""" + mesh = ngs.Mesh(SQUARE) + + horizontal = build(mesh, 'bottom') + horizontal.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.y, 0.0)))) + + rotated = build(mesh, 'left') + rotated.update(set_velocity(mesh, ngs.CoefficientFunction((0.0, ngs.x)))) + + assert tau_on_marked(horizontal) == pytest.approx(MU, rel=1e-9) + assert tau_on_marked(rotated) == pytest.approx(MU, rel=1e-9) + + +def test_tau_is_floored_positive_before_the_first_update(): + """eval_nu_t must be safe (sqrt, log) even if update() has not run.""" + mesh = ngs.Mesh(SQUARE) + wf = build(mesh, 'bottom') + assert wf.tau_cell.vec.FV().NumPy().min() > 0.0 + + +def test_zero_velocity_keeps_tau_positive(): + mesh = ngs.Mesh(SQUARE) + wf = build(mesh, 'bottom') + wf.update(set_velocity(mesh, ngs.CoefficientFunction((0.0, 0.0)))) + assert wf.tau_cell.vec.FV().NumPy().min() > 0.0 + + +# ---------------------------------------------------------------------- +# Viscosity selection +# ---------------------------------------------------------------------- + +def force_yplus(wf, target): + """Return cellwise k values that give target y+ on every marked cell.""" + dist = wf.wall_distance_cell().vec.FV().NumPy() + marked = wf.mask.vec.FV().NumPy() > 0.5 + k = ngs.GridFunction(wf._fes0) + values = k.vec.FV().NumPy() + values[:] = 1.0 + values[marked] = (target * NU / (wf.C_mu ** 0.25 * dist[marked])) ** 2 + return marked, k + + +def sample_nu_t(wf, mesh, k, eps): + """nu_t as a cellwise array, via an L2(0) projection.""" + K = ngs.CoefficientFunction(k) + E = ngs.CoefficientFunction(eps) + out = ngs.GridFunction(wf._fes0) + out.Set(wf.eval_nu_t(K, E)) + return out.vec.FV().NumPy() + + +def test_compiled_viscosity_matches_symbolic_viscosity(): + mesh = ngs.Mesh(CHANNEL) + wf = build(mesh, 'wall') + _, k = force_yplus(wf, 50.0) + epsilon = ngs.CoefficientFunction(1.0) + symbolic = wf.eval_nu_t(k, epsilon) + compiled = symbolic.Compile() + symbolic_values = ngs.GridFunction(wf._fes0) + compiled_values = ngs.GridFunction(wf._fes0) + symbolic_values.Set(symbolic) + compiled_values.Set(compiled) + + assert compiled_values.vec.FV().NumPy() == pytest.approx( + symbolic_values.vec.FV().NumPy(), rel=1e-12, abs=1e-12) + + +@pytest.fixture +def channel_wf(): + mesh = ngs.Mesh(CHANNEL) + return mesh, build(mesh, 'wall') + + +def test_low_yplus_selects_zero_wall_viscosity(channel_wf): + mesh, wf = channel_wf + marked, k = force_yplus(wf, 5.0) # below 11.25 + nu_t = sample_nu_t(wf, mesh, k=k, eps=1.0) + assert nu_t[marked] == pytest.approx(0.0, abs=1e-12) + + +def test_log_range_yplus_selects_the_log_law(channel_wf): + mesh, wf = channel_wf + yplus = 50.0 + marked, k = force_yplus(wf, yplus) + nu_t = sample_nu_t(wf, mesh, k=k, eps=1.0) + expected = NU * (0.41 * yplus - 1) + assert expected > 0 + assert nu_t[marked] == pytest.approx(expected, rel=1e-6) + + +@pytest.mark.parametrize('threshold', [11.25, 30.0]) +def test_wall_viscosity_is_continuous_at_transition_thresholds(channel_wf, threshold): + mesh, wf = channel_wf + samples = [] + for yplus in (threshold - 1e-5, threshold + 1e-5): + marked, k = force_yplus(wf, yplus) + values = sample_nu_t(wf, mesh, k=k, eps=wf.epsilon_wall_cell(k)) + samples.append(values[marked]) + + scale = np.maximum(np.maximum(np.abs(samples[0]), np.abs(samples[1])), 1.0) + assert np.max(np.abs(samples[1] - samples[0]) / scale) < 1e-4 + + +def test_high_yplus_remains_on_wall_law_inside_the_mask(channel_wf): + mesh, wf = channel_wf + yplus = 500.0 + marked, k = force_yplus(wf, yplus) + eps = 2.5 + nu_t = sample_nu_t(wf, mesh, k=k, eps=eps) + expected = NU * (0.41 * yplus - 1.0) + assert nu_t[marked] == pytest.approx(expected, rel=1e-6) + + +def test_unmarked_cells_use_bulk_even_when_their_yplus_is_low(channel_wf): + """Cells outside the expanded wall layer use bulk k-epsilon regardless of y+.""" + mesh, wf = channel_wf + marked, k = force_yplus(wf, 5.0) # wall term would be 0 + k.vec.FV().NumPy()[~marked] = 1e-12 # also low y+ outside mask + eps = 2.5 + nu_t = sample_nu_t(wf, mesh, k=k, eps=eps) + + kvals = k.vec.FV().NumPy() + bulk = 0.09 * kvals ** 2 / eps + assert nu_t[~marked] == pytest.approx(bulk[~marked], rel=1e-6) + assert nu_t[marked] == pytest.approx(0.0, abs=1e-12) # and the layer differs + + yplus = ngs.GridFunction(wf._fes0) + yplus.Set(wf.y_plus_cell(k)) + assert yplus.vec.FV().NumPy()[~marked].min() < 11.25, \ + 'no low-y+ unmarked cell; test is vacuous' + + +def test_bulk_viscosity_matches_the_plain_k_epsilon_formula(channel_wf): + mesh, wf = channel_wf + k, eps = 0.8, 1.3 + nu_t = sample_nu_t(wf, mesh, k=k, eps=eps) + marked = wf.mask.vec.FV().NumPy() > 0.5 + assert nu_t[~marked] == pytest.approx(0.09 * k ** 2 / eps, rel=1e-6) + + +def test_negative_viscosity_is_clamped_to_zero(channel_wf): + mesh, wf = channel_wf + nu_t = sample_nu_t(wf, mesh, k=1.0, eps=-1.0) # negative bulk + assert nu_t.min() >= 0.0 + + +# ---------------------------------------------------------------------- +# Geometry independence +# ---------------------------------------------------------------------- + +def test_runs_on_a_mesh_with_no_named_regions_or_cylinder_radius(): + """channel_3bcs has a single 'default' material and no near-wall/core + labelling; the legacy class could not have been built on it.""" + mesh = ngs.Mesh(CHANNEL) + assert set(mesh.GetMaterials()) == {'default'} + wf = build(mesh, 'wall') + wf.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.y * (1 - ngs.y), 0.0)))) + assert wf.tau_cell.vec.FV().NumPy().max() > 0 diff --git a/pytests/models/test_k_epsilon.py b/pytests/models/test_k_epsilon.py new file mode 100644 index 0000000..f3f42c9 --- /dev/null +++ b/pytests/models/test_k_epsilon.py @@ -0,0 +1,92 @@ +"""Structural regression tests for the k-epsilon INS model.""" + +from opencmp.models import KEpsilonINS, models_dict +from opencmp.models.ins import INS + + +def test_k_epsilon_ins_is_registered_as_an_ins_model() -> None: + assert models_dict['KEpsilonINS'] is KEpsilonINS + assert issubclass(KEpsilonINS, INS) + + +def test_k_epsilon_ins_component_contract() -> None: + model = object.__new__(KEpsilonINS) + + assert model._define_model_components() == { + 'u': 0, + 'p': 1, + 'k': 2, + 'epsilon': 3, + } + assert model._define_time_derivative_components() == [{ + 'u': True, + 'p': False, + 'k': True, + 'epsilon': True, + }] + + +def test_k_epsilon_supports_scalar_neumann_boundaries() -> None: + model = object.__new__(KEpsilonINS) + + assert 'neumann' in model._define_bc_types() + + +def test_k_epsilon_slope_limiter_is_disabled_by_default() -> None: + class EmptyConfig: + def get_item(self, *_args, **_kwargs): + raise KeyError + + model = object.__new__(KEpsilonINS) + model.config = EmptyConfig() + model._pre_init() + + assert model.slope_limiter is False + + +def test_k_epsilon_slope_limiter_can_be_enabled_explicitly() -> None: + class SlopeLimiterConfig: + def get_item(self, keys, *_args, **_kwargs): + if keys == ['OTHER', 'slope_limiter']: + return True + raise KeyError + + model = object.__new__(KEpsilonINS) + model.config = SlopeLimiterConfig() + model._pre_init() + + assert model.slope_limiter is True + + +def test_k_epsilon_reuses_cached_turbulent_viscosity() -> None: + model = object.__new__(KEpsilonINS) + cached_viscosity = object() + model._turbulent_viscosity = [cached_viscosity] + + assert model._get_turbulent_viscosity(0) is cached_viscosity + + +def test_epsilon_wall_target_is_change_limited_and_relaxed() -> None: + value, limited = KEpsilonINS._relax_epsilon_wall_value( + raw_target=10.0, previous=1.0, relaxation=0.15, + change_factor=2.0) + + assert limited is True + assert value == 1.15 + + +def test_epsilon_wall_target_accepts_unlimited_change() -> None: + value, limited = KEpsilonINS._relax_epsilon_wall_value( + raw_target=1.5, previous=1.0, relaxation=0.2, + change_factor=2.0) + + assert limited is False + assert value == 1.1 + + +def test_ins_viscosity_hook_preserves_laminar_behavior() -> None: + model = object.__new__(INS) + model.kv = [1.25, 2.5] + + assert model._get_kinematic_viscosity(0) == 1.25 + assert model._get_kinematic_viscosity(1) == 2.5 From e84cfff3ef6cedf47d71813a7dea24e820cf38ec Mon Sep 17 00:00:00 2001 From: arshiiyyaa Date: Sat, 8 Aug 2026 14:51:37 -0400 Subject: [PATCH 2/8] Add DG bound-preserving limiters P1 vertex-based scaling and Bernstein/Bezier limiters for L2 DG scalar fields. --- opencmp/helpers/limiter.py | 310 +++---------------------------------- 1 file changed, 23 insertions(+), 287 deletions(-) diff --git a/opencmp/helpers/limiter.py b/opencmp/helpers/limiter.py index 7ad7332..312f745 100644 --- a/opencmp/helpers/limiter.py +++ b/opencmp/helpers/limiter.py @@ -16,14 +16,12 @@ ######################################################################################################################## """ -Slope / bound-preserving limiters for L2 DG scalar GridFunctions. Provides: - - - bound_limiter_Joshaghani : vertex-based scaling limiter (P1 Dunbar basis) - - barth_jespersen : Barth-Jespersen / Venkatakrishnan (any order) - - kuzmin : Kuzmin (2010) vertex-based (any order) - - bezier_bound : Bernstein/Bezier maximum-principle-preserving - limiter -- GUARANTEES the per-element polynomial - stays in bounds everywhere (any order). +Bound-preserving scaling limiters for L2 DG scalar GridFunctions. Provides: + + - p1_vertex_bound : vertex-based scaling limiter (P1 Dunbar basis) + - bezier_bound : Bernstein/Bezier maximum-principle-preserving limiter -- + GUARANTEES the per-element polynomial stays in bounds + everywhere (any order). """ import ngsolve as ngs @@ -33,40 +31,27 @@ class Limiter: def __init__(self, mesh): self.mesh = mesh - self._slope_cache = {} # (id(fes), order, kind) -> built slope limiter + self._bezier_cache = {} # (id(fes), order) -> built BezierBoundLimiter - # ── Vertex-based / Barth-Jespersen slope limiters ─────────────────────────── - # Thin accessors over BJLimiter2D / KuzminLimiter2D (defined below). The built - # limiter precomputes eval matrices + adjacency tables, so it is cached and - # reused across calls — keep the Limiter instance alive to avoid rebuilding. + # ── Bezier bound limiter ───────────────────────────────────────────────── + # Thin accessor over BezierBoundLimiter (defined below). The built limiter + # precomputes its change-of-basis matrix, so it is cached and reused across + # calls -- keep the Limiter instance alive to avoid rebuilding. - def _slope_limiter(self, kind, fes, order): - key = (id(fes), order, kind) - lim = self._slope_cache.get(key) + def _bezier_limiter(self, fes, order): + key = (id(fes), order) + lim = self._bezier_cache.get(key) if lim is None: - cls = {"bj": BJLimiter2D, "kuzmin": KuzminLimiter2D, - "bezier": BezierBoundLimiter}[kind] - lim = cls(self.mesh, fes, order) - self._slope_cache[key] = lim + lim = BezierBoundLimiter(self.mesh, fes, order) + self._bezier_cache[key] = lim return lim - def barth_jespersen(self, gfu, fes, order, bounds=(0.0, 1.0), **kwargs): - '''Barth-Jespersen / Venkatakrishnan slope limiter (TRIG/TET, any order). - Returns number of modified elements. See BJLimiter2D.apply for kwargs - (use_indicator, indicator_threshold, venkat_eps).''' - return self._slope_limiter("bj", fes, order).apply(gfu, bounds, **kwargs) - def bezier_bound(self, gfu, fes, order, bounds=(0.0, 1.0)): '''Bound-preserving scaling limiter via the Bernstein/Bezier convex-hull property. Unlike node-sampling limiters, this GUARANTEES the per-element polynomial stays in `bounds` everywhere (no between-node leakage). Returns number of modified elements.''' - return self._slope_limiter("bezier", fes, order).apply(gfu, bounds) - - def kuzmin(self, gfu, fes, order, bounds=(0.0, 1.0)): - '''Kuzmin (2010) vertex-based slope limiter (TRIG/TET, any order). - Less diffusive than BJ. Returns number of modified elements.''' - return self._slope_limiter("kuzmin", fes, order).apply(gfu, bounds) + return self._bezier_limiter(fes, order).apply(gfu, bounds) def ref_element_vertices_val(self, gfu: ngs.GridFunction, vertices: np.ndarray, element_index: int, element_type: str) -> np.ndarray: @@ -104,10 +89,11 @@ def vertices_gfu_val(self, gfu: ngs.GridFunction, element_type: str = "TRIG") -> return gfu_vertices_val - def bound_limiter_Joshaghani(self, gfu: ngs.GridFunction, bounds: tuple) -> None: + def p1_vertex_bound(self, gfu: ngs.GridFunction, bounds: tuple) -> None: ''' - Scales the grid function within each element if the max/min value at the mesh cell violates the - upper/lower bound. (P1 Dunbar reconstruction — prefer bezier_bound for order >= 2.) + Vertex-based scaling limiter for P1 fields: scales the grid function within each + element if the max/min value at the mesh cell violates the upper/lower bound. + (P1 Dunbar reconstruction -- prefer bezier_bound for order >= 2.) ''' (r1, r2) = bounds # lower and upper bounds if self.mesh.dim == 2: @@ -137,7 +123,7 @@ def bound_limiter_Joshaghani(self, gfu: ngs.GridFunction, bounds: tuple) -> None gfu.vec[nn + k] = theta[i] * gfu.vec[nn + k] -# ── Vertex-based slope limiters ────────────────────────────────────────────── +# ── Reference-element evaluation helpers ───────────────────────────────────── def _ndof_el(order: int, dim: int) -> int: @@ -163,26 +149,6 @@ def _lagrange_nodes(p: int, dim: int) -> np.ndarray: return np.array(nodes, dtype=float) -# Reference simplex vertices keyed by dimension -_VERTEX_NODES = { - 2: np.array([[0., 0.], [1., 0.], [0., 1.]]), - 3: np.array([[0., 0., 0.], [1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]), -} - - -def _vertex_clustered_nodes(dim: int, - fracs: tuple = (0.05, 0.12, 0.25)) -> np.ndarray: - """Extra check nodes packed near each reference-simplex vertex, where a - degree>=2 polynomial overshoots most. For every vertex, places points a - small fraction `t` of the way toward each other vertex and the centroid.""" - V = _VERTEX_NODES[dim] - targets = list(V) + [V.mean(axis=0)] # other vertices + centroid - pts = [v + t * (tgt - v) - for v in V for tgt in targets for t in fracs - if not np.allclose(v, tgt)] - return np.array(pts, dtype=float) - - def _build_eval_matrix_ngs(fes: ngs.FESpace, order: int, dim: int, nodes: np.ndarray = None) -> np.ndarray: """Build evaluation matrix via NGSolve's FiniteElement.CalcShape.""" @@ -243,236 +209,6 @@ def _build_eval_matrix(mesh, fes, order, dim, nodes=None): return _build_eval_matrix_gf(mesh, fes, order, dim, nodes) -# ── Neighbour tables ────────────────────────────────────────────────────────── - -def build_neighbor_table(mesh: ngs.Mesh) -> list: - """Face-adjacency by iteration index (0..ne-1). - - Two simplices share a face when they share dim vertices: - dim=2 (triangles): shared edge = 2 shared vertices - dim=3 (tets): shared face = 3 shared vertices - """ - dim = mesh.dim - el_list = list(mesh.Elements(ngs.VOL)) - v2e: dict = {} - for idx, el in enumerate(el_list): - for v in el.vertices: - v2e.setdefault(v.nr, []).append(idx) - - neighbors = [[] for _ in range(mesh.ne)] - for idx, el in enumerate(el_list): - shared: dict = {} - for v in el.vertices: - for nb_idx in v2e[v.nr]: - if nb_idx != idx: - shared[nb_idx] = shared.get(nb_idx, 0) + 1 - for nb_idx, cnt in shared.items(): - if cnt == dim: - neighbors[idx].append(nb_idx) - return neighbors - - -def build_vertex_star_table(mesh: ngs.Mesh) -> list: - """For each element, the list of elements sharing each of its vertices - (used by KuzminLimiter2D for per-vertex bounds). Works for any dimension.""" - el_list = list(mesh.Elements(ngs.VOL)) - v2e: dict = {} - for idx, el in enumerate(el_list): - for v in el.vertices: - v2e.setdefault(v.nr, []).append(idx) - return [[v2e[v.nr] for v in el.vertices] for el in el_list] - - -# ── BJ Limiter ──────────────────────────────────────────────────────────────── - -class BJLimiter2D: - """Barth-Jespersen slope limiter for NGSolve DG. - Works on triangular (2D) and tetrahedral (3D) meshes, any polynomial order. - """ - - def __init__(self, mesh: ngs.Mesh, fes: ngs.FESpace, order: int = 1): - self.mesh = mesh - self.order = order - self.dim = mesh.dim - self.ndof_el = _ndof_el(order, self.dim) - # Check nodes: uniform 2*order oversample + extra nodes clustered near - # vertices (where degree>=2 polynomials overshoot most). Dedup so the - # eval matrix stays small. - _check_nodes = np.vstack([ - _VERTEX_NODES[self.dim], - _lagrange_nodes(max(2 * order, 1), self.dim), - _vertex_clustered_nodes(self.dim), - ]) - _check_nodes = np.unique(np.round(_check_nodes, 12), axis=0) - self._eval_mat = _build_eval_matrix(mesh, fes, order, self.dim, - nodes=_check_nodes) - self.neighbors = build_neighbor_table(mesh) - self.dof_starts = np.array([ - fes.GetDofNrs(ngs.ElementId(ngs.VOL, i))[0] - for i in range(mesh.ne) - ], dtype=np.intp) - - def _cell_averages(self, gfu: ngs.GridFunction) -> np.ndarray: - return gfu.vec.FV().NumPy()[self.dof_starts].copy() - - def troubled_cells(self, u0: np.ndarray, threshold: float = 0.1) -> np.ndarray: - """Boolean mask: element i is troubled if the cell-average jump across - any face exceeds threshold × (global variation).""" - var = float(u0.max() - u0.min()) - if var < 1e-14: - return np.zeros(len(u0), dtype=bool) - thr = threshold * var - troubled = np.zeros(len(u0), dtype=bool) - for i, nbs in enumerate(self.neighbors): - if nbs and float(np.max(np.abs(u0[i] - u0[nbs]))) > thr: - troubled[i] = True - return troubled - - @staticmethod - def _theta(uv: float, ubar: float, u_bound: float, eps2: float) -> float: - """Per-node θ: standard BJ (eps2=0) or Venkatakrishnan smooth limiter.""" - b = uv - ubar - if abs(b) < 1e-14: - return 1.0 - a = u_bound - ubar - if a * b <= 0.0: - return 1.0 - if eps2 == 0.0: - return min(1.0, a / b) - return (a*a + 2.0*a*b + eps2) / (a*a + a*b + 2.0*b*b + eps2) - - def apply(self, gfu: ngs.GridFunction, - bounds: tuple = (0.0, 1.0), - use_indicator: bool = True, - indicator_threshold: float = 0.1, - venkat_eps: float = 0.0) -> int: - """Apply BJ / Venkatakrishnan limiter in-place. Returns number of modified elements. - - venkat_eps: 0.0 = standard BJ (hard), 0.3 = recommended smooth, 1.0 = very smooth. - """ - r1, r2 = bounds - nd = self.ndof_el - ne = self.mesh.ne - u0 = self._cell_averages(gfu) - vec = gfu.vec.FV().NumPy() - troubled = (self.troubled_cells(u0, indicator_threshold) - if use_indicator else np.ones(ne, dtype=bool)) - var = float(u0.max() - u0.min()) - eps2 = (venkat_eps * var) ** 2 - n_lim = 0 - - for i in range(ne): - base = self.dof_starts[i] - ū = u0[i] - - if ū < r1 or ū > r2: - vec[base] = float(np.clip(ū, r1, r2)) - vec[base + 1 : base + nd] = 0.0 - n_lim += 1 - continue - - dofs = vec[base : base + nd].copy() - u_nodes = self._eval_mat @ dofs - - theta = 1.0 - if troubled[i]: - nbs = self.neighbors[i] - if nbs: - nb_u0 = u0[nbs] - u_max = min(r2, max(ū, float(nb_u0.max()))) - u_min = max(r1, min(ū, float(nb_u0.min()))) - else: - u_max, u_min = float(r2), float(r1) - for uv in u_nodes: - if uv > ū + 1e-12: - theta = min(theta, self._theta(uv, ū, u_max, eps2)) - elif uv < ū - 1e-12: - theta = min(theta, self._theta(uv, ū, u_min, eps2)) - - # Hard global bound — applied to all cells - theta_gb = 1.0 - for uv in u_nodes: - if uv > r2 + 1e-12 and uv > ū + 1e-12: - theta_gb = min(theta_gb, (r2 - ū) / (uv - ū)) - elif uv < r1 - 1e-12 and uv < ū - 1e-12: - theta_gb = min(theta_gb, (r1 - ū) / (uv - ū)) - theta_gb = max(0.0, min(1.0, theta_gb)) - theta = min(max(0.0, min(1.0, theta)), theta_gb) - - if theta < 1.0 - 1e-14: - vec[base + 1 : base + nd] *= theta - n_lim += 1 - - return n_lim - - -# ── Kuzmin Vertex-Based Limiter ─────────────────────────────────────────────── - -class KuzminLimiter2D: - """Kuzmin (2010) vertex-based slope limiter for NGSolve DG. - Works on triangular (2D) and tetrahedral (3D) meshes, any polynomial order. - - Less diffusive than BJ: bounds come from the wider vertex star and only - the simplex vertices (3 in 2D, 4 in 3D) are checked instead of all Lagrange nodes. - """ - - def __init__(self, mesh: ngs.Mesh, fes: ngs.FESpace, order: int = 1): - self.mesh = mesh - self.order = order - self.dim = mesh.dim - self.ndof_el = _ndof_el(order, self.dim) - self._vert_eval = _build_eval_matrix(mesh, fes, order, self.dim, - nodes=_VERTEX_NODES[self.dim]) - self.vertex_star = build_vertex_star_table(mesh) - self.dof_starts = np.array([ - fes.GetDofNrs(ngs.ElementId(ngs.VOL, i))[0] - for i in range(mesh.ne) - ], dtype=np.intp) - - def _cell_averages(self, gfu: ngs.GridFunction) -> np.ndarray: - return gfu.vec.FV().NumPy()[self.dof_starts].copy() - - def apply(self, gfu: ngs.GridFunction, - bounds: tuple = (0.0, 1.0)) -> int: - """Apply Kuzmin vertex-based limiter in-place. Returns number of modified elements.""" - r1, r2 = bounds - nd = self.ndof_el - ne = self.mesh.ne - u0 = self._cell_averages(gfu) - vec = gfu.vec.FV().NumPy() - n_lim = 0 - - for i in range(ne): - base = self.dof_starts[i] - ū = u0[i] - - if ū < r1 or ū > r2: - vec[base] = float(np.clip(ū, r1, r2)) - vec[base + 1 : base + nd] = 0.0 - n_lim += 1 - continue - - dofs = vec[base : base + nd].copy() - u_verts = self._vert_eval @ dofs # (3,) in 2D, (4,) in 3D - - theta = 1.0 - for j, uv in enumerate(u_verts): - star = self.vertex_star[i][j] - u_max_v = min(r2, float(u0[star].max())) - u_min_v = max(r1, float(u0[star].min())) - if uv > ū + 1e-12: - theta = min(theta, (u_max_v - ū) / (uv - ū)) - elif uv < ū - 1e-12: - theta = min(theta, (u_min_v - ū) / (uv - ū)) - - theta = max(0.0, min(1.0, theta)) - if theta < 1.0 - 1e-14: - vec[base + 1 : base + nd] *= theta - n_lim += 1 - - return n_lim - - # ── Bound-preserving Bezier/Bernstein limiter ───────────────────────────────── def _multiindices(p: int, n: int): @@ -508,7 +244,7 @@ class BezierBoundLimiter: theta computed from the Bernstein/Bezier ordinates. Because the polynomial lies within the convex hull of its ordinates, bounding the ordinates bounds the polynomial EVERYWHERE — not just at sample nodes (the failure mode of - BJ/Kuzmin on high-order, high-curvature near-wall cells).""" + node-sampling limiters on high-order, high-curvature near-wall cells).""" def __init__(self, mesh: ngs.Mesh, fes: ngs.FESpace, order: int = 1): self.mesh = mesh From 75dfe4dbb7a718510587e9114f4e73417aed951e Mon Sep 17 00:00:00 2001 From: arshiiyyaa Date: Sat, 8 Aug 2026 15:36:28 -0400 Subject: [PATCH 3/8] Add k-epsilon turbulence model Turbulent kinetic energy and dissipation transport, wall functions, and turbulent viscosity coupling with INS, with unit and full-system tests. --- opencmp/helpers/wall_func.py | 500 ++++++----------- opencmp/models/ins.py | 10 +- opencmp/models/k_epsilon.py | 519 +++++++++--------- opencmp/solvers/nonlinear_mixing.py | 19 +- pytests/full_system/k_epsilon/config | 1 - .../k_epsilon/model_dir/model_config | 3 - pytests/helpers/test_k_epsilon_wall_func.py | 274 +++++---- pytests/models/test_k_epsilon.py | 252 +++++++-- 8 files changed, 829 insertions(+), 749 deletions(-) diff --git a/opencmp/helpers/wall_func.py b/opencmp/helpers/wall_func.py index f648baf..a620620 100644 --- a/opencmp/helpers/wall_func.py +++ b/opencmp/helpers/wall_func.py @@ -15,300 +15,107 @@ # . # ######################################################################################################################## -""" -Wall-function eddy-viscosity model for the k-epsilon two-fluid turbulence -closure. Every physical constant and region/boundary name is passed in -through the constructor so the class carries no global state. -""" +"""Geometry-independent wall functions for the k-epsilon turbulence model.""" import numpy as np import ngsolve as ngs -from typing import Optional - -from .ngsolve_ import construct_identity_mat - - -class WallFunc: - """Law-of-the-wall blended turbulent viscosity. - - nu_t = bulk C_mu k^2/eps in the core region, replaced by a wall-function - value in the near-wall region. The wall-normal distance comes from a - regularized-Eikonal solve; the wall-function value needs the per-x - cross-section-averaged wall shear stress, refreshed each step via - ``update_tau_avg``. - """ - - def __init__(self, mesh: ngs.comp.Mesh, mu: float, rho: float, nu: float, - C_mu: float, kappa: float, E: float, - cylinder_r: Optional[float] = None, - wall_boundary: str = "wall", - nearwall_region: str = "nearwall", - core_region_2d: str = "surface", - core_region_3d: str = "vol", - n_xbins: int = 100, dist_order: int = 2, - dist_relax: float = 0.1) -> None: - self.mesh = mesh - self.mu = mu - self.rho = rho - self.nu = nu # laminar kinematic viscosity nu_c - self.C_mu = C_mu - self.kappa = kappa - self.E = E - self.cylinder_r = cylinder_r - self.wall_boundary = wall_boundary - self.nearwall_region = nearwall_region - self.core_region = core_region_2d if mesh.dim == 2 else core_region_3d - self.n_xbins = n_xbins - self.n = ngs.specialcf.normal(mesh.dim) - self.h = ngs.specialcf.mesh_size - self.IM = construct_identity_mat(mesh.dim) - - # Wall-distance field, solved once via the regularized Eikonal equation. - self._dist_gf = self._compute_distance_field(dist_order, dist_relax) - - # Per-cell wall-normal distance (cell average of y_normal). - self._dist_cell = ngs.GridFunction(ngs.L2(mesh, order=0)) - self._dist_cell.Set(self._dist_gf) - - # Domain bounds. cylinder_r remains accepted for compatibility with - # the original pipe model, but arbitrary cross-sections use the mesh - # bounds when no radius is supplied. - points = np.array([v.point for v in mesh.vertices], dtype=float) - xs = points[:, 0] - self.x_min, self.x_max = float(xs.min()), float(xs.max()) - self._domain_min = tuple(points.min(axis=0)) - self._domain_max = tuple(points.max(axis=0)) - - # tau_avg(x) placeholder, refreshed each step by update_tau_avg(). - self._tau_fes = ngs.H1(mesh, order=1) - self.tau_avg_gf = ngs.GridFunction(self._tau_fes) - self.tau_avg_gf.Set(ngs.CoefficientFunction(1e-12)) - - # (surface-element nr, x-centroid) for all wall facets, computed once. - self._wall_els = [ - (el.nr, float(np.mean([mesh.vertices[v.nr].point[0] for v in el.vertices]))) - for el in mesh.Elements(ngs.BND) if el.mat == wall_boundary - ] - if not self._wall_els: - raise ValueError( - f"WallFunc: boundary marker '{wall_boundary}' has no boundary elements.") - - def _compute_distance_field(self, order: int, relax: float) -> ngs.GridFunction: - """Distance to the "wall" boundary via the regularized Eikonal equation - |grad(y)| = 1 with y = 0 on the wall. Poisson warm start, then Newton.""" - eps = relax * self.h - fes = ngs.H1(self.mesh, order=order, dirichlet=self.wall_boundary) - u, v = fes.TnT() - y = ngs.GridFunction(fes) - - a = ngs.BilinearForm(fes) - a += ngs.grad(u) * ngs.grad(v) * ngs.dx - f = ngs.LinearForm(fes) - f += 1.0 * v * ngs.dx - a.Assemble(); f.Assemble() - y.vec.data = a.mat.Inverse(fes.FreeDofs()) * f.vec - - gu = ngs.grad(u) - F = ngs.BilinearForm(fes) - F += (ngs.sqrt(gu * gu + 1e-12) * v - 1.0 * v + eps * gu * ngs.grad(v)) * ngs.dx - ngs.solvers.Newton(F, y, printing=False) - return y - - def y_normal(self) -> ngs.CoefficientFunction: - return self._dist_gf - - def wall_distance_cell(self) -> ngs.GridFunction: - return self._dist_cell - - def _tau_norm_cf(self, U) -> ngs.CoefficientFunction: - """|tau . n| on the wall (boundary-only CF).""" - tau = self.mu * (ngs.grad(U) + ngs.grad(U).trans - 2 / 3 * ngs.div(U) * self.IM) - tau_n = ngs.BoundaryFromVolumeCF(tau) * self.n - return ngs.sqrt(ngs.InnerProduct(tau_n, tau_n)) - - def update_tau_avg(self, U) -> None: - """Recompute the cross-section-averaged wall shear stress tau_avg(x) and - store it in self.tau_avg_gf. Call once per Picard iteration, BEFORE nu_t - is evaluated. Bins wall facets by x-centroid -> length-weighted average, - then extends into the volume as a function of x via VoxelCoefficient.""" - wall_region = self.mesh.Boundaries(self.wall_boundary) - tau_el = ngs.Integrate(self._tau_norm_cf(U), self.mesh, - definedon=wall_region, element_wise=True) - len_el = ngs.Integrate(ngs.CoefficientFunction(1.0), self.mesh, - definedon=wall_region, element_wise=True) - - edges = np.linspace(self.x_min, self.x_max, self.n_xbins + 1) - num = np.zeros(self.n_xbins) - den = np.zeros(self.n_xbins) - for nr, xc in self._wall_els: - i = int(np.clip(np.searchsorted(edges, xc) - 1, 0, self.n_xbins - 1)) - num[i] += tau_el[nr] - den[i] += len_el[nr] - - centers = 0.5 * (edges[:-1] + edges[1:]) - ok = den > 0 - tau_x = np.interp(centers, centers[ok], num[ok] / den[ok]) - tau_x = np.maximum(tau_x, 1e-12) - - # VoxelCoefficient expects x as the LAST (fastest) index. - if self.mesh.dim == 2: - vals = np.tile(tau_x, (2, 1)) - if self.cylinder_r is None: - start, end = self._domain_min, self._domain_max - else: - start = (self.x_min, -self.cylinder_r) - end = (self.x_max, self.cylinder_r) - else: - vals = np.tile(tau_x, (2, 2, 1)) - if self.cylinder_r is None: - start, end = self._domain_min, self._domain_max - else: - start = (self.x_min, -self.cylinder_r, -self.cylinder_r) - end = (self.x_max, self.cylinder_r, self.cylinder_r) - - self.tau_avg_gf.Set(ngs.VoxelCoefficient(start, end, vals, linear=True)) - - def evaluate_yplus(self, K: ngs.GridFunction, U) -> ngs.CoefficientFunction: - """y_plus = y_normal * u_t / nu, with u_t = sqrt(tau_avg(x) / rho).""" - u_t = ngs.sqrt(self.tau_avg_gf / self.rho) - return self.y_normal() * u_t / self.nu - - def eval_nu_wall_func(self, K: ngs.GridFunction, E, U) -> ngs.CoefficientFunction: - yplus = self.evaluate_yplus(K, U) - log = self.nu * (yplus / ((1 / self.kappa) * ngs.log(self.E * yplus)) - 1) - wall_function = ngs.IfPos((yplus - 11.25) * (200 - yplus), log, 0) - wf_final = ngs.IfPos(200 - yplus, wall_function, self.C_mu * K ** 2 / E) - return wf_final - - def eval_nu_t(self, K: ngs.GridFunction, E: ngs.GridFunction, U) -> ngs.CoefficientFunction: - wall_nu_t = self.eval_nu_wall_func(K, E, U) - nu_t_bulk = self.C_mu * K ** 2 / E - nu_t = self.mesh.MaterialCF( - {self.core_region: nu_t_bulk, self.nearwall_region: wall_nu_t}) - return ngs.IfPos(nu_t, nu_t, 0) # turbulent viscosity cannot be negative - - def eval_P_k(self, nu_t, U): - """Standard production term for turbulent kinetic energy.""" - P_k = 2 * (self.nu + nu_t) * ngs.InnerProduct( - ngs.grad(U), ngs.grad(U) + ngs.grad(U).trans - 2 / 3 * ngs.div(U) * self.IM) - return ngs.IfPos(P_k, P_k, 0) # production cannot be negative class KEpsilonWallFunction: - """Geometry-independent law-of-the-wall eddy viscosity for ``KEpsilonINS``. - - Numerical contract - ------------------ - * The near-wall region is *exactly one* layer of volume cells: those owning a - facet on ``wall_boundary``, found from mesh topology. No named near-wall or - core material regions, no cylinder radius, no axis-aligned binning. - * Wall shear is local and per-cell: the tangential viscous traction averaged - over that cell's own wall facet(s). Because the layer is one cell thick - every marked cell owns a wall facet, so no extension PDE is needed. - * ``update()`` must be called once per Picard iteration, BEFORE ``eval_nu_t``. - * Cells outside the mask *always* use bulk k-epsilon viscosity, whatever their - y+ happens to be. - - Limitations - ----------- - * y+ is solution dependent and is not validated at construction. If the first - cell layer sits outside the log-law's valid band, use :meth:`y_plus_cell` to - inspect it and adjust the wall-normal mesh size. - * The y+ distance comes from the Eikonal wall-distance field. The epsilon - wall condition separately uses half the local cell size as its first-cell - distance. - * Turbulence production and the epsilon wall condition are NOT handled here; - ``KEpsilonINS`` keeps ownership of both. - - All values are held on ``L2(mesh, order=0)`` and indexed by DOF, never by - element number -- the linear forms, the mask and the shear field share one DOF - numbering, so no element-to-DOF mapping is needed internally. + """Wall-layer eddy viscosity and dissipation for high-Re k-epsilon. + + The wall layer is found from mesh topology: cells owning a facet on + ``wall_boundary``, plus one face-connected neighbour layer. ``eval_nu_t`` + puts those cells on the wall law and every other cell on bulk + ``C_mu k^2/epsilon``. + + The friction velocity ``u_tau = C_mu**0.25 * sqrt(k)`` is a P0 projection + on the wall-facet owners, extended to their neighbours by arithmetic mean. + ``update`` refreshes it and must run once per Picard iteration, before + ``eval_nu_t``. + + Wall distance comes from a regularized-Eikonal solve: the continuous field + for coefficients integrated across a cell (``y_plus_field``, + ``eval_nu_wall``), and its cell average for per-cell quantities + (``y_plus_cell``, ``epsilon_wall_cell``). Turbulence production is not + handled here -- ``KEpsilonINS`` owns it. """ #: y+ below which the viscous sublayer is assumed (no wall eddy viscosity). YPLUS_VISCOUS = 11.25 - #: End of the smooth buffer-to-log-layer transition. - YPLUS_LOG_MIN = 30.0 - #: Smooth transition from the equilibrium wall law to bulk k-epsilon. - - def __init__(self, mesh: ngs.comp.Mesh, mu: float, rho: float, nu: float, - C_mu: float, kappa: float, E: float, - wall_boundary: str = "wall", - dist_order: int = 2, dist_relax: float = 0.1, - tau_floor: float = 1e-12) -> None: + #: y+ above which the log law stops applying and bulk k-epsilon takes over. + YPLUS_LOG_MAX = 200.0 + + def __init__(self, mesh: ngs.comp.Mesh, nu: float, C_mu: float, kappa: float, + E_log: float = 9.8, wall_boundary: str = "wall", + dist_order: int = 2, dist_relax: float = 0.1) -> None: self.mesh = mesh - self.mu = mu - self.rho = rho self.nu = nu # laminar kinematic viscosity self.C_mu = C_mu self.kappa = kappa - self.E = E + self.E_log = E_log # log-law roughness constant E self.wall_boundary = wall_boundary - self.tau_floor = tau_floor - - self.n = ngs.specialcf.normal(mesh.dim) self.h = ngs.specialcf.mesh_size - self.IM = construct_identity_mat(mesh.dim) - # Piecewise-constant space shared by the mask, the wall measure, the - # cell distance and the wall shear. + # Piecewise-constant space shared by the masks, the cell distance and u_tau. self._fes0 = ngs.L2(mesh, order=0) - # An L2 basis function has no boundary trace, so a plain ds() integral - # assembles to zero. skeleton=True evaluates the volume basis function - # on the facet, which is what puts the wall integral on the owning cell. - self._wall_ds = ngs.ds(definedon=mesh.Boundaries(wall_boundary), - skeleton=True) - - # Per-cell measure (length in 2D, area in 3D) of the cell's wall facets. - self._wall_measure = self._assemble_wall(ngs.CoefficientFunction(1.0)) - wall_marked = self._wall_measure > 0.0 - if not wall_marked.any(): - raise ValueError( - f"KEpsilonWallFunction: boundary marker '{wall_boundary}' has no " - f"boundary elements. Available boundaries: {mesh.GetBoundaries()}.") - # Keep the true wall-facet owners separate: wall shear and the algebraic - # boundary integral can be evaluated directly only on these cells. - self._marked = wall_marked - self.wall_facet_cell_mask = ngs.GridFunction(self._fes0) - self.wall_facet_cell_mask.vec.FV().NumPy()[:] = wall_marked.astype(float) - - # Wall-function viscosity mask: wall-facet owners plus one complete - # face-connected neighbour layer. This suppresses bulk-model production - # on cells immediately touching the wall layer across an interior facet. - marked = self._expand_by_one_facet_layer(wall_marked) - self.mask = ngs.GridFunction(self._fes0) - self.mask.vec.FV().NumPy()[:] = marked.astype(float) - self.wall_cell_mask = ngs.GridFunction(self._fes0) - self.wall_cell_mask.vec.FV().NumPy()[:] = marked.astype(float) + self._mark_wall_cells() - # Eikonal wall distance used by y+ and diagnostics, projected into the - # same piecewise-constant space as the mask and wall viscosity. self._dist_gf = self._compute_distance_field(dist_order, dist_relax) self._dist_cell = ngs.GridFunction(self._fes0) self._dist_cell.Set(self._dist_gf) + # y+ and epsilon_wall_cell both divide by this; guard against a Newton + # undershoot on a degenerate cell producing a negative distance. + distance = self._dist_cell.vec.FV().NumPy() + distance[:] = np.maximum(distance, 1e-12) - # The epsilon wall condition uses the first-cell approximation y_P=h/2, - # independently of the Eikonal distance used above. - self._epsilon_dist_cell = ngs.GridFunction(self._fes0) - self._epsilon_dist_cell.Set(0.5 * self.h) - - # Local wall shear, refreshed by update(). Floor everywhere until then so - # sqrt() and log() are safe if eval_nu_t runs before the first update. - self.tau_cell = ngs.GridFunction(self._fes0) - self.tau_cell.vec.FV().NumPy()[:] = tau_floor + # Zero until the first update(); eval_nu_t is then simply bulk everywhere. + self.u_tau_cell = ngs.GridFunction(self._fes0) # ------------------------------------------------------------------ # Construction helpers # ------------------------------------------------------------------ - def _assemble_wall(self, integrand: ngs.CoefficientFunction) -> np.ndarray: - """Integrate ``integrand`` over each cell's wall facets -> DOF-indexed array.""" - test = self._fes0.TestFunction() + def _mark_wall_cells(self) -> None: + """Find the wall layer from mesh topology. + + Sets ``_wall_measure``, ``_marked`` / ``wall_facet_cell_mask`` (the + wall-facet owners), and ``mask`` (those owners plus one neighbour + layer -- the region the wall law is applied on). + """ + # Assumes a simplicial mesh (one L2(0) DOF per cell). Quads/hexes parse + # but the resulting layer is untested, so refuse rather than go silently wrong. + element_types = {element.type for element in self.mesh.Elements(ngs.VOL)} + if not element_types <= {ngs.ET.TRIG, ngs.ET.TET}: + raise NotImplementedError( + 'KEpsilonWallFunction supports simplicial meshes only (TRIG in 2D, ' + f'TET in 3D); this mesh contains {sorted(t.name for t in element_types)}.') + + # An L2 basis function has no boundary trace, so plain ds() assembles to + # zero; skeleton=True evaluates it on the facet instead. lf = ngs.LinearForm(self._fes0) - lf += integrand * test * self._wall_ds + lf += self._fes0.TestFunction() * ngs.ds( + definedon=self.mesh.Boundaries(self.wall_boundary), skeleton=True) lf.Assemble() - return np.array(lf.vec).ravel() + self._wall_measure = np.array(lf.vec).ravel() + + # Wall-facet owners: the only cells where u_tau can be evaluated directly, + # and where the algebraic epsilon condition is anchored. + self._marked = self._wall_measure > 0.0 + if not self._marked.any(): + raise ValueError( + f"KEpsilonWallFunction: boundary marker '{self.wall_boundary}' has " + f"no boundary elements. Available boundaries: " + f"{self.mesh.GetBoundaries()}.") + self.wall_facet_cell_mask = ngs.GridFunction(self._fes0) + self.wall_facet_cell_mask.vec.FV().NumPy()[:] = self._marked.astype(float) + + # The extra neighbour layer suppresses bulk-model production on cells + # immediately touching the wall layer across an interior facet. + self.mask = ngs.GridFunction(self._fes0) + self.mask.vec.FV().NumPy()[:] = self._expand_by_one_facet_layer( + self._marked).astype(float) def _expand_by_one_facet_layer(self, wall_marked: np.ndarray) -> np.ndarray: """Add every volume cell sharing a facet with a wall-facet owner.""" @@ -372,58 +179,38 @@ def _compute_distance_field(self, order: int, relax: float) -> ngs.GridFunction: # Per-iteration update # ------------------------------------------------------------------ - def tau_wall_cf(self, U) -> ngs.CoefficientFunction: - """Magnitude of the *tangential* viscous traction on the wall. + def update(self, K) -> None: + """Refresh the friction velocity from the current k iterate. - ``t = sigma.n - n (sigma.n . n)`` removes the normal traction, which the - legacy ``|sigma.n|`` wrongly included. The normal's sign cancels. - """ - sigma = self.mu * (ngs.Grad(U) + ngs.Grad(U).trans - - 2 / 3 * ngs.div(U) * self.IM) - traction = ngs.BoundaryFromVolumeCF(sigma) * self.n - tangential = traction - self.n * ngs.InnerProduct(traction, self.n) - # +tau_floor**2 keeps the derivative of sqrt finite at zero traction. - return ngs.sqrt(ngs.InnerProduct(tangential, tangential) + self.tau_floor ** 2) - - def update(self, U) -> None: - """Refresh the per-cell wall shear. Call once per Picard iteration, - BEFORE ``eval_nu_t``. - - The facet integral is divided by the facet measure for true wall cells. - Its value is then propagated to the face-connected wall-layer cells; - cells connected to multiple wall owners receive their arithmetic mean. - - TODO: cells owning more than one wall facet (corners, and any cell with - two faces on a re-entrant wall) fall out of this as an area-weighted - aggregate of all their wall facets. That is a plausible value but it is - NOT validated -- the tests only cover one wall facet per cell. Validate - against a corner case before relying on it. + Call once per Picard iteration, BEFORE ``eval_nu_t``. """ - shear = self._assemble_wall(self.tau_wall_cf(U)) - tau = np.full_like(shear, self.tau_floor) - tau[self._marked] = np.maximum( - shear[self._marked] / self._wall_measure[self._marked], self.tau_floor) + projected = ngs.GridFunction(self._fes0) + projected.Set(K) + k_values = np.maximum(projected.vec.FV().NumPy(), 0.0) + + u_tau = np.zeros_like(k_values) + u_tau[self._marked] = self.C_mu ** 0.25 * np.sqrt(k_values[self._marked]) + + # A neighbour belongs to the same local wall-normal layer as its + # wall-facet source cell(s), so inherit their u_tau instead of + # recalculating it from the neighbour's independently varying k. for element_number, source_numbers in self._wall_layer_sources.items(): - source_values = [ - tau[self._element_dofs[source_number][0]] + inherited = float(np.mean([ + u_tau[self._element_dofs[source_number][0]] for source_number in source_numbers - ] - value = max(float(np.mean(source_values)), self.tau_floor) - tau[list(self._element_dofs[element_number])] = value - self.tau_cell.vec.FV().NumPy()[:] = tau + ])) + u_tau[list(self._element_dofs[element_number])] = inherited + + self.u_tau_cell.vec.FV().NumPy()[:] = u_tau # ------------------------------------------------------------------ # Diagnostics # ------------------------------------------------------------------ def near_wall_mask(self) -> ngs.GridFunction: - """1 on wall cells and their first face-connected neighbours.""" + """1 on wall-facet owners and their first face-connected neighbours.""" return self.mask - def first_cell_mask(self) -> ngs.GridFunction: - """1 on every cell treated as part of the expanded wall layer.""" - return self.wall_cell_mask - def wall_facet_mask(self) -> ngs.GridFunction: """1 only on cells owning a physical wall facet.""" return self.wall_facet_cell_mask @@ -432,68 +219,87 @@ def wall_distance_cell(self) -> ngs.GridFunction: return self._dist_cell def wall_distance_field(self) -> ngs.GridFunction: - """Continuous Eikonal wall-distance field used by y+.""" + """Continuous Eikonal wall-distance field.""" return self._dist_gf - def y_plus_cell(self, K) -> ngs.CoefficientFunction: - """Return cellwise y+ using the high-Re k-epsilon equilibrium relation. + def y_plus_cell(self, K=None) -> ngs.CoefficientFunction: + """Cellwise y+, from the cell-averaged wall distance.""" + if K is not None: + self.update(K) + return self._dist_cell * self.u_tau_cell / self.nu - The friction velocity is ``u_tau = C_mu**0.25 * sqrt(k)``. It therefore - depends on the current turbulent kinetic energy rather than the resolved - molecular traction, which is generally under-resolved on a wall-function - mesh. + def y_plus_field(self, K=None) -> ngs.CoefficientFunction: + """Pointwise y+, from the continuous Eikonal distance. + + Use this wherever y+ feeds a coefficient the weak form integrates over a + volume, so the result varies across the wall cell instead of being one + number per cell. """ - k_nonnegative = ngs.IfPos(K, K, 0.0) - u_tau = self.C_mu ** 0.25 * ngs.sqrt(k_nonnegative) - return self._dist_cell * u_tau / self.nu + if K is not None: + self.update(K) + return self._dist_gf * self.u_tau_cell / self.nu def epsilon_wall_cell(self, K) -> ngs.CoefficientFunction: - """High-Re equilibrium dissipation in the wall-adjacent cell. + """Dissipation in a wall-layer cell, switched at ``YPLUS_VISCOUS``: - ``epsilon_P = C_mu**0.75 * k_P**1.5 / (kappa * y_P)``. - The distance field is cell-averaged and strictly positive in the cells - that own wall facets. + * log layer: ``C_mu**0.75 * k**1.5 / (kappa * y)`` + * viscous sublayer: ``2 * nu * k / y**2`` + + The viscous branch is needed because production is zero below + ``YPLUS_VISCOUS``; log-layer dissipation there suppresses k, which lowers + y+, which keeps the cell below the switch -- an absorbing state. """ k_nonnegative = ngs.IfPos(K, K, 0.0) - return (self.C_mu ** 0.75 * k_nonnegative ** 1.5 - / (self.kappa * self._epsilon_dist_cell)) + log_layer = (self.C_mu ** 0.75 * k_nonnegative ** 1.5 + / (self.kappa * self._dist_cell)) + viscous_sublayer = (2.0 * self.nu * k_nonnegative + / self._dist_cell ** 2) + return ngs.IfPos(self.y_plus_cell(K) - self.YPLUS_VISCOUS, + log_layer, viscous_sublayer) # ------------------------------------------------------------------ # Eddy viscosity # ------------------------------------------------------------------ - @staticmethod - def _smooth_step(value, lower: float, upper: float): - """C1-continuous transition from zero to one over ``[lower, upper]``.""" - scaled = (value - lower) / (upper - lower) - clipped = ngs.IfPos( - scaled, ngs.IfPos(1.0 - scaled, scaled, 1.0), 0.0) - return clipped ** 2 * (3.0 - 2.0 * clipped) + def _wall_law(self, yplus, K, epsilon) -> ngs.CoefficientFunction: + """Blended wall eddy viscosity as a function of the y+ handed in:: + + nu_t = 0 y+ < 11.25 (sublayer) + nu_t = nu*(y+ / ((1/kappa)*ln(E*y+)) - 1) y+ < 200 (log law) + nu_t = C_mu*k^2/epsilon y+ >= 200 (bulk) + """ + # ln(E*y+) vanishes at y+ = 1/E; pinning y+ to YPLUS_VISCOUS below the + # sublayer threshold avoids that root (the clamp below then zeroes it). + yplus_log = ngs.IfPos(yplus - self.YPLUS_VISCOUS, yplus, self.YPLUS_VISCOUS) + u_plus = ngs.log(self.E_log * yplus_log) / self.kappa + log_law = self.nu * (yplus_log / u_plus - 1.0) + log_law = ngs.IfPos(log_law, log_law, 0.0) + + return ngs.IfPos(self.YPLUS_LOG_MAX - yplus, + log_law, self.C_mu * K ** 2 / epsilon) - def eval_nu_wall(self, K, E) -> ngs.CoefficientFunction: - """Continuous equilibrium wall-law viscosity in the near-wall layer. + def eval_nu_wall(self, K, epsilon) -> ngs.CoefficientFunction: + """Wall eddy viscosity as a profile across the near-wall cell. - Constant total shear together with ``du+/dy+ = 1/(kappa*y+)`` gives - ``nu_t/nu = kappa*y+ - 1``. Smooth transitions avoid the large - constitutive jumps produced by the legacy hard switches. + y+ comes from :meth:`y_plus_field`, so the coefficient varies within the + cell rather than taking one value per cell. """ - yplus = self.y_plus_cell(K) - equilibrium = self.nu * (self.kappa * yplus - 1.0) - equilibrium = ngs.IfPos(equilibrium, equilibrium, 0.0) - - buffer_weight = self._smooth_step( - yplus, self.YPLUS_VISCOUS, self.YPLUS_LOG_MIN) - # The topological mask already selects only wall-adjacent cells. Keep - # those cells on the wall law for all y+; blending them back to - # C_mu*k^2/epsilon creates a strong positive feedback when epsilon lags. - return buffer_weight * equilibrium - - def eval_nu_t(self, K, E, U=None) -> ngs.CoefficientFunction: - """Blended turbulent viscosity. - - ``U`` is accepted and ignored: the shear it would supply comes from - :meth:`update`, which must already have run this iteration. + return self._wall_law(self.y_plus_field(K), K, epsilon) + + def eval_nu_wall_cell(self, K, epsilon) -> ngs.CoefficientFunction: + """Wall eddy viscosity at the cell-averaged distance, so it's nonzero at + the wall trace. For scaling the Dirichlet penalty only; the physical + viscosity profile is :meth:`eval_nu_wall`. + """ + return self._wall_law(self.y_plus_cell(K), K, epsilon) + + def eval_nu_t(self, K, E) -> ngs.CoefficientFunction: + """Wall law inside the mask, bulk ``C_mu k^2/epsilon`` outside it. + + Requires :meth:`update` to have run this iteration. """ + # Cell-based, not pointwise: the Eikonal distance is zero ON the wall, so + # a pointwise wall law collapses there and jumps to bulk one cell in. nu_t_bulk = self.C_mu * K ** 2 / E nu_t = self.mask * self.eval_nu_wall(K, E) + (1 - self.mask) * nu_t_bulk return ngs.IfPos(nu_t, nu_t, 0) # turbulent viscosity cannot be negative diff --git a/opencmp/models/ins.py b/opencmp/models/ins.py index f8b2891..0c01469 100644 --- a/opencmp/models/ins.py +++ b/opencmp/models/ins.py @@ -92,9 +92,11 @@ def _set_model_parameters(self) -> None: # Remove the source term for the conservation of momentum if it's not being solved. self.f.pop('u') - def _get_kinematic_viscosity(self, time_step: int): + def _get_effective_viscosity(self, time_step: int): """ Return the viscosity used by the momentum weak form. + + Molecular viscosity here; turbulence models add their eddy viscosity. """ return self.kv[time_step] @@ -185,7 +187,7 @@ def construct_bilinear_time_ODE(self, U: Union[List[ProxyFunction], List[GridFun dt: Parameter = Parameter(1.0), time_step: int = 0) -> List[BilinearForm]: w = self._get_wind(U, time_step) - kv = self._get_kinematic_viscosity(time_step) + kv = self._get_effective_viscosity(time_step) # Define the special DG functions n, _, alpha, I_mat = get_special_functions(self.mesh, self.nu) @@ -235,7 +237,7 @@ def construct_bilinear_time_coefficient(self, U: List[ProxyFunction], V: List[Pr time_step: int) -> List[BilinearForm]: w = self._get_wind(U, time_step) - kv = self._get_kinematic_viscosity(time_step) + kv = self._get_effective_viscosity(time_step) # Define the special DG functions. n, _, alpha, I_mat = get_special_functions(self.mesh, self.nu) @@ -283,7 +285,7 @@ def construct_linear(self, V: List[ProxyFunction], gfu_0: Optional[List[GridFunc dt: Parameter, time_step: int) -> List[LinearForm]: w = self._get_wind(gfu_0, time_step) - kv = self._get_kinematic_viscosity(time_step) + kv = self._get_effective_viscosity(time_step) # Define the special DG functions. n, h, alpha, I_mat = get_special_functions(self.mesh, self.nu) diff --git a/opencmp/models/k_epsilon.py b/opencmp/models/k_epsilon.py index ac9bb8f..a12fce3 100644 --- a/opencmp/models/k_epsilon.py +++ b/opencmp/models/k_epsilon.py @@ -20,13 +20,14 @@ import logging from typing import Dict, List, Optional, Union +import numpy as np import ngsolve as ngs from ngsolve import (BilinearForm, FESpace, GridFunction, LinearForm, Parameter, Preconditioner) from ngsolve.comp import ProxyFunction from .ins import INS -from ..helpers.dg import avg, grad_avg, jump +from ..helpers.dg import avg, jump, weighted_grad_avg from ..helpers.limiter import Limiter from ..helpers.math import Max from ..helpers.ngsolve_ import get_special_functions @@ -36,31 +37,55 @@ class KEpsilonINS(INS): """RANS INS model closed with the standard high-Reynolds-number k-epsilon equations. - The momentum and continuity equations are inherited from :class:`INS`. - This class adds transport equations for turbulent kinetic energy and dissipation. + Adds transport equations for turbulent kinetic energy and dissipation to INS. """ - def _optional_config(self, key: str, value_type, default): + DEFAULT_PARAMETERS = { + 'c_mu': 0.09, + 'c_1': 1.44, + 'c_2': 1.92, + 'sigma_k': 1.0, + 'sigma_epsilon': 1.3, + 'kappa': 0.4187, + 'e_log': 9.793, + 'k_floor': 1e-10, + 'epsilon_floor': 1e-10, + 'max_viscosity_ratio': 1e5, + 'production_limit_coefficient': 10.0, + 'max_epsilon_k_ratio': 10.0, + 'realizability_coefficient': 1.0, + } + + #: Optional ``[OTHER]`` switches + DEFAULT_OPTIONS = { + 'wall_function': True, + 'wall_boundary': 'wall', + 'production_limiter': True, + 'realizability_limiter': True, + } + + def _parameter(self, parameters: Dict, name: str) -> float: + """Config value if present, else the standard constant from DEFAULT_PARAMETERS. + + These are all constants, so the per-time-level list the config parser + returns is collapsed to its first entry. + """ + if name not in parameters: + return self.DEFAULT_PARAMETERS[name] + return parameters[name]['all'][0] + + def _optional_config(self, key: str): + """One optional [OTHER] switch, from DEFAULT_OPTIONS if the config omits it.""" + default = self.DEFAULT_OPTIONS[key] try: - value = self.config.get_item(['OTHER', key], value_type, quiet=True) + value = self.config.get_item(['OTHER', key], type(default), quiet=True) except Exception: return default return default if value is None else value def _pre_init(self) -> None: - self.wall_function = self._optional_config('wall_function', bool, False) - self.wall_boundary = self._optional_config('wall_boundary', str, 'wall') - self.slope_limiter = self._optional_config('slope_limiter', bool, False) - self.production_limiter = self._optional_config( - 'production_limiter', bool, True) - self.epsilon_wall_relaxation = self._optional_config( - 'epsilon_wall_relaxation', float, 0.15) - self.epsilon_wall_max_change_factor = self._optional_config( - 'epsilon_wall_max_change_factor', float, 2.0) - if not 0.0 < self.epsilon_wall_relaxation <= 1.0: - raise ValueError('epsilon_wall_relaxation must be in (0, 1].') - if self.epsilon_wall_max_change_factor < 1.0: - raise ValueError('epsilon_wall_max_change_factor must be at least 1.') + for key in self.DEFAULT_OPTIONS: + setattr(self, key, self._optional_config(key)) def _define_model_components(self) -> Dict[str, Optional[int]]: return {'u': 0, 'p': 1, 'k': 2, 'epsilon': 3} @@ -82,7 +107,7 @@ def _construct_fes(self) -> FESpace: element = self.element[component] kwargs = { 'mesh': self.mesh, - 'order': scalar_order if element == 'L2' else self.interp_ord, + 'order': scalar_order, 'dgjumps': self.DG, } if element != 'L2': @@ -91,33 +116,53 @@ def _construct_fes(self) -> FESpace: return FESpace(spaces, dgjumps=self.DG) + + def _bound_turbulence(self, gfu: GridFunction) -> None: + """Floor and slope-limit the stored k and epsilon. + + Not optional: an unfloored k or epsilon zeroes the turbulent viscosity and + with it the production term, an absorbing state with no way back above + zero. Bezier bounds the DG polynomial everywhere (not just at sample + nodes), so a positive cell mean can't hide a negative value inside the cell. + """ + if self._limiter is None: + return + comp = self.model_components + for component, floor in (('k', self.k_floor), + ('epsilon', self.epsilon_floor)): + field = gfu.components[comp[component]] + # Pass the stable FES, not the per-call component, so the limiter's + # cache keys match across iterations. + space = self.fes.components[comp[component]] + self._limiter.bezier_bound(field, space, space.globalorder, + (floor, 1e20)) + def _set_model_parameters(self) -> None: super()._set_model_parameters() parameters = self.model_functions.model_parameters_dict - self.C_mu = parameters['c_mu']['all'] - self.C_1 = parameters['c_1']['all'] - self.C_2 = parameters['c_2']['all'] - self.sigma_k = parameters['sigma_k']['all'] - self.sigma_epsilon = parameters['sigma_epsilon']['all'] + self.C_mu = self._parameter(parameters, 'c_mu') + self.C_1 = self._parameter(parameters, 'c_1') + self.C_2 = self._parameter(parameters, 'c_2') + self.sigma_k = self._parameter(parameters, 'sigma_k') + self.sigma_epsilon = self._parameter(parameters, 'sigma_epsilon') + self.kappa = self._parameter(parameters, 'kappa') + self.E_log = self._parameter(parameters, 'e_log') # Floors and the viscosity ratio cap are numerical safeguards, not # replacements for physically meaningful ICs and BCs. - self.k_floor = parameters.get('k_floor', {'all': [1e-10] * len(self.t_param)})['all'] - self.epsilon_floor = parameters.get( - 'epsilon_floor', {'all': [1e-10] * len(self.t_param)})['all'] - self.max_viscosity_ratio = parameters.get( - 'max_viscosity_ratio', {'all': [1e5] * len(self.t_param)})['all'] - self.production_limit_coefficient = parameters.get( - 'production_limit_coefficient', - {'all': [10.0] * len(self.t_param)})['all'] - - if any(value <= 0.0 for value in self.production_limit_coefficient): + self.k_floor = self._parameter(parameters, 'k_floor') + self.epsilon_floor = self._parameter(parameters, 'epsilon_floor') + self.max_viscosity_ratio = self._parameter(parameters, 'max_viscosity_ratio') + self.production_limit_coefficient = self._parameter( + parameters, 'production_limit_coefficient') + self.max_epsilon_k_ratio = self._parameter(parameters, 'max_epsilon_k_ratio') + self.realizability_coefficient = self._parameter( + parameters, 'realizability_coefficient') + + if self.production_limit_coefficient <= 0.0: raise ValueError('production_limit_coefficient must be positive.') - - if self.wall_function: - self.density = parameters['density']['all'] - self.kappa = parameters['kappa']['all'] - self.E_log = parameters['e_log']['all'] + if self.max_epsilon_k_ratio <= 0.0: + raise ValueError('max_epsilon_k_ratio must be positive.') def _post_init(self) -> None: super()._post_init() @@ -135,30 +180,35 @@ def _post_init(self) -> None: relaxation if len(relaxation) == len(self.model_components) else [1.0] * len(self.model_components) ) - self._limiter = Limiter(self.mesh) if self.slope_limiter else None + # Bounding needs a discontinuous L2 space; with CG/H1 turbulence spaces + # the coefficient floors in _regularized_turbulence are the only safeguard. + self._bounded = (self.DG and self.element['k'] == 'L2' + and self.element['epsilon'] == 'L2') + self._limiter = Limiter(self.mesh) if self._bounded else None + # The IC is user-supplied and may sit below the floors (e.g. zero fields). + self._bound_turbulence(self.UIter) + # nu_t is built straight from the DG solution, no H1 recovery. These are + # live views into UIter, so they track it with no update step. + self._k_cell = self.UIter.components[self.model_components['k']] + self._epsilon_cell = self.UIter.components[self.model_components['epsilon']] self._wallf = None - self._epsilon_wall_element_dofs = {} - self._epsilon_wall_values = None if self.wall_function: - nu = self.kv[0] + if not self.DG or self.element['epsilon'] != 'L2': + raise NotImplementedError( + 'The wall-law epsilon Dirichlet condition requires a ' + 'discontinuous L2 epsilon space.') self._wallf = KEpsilonWallFunction( self.mesh, - mu=self.density[0] * nu, - rho=self.density[0], - nu=nu, - C_mu=self.C_mu[0], - kappa=self.kappa[0], - E=self.E_log[0], + nu=self.kv[0], + C_mu=self.C_mu, + kappa=self.kappa, + E_log=self.E_log, wall_boundary=self.wall_boundary, ) - self._wallf.update( - self.UIter.components[self.model_components['u']]) - - self._initialize_first_cell_epsilon() + self._wallf.update(self.UIter.components[self.model_components['k']]) - # Build and compile the turbulent viscosity once per time level so every - # form reuses the same optimized evaluation tree. This benefits both the - # bulk k-epsilon expression and the deeper wall-law expression. + # Build and compile nu_t once per time level so every form reuses the + # same optimized evaluation tree. self._turbulent_viscosity = [] for time_step in range(len(self.t_param)): nu_t = self._build_turbulent_viscosity(time_step) @@ -167,25 +217,22 @@ def _post_init(self) -> None: self._normal, _, self._penalty, _ = get_special_functions(self.mesh, self.nu) def _regularized_turbulence(self, time_step: int): - """Return turbulence fields bounded below by their configured floors. - - The bounded fields are used in ratios such as ``k**2 / epsilon`` and - ``epsilon / k`` to prevent division by zero and invalid negative - coefficients during nonlinear iterations. The solution fields stored - in ``UIter`` are not modified. - - Args: - time_step: Index selecting the floor values for the current time level. + """Floor-bounded k and epsilon, for use in ratios like k**2/epsilon. - Returns: - The floor-bounded turbulent kinetic energy and dissipation fields. + Guards against division by zero and negative coefficients during + nonlinear iterations. Does not modify the stored ``UIter`` fields. """ comp = self.model_components - k = self.UIter.components[comp['k']] - epsilon = self.UIter.components[comp['epsilon']] - k_safe = Max(k, ngs.CoefficientFunction(self.k_floor[time_step])) + k_safe = Max(self._k_cell, ngs.CoefficientFunction(self.k_floor)) epsilon_safe = Max( - epsilon, ngs.CoefficientFunction(self.epsilon_floor[time_step])) + self._epsilon_cell, ngs.CoefficientFunction(self.epsilon_floor)) + # epsilon >= C_mu k**2 / (max_viscosity_ratio * nu), tied to local k so + # C_mu k**2/epsilon stays under the ratio by construction. A scalar + # limiter bound can't express this, so it's applied here instead. + epsilon_safe = Max( + epsilon_safe, + self.C_mu * k_safe ** 2 + / (self.max_viscosity_ratio * self.kv[time_step])) return k_safe, epsilon_safe def _build_turbulent_viscosity(self, time_step: int): @@ -193,162 +240,84 @@ def _build_turbulent_viscosity(self, time_step: int): comp = self.model_components k_raw = self.UIter.components[comp['k']] epsilon_raw = self.UIter.components[comp['epsilon']] - velocity = self.UIter.components[self.model_components['u']] - bulk_valid = ngs.IfPos( - k_raw, ngs.IfPos(epsilon_raw, 1.0, 0.0), 0.0) + if self._bounded: + # An epsilon at its floor is a clamped undershoot, not a physical + # state; trusting k**2/epsilon there would inflate nu_t to the cap. + # Fade it out smoothly instead (see _epsilon_trust). + bulk_valid = self._epsilon_trust() + else: + bulk_valid = ngs.IfPos( + k_raw, ngs.IfPos(epsilon_raw, 1.0, 0.0), 0.0) if self._wallf is not None: - nu_t = self._wallf.eval_nu_t(k, epsilon, velocity) + nu_t = self._wallf.eval_nu_t(k, epsilon) wall_mask = self._wallf.near_wall_mask() - # The wall law remains active throughout the topological wall layer. - # In the bulk, an invalid raw turbulence state must switch turbulence - # off instead of turning the epsilon floor into a huge viscosity. + # Wall law stays active throughout the wall layer; in the bulk, + # bulk_valid switches turbulence off instead of trusting the floor. nu_t = wall_mask * nu_t + (1.0 - wall_mask) * bulk_valid * nu_t else: - nu_t = bulk_valid * self.C_mu[time_step] * k ** 2 / epsilon + nu_t = bulk_valid * self.C_mu * k ** 2 / epsilon + + if self.realizability_limiter: + nu_t = self._realizable_nu_t(nu_t, k) - cap = self.max_viscosity_ratio[time_step] * self.kv[time_step] + cap = self.max_viscosity_ratio * self.kv[time_step] return ngs.IfPos(nu_t, ngs.IfPos(cap - nu_t, nu_t, cap), 0.0) + def _strain_magnitude(self): + """S = sqrt(2 S_ij S_ij) from the lagged velocity.""" + velocity = self.UIter.components[self.model_components['u']] + strain = 0.5 * (ngs.grad(velocity) + ngs.grad(velocity).trans) + return ngs.sqrt(2.0 * ngs.InnerProduct(strain, strain) + 1e-30) + + def _realizable_nu_t(self, nu_t, k): + """Durbin (1996) realizability bound on the turbulent time scale. + + T = min(k/epsilon, a / (sqrt(6) C_mu S)) with nu_t = C_mu k T, i.e. + nu_t <= a k / (sqrt(6) S). Follows from positivity of the normal Reynolds + stresses, so it caps nu_t by the local strain instead of letting k**2 + over a collapsing epsilon run to the viscosity ratio. + """ + bound = (self.realizability_coefficient * k + / (np.sqrt(6.0) * self._strain_magnitude())) + return ngs.IfPos(bound - nu_t, nu_t, bound) + def _get_turbulent_viscosity(self, time_step: int): return self._turbulent_viscosity[time_step] - def _get_kinematic_viscosity(self, time_step: int): + def _get_effective_viscosity(self, time_step: int): return self.kv[time_step] + self._get_turbulent_viscosity(time_step) - def _initialize_first_cell_epsilon(self) -> None: - """Initialize the algebraic epsilon treatment in wall-adjacent cells. + def _epsilon_trust(self): + """Smooth 0..1 weight that vanishes as epsilon nears its floor (a clamped + undershoot there, not a physical state). Healthy cells get weight ~1. + ponytail: 100 is a trust margin, not physics. + """ + epsilon_raw = self._epsilon_cell + return epsilon_raw / (epsilon_raw + 100.0 * self.epsilon_floor) - This maps cells selected by the wall-function topology mask to the - corresponding epsilon-space DOFs. It then evaluates the equilibrium - wall-law epsilon from the initial turbulent kinetic energy, stores one - continuation value per wall cell, and applies those values to ``UIter`` - before the first Picard system is assembled. + def _epsilon_k_ratio(self, k, epsilon): + """Smooth, upper-bounded epsilon/k reaction coefficient. - Raises: - NotImplementedError: If epsilon does not use a discontinuous L2 space. - RuntimeError: If a marked wall cell cannot be mapped to epsilon DOFs. + Raw epsilon/k diverges as k -> 0; this form tends to max_epsilon_k_ratio + instead. The trust weight also removes the artificial O(1) sink that + forms where both k and epsilon sit at their floors. """ - if not self.DG or self.element['epsilon'] != 'L2': - raise NotImplementedError( - 'The first-cell epsilon treatment requires a discontinuous L2 ' - 'epsilon space.') - - mask_values = self._wallf.first_cell_mask().vec.FV().NumPy() - wall_elements = { - element.nr - for element in self._wallf._fes0.Elements(ngs.VOL) - if any(mask_values[dof] > 0.5 for dof in element.dofs) - } - epsilon_space = self.fes.components[self.model_components['epsilon']] - for element in epsilon_space.Elements(ngs.VOL): - if element.nr not in wall_elements: - continue - self._epsilon_wall_element_dofs[element.nr] = tuple(element.dofs) - - if len(self._epsilon_wall_element_dofs) != len(wall_elements): - raise RuntimeError('Could not map every wall-adjacent cell to epsilon DOFs.') - - # Start the nonlinear solve on the same equilibrium wall relation that - # will be enforced later. Initializing this continuation state from the - # domain/inlet epsilon made every wall cell climb geometrically toward a - # much larger target, so its absolute Picard update grew by construction. - initial_k = ngs.GridFunction(self._wallf._fes0) - initial_k.Set(self.UIter.components[self.model_components['k']]) - initial_target = ngs.GridFunction(self._wallf._fes0) - initial_target.Set(self._wallf.epsilon_wall_cell(initial_k)) - initial_values = initial_target.vec.FV().NumPy() - self._epsilon_wall_values = { - element.nr: max(float(initial_values[element.dofs[0]]), - self.epsilon_floor[0]) - for element in self._wallf._fes0.Elements(ngs.VOL) - if element.nr in wall_elements - } - # The coefficient functions assembled for the first Picard step read - # UIter, so put the equilibrium values into that iterate immediately as - # well as into the continuation history above. - self._apply_first_cell_epsilon(self.UIter, 0) - - def _apply_first_cell_epsilon(self, gfu: GridFunction, time_step: int) -> None: - """Update epsilon in wall-adjacent cells from the equilibrium wall law. - - The wall-law target is evaluated using the Picard-lagged turbulent - kinetic energy in ``UIter``. Each cell value is limited relative to its - previous value, under-relaxed, bounded by the epsilon floor, and then - projected into every local epsilon DOF of the wall-adjacent element. - Non-wall cells in ``gfu`` are left unchanged. - - Args: - gfu: Solution grid function whose epsilon component is updated. - time_step: Index selecting the epsilon floor for the current time level. - """ - if self._wallf is None: - return + ratio = epsilon / (k + epsilon / self.max_epsilon_k_ratio) + if self._bounded: + ratio = ratio * self._epsilon_trust() + return ratio - comp = self.model_components - epsilon_component = gfu.components[comp['epsilon']] - # Picard-lag the nonlinear wall target. Using the just-solved k here - # couples two new fields outside the assembled linear system and turns - # the post-solve overwrite into an unrelaxed same-iteration feedback. - k_cell = ngs.GridFunction(self._wallf._fes0) - k_cell.Set(self.UIter.components[comp['k']]) - raw_target = ngs.GridFunction(self._wallf._fes0) - raw_target.Set(self._wallf.epsilon_wall_cell(k_cell)) - raw_values = raw_target.vec.FV().NumPy() - - applied_cell = ngs.GridFunction(self._wallf._fes0) - applied_cell_values = applied_cell.vec.FV().NumPy() - mask_values = self._wallf.first_cell_mask().vec.FV().NumPy() - epsilon_values = epsilon_component.vec.FV().NumPy() - - relaxation = self.epsilon_wall_relaxation - change_factor = self.epsilon_wall_max_change_factor - for element in self._wallf._fes0.Elements(ngs.VOL): - if not any(mask_values[dof] > 0.5 for dof in element.dofs): - continue - cell_dof = element.dofs[0] - previous = self._epsilon_wall_values[element.nr] - target_value = max(float(raw_values[cell_dof]), - self.epsilon_floor[time_step]) - value, _ = self._relax_epsilon_wall_value( - target_value, previous, relaxation, change_factor) - value = max(value, self.epsilon_floor[time_step]) - applied_cell_values[cell_dof] = value - self._epsilon_wall_values[element.nr] = value - - # Let NGSolve represent the P0 field in the actual high-order basis, - # then copy every local coefficient on wall cells. This removes all - # higher epsilon modes there without changing the global FESpace. - projected = ngs.GridFunction(epsilon_component.space) - projected.Set(applied_cell) - projected_values = projected.vec.FV().NumPy() - for dofs in self._epsilon_wall_element_dofs.values(): - epsilon_values[list(dofs)] = projected_values[list(dofs)] - - @staticmethod - def _relax_epsilon_wall_value(raw_target: float, previous: float, - relaxation: float, - change_factor: float) -> tuple: - """Limit and relax one algebraic first-cell epsilon target.""" - limited_target = min( - max(raw_target, previous / change_factor), - previous * change_factor) - value = ((1.0 - relaxation) * previous - + relaxation * limited_target) - return value, limited_target != raw_target - - def _limit_production(self, production, epsilon, time_step: int): + def _limit_production(self, production, epsilon): """Use equilibrium limiting at walls and the configured limit in bulk.""" - bulk_limit = self.production_limit_coefficient[time_step] * epsilon + bulk_limit = self.production_limit_coefficient * epsilon bulk_production = ngs.IfPos( bulk_limit - production, production, bulk_limit) if self._wallf is None: return bulk_production - # The high-Re wall treatment assumes local equilibrium, P_k ~= epsilon. - # Apply that coefficient throughout the same expanded wall layer used by - # wall viscosity and first-cell epsilon; retain the user's coefficient - # only in the non-equilibrium interior. + # High-Re wall treatment assumes local equilibrium, P_k = epsilon, over + # the same wall layer used by wall viscosity and first-cell epsilon. wall_production = ngs.IfPos( epsilon - production, production, epsilon) wall_mask = self._wallf.near_wall_mask() @@ -364,17 +333,23 @@ def _production(self, time_step: int): if self.production_limiter: _, epsilon = self._regularized_turbulence(time_step) - production = self._limit_production( - production, epsilon, time_step) + production = self._limit_production(production, epsilon) return production def _neumann_markers(self, component: str) -> str: - return '|'.join(self.BC.get('neumann', {}).get(component, {}).keys()) + markers = self.BC.get('neumann', {}).get(component, {}).keys() + if component == 'epsilon' and self._wallf is not None: + markers = (marker for marker in markers + if marker != self.wall_boundary) + return '|'.join(markers) def _epsilon_dirichlet_markers(self) -> str: - """Configured epsilon boundaries; wall-function walls use zero flux.""" - return '|'.join(self.BC.get('dirichlet', {}).get('epsilon', {}).keys()) + """Configured epsilon boundaries plus the active wall-function wall.""" + markers = list(self.BC.get('dirichlet', {}).get('epsilon', {}).keys()) + if self._wallf is not None and self.wall_boundary not in markers: + markers.append(self.wall_boundary) + return '|'.join(markers) def _add_scalar_transport(self, form, scalar, test, wind, diffusivity, dirichlet_markers: str, neumann_markers: str, @@ -387,9 +362,17 @@ def _add_scalar_transport(self, form, scalar, test, wind, diffusivity, wind_n = wind * n flux = avg(scalar) * wind_n + 0.5 * ngs.Norm(wind_n) * jump(scalar) form += dt * jump(test) * flux * ngs.dx(skeleton=True) - form += -dt * diffusivity * (n * grad_avg(test)) * jump(scalar) * ngs.dx(skeleton=True) - form += dt * diffusivity * ( - self._penalty * jump(scalar) - grad_avg(scalar) * n + facet_diffusivity = ngs.CoefficientFunction(diffusivity) + avg_diffusivity = avg(facet_diffusivity) + avg_diffusive_grad_test = weighted_grad_avg( + test, facet_diffusivity) + avg_diffusive_grad_scalar = weighted_grad_avg( + scalar, facet_diffusivity) + form += -dt * (n * avg_diffusive_grad_test) * jump( + scalar) * ngs.dx(skeleton=True) + form += dt * ( + avg_diffusivity * self._penalty * jump(scalar) + - avg_diffusive_grad_scalar * n ) * jump(test) * ngs.dx(skeleton=True) if dirichlet_markers: @@ -422,10 +405,25 @@ def construct_bilinear_time_ODE( zeta = V[comp['k']] psi = V[comp['epsilon']] - d_k = self.kv[time_step] + nu_t / self.sigma_k[time_step] - d_epsilon = self.kv[time_step] + nu_t / self.sigma_epsilon[time_step] + d_k = self.kv[time_step] + nu_t / self.sigma_k + d_epsilon = self.kv[time_step] + nu_t / self.sigma_epsilon k_previous, epsilon_previous = self._regularized_turbulence(time_step) form = forms[0] + if (self.DG and self._wallf is not None + and self.wall_boundary in self.BC.get( + 'dirichlet', {}).get('u', {})): + # nu_t vanishes at the geometric wall, so INS's Nitsche penalty there + # sees only molecular viscosity. Add the missing first-cell nu_t term; + # leave INS's consistency/flux terms alone. + wall_penalty_nu_t = self._wallf.eval_nu_wall_cell( + k_previous, epsilon_previous) + cap = self.max_viscosity_ratio * self.kv[time_step] + wall_penalty_nu_t = ngs.IfPos( + cap - wall_penalty_nu_t, wall_penalty_nu_t, cap) + u = U[comp['u']] + v = V[comp['u']] + form += (dt * wall_penalty_nu_t * self._penalty + * u * v * self._ds(self.wall_boundary)) form = self._add_scalar_transport( form, k, zeta, wind, d_k, self.dirichlet_names.get('k', ''), self._neumann_markers('k'), dt) @@ -433,14 +431,13 @@ def construct_bilinear_time_ODE( form, epsilon, psi, wind, d_epsilon, self._epsilon_dirichlet_markers(), self._neumann_markers('epsilon'), dt) - # Treat the sink terms as positive implicit contributions. Lag only - # their coefficients, following the standard segregated k-epsilon - # linearization used by production CFD solvers. Keeping these terms - # on the right-hand side makes the Picard iteration highly unstable - # when either turbulence variable changes rapidly. - form += dt * (epsilon_previous / k_previous) * k * zeta * ngs.dx - form += dt * self.C_2[time_step] * ( - epsilon_previous / k_previous) * epsilon * psi * ngs.dx + # Sink terms go on the implicit side with lagged coefficients only + # (standard segregated k-epsilon linearization); on the RHS they make + # the Picard iteration unstable when k or epsilon changes rapidly. + epsilon_k_ratio = self._epsilon_k_ratio(k_previous, epsilon_previous) + form += dt * epsilon_k_ratio * k * zeta * ngs.dx + form += dt * self.C_2 * ( + epsilon_k_ratio) * epsilon * psi * ngs.dx forms[0] = form return forms @@ -457,6 +454,20 @@ def construct_linear(self, V: List[ProxyFunction], production = self._production(time_step) form = forms[0] + if (self.DG and self._wallf is not None + and self.wall_boundary in self.BC.get( + 'dirichlet', {}).get('u', {})): + wall_penalty_nu_t = self._wallf.eval_nu_wall_cell(k, epsilon) + cap = self.max_viscosity_ratio * self.kv[time_step] + wall_penalty_nu_t = ngs.IfPos( + cap - wall_penalty_nu_t, wall_penalty_nu_t, cap) + wall_velocity = self.BC['dirichlet']['u'][ + self.wall_boundary][time_step] + velocity_test = V[comp['u']] + form += (dt * wall_penalty_nu_t * self._penalty + * wall_velocity * velocity_test + * self._ds(self.wall_boundary)) + source_k = self.f.get('k', [0.0] * len(self.t_param))[time_step] source_epsilon = self.f.get( 'epsilon', [0.0] * len(self.t_param))[time_step] @@ -464,15 +475,15 @@ def construct_linear(self, V: List[ProxyFunction], production + source_k ) * zeta * ngs.dx form += dt * ( - self.C_1[time_step] * epsilon / k * production + self.C_1 * self._epsilon_k_ratio(k, epsilon) * production + source_epsilon ) * psi * ngs.dx if self.DG: n = self._normal - d_k = self.kv[time_step] + nu_t / self.sigma_k[time_step] + d_k = self.kv[time_step] + nu_t / self.sigma_k d_epsilon = ( - self.kv[time_step] + nu_t / self.sigma_epsilon[time_step]) + self.kv[time_step] + nu_t / self.sigma_epsilon) for component, test, diffusivity in ( ('k', zeta, d_k), ('epsilon', psi, d_epsilon)): for marker, values in self.BC.get( @@ -487,9 +498,26 @@ def construct_linear(self, V: List[ProxyFunction], form += -dt * diffusivity * value * ( ngs.grad(test) * n) * self._ds(marker) + if self._wallf is not None: + # Impose the wall-law epsilon through the same weak DG/Nitsche + # terms as configured Dirichlet data, using Picard-lagged k. + value = self._wallf.epsilon_wall_cell(k) + wind_n = wind * n + form += -dt * psi * ( + 0.5 * value * wind_n + - 0.5 * value * ngs.Norm(wind_n) + ) * self._ds(self.wall_boundary) + form += (dt * d_epsilon * self._penalty * value * psi + * self._ds(self.wall_boundary)) + form += -dt * d_epsilon * value * ( + ngs.grad(psi) * n) * self._ds(self.wall_boundary) + for component, test in (('k', zeta), ('epsilon', psi)): for marker, values in self.BC.get( 'neumann', {}).get(component, {}).items(): + if (component == 'epsilon' and self._wallf is not None + and marker == self.wall_boundary): + continue form += -dt * test * values[time_step] * self._ds(marker) forms[0] = form @@ -505,7 +533,6 @@ def solve_single_step(self, a_lst: List[BilinearForm], gfu.vec.data = self.IC.vec previous = ngs.GridFunction(self.fes) - scalar_order = max(self.interp_ord - 1, 0) for iteration in range(self.nonlinear_max_iters): previous.vec.data = gfu.vec @@ -513,7 +540,7 @@ def solve_single_step(self, a_lst: List[BilinearForm], self.W[0].vec.data = gfu.components[comp['u']].vec if self._wallf is not None: - self._wallf.update(self.UIter.components[comp['u']]) + self._wallf.update(self.UIter.components[comp['k']]) self.apply_dirichlet_bcs_to(gfu, time_step) a_lst[0].Assemble() @@ -528,17 +555,7 @@ def solve_single_step(self, a_lst: List[BilinearForm], factor * gfu.components[index].vec + (1.0 - factor) * previous.components[index].vec) - self._apply_first_cell_epsilon(gfu, time_step) - - if self._limiter is not None: - self._limiter.bezier_bound( - gfu.components[comp['k']], - gfu.components[comp['k']].space, - scalar_order, (self.k_floor[time_step], 1e20)) - self._limiter.bezier_bound( - gfu.components[comp['epsilon']], - gfu.components[comp['epsilon']].space, - scalar_order, (self.epsilon_floor[time_step], 1e20)) + self._bound_turbulence(gfu) difference = gfu.vec.CreateVector() difference.data = gfu.vec - previous.vec @@ -569,19 +586,9 @@ def linearized_solve(self, a_assembled: BilinearForm, L_assembled: LinearForm, factor * gfu.components[index].vec + (1.0 - factor) * self.UIter.components[index].vec) - self._apply_first_cell_epsilon(gfu, 0) + self._bound_turbulence(gfu) comp = self.model_components - if self._limiter is not None: - scalar_order = max(self.interp_ord - 1, 0) - self._limiter.bezier_bound( - gfu.components[comp['k']], gfu.components[comp['k']].space, - scalar_order, (self.k_floor[0], 1e20)) - self._limiter.bezier_bound( - gfu.components[comp['epsilon']], - gfu.components[comp['epsilon']].space, - scalar_order, (self.epsilon_floor[0], 1e20)) - error_squared = 0.0 norm_squared = 0.0 for component in ('u', 'k', 'epsilon'): @@ -594,18 +601,8 @@ def linearized_solve(self, a_assembled: BilinearForm, L_assembled: LinearForm, return error_squared ** 0.5, norm_squared ** 0.5 def update_linearization(self, gfu: GridFunction) -> None: - if self._limiter is not None: - comp = self.model_components - scalar_order = max(self.interp_ord - 1, 0) - self._limiter.bezier_bound( - gfu.components[comp['k']], gfu.components[comp['k']].space, - scalar_order, (self.k_floor[0], 1e20)) - self._limiter.bezier_bound( - gfu.components[comp['epsilon']], - gfu.components[comp['epsilon']].space, - scalar_order, (self.epsilon_floor[0], 1e20)) + self._bound_turbulence(gfu) super().update_linearization(gfu) self.UIter.vec.data = gfu.vec if self._wallf is not None: - self._wallf.update( - self.UIter.components[self.model_components['u']]) + self._wallf.update(self.UIter.components[self.model_components['k']]) diff --git a/opencmp/solvers/nonlinear_mixing.py b/opencmp/solvers/nonlinear_mixing.py index d37d61f..66f634b 100644 --- a/opencmp/solvers/nonlinear_mixing.py +++ b/opencmp/solvers/nonlinear_mixing.py @@ -6,9 +6,11 @@ _solve() is responsible for everything else (BC application, re-assembly, convergence checks, gfu/x_curr updates). -All three schemes follow the same first-step convention as the original code: on iteration 2 -(the first real mixing step) every scheme performs linear mixing and initialises alpha from -the dominant-eigenvalue estimate. Scheme-specific logic takes over from iteration 3 onward. +LinearMixing, DiagBroyden, and Anderson follow the same first-step convention as the +original code: on iteration 2 (the first real mixing step) each initialises alpha from the +dominant-eigenvalue estimate. Scheme-specific logic takes over from iteration 3 onward. +NoMixing has no such state; it passes every iteration's update through unchanged, for models +(e.g. KEpsilonINS) that already apply their own per-component relaxation. """ import numpy as np @@ -124,10 +126,21 @@ def step(self, f_vec: BaseVector, x_prev_vec: BaseVector, num_iterations: int) - return dx_np +class NoMixing: + """dx = f (accept the model's own update, no extra damping).""" + + def __init__(self, **_) -> None: + pass + + def step(self, f_vec: BaseVector, x_prev_vec: BaseVector, num_iterations: int) -> np.ndarray: + return f_vec.FV().NumPy().copy() + + _SCHEMES = { 'LinearMixing': LinearMixing, 'DiagBroyden': DiagBroyden, 'Anderson': Anderson, + 'NoMixing': NoMixing, 'default': Anderson, } diff --git a/pytests/full_system/k_epsilon/config b/pytests/full_system/k_epsilon/config index 6048795..40fef94 100644 --- a/pytests/full_system/k_epsilon/config +++ b/pytests/full_system/k_epsilon/config @@ -45,4 +45,3 @@ num_threads = 1 model = KEpsilonINS run_dir = pytests/full_system/k_epsilon wall_function = False -slope_limiter = False diff --git a/pytests/full_system/k_epsilon/model_dir/model_config b/pytests/full_system/k_epsilon/model_dir/model_config index abe01af..da06bae 100644 --- a/pytests/full_system/k_epsilon/model_dir/model_config +++ b/pytests/full_system/k_epsilon/model_dir/model_config @@ -9,10 +9,7 @@ k_floor = all -> 1e-10 epsilon_floor = all -> 1e-10 max_viscosity_ratio = all -> 1e5 production_limit_coefficient = all -> 10.0 -; Only read when wall_function = True. -density = all -> 1.0 kappa = all -> 0.41 -e_log = all -> 9.8 [FUNCTIONS] ; A body force, so the no-slip cavity has a non-trivial flow and the wall diff --git a/pytests/helpers/test_k_epsilon_wall_func.py b/pytests/helpers/test_k_epsilon_wall_func.py index 844107f..4c3ffcd 100644 --- a/pytests/helpers/test_k_epsilon_wall_func.py +++ b/pytests/helpers/test_k_epsilon_wall_func.py @@ -2,27 +2,28 @@ The point of ``KEpsilonWallFunction`` is that it needs no cylinder radius and no hand-labelled near-wall/core materials, so most of these tests check that the -near-wall layer, the wall distance and the wall shear come out right on meshes +near-wall layer, the wall distance and the wall law come out right on meshes that carry none of that information. """ import numpy as np import ngsolve as ngs import pytest +from netgen.csg import unit_cube +from ngsolve.meshes import MakeStructured2DMesh, MakeStructured3DMesh from opencmp.helpers.wall_func import KEpsilonWallFunction SQUARE = 'pytests/mesh_files/unit_square_coarse.vol' CHANNEL = 'pytests/mesh_files/channel_3bcs.vol' -MU = 3.0 -RHO = 2.0 -NU = MU / RHO +NU = 1.5 +E_LOG = 9.8 def build(mesh, wall='bottom', **kwargs): - return KEpsilonWallFunction(mesh, mu=MU, rho=RHO, nu=NU, C_mu=0.09, - kappa=0.41, E=9.8, wall_boundary=wall, **kwargs) + return KEpsilonWallFunction(mesh, nu=NU, C_mu=0.09, kappa=0.41, E_log=E_LOG, + wall_boundary=wall, **kwargs) def marked_element_numbers(wf): @@ -75,10 +76,10 @@ def test_mask_includes_wall_cells_and_one_face_connected_layer(meshfile, wall): assert marked_element_numbers(wf) == expected -def test_first_cell_mask_matches_the_full_expanded_wall_layer(): +def test_near_wall_mask_matches_the_full_expanded_wall_layer(): mesh = ngs.Mesh(CHANNEL) wf = build(mesh, 'wall') - values = wf.first_cell_mask().vec.FV().NumPy() + values = wf.near_wall_mask().vec.FV().NumPy() actual = {element.nr for element in wf._fes0.Elements(ngs.VOL) if any(values[dof] > 0.5 for dof in element.dofs)} wall_cells = elements_owning_a_facet_on(mesh, 'wall') @@ -151,102 +152,54 @@ def test_wall_distance_is_zero_on_the_wall_and_grows_inward(): assert samples[0] == pytest.approx(0.1, abs=0.05) -def test_epsilon_wall_uses_high_re_equilibrium_relation(): - mesh = ngs.Mesh(SQUARE) - wf = build(mesh, 'bottom') - k = 0.4 +def _epsilon_wall_values(wf, k): epsilon = ngs.GridFunction(wf._fes0) epsilon.Set(wf.epsilon_wall_cell(ngs.CoefficientFunction(k))) - distance = wf._epsilon_dist_cell.vec.FV().NumPy() - expected = 0.09 ** 0.75 * k ** 1.5 / (0.41 * distance) - assert epsilon.vec.FV().NumPy() == pytest.approx(expected, rel=1e-9) - - -def test_marked_cells_are_the_closest_cells_to_the_wall(): - mesh = ngs.Mesh(CHANNEL) - wf = build(mesh, 'wall') - dist = wf.wall_distance_cell().vec.FV().NumPy() - marked = wf.mask.vec.FV().NumPy() > 0.5 - assert dist[marked].max() < dist[~marked].max() - - -# ---------------------------------------------------------------------- -# Tangential traction -# ---------------------------------------------------------------------- + return epsilon.vec.FV().NumPy() -def set_velocity(mesh, cf): - gfu = ngs.GridFunction(ngs.VectorH1(mesh, order=2)) - gfu.Set(cf) - return gfu +def _k_for_yplus(wf, yplus): + """k giving the requested y+ in the *first* cell, from y+ = y*Cmu^0.25*sqrt(k)/nu.""" + y = float(wf.wall_distance_cell().vec.FV().NumPy().min()) + return (yplus * NU / (0.09 ** 0.25 * y)) ** 2 -def tau_on_marked(wf): - values = wf.tau_cell.vec.FV().NumPy() - return values[wf.first_cell_mask().vec.FV().NumPy() > 0.5] - -def test_manufactured_tangential_traction_gives_its_known_magnitude(): - """u = (y, 0) on the y = 0 wall: sigma_xy = mu * du_x/dy = mu, purely - tangential, so tau_wall == mu.""" +def test_epsilon_wall_uses_high_re_equilibrium_relation_in_the_log_layer(): mesh = ngs.Mesh(SQUARE) wf = build(mesh, 'bottom') - wf.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.y, 0.0)))) - assert tau_on_marked(wf) == pytest.approx(MU, rel=1e-9) - + k = _k_for_yplus(wf, 5.0 * wf.YPLUS_VISCOUS) + distance = wf.wall_distance_cell().vec.FV().NumPy() + expected = 0.09 ** 0.75 * k ** 1.5 / (0.41 * distance) -def test_pure_normal_traction_gives_zero_tangential_shear(): - """u = (x, -y) is divergence free with traction purely normal on a flat - y = 0 wall, so the tangential projection must annihilate it.""" - mesh = ngs.Mesh(SQUARE) - wf = build(mesh, 'bottom') - wf.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.x, -ngs.y)))) - assert tau_on_marked(wf).max() < 1e-9 + owners = wf.wall_facet_mask().vec.FV().NumPy() > 0.5 + assert _epsilon_wall_values(wf, k)[owners] == pytest.approx( + expected[owners], rel=1e-9) -def test_normal_traction_does_not_leak_into_the_shear(): - """Superposing a normal-traction field on a shear field must leave tau - unchanged -- this is what the legacy |sigma.n| got wrong.""" +def test_epsilon_wall_switches_to_viscous_dissipation_below_yplus_lam(): + """Below y+_lam production is zero, so log-layer dissipation would empty the cell.""" mesh = ngs.Mesh(SQUARE) wf = build(mesh, 'bottom') + k = _k_for_yplus(wf, 0.1 * wf.YPLUS_VISCOUS) + distance = wf.wall_distance_cell().vec.FV().NumPy() + expected = 2.0 * NU * k / distance ** 2 - wf.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.y, 0.0)))) - shear_only = tau_on_marked(wf).copy() + owners = wf.wall_facet_mask().vec.FV().NumPy() > 0.5 + assert _epsilon_wall_values(wf, k)[owners] == pytest.approx( + expected[owners], rel=1e-9) - wf.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.y + ngs.x, -ngs.y)))) - combined = tau_on_marked(wf) - assert combined == pytest.approx(shear_only, rel=1e-9) +def wall_law_nu_t(yplus): + """Log-law wall viscosity: nu*(y+/u+ - 1) with u+ = ln(E*y+)/kappa.""" + return NU * (yplus / (np.log(E_LOG * yplus) / 0.41) - 1.0) -def test_shear_is_invariant_under_rotation_of_wall_and_velocity(): - """The whole point of the change: rotate the geometry and the velocity field - together and the wall shear is unchanged. The legacy x-binning could not do - this. 'left' is the y-axis wall; u = (0, x) shears along it exactly as - u = (y, 0) shears along 'bottom'.""" - mesh = ngs.Mesh(SQUARE) - - horizontal = build(mesh, 'bottom') - horizontal.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.y, 0.0)))) - - rotated = build(mesh, 'left') - rotated.update(set_velocity(mesh, ngs.CoefficientFunction((0.0, ngs.x)))) - - assert tau_on_marked(horizontal) == pytest.approx(MU, rel=1e-9) - assert tau_on_marked(rotated) == pytest.approx(MU, rel=1e-9) - - -def test_tau_is_floored_positive_before_the_first_update(): - """eval_nu_t must be safe (sqrt, log) even if update() has not run.""" - mesh = ngs.Mesh(SQUARE) - wf = build(mesh, 'bottom') - assert wf.tau_cell.vec.FV().NumPy().min() > 0.0 - - -def test_zero_velocity_keeps_tau_positive(): - mesh = ngs.Mesh(SQUARE) - wf = build(mesh, 'bottom') - wf.update(set_velocity(mesh, ngs.CoefficientFunction((0.0, 0.0)))) - assert wf.tau_cell.vec.FV().NumPy().min() > 0.0 +def test_marked_cells_are_the_closest_cells_to_the_wall(): + mesh = ngs.Mesh(CHANNEL) + wf = build(mesh, 'wall') + dist = wf.wall_distance_cell().vec.FV().NumPy() + marked = wf.mask.vec.FV().NumPy() > 0.5 + assert dist[marked].max() < dist[~marked].max() # ---------------------------------------------------------------------- @@ -299,7 +252,8 @@ def test_low_yplus_selects_zero_wall_viscosity(channel_wf): mesh, wf = channel_wf marked, k = force_yplus(wf, 5.0) # below 11.25 nu_t = sample_nu_t(wf, mesh, k=k, eps=1.0) - assert nu_t[marked] == pytest.approx(0.0, abs=1e-12) + owners = wf.wall_facet_mask().vec.FV().NumPy() > 0.5 + assert nu_t[owners] == pytest.approx(0.0, abs=1e-12) def test_log_range_yplus_selects_the_log_law(channel_wf): @@ -307,14 +261,34 @@ def test_log_range_yplus_selects_the_log_law(channel_wf): yplus = 50.0 marked, k = force_yplus(wf, yplus) nu_t = sample_nu_t(wf, mesh, k=k, eps=1.0) - expected = NU * (0.41 * yplus - 1) + expected = wall_law_nu_t(yplus) assert expected > 0 - assert nu_t[marked] == pytest.approx(expected, rel=1e-6) + owners = wf.wall_facet_mask().vec.FV().NumPy() > 0.5 + assert nu_t[owners] == pytest.approx(expected, rel=1e-6) -@pytest.mark.parametrize('threshold', [11.25, 30.0]) -def test_wall_viscosity_is_continuous_at_transition_thresholds(channel_wf, threshold): +def test_wall_viscosity_varies_across_the_wall_cell(channel_wf): + """eval_nu_wall takes y+ from the continuous Eikonal field, so the coefficient + varies inside the element instead of being one number per cell. The target y+ + keeps the whole cell inside the log-law band, so the variation measured here is + the log law's own, not the switch to bulk at YPLUS_LOG_MAX.""" mesh, wf = channel_wf + _, k = force_yplus(wf, 60.0) + nu_t = wf.eval_nu_wall(ngs.CoefficientFunction(k), ngs.CoefficientFunction(1.0)) + + cellwise_mean = ngs.GridFunction(wf._fes0) + cellwise_mean.Set(nu_t) + spread = ngs.Integrate((nu_t - cellwise_mean) ** 2, mesh) + magnitude = ngs.Integrate(cellwise_mean ** 2, mesh) + + assert np.sqrt(spread / magnitude) > 0.05 + + +def test_wall_viscosity_is_continuous_at_the_sublayer_threshold(channel_wf): + """The log law is <= 0 at YPLUS_VISCOUS and clamped to zero, so the sublayer + branch joins it continuously.""" + mesh, wf = channel_wf + threshold = wf.YPLUS_VISCOUS samples = [] for yplus in (threshold - 1e-5, threshold + 1e-5): marked, k = force_yplus(wf, yplus) @@ -325,14 +299,26 @@ def test_wall_viscosity_is_continuous_at_transition_thresholds(channel_wf, thres assert np.max(np.abs(samples[1] - samples[0]) / scale) < 1e-4 -def test_high_yplus_remains_on_wall_law_inside_the_mask(channel_wf): +def test_yplus_above_the_log_law_limit_falls_back_to_bulk(channel_wf): + """Past YPLUS_LOG_MAX the log law no longer applies, so even wall cells take + the bulk C_mu*k^2/epsilon value.""" mesh, wf = channel_wf - yplus = 500.0 - marked, k = force_yplus(wf, yplus) + marked, k = force_yplus(wf, 5.0 * wf.YPLUS_LOG_MAX) eps = 2.5 nu_t = sample_nu_t(wf, mesh, k=k, eps=eps) - expected = NU * (0.41 * yplus - 1.0) - assert nu_t[marked] == pytest.approx(expected, rel=1e-6) + + kvals = k.vec.FV().NumPy() + owners = wf.wall_facet_mask().vec.FV().NumPy() > 0.5 + assert nu_t[owners] == pytest.approx(0.09 * kvals[owners] ** 2 / eps, rel=1e-6) + + +def test_wall_law_holds_across_the_whole_log_layer(channel_wf): + mesh, wf = channel_wf + owners = wf.wall_facet_mask().vec.FV().NumPy() > 0.5 + for yplus in (20.0, 60.0, 150.0, 199.0): + _, k = force_yplus(wf, yplus) + nu_t = sample_nu_t(wf, mesh, k=k, eps=2.5) + assert nu_t[owners] == pytest.approx(wall_law_nu_t(yplus), rel=1e-6), yplus def test_unmarked_cells_use_bulk_even_when_their_yplus_is_low(channel_wf): @@ -346,7 +332,8 @@ def test_unmarked_cells_use_bulk_even_when_their_yplus_is_low(channel_wf): kvals = k.vec.FV().NumPy() bulk = 0.09 * kvals ** 2 / eps assert nu_t[~marked] == pytest.approx(bulk[~marked], rel=1e-6) - assert nu_t[marked] == pytest.approx(0.0, abs=1e-12) # and the layer differs + owners = wf.wall_facet_mask().vec.FV().NumPy() > 0.5 + assert nu_t[owners] == pytest.approx(0.0, abs=1e-12) yplus = ngs.GridFunction(wf._fes0) yplus.Set(wf.y_plus_cell(k)) @@ -362,6 +349,24 @@ def test_bulk_viscosity_matches_the_plain_k_epsilon_formula(channel_wf): assert nu_t[~marked] == pytest.approx(0.09 * k ** 2 / eps, rel=1e-6) +def test_wall_layer_neighbours_inherit_wall_owner_friction_velocity(channel_wf): + _, wf = channel_wf + k = ngs.GridFunction(wf._fes0) + values = k.vec.FV().NumPy() + values[:] = 1e6 # Must not determine u_tau in non-owner wall-layer cells. + values[wf._marked] = np.linspace(0.2, 0.8, wf._marked.sum()) + + wf.update(k) + u_tau = wf.u_tau_cell.vec.FV().NumPy() + for element_number, source_numbers in wf._wall_layer_sources.items(): + expected = np.mean([ + u_tau[wf._element_dofs[source_number][0]] + for source_number in source_numbers + ]) + assert u_tau[list(wf._element_dofs[element_number])] == pytest.approx( + expected, rel=1e-12) + + def test_negative_viscosity_is_clamped_to_zero(channel_wf): mesh, wf = channel_wf nu_t = sample_nu_t(wf, mesh, k=1.0, eps=-1.0) # negative bulk @@ -378,5 +383,76 @@ def test_runs_on_a_mesh_with_no_named_regions_or_cylinder_radius(): mesh = ngs.Mesh(CHANNEL) assert set(mesh.GetMaterials()) == {'default'} wf = build(mesh, 'wall') - wf.update(set_velocity(mesh, ngs.CoefficientFunction((ngs.y * (1 - ngs.y), 0.0)))) - assert wf.tau_cell.vec.FV().NumPy().max() > 0 + wf.update(ngs.CoefficientFunction(1.0)) + assert wf.u_tau_cell.vec.FV().NumPy().max() > 0 + + +# ---------------------------------------------------------------------- +# Element type: simplices only +# ---------------------------------------------------------------------- + +@pytest.fixture +def cube_wf(): + """Unit cube of tets, wall on the z = 0 face.""" + mesh = ngs.Mesh(unit_cube.GenerateMesh(maxh=0.25)) + return mesh, build(mesh, 'bottom') + + +def test_tet_mesh_attributes_every_wall_face_to_exactly_one_cell(cube_wf): + mesh, wf = cube_wf + exact = ngs.Integrate(ngs.CoefficientFunction(1.0), mesh, + definedon=mesh.Boundaries('bottom')) + assert wf._wall_measure.sum() == pytest.approx(exact, rel=1e-12) + + +def test_tet_mask_is_wall_face_owners_plus_one_face_connected_layer(cube_wf): + mesh, wf = cube_wf + wall_cells = elements_owning_a_facet_on(mesh, 'bottom') + assert wall_cells, 'no cell owns a wall face; test is vacuous' + assert marked_element_numbers(wf) == add_one_face_connected_layer(mesh, wall_cells) + + +def test_tet_marked_cells_are_the_closest_cells_to_the_wall(cube_wf): + _, wf = cube_wf + dist = wf.wall_distance_cell().vec.FV().NumPy() + marked = wf.mask.vec.FV().NumPy() > 0.5 + assert dist[marked].max() < dist[~marked].max() + + +def test_tet_wall_distance_is_zero_on_the_wall_and_grows_inward(cube_wf): + mesh, wf = cube_wf + dist = wf.wall_distance_field() + assert abs(dist(mesh(0.5, 0.5, 0.0))) < 1e-8 + samples = [dist(mesh(0.5, 0.5, z)) for z in (0.1, 0.2, 0.3)] + assert all(b > a for a, b in zip(samples, samples[1:])) + assert samples[0] == pytest.approx(0.1, abs=0.05) + + +def test_tet_friction_velocity_is_the_equilibrium_value_on_owners(cube_wf): + _, wf = cube_wf + k = 0.5 + wf.update(ngs.CoefficientFunction(k)) + u_tau = wf.u_tau_cell.vec.FV().NumPy() + assert u_tau[wf._marked] == pytest.approx(0.09 ** 0.25 * np.sqrt(k), rel=1e-9) + assert u_tau[wf.mask.vec.FV().NumPy() < 0.5].max() == 0.0 + + +def test_tet_cells_outside_the_mask_use_bulk_viscosity(cube_wf): + mesh, wf = cube_wf + k, eps = 0.5, 1.0 + wf.update(ngs.CoefficientFunction(k)) + nu_t = ngs.GridFunction(wf._fes0) + nu_t.Set(wf.eval_nu_t(ngs.CoefficientFunction(k), ngs.CoefficientFunction(eps))) + outside = wf.mask.vec.FV().NumPy() < 0.5 + assert nu_t.vec.FV().NumPy()[outside] == pytest.approx(0.09 * k ** 2 / eps, rel=1e-9) + + +@pytest.mark.parametrize('mesh_factory, kind', [ + (lambda: MakeStructured2DMesh(quads=True, nx=4, ny=4), 'QUAD'), + (lambda: MakeStructured3DMesh(hexes=True, nx=3, ny=3, nz=3), 'HEX'), +]) +def test_non_simplicial_meshes_are_refused(mesh_factory, kind): + """Wall functions are not implemented for quads or hexes.""" + mesh = mesh_factory() + with pytest.raises(NotImplementedError, match=kind): + build(mesh, 'bottom') diff --git a/pytests/models/test_k_epsilon.py b/pytests/models/test_k_epsilon.py index f3f42c9..d31461c 100644 --- a/pytests/models/test_k_epsilon.py +++ b/pytests/models/test_k_epsilon.py @@ -1,9 +1,42 @@ """Structural regression tests for the k-epsilon INS model.""" +import inspect +import numpy as np +import re +from types import SimpleNamespace + +import ngsolve as ngs +import pytest +from netgen.geom2d import unit_square + +from opencmp.helpers.limiter import Limiter from opencmp.models import KEpsilonINS, models_dict from opencmp.models.ins import INS +def _turbulence_stub(k_value: float, epsilon_value: float, + ratio: float = 2000.0) -> KEpsilonINS: + """Bare model carrying only what _regularized_turbulence reads.""" + model = object.__new__(KEpsilonINS) + model.model_components = {'u': 0, 'p': 1, 'k': 2, 'epsilon': 3} + model._bounded = False + model.k_floor = 1e-8 + model.epsilon_floor = 1e-4 + model.C_mu = 0.09 + model.kv = [2e-5] + model.max_viscosity_ratio = ratio + model.UIter = SimpleNamespace(components=[ + None, None, + ngs.CoefficientFunction(k_value), + ngs.CoefficientFunction(epsilon_value)]) + model._k_cell = ngs.CoefficientFunction(k_value) + model._epsilon_cell = ngs.CoefficientFunction(epsilon_value) + # The stub carries no velocity, so the strain-based realizability bound + # cannot be evaluated; test_realizability_* builds its own model for that. + model.realizability_limiter = False + return model + + def test_k_epsilon_ins_is_registered_as_an_ins_model() -> None: assert models_dict['KEpsilonINS'] is KEpsilonINS assert issubclass(KEpsilonINS, INS) @@ -32,7 +65,65 @@ def test_k_epsilon_supports_scalar_neumann_boundaries() -> None: assert 'neumann' in model._define_bc_types() -def test_k_epsilon_slope_limiter_is_disabled_by_default() -> None: +def test_k_epsilon_reuses_cached_turbulent_viscosity() -> None: + model = object.__new__(KEpsilonINS) + cached_viscosity = object() + model._turbulent_viscosity = [cached_viscosity] + + assert model._get_turbulent_viscosity(0) is cached_viscosity + + +def test_epsilon_bound_caps_the_eddy_viscosity_ratio() -> None: + """The epsilon bound keeps nu_t/nu below the configured ratio.""" + mesh = ngs.Mesh(unit_square.GenerateMesh(maxh=0.5)) + k, epsilon = _turbulence_stub(0.0149, 1e-4)._regularized_turbulence(0) + ratio = ngs.Integrate(0.09 * k ** 2 / epsilon, mesh) / 2e-5 + assert ratio == pytest.approx(2000.0, rel=1e-9) + + k, epsilon = _turbulence_stub(0.0149, 3e-3)._regularized_turbulence(0) + assert ngs.Integrate(epsilon, mesh) == pytest.approx(3e-3, rel=1e-9) + + +def test_epsilon_k_ratio_is_smoothly_bounded() -> None: + model = object.__new__(KEpsilonINS) + model.max_epsilon_k_ratio = 10.0 + model._bounded = False + + regular = model._epsilon_k_ratio(1.0, 0.1) + floor_state = model._epsilon_k_ratio(1e-8, 1e-4) + + assert regular == pytest.approx(0.1 / 1.01) + assert floor_state < 10.0 + assert floor_state == pytest.approx(1e-4 / 1.001e-5) + + +def test_ins_viscosity_hook_preserves_laminar_behavior() -> None: + model = object.__new__(INS) + model.kv = [1.25, 2.5] + + assert model._get_effective_viscosity(0) == 1.25 + assert model._get_effective_viscosity(1) == 2.5 + + +def test_turbulence_constants_fall_back_to_standard_values() -> None: + """Omitting a constant from [PARAMETERS] must use the prescribed value.""" + model = object.__new__(KEpsilonINS) + + for name, default in KEpsilonINS.DEFAULT_PARAMETERS.items(): + assert model._parameter({}, name) == default + assert model._parameter({'c_mu': {'all': [0.1, 0.1]}}, 'c_mu') == 0.1 + + +def test_every_constant_the_model_reads_has_a_default() -> None: + """_set_model_parameters must not KeyError on a config that omits constants.""" + source = inspect.getsource(KEpsilonINS._set_model_parameters) + requested = set(re.findall(r"_parameter\(\s*parameters,\s*'([a-z_]+)'", source)) + + assert requested, 'parameter reads no longer match the expected pattern' + assert requested <= set(KEpsilonINS.DEFAULT_PARAMETERS) + + +def test_k_epsilon_wall_function_is_enabled_by_default() -> None: class EmptyConfig: def get_item(self, *_args, **_kwargs): raise KeyError @@ -41,52 +132,151 @@ def get_item(self, *_args, **_kwargs): model.config = EmptyConfig() model._pre_init() - assert model.slope_limiter is False + assert model.wall_function is True + assert model.wall_boundary == 'wall' -def test_k_epsilon_slope_limiter_can_be_enabled_explicitly() -> None: - class SlopeLimiterConfig: - def get_item(self, keys, *_args, **_kwargs): - if keys == ['OTHER', 'slope_limiter']: - return True +def test_pre_init_sets_every_documented_option() -> None: + """_pre_init drives itself from DEFAULT_OPTIONS, so the dict is the contract.""" + class EmptyConfig: + def get_item(self, *_args, **_kwargs): raise KeyError model = object.__new__(KEpsilonINS) - model.config = SlopeLimiterConfig() + model.config = EmptyConfig() model._pre_init() - assert model.slope_limiter is True + for key, default in KEpsilonINS.DEFAULT_OPTIONS.items(): + assert getattr(model, key) == default -def test_k_epsilon_reuses_cached_turbulent_viscosity() -> None: - model = object.__new__(KEpsilonINS) - cached_viscosity = object() - model._turbulent_viscosity = [cached_viscosity] +def _limiter_stub(bounded: bool) -> KEpsilonINS: + """Bare model carrying only what _regularized_turbulence reads.""" + model = _turbulence_stub(0.5, 1.0) + model._bounded = bounded + return model - assert model._get_turbulent_viscosity(0) is cached_viscosity +def test_recovered_coefficient_floors_apply_when_solution_is_bounded() -> None: + """Recovered closure fields retain a final coefficient-level safeguard.""" + mesh = ngs.Mesh(unit_square.GenerateMesh(maxh=0.5)) + model = _limiter_stub(True) + model._k_cell = ngs.CoefficientFunction(-1.0) -def test_epsilon_wall_target_is_change_limited_and_relaxed() -> None: - value, limited = KEpsilonINS._relax_epsilon_wall_value( - raw_target=10.0, previous=1.0, relaxation=0.15, - change_factor=2.0) + k, _ = model._regularized_turbulence(0) + assert ngs.Integrate(k, mesh) == pytest.approx(model.k_floor, rel=1e-9) - assert limited is True - assert value == 1.15 +def test_coefficient_floors_still_apply_on_unbounded_spaces() -> None: + mesh = ngs.Mesh(unit_square.GenerateMesh(maxh=0.5)) + model = _limiter_stub(False) + model._k_cell = ngs.CoefficientFunction(-1.0) -def test_epsilon_wall_target_accepts_unlimited_change() -> None: - value, limited = KEpsilonINS._relax_epsilon_wall_value( - raw_target=1.5, previous=1.0, relaxation=0.2, - change_factor=2.0) + k, _ = model._regularized_turbulence(0) + assert ngs.Integrate(k, mesh) == pytest.approx(model.k_floor, rel=1e-9) - assert limited is False - assert value == 1.1 +def test_bound_epsilon_applies_in_both_modes() -> None: + """boundEpsilon depends on the local k, so no limiter can impose it; it must + survive whether or not the slope limiter is on.""" + mesh = ngs.Mesh(unit_square.GenerateMesh(maxh=0.5)) + for bounded in (True, False): + model = _limiter_stub(bounded) + _, epsilon = model._regularized_turbulence(0) + ratio = ngs.Integrate(0.09 * 0.5 ** 2 / epsilon, mesh) / 2e-5 + assert ratio <= 2000.0 + 1e-6, bounded -def test_ins_viscosity_hook_preserves_laminar_behavior() -> None: - model = object.__new__(INS) - model.kv = [1.25, 2.5] - assert model._get_kinematic_viscosity(0) == 1.25 - assert model._get_kinematic_viscosity(1) == 2.5 +def test_bezier_bound_holds_k_above_its_floor_inside_the_element() -> None: + """What the dropped coefficient guards relied on: the limited polynomial is above + the floor everywhere in the element, not just at the DOFs.""" + mesh = ngs.Mesh(unit_square.GenerateMesh(maxh=0.5)) + fes = ngs.L2(mesh, order=1) + field = ngs.GridFunction(fes) + field.Set(ngs.x - 0.5) # negative over half the domain + floor = 1e-8 + + Limiter(mesh).bezier_bound(field, fes, fes.globalorder, (floor, 1e20)) + + # Sample the limited polynomial densely rather than trusting the DOFs. + below = ngs.Integrate(ngs.IfPos(floor - field, 1.0, 0.0), mesh) + assert below == pytest.approx(0.0, abs=1e-12) + + +def test_floored_epsilon_does_not_inflate_bulk_viscosity_to_the_cap() -> None: + """A bounded epsilon sitting at its floor is a clamped undershoot, not physics. + + Trusting C_mu*k**2/epsilon there saturates nu_t at the viscosity cap and paints + cap-to-zero jumps against neighbouring cells (the backward-facing-step scar). + The bulk viscosity must fade out instead. + """ + mesh = ngs.Mesh(unit_square.GenerateMesh(maxh=0.5)) + model = _turbulence_stub(2.6e-3, 1e-8) # moderate k, epsilon at its floor + model._bounded = True + model._wallf = None + model.epsilon_floor = 1e-8 + + nu_t = ngs.Integrate(model._build_turbulent_viscosity(0), mesh) + cap = model.max_viscosity_ratio * model.kv[0] + assert nu_t < 0.05 * cap + + # A healthy epsilon must be essentially untouched by the trust factor. + model = _turbulence_stub(2.6e-3, 3e-4) + model._bounded = True + model._wallf = None + model.epsilon_floor = 1e-8 + nu_t = ngs.Integrate(model._build_turbulent_viscosity(0), mesh) + expected = 0.09 * 2.6e-3 ** 2 / 3e-4 + assert nu_t == pytest.approx(expected, rel=0.01) + + +def _realizability_model(k_value: float, epsilon_value: float, + mesh: ngs.Mesh, a: float = 1.0) -> KEpsilonINS: + """Stub with a real velocity field so the strain-rate bound can be evaluated.""" + model = _turbulence_stub(k_value, epsilon_value) + model.realizability_limiter = True + model.realizability_coefficient = a + model._wallf = None + model._bounded = False + fes = ngs.VectorH1(mesh, order=1) + u = ngs.GridFunction(fes) + u.Set(ngs.CoefficientFunction((ngs.y, 0.0))) # grad u = [[0,1],[0,0]] -> S = 1 + model.UIter = SimpleNamespace(components=[u, None, + ngs.CoefficientFunction(k_value), + ngs.CoefficientFunction(epsilon_value)]) + return model + + +def test_realizability_bound_caps_nu_t_by_the_strain_rate() -> None: + """Durbin: nu_t <= a*k/(sqrt(6)*S). With u=(y,0) the strain magnitude S is 1, + so a collapsing epsilon must not drive nu_t past a*k/sqrt(6).""" + mesh = ngs.Mesh(unit_square.GenerateMesh(maxh=0.5)) + k_value = 1e-2 + model = _realizability_model(k_value, 1e-12, mesh) # epsilon -> 0 + area = ngs.Integrate(ngs.CoefficientFunction(1.0), mesh) + nu_t = ngs.Integrate(model._build_turbulent_viscosity(0), mesh) / area + + expected = k_value / np.sqrt(6.0) + assert nu_t == pytest.approx(expected, rel=1e-6) + + # Without the bound this same state saturates the viscosity-ratio cap, + # which is the 0-to-cap jump that wrecks the high-order solve. + unlimited = _realizability_model(k_value, 1e-12, mesh) + unlimited.realizability_limiter = False + cap = unlimited.max_viscosity_ratio * unlimited.kv[0] + nu_t_unlimited = ngs.Integrate( + unlimited._build_turbulent_viscosity(0), mesh) / area + + assert nu_t_unlimited == pytest.approx(cap, rel=1e-6) + assert nu_t < nu_t_unlimited + + +def test_realizability_bound_is_inactive_when_bulk_nu_t_is_small() -> None: + """The bound is a max-of-two min; a healthy k-epsilon state must pass through.""" + mesh = ngs.Mesh(unit_square.GenerateMesh(maxh=0.5)) + k_value, epsilon_value = 1e-3, 1.0 # C_mu k^2/eps = 9e-11, tiny + model = _realizability_model(k_value, epsilon_value, mesh) + area = ngs.Integrate(ngs.CoefficientFunction(1.0), mesh) + nu_t = ngs.Integrate(model._build_turbulent_viscosity(0), mesh) / area + + assert nu_t == pytest.approx(0.09 * k_value ** 2 / epsilon_value, rel=1e-6) From 1c5aca4c9c90214babb74c988557de8b99ea5cea Mon Sep 17 00:00:00 2001 From: arshiiyyaa Date: Sat, 8 Aug 2026 15:37:00 -0400 Subject: [PATCH 4/8] Add backward-facing-step k-epsilon example --- .../backward_facing_step.msh | 1010 +++++++++++++++++ .../backward_facing_step/bc_dir/bc_config | 14 + examples/backward_facing_step/config | 45 + examples/backward_facing_step/config_IC | 26 + .../backward_facing_step/ic_dir/ic_config | 8 + .../model_dir/model_config | 25 + examples/tutorial_6/config | 5 +- 7 files changed, 1131 insertions(+), 2 deletions(-) create mode 100644 examples/backward_facing_step/backward_facing_step.msh create mode 100644 examples/backward_facing_step/bc_dir/bc_config create mode 100644 examples/backward_facing_step/config create mode 100644 examples/backward_facing_step/config_IC create mode 100644 examples/backward_facing_step/ic_dir/ic_config create mode 100644 examples/backward_facing_step/model_dir/model_config diff --git a/examples/backward_facing_step/backward_facing_step.msh b/examples/backward_facing_step/backward_facing_step.msh new file mode 100644 index 0000000..cb3803f --- /dev/null +++ b/examples/backward_facing_step/backward_facing_step.msh @@ -0,0 +1,1010 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$PhysicalNames +4 +1 1 "inlet" +1 2 "outlet" +1 3 "wall" +2 4 "surface" +$EndPhysicalNames +$Nodes +332 +1 -2 1 0 +2 0 1 0 +3 0 0 0 +4 6 0 0 +5 6 2 0 +6 -2 2 0 +7 -1.799999999999167 1 0 +8 -1.6 1 0 +9 -1.400000000001387 1 0 +10 -1.200000000002774 1 0 +11 -1.000000000004117 1 0 +12 -0.8000000000033287 1 0 +13 -0.6000000000024965 1 0 +14 -0.4000000000016644 1 0 +15 -0.200000000000832 1 0 +16 0 0.7999999999999998 0 +17 0 0.6000000000013869 0 +18 0 0.4000000000016644 0 +19 0 0.2000000000008322 0 +20 0.1999999999991098 0 0 +21 0.3999999999982407 0 0 +22 0.5999999999975234 0 0 +23 0.7999999999967187 0 0 +24 0.9999999999956506 0 0 +25 1.199999999994909 0 0 +26 1.399999999994197 0 0 +27 1.599999999993484 0 0 +28 1.799999999992772 0 0 +29 1.999999999992059 0 0 +30 2.199999999991346 0 0 +31 2.399999999990634 0 0 +32 2.599999999989921 0 0 +33 2.799999999989208 0 0 +34 2.999999999988583 0 0 +35 3.199999999989264 0 0 +36 3.399999999990031 0 0 +37 3.599999999990798 0 0 +38 3.799999999991565 0 0 +39 3.999999999992331 0 0 +40 4.199999999993098 0 0 +41 4.399999999993865 0 0 +42 4.599999999994631 0 0 +43 4.799999999995399 0 0 +44 4.999999999996166 0 0 +45 5.199999999996932 0 0 +46 5.399999999997699 0 0 +47 5.599999999998466 0 0 +48 5.799999999999233 0 0 +49 6 0.1999999999996293 0 +50 6 0.3999999999991157 0 +51 6 0.5999999999985328 0 +52 6 0.7999999999979498 0 +53 6 0.9999999999973885 0 +54 6 1.199999999997894 0 +55 6 1.39999999999842 0 +56 6 1.599999999998947 0 +57 6 1.799999999999474 0 +58 5.799999999999445 2 0 +59 5.599999999998889 2 0 +60 5.399999999998333 2 0 +61 5.199999999997778 2 0 +62 4.999999999997396 2 0 +63 4.799999999998888 2 0 +64 4.600000000000552 2 0 +65 4.400000000002217 2 0 +66 4.200000000003882 2 0 +67 4.00000000000546 2 0 +68 3.800000000006102 2 0 +69 3.600000000006657 2 0 +70 3.400000000007211 2 0 +71 3.200000000007766 2 0 +72 3.000000000008321 2 0 +73 2.800000000008876 2 0 +74 2.60000000000943 2 0 +75 2.400000000009986 2 0 +76 2.200000000010541 2 0 +77 2.000000000011009 2 0 +78 1.800000000010541 2 0 +79 1.600000000009986 2 0 +80 1.400000000009431 2 0 +81 1.200000000008877 2 0 +82 1.000000000008322 2 0 +83 0.8000000000077669 2 0 +84 0.6000000000072117 2 0 +85 0.4000000000066581 2 0 +86 0.2000000000061029 2 0 +87 5.547562409446982e-12 2 0 +88 -0.199999999995006 2 0 +89 -0.3999999999955612 2 0 +90 -0.5999999999961165 2 0 +91 -0.7999999999966718 2 0 +92 -0.9999999999972262 2 0 +93 -1.199999999997781 2 0 +94 -1.399999999998336 2 0 +95 -1.59999999999889 2 0 +96 -1.799999999999445 2 0 +97 -2 1.8 0 +98 -2 1.6 0 +99 -2 1.4 0 +100 -2 1.2 0 +101 4.686238564577564 1.826439369062404 0 +102 4.100000000004588 1.829097592743171 0 +103 2.29999999999099 0.1732050807562706 0 +104 2.900266982582167 0.1684391328912609 0 +105 1.105720362773637 0.202598882874703 0 +106 1.719269096019552 0.185930758087967 0 +107 3.500000000006942 1.830327509294952 0 +108 0.8999310967745467 1.829343027594482 0 +109 5.100780508479353 0.1914716551440339 0 +110 3.910499719390977 0.2221927623288611 0 +111 2.700000000009153 1.824024054465305 0 +112 1.900170350578513 1.787528373757573 0 +113 4.502969550439444 0.1954447752431653 0 +114 5.792184776894499 1.119634003310026 0 +115 0.1776897833864012 0.8856749134681841 0 +116 0.1761500901350675 1.124820029747694 0 +117 0.3820087313537173 0.9833348075773506 0 +118 5.276679803052977 1.827858755014612 0 +119 3.486016585367639 0.2138949996262597 0 +120 1.301987361433146 1.802337764717296 0 +121 0.7334569248735814 0.1699238539150116 0 +122 3.105046367094101 1.812191688839357 0 +123 2.283333333343617 1.835313130139828 0 +124 -1.500000000000693 1.173205080755686 0 +125 -1.076024313900989 1.170843495964224 0 +126 5.523914676281127 0.184517724994134 0 +127 5.836456768665595 0.7003481059369611 0 +128 -0.2953070018550897 1.848529335280539 0 +129 -0.703019197757671 1.795782719262869 0 +130 0.5007487991988814 1.801555760682908 0 +131 0.1000000000058254 1.824033908545446 0 +132 -1.299999999998058 1.826794919242632 0 +133 -0.5011460944051368 1.192515925511272 0 +134 0.1724877132011154 0.5158678629019057 0 +135 5.794789806131725 1.484431070830197 0 +136 -0.03853485367145083 1.197895525321071 0 +137 0.3950532145581871 1.261359919078641 0 +138 0.6268601205434341 1.114911479541737 0 +139 0.6027945588794311 0.8242379515023555 0 +140 0.8612318345408184 0.9516724127338992 0 +141 -1.82602364516333 1.500345786337022 0 +142 0.8856341247903622 1.248384235113689 0 +143 1.12993227496792 1.086938400498128 0 +144 1.107146827173548 0.7860096184557481 0 +145 1.377855389634628 0.9214515690196039 0 +146 1.395405546042298 1.222819028997906 0 +147 1.647341146637785 1.059567663235435 0 +148 1.628491731708219 0.7576332974530835 0 +149 1.897450614255755 0.8953505360005487 0 +150 1.915001196657835 1.210519192850917 0 +151 2.167225797358969 1.049232211532971 0 +152 2.150190553527101 0.7322415516175567 0 +153 2.417807845927317 0.8710533580916501 0 +154 2.444701634191844 1.184448823070601 0 +155 2.685088067593386 1.004058859887813 0 +156 2.66909212567416 0.7049709736635658 0 +157 2.93659925595609 0.8403154794988904 0 +158 2.954029704268609 1.137044717100128 0 +159 3.204306555098864 0.975642976401368 0 +160 3.217693042475834 1.273901144758296 0 +161 3.4694421003114 1.111863480519187 0 +162 3.455861571273772 0.8110808231319919 0 +163 3.723240250674173 0.9472720332428707 0 +164 3.733991508464879 1.249813469508205 0 +165 3.987981007055795 1.085983249907901 0 +166 3.977118455977911 0.7817988153354128 0 +167 4.243618208111709 0.9189992267986413 0 +168 4.254927085469895 1.22310704456824 0 +169 4.508349912234545 1.057631414137118 0 +170 4.497565019812634 0.7567475437058591 0 +171 4.762887316308166 0.8930139098913406 0 +172 4.776314311206161 1.193269983204579 0 +173 5.028135998361598 1.029599380454967 0 +174 5.012931617739649 0.7299542899552905 0 +175 5.041487191819557 1.329407284101716 0 +176 5.278979761234668 0.865940811202314 0 +177 5.253580767870099 0.589931347836451 0 +178 0.2932379253257893 0.1677257260236711 0 +179 5.834881280677875 0.2929565374615258 0 +180 2.977116870055915 1.432488412033959 0 +181 2.914875353768803 0.5387150996759096 0 +182 2.626511822612821 0.4044298598533822 0 +183 4.786090769440171 1.469269738608003 0 +184 5.690146869350933 1.829077138072369 0 +185 -1.706872423344082 1.834692601580531 0 +186 -0.2589189885928983 1.215321741960722 0 +187 -0.3988766904207787 1.396032610836809 0 +188 -0.6485262053112669 1.376090623552919 0 +189 -0.1189522940448983 1.415678544452322 0 +190 5.07524054477021 1.638139588505752 0 +191 5.31881621242096 1.454621482510748 0 +192 3.230278202524108 1.566643129894465 0 +193 0.1407416526658747 1.411708179738982 0 +194 0.3986974899198324 1.57077335038091 0 +195 4.996465287453089 0.4204514484979262 0 +196 0.8305537603252682 0.6120131001573788 0 +197 0.5689108964396347 0.5826495722464345 0 +198 1.109140824531757 0.4753852899392799 0 +199 -0.5589453338169241 1.591572132120592 0 +200 -0.8099901989119963 1.571228981658154 0 +201 2.399628144871577 0.5839357243732363 0 +202 2.161325203863341 0.421070823764873 0 +203 1.365401980417501 0.6199370186992228 0 +204 1.621223569321427 0.4259962154092066 0 +205 1.333581122838785 0.3409407958434865 0 +206 1.8857037647803 0.5946358919740145 0 +207 3.485408810470543 1.440113592306903 0 +208 3.753565317541011 1.55727840865057 0 +209 4.000180762502816 1.379528294780626 0 +210 4.248962023878539 1.485687934247104 0 +211 4.754765453891689 0.5927638430020564 0 +212 4.503424918508618 0.4627934452450116 0 +213 4.726270868380606 0.3308640158083687 0 +214 4.290018420561697 0.3236353308267972 0 +215 4.22447619656728 0.5831777264059897 0 +216 3.938978100793673 0.4930887212138704 0 +217 0.8999999999961902 0.3201119636692384 0 +218 3.708844631049761 0.6499756500227293 0 +219 3.422458680453483 0.5005552655525709 0 +220 4.515345914949472 1.343094481540985 0 +221 3.694466286174452 0.3753661913724116 0 +222 3.246465949039735 0.3061128305631222 0 +223 1.13138853291965 1.419936678952514 0 +224 1.408882458261753 1.559579110671844 0 +225 0.8939546457502919 1.489151269006771 0 +226 1.661303800265996 1.366070871340873 0 +227 1.906397282050399 1.518518080735924 0 +228 1.679458981862772 1.649292402580255 0 +229 2.107779342532455 1.677615954778338 0 +230 2.19534126959367 1.411977228671172 0 +231 2.525004303037893 1.471123864658214 0 +232 -0.928976672427516 1.776605850358611 0 +233 -1.030938424769196 1.584151741167557 0 +234 5.294097367813141 1.168126166993076 0 +235 5.588133196921855 1.303449977533188 0 +236 5.590251118892214 1.611977716952264 0 +237 3.181577900894001 0.6908896750813597 0 +238 5.551480671158087 1.00981524812135 0 +239 5.581469139990181 0.7149276743616437 0 +240 4.504579659106617 1.64210383075794 0 +241 -0.9028041561977758 1.342492122640766 0 +242 0.34601893466079 0.697074647167095 0 +243 5.496196172515599 0.4384582074379365 0 +244 -1.699079982418605 1.16347669827633 0 +245 -1.625539082127074 1.391821196712449 0 +246 -1.390945997043657 1.388362276240476 0 +247 -1.476369416462751 1.602462256104606 0 +248 -1.286853376905641 1.184915910079365 0 +249 -0.4999999999958389 1.826794919242632 0 +250 4.112004827002483 0.1735061596488599 0 +251 3.892260886261507 1.808477159316039 0 +252 4.317429943187091 1.830399045301216 0 +253 5.320148559544607 0.1957949626423145 0 +254 0.7000000000074891 1.826794919242633 0 +255 0.2999529157466118 1.81731490918177 0 +256 5.0903840695633 1.858558652552973 0 +257 2.699999999989565 0.1732050807563221 0 +258 3.305887428274557 1.811623008700638 0 +259 2.900841061189608 1.821128371934886 0 +260 2.773277878389123 1.591539020427145 0 +261 1.515054800264559 1.808078722950346 0 +262 1.1000000000086 1.826794919242633 0 +263 2.497222222231934 1.827640481095631 0 +264 -1.524415050230862 1.818276126281701 0 +265 5.499999999998613 1.82679491924264 0 +266 2.504418637094094 0.1848481362892386 0 +267 2.077184519826266 0.179353475891939 0 +268 1.901781915127447 0.3312884961603533 0 +269 0.5135573076539477 0.1845327724295703 0 +270 1.49999999999384 0.1732050807562699 0 +271 -0.09999999999472919 1.826794919242633 0 +272 3.695393384682455 1.818556233436428 0 +273 4.908643863151041 1.832914827529244 0 +274 -0.009124275109356261 1.620032327904598 0 +275 1.200000000008876 1.637637323648934 0 +276 2.7218068395392 1.298514471736989 0 +277 0.6571713707967266 1.428154626300319 0 +278 4.008458671312569 1.634100687074751 0 +279 -0.2830293707482307 1.646490684154303 0 +280 4.890894840986847 0.1782738743140262 0 +281 -1.83987174742292 1.300000000000001 0 +282 0.1603867208983705 0.3010169378234785 0 +283 0.3741690297176044 0.3962381217037159 0 +284 5.839871747423124 1.69999999999921 0 +285 -1.841792112863231 1.705892252628177 0 +286 3.102096992006282 0.1686942274773882 0 +287 0.600000000007212 1.629550220662123 0 +288 3.699342754434295 0.1687729277610702 0 +289 4.501649633374808 1.859788449024312 0 +290 -0.7066151454243625 1.171689125665035 0 +291 5.199999999996932 0.3603221882777825 0 +292 -1.123357132097524 1.801349139820951 0 +293 5.705161223572887 0.1599081343028569 0 +294 0.1578012058330669 0.6999280208011465 0 +295 1.699240590392414 1.845632231250506 0 +296 5.835021555989616 1.301503010333945 0 +297 5.793598559451394 0.8907875052875532 0 +298 5.770899321004011 0.4974293334840442 0 +299 2.579100880735619 1.673583191592095 0 +300 2.364630225245864 1.649542308489213 0 +301 0.1900382547487134 1.649957975830466 0 +302 2.997312075850571 1.644798124625962 0 +303 2.399999999990635 0.3582487963694569 0 +304 3.006350780253262 0.3460025002015829 0 +305 1.899647106191619 0.1393145460280518 0 +306 1.307860297119074 0.1433489518948919 0 +307 -0.8970887231061145 1.137004948854005 0 +308 2.100000000010775 1.854162342032347 0 +309 3.412405555236477 1.66196634789231 0 +310 0.9020396338807564 0.1428981537898414 0 +311 0.6669556710979763 0.3787814882523503 0 +312 -1.271307573071481 1.614336188837809 0 +313 -1.159812306981456 1.380850289155032 0 +314 4.699999999995015 0.1415999814867391 0 +315 4.300713256853935 0.1393985340447074 0 +316 3.299999999989645 0.1391945575491286 0 +317 3.584364598772408 1.664661189642526 0 +318 0.1453918529114031 0.1453918529118733 0 +319 5.854608147088254 0.1453918529114392 0 +320 -1.666835288365222 1.642248369940747 0 +321 4.795999326636764 1.678138148849403 0 +322 3.155100407823008 0.4783585467905994 0 +323 5.6662105348103 0.3146539875360995 0 +324 5.352197535826995 1.671878492445203 0 +325 2.829600987841324 0.3261583346756916 0 +326 1.001371283143341 1.664937792814374 0 +327 0.7979361202195273 1.672982990845162 0 +328 4.200000000003853 1.683303682711463 0 +329 4.097129331913555 0.3567576179590858 0 +330 -1.854608147088865 1.145391852910908 0 +331 5.854608147088609 1.854608147088609 0 +332 -1.85460814708892 1.854608147089072 0 +$EndNodes +$Elements +662 +1 1 2 3 1 1 7 +2 1 2 3 1 7 8 +3 1 2 3 1 8 9 +4 1 2 3 1 9 10 +5 1 2 3 1 10 11 +6 1 2 3 1 11 12 +7 1 2 3 1 12 13 +8 1 2 3 1 13 14 +9 1 2 3 1 14 15 +10 1 2 3 1 15 2 +11 1 2 3 2 2 16 +12 1 2 3 2 16 17 +13 1 2 3 2 17 18 +14 1 2 3 2 18 19 +15 1 2 3 2 19 3 +16 1 2 3 3 3 20 +17 1 2 3 3 20 21 +18 1 2 3 3 21 22 +19 1 2 3 3 22 23 +20 1 2 3 3 23 24 +21 1 2 3 3 24 25 +22 1 2 3 3 25 26 +23 1 2 3 3 26 27 +24 1 2 3 3 27 28 +25 1 2 3 3 28 29 +26 1 2 3 3 29 30 +27 1 2 3 3 30 31 +28 1 2 3 3 31 32 +29 1 2 3 3 32 33 +30 1 2 3 3 33 34 +31 1 2 3 3 34 35 +32 1 2 3 3 35 36 +33 1 2 3 3 36 37 +34 1 2 3 3 37 38 +35 1 2 3 3 38 39 +36 1 2 3 3 39 40 +37 1 2 3 3 40 41 +38 1 2 3 3 41 42 +39 1 2 3 3 42 43 +40 1 2 3 3 43 44 +41 1 2 3 3 44 45 +42 1 2 3 3 45 46 +43 1 2 3 3 46 47 +44 1 2 3 3 47 48 +45 1 2 3 3 48 4 +46 1 2 2 4 4 49 +47 1 2 2 4 49 50 +48 1 2 2 4 50 51 +49 1 2 2 4 51 52 +50 1 2 2 4 52 53 +51 1 2 2 4 53 54 +52 1 2 2 4 54 55 +53 1 2 2 4 55 56 +54 1 2 2 4 56 57 +55 1 2 2 4 57 5 +56 1 2 3 5 5 58 +57 1 2 3 5 58 59 +58 1 2 3 5 59 60 +59 1 2 3 5 60 61 +60 1 2 3 5 61 62 +61 1 2 3 5 62 63 +62 1 2 3 5 63 64 +63 1 2 3 5 64 65 +64 1 2 3 5 65 66 +65 1 2 3 5 66 67 +66 1 2 3 5 67 68 +67 1 2 3 5 68 69 +68 1 2 3 5 69 70 +69 1 2 3 5 70 71 +70 1 2 3 5 71 72 +71 1 2 3 5 72 73 +72 1 2 3 5 73 74 +73 1 2 3 5 74 75 +74 1 2 3 5 75 76 +75 1 2 3 5 76 77 +76 1 2 3 5 77 78 +77 1 2 3 5 78 79 +78 1 2 3 5 79 80 +79 1 2 3 5 80 81 +80 1 2 3 5 81 82 +81 1 2 3 5 82 83 +82 1 2 3 5 83 84 +83 1 2 3 5 84 85 +84 1 2 3 5 85 86 +85 1 2 3 5 86 87 +86 1 2 3 5 87 88 +87 1 2 3 5 88 89 +88 1 2 3 5 89 90 +89 1 2 3 5 90 91 +90 1 2 3 5 91 92 +91 1 2 3 5 92 93 +92 1 2 3 5 93 94 +93 1 2 3 5 94 95 +94 1 2 3 5 95 96 +95 1 2 3 5 96 6 +96 1 2 1 6 6 97 +97 1 2 1 6 97 98 +98 1 2 1 6 98 99 +99 1 2 1 6 99 100 +100 1 2 1 6 100 1 +101 2 2 4 1 269 311 283 +102 2 2 4 1 190 324 118 +103 2 2 4 1 119 221 219 +104 2 2 4 1 105 205 198 +105 2 2 4 1 219 222 119 +106 2 2 4 1 224 261 120 +107 2 2 4 1 249 279 128 +108 2 2 4 1 260 299 231 +109 2 2 4 1 243 253 126 +110 2 2 4 1 130 255 194 +111 2 2 4 1 2 136 15 +112 2 2 4 1 112 228 227 +113 2 2 4 1 151 230 150 +114 2 2 4 1 154 230 151 +115 2 2 4 1 14 186 133 +116 2 2 4 1 118 256 190 +117 2 2 4 1 15 186 14 +118 2 2 4 1 136 186 15 +119 2 2 4 1 113 213 212 +120 2 2 4 1 231 276 260 +121 2 2 4 1 204 270 106 +122 2 2 4 1 251 272 208 +123 2 2 4 1 106 268 204 +124 2 2 4 1 243 291 253 +125 2 2 4 1 252 328 240 +126 2 2 4 1 105 306 205 +127 2 2 4 1 134 283 242 +128 2 2 4 1 199 279 249 +129 2 2 4 1 227 229 112 +130 2 2 4 1 202 267 103 +131 2 2 4 1 228 261 224 +132 2 2 4 1 92 232 91 +133 2 2 4 1 243 298 239 +134 2 2 4 1 216 221 110 +135 2 2 4 1 195 280 109 +136 2 2 4 1 113 314 213 +137 2 2 4 1 191 324 190 +138 2 2 4 1 260 276 180 +139 2 2 4 1 236 284 184 +140 2 2 4 1 154 231 230 +141 2 2 4 1 205 270 204 +142 2 2 4 1 222 316 119 +143 2 2 4 1 283 311 197 +144 2 2 4 1 230 300 229 +145 2 2 4 1 240 289 252 +146 2 2 4 1 192 258 122 +147 2 2 4 1 132 264 247 +148 2 2 4 1 116 193 136 +149 2 2 4 1 196 311 217 +150 2 2 4 1 91 232 129 +151 2 2 4 1 239 297 238 +152 2 2 4 1 112 295 228 +153 2 2 4 1 128 279 271 +154 2 2 4 1 120 275 224 +155 2 2 4 1 198 217 105 +156 2 2 4 1 212 214 113 +157 2 2 4 1 208 278 251 +158 2 2 4 1 119 288 221 +159 2 2 4 1 198 205 203 +160 2 2 4 1 196 217 198 +161 2 2 4 1 103 303 202 +162 2 2 4 1 229 300 123 +163 2 2 4 1 255 301 194 +164 2 2 4 1 235 238 114 +165 2 2 4 1 137 193 116 +166 2 2 4 1 121 311 269 +167 2 2 4 1 243 323 298 +168 2 2 4 1 271 279 274 +169 2 2 4 1 129 200 199 +170 2 2 4 1 129 232 200 +171 2 2 4 1 115 242 117 +172 2 2 4 1 213 280 195 +173 2 2 4 1 150 230 227 +174 2 2 4 1 110 329 216 +175 2 2 4 1 203 205 204 +176 2 2 4 1 194 287 130 +177 2 2 4 1 212 213 211 +178 2 2 4 1 275 326 223 +179 2 2 4 1 204 268 206 +180 2 2 4 1 135 236 235 +181 2 2 4 1 239 298 127 +182 2 2 4 1 184 265 236 +183 2 2 4 1 175 190 183 +184 2 2 4 1 127 297 239 +185 2 2 4 1 242 283 197 +186 2 2 4 1 182 266 257 +187 2 2 4 1 240 321 101 +188 2 2 4 1 211 213 195 +189 2 2 4 1 242 294 134 +190 2 2 4 1 166 216 215 +191 2 2 4 1 227 228 226 +192 2 2 4 1 152 206 202 +193 2 2 4 1 164 208 207 +194 2 2 4 1 168 210 209 +195 2 2 4 1 145 203 148 +196 2 2 4 1 156 201 182 +197 2 2 4 1 156 182 181 +198 2 2 4 1 166 215 167 +199 2 2 4 1 203 204 148 +200 2 2 4 1 186 187 133 +201 2 2 4 1 240 328 210 +202 2 2 4 1 168 209 165 +203 2 2 4 1 212 215 214 +204 2 2 4 1 226 228 224 +205 2 2 4 1 186 189 187 +206 2 2 4 1 196 198 144 +207 2 2 4 1 138 277 137 +208 2 2 4 1 219 221 218 +209 2 2 4 1 152 202 201 +210 2 2 4 1 137 277 194 +211 2 2 4 1 223 326 225 +212 2 2 4 1 183 240 220 +213 2 2 4 1 135 284 236 +214 2 2 4 1 162 218 163 +215 2 2 4 1 144 203 145 +216 2 2 4 1 202 268 267 +217 2 2 4 1 247 312 132 +218 2 2 4 1 172 220 169 +219 2 2 4 1 162 219 218 +220 2 2 4 1 117 242 139 +221 2 2 4 1 170 211 171 +222 2 2 4 1 140 196 144 +223 2 2 4 1 164 207 161 +224 2 2 4 1 175 191 190 +225 2 2 4 1 234 238 235 +226 2 2 4 1 183 220 172 +227 2 2 4 1 214 315 113 +228 2 2 4 1 166 218 216 +229 2 2 4 1 164 209 208 +230 2 2 4 1 168 220 210 +231 2 2 4 1 149 206 152 +232 2 2 4 1 146 224 223 +233 2 2 4 1 221 288 110 +234 2 2 4 1 163 218 166 +235 2 2 4 1 198 203 144 +236 2 2 4 1 165 209 164 +237 2 2 4 1 167 215 170 +238 2 2 4 1 176 234 173 +239 2 2 4 1 132 312 292 +240 2 2 4 1 150 227 226 +241 2 2 4 1 169 220 168 +242 2 2 4 1 122 302 192 +243 2 2 4 1 170 212 211 +244 2 2 4 1 204 206 148 +245 2 2 4 1 137 194 193 +246 2 2 4 1 150 226 147 +247 2 2 4 1 157 237 159 +248 2 2 4 1 162 237 219 +249 2 2 4 1 146 226 224 +250 2 2 4 1 159 237 162 +251 2 2 4 1 181 237 157 +252 2 2 4 1 176 238 234 +253 2 2 4 1 143 223 142 +254 2 2 4 1 231 300 230 +255 2 2 4 1 154 276 231 +256 2 2 4 1 153 201 156 +257 2 2 4 1 171 174 173 +258 2 2 4 1 167 169 168 +259 2 2 4 1 167 168 165 +260 2 2 4 1 171 172 169 +261 2 2 4 1 173 175 172 +262 2 2 4 1 163 165 164 +263 2 2 4 1 170 171 169 +264 2 2 4 1 162 163 161 +265 2 2 4 1 163 164 161 +266 2 2 4 1 166 167 165 +267 2 2 4 1 163 166 165 +268 2 2 4 1 171 173 172 +269 2 2 4 1 167 170 169 +270 2 2 4 1 175 183 172 +271 2 2 4 1 174 177 176 +272 2 2 4 1 174 176 173 +273 2 2 4 1 159 162 161 +274 2 2 4 1 160 180 158 +275 2 2 4 1 159 161 160 +276 2 2 4 1 159 160 158 +277 2 2 4 1 157 159 158 +278 2 2 4 1 157 158 155 +279 2 2 4 1 156 181 157 +280 2 2 4 1 156 157 155 +281 2 2 4 1 153 156 155 +282 2 2 4 1 153 155 154 +283 2 2 4 1 152 201 153 +284 2 2 4 1 153 154 151 +285 2 2 4 1 152 153 151 +286 2 2 4 1 149 152 151 +287 2 2 4 1 149 151 150 +288 2 2 4 1 149 150 147 +289 2 2 4 1 148 149 147 +290 2 2 4 1 145 148 147 +291 2 2 4 1 146 223 143 +292 2 2 4 1 145 147 146 +293 2 2 4 1 145 146 143 +294 2 2 4 1 144 145 143 +295 2 2 4 1 176 239 238 +296 2 2 4 1 140 144 143 +297 2 2 4 1 182 303 266 +298 2 2 4 1 250 329 110 +299 2 2 4 1 160 192 180 +300 2 2 4 1 139 197 196 +301 2 2 4 1 140 143 142 +302 2 2 4 1 147 226 146 +303 2 2 4 1 114 296 235 +304 2 2 4 1 148 206 149 +305 2 2 4 1 173 234 175 +306 2 2 4 1 233 241 200 +307 2 2 4 1 101 289 240 +308 2 2 4 1 177 239 176 +309 2 2 4 1 234 235 191 +310 2 2 4 1 269 283 178 +311 2 2 4 1 115 294 242 +312 2 2 4 1 140 142 138 +313 2 2 4 1 139 196 140 +314 2 2 4 1 233 313 241 +315 2 2 4 1 215 329 214 +316 2 2 4 1 161 207 160 +317 2 2 4 1 171 211 174 +318 2 2 4 1 199 249 129 +319 2 2 4 1 210 278 209 +320 2 2 4 1 160 207 192 +321 2 2 4 1 170 215 212 +322 2 2 4 1 183 321 240 +323 2 2 4 1 206 268 202 +324 2 2 4 1 223 225 142 +325 2 2 4 1 174 195 177 +326 2 2 4 1 232 292 233 +327 2 2 4 1 155 276 154 +328 2 2 4 1 180 276 158 +329 2 2 4 1 235 236 191 +330 2 2 4 1 174 211 195 +331 2 2 4 1 175 234 191 +332 2 2 4 1 218 221 216 +333 2 2 4 1 92 292 232 +334 2 2 4 1 292 312 233 +335 2 2 4 1 142 277 138 +336 2 2 4 1 241 313 125 +337 2 2 4 1 220 240 210 +338 2 2 4 1 277 327 287 +339 2 2 4 1 189 279 187 +340 2 2 4 1 241 307 290 +341 2 2 4 1 106 305 268 +342 2 2 4 1 109 291 195 +343 2 2 4 1 273 321 190 +344 2 2 4 1 62 256 61 +345 2 2 4 1 16 115 2 +346 2 2 4 1 11 125 10 +347 2 2 4 1 46 253 45 +348 2 2 4 1 84 254 83 +349 2 2 4 1 71 258 70 +350 2 2 4 1 33 257 32 +351 2 2 4 1 23 121 22 +352 2 2 4 1 10 248 9 +353 2 2 4 1 14 133 13 +354 2 2 4 1 80 261 79 +355 2 2 4 1 18 134 17 +356 2 2 4 1 75 263 74 +357 2 2 4 1 9 124 8 +358 2 2 4 1 89 128 88 +359 2 2 4 1 8 244 7 +360 2 2 4 1 66 252 65 +361 2 2 4 1 40 250 39 +362 2 2 4 1 39 110 38 +363 2 2 4 1 30 267 29 +364 2 2 4 1 88 271 87 +365 2 2 4 1 67 102 66 +366 2 2 4 1 76 123 75 +367 2 2 4 1 37 119 36 +368 2 2 4 1 47 126 46 +369 2 2 4 1 42 113 41 +370 2 2 4 1 85 130 84 +371 2 2 4 1 70 107 69 +372 2 2 4 1 22 269 21 +373 2 2 4 1 27 270 26 +374 2 2 4 1 32 266 31 +375 2 2 4 1 61 118 60 +376 2 2 4 1 94 132 93 +377 2 2 4 1 63 273 62 +378 2 2 4 1 45 109 44 +379 2 2 4 1 83 108 82 +380 2 2 4 1 34 104 33 +381 2 2 4 1 72 122 71 +382 2 2 4 1 25 105 24 +383 2 2 4 1 81 120 80 +384 2 2 4 1 74 111 73 +385 2 2 4 1 90 249 89 +386 2 2 4 1 59 184 58 +387 2 2 4 1 96 185 95 +388 2 2 4 1 31 103 30 +389 2 2 4 1 28 106 27 +390 2 2 4 1 21 178 20 +391 2 2 4 1 87 131 86 +392 2 2 4 1 68 251 67 +393 2 2 4 1 78 112 77 +394 2 2 4 1 86 255 85 +395 2 2 4 1 69 272 68 +396 2 2 4 1 95 264 94 +397 2 2 4 1 60 265 59 +398 2 2 4 1 91 129 90 +399 2 2 4 1 64 101 63 +400 2 2 4 1 82 262 81 +401 2 2 4 1 73 259 72 +402 2 2 4 1 38 288 37 +403 2 2 4 1 44 280 43 +404 2 2 4 1 139 242 197 +405 2 2 4 1 65 289 64 +406 2 2 4 1 139 140 138 +407 2 2 4 1 199 200 188 +408 2 2 4 1 35 286 34 +409 2 2 4 1 241 290 188 +410 2 2 4 1 158 276 155 +411 2 2 4 1 268 305 267 +412 2 2 4 1 116 136 2 +413 2 2 4 1 13 290 12 +414 2 2 4 1 187 279 199 +415 2 2 4 1 272 317 208 +416 2 2 4 1 256 273 190 +417 2 2 4 1 197 311 196 +418 2 2 4 1 93 292 92 +419 2 2 4 1 209 278 208 +420 2 2 4 1 125 307 241 +421 2 2 4 1 177 291 243 +422 2 2 4 1 117 139 138 +423 2 2 4 1 187 188 133 +424 2 2 4 1 210 328 278 +425 2 2 4 1 200 241 188 +426 2 2 4 1 123 308 229 +427 2 2 4 1 229 308 112 +428 2 2 4 1 125 313 248 +429 2 2 4 1 190 321 183 +430 2 2 4 1 225 327 277 +431 2 2 4 1 208 317 207 +432 2 2 4 1 202 303 201 +433 2 2 4 1 245 320 141 +434 2 2 4 1 121 310 217 +435 2 2 4 1 217 310 105 +436 2 2 4 1 247 320 245 +437 2 2 4 1 115 116 2 +438 2 2 4 1 235 296 135 +439 2 2 4 1 246 313 312 +440 2 2 4 1 17 294 16 +441 2 2 4 1 216 329 215 +442 2 2 4 1 79 295 78 +443 2 2 4 1 201 303 182 +444 2 2 4 1 228 295 261 +445 2 2 4 1 224 275 223 +446 2 2 4 1 225 277 142 +447 2 2 4 1 125 248 10 +448 2 2 4 1 9 248 124 +449 2 2 4 1 124 244 8 +450 2 2 4 1 39 250 110 +451 2 2 4 1 128 271 88 +452 2 2 4 1 102 252 66 +453 2 2 4 1 123 263 75 +454 2 2 4 1 126 253 46 +455 2 2 4 1 130 254 84 +456 2 2 4 1 70 258 107 +457 2 2 4 1 257 266 32 +458 2 2 4 1 121 269 22 +459 2 2 4 1 61 256 118 +460 2 2 4 1 62 273 256 +461 2 2 4 1 45 253 109 +462 2 2 4 1 83 254 108 +463 2 2 4 1 122 258 71 +464 2 2 4 1 104 257 33 +465 2 2 4 1 120 261 80 +466 2 2 4 1 74 263 111 +467 2 2 4 1 89 249 128 +468 2 2 4 1 103 267 30 +469 2 2 4 1 187 199 188 +470 2 2 4 1 31 266 103 +471 2 2 4 1 106 270 27 +472 2 2 4 1 21 269 178 +473 2 2 4 1 87 271 131 +474 2 2 4 1 67 251 102 +475 2 2 4 1 85 255 130 +476 2 2 4 1 107 272 69 +477 2 2 4 1 94 264 132 +478 2 2 4 1 118 265 60 +479 2 2 4 1 101 273 63 +480 2 2 4 1 131 255 86 +481 2 2 4 1 68 272 251 +482 2 2 4 1 185 264 95 +483 2 2 4 1 59 265 184 +484 2 2 4 1 108 262 82 +485 2 2 4 1 72 259 122 +486 2 2 4 1 129 249 90 +487 2 2 4 1 81 262 120 +488 2 2 4 1 111 259 73 +489 2 2 4 1 177 243 239 +490 2 2 4 1 110 288 38 +491 2 2 4 1 37 288 119 +492 2 2 4 1 182 325 181 +493 2 2 4 1 252 289 65 +494 2 2 4 1 109 280 44 +495 2 2 4 1 64 289 101 +496 2 2 4 1 136 189 186 +497 2 2 4 1 34 286 104 +498 2 2 4 1 19 282 18 +499 2 2 4 1 48 293 47 +500 2 2 4 1 133 290 13 +501 2 2 4 1 194 301 193 +502 2 2 4 1 274 279 189 +503 2 2 4 1 16 294 115 +504 2 2 4 1 134 294 17 +505 2 2 4 1 3 318 19 +506 2 2 4 1 20 318 3 +507 2 2 4 1 7 330 1 +508 2 2 4 1 4 319 48 +509 2 2 4 1 49 319 4 +510 2 2 4 1 1 330 100 +511 2 2 4 1 246 247 245 +512 2 2 4 1 261 295 79 +513 2 2 4 1 58 331 5 +514 2 2 4 1 5 331 57 +515 2 2 4 1 6 332 96 +516 2 2 4 1 97 332 6 +517 2 2 4 1 78 295 112 +518 2 2 4 1 219 322 222 +519 2 2 4 1 207 317 309 +520 2 2 4 1 18 282 134 +521 2 2 4 1 47 293 126 +522 2 2 4 1 188 290 133 +523 2 2 4 1 232 233 200 +524 2 2 4 1 227 230 229 +525 2 2 4 1 267 305 29 +526 2 2 4 1 28 305 106 +527 2 2 4 1 270 306 26 +528 2 2 4 1 25 306 105 +529 2 2 4 1 11 307 125 +530 2 2 4 1 50 179 49 +531 2 2 4 1 76 308 123 +532 2 2 4 1 112 308 77 +533 2 2 4 1 185 320 264 +534 2 2 4 1 23 310 121 +535 2 2 4 1 105 310 24 +536 2 2 4 1 42 314 113 +537 2 2 4 1 40 315 250 +538 2 2 4 1 113 315 41 +539 2 2 4 1 119 316 36 +540 2 2 4 1 136 193 189 +541 2 2 4 1 29 305 28 +542 2 2 4 1 290 307 12 +543 2 2 4 1 280 314 43 +544 2 2 4 1 192 309 258 +545 2 2 4 1 238 297 114 +546 2 2 4 1 35 316 286 +547 2 2 4 1 222 304 286 +548 2 2 4 1 124 248 246 +549 2 2 4 1 246 312 247 +550 2 2 4 1 207 309 192 +551 2 2 4 1 26 306 25 +552 2 2 4 1 12 307 11 +553 2 2 4 1 192 302 180 +554 2 2 4 1 193 274 189 +555 2 2 4 1 130 287 254 +556 2 2 4 1 124 246 245 +557 2 2 4 1 126 323 243 +558 2 2 4 1 132 292 93 +559 2 2 4 1 117 138 137 +560 2 2 4 1 77 308 76 +561 2 2 4 1 24 310 23 +562 2 2 4 1 237 322 219 +563 2 2 4 1 217 311 121 +564 2 2 4 1 115 117 116 +565 2 2 4 1 245 281 244 +566 2 2 4 1 43 314 42 +567 2 2 4 1 41 315 40 +568 2 2 4 1 282 283 134 +569 2 2 4 1 36 316 35 +570 2 2 4 1 178 283 282 +571 2 2 4 1 117 137 116 +572 2 2 4 1 193 301 274 +573 2 2 4 1 248 313 246 +574 2 2 4 1 124 245 244 +575 2 2 4 1 271 274 131 +576 2 2 4 1 251 278 102 +577 2 2 4 1 262 275 120 +578 2 2 4 1 111 260 259 +579 2 2 4 1 250 315 214 +580 2 2 4 1 253 291 109 +581 2 2 4 1 141 281 245 +582 2 2 4 1 100 281 99 +583 2 2 4 1 57 284 56 +584 2 2 4 1 98 285 97 +585 2 2 4 1 264 320 247 +586 2 2 4 1 266 303 103 +587 2 2 4 1 236 324 191 +588 2 2 4 1 195 291 177 +589 2 2 4 1 293 323 126 +590 2 2 4 1 312 313 233 +591 2 2 4 1 181 322 237 +592 2 2 4 1 286 304 104 +593 2 2 4 1 263 299 111 +594 2 2 4 1 259 302 122 +595 2 2 4 1 131 301 255 +596 2 2 4 1 123 300 263 +597 2 2 4 1 205 306 270 +598 2 2 4 1 54 114 53 +599 2 2 4 1 55 296 54 +600 2 2 4 1 56 135 55 +601 2 2 4 1 99 141 98 +602 2 2 4 1 53 297 52 +603 2 2 4 1 51 298 50 +604 2 2 4 1 52 127 51 +605 2 2 4 1 277 287 194 +606 2 2 4 1 213 314 280 +607 2 2 4 1 286 316 222 +608 2 2 4 1 258 309 107 +609 2 2 4 1 244 330 7 +610 2 2 4 1 178 318 20 +611 2 2 4 1 96 332 185 +612 2 2 4 1 184 331 58 +613 2 2 4 1 180 302 260 +614 2 2 4 1 181 325 304 +615 2 2 4 1 107 317 272 +616 2 2 4 1 265 324 236 +617 2 2 4 1 222 322 304 +618 2 2 4 1 111 299 260 +619 2 2 4 1 274 301 131 +620 2 2 4 1 260 302 259 +621 2 2 4 1 287 327 254 +622 2 2 4 1 257 325 182 +623 2 2 4 1 214 329 250 +624 2 2 4 1 101 321 273 +625 2 2 4 1 262 326 275 +626 2 2 4 1 278 328 102 +627 2 2 4 1 19 318 282 +628 2 2 4 1 48 319 293 +629 2 2 4 1 263 300 299 +630 2 2 4 1 254 327 108 +631 2 2 4 1 108 326 262 +632 2 2 4 1 102 328 252 +633 2 2 4 1 304 325 104 +634 2 2 4 1 50 298 179 +635 2 2 4 1 179 319 49 +636 2 2 4 1 118 324 265 +637 2 2 4 1 104 325 257 +638 2 2 4 1 298 323 179 +639 2 2 4 1 309 317 107 +640 2 2 4 1 282 318 178 +641 2 2 4 1 56 284 135 +642 2 2 4 1 99 281 141 +643 2 2 4 1 141 285 98 +644 2 2 4 1 100 330 281 +645 2 2 4 1 57 331 284 +646 2 2 4 1 285 332 97 +647 2 2 4 1 304 322 181 +648 2 2 4 1 179 323 293 +649 2 2 4 1 285 320 185 +650 2 2 4 1 108 327 326 +651 2 2 4 1 293 319 179 +652 2 2 4 1 135 296 55 +653 2 2 4 1 54 296 114 +654 2 2 4 1 114 297 53 +655 2 2 4 1 52 297 127 +656 2 2 4 1 127 298 51 +657 2 2 4 1 281 330 244 +658 2 2 4 1 284 331 184 +659 2 2 4 1 185 332 285 +660 2 2 4 1 141 320 285 +661 2 2 4 1 299 300 231 +662 2 2 4 1 326 327 225 +$EndElements diff --git a/examples/backward_facing_step/bc_dir/bc_config b/examples/backward_facing_step/bc_dir/bc_config new file mode 100644 index 0000000..a32649e --- /dev/null +++ b/examples/backward_facing_step/bc_dir/bc_config @@ -0,0 +1,14 @@ +[DIRICHLET] +u = inlet -> [1.0, 0.0] + wall -> [0.0, 0.0] +k = inlet -> 0.00256796 +epsilon = inlet -> 0.000305469 + +[STRESS] +u = outlet -> [0.0, 0.0] + +[NEUMANN] +k = outlet -> 0.0 + wall -> 0.0 +epsilon = outlet -> 0.0 + wall -> 0.0 diff --git a/examples/backward_facing_step/config b/examples/backward_facing_step/config new file mode 100644 index 0000000..2a6cf6c --- /dev/null +++ b/examples/backward_facing_step/config @@ -0,0 +1,45 @@ +[MESH] +filename = backward_facing_step.msh +curved_elements = False + +[FINITE ELEMENT SPACE] +elements = u -> HDiv + p -> L2 + k -> L2 + epsilon -> L2 +interpolant_order = 2 + +[DG] +DG = True +interior_penalty_coefficient = 10.0 + +[SOLVER] +linear_solver = direct +preconditioner = default +linearization_method = Oseen +nonlinear_solver = NoMixing +nonlinear_tolerance = relative -> 1e-4 + absolute -> 1e-4 +nonlinear_max_iterations = 200 +relaxation_factors = 0.5, 0.5, 0.3, 0.3 + +[TRANSIENT] +transient = False + + +[VISUALIZATION] +save_to_file = True +save_type = .vtu +#save_frequency = 0.1, time +subdivision = 3 + +[OTHER] +model = KEpsilonINS +run_dir = . +num_threads = 6 + +; Optional k-epsilon switches. These are the defaults, so omitting any of them +; changes nothing -- they are listed to show what can be modified. +wall_function = True +wall_boundary = wall +production_limiter = True diff --git a/examples/backward_facing_step/config_IC b/examples/backward_facing_step/config_IC new file mode 100644 index 0000000..abc13b9 --- /dev/null +++ b/examples/backward_facing_step/config_IC @@ -0,0 +1,26 @@ +[MESH] +filename = backward_facing_step.msh +curved_elements = False + +[FINITE ELEMENT SPACE] +elements = u -> HDiv + p -> L2 +interpolant_order = 3 + +[DG] +DG = True +interior_penalty_coefficient = 10.0 + +[SOLVER] +linear_solver = default +preconditioner = default + +[VISUALIZATION] +save_to_file = True +save_type = .sol +split_components = True + +[OTHER] +num_threads = 1 +model = Stokes +run_dir = . diff --git a/examples/backward_facing_step/ic_dir/ic_config b/examples/backward_facing_step/ic_dir/ic_config new file mode 100644 index 0000000..a54a7fc --- /dev/null +++ b/examples/backward_facing_step/ic_dir/ic_config @@ -0,0 +1,8 @@ +[STOKES] +all = all -> None + +[KEpsilonINS] +u = all -> output/components_sol/u.sol +p = all -> output/components_sol/p.sol +k = all -> 0.00256796 +epsilon = all -> 0.000305469 diff --git a/examples/backward_facing_step/model_dir/model_config b/examples/backward_facing_step/model_dir/model_config new file mode 100644 index 0000000..7d4774e --- /dev/null +++ b/examples/backward_facing_step/model_dir/model_config @@ -0,0 +1,25 @@ +[PARAMETERS] +kinematic_viscosity = all -> 0.00002 + +; Standard high-Re k-epsilon closure constants. These are the built-in defaults, +; listed here to show what can be modified; omitting any of them changes nothing. +c_mu = all -> 0.09 +c_1 = all -> 1.44 +c_2 = all -> 1.92 +sigma_k = all -> 1.0 +sigma_epsilon = all -> 1.3 +; kappa and e_log are only read when wall_function = True. +kappa = all -> 0.4187 +e_log = all -> 9.793 + +; Numerical safeguards, not substitutes for sensible ICs and BCs. +k_floor = all -> 1e-8 +epsilon_floor = all -> 1e-6 +max_viscosity_ratio = all -> 200000 +production_limit_coefficient = all -> 10 +max_epsilon_k_ratio = all -> 10 + +[FUNCTIONS] +source = u -> [0.0, 0.0] + k -> 0.0 + epsilon -> 0.0 diff --git a/examples/tutorial_6/config b/examples/tutorial_6/config index 804a253..71f336f 100644 --- a/examples/tutorial_6/config +++ b/examples/tutorial_6/config @@ -23,15 +23,16 @@ nonlinear_max_iterations = 3 [TRANSIENT] transient = True scheme = implicit euler -time_range = 0.0, 1.0 +time_range = 0.0, 3.0 dt = 1e-2 [VISUALIZATION] save_to_file = True save_type = .vtu -save_frequency = 0.1, time +save_frequency = 0.01, time [OTHER] model = INS run_dir = . num_threads = 6 +resume_from_previous = False From 5c7c1ae66a34564422cf844adcec373cf0b1ce61 Mon Sep 17 00:00:00 2001 From: arshiiyyaa Date: Mon, 10 Aug 2026 15:08:19 -0400 Subject: [PATCH 5/8] removed the redundant and incorrect safeguards previously implemented for wall funcitons. --- .../backward_facing_step.geo | 51 + .../backward_facing_step.msh | 2013 ++++++++++------- examples/backward_facing_step/config | 8 +- .../model_dir/model_config | 2 +- opencmp/helpers/wall_func.py | 171 +- opencmp/models/k_epsilon.py | 58 +- pytests/helpers/test_k_epsilon_wall_func.py | 83 +- 7 files changed, 1410 insertions(+), 976 deletions(-) create mode 100644 examples/backward_facing_step/backward_facing_step.geo diff --git a/examples/backward_facing_step/backward_facing_step.geo b/examples/backward_facing_step/backward_facing_step.geo new file mode 100644 index 0000000..f296bef --- /dev/null +++ b/examples/backward_facing_step/backward_facing_step.geo @@ -0,0 +1,51 @@ +// Adjustable coarse/fine proxy for the backward-facing-step tutorial. +// Generate with: gmsh -2 backward_facing_step_proxy.geo -format msh2 + +SetFactory("Built-in"); + +H = 1.0; +L_up = 2.0; +L_down = 6.0; + +// Primary mesh controls. Reduce these values for a finer mesh. +h_wall = 0.2; +h_core = 0.2; + +Point(1) = {-L_up, H, 0, h_wall}; +Point(2) = {0, H, 0, h_wall}; +Point(3) = {0, 0, 0, h_wall}; +Point(4) = {L_down, 0, 0, h_wall}; +Point(5) = {L_down, 2 * H, 0, h_wall}; +Point(6) = {-L_up, 2 * H, 0, h_wall}; + +Line(1) = {1, 2}; +Line(2) = {2, 3}; +Line(3) = {3, 4}; +Line(4) = {4, 5}; +Line(5) = {5, 6}; +Line(6) = {6, 1}; + +Curve Loop(1) = {1, 2, 3, 4, 5, 6}; +Plane Surface(1) = {1}; + +Physical Curve("inlet") = {6}; +Physical Curve("outlet") = {4}; +Physical Curve("wall") = {1, 2, 3, 5}; +Physical Surface("surface") = {1}; + +Field[1] = Distance; +Field[1].CurvesList = {1, 2, 3, 5}; +Field[1].Sampling = 250; + +Field[2] = Threshold; +Field[2].InField = 1; +Field[2].SizeMin = h_wall; +Field[2].SizeMax = h_core; +Field[2].DistMin = 0.10 * H; +Field[2].DistMax = 0.50 * H; +Background Field = 2; + +Mesh.CharacteristicLengthExtendFromBoundary = 0; +Mesh.Algorithm = 6; +Mesh.ElementOrder = 1; +Mesh.MshFileVersion = 2.2; diff --git a/examples/backward_facing_step/backward_facing_step.msh b/examples/backward_facing_step/backward_facing_step.msh index cb3803f..d927dbb 100644 --- a/examples/backward_facing_step/backward_facing_step.msh +++ b/examples/backward_facing_step/backward_facing_step.msh @@ -9,7 +9,7 @@ $PhysicalNames 2 4 "surface" $EndPhysicalNames $Nodes -332 +473 1 -2 1 0 2 0 1 0 3 0 0 0 @@ -110,241 +110,382 @@ $Nodes 98 -2 1.6 0 99 -2 1.4 0 100 -2 1.2 0 -101 4.686238564577564 1.826439369062404 0 -102 4.100000000004588 1.829097592743171 0 +101 4.715889888994249 1.820945090216231 0 +102 4.126254593927985 1.80991484138901 0 103 2.29999999999099 0.1732050807562706 0 -104 2.900266982582167 0.1684391328912609 0 -105 1.105720362773637 0.202598882874703 0 -106 1.719269096019552 0.185930758087967 0 -107 3.500000000006942 1.830327509294952 0 -108 0.8999310967745467 1.829343027594482 0 -109 5.100780508479353 0.1914716551440339 0 -110 3.910499719390977 0.2221927623288611 0 -111 2.700000000009153 1.824024054465305 0 -112 1.900170350578513 1.787528373757573 0 -113 4.502969550439444 0.1954447752431653 0 -114 5.792184776894499 1.119634003310026 0 -115 0.1776897833864012 0.8856749134681841 0 -116 0.1761500901350675 1.124820029747694 0 -117 0.3820087313537173 0.9833348075773506 0 -118 5.276679803052977 1.827858755014612 0 -119 3.486016585367639 0.2138949996262597 0 -120 1.301987361433146 1.802337764717296 0 -121 0.7334569248735814 0.1699238539150116 0 -122 3.105046367094101 1.812191688839357 0 -123 2.283333333343617 1.835313130139828 0 -124 -1.500000000000693 1.173205080755686 0 -125 -1.076024313900989 1.170843495964224 0 -126 5.523914676281127 0.184517724994134 0 -127 5.836456768665595 0.7003481059369611 0 -128 -0.2953070018550897 1.848529335280539 0 -129 -0.703019197757671 1.795782719262869 0 -130 0.5007487991988814 1.801555760682908 0 -131 0.1000000000058254 1.824033908545446 0 -132 -1.299999999998058 1.826794919242632 0 -133 -0.5011460944051368 1.192515925511272 0 -134 0.1724877132011154 0.5158678629019057 0 -135 5.794789806131725 1.484431070830197 0 -136 -0.03853485367145083 1.197895525321071 0 -137 0.3950532145581871 1.261359919078641 0 -138 0.6268601205434341 1.114911479541737 0 -139 0.6027945588794311 0.8242379515023555 0 -140 0.8612318345408184 0.9516724127338992 0 -141 -1.82602364516333 1.500345786337022 0 -142 0.8856341247903622 1.248384235113689 0 -143 1.12993227496792 1.086938400498128 0 -144 1.107146827173548 0.7860096184557481 0 -145 1.377855389634628 0.9214515690196039 0 -146 1.395405546042298 1.222819028997906 0 -147 1.647341146637785 1.059567663235435 0 -148 1.628491731708219 0.7576332974530835 0 -149 1.897450614255755 0.8953505360005487 0 -150 1.915001196657835 1.210519192850917 0 -151 2.167225797358969 1.049232211532971 0 -152 2.150190553527101 0.7322415516175567 0 -153 2.417807845927317 0.8710533580916501 0 -154 2.444701634191844 1.184448823070601 0 -155 2.685088067593386 1.004058859887813 0 -156 2.66909212567416 0.7049709736635658 0 -157 2.93659925595609 0.8403154794988904 0 -158 2.954029704268609 1.137044717100128 0 -159 3.204306555098864 0.975642976401368 0 -160 3.217693042475834 1.273901144758296 0 -161 3.4694421003114 1.111863480519187 0 -162 3.455861571273772 0.8110808231319919 0 -163 3.723240250674173 0.9472720332428707 0 -164 3.733991508464879 1.249813469508205 0 -165 3.987981007055795 1.085983249907901 0 -166 3.977118455977911 0.7817988153354128 0 -167 4.243618208111709 0.9189992267986413 0 -168 4.254927085469895 1.22310704456824 0 -169 4.508349912234545 1.057631414137118 0 -170 4.497565019812634 0.7567475437058591 0 -171 4.762887316308166 0.8930139098913406 0 -172 4.776314311206161 1.193269983204579 0 -173 5.028135998361598 1.029599380454967 0 -174 5.012931617739649 0.7299542899552905 0 -175 5.041487191819557 1.329407284101716 0 -176 5.278979761234668 0.865940811202314 0 -177 5.253580767870099 0.589931347836451 0 -178 0.2932379253257893 0.1677257260236711 0 -179 5.834881280677875 0.2929565374615258 0 -180 2.977116870055915 1.432488412033959 0 -181 2.914875353768803 0.5387150996759096 0 -182 2.626511822612821 0.4044298598533822 0 -183 4.786090769440171 1.469269738608003 0 -184 5.690146869350933 1.829077138072369 0 -185 -1.706872423344082 1.834692601580531 0 -186 -0.2589189885928983 1.215321741960722 0 -187 -0.3988766904207787 1.396032610836809 0 -188 -0.6485262053112669 1.376090623552919 0 -189 -0.1189522940448983 1.415678544452322 0 -190 5.07524054477021 1.638139588505752 0 -191 5.31881621242096 1.454621482510748 0 -192 3.230278202524108 1.566643129894465 0 -193 0.1407416526658747 1.411708179738982 0 -194 0.3986974899198324 1.57077335038091 0 -195 4.996465287453089 0.4204514484979262 0 -196 0.8305537603252682 0.6120131001573788 0 -197 0.5689108964396347 0.5826495722464345 0 -198 1.109140824531757 0.4753852899392799 0 -199 -0.5589453338169241 1.591572132120592 0 -200 -0.8099901989119963 1.571228981658154 0 -201 2.399628144871577 0.5839357243732363 0 -202 2.161325203863341 0.421070823764873 0 -203 1.365401980417501 0.6199370186992228 0 -204 1.621223569321427 0.4259962154092066 0 -205 1.333581122838785 0.3409407958434865 0 -206 1.8857037647803 0.5946358919740145 0 -207 3.485408810470543 1.440113592306903 0 -208 3.753565317541011 1.55727840865057 0 -209 4.000180762502816 1.379528294780626 0 -210 4.248962023878539 1.485687934247104 0 -211 4.754765453891689 0.5927638430020564 0 -212 4.503424918508618 0.4627934452450116 0 -213 4.726270868380606 0.3308640158083687 0 -214 4.290018420561697 0.3236353308267972 0 -215 4.22447619656728 0.5831777264059897 0 -216 3.938978100793673 0.4930887212138704 0 -217 0.8999999999961902 0.3201119636692384 0 -218 3.708844631049761 0.6499756500227293 0 -219 3.422458680453483 0.5005552655525709 0 -220 4.515345914949472 1.343094481540985 0 -221 3.694466286174452 0.3753661913724116 0 -222 3.246465949039735 0.3061128305631222 0 -223 1.13138853291965 1.419936678952514 0 -224 1.408882458261753 1.559579110671844 0 -225 0.8939546457502919 1.489151269006771 0 -226 1.661303800265996 1.366070871340873 0 -227 1.906397282050399 1.518518080735924 0 -228 1.679458981862772 1.649292402580255 0 -229 2.107779342532455 1.677615954778338 0 -230 2.19534126959367 1.411977228671172 0 -231 2.525004303037893 1.471123864658214 0 -232 -0.928976672427516 1.776605850358611 0 -233 -1.030938424769196 1.584151741167557 0 -234 5.294097367813141 1.168126166993076 0 -235 5.588133196921855 1.303449977533188 0 -236 5.590251118892214 1.611977716952264 0 -237 3.181577900894001 0.6908896750813597 0 -238 5.551480671158087 1.00981524812135 0 -239 5.581469139990181 0.7149276743616437 0 -240 4.504579659106617 1.64210383075794 0 -241 -0.9028041561977758 1.342492122640766 0 -242 0.34601893466079 0.697074647167095 0 -243 5.496196172515599 0.4384582074379365 0 -244 -1.699079982418605 1.16347669827633 0 -245 -1.625539082127074 1.391821196712449 0 -246 -1.390945997043657 1.388362276240476 0 -247 -1.476369416462751 1.602462256104606 0 -248 -1.286853376905641 1.184915910079365 0 -249 -0.4999999999958389 1.826794919242632 0 -250 4.112004827002483 0.1735061596488599 0 -251 3.892260886261507 1.808477159316039 0 -252 4.317429943187091 1.830399045301216 0 -253 5.320148559544607 0.1957949626423145 0 -254 0.7000000000074891 1.826794919242633 0 -255 0.2999529157466118 1.81731490918177 0 -256 5.0903840695633 1.858558652552973 0 -257 2.699999999989565 0.1732050807563221 0 -258 3.305887428274557 1.811623008700638 0 -259 2.900841061189608 1.821128371934886 0 -260 2.773277878389123 1.591539020427145 0 -261 1.515054800264559 1.808078722950346 0 -262 1.1000000000086 1.826794919242633 0 -263 2.497222222231934 1.827640481095631 0 -264 -1.524415050230862 1.818276126281701 0 -265 5.499999999998613 1.82679491924264 0 -266 2.504418637094094 0.1848481362892386 0 -267 2.077184519826266 0.179353475891939 0 -268 1.901781915127447 0.3312884961603533 0 -269 0.5135573076539477 0.1845327724295703 0 -270 1.49999999999384 0.1732050807562699 0 -271 -0.09999999999472919 1.826794919242633 0 -272 3.695393384682455 1.818556233436428 0 -273 4.908643863151041 1.832914827529244 0 -274 -0.009124275109356261 1.620032327904598 0 -275 1.200000000008876 1.637637323648934 0 -276 2.7218068395392 1.298514471736989 0 -277 0.6571713707967266 1.428154626300319 0 -278 4.008458671312569 1.634100687074751 0 -279 -0.2830293707482307 1.646490684154303 0 -280 4.890894840986847 0.1782738743140262 0 -281 -1.83987174742292 1.300000000000001 0 -282 0.1603867208983705 0.3010169378234785 0 -283 0.3741690297176044 0.3962381217037159 0 -284 5.839871747423124 1.69999999999921 0 -285 -1.841792112863231 1.705892252628177 0 -286 3.102096992006282 0.1686942274773882 0 -287 0.600000000007212 1.629550220662123 0 -288 3.699342754434295 0.1687729277610702 0 -289 4.501649633374808 1.859788449024312 0 -290 -0.7066151454243625 1.171689125665035 0 -291 5.199999999996932 0.3603221882777825 0 -292 -1.123357132097524 1.801349139820951 0 -293 5.705161223572887 0.1599081343028569 0 -294 0.1578012058330669 0.6999280208011465 0 -295 1.699240590392414 1.845632231250506 0 -296 5.835021555989616 1.301503010333945 0 -297 5.793598559451394 0.8907875052875532 0 -298 5.770899321004011 0.4974293334840442 0 -299 2.579100880735619 1.673583191592095 0 -300 2.364630225245864 1.649542308489213 0 -301 0.1900382547487134 1.649957975830466 0 -302 2.997312075850571 1.644798124625962 0 -303 2.399999999990635 0.3582487963694569 0 -304 3.006350780253262 0.3460025002015829 0 -305 1.899647106191619 0.1393145460280518 0 -306 1.307860297119074 0.1433489518948919 0 -307 -0.8970887231061145 1.137004948854005 0 -308 2.100000000010775 1.854162342032347 0 -309 3.412405555236477 1.66196634789231 0 -310 0.9020396338807564 0.1428981537898414 0 -311 0.6669556710979763 0.3787814882523503 0 -312 -1.271307573071481 1.614336188837809 0 -313 -1.159812306981456 1.380850289155032 0 -314 4.699999999995015 0.1415999814867391 0 -315 4.300713256853935 0.1393985340447074 0 -316 3.299999999989645 0.1391945575491286 0 -317 3.584364598772408 1.664661189642526 0 -318 0.1453918529114031 0.1453918529118733 0 -319 5.854608147088254 0.1453918529114392 0 -320 -1.666835288365222 1.642248369940747 0 -321 4.795999326636764 1.678138148849403 0 -322 3.155100407823008 0.4783585467905994 0 -323 5.6662105348103 0.3146539875360995 0 -324 5.352197535826995 1.671878492445203 0 -325 2.829600987841324 0.3261583346756916 0 -326 1.001371283143341 1.664937792814374 0 -327 0.7979361202195273 1.672982990845162 0 -328 4.200000000003853 1.683303682711463 0 -329 4.097129331913555 0.3567576179590858 0 -330 -1.854608147088865 1.145391852910908 0 -331 5.854608147088609 1.854608147088609 0 -332 -1.85460814708892 1.854608147089072 0 +104 2.898220202048412 0.1770020610447061 0 +105 1.076568448514803 0.1869321149206973 0 +106 1.725488707240545 0.1980115266239818 0 +107 3.482343623972824 1.809397822998246 0 +108 2.49815492179354 1.851001200578305 0 +109 1.905982299339834 1.864155400698314 0 +110 1.296315300350435 1.837012656419556 0 +111 3.899455533390836 0.1692275483986728 0 +112 4.501353593709718 0.2020259114662162 0 +113 5.099999999996546 0.1732050807575517 0 +114 5.826794919243029 1.099999999997815 0 +115 0.1732050807562872 0.8999999999999999 0 +116 0.6965691307747465 1.82072802706088 0 +117 5.303637951712282 1.820333885191719 0 +118 0.1732050807567705 1.099999999999797 0 +119 0.3464101615134161 0.9999999999994565 0 +120 3.299999999989882 0.1732050807574185 0 +121 5.825826487855652 0.6975213828789675 0 +122 2.891905155833481 1.815944470027591 0 +123 0.6981596001939732 0.1777086041428091 0 +124 -1.489686081938773 1.163549923920361 0 +125 -1.100000000003446 1.173205080755705 0 +126 -0.2999835968974923 1.825730211136559 0 +127 -0.6999999999962899 1.826794919242821 0 +128 0.3219644455985776 1.809667120872487 0 +129 0.3464101615128699 0.7999999999994878 0 +130 0.5196152422700365 0.8999999999989881 0 +131 0.5196152422705889 1.099999999998985 0 +132 0.6928203230272075 0.9999999999984999 0 +133 -1.299999999997694 1.826794919242693 0 +134 -0.5043371746586531 1.16071004212909 0 +135 5.836293387951234 1.488665085739994 0 +136 5.513068339144769 0.1981959154845498 0 +137 0.6928203230277769 1.199999999998502 0 +138 0.8660254037843816 1.099999999998013 0 +139 0.8660254037838151 0.8999999999980097 0 +140 1.039230484540986 0.9999999999975215 0 +141 1.039230484541552 1.199999999997523 0 +142 1.212435565298157 1.099999999997034 0 +143 1.212435565297593 0.8999999999970348 0 +144 1.388163382683139 1.004369508010981 0 +145 1.386061102160056 1.200728251332285 0 +146 1.559336258934117 1.100849626554419 0 +147 1.561870674898172 0.9052393637726254 0 +148 1.732636720936703 1.001014831718056 0 +149 1.732652617810468 0.8010423659120773 0 +150 1.905453842260253 0.9003428662682451 0 +151 1.905386532876253 1.100226282994355 0 +152 2.078515735496588 1.000094858206663 0 +153 2.078491870910347 1.200053523529815 0 +154 2.251680327879773 1.100024730285317 0 +155 2.251677557248011 0.9000199314113152 0 +156 2.424875428170985 1.000007443611683 0 +157 2.42487376475952 0.8000045624994914 0 +158 2.598077366642508 0.9000020010137799 0 +159 2.598077120164044 1.100001574099576 0 +160 2.771281636126631 1.000000595847151 0 +161 1.905389182354179 0.7002308720266913 0 +162 2.77128150091502 1.200000361652794 0 +163 2.944486465003926 1.100000159577923 0 +164 2.944486445558745 0.9000001258988586 0 +165 3.117691481095167 1.000000047573735 0 +166 3.11769147355894 1.20000003451963 0 +167 3.290896542281853 1.100000013676174 0 +168 3.290896540275674 0.9000000102023461 0 +169 3.464101617436827 1.000000003973375 0 +170 3.458948662971378 0.8089251796816016 0 +171 3.636447870916344 0.9014875306024608 0 +172 3.637163558781539 1.100247922422684 0 +173 3.810344782969403 1.000289242163832 0 +174 3.810460088185946 1.20008952742414 0 +175 3.98368041038376 1.100063128257312 0 +176 3.9836829506234 0.9000587283962558 0 +177 4.156921938164967 0.9999999999887335 0 +178 4.156916287033673 0.8000097880565726 0 +179 4.330126077066453 0.9000016313328891 0 +180 4.330126861946278 1.100000271879021 0 +181 4.503331916540244 1.000000317193668 0 +182 4.503331912179247 0.8000003247461893 0 +183 4.67653718043535 0.8999999999872841 0 +184 4.676537149912823 1.100000052854934 0 +185 4.849742256105335 1.000000008798077 0 +186 4.849742255258027 1.200000010266623 0 +187 5.022947341471486 1.100000000814582 0 +188 5.022947341021563 0.9000000015929113 0 +189 4.676537149184971 0.7000000541136884 0 +190 1.548944206232109 0.7234994822369983 0 +191 5.188039063141041 1.000000000391674 0 +192 5.194800195956938 0.8000000003212473 0 +193 5.186686836701978 1.200000000191548 0 +194 1.558885249764171 1.300068455756421 0 +195 2.598076842927763 0.7000010939142114 0 +196 3.617104269811613 0.6837066347770926 0 +197 0.004465819873861432 1.207735026918892 0 +198 2.251673579818007 1.300013042298507 0 +199 0.5196152422711537 1.299999999998988 0 +200 4.676537174360107 1.300000010511861 0 +201 3.29089653902067 1.300000008026661 0 +202 3.286402000738564 0.7119429741441921 0 +203 0.5196152422694704 0.6999999999989922 0 +204 3.983702168160518 1.300025442606306 0 +205 4.849742259191726 1.400000003454201 0 +206 -1.836293387951482 1.488665085741304 0 +207 3.810500713699945 1.400019161664957 0 +208 5.372590891217914 0.9210870397500105 0 +209 5.369671030296724 0.7035145066687083 0 +210 3.117691457720441 1.400000007085566 0 +211 2.078467374384346 1.400011094301195 0 +212 4.503332063219504 0.6000000631352367 0 +213 4.673233096278839 0.5057228416170048 0 +214 2.424871674884895 0.6000009427314389 0 +215 0.6928203230283385 1.399999999998502 0 +216 2.598076262366138 0.5000000883529586 0 +217 5.195979306052785 0.6005857511556347 0 +218 1.385717309231959 1.400132784512563 0 +219 1.558865091167685 1.50003354004212 0 +220 0.1687392608823997 0.307735026920587 0 +221 0.1739493840693875 1.301289171152911 0 +222 0.006604759422929646 1.4002133391062 0 +223 3.983710264421383 0.7000114194016973 0 +224 4.156919897477751 0.6000035345687855 0 +225 2.598076397623053 1.30000032262089 0 +226 2.771281405873768 0.6000001970394528 0 +227 2.771281309251153 1.400000029680259 0 +228 2.251666654418516 1.500001047153748 0 +229 0.5196152422717312 1.49999999999899 0 +230 3.290896534760902 1.500000000647548 0 +231 5.829907236381057 0.3192180115220712 0 +232 -0.1810563553985545 1.312673029721057 0 +233 5.699152526142959 1.830645590988407 0 +234 -1.699152526142983 1.830645590988467 0 +235 5.371887606885953 0.5050251110450485 0 +236 0.1768500303165584 1.496058672223337 0 +237 0.004627693960895851 1.623460803044036 0 +238 3.985881955872225 1.496249939477035 0 +239 4.15728033970181 1.399379230339546 0 +240 3.80740425487539 1.628539324165006 0 +241 4.849191575290535 0.6009538159461567 0 +242 1.732060622120716 1.400016999296639 0 +243 3.464101615974917 1.400000001439321 0 +244 0.346410161512376 0.5999999999997115 0 +245 0.51961524226905 0.4999999999992684 0 +246 0.6928203230260978 0.5999999999985435 0 +247 4.673233106221126 1.494277180237408 0 +248 4.502781419631145 1.399046198450212 0 +249 4.4988302178202 1.597630227567447 0 +250 2.598396876698366 1.496448710809146 0 +251 4.830149691825156 0.3730921704639418 0 +252 3.983716857406679 0.4999999999892177 0 +253 4.17384675532625 0.3717704213845126 0 +254 3.120686757099165 1.594811984774291 0 +255 4.832908144439959 1.630585413706644 0 +256 5.020141655491436 1.505097569517528 0 +257 5.012752367952463 1.682102818243168 0 +258 5.534923163264589 0.6014232696087509 0 +259 2.085357086957448 1.598534757365323 0 +260 2.25829019712397 1.687746082124299 0 +261 1.731003674176607 1.598901204373453 0 +262 1.549628633468017 1.688497413455346 0 +263 5.198691634203925 1.628840110285881 0 +264 2.781218271986689 1.626678849037754 0 +265 2.789740053531362 0.3665442331342964 0 +266 2.951965145491068 0.5071607391810755 0 +267 2.601088089271256 0.3130596481368549 0 +268 3.295953330767563 1.695123058875572 0 +269 5.197739293537637 0.3717561248405304 0 +270 4.156921938166652 1.599999999988729 0 +271 5.532395030868232 0.4085446626195848 0 +272 5.708580577717816 0.5048245507830141 0 +273 4.502364804740366 0.4125866724945864 0 +274 0.6934451243197839 1.603454671175565 0 +275 0.8661295373339907 1.500575778527523 0 +276 0.5172046889956422 1.699992421214843 0 +277 0.6942940546944972 0.3949652625575458 0 +278 0.8646278532758763 0.497667928336997 0 +279 0.5196152422683276 0.2999999999989925 0 +280 3.110143347565837 1.805897137066593 0 +281 0.8791012364196535 0.2977909622138311 0 +282 1.046543270869362 0.4066990725784249 0 +283 1.237137711463851 0.3352183737150695 0 +284 1.200173951640256 0.5277586787804298 0 +285 1.384888354527269 0.4570447909359722 0 +286 1.405237467599955 0.3004054321434585 0 +287 1.580447146553319 0.3791446391038401 0 +288 1.37221104299095 0.6303266725864406 0 +289 0.8660254037860764 1.699999999998013 0 +290 1.037175245918001 1.596506124600052 0 +291 1.060946716250862 1.807557473227634 0 +292 5.299999999997024 0.1732050807573886 0 +293 0.3464101615151304 1.59999999999948 0 +294 -0.4999808630483291 1.826607997558866 0 +295 -0.5999804074068338 1.65354921453885 0 +296 -0.7999967345646268 1.65358306782786 0 +297 -0.7026574683113098 1.481913348189344 0 +298 -0.9004423671432424 1.48391331892005 0 +299 -0.5039918885103523 1.485905478777195 0 +300 -1.000073183615576 1.65417680357446 0 +301 -1.1000223670117 1.48226679975507 0 +302 -0.8058391952123173 1.321099363762176 0 +303 -1.200015925102734 1.654001339671436 0 +304 -1.300001661288311 1.4821862652492 0 +305 -1.49985875435587 1.827436697867106 0 +306 -1.603527600612199 1.670674566586002 0 +307 5.499999999998385 1.826794919242762 0 +308 5.603551141552696 1.670567603481963 0 +309 5.399999999998276 1.653589838485846 0 +310 5.509837670829932 1.481629091635636 0 +311 -1.400567323558871 1.656913091057229 0 +312 -1.515789822106204 1.484589124741159 0 +313 5.830914871827806 1.298110847621704 0 +314 5.665501031863917 1.201317489887759 0 +315 5.656804168447166 1.004395628983714 0 +316 5.480384757729246 1.099999999997537 0 +317 3.499999999990197 0.1732050807574295 0 +318 3.399999999989999 0.3446712196452 0 +319 3.595020984584157 0.3432457019849392 0 +320 3.19809859783542 0.3294471628575002 0 +321 3.502572509313167 0.5061206063945867 0 +322 3.699079419656267 0.1720147487760303 0 +323 3.807806239947121 0.3727714847803223 0 +324 3.099999999989636 0.1732050807579082 0 +325 4.287438443686776 0.1800726166462276 0 +326 4.094937372947683 0.173727112810578 0 +327 4.714702671454938 0.1804433491965457 0 +328 4.908969241554524 0.1751603403515806 0 +329 0.1000000000058252 1.826794919242632 0 +330 -0.09922598381920536 1.820540724211511 0 +331 -0.2064110937829766 1.649799302264625 0 +332 -0.4025907161289083 1.654144571069703 0 +333 -0.9000116530278772 1.826891618314632 0 +334 0.1732050807560454 0.7000000000004494 0 +335 -1.100016793623148 1.826977446800536 0 +336 0.3465342120659792 1.200214861858269 0 +337 5.022947341948033 0.4999999999863232 0 +338 0.8632776245558037 0.6996113213878521 0 +339 0.3471623787516567 1.399593784205329 0 +340 4.330125542649516 0.7000025569713202 0 +341 2.412933764763291 0.3683969956771279 0 +342 2.251666049837786 0.4999999999940998 0 +343 3.812162552631986 0.5931428276500698 0 +344 3.116942382359428 0.801990526300487 0 +345 3.114731248084986 0.613446379672641 0 +346 4.330127018920472 0.4999999999882476 0 +347 5.523404169412773 0.7876708026657232 0 +348 2.25166849748219 0.7000042394375872 0 +349 0.6923623598220716 0.7999352202301475 0 +350 1.03068584204855 0.7998131326163543 0 +351 0.8660427593763594 1.300095963086265 0 +352 2.420359064926746 1.583439179256986 0 +353 2.944486372868165 1.499999999992146 0 +354 1.909719070115393 1.493540023583126 0 +355 1.387347341110679 1.584783090323297 0 +356 -1.830617856523183 1.300113576604748 0 +357 1.732200382276675 1.200259070988611 0 +358 1.906054308780622 1.299017832448957 0 +359 1.038908192961318 1.399529644367572 0 +360 2.771281678332552 0.8000006689509324 0 +361 2.42487566404218 1.200007852151597 0 +362 2.424174706254478 1.396651692381812 0 +363 1.7069451926657 0.5788699886331586 0 +364 1.905255888324014 0.4999999999950787 0 +365 2.945114717616757 0.7037664395072412 0 +366 1.212464703248721 1.300065113367335 0 +367 3.807242115229021 0.7964493971652346 0 +368 5.022700195492663 0.7001832820186 0 +369 1.210268798745662 1.493246287708919 0 +370 2.944486429886274 1.300000098751386 0 +371 2.078527630653733 0.800115461224182 0 +372 5.188384454300706 1.405512631184641 0 +373 5.019607467069226 1.301768369238187 0 +374 5.369357503464008 1.299999999985368 0 +375 4.156973122880004 1.19991134550986 0 +376 4.849609282921735 0.8001895270761195 0 +377 3.464077761565158 1.2000413249214 0 +378 2.078494702955419 0.6000584287787054 0 +379 3.637268405683868 1.300066322977115 0 +380 3.637306695895707 1.499999999990189 0 +381 4.503240256885547 1.199841141812989 0 +382 2.07553849000577 0.4050813584976872 0 +383 1.906405646275527 0.3043419355987299 0 +384 2.085278805223078 0.194534435816369 0 +385 4.330088169994672 1.29969636466331 0 +386 3.464101615139101 1.599999999990666 0 +387 4.329338184039713 1.499292003499575 0 +388 4.32422419753062 1.699896762712545 0 +389 5.832210535285554 0.909051289042383 0 +390 3.700000000006382 1.826794919243588 0 +391 2.700000000009153 1.826794919243593 0 +392 3.900000000005778 1.826794919244212 0 +393 -1.30000000000208 1.173205080755686 0 +394 4.499379578224482 1.80704129798149 0 +395 0.1724607774438955 0.5012891711541198 0 +396 0.3455418076480208 0.4015040330127715 0 +397 0.3257580674725927 0.1842319739517271 0 +398 2.096542765454291 1.810997910731447 0 +399 1.708938321142409 1.822768918122662 0 +400 -0.3051964471274664 1.483275222142123 0 +401 3.28908283385365 0.515654550574122 0 +402 -0.3066178263334563 1.160554648292915 0 +403 5.811754837909366 1.683609464896652 0 +404 -1.684375567857481 1.1891186510725 0 +405 5.69019237886328 0.1675426480548286 0 +406 -1.811751474918005 1.68362474534067 0 +407 4.907208104747131 1.830352619829741 0 +408 1.028839573816394 0.6036687628588496 0 +409 -1.684116286406766 1.386340244868585 0 +410 5.677459108719409 1.386885790363416 0 +411 -0.9009731992036432 1.162448200375055 0 +412 -0.6028455809324694 1.321657870539575 0 +413 -1.392233613016618 1.32401370156327 0 +414 -1.199999999995738 1.326794919244458 0 +415 -0.7023325250021514 1.160985912800983 0 +416 -0.9999999999957386 1.326829224317669 0 +417 -0.4006742121601586 1.320796048600325 0 +418 2.999999999988044 0.3260175575665244 0 +419 2.712033120063154 0.1646097622315301 0 +420 2.492780539661815 0.1660605761080349 0 +421 1.287445451722304 0.1570626836232561 0 +422 1.762491580749971 0.3943382985636837 0 +423 1.217813847779629 1.677603286483487 0 +424 2.564509777687912 1.687018363635503 0 +425 3.995998173949687 1.67482481437328 0 +426 3.994294093967127 0.319970654152817 0 +427 5.009743497271311 0.3227692607221974 0 +428 0.1899704662793975 1.671196303076394 0 +429 5.114471064203338 1.834128597052813 0 +430 5.383412242583139 0.3298325302468211 0 +431 1.400777065824461 0.8262170480831602 0 +432 3.618231237977881 1.672946413277539 0 +433 1.207520506936367 0.7146307158203782 0 +434 1.500000000009709 1.860895300726176 0 +435 3.668497031892817 0.5010562147965769 0 +436 2.2340974415139 0.3304297222285669 0 +437 2.969687981070667 1.668666488179675 0 +438 2.301818574521045 1.858905485932389 0 +439 5.332682841707856 1.497778316214054 0 +440 4.300000000003051 1.865153937878145 0 +441 4.359026123276716 0.3332911243959581 0 +442 0.500000000006935 1.866025403784319 0 +443 0.5022663947261852 0.1335616222989274 0 +444 4.647666631734427 1.668829334957335 0 +445 4.647889906346783 0.3346492586031081 0 +446 3.298820439016035 1.864260717778096 0 +447 1.902453308386973 0.1376638065582401 0 +448 -0.1387866474061928 1.492255836565508 0 +449 1.920986368890174 1.672723820525664 0 +450 0.8999999999961846 0.1305125270622566 0 +451 0.8856248965360678 1.864636067908769 0 +452 5.538223072832562 1.298488650756656 0 +453 1.511131962955855 0.1661347467123421 0 +454 5.875475075227786 0.4999999999988243 0 +455 5.658678150342996 0.6919758183291449 0 +456 5.319411810450838 1.104217408063228 0 +457 1.518687188593869 0.5537771146992819 0 +458 0.1464101615141686 0.1464101615146301 0 +459 -1.853589838486143 1.146410161513634 0 +460 -1.853589838485723 1.853589838485872 0 +461 5.853589838485812 1.853589838485814 0 +462 -0.1464101615138812 1.146410161513663 0 +463 5.853589838486437 0.1464101615132628 0 +464 5.66437825603305 0.32010994793523 0 +465 3.110775565050634 0.4583452779703726 0 +466 5.67586250699043 0.845917921811135 0 +467 5.523063515482079 0.9418530826340643 0 +468 3.433183893948602 0.6535510639423447 0 +469 -1.547924112768604 1.313756895468756 0 +470 1.410352789291488 1.73849816706357 0 +471 5.689696971232865 1.541798135581961 0 +472 -1.689696971233646 1.541798135583045 0 +473 2.398979008517908 1.735642598100635 0 $EndNodes $Elements -662 +944 1 1 2 3 1 1 7 2 1 2 3 1 7 8 3 1 2 3 1 8 9 @@ -445,566 +586,848 @@ $Elements 98 1 2 1 6 98 99 99 1 2 1 6 99 100 100 1 2 1 6 100 1 -101 2 2 4 1 269 311 283 -102 2 2 4 1 190 324 118 -103 2 2 4 1 119 221 219 -104 2 2 4 1 105 205 198 -105 2 2 4 1 219 222 119 -106 2 2 4 1 224 261 120 -107 2 2 4 1 249 279 128 -108 2 2 4 1 260 299 231 -109 2 2 4 1 243 253 126 -110 2 2 4 1 130 255 194 -111 2 2 4 1 2 136 15 -112 2 2 4 1 112 228 227 -113 2 2 4 1 151 230 150 -114 2 2 4 1 154 230 151 -115 2 2 4 1 14 186 133 -116 2 2 4 1 118 256 190 -117 2 2 4 1 15 186 14 -118 2 2 4 1 136 186 15 -119 2 2 4 1 113 213 212 -120 2 2 4 1 231 276 260 -121 2 2 4 1 204 270 106 -122 2 2 4 1 251 272 208 -123 2 2 4 1 106 268 204 -124 2 2 4 1 243 291 253 -125 2 2 4 1 252 328 240 -126 2 2 4 1 105 306 205 -127 2 2 4 1 134 283 242 -128 2 2 4 1 199 279 249 -129 2 2 4 1 227 229 112 -130 2 2 4 1 202 267 103 -131 2 2 4 1 228 261 224 -132 2 2 4 1 92 232 91 -133 2 2 4 1 243 298 239 -134 2 2 4 1 216 221 110 -135 2 2 4 1 195 280 109 -136 2 2 4 1 113 314 213 -137 2 2 4 1 191 324 190 -138 2 2 4 1 260 276 180 -139 2 2 4 1 236 284 184 -140 2 2 4 1 154 231 230 -141 2 2 4 1 205 270 204 -142 2 2 4 1 222 316 119 -143 2 2 4 1 283 311 197 -144 2 2 4 1 230 300 229 -145 2 2 4 1 240 289 252 -146 2 2 4 1 192 258 122 -147 2 2 4 1 132 264 247 -148 2 2 4 1 116 193 136 -149 2 2 4 1 196 311 217 -150 2 2 4 1 91 232 129 -151 2 2 4 1 239 297 238 -152 2 2 4 1 112 295 228 -153 2 2 4 1 128 279 271 -154 2 2 4 1 120 275 224 -155 2 2 4 1 198 217 105 -156 2 2 4 1 212 214 113 -157 2 2 4 1 208 278 251 -158 2 2 4 1 119 288 221 -159 2 2 4 1 198 205 203 -160 2 2 4 1 196 217 198 -161 2 2 4 1 103 303 202 -162 2 2 4 1 229 300 123 -163 2 2 4 1 255 301 194 -164 2 2 4 1 235 238 114 -165 2 2 4 1 137 193 116 -166 2 2 4 1 121 311 269 -167 2 2 4 1 243 323 298 -168 2 2 4 1 271 279 274 -169 2 2 4 1 129 200 199 -170 2 2 4 1 129 232 200 -171 2 2 4 1 115 242 117 -172 2 2 4 1 213 280 195 -173 2 2 4 1 150 230 227 -174 2 2 4 1 110 329 216 -175 2 2 4 1 203 205 204 -176 2 2 4 1 194 287 130 -177 2 2 4 1 212 213 211 -178 2 2 4 1 275 326 223 -179 2 2 4 1 204 268 206 -180 2 2 4 1 135 236 235 -181 2 2 4 1 239 298 127 -182 2 2 4 1 184 265 236 -183 2 2 4 1 175 190 183 -184 2 2 4 1 127 297 239 -185 2 2 4 1 242 283 197 -186 2 2 4 1 182 266 257 -187 2 2 4 1 240 321 101 -188 2 2 4 1 211 213 195 -189 2 2 4 1 242 294 134 -190 2 2 4 1 166 216 215 -191 2 2 4 1 227 228 226 -192 2 2 4 1 152 206 202 -193 2 2 4 1 164 208 207 -194 2 2 4 1 168 210 209 -195 2 2 4 1 145 203 148 -196 2 2 4 1 156 201 182 -197 2 2 4 1 156 182 181 -198 2 2 4 1 166 215 167 -199 2 2 4 1 203 204 148 -200 2 2 4 1 186 187 133 -201 2 2 4 1 240 328 210 -202 2 2 4 1 168 209 165 -203 2 2 4 1 212 215 214 -204 2 2 4 1 226 228 224 -205 2 2 4 1 186 189 187 -206 2 2 4 1 196 198 144 -207 2 2 4 1 138 277 137 -208 2 2 4 1 219 221 218 -209 2 2 4 1 152 202 201 -210 2 2 4 1 137 277 194 -211 2 2 4 1 223 326 225 -212 2 2 4 1 183 240 220 -213 2 2 4 1 135 284 236 -214 2 2 4 1 162 218 163 -215 2 2 4 1 144 203 145 -216 2 2 4 1 202 268 267 -217 2 2 4 1 247 312 132 -218 2 2 4 1 172 220 169 -219 2 2 4 1 162 219 218 -220 2 2 4 1 117 242 139 -221 2 2 4 1 170 211 171 -222 2 2 4 1 140 196 144 -223 2 2 4 1 164 207 161 -224 2 2 4 1 175 191 190 -225 2 2 4 1 234 238 235 -226 2 2 4 1 183 220 172 -227 2 2 4 1 214 315 113 -228 2 2 4 1 166 218 216 -229 2 2 4 1 164 209 208 -230 2 2 4 1 168 220 210 -231 2 2 4 1 149 206 152 -232 2 2 4 1 146 224 223 -233 2 2 4 1 221 288 110 -234 2 2 4 1 163 218 166 -235 2 2 4 1 198 203 144 -236 2 2 4 1 165 209 164 -237 2 2 4 1 167 215 170 -238 2 2 4 1 176 234 173 -239 2 2 4 1 132 312 292 -240 2 2 4 1 150 227 226 -241 2 2 4 1 169 220 168 -242 2 2 4 1 122 302 192 -243 2 2 4 1 170 212 211 -244 2 2 4 1 204 206 148 -245 2 2 4 1 137 194 193 -246 2 2 4 1 150 226 147 -247 2 2 4 1 157 237 159 -248 2 2 4 1 162 237 219 -249 2 2 4 1 146 226 224 -250 2 2 4 1 159 237 162 -251 2 2 4 1 181 237 157 -252 2 2 4 1 176 238 234 -253 2 2 4 1 143 223 142 -254 2 2 4 1 231 300 230 -255 2 2 4 1 154 276 231 -256 2 2 4 1 153 201 156 -257 2 2 4 1 171 174 173 -258 2 2 4 1 167 169 168 -259 2 2 4 1 167 168 165 -260 2 2 4 1 171 172 169 -261 2 2 4 1 173 175 172 -262 2 2 4 1 163 165 164 -263 2 2 4 1 170 171 169 -264 2 2 4 1 162 163 161 -265 2 2 4 1 163 164 161 -266 2 2 4 1 166 167 165 -267 2 2 4 1 163 166 165 -268 2 2 4 1 171 173 172 -269 2 2 4 1 167 170 169 -270 2 2 4 1 175 183 172 -271 2 2 4 1 174 177 176 -272 2 2 4 1 174 176 173 -273 2 2 4 1 159 162 161 -274 2 2 4 1 160 180 158 -275 2 2 4 1 159 161 160 -276 2 2 4 1 159 160 158 -277 2 2 4 1 157 159 158 -278 2 2 4 1 157 158 155 -279 2 2 4 1 156 181 157 -280 2 2 4 1 156 157 155 -281 2 2 4 1 153 156 155 -282 2 2 4 1 153 155 154 -283 2 2 4 1 152 201 153 -284 2 2 4 1 153 154 151 -285 2 2 4 1 152 153 151 -286 2 2 4 1 149 152 151 -287 2 2 4 1 149 151 150 -288 2 2 4 1 149 150 147 -289 2 2 4 1 148 149 147 -290 2 2 4 1 145 148 147 -291 2 2 4 1 146 223 143 -292 2 2 4 1 145 147 146 -293 2 2 4 1 145 146 143 -294 2 2 4 1 144 145 143 -295 2 2 4 1 176 239 238 -296 2 2 4 1 140 144 143 -297 2 2 4 1 182 303 266 -298 2 2 4 1 250 329 110 -299 2 2 4 1 160 192 180 -300 2 2 4 1 139 197 196 -301 2 2 4 1 140 143 142 -302 2 2 4 1 147 226 146 -303 2 2 4 1 114 296 235 -304 2 2 4 1 148 206 149 -305 2 2 4 1 173 234 175 -306 2 2 4 1 233 241 200 -307 2 2 4 1 101 289 240 -308 2 2 4 1 177 239 176 -309 2 2 4 1 234 235 191 -310 2 2 4 1 269 283 178 -311 2 2 4 1 115 294 242 -312 2 2 4 1 140 142 138 -313 2 2 4 1 139 196 140 -314 2 2 4 1 233 313 241 -315 2 2 4 1 215 329 214 -316 2 2 4 1 161 207 160 -317 2 2 4 1 171 211 174 -318 2 2 4 1 199 249 129 -319 2 2 4 1 210 278 209 -320 2 2 4 1 160 207 192 -321 2 2 4 1 170 215 212 -322 2 2 4 1 183 321 240 -323 2 2 4 1 206 268 202 -324 2 2 4 1 223 225 142 -325 2 2 4 1 174 195 177 -326 2 2 4 1 232 292 233 -327 2 2 4 1 155 276 154 -328 2 2 4 1 180 276 158 -329 2 2 4 1 235 236 191 -330 2 2 4 1 174 211 195 -331 2 2 4 1 175 234 191 -332 2 2 4 1 218 221 216 -333 2 2 4 1 92 292 232 -334 2 2 4 1 292 312 233 -335 2 2 4 1 142 277 138 -336 2 2 4 1 241 313 125 -337 2 2 4 1 220 240 210 -338 2 2 4 1 277 327 287 -339 2 2 4 1 189 279 187 -340 2 2 4 1 241 307 290 -341 2 2 4 1 106 305 268 -342 2 2 4 1 109 291 195 -343 2 2 4 1 273 321 190 -344 2 2 4 1 62 256 61 -345 2 2 4 1 16 115 2 -346 2 2 4 1 11 125 10 -347 2 2 4 1 46 253 45 -348 2 2 4 1 84 254 83 -349 2 2 4 1 71 258 70 -350 2 2 4 1 33 257 32 -351 2 2 4 1 23 121 22 -352 2 2 4 1 10 248 9 -353 2 2 4 1 14 133 13 -354 2 2 4 1 80 261 79 -355 2 2 4 1 18 134 17 -356 2 2 4 1 75 263 74 -357 2 2 4 1 9 124 8 -358 2 2 4 1 89 128 88 -359 2 2 4 1 8 244 7 -360 2 2 4 1 66 252 65 -361 2 2 4 1 40 250 39 -362 2 2 4 1 39 110 38 -363 2 2 4 1 30 267 29 -364 2 2 4 1 88 271 87 -365 2 2 4 1 67 102 66 -366 2 2 4 1 76 123 75 -367 2 2 4 1 37 119 36 -368 2 2 4 1 47 126 46 -369 2 2 4 1 42 113 41 -370 2 2 4 1 85 130 84 -371 2 2 4 1 70 107 69 -372 2 2 4 1 22 269 21 -373 2 2 4 1 27 270 26 -374 2 2 4 1 32 266 31 -375 2 2 4 1 61 118 60 -376 2 2 4 1 94 132 93 -377 2 2 4 1 63 273 62 -378 2 2 4 1 45 109 44 -379 2 2 4 1 83 108 82 -380 2 2 4 1 34 104 33 -381 2 2 4 1 72 122 71 -382 2 2 4 1 25 105 24 -383 2 2 4 1 81 120 80 -384 2 2 4 1 74 111 73 -385 2 2 4 1 90 249 89 -386 2 2 4 1 59 184 58 -387 2 2 4 1 96 185 95 -388 2 2 4 1 31 103 30 -389 2 2 4 1 28 106 27 -390 2 2 4 1 21 178 20 -391 2 2 4 1 87 131 86 -392 2 2 4 1 68 251 67 -393 2 2 4 1 78 112 77 -394 2 2 4 1 86 255 85 -395 2 2 4 1 69 272 68 -396 2 2 4 1 95 264 94 -397 2 2 4 1 60 265 59 -398 2 2 4 1 91 129 90 -399 2 2 4 1 64 101 63 -400 2 2 4 1 82 262 81 -401 2 2 4 1 73 259 72 -402 2 2 4 1 38 288 37 -403 2 2 4 1 44 280 43 -404 2 2 4 1 139 242 197 -405 2 2 4 1 65 289 64 -406 2 2 4 1 139 140 138 -407 2 2 4 1 199 200 188 -408 2 2 4 1 35 286 34 -409 2 2 4 1 241 290 188 -410 2 2 4 1 158 276 155 -411 2 2 4 1 268 305 267 -412 2 2 4 1 116 136 2 -413 2 2 4 1 13 290 12 -414 2 2 4 1 187 279 199 -415 2 2 4 1 272 317 208 -416 2 2 4 1 256 273 190 -417 2 2 4 1 197 311 196 -418 2 2 4 1 93 292 92 -419 2 2 4 1 209 278 208 -420 2 2 4 1 125 307 241 -421 2 2 4 1 177 291 243 -422 2 2 4 1 117 139 138 -423 2 2 4 1 187 188 133 -424 2 2 4 1 210 328 278 -425 2 2 4 1 200 241 188 -426 2 2 4 1 123 308 229 -427 2 2 4 1 229 308 112 -428 2 2 4 1 125 313 248 -429 2 2 4 1 190 321 183 -430 2 2 4 1 225 327 277 -431 2 2 4 1 208 317 207 -432 2 2 4 1 202 303 201 -433 2 2 4 1 245 320 141 -434 2 2 4 1 121 310 217 -435 2 2 4 1 217 310 105 -436 2 2 4 1 247 320 245 -437 2 2 4 1 115 116 2 -438 2 2 4 1 235 296 135 -439 2 2 4 1 246 313 312 -440 2 2 4 1 17 294 16 -441 2 2 4 1 216 329 215 -442 2 2 4 1 79 295 78 -443 2 2 4 1 201 303 182 -444 2 2 4 1 228 295 261 -445 2 2 4 1 224 275 223 -446 2 2 4 1 225 277 142 -447 2 2 4 1 125 248 10 -448 2 2 4 1 9 248 124 -449 2 2 4 1 124 244 8 -450 2 2 4 1 39 250 110 -451 2 2 4 1 128 271 88 -452 2 2 4 1 102 252 66 -453 2 2 4 1 123 263 75 -454 2 2 4 1 126 253 46 -455 2 2 4 1 130 254 84 -456 2 2 4 1 70 258 107 -457 2 2 4 1 257 266 32 -458 2 2 4 1 121 269 22 -459 2 2 4 1 61 256 118 -460 2 2 4 1 62 273 256 -461 2 2 4 1 45 253 109 -462 2 2 4 1 83 254 108 -463 2 2 4 1 122 258 71 -464 2 2 4 1 104 257 33 -465 2 2 4 1 120 261 80 -466 2 2 4 1 74 263 111 -467 2 2 4 1 89 249 128 -468 2 2 4 1 103 267 30 -469 2 2 4 1 187 199 188 -470 2 2 4 1 31 266 103 -471 2 2 4 1 106 270 27 -472 2 2 4 1 21 269 178 -473 2 2 4 1 87 271 131 -474 2 2 4 1 67 251 102 -475 2 2 4 1 85 255 130 -476 2 2 4 1 107 272 69 -477 2 2 4 1 94 264 132 -478 2 2 4 1 118 265 60 -479 2 2 4 1 101 273 63 -480 2 2 4 1 131 255 86 -481 2 2 4 1 68 272 251 -482 2 2 4 1 185 264 95 -483 2 2 4 1 59 265 184 -484 2 2 4 1 108 262 82 -485 2 2 4 1 72 259 122 -486 2 2 4 1 129 249 90 -487 2 2 4 1 81 262 120 -488 2 2 4 1 111 259 73 -489 2 2 4 1 177 243 239 -490 2 2 4 1 110 288 38 -491 2 2 4 1 37 288 119 -492 2 2 4 1 182 325 181 -493 2 2 4 1 252 289 65 -494 2 2 4 1 109 280 44 -495 2 2 4 1 64 289 101 -496 2 2 4 1 136 189 186 -497 2 2 4 1 34 286 104 -498 2 2 4 1 19 282 18 -499 2 2 4 1 48 293 47 -500 2 2 4 1 133 290 13 -501 2 2 4 1 194 301 193 -502 2 2 4 1 274 279 189 -503 2 2 4 1 16 294 115 -504 2 2 4 1 134 294 17 -505 2 2 4 1 3 318 19 -506 2 2 4 1 20 318 3 -507 2 2 4 1 7 330 1 -508 2 2 4 1 4 319 48 -509 2 2 4 1 49 319 4 -510 2 2 4 1 1 330 100 -511 2 2 4 1 246 247 245 -512 2 2 4 1 261 295 79 -513 2 2 4 1 58 331 5 -514 2 2 4 1 5 331 57 -515 2 2 4 1 6 332 96 -516 2 2 4 1 97 332 6 -517 2 2 4 1 78 295 112 -518 2 2 4 1 219 322 222 -519 2 2 4 1 207 317 309 -520 2 2 4 1 18 282 134 -521 2 2 4 1 47 293 126 -522 2 2 4 1 188 290 133 -523 2 2 4 1 232 233 200 -524 2 2 4 1 227 230 229 -525 2 2 4 1 267 305 29 -526 2 2 4 1 28 305 106 -527 2 2 4 1 270 306 26 -528 2 2 4 1 25 306 105 -529 2 2 4 1 11 307 125 -530 2 2 4 1 50 179 49 -531 2 2 4 1 76 308 123 -532 2 2 4 1 112 308 77 -533 2 2 4 1 185 320 264 -534 2 2 4 1 23 310 121 -535 2 2 4 1 105 310 24 -536 2 2 4 1 42 314 113 -537 2 2 4 1 40 315 250 -538 2 2 4 1 113 315 41 -539 2 2 4 1 119 316 36 -540 2 2 4 1 136 193 189 -541 2 2 4 1 29 305 28 -542 2 2 4 1 290 307 12 -543 2 2 4 1 280 314 43 -544 2 2 4 1 192 309 258 -545 2 2 4 1 238 297 114 -546 2 2 4 1 35 316 286 -547 2 2 4 1 222 304 286 -548 2 2 4 1 124 248 246 -549 2 2 4 1 246 312 247 -550 2 2 4 1 207 309 192 -551 2 2 4 1 26 306 25 -552 2 2 4 1 12 307 11 -553 2 2 4 1 192 302 180 -554 2 2 4 1 193 274 189 -555 2 2 4 1 130 287 254 -556 2 2 4 1 124 246 245 -557 2 2 4 1 126 323 243 -558 2 2 4 1 132 292 93 -559 2 2 4 1 117 138 137 -560 2 2 4 1 77 308 76 -561 2 2 4 1 24 310 23 -562 2 2 4 1 237 322 219 -563 2 2 4 1 217 311 121 -564 2 2 4 1 115 117 116 -565 2 2 4 1 245 281 244 -566 2 2 4 1 43 314 42 -567 2 2 4 1 41 315 40 -568 2 2 4 1 282 283 134 -569 2 2 4 1 36 316 35 -570 2 2 4 1 178 283 282 -571 2 2 4 1 117 137 116 -572 2 2 4 1 193 301 274 -573 2 2 4 1 248 313 246 -574 2 2 4 1 124 245 244 -575 2 2 4 1 271 274 131 -576 2 2 4 1 251 278 102 -577 2 2 4 1 262 275 120 -578 2 2 4 1 111 260 259 -579 2 2 4 1 250 315 214 -580 2 2 4 1 253 291 109 -581 2 2 4 1 141 281 245 -582 2 2 4 1 100 281 99 -583 2 2 4 1 57 284 56 -584 2 2 4 1 98 285 97 -585 2 2 4 1 264 320 247 -586 2 2 4 1 266 303 103 -587 2 2 4 1 236 324 191 -588 2 2 4 1 195 291 177 -589 2 2 4 1 293 323 126 -590 2 2 4 1 312 313 233 -591 2 2 4 1 181 322 237 -592 2 2 4 1 286 304 104 -593 2 2 4 1 263 299 111 -594 2 2 4 1 259 302 122 -595 2 2 4 1 131 301 255 -596 2 2 4 1 123 300 263 -597 2 2 4 1 205 306 270 -598 2 2 4 1 54 114 53 -599 2 2 4 1 55 296 54 -600 2 2 4 1 56 135 55 -601 2 2 4 1 99 141 98 -602 2 2 4 1 53 297 52 -603 2 2 4 1 51 298 50 -604 2 2 4 1 52 127 51 -605 2 2 4 1 277 287 194 -606 2 2 4 1 213 314 280 -607 2 2 4 1 286 316 222 -608 2 2 4 1 258 309 107 -609 2 2 4 1 244 330 7 -610 2 2 4 1 178 318 20 -611 2 2 4 1 96 332 185 -612 2 2 4 1 184 331 58 -613 2 2 4 1 180 302 260 -614 2 2 4 1 181 325 304 -615 2 2 4 1 107 317 272 -616 2 2 4 1 265 324 236 -617 2 2 4 1 222 322 304 -618 2 2 4 1 111 299 260 -619 2 2 4 1 274 301 131 -620 2 2 4 1 260 302 259 -621 2 2 4 1 287 327 254 -622 2 2 4 1 257 325 182 -623 2 2 4 1 214 329 250 -624 2 2 4 1 101 321 273 -625 2 2 4 1 262 326 275 -626 2 2 4 1 278 328 102 -627 2 2 4 1 19 318 282 -628 2 2 4 1 48 319 293 -629 2 2 4 1 263 300 299 -630 2 2 4 1 254 327 108 -631 2 2 4 1 108 326 262 -632 2 2 4 1 102 328 252 -633 2 2 4 1 304 325 104 -634 2 2 4 1 50 298 179 -635 2 2 4 1 179 319 49 -636 2 2 4 1 118 324 265 -637 2 2 4 1 104 325 257 -638 2 2 4 1 298 323 179 -639 2 2 4 1 309 317 107 -640 2 2 4 1 282 318 178 -641 2 2 4 1 56 284 135 -642 2 2 4 1 99 281 141 -643 2 2 4 1 141 285 98 -644 2 2 4 1 100 330 281 -645 2 2 4 1 57 331 284 -646 2 2 4 1 285 332 97 -647 2 2 4 1 304 322 181 -648 2 2 4 1 179 323 293 -649 2 2 4 1 285 320 185 -650 2 2 4 1 108 327 326 -651 2 2 4 1 293 319 179 -652 2 2 4 1 135 296 55 -653 2 2 4 1 54 296 114 -654 2 2 4 1 114 297 53 -655 2 2 4 1 52 297 127 -656 2 2 4 1 127 298 51 -657 2 2 4 1 281 330 244 -658 2 2 4 1 284 331 184 -659 2 2 4 1 185 332 285 -660 2 2 4 1 141 320 285 -661 2 2 4 1 299 300 231 -662 2 2 4 1 326 327 225 +101 2 2 4 1 261 449 399 +102 2 2 4 1 81 291 110 +103 2 2 4 1 399 449 109 +104 2 2 4 1 327 328 251 +105 2 2 4 1 255 407 101 +106 2 2 4 1 253 326 325 +107 2 2 4 1 122 391 264 +108 2 2 4 1 270 388 102 +109 2 2 4 1 101 444 255 +110 2 2 4 1 251 445 327 +111 2 2 4 1 105 282 281 +112 2 2 4 1 287 453 106 +113 2 2 4 1 240 392 390 +114 2 2 4 1 265 419 104 +115 2 2 4 1 113 292 269 +116 2 2 4 1 329 330 237 +117 2 2 4 1 103 420 341 +118 2 2 4 1 104 418 265 +119 2 2 4 1 252 343 323 +120 2 2 4 1 325 441 253 +121 2 2 4 1 117 429 263 +122 2 2 4 1 128 293 276 +123 2 2 4 1 106 422 287 +124 2 2 4 1 388 440 102 +125 2 2 4 1 291 423 110 +126 2 2 4 1 268 386 107 +127 2 2 4 1 82 291 81 +128 2 2 4 1 143 433 431 +129 2 2 4 1 264 437 122 +130 2 2 4 1 281 450 105 +131 2 2 4 1 341 436 103 +132 2 2 4 1 263 309 117 +133 2 2 4 1 330 331 237 +134 2 2 4 1 26 453 421 +135 2 2 4 1 383 422 106 +136 2 2 4 1 21 397 20 +137 2 2 4 1 431 433 288 +138 2 2 4 1 286 453 287 +139 2 2 4 1 343 435 323 +140 2 2 4 1 103 384 30 +141 2 2 4 1 276 442 128 +142 2 2 4 1 390 432 240 +143 2 2 4 1 363 457 287 +144 2 2 4 1 287 422 363 +145 2 2 4 1 421 453 286 +146 2 2 4 1 263 429 257 +147 2 2 4 1 122 280 72 +148 2 2 4 1 105 283 282 +149 2 2 4 1 292 430 269 +150 2 2 4 1 30 384 29 +151 2 2 4 1 72 280 71 +152 2 2 4 1 237 428 329 +153 2 2 4 1 116 276 274 +154 2 2 4 1 277 279 123 +155 2 2 4 1 398 449 259 +156 2 2 4 1 269 427 113 +157 2 2 4 1 419 420 32 +158 2 2 4 1 407 429 62 +159 2 2 4 1 397 458 20 +160 2 2 4 1 341 420 267 +161 2 2 4 1 400 417 232 +162 2 2 4 1 240 425 392 +163 2 2 4 1 267 419 265 +164 2 2 4 1 123 281 277 +165 2 2 4 1 107 446 268 +166 2 2 4 1 249 394 388 +167 2 2 4 1 265 418 266 +168 2 2 4 1 274 289 116 +169 2 2 4 1 257 407 255 +170 2 2 4 1 234 406 306 +171 2 2 4 1 308 403 233 +172 2 2 4 1 106 447 383 +173 2 2 4 1 323 426 252 +174 2 2 4 1 261 399 262 +175 2 2 4 1 136 464 271 +176 2 2 4 1 260 398 259 +177 2 2 4 1 249 444 394 +178 2 2 4 1 112 445 273 +179 2 2 4 1 273 441 112 +180 2 2 4 1 391 424 264 +181 2 2 4 1 109 449 398 +182 2 2 4 1 404 409 356 +183 2 2 4 1 267 420 419 +184 2 2 4 1 257 429 407 +185 2 2 4 1 316 452 374 +186 2 2 4 1 406 472 306 +187 2 2 4 1 308 471 403 +188 2 2 4 1 277 281 278 +189 2 2 4 1 102 425 270 +190 2 2 4 1 253 426 326 +191 2 2 4 1 404 469 409 +192 2 2 4 1 232 417 402 +193 2 2 4 1 283 284 282 +194 2 2 4 1 328 427 251 +195 2 2 4 1 386 432 107 +196 2 2 4 1 128 428 293 +197 2 2 4 1 271 430 136 +198 2 2 4 1 281 282 278 +199 2 2 4 1 121 455 272 +200 2 2 4 1 272 454 121 +201 2 2 4 1 316 456 208 +202 2 2 4 1 374 456 316 +203 2 2 4 1 231 454 272 +204 2 2 4 1 126 331 330 +205 2 2 4 1 321 435 196 +206 2 2 4 1 103 436 384 +207 2 2 4 1 196 468 321 +208 2 2 4 1 126 332 331 +209 2 2 4 1 310 439 374 +210 2 2 4 1 394 444 101 +211 2 2 4 1 327 445 112 +212 2 2 4 1 12 415 411 +213 2 2 4 1 412 417 299 +214 2 2 4 1 283 285 284 +215 2 2 4 1 232 448 400 +216 2 2 4 1 116 442 276 +217 2 2 4 1 279 443 123 +218 2 2 4 1 122 437 280 +219 2 2 4 1 283 286 285 +220 2 2 4 1 285 288 284 +221 2 2 4 1 286 287 285 +222 2 2 4 1 295 332 294 +223 2 2 4 1 294 332 126 +224 2 2 4 1 299 332 295 +225 2 2 4 1 303 311 304 +226 2 2 4 1 133 311 303 +227 2 2 4 1 306 312 311 +228 2 2 4 1 111 323 322 +229 2 2 4 1 111 322 38 +230 2 2 4 1 311 312 304 +231 2 2 4 1 303 335 133 +232 2 2 4 1 35 324 34 +233 2 2 4 1 39 326 111 +234 2 2 4 1 34 324 104 +235 2 2 4 1 133 335 93 +236 2 2 4 1 136 292 46 +237 2 2 4 1 113 328 44 +238 2 2 4 1 38 322 37 +239 2 2 4 1 42 327 112 +240 2 2 4 1 236 339 293 +241 2 2 4 1 36 317 120 +242 2 2 4 1 59 307 233 +243 2 2 4 1 87 330 329 +244 2 2 4 1 89 294 126 +245 2 2 4 1 234 305 95 +246 2 2 4 1 333 335 300 +247 2 2 4 1 307 308 233 +248 2 2 4 1 317 318 120 +249 2 2 4 1 234 306 305 +250 2 2 4 1 221 339 236 +251 2 2 4 1 19 220 18 +252 2 2 4 1 86 329 128 +253 2 2 4 1 313 314 114 +254 2 2 4 1 300 335 303 +255 2 2 4 1 325 326 40 +256 2 2 4 1 45 292 113 +257 2 2 4 1 112 325 41 +258 2 2 4 1 43 328 327 +259 2 2 4 1 54 313 114 +260 2 2 4 1 127 333 296 +261 2 2 4 1 14 134 13 +262 2 2 4 1 37 322 317 +263 2 2 4 1 296 333 300 +264 2 2 4 1 36 120 35 +265 2 2 4 1 54 114 53 +266 2 2 4 1 40 326 39 +267 2 2 4 1 39 111 38 +268 2 2 4 1 42 112 41 +269 2 2 4 1 47 136 46 +270 2 2 4 1 37 317 36 +271 2 2 4 1 45 113 44 +272 2 2 4 1 43 327 42 +273 2 2 4 1 120 324 35 +274 2 2 4 1 305 311 133 +275 2 2 4 1 78 109 77 +276 2 2 4 1 126 330 88 +277 2 2 4 1 127 294 90 +278 2 2 4 1 94 305 133 +279 2 2 4 1 336 339 221 +280 2 2 4 1 135 313 55 +281 2 2 4 1 307 309 308 +282 2 2 4 1 61 117 60 +283 2 2 4 1 117 307 60 +284 2 2 4 1 309 310 308 +285 2 2 4 1 84 116 83 +286 2 2 4 1 86 128 85 +287 2 2 4 1 87 329 86 +288 2 2 4 1 89 126 88 +289 2 2 4 1 94 133 93 +290 2 2 4 1 91 127 90 +291 2 2 4 1 59 233 58 +292 2 2 4 1 81 110 80 +293 2 2 4 1 96 234 95 +294 2 2 4 1 56 135 55 +295 2 2 4 1 93 335 92 +296 2 2 4 1 127 295 294 +297 2 2 4 1 91 333 127 +298 2 2 4 1 117 309 307 +299 2 2 4 1 46 292 45 +300 2 2 4 1 41 325 40 +301 2 2 4 1 44 328 43 +302 2 2 4 1 92 335 333 +303 2 2 4 1 55 313 54 +304 2 2 4 1 95 305 94 +305 2 2 4 1 88 330 87 +306 2 2 4 1 16 115 2 +307 2 2 4 1 90 294 89 +308 2 2 4 1 60 307 59 +309 2 2 4 1 317 319 318 +310 2 2 4 1 318 320 120 +311 2 2 4 1 306 311 305 +312 2 2 4 1 53 389 52 +313 2 2 4 1 314 315 114 +314 2 2 4 1 92 333 91 +315 2 2 4 1 118 336 221 +316 2 2 4 1 199 336 131 +317 2 2 4 1 127 296 295 +318 2 2 4 1 199 339 336 +319 2 2 4 1 319 321 318 +320 2 2 4 1 317 322 319 +321 2 2 4 1 114 389 53 +322 2 2 4 1 320 324 120 +323 2 2 4 1 314 316 315 +324 2 2 4 1 131 336 119 +325 2 2 4 1 251 337 241 +326 2 2 4 1 253 346 224 +327 2 2 4 1 296 297 295 +328 2 2 4 1 192 368 217 +329 2 2 4 1 140 350 143 +330 2 2 4 1 129 334 244 +331 2 2 4 1 322 323 319 +332 2 2 4 1 338 350 139 +333 2 2 4 1 188 368 192 +334 2 2 4 1 139 349 338 +335 2 2 4 1 224 346 340 +336 2 2 4 1 345 365 266 +337 2 2 4 1 139 350 140 +338 2 2 4 1 293 339 229 +339 2 2 4 1 229 339 199 +340 2 2 4 1 344 365 345 +341 2 2 4 1 178 340 179 +342 2 2 4 1 223 367 343 +343 2 2 4 1 168 344 202 +344 2 2 4 1 343 367 196 +345 2 2 4 1 179 340 182 +346 2 2 4 1 224 340 178 +347 2 2 4 1 132 349 139 +348 2 2 4 1 166 370 163 +349 2 2 4 1 296 298 297 +350 2 2 4 1 344 345 202 +351 2 2 4 1 337 368 241 +352 2 2 4 1 297 299 295 +353 2 2 4 1 188 192 191 +354 2 2 4 1 217 368 337 +355 2 2 4 1 176 367 223 +356 2 2 4 1 226 360 195 +357 2 2 4 1 354 358 211 +358 2 2 4 1 165 344 168 +359 2 2 4 1 195 360 158 +360 2 2 4 1 130 349 132 +361 2 2 4 1 223 224 178 +362 2 2 4 1 200 381 184 +363 2 2 4 1 210 370 166 +364 2 2 4 1 185 376 188 +365 2 2 4 1 209 347 208 +366 2 2 4 1 216 341 267 +367 2 2 4 1 157 348 214 +368 2 2 4 1 271 272 258 +369 2 2 4 1 155 348 157 +370 2 2 4 1 242 358 354 +371 2 2 4 1 223 343 252 +372 2 2 4 1 254 353 210 +373 2 2 4 1 212 273 213 +374 2 2 4 1 211 358 153 +375 2 2 4 1 154 361 198 +376 2 2 4 1 298 302 297 +377 2 2 4 1 163 370 162 +378 2 2 4 1 296 300 298 +379 2 2 4 1 353 370 210 +380 2 2 4 1 168 202 170 +381 2 2 4 1 185 187 186 +382 2 2 4 1 247 248 200 +383 2 2 4 1 141 351 138 +384 2 2 4 1 153 358 151 +385 2 2 4 1 162 225 159 +386 2 2 4 1 160 164 163 +387 2 2 4 1 165 168 167 +388 2 2 4 1 170 196 171 +389 2 2 4 1 173 176 175 +390 2 2 4 1 175 375 204 +391 2 2 4 1 176 178 177 +392 2 2 4 1 179 182 181 +393 2 2 4 1 184 381 181 +394 2 2 4 1 185 188 187 +395 2 2 4 1 186 205 200 +396 2 2 4 1 193 373 187 +397 2 2 4 1 192 209 208 +398 2 2 4 1 201 377 243 +399 2 2 4 1 238 240 207 +400 2 2 4 1 230 254 210 +401 2 2 4 1 228 259 211 +402 2 2 4 1 213 251 241 +403 2 2 4 1 214 348 342 +404 2 2 4 1 218 369 366 +405 2 2 4 1 227 250 225 +406 2 2 4 1 228 362 352 +407 2 2 4 1 235 271 258 +408 2 2 4 1 338 349 246 +409 2 2 4 1 198 362 228 +410 2 2 4 1 259 354 211 +411 2 2 4 1 227 353 264 +412 2 2 4 1 138 351 137 +413 2 2 4 1 156 361 154 +414 2 2 4 1 173 367 176 +415 2 2 4 1 147 190 149 +416 2 2 4 1 155 371 348 +417 2 2 4 1 173 174 172 +418 2 2 4 1 189 376 183 +419 2 2 4 1 194 219 218 +420 2 2 4 1 265 266 226 +421 2 2 4 1 132 137 131 +422 2 2 4 1 158 160 159 +423 2 2 4 1 182 212 189 +424 2 2 4 1 256 257 255 +425 2 2 4 1 275 359 290 +426 2 2 4 1 246 349 203 +427 2 2 4 1 351 359 275 +428 2 2 4 1 137 215 199 +429 2 2 4 1 152 371 155 +430 2 2 4 1 182 340 212 +431 2 2 4 1 201 230 210 +432 2 2 4 1 150 151 148 +433 2 2 4 1 150 152 151 +434 2 2 4 1 214 341 216 +435 2 2 4 1 226 365 360 +436 2 2 4 1 366 369 359 +437 2 2 4 1 99 206 98 +438 2 2 4 1 154 198 153 +439 2 2 4 1 173 175 174 +440 2 2 4 1 198 228 211 +441 2 2 4 1 215 274 229 +442 2 2 4 1 216 267 265 +443 2 2 4 1 242 261 219 +444 2 2 4 1 227 264 250 +445 2 2 4 1 137 199 131 +446 2 2 4 1 132 139 138 +447 2 2 4 1 140 141 138 +448 2 2 4 1 140 143 142 +449 2 2 4 1 144 147 146 +450 2 2 4 1 194 218 145 +451 2 2 4 1 151 357 148 +452 2 2 4 1 149 161 150 +453 2 2 4 1 150 371 152 +454 2 2 4 1 162 227 225 +455 2 2 4 1 167 377 201 +456 2 2 4 1 182 183 181 +457 2 2 4 1 215 229 199 +458 2 2 4 1 228 352 260 +459 2 2 4 1 300 301 298 +460 2 2 4 1 303 304 301 +461 2 2 4 1 155 156 154 +462 2 2 4 1 225 361 159 +463 2 2 4 1 175 204 174 +464 2 2 4 1 245 279 277 +465 2 2 4 1 256 263 257 +466 2 2 4 1 141 359 351 +467 2 2 4 1 144 146 145 +468 2 2 4 1 147 148 146 +469 2 2 4 1 152 153 151 +470 2 2 4 1 160 162 159 +471 2 2 4 1 168 169 167 +472 2 2 4 1 192 217 209 +473 2 2 4 1 194 242 219 +474 2 2 4 1 245 246 203 +475 2 2 4 1 204 238 207 +476 2 2 4 1 258 347 209 +477 2 2 4 1 215 275 274 +478 2 2 4 1 223 252 224 +479 2 2 4 1 250 362 225 +480 2 2 4 1 277 278 246 +481 2 2 4 1 132 138 137 +482 2 2 4 1 144 145 142 +483 2 2 4 1 218 366 145 +484 2 2 4 1 171 172 169 +485 2 2 4 1 176 177 175 +486 2 2 4 1 188 191 187 +487 2 2 4 1 213 241 189 +488 2 2 4 1 204 239 238 +489 2 2 4 1 235 258 209 +490 2 2 4 1 300 303 301 +491 2 2 4 1 139 140 138 +492 2 2 4 1 148 357 146 +493 2 2 4 1 186 373 205 +494 2 2 4 1 216 226 195 +495 2 2 4 1 290 291 289 +496 2 2 4 1 100 356 99 +497 2 2 4 1 152 154 153 +498 2 2 4 1 157 158 156 +499 2 2 4 1 170 171 169 +500 2 2 4 1 361 362 198 +501 2 2 4 1 244 245 203 +502 2 2 4 1 215 351 275 +503 2 2 4 1 266 365 226 +504 2 2 4 1 274 276 229 +505 2 2 4 1 245 277 246 +506 2 2 4 1 278 338 246 +507 2 2 4 1 275 289 274 +508 2 2 4 1 137 351 215 +509 2 2 4 1 149 150 148 +510 2 2 4 1 157 214 195 +511 2 2 4 1 171 173 172 +512 2 2 4 1 239 270 238 +513 2 2 4 1 185 186 184 +514 2 2 4 1 236 237 222 +515 2 2 4 1 242 354 261 +516 2 2 4 1 275 290 289 +517 2 2 4 1 129 244 203 +518 2 2 4 1 203 349 130 +519 2 2 4 1 146 194 145 +520 2 2 4 1 160 163 162 +521 2 2 4 1 164 365 344 +522 2 2 4 1 214 342 341 +523 2 2 4 1 130 132 131 +524 2 2 4 1 99 356 206 +525 2 2 4 1 140 142 141 +526 2 2 4 1 147 149 148 +527 2 2 4 1 190 363 149 +528 2 2 4 1 152 155 154 +529 2 2 4 1 198 211 153 +530 2 2 4 1 155 157 156 +531 2 2 4 1 158 159 156 +532 2 2 4 1 159 361 156 +533 2 2 4 1 157 195 158 +534 2 2 4 1 363 364 161 +535 2 2 4 1 165 166 163 +536 2 2 4 1 164 344 165 +537 2 2 4 1 201 210 166 +538 2 2 4 1 168 170 169 +539 2 2 4 1 204 207 174 +540 2 2 4 1 176 223 178 +541 2 2 4 1 188 376 368 +542 2 2 4 1 194 357 242 +543 2 2 4 1 214 216 195 +544 2 2 4 1 204 375 239 +545 2 2 4 1 207 380 379 +546 2 2 4 1 216 265 226 +547 2 2 4 1 261 262 219 +548 2 2 4 1 252 253 224 +549 2 2 4 1 225 362 361 +550 2 2 4 1 227 370 353 +551 2 2 4 1 268 280 254 +552 2 2 4 1 383 384 382 +553 2 2 4 1 143 144 142 +554 2 2 4 1 165 167 166 +555 2 2 4 1 201 243 230 +556 2 2 4 1 276 293 229 +557 2 2 4 1 142 366 141 +558 2 2 4 1 149 363 161 +559 2 2 4 1 262 355 219 +560 2 2 4 1 179 180 177 +561 2 2 4 1 217 337 269 +562 2 2 4 1 355 369 218 +563 2 2 4 1 230 268 254 +564 2 2 4 1 178 179 177 +565 2 2 4 1 164 165 163 +566 2 2 4 1 192 208 191 +567 2 2 4 1 146 357 194 +568 2 2 4 1 179 181 180 +569 2 2 4 1 217 269 235 +570 2 2 4 1 352 362 250 +571 2 2 4 1 169 377 167 +572 2 2 4 1 167 201 166 +573 2 2 4 1 205 256 255 +574 2 2 4 1 141 366 359 +575 2 2 4 1 145 366 142 +576 2 2 4 1 183 184 181 +577 2 2 4 1 219 355 218 +578 2 2 4 1 371 378 348 +579 2 2 4 1 161 371 150 +580 2 2 4 1 187 373 186 +581 2 2 4 1 205 255 247 +582 2 2 4 1 359 369 290 +583 2 2 4 1 130 131 119 +584 2 2 4 1 129 203 130 +585 2 2 4 1 222 232 197 +586 2 2 4 1 228 260 259 +587 2 2 4 1 158 360 160 +588 2 2 4 1 161 378 371 +589 2 2 4 1 360 365 164 +590 2 2 4 1 182 189 183 +591 2 2 4 1 183 376 185 +592 2 2 4 1 186 200 184 +593 2 2 4 1 212 213 189 +594 2 2 4 1 205 247 200 +595 2 2 4 1 217 235 209 +596 2 2 4 1 221 236 222 +597 2 2 4 1 247 249 248 +598 2 2 4 1 151 358 357 +599 2 2 4 1 191 193 187 +600 2 2 4 1 379 380 243 +601 2 2 4 1 364 378 161 +602 2 2 4 1 162 370 227 +603 2 2 4 1 196 367 171 +604 2 2 4 1 372 373 193 +605 2 2 4 1 193 374 372 +606 2 2 4 1 357 358 242 +607 2 2 4 1 207 379 174 +608 2 2 4 1 183 185 184 +609 2 2 4 1 348 378 342 +610 2 2 4 1 177 375 175 +611 2 2 4 1 377 379 243 +612 2 2 4 1 160 360 164 +613 2 2 4 1 241 376 189 +614 2 2 4 1 240 380 207 +615 2 2 4 1 364 383 382 +616 2 2 4 1 172 377 169 +617 2 2 4 1 171 367 173 +618 2 2 4 1 248 381 200 +619 2 2 4 1 181 381 180 +620 2 2 4 1 174 379 172 +621 2 2 4 1 180 375 177 +622 2 2 4 1 205 373 256 +623 2 2 4 1 256 372 263 +624 2 2 4 1 256 373 372 +625 2 2 4 1 375 385 239 +626 2 2 4 1 378 382 342 +627 2 2 4 1 172 379 377 +628 2 2 4 1 340 346 212 +629 2 2 4 1 212 346 273 +630 2 2 4 1 364 382 378 +631 2 2 4 1 221 222 197 +632 2 2 4 1 129 130 119 +633 2 2 4 1 368 376 241 +634 2 2 4 1 239 387 270 +635 2 2 4 1 248 387 385 +636 2 2 4 1 248 385 381 +637 2 2 4 1 249 387 248 +638 2 2 4 1 385 387 239 +639 2 2 4 1 180 385 375 +640 2 2 4 1 230 386 268 +641 2 2 4 1 380 386 243 +642 2 2 4 1 243 386 230 +643 2 2 4 1 381 385 180 +644 2 2 4 1 115 129 119 +645 2 2 4 1 118 221 197 +646 2 2 4 1 119 336 118 +647 2 2 4 1 387 388 270 +648 2 2 4 1 249 388 387 +649 2 2 4 1 118 197 2 +650 2 2 4 1 115 119 118 +651 2 2 4 1 220 395 18 +652 2 2 4 1 52 389 121 +653 2 2 4 1 315 389 114 +654 2 2 4 1 69 390 68 +655 2 2 4 1 50 231 49 +656 2 2 4 1 70 107 69 +657 2 2 4 1 74 391 73 +658 2 2 4 1 73 122 72 +659 2 2 4 1 75 108 74 +660 2 2 4 1 52 121 51 +661 2 2 4 1 34 104 33 +662 2 2 4 1 68 392 67 +663 2 2 4 1 25 105 24 +664 2 2 4 1 28 106 27 +665 2 2 4 1 31 103 30 +666 2 2 4 1 23 123 22 +667 2 2 4 1 115 118 2 +668 2 2 4 1 220 396 395 +669 2 2 4 1 18 395 17 +670 2 2 4 1 115 334 129 +671 2 2 4 1 107 390 69 +672 2 2 4 1 73 391 122 +673 2 2 4 1 108 391 74 +674 2 2 4 1 16 334 115 +675 2 2 4 1 11 125 10 +676 2 2 4 1 10 393 9 +677 2 2 4 1 17 334 16 +678 2 2 4 1 9 124 8 +679 2 2 4 1 245 396 279 +680 2 2 4 1 67 102 66 +681 2 2 4 1 390 392 68 +682 2 2 4 1 334 395 244 +683 2 2 4 1 64 101 63 +684 2 2 4 1 65 394 64 +685 2 2 4 1 17 395 334 +686 2 2 4 1 67 392 102 +687 2 2 4 1 395 396 244 +688 2 2 4 1 125 393 10 +689 2 2 4 1 9 393 124 +690 2 2 4 1 244 396 245 +691 2 2 4 1 64 394 101 +692 2 2 4 1 396 397 279 +693 2 2 4 1 220 397 396 +694 2 2 4 1 77 398 76 +695 2 2 4 1 190 431 288 +696 2 2 4 1 405 464 136 +697 2 2 4 1 208 467 316 +698 2 2 4 1 109 398 77 +699 2 2 4 1 112 441 325 +700 2 2 4 1 355 470 423 +701 2 2 4 1 272 464 231 +702 2 2 4 1 79 399 78 +703 2 2 4 1 345 401 202 +704 2 2 4 1 284 408 282 +705 2 2 4 1 282 408 278 +706 2 2 4 1 321 401 318 +707 2 2 4 1 345 465 401 +708 2 2 4 1 15 402 14 +709 2 2 4 1 48 405 47 +710 2 2 4 1 57 403 56 +711 2 2 4 1 98 406 97 +712 2 2 4 1 8 404 7 +713 2 2 4 1 288 457 190 +714 2 2 4 1 394 440 388 +715 2 2 4 1 78 399 109 +716 2 2 4 1 411 415 302 +717 2 2 4 1 63 407 62 +718 2 2 4 1 134 417 412 +719 2 2 4 1 314 452 316 +720 2 2 4 1 190 457 363 +721 2 2 4 1 332 400 331 +722 2 2 4 1 299 400 332 +723 2 2 4 1 423 470 110 +724 2 2 4 1 338 408 350 +725 2 2 4 1 313 410 314 +726 2 2 4 1 280 446 71 +727 2 2 4 1 12 411 11 +728 2 2 4 1 297 412 299 +729 2 2 4 1 134 415 13 +730 2 2 4 1 298 416 302 +731 2 2 4 1 320 418 324 +732 2 2 4 1 33 419 32 +733 2 2 4 1 32 420 31 +734 2 2 4 1 79 434 399 +735 2 2 4 1 374 452 310 +736 2 2 4 1 123 450 281 +737 2 2 4 1 363 422 364 +738 2 2 4 1 290 423 291 +739 2 2 4 1 355 423 369 +740 2 2 4 1 318 401 320 +741 2 2 4 1 238 425 240 +742 2 2 4 1 384 447 29 +743 2 2 4 1 401 465 320 +744 2 2 4 1 14 402 134 +745 2 2 4 1 47 405 136 +746 2 2 4 1 56 403 135 +747 2 2 4 1 206 406 98 +748 2 2 4 1 124 404 8 +749 2 2 4 1 337 427 269 +750 2 2 4 1 105 421 283 +751 2 2 4 1 236 428 237 +752 2 2 4 1 62 429 61 +753 2 2 4 1 269 430 235 +754 2 2 4 1 147 431 190 +755 2 2 4 1 143 431 144 +756 2 2 4 1 350 433 143 +757 2 2 4 1 240 432 380 +758 2 2 4 1 398 438 76 +759 2 2 4 1 101 407 63 +760 2 2 4 1 399 434 262 +761 2 2 4 1 110 434 80 +762 2 2 4 1 111 426 323 +763 2 2 4 1 323 435 319 +764 2 2 4 1 342 436 341 +765 2 2 4 1 384 436 382 +766 2 2 4 1 353 437 264 +767 2 2 4 1 280 437 254 +768 2 2 4 1 75 438 108 +769 2 2 4 1 260 438 398 +770 2 2 4 1 424 473 352 +771 2 2 4 1 102 440 66 +772 2 2 4 1 65 440 394 +773 2 2 4 1 253 441 346 +774 2 2 4 1 128 442 85 +775 2 2 4 1 84 442 116 +776 2 2 4 1 123 443 22 +777 2 2 4 1 255 444 247 +778 2 2 4 1 213 445 251 +779 2 2 4 1 70 446 107 +780 2 2 4 1 28 447 106 +781 2 2 4 1 374 439 372 +782 2 2 4 1 354 449 261 +783 2 2 4 1 105 450 24 +784 2 2 4 1 23 450 123 +785 2 2 4 1 196 435 343 +786 2 2 4 1 278 408 338 +787 2 2 4 1 356 409 206 +788 2 2 4 1 135 410 313 +789 2 2 4 1 26 421 25 +790 2 2 4 1 27 453 26 +791 2 2 4 1 272 455 258 +792 2 2 4 1 193 456 374 +793 2 2 4 1 208 456 191 +794 2 2 4 1 50 454 231 +795 2 2 4 1 121 454 51 +796 2 2 4 1 3 458 19 +797 2 2 4 1 20 458 3 +798 2 2 4 1 7 459 1 +799 2 2 4 1 6 460 96 +800 2 2 4 1 97 460 6 +801 2 2 4 1 58 461 5 +802 2 2 4 1 5 461 57 +803 2 2 4 1 2 462 15 +804 2 2 4 1 197 462 2 +805 2 2 4 1 1 459 100 +806 2 2 4 1 49 463 4 +807 2 2 4 1 4 463 48 +808 2 2 4 1 220 458 397 +809 2 2 4 1 107 432 390 +810 2 2 4 1 250 424 352 +811 2 2 4 1 389 466 121 +812 2 2 4 1 170 468 196 +813 2 2 4 1 285 457 288 +814 2 2 4 1 289 451 116 +815 2 2 4 1 108 473 424 +816 2 2 4 1 302 416 411 +817 2 2 4 1 412 415 134 +818 2 2 4 1 11 411 125 +819 2 2 4 1 302 412 297 +820 2 2 4 1 25 421 105 +821 2 2 4 1 264 424 250 +822 2 2 4 1 136 430 292 +823 2 2 4 1 125 416 414 +824 2 2 4 1 393 414 413 +825 2 2 4 1 125 414 393 +826 2 2 4 1 393 413 124 +827 2 2 4 1 312 413 304 +828 2 2 4 1 304 414 301 +829 2 2 4 1 413 414 304 +830 2 2 4 1 414 416 301 +831 2 2 4 1 13 415 12 +832 2 2 4 1 301 416 298 +833 2 2 4 1 324 418 104 +834 2 2 4 1 329 428 128 +835 2 2 4 1 222 448 232 +836 2 2 4 1 104 419 33 +837 2 2 4 1 268 446 280 +838 2 2 4 1 113 427 328 +839 2 2 4 1 31 420 103 +840 2 2 4 1 283 421 286 +841 2 2 4 1 392 425 102 +842 2 2 4 1 326 426 111 +843 2 2 4 1 299 417 400 +844 2 2 4 1 263 439 309 +845 2 2 4 1 383 447 384 +846 2 2 4 1 364 422 383 +847 2 2 4 1 369 423 290 +848 2 2 4 1 408 433 350 +849 2 2 4 1 108 424 391 +850 2 2 4 1 116 451 83 +851 2 2 4 1 270 425 238 +852 2 2 4 1 252 426 253 +853 2 2 4 1 402 417 134 +854 2 2 4 1 321 468 401 +855 2 2 4 1 251 427 337 +856 2 2 4 1 331 448 237 +857 2 2 4 1 306 472 312 +858 2 2 4 1 310 471 308 +859 2 2 4 1 293 428 236 +860 2 2 4 1 124 469 404 +861 2 2 4 1 403 471 135 +862 2 2 4 1 206 472 406 +863 2 2 4 1 61 429 117 +864 2 2 4 1 235 430 271 +865 2 2 4 1 21 443 397 +866 2 2 4 1 144 431 147 +867 2 2 4 1 82 451 291 +868 2 2 4 1 380 432 386 +869 2 2 4 1 411 416 125 +870 2 2 4 1 302 415 412 +871 2 2 4 1 288 433 284 +872 2 2 4 1 80 434 79 +873 2 2 4 1 237 448 222 +874 2 2 4 1 319 435 321 +875 2 2 4 1 83 451 82 +876 2 2 4 1 382 436 342 +877 2 2 4 1 271 464 272 +878 2 2 4 1 121 466 455 +879 2 2 4 1 401 468 202 +880 2 2 4 1 254 437 353 +881 2 2 4 1 76 438 75 +882 2 2 4 1 372 439 263 +883 2 2 4 1 284 433 408 +884 2 2 4 1 309 439 310 +885 2 2 4 1 66 440 65 +886 2 2 4 1 346 441 273 +887 2 2 4 1 85 442 84 +888 2 2 4 1 22 443 21 +889 2 2 4 1 397 443 279 +890 2 2 4 1 312 472 409 +891 2 2 4 1 410 471 310 +892 2 2 4 1 247 444 249 +893 2 2 4 1 273 445 213 +894 2 2 4 1 71 446 70 +895 2 2 4 1 29 447 28 +896 2 2 4 1 259 449 354 +897 2 2 4 1 24 450 23 +898 2 2 4 1 410 452 314 +899 2 2 4 1 291 451 289 +900 2 2 4 1 106 453 27 +901 2 2 4 1 400 448 331 +902 2 2 4 1 48 463 405 +903 2 2 4 1 15 462 402 +904 2 2 4 1 57 461 403 +905 2 2 4 1 406 460 97 +906 2 2 4 1 404 459 7 +907 2 2 4 1 258 455 347 +908 2 2 4 1 51 454 50 +909 2 2 4 1 191 456 193 +910 2 2 4 1 287 457 285 +911 2 2 4 1 438 473 108 +912 2 2 4 1 233 461 58 +913 2 2 4 1 96 460 234 +914 2 2 4 1 19 458 220 +915 2 2 4 1 232 462 197 +916 2 2 4 1 100 459 356 +917 2 2 4 1 231 463 49 +918 2 2 4 1 110 470 434 +919 2 2 4 1 320 465 418 +920 2 2 4 1 310 452 410 +921 2 2 4 1 316 467 315 +922 2 2 4 1 266 465 345 +923 2 2 4 1 347 467 208 +924 2 2 4 1 315 466 389 +925 2 2 4 1 202 468 170 +926 2 2 4 1 262 470 355 +927 2 2 4 1 352 473 260 +928 2 2 4 1 402 462 232 +929 2 2 4 1 405 463 231 +930 2 2 4 1 403 461 233 +931 2 2 4 1 234 460 406 +932 2 2 4 1 356 459 404 +933 2 2 4 1 466 467 347 +934 2 2 4 1 315 467 466 +935 2 2 4 1 409 469 312 +936 2 2 4 1 312 469 413 +937 2 2 4 1 231 464 405 +938 2 2 4 1 418 465 266 +939 2 2 4 1 409 472 206 +940 2 2 4 1 135 471 410 +941 2 2 4 1 413 469 124 +942 2 2 4 1 260 473 438 +943 2 2 4 1 434 470 262 +944 2 2 4 1 455 466 347 $EndElements diff --git a/examples/backward_facing_step/config b/examples/backward_facing_step/config index 2a6cf6c..668ffa1 100644 --- a/examples/backward_facing_step/config +++ b/examples/backward_facing_step/config @@ -7,7 +7,7 @@ elements = u -> HDiv p -> L2 k -> L2 epsilon -> L2 -interpolant_order = 2 +interpolant_order = 3 [DG] DG = True @@ -23,6 +23,7 @@ nonlinear_tolerance = relative -> 1e-4 nonlinear_max_iterations = 200 relaxation_factors = 0.5, 0.5, 0.3, 0.3 + [TRANSIENT] transient = False @@ -30,16 +31,15 @@ transient = False [VISUALIZATION] save_to_file = True save_type = .vtu -#save_frequency = 0.1, time subdivision = 3 + [OTHER] model = KEpsilonINS run_dir = . num_threads = 6 -; Optional k-epsilon switches. These are the defaults, so omitting any of them -; changes nothing -- they are listed to show what can be modified. +; Optional k-epsilon switches wall_function = True wall_boundary = wall production_limiter = True diff --git a/examples/backward_facing_step/model_dir/model_config b/examples/backward_facing_step/model_dir/model_config index 7d4774e..c71f5be 100644 --- a/examples/backward_facing_step/model_dir/model_config +++ b/examples/backward_facing_step/model_dir/model_config @@ -12,7 +12,7 @@ sigma_epsilon = all -> 1.3 kappa = all -> 0.4187 e_log = all -> 9.793 -; Numerical safeguards, not substitutes for sensible ICs and BCs. +; Numerical safeguards k_floor = all -> 1e-8 epsilon_floor = all -> 1e-6 max_viscosity_ratio = all -> 200000 diff --git a/opencmp/helpers/wall_func.py b/opencmp/helpers/wall_func.py index a620620..b0cdc6e 100644 --- a/opencmp/helpers/wall_func.py +++ b/opencmp/helpers/wall_func.py @@ -17,6 +17,7 @@ """Geometry-independent wall functions for the k-epsilon turbulence model.""" +import logging import numpy as np import ngsolve as ngs @@ -25,14 +26,12 @@ class KEpsilonWallFunction: """Wall-layer eddy viscosity and dissipation for high-Re k-epsilon. The wall layer is found from mesh topology: cells owning a facet on - ``wall_boundary``, plus one face-connected neighbour layer. ``eval_nu_t`` - puts those cells on the wall law and every other cell on bulk + ``wall_boundary``. ``eval_nu_t`` puts those cells on the wall law and every + other cell on bulk ``C_mu k^2/epsilon``. - The friction velocity ``u_tau = C_mu**0.25 * sqrt(k)`` is a P0 projection - on the wall-facet owners, extended to their neighbours by arithmetic mean. - ``update`` refreshes it and must run once per Picard iteration, before - ``eval_nu_t``. + Friction velocity is ``C_mu**0.25 * sqrt(k_P)`` and is stored as P0 data on + wall-facet owners. ``update`` refreshes it once per Picard iteration. Wall distance comes from a regularized-Eikonal solve: the continuous field for coefficients integrated across a cell (``y_plus_field``, @@ -43,8 +42,9 @@ class KEpsilonWallFunction: #: y+ below which the viscous sublayer is assumed (no wall eddy viscosity). YPLUS_VISCOUS = 11.25 - #: y+ above which the log law stops applying and bulk k-epsilon takes over. - YPLUS_LOG_MAX = 200.0 + #: Recommended range for the equilibrium log-law wall treatment. + YPLUS_RECOMMENDED_MIN = 30.0 + YPLUS_RECOMMENDED_MAX = 300.0 def __init__(self, mesh: ngs.comp.Mesh, nu: float, C_mu: float, kappa: float, E_log: float = 9.8, wall_boundary: str = "wall", @@ -55,6 +55,8 @@ def __init__(self, mesh: ngs.comp.Mesh, nu: float, C_mu: float, kappa: float, self.kappa = kappa self.E_log = E_log # log-law roughness constant E self.wall_boundary = wall_boundary + self._warned_yplus_low = False + self._warned_yplus_high = False self.h = ngs.specialcf.mesh_size # Piecewise-constant space shared by the masks, the cell distance and u_tau. @@ -72,6 +74,8 @@ def __init__(self, mesh: ngs.comp.Mesh, nu: float, C_mu: float, kappa: float, # Zero until the first update(); eval_nu_t is then simply bulk everywhere. self.u_tau_cell = ngs.GridFunction(self._fes0) + self.wall_nu_t_cell = ngs.GridFunction(self._fes0) + self._y_plus_cell_gf = ngs.GridFunction(self._fes0) # ------------------------------------------------------------------ # Construction helpers @@ -80,9 +84,8 @@ def __init__(self, mesh: ngs.comp.Mesh, nu: float, C_mu: float, kappa: float, def _mark_wall_cells(self) -> None: """Find the wall layer from mesh topology. - Sets ``_wall_measure``, ``_marked`` / ``wall_facet_cell_mask`` (the - wall-facet owners), and ``mask`` (those owners plus one neighbour - layer -- the region the wall law is applied on). + Sets ``_wall_measure``, ``_marked`` / ``wall_facet_cell_mask`` and + ``mask`` to the cells that own a physical wall facet. """ # Assumes a simplicial mesh (one L2(0) DOF per cell). Quads/hexes parse # but the resulting layer is untested, so refuse rather than go silently wrong. @@ -111,46 +114,11 @@ def _mark_wall_cells(self) -> None: self.wall_facet_cell_mask = ngs.GridFunction(self._fes0) self.wall_facet_cell_mask.vec.FV().NumPy()[:] = self._marked.astype(float) - # The extra neighbour layer suppresses bulk-model production on cells - # immediately touching the wall layer across an interior facet. + # A wall function is a first-cell treatment. Cells that do not own a + # physical wall facet use the bulk closure, even when facet-adjacent to + # a wall owner. self.mask = ngs.GridFunction(self._fes0) - self.mask.vec.FV().NumPy()[:] = self._expand_by_one_facet_layer( - self._marked).astype(float) - - def _expand_by_one_facet_layer(self, wall_marked: np.ndarray) -> np.ndarray: - """Add every volume cell sharing a facet with a wall-facet owner.""" - elements = list(self._fes0.Elements(ngs.VOL)) - wall_elements = { - element.nr for element in elements - if any(wall_marked[dof] for dof in element.dofs) - } - - facet_to_elements = {} - element_by_number = {element.nr: element for element in elements} - self._element_dofs = { - element.nr: tuple(element.dofs) for element in elements - } - for element in elements: - for facet in element.facets: - facet_to_elements.setdefault(facet.nr, set()).add(element.nr) - - expanded_elements = set(wall_elements) - neighbour_sources = {} - for element_number in wall_elements: - for facet in element_by_number[element_number].facets: - neighbours = facet_to_elements[facet.nr] - expanded_elements.update(neighbours) - for neighbour in neighbours - wall_elements: - neighbour_sources.setdefault(neighbour, set()).add( - element_number) - self._wall_layer_sources = neighbour_sources - - expanded = np.zeros_like(wall_marked, dtype=bool) - for element in elements: - if element.nr in expanded_elements: - expanded[list(element.dofs)] = True - return expanded - + self.mask.vec.FV().NumPy()[:] = self._marked.astype(float) def _compute_distance_field(self, order: int, relax: float) -> ngs.GridFunction: """Distance to ``wall_boundary`` from a regularized Eikonal solve.""" eps = relax * self.h @@ -179,36 +147,76 @@ def _compute_distance_field(self, order: int, relax: float) -> ngs.GridFunction: # Per-iteration update # ------------------------------------------------------------------ + def _wall_viscosity_from_yplus(self, y_plus: np.ndarray) -> np.ndarray: + """Log-law wall viscosity from resolved ``u_tau`` and cell distance.""" + wall_nu_t = np.zeros_like(y_plus) + active = self.mask.vec.FV().NumPy() > 0.5 + log_cells = active & (y_plus > self.YPLUS_VISCOUS) + if np.any(log_cells): + u_plus = np.log(self.E_log * y_plus[log_cells]) / self.kappa + wall_nu_t[log_cells] = self.nu * ( + y_plus[log_cells] / u_plus - 1.0) + return np.maximum(wall_nu_t, 0.0) + def update(self, K) -> None: - """Refresh the friction velocity from the current k iterate. + """Refresh wall quantities using k-based friction velocity. Call once per Picard iteration, BEFORE ``eval_nu_t``. """ + u_tau = np.zeros(self._fes0.ndof) + wall_nu_t = np.zeros(self._fes0.ndof) projected = ngs.GridFunction(self._fes0) projected.Set(K) k_values = np.maximum(projected.vec.FV().NumPy(), 0.0) + u_tau[self._marked] = self.C_mu ** 0.25 * np.sqrt( + k_values[self._marked]) + y_plus_cell = (self._dist_cell.vec.FV().NumPy() + * u_tau / self.nu) - u_tau = np.zeros_like(k_values) - u_tau[self._marked] = self.C_mu ** 0.25 * np.sqrt(k_values[self._marked]) - - # A neighbour belongs to the same local wall-normal layer as its - # wall-facet source cell(s), so inherit their u_tau instead of - # recalculating it from the neighbour's independently varying k. - for element_number, source_numbers in self._wall_layer_sources.items(): - inherited = float(np.mean([ - u_tau[self._element_dofs[source_number][0]] - for source_number in source_numbers - ])) - u_tau[list(self._element_dofs[element_number])] = inherited + wall_nu_t = self._wall_viscosity_from_yplus(y_plus_cell) self.u_tau_cell.vec.FV().NumPy()[:] = u_tau + self.wall_nu_t_cell.vec.FV().NumPy()[:] = wall_nu_t + self._y_plus_cell_gf.vec.FV().NumPy()[:] = y_plus_cell + self._warn_if_yplus_outside_recommended_range(y_plus_cell) + + def _warn_if_yplus_outside_recommended_range(self, y_plus: np.ndarray) -> None: + """Warn once for each side of the recommended wall-function band.""" + wall_values = y_plus[self._marked] + total = wall_values.size + observed_min = float(np.min(wall_values)) + observed_max = float(np.max(wall_values)) + + low_count = int(np.count_nonzero( + wall_values < self.YPLUS_RECOMMENDED_MIN)) + if low_count and not self._warned_yplus_low: + logging.warning( + 'Wall-function validity: %d/%d wall cells (%.1f%%) have y+ < %.0f; ' + 'the equilibrium log-law treatment is recommended for %.0f <= y+ <= %.0f. ' + 'Observed wall-cell range: %.6g <= y+ <= %.6g.', + low_count, total, 100.0 * low_count / total, + self.YPLUS_RECOMMENDED_MIN, self.YPLUS_RECOMMENDED_MIN, + self.YPLUS_RECOMMENDED_MAX, observed_min, observed_max) + self._warned_yplus_low = True + + high_count = int(np.count_nonzero( + wall_values > self.YPLUS_RECOMMENDED_MAX)) + if high_count and not self._warned_yplus_high: + logging.warning( + 'Wall-function validity: %d/%d wall cells (%.1f%%) have y+ > %.0f; ' + 'the equilibrium log-law treatment is recommended for %.0f <= y+ <= %.0f. ' + 'Observed wall-cell range: %.6g <= y+ <= %.6g.', + high_count, total, 100.0 * high_count / total, + self.YPLUS_RECOMMENDED_MAX, self.YPLUS_RECOMMENDED_MIN, + self.YPLUS_RECOMMENDED_MAX, observed_min, observed_max) + self._warned_yplus_high = True # ------------------------------------------------------------------ # Diagnostics # ------------------------------------------------------------------ def near_wall_mask(self) -> ngs.GridFunction: - """1 on wall-facet owners and their first face-connected neighbours.""" + """1 only on cells that own a physical wall facet.""" return self.mask def wall_facet_mask(self) -> ngs.GridFunction: @@ -226,7 +234,7 @@ def y_plus_cell(self, K=None) -> ngs.CoefficientFunction: """Cellwise y+, from the cell-averaged wall distance.""" if K is not None: self.update(K) - return self._dist_cell * self.u_tau_cell / self.nu + return self._y_plus_cell_gf def y_plus_field(self, K=None) -> ngs.CoefficientFunction: """Pointwise y+, from the continuous Eikonal distance. @@ -240,15 +248,7 @@ def y_plus_field(self, K=None) -> ngs.CoefficientFunction: return self._dist_gf * self.u_tau_cell / self.nu def epsilon_wall_cell(self, K) -> ngs.CoefficientFunction: - """Dissipation in a wall-layer cell, switched at ``YPLUS_VISCOUS``: - - * log layer: ``C_mu**0.75 * k**1.5 / (kappa * y)`` - * viscous sublayer: ``2 * nu * k / y**2`` - - The viscous branch is needed because production is zero below - ``YPLUS_VISCOUS``; log-layer dissipation there suppresses k, which lowers - y+, which keeps the cell below the switch -- an absorbing state. - """ + """Wall dissipation selected from one cell-averaged y+ value.""" k_nonnegative = ngs.IfPos(K, K, 0.0) log_layer = (self.C_mu ** 0.75 * k_nonnegative ** 1.5 / (self.kappa * self._dist_cell)) @@ -262,11 +262,12 @@ def epsilon_wall_cell(self, K) -> ngs.CoefficientFunction: # ------------------------------------------------------------------ def _wall_law(self, yplus, K, epsilon) -> ngs.CoefficientFunction: - """Blended wall eddy viscosity as a function of the y+ handed in:: + """Wall-only eddy viscosity as a function of the y+ handed in:: nu_t = 0 y+ < 11.25 (sublayer) - nu_t = nu*(y+ / ((1/kappa)*ln(E*y+)) - 1) y+ < 200 (log law) - nu_t = C_mu*k^2/epsilon y+ >= 200 (bulk) + nu_t = nu*(y+ / ((1/kappa)*ln(E*y+)) - 1) y+ >= 11.25 (log law) + + Wall-owner cells never fall back to the bulk k-epsilon viscosity. """ # ln(E*y+) vanishes at y+ = 1/E; pinning y+ to YPLUS_VISCOUS below the # sublayer threshold avoids that root (the clamp below then zeroes it). @@ -275,22 +276,10 @@ def _wall_law(self, yplus, K, epsilon) -> ngs.CoefficientFunction: log_law = self.nu * (yplus_log / u_plus - 1.0) log_law = ngs.IfPos(log_law, log_law, 0.0) - return ngs.IfPos(self.YPLUS_LOG_MAX - yplus, - log_law, self.C_mu * K ** 2 / epsilon) + return ngs.IfPos(yplus - self.YPLUS_VISCOUS, log_law, 0.0) def eval_nu_wall(self, K, epsilon) -> ngs.CoefficientFunction: - """Wall eddy viscosity as a profile across the near-wall cell. - - y+ comes from :meth:`y_plus_field`, so the coefficient varies within the - cell rather than taking one value per cell. - """ - return self._wall_law(self.y_plus_field(K), K, epsilon) - - def eval_nu_wall_cell(self, K, epsilon) -> ngs.CoefficientFunction: - """Wall eddy viscosity at the cell-averaged distance, so it's nonzero at - the wall trace. For scaling the Dirichlet penalty only; the physical - viscosity profile is :meth:`eval_nu_wall`. - """ + """One wall eddy viscosity branch per wall cell, selected by P0 y+.""" return self._wall_law(self.y_plus_cell(K), K, epsilon) def eval_nu_t(self, K, E) -> ngs.CoefficientFunction: diff --git a/opencmp/models/k_epsilon.py b/opencmp/models/k_epsilon.py index a12fce3..40e7796 100644 --- a/opencmp/models/k_epsilon.py +++ b/opencmp/models/k_epsilon.py @@ -205,7 +205,7 @@ def _post_init(self) -> None: E_log=self.E_log, wall_boundary=self.wall_boundary, ) - self._wallf.update(self.UIter.components[self.model_components['k']]) + self._update_wall_function() # Build and compile nu_t once per time level so every form reuses the # same optimized evaluation tree. @@ -235,6 +235,11 @@ def _regularized_turbulence(self, time_step: int): / (self.max_viscosity_ratio * self.kv[time_step])) return k_safe, epsilon_safe + def _update_wall_function(self) -> None: + """Refresh wall data from the current lagged turbulence and velocity.""" + comp = self.model_components + self._wallf.update(self.UIter.components[comp['k']]) + def _build_turbulent_viscosity(self, time_step: int): k, epsilon = self._regularized_turbulence(time_step) comp = self.model_components @@ -309,20 +314,9 @@ def _epsilon_k_ratio(self, k, epsilon): return ratio def _limit_production(self, production, epsilon): - """Use equilibrium limiting at walls and the configured limit in bulk.""" - bulk_limit = self.production_limit_coefficient * epsilon - bulk_production = ngs.IfPos( - bulk_limit - production, production, bulk_limit) - if self._wallf is None: - return bulk_production - - # High-Re wall treatment assumes local equilibrium, P_k = epsilon, over - # the same wall layer used by wall viscosity and first-cell epsilon. - wall_production = ngs.IfPos( - epsilon - production, production, epsilon) - wall_mask = self._wallf.near_wall_mask() - return (wall_mask * wall_production - + (1.0 - wall_mask) * bulk_production) + """Apply the configured bulk production cap uniformly in every cell.""" + limit = self.production_limit_coefficient * epsilon + return ngs.IfPos(limit - production, production, limit) def _production(self, time_step: int): velocity = self.UIter.components[self.model_components['u']] @@ -409,21 +403,6 @@ def construct_bilinear_time_ODE( d_epsilon = self.kv[time_step] + nu_t / self.sigma_epsilon k_previous, epsilon_previous = self._regularized_turbulence(time_step) form = forms[0] - if (self.DG and self._wallf is not None - and self.wall_boundary in self.BC.get( - 'dirichlet', {}).get('u', {})): - # nu_t vanishes at the geometric wall, so INS's Nitsche penalty there - # sees only molecular viscosity. Add the missing first-cell nu_t term; - # leave INS's consistency/flux terms alone. - wall_penalty_nu_t = self._wallf.eval_nu_wall_cell( - k_previous, epsilon_previous) - cap = self.max_viscosity_ratio * self.kv[time_step] - wall_penalty_nu_t = ngs.IfPos( - cap - wall_penalty_nu_t, wall_penalty_nu_t, cap) - u = U[comp['u']] - v = V[comp['u']] - form += (dt * wall_penalty_nu_t * self._penalty - * u * v * self._ds(self.wall_boundary)) form = self._add_scalar_transport( form, k, zeta, wind, d_k, self.dirichlet_names.get('k', ''), self._neumann_markers('k'), dt) @@ -454,20 +433,6 @@ def construct_linear(self, V: List[ProxyFunction], production = self._production(time_step) form = forms[0] - if (self.DG and self._wallf is not None - and self.wall_boundary in self.BC.get( - 'dirichlet', {}).get('u', {})): - wall_penalty_nu_t = self._wallf.eval_nu_wall_cell(k, epsilon) - cap = self.max_viscosity_ratio * self.kv[time_step] - wall_penalty_nu_t = ngs.IfPos( - cap - wall_penalty_nu_t, wall_penalty_nu_t, cap) - wall_velocity = self.BC['dirichlet']['u'][ - self.wall_boundary][time_step] - velocity_test = V[comp['u']] - form += (dt * wall_penalty_nu_t * self._penalty - * wall_velocity * velocity_test - * self._ds(self.wall_boundary)) - source_k = self.f.get('k', [0.0] * len(self.t_param))[time_step] source_epsilon = self.f.get( 'epsilon', [0.0] * len(self.t_param))[time_step] @@ -540,7 +505,7 @@ def solve_single_step(self, a_lst: List[BilinearForm], self.W[0].vec.data = gfu.components[comp['u']].vec if self._wallf is not None: - self._wallf.update(self.UIter.components[comp['k']]) + self._update_wall_function() self.apply_dirichlet_bcs_to(gfu, time_step) a_lst[0].Assemble() @@ -598,6 +563,7 @@ def linearized_solve(self, a_assembled: BilinearForm, L_assembled: LinearForm, gfu.components[index].vec - self.UIter.components[index].vec) error_squared += difference.Norm() ** 2 norm_squared += gfu.components[index].vec.Norm() ** 2 + return error_squared ** 0.5, norm_squared ** 0.5 def update_linearization(self, gfu: GridFunction) -> None: @@ -605,4 +571,4 @@ def update_linearization(self, gfu: GridFunction) -> None: super().update_linearization(gfu) self.UIter.vec.data = gfu.vec if self._wallf is not None: - self._wallf.update(self.UIter.components[self.model_components['k']]) + self._update_wall_function() diff --git a/pytests/helpers/test_k_epsilon_wall_func.py b/pytests/helpers/test_k_epsilon_wall_func.py index 4c3ffcd..106c8e8 100644 --- a/pytests/helpers/test_k_epsilon_wall_func.py +++ b/pytests/helpers/test_k_epsilon_wall_func.py @@ -68,22 +68,21 @@ def add_one_face_connected_layer(mesh, element_numbers): # ---------------------------------------------------------------------- @pytest.mark.parametrize('meshfile, wall', [(SQUARE, 'bottom'), (CHANNEL, 'wall')]) -def test_mask_includes_wall_cells_and_one_face_connected_layer(meshfile, wall): +def test_mask_contains_only_wall_facet_owners(meshfile, wall): mesh = ngs.Mesh(meshfile) wf = build(mesh, wall) wall_cells = elements_owning_a_facet_on(mesh, wall) - expected = add_one_face_connected_layer(mesh, wall_cells) - assert marked_element_numbers(wf) == expected + assert marked_element_numbers(wf) == wall_cells -def test_near_wall_mask_matches_the_full_expanded_wall_layer(): +def test_near_wall_mask_matches_wall_facet_owners(): mesh = ngs.Mesh(CHANNEL) wf = build(mesh, 'wall') values = wf.near_wall_mask().vec.FV().NumPy() actual = {element.nr for element in wf._fes0.Elements(ngs.VOL) if any(values[dof] > 0.5 for dof in element.dofs)} wall_cells = elements_owning_a_facet_on(mesh, 'wall') - assert actual == add_one_face_connected_layer(mesh, wall_cells) + assert actual == wall_cells def test_wall_facet_mask_retains_the_true_boundary_owners(): @@ -113,7 +112,7 @@ def test_wall_measure_sums_to_the_exact_boundary_measure(): def test_cell_touching_the_wall_only_at_a_vertex_is_not_marked(): - """A vertex-only touch is excluded unless it shares a facet with layer one.""" + """A vertex-only touch is not a wall-function cell.""" mesh = ngs.Mesh(SQUARE) wf = build(mesh, 'bottom') marked = marked_element_numbers(wf) @@ -126,9 +125,7 @@ def test_cell_touching_the_wall_only_at_a_vertex_is_not_marked(): vertex_only = {el.nr for el in mesh.Elements(ngs.VOL) if sum(1 for v in el.vertices if v.nr in bottom_vertices) == 1} assert vertex_only, 'mesh exercises no vertex-only touch; test is vacuous' - wall_cells = elements_owning_a_facet_on(mesh, 'bottom') - expected = add_one_face_connected_layer(mesh, wall_cells) - assert vertex_only & marked == vertex_only & expected + assert not vertex_only & marked def test_missing_wall_marker_raises_a_clear_error(): @@ -177,7 +174,7 @@ def test_epsilon_wall_uses_high_re_equilibrium_relation_in_the_log_layer(): def test_epsilon_wall_switches_to_viscous_dissipation_below_yplus_lam(): - """Below y+_lam production is zero, so log-layer dissipation would empty the cell.""" + """Below y+_lam use the viscous-sublayer dissipation relation.""" mesh = ngs.Mesh(SQUARE) wf = build(mesh, 'bottom') k = _k_for_yplus(wf, 0.1 * wf.YPLUS_VISCOUS) @@ -267,11 +264,8 @@ def test_log_range_yplus_selects_the_log_law(channel_wf): assert nu_t[owners] == pytest.approx(expected, rel=1e-6) -def test_wall_viscosity_varies_across_the_wall_cell(channel_wf): - """eval_nu_wall takes y+ from the continuous Eikonal field, so the coefficient - varies inside the element instead of being one number per cell. The target y+ - keeps the whole cell inside the log-law band, so the variation measured here is - the log law's own, not the switch to bulk at YPLUS_LOG_MAX.""" +def test_wall_viscosity_is_constant_within_each_wall_cell(channel_wf): + """One P0 y+ selects one wall-law branch and viscosity per wall cell.""" mesh, wf = channel_wf _, k = force_yplus(wf, 60.0) nu_t = wf.eval_nu_wall(ngs.CoefficientFunction(k), ngs.CoefficientFunction(1.0)) @@ -280,8 +274,7 @@ def test_wall_viscosity_varies_across_the_wall_cell(channel_wf): cellwise_mean.Set(nu_t) spread = ngs.Integrate((nu_t - cellwise_mean) ** 2, mesh) magnitude = ngs.Integrate(cellwise_mean ** 2, mesh) - - assert np.sqrt(spread / magnitude) > 0.05 + assert np.sqrt(spread / magnitude) < 1e-12 def test_wall_viscosity_is_continuous_at_the_sublayer_threshold(channel_wf): @@ -299,17 +292,29 @@ def test_wall_viscosity_is_continuous_at_the_sublayer_threshold(channel_wf): assert np.max(np.abs(samples[1] - samples[0]) / scale) < 1e-4 -def test_yplus_above_the_log_law_limit_falls_back_to_bulk(channel_wf): - """Past YPLUS_LOG_MAX the log law no longer applies, so even wall cells take - the bulk C_mu*k^2/epsilon value.""" +def test_yplus_above_200_continues_to_use_the_log_law(channel_wf): mesh, wf = channel_wf - marked, k = force_yplus(wf, 5.0 * wf.YPLUS_LOG_MAX) + marked, k = force_yplus(wf, 5.0 * wf.YPLUS_RECOMMENDED_MAX) eps = 2.5 nu_t = sample_nu_t(wf, mesh, k=k, eps=eps) - kvals = k.vec.FV().NumPy() owners = wf.wall_facet_mask().vec.FV().NumPy() > 0.5 - assert nu_t[owners] == pytest.approx(0.09 * kvals[owners] ** 2 / eps, rel=1e-6) + assert nu_t[owners] == pytest.approx( + wall_law_nu_t(5.0 * wf.YPLUS_RECOMMENDED_MAX), rel=1e-6) + + +def test_warns_once_when_wall_yplus_is_above_recommended_band(channel_wf, caplog): + _, wf = channel_wf + _, k = force_yplus(wf, 400.0) + + wf.update(k) + wf.update(k) + + messages = [record.message for record in caplog.records + if 'Wall-function validity' in record.message] + assert len(messages) == 1 + assert 'y+ > 300' in messages[0] + assert '100.0%' in messages[0] def test_wall_law_holds_across_the_whole_log_layer(channel_wf): @@ -322,7 +327,7 @@ def test_wall_law_holds_across_the_whole_log_layer(channel_wf): def test_unmarked_cells_use_bulk_even_when_their_yplus_is_low(channel_wf): - """Cells outside the expanded wall layer use bulk k-epsilon regardless of y+.""" + """Every non-wall-owner cell uses bulk k-epsilon regardless of y+.""" mesh, wf = channel_wf marked, k = force_yplus(wf, 5.0) # wall term would be 0 k.vec.FV().NumPy()[~marked] = 1e-12 # also low y+ outside mask @@ -349,22 +354,22 @@ def test_bulk_viscosity_matches_the_plain_k_epsilon_formula(channel_wf): assert nu_t[~marked] == pytest.approx(0.09 * k ** 2 / eps, rel=1e-6) -def test_wall_layer_neighbours_inherit_wall_owner_friction_velocity(channel_wf): - _, wf = channel_wf - k = ngs.GridFunction(wf._fes0) - values = k.vec.FV().NumPy() - values[:] = 1e6 # Must not determine u_tau in non-owner wall-layer cells. - values[wf._marked] = np.linspace(0.2, 0.8, wf._marked.sum()) +def test_wall_owner_neighbours_are_not_in_the_wall_function_mask(channel_wf): + mesh, wf = channel_wf + owners = elements_owning_a_facet_on(mesh, 'wall') + expanded = add_one_face_connected_layer(mesh, owners) + neighbours = expanded - owners + assert neighbours + k = ngs.GridFunction(wf._fes0) + k.vec.FV().NumPy()[:] = 1.0 wf.update(k) + mask = wf.near_wall_mask().vec.FV().NumPy() u_tau = wf.u_tau_cell.vec.FV().NumPy() - for element_number, source_numbers in wf._wall_layer_sources.items(): - expected = np.mean([ - u_tau[wf._element_dofs[source_number][0]] - for source_number in source_numbers - ]) - assert u_tau[list(wf._element_dofs[element_number])] == pytest.approx( - expected, rel=1e-12) + for element in wf._fes0.Elements(ngs.VOL): + if element.nr in neighbours: + assert mask[list(element.dofs)] == pytest.approx(0.0, abs=1e-14) + assert u_tau[list(element.dofs)] == pytest.approx(0.0, abs=1e-14) def test_negative_viscosity_is_clamped_to_zero(channel_wf): @@ -405,11 +410,11 @@ def test_tet_mesh_attributes_every_wall_face_to_exactly_one_cell(cube_wf): assert wf._wall_measure.sum() == pytest.approx(exact, rel=1e-12) -def test_tet_mask_is_wall_face_owners_plus_one_face_connected_layer(cube_wf): +def test_tet_mask_contains_only_wall_face_owners(cube_wf): mesh, wf = cube_wf wall_cells = elements_owning_a_facet_on(mesh, 'bottom') assert wall_cells, 'no cell owns a wall face; test is vacuous' - assert marked_element_numbers(wf) == add_one_face_connected_layer(mesh, wall_cells) + assert marked_element_numbers(wf) == wall_cells def test_tet_marked_cells_are_the_closest_cells_to_the_wall(cube_wf): From 70924aa9ea63f5eded7f6c9b5716d0b16a2bbfa9 Mon Sep 17 00:00:00 2001 From: arshiiyyaa Date: Mon, 10 Aug 2026 15:13:14 -0400 Subject: [PATCH 6/8] add selectable velocity-based wall friction calculate velocity-based u_tau from facet-averaged tangential wall shear. retain k-based u_tau as the default method --- opencmp/helpers/wall_func.py | 127 +++++++++++++++++--- opencmp/models/k_epsilon.py | 11 +- pytests/helpers/test_k_epsilon_wall_func.py | 45 +++++++ pytests/models/test_k_epsilon.py | 5 + 4 files changed, 173 insertions(+), 15 deletions(-) diff --git a/opencmp/helpers/wall_func.py b/opencmp/helpers/wall_func.py index b0cdc6e..afe2416 100644 --- a/opencmp/helpers/wall_func.py +++ b/opencmp/helpers/wall_func.py @@ -30,8 +30,10 @@ class KEpsilonWallFunction: other cell on bulk ``C_mu k^2/epsilon``. - Friction velocity is ``C_mu**0.25 * sqrt(k_P)`` and is stored as P0 data on - wall-facet owners. ``update`` refreshes it once per Picard iteration. + Friction velocity is either ``C_mu**0.25 * sqrt(k)`` or the square root of + the resolved tangential wall traction per unit density. Both are stored as + P0 data on wall-facet owners. ``update`` refreshes them once per Picard + iteration. Wall distance comes from a regularized-Eikonal solve: the continuous field for coefficients integrated across a cell (``y_plus_field``, @@ -48,13 +50,17 @@ class KEpsilonWallFunction: def __init__(self, mesh: ngs.comp.Mesh, nu: float, C_mu: float, kappa: float, E_log: float = 9.8, wall_boundary: str = "wall", - dist_order: int = 2, dist_relax: float = 0.1) -> None: + dist_order: int = 2, dist_relax: float = 0.1, + u_tau_method: int = 0) -> None: self.mesh = mesh self.nu = nu # laminar kinematic viscosity self.C_mu = C_mu self.kappa = kappa self.E_log = E_log # log-law roughness constant E self.wall_boundary = wall_boundary + if u_tau_method not in (0, 1): + raise ValueError('u_tau_method must be 0 (k-based) or 1 (velocity-based).') + self.u_tau_method = u_tau_method self._warned_yplus_low = False self._warned_yplus_high = False self.h = ngs.specialcf.mesh_size @@ -75,6 +81,7 @@ def __init__(self, mesh: ngs.comp.Mesh, nu: float, C_mu: float, kappa: float, # Zero until the first update(); eval_nu_t is then simply bulk everywhere. self.u_tau_cell = ngs.GridFunction(self._fes0) self.wall_nu_t_cell = ngs.GridFunction(self._fes0) + self.wall_shear_cell = ngs.GridFunction(self._fes0) self._y_plus_cell_gf = ngs.GridFunction(self._fes0) # ------------------------------------------------------------------ @@ -119,6 +126,58 @@ def _mark_wall_cells(self) -> None: # a wall owner. self.mask = ngs.GridFunction(self._fes0) self.mask.vec.FV().NumPy()[:] = self._marked.astype(float) + self._wall_layer_sources = {} + self._element_dofs = { + element.nr: tuple(element.dofs) + for element in self._fes0.Elements(ngs.VOL) + } + self._wall_facets = self._find_physical_wall_facets() + + def _find_physical_wall_facets(self): + """Map each wall facet to its owner, direction and geometric distance. + + At a corner, the two facets remain separate. Their friction velocities + are combined only after projecting velocity with each facet's own normal. + """ + owner_by_vertices = {} + volume_elements = list(self.mesh.Elements(ngs.VOL)) + element_by_number = {element.nr: element for element in volume_elements} + for element in volume_elements: + for facet_id in element.facets: + numbers = tuple(sorted( + vertex.nr for vertex in self.mesh[facet_id].vertices)) + owner_by_vertices.setdefault(numbers, []).append(element.nr) + + result = [] + for facet in self.mesh.Elements(ngs.BND): + if facet.mat != self.wall_boundary: + continue + numbers = tuple(sorted(vertex.nr for vertex in facet.vertices)) + owners = owner_by_vertices.get(numbers, ()) + if len(owners) != 1: + raise ValueError( + f'Wall facet {numbers} has {len(owners)} volume owners; ' + 'expected exactly one.') + points = [np.asarray(self.mesh.vertices[number].point[:self.mesh.dim], + dtype=float) for number in numbers] + owner = element_by_number[owners[0]] + centroid = np.mean([ + np.asarray(self.mesh.vertices[vertex.nr].point[:self.mesh.dim], + dtype=float) + for vertex in owner.vertices + ], axis=0) + if self.mesh.dim == 2: + direction = points[1] - points[0] + direction /= np.linalg.norm(direction) # unit tangent + normal = np.asarray((-direction[1], direction[0])) + distance = abs(float(np.dot(centroid - points[0], normal))) + else: + direction = np.cross(points[1] - points[0], points[2] - points[0]) + direction /= np.linalg.norm(direction) # unit normal + distance = abs(float(np.dot(centroid - points[0], direction))) + result.append((owners[0], direction, max(distance, 1e-12))) + return result + def _compute_distance_field(self, order: int, relax: float) -> ngs.GridFunction: """Distance to ``wall_boundary`` from a regularized Eikonal solve.""" eps = relax * self.h @@ -147,6 +206,34 @@ def _compute_distance_field(self, order: int, relax: float) -> ngs.GridFunction: # Per-iteration update # ------------------------------------------------------------------ + def _resolved_wall_shear(self, U) -> np.ndarray: + """Facet-average molecular tangential traction for each wall cell. + + The tangential projection removes pressure and the isotropic part of + the deviatoric stress. Taking the magnitude before facet integration + prevents cancellation at corners while retaining a local value instead + of imposing a streamwise/global average. + """ + n = ngs.specialcf.normal(self.mesh.dim) + grad_u = ngs.grad(U) + traction = self.nu * (grad_u + grad_u.trans) * n + tangential = traction - (traction * n) * n + + test = self._fes0.TestFunction() + form = ngs.LinearForm(self._fes0) + form += test * ngs.Norm(tangential) * ngs.ds( + definedon=self.mesh.Boundaries(self.wall_boundary), skeleton=True) + form.Assemble() + + integrated = np.asarray(form.vec).ravel() + shear = np.zeros(self._fes0.ndof) + shear[self._marked] = (integrated[self._marked] + / self._wall_measure[self._marked]) + shear = np.maximum(shear, 0.0) + scale = max(1.0, float(np.max(shear[self._marked]))) + shear[shear < 1e-14 * scale] = 0.0 + return shear + def _wall_viscosity_from_yplus(self, y_plus: np.ndarray) -> np.ndarray: """Log-law wall viscosity from resolved ``u_tau`` and cell distance.""" wall_nu_t = np.zeros_like(y_plus) @@ -158,25 +245,37 @@ def _wall_viscosity_from_yplus(self, y_plus: np.ndarray) -> np.ndarray: y_plus[log_cells] / u_plus - 1.0) return np.maximum(wall_nu_t, 0.0) - def update(self, K) -> None: - """Refresh wall quantities using k-based friction velocity. + def update(self, K, U=None) -> None: + """Refresh wall quantities using the configured friction-velocity method. Call once per Picard iteration, BEFORE ``eval_nu_t``. """ u_tau = np.zeros(self._fes0.ndof) wall_nu_t = np.zeros(self._fes0.ndof) - projected = ngs.GridFunction(self._fes0) - projected.Set(K) - k_values = np.maximum(projected.vec.FV().NumPy(), 0.0) - u_tau[self._marked] = self.C_mu ** 0.25 * np.sqrt( - k_values[self._marked]) - y_plus_cell = (self._dist_cell.vec.FV().NumPy() - * u_tau / self.nu) + wall_shear = np.zeros(self._fes0.ndof) + y_plus_cell = np.zeros(self._fes0.ndof) + if self.u_tau_method == 0: + projected = ngs.GridFunction(self._fes0) + projected.Set(K) + k_values = np.maximum(projected.vec.FV().NumPy(), 0.0) + u_tau[self._marked] = self.C_mu ** 0.25 * np.sqrt( + k_values[self._marked]) + y_plus_cell = (self._dist_cell.vec.FV().NumPy() + * u_tau / self.nu) + else: + if U is None: + raise ValueError('Velocity-based u_tau requires the velocity iterate.') + wall_shear = self._resolved_wall_shear(U) + u_tau[self._marked] = np.sqrt(wall_shear[self._marked]) + y_plus_cell = (self._dist_cell.vec.FV().NumPy() + * u_tau / self.nu) + wall_nu_t = self._wall_viscosity_from_yplus(y_plus_cell) wall_nu_t = self._wall_viscosity_from_yplus(y_plus_cell) self.u_tau_cell.vec.FV().NumPy()[:] = u_tau self.wall_nu_t_cell.vec.FV().NumPy()[:] = wall_nu_t + self.wall_shear_cell.vec.FV().NumPy()[:] = wall_shear self._y_plus_cell_gf.vec.FV().NumPy()[:] = y_plus_cell self._warn_if_yplus_outside_recommended_range(y_plus_cell) @@ -232,7 +331,7 @@ def wall_distance_field(self) -> ngs.GridFunction: def y_plus_cell(self, K=None) -> ngs.CoefficientFunction: """Cellwise y+, from the cell-averaged wall distance.""" - if K is not None: + if K is not None and self.u_tau_method == 0: self.update(K) return self._y_plus_cell_gf @@ -243,7 +342,7 @@ def y_plus_field(self, K=None) -> ngs.CoefficientFunction: volume, so the result varies across the wall cell instead of being one number per cell. """ - if K is not None: + if K is not None and self.u_tau_method == 0: self.update(K) return self._dist_gf * self.u_tau_cell / self.nu diff --git a/opencmp/models/k_epsilon.py b/opencmp/models/k_epsilon.py index 40e7796..ae9ae71 100644 --- a/opencmp/models/k_epsilon.py +++ b/opencmp/models/k_epsilon.py @@ -54,6 +54,7 @@ class KEpsilonINS(INS): 'production_limit_coefficient': 10.0, 'max_epsilon_k_ratio': 10.0, 'realizability_coefficient': 1.0, + 'wall_u_tau_method': 0.0, } #: Optional ``[OTHER]`` switches @@ -158,11 +159,16 @@ def _set_model_parameters(self) -> None: self.max_epsilon_k_ratio = self._parameter(parameters, 'max_epsilon_k_ratio') self.realizability_coefficient = self._parameter( parameters, 'realizability_coefficient') + self.wall_u_tau_method = int(self._parameter( + parameters, 'wall_u_tau_method')) if self.production_limit_coefficient <= 0.0: raise ValueError('production_limit_coefficient must be positive.') if self.max_epsilon_k_ratio <= 0.0: raise ValueError('max_epsilon_k_ratio must be positive.') + if self.wall_u_tau_method not in (0, 1): + raise ValueError( + 'wall_u_tau_method must be 0 (k-based) or 1 (velocity-based).') def _post_init(self) -> None: super()._post_init() @@ -204,6 +210,7 @@ def _post_init(self) -> None: kappa=self.kappa, E_log=self.E_log, wall_boundary=self.wall_boundary, + u_tau_method=self.wall_u_tau_method, ) self._update_wall_function() @@ -238,7 +245,9 @@ def _regularized_turbulence(self, time_step: int): def _update_wall_function(self) -> None: """Refresh wall data from the current lagged turbulence and velocity.""" comp = self.model_components - self._wallf.update(self.UIter.components[comp['k']]) + self._wallf.update( + self.UIter.components[comp['k']], + self.UIter.components[comp['u']]) def _build_turbulent_viscosity(self, time_step: int): k, epsilon = self._regularized_turbulence(time_step) diff --git a/pytests/helpers/test_k_epsilon_wall_func.py b/pytests/helpers/test_k_epsilon_wall_func.py index 106c8e8..1739402 100644 --- a/pytests/helpers/test_k_epsilon_wall_func.py +++ b/pytests/helpers/test_k_epsilon_wall_func.py @@ -26,6 +26,12 @@ def build(mesh, wall='bottom', **kwargs): wall_boundary=wall, **kwargs) +def velocity_field(mesh, value): + field = ngs.GridFunction(ngs.VectorH1(mesh, order=1)) + field.Set(ngs.CoefficientFunction(value)) + return field + + def marked_element_numbers(wf): """Element numbers of the marked cells, via the space's element->DOF map. @@ -372,6 +378,45 @@ def test_wall_owner_neighbours_are_not_in_the_wall_function_mask(channel_wf): assert u_tau[list(element.dofs)] == pytest.approx(0.0, abs=1e-14) +def test_velocity_method_uses_molecular_tangential_not_normal_stress(): + mesh = ngs.Mesh(SQUARE) + wf = build(mesh, 'bottom', u_tau_method=1) + + wf.update(ngs.CoefficientFunction(1.0), + velocity_field(mesh, (0.0, ngs.y))) + assert wf.u_tau_cell.vec.FV().NumPy()[wf._marked] == pytest.approx( + 0.0, abs=1e-14) + + wf.update(ngs.CoefficientFunction(1.0), + velocity_field(mesh, (ngs.y, 0.0))) + owners = wf._marked + assert wf.wall_shear_cell.vec.FV().NumPy()[owners] == pytest.approx( + NU, rel=1e-12) + assert wf.u_tau_cell.vec.FV().NumPy()[owners] == pytest.approx( + np.sqrt(NU), rel=1e-12) + + +def test_velocity_method_is_invariant_when_wall_and_velocity_are_rotated(): + mesh = ngs.Mesh(SQUARE) + horizontal = build(mesh, 'bottom', u_tau_method=1) + vertical = build(mesh, 'left', u_tau_method=1) + k = ngs.CoefficientFunction(1.0) + + horizontal.update(k, velocity_field(mesh, (ngs.y, 0.0))) + vertical.update(k, velocity_field(mesh, (0.0, ngs.x))) + + assert horizontal.u_tau_cell.vec.FV().NumPy()[horizontal._marked] == \ + pytest.approx(vertical.u_tau_cell.vec.FV().NumPy()[vertical._marked], + rel=1e-12) + + +def test_velocity_method_requires_a_velocity_iterate(): + mesh = ngs.Mesh(SQUARE) + wf = build(mesh, 'bottom', u_tau_method=1) + with pytest.raises(ValueError, match='requires the velocity'): + wf.update(ngs.CoefficientFunction(1.0)) + + def test_negative_viscosity_is_clamped_to_zero(channel_wf): mesh, wf = channel_wf nu_t = sample_nu_t(wf, mesh, k=1.0, eps=-1.0) # negative bulk diff --git a/pytests/models/test_k_epsilon.py b/pytests/models/test_k_epsilon.py index d31461c..26dd5bb 100644 --- a/pytests/models/test_k_epsilon.py +++ b/pytests/models/test_k_epsilon.py @@ -10,6 +10,7 @@ from netgen.geom2d import unit_square from opencmp.helpers.limiter import Limiter +from opencmp.helpers.wall_func import KEpsilonWallFunction from opencmp.models import KEpsilonINS, models_dict from opencmp.models.ins import INS @@ -123,6 +124,10 @@ def test_every_constant_the_model_reads_has_a_default() -> None: assert requested <= set(KEpsilonINS.DEFAULT_PARAMETERS) +def test_k_based_wall_friction_velocity_remains_the_default() -> None: + assert KEpsilonINS.DEFAULT_PARAMETERS['wall_u_tau_method'] == 0.0 + + def test_k_epsilon_wall_function_is_enabled_by_default() -> None: class EmptyConfig: def get_item(self, *_args, **_kwargs): From 288aafb9abe4b8a326498080436eecf394aeb298 Mon Sep 17 00:00:00 2001 From: arshiiyyaa Date: Mon, 10 Aug 2026 21:04:21 -0400 Subject: [PATCH 7/8] add default k and epsilon initial and inlet condition calculation based on empirical correlations --- docs/tutorials/index.rst | 1 + .../backward_facing_step/bc_dir/bc_config | 2 - examples/backward_facing_step/config | 1 + .../backward_facing_step/ic_dir/ic_config | 2 - .../model_dir/model_config | 3 + opencmp/models/k_epsilon.py | 83 +++++++++++++++++++ pytests/models/test_k_epsilon.py | 68 +++++++++++++++ 7 files changed, 156 insertions(+), 4 deletions(-) diff --git a/docs/tutorials/index.rst b/docs/tutorials/index.rst index 9ee917f..32200d0 100644 --- a/docs/tutorials/index.rst +++ b/docs/tutorials/index.rst @@ -23,3 +23,4 @@ Before attempting the tutorials, make sure to review :ref:`getting_started` and, tutorial_8 tutorial_9 tutorial_10 + tutorial_11 diff --git a/examples/backward_facing_step/bc_dir/bc_config b/examples/backward_facing_step/bc_dir/bc_config index a32649e..d0aa223 100644 --- a/examples/backward_facing_step/bc_dir/bc_config +++ b/examples/backward_facing_step/bc_dir/bc_config @@ -1,8 +1,6 @@ [DIRICHLET] u = inlet -> [1.0, 0.0] wall -> [0.0, 0.0] -k = inlet -> 0.00256796 -epsilon = inlet -> 0.000305469 [STRESS] u = outlet -> [0.0, 0.0] diff --git a/examples/backward_facing_step/config b/examples/backward_facing_step/config index 668ffa1..496efed 100644 --- a/examples/backward_facing_step/config +++ b/examples/backward_facing_step/config @@ -43,3 +43,4 @@ num_threads = 6 wall_function = True wall_boundary = wall production_limiter = True +auto_turbulence_inlet = inlet diff --git a/examples/backward_facing_step/ic_dir/ic_config b/examples/backward_facing_step/ic_dir/ic_config index a54a7fc..c738cbe 100644 --- a/examples/backward_facing_step/ic_dir/ic_config +++ b/examples/backward_facing_step/ic_dir/ic_config @@ -4,5 +4,3 @@ all = all -> None [KEpsilonINS] u = all -> output/components_sol/u.sol p = all -> output/components_sol/p.sol -k = all -> 0.00256796 -epsilon = all -> 0.000305469 diff --git a/examples/backward_facing_step/model_dir/model_config b/examples/backward_facing_step/model_dir/model_config index c71f5be..19a243c 100644 --- a/examples/backward_facing_step/model_dir/model_config +++ b/examples/backward_facing_step/model_dir/model_config @@ -19,6 +19,9 @@ max_viscosity_ratio = all -> 200000 production_limit_coefficient = all -> 10 max_epsilon_k_ratio = all -> 10 +turbulence_hydraulic_diameter = all -> 2.0 +turbulence_length_scale_ratio = all -> 0.07 + [FUNCTIONS] source = u -> [0.0, 0.0] k -> 0.0 diff --git a/opencmp/models/k_epsilon.py b/opencmp/models/k_epsilon.py index ae9ae71..3ebdcf5 100644 --- a/opencmp/models/k_epsilon.py +++ b/opencmp/models/k_epsilon.py @@ -55,6 +55,8 @@ class KEpsilonINS(INS): 'max_epsilon_k_ratio': 10.0, 'realizability_coefficient': 1.0, 'wall_u_tau_method': 0.0, + 'turbulence_hydraulic_diameter': 0.0, + 'turbulence_length_scale_ratio': 0.07, } #: Optional ``[OTHER]`` switches @@ -63,6 +65,9 @@ class KEpsilonINS(INS): 'wall_boundary': 'wall', 'production_limiter': True, 'realizability_limiter': True, + # Boundary marker whose prescribed velocity generates default inlet and + # initial k-epsilon data. Empty means that all values remain user supplied. + 'auto_turbulence_inlet': '', } def _parameter(self, parameters: Dict, name: str) -> float: @@ -161,6 +166,10 @@ def _set_model_parameters(self) -> None: parameters, 'realizability_coefficient') self.wall_u_tau_method = int(self._parameter( parameters, 'wall_u_tau_method')) + self.turbulence_hydraulic_diameter = self._parameter( + parameters, 'turbulence_hydraulic_diameter') + self.turbulence_length_scale_ratio = self._parameter( + parameters, 'turbulence_length_scale_ratio') if self.production_limit_coefficient <= 0.0: raise ValueError('production_limit_coefficient must be positive.') @@ -169,12 +178,24 @@ def _set_model_parameters(self) -> None: if self.wall_u_tau_method not in (0, 1): raise ValueError( 'wall_u_tau_method must be 0 (k-based) or 1 (velocity-based).') + if self.auto_turbulence_inlet: + if self.turbulence_hydraulic_diameter <= 0.0: + raise ValueError( + 'turbulence_hydraulic_diameter must be positive when ' + 'auto_turbulence_inlet is enabled.') + if self.turbulence_length_scale_ratio <= 0.0: + raise ValueError( + 'turbulence_length_scale_ratio must be positive when ' + 'auto_turbulence_inlet is enabled.') def _post_init(self) -> None: super()._post_init() if self.linearize != 'Oseen': raise NotImplementedError('KEpsilonINS currently supports Oseen linearization only.') + if self.auto_turbulence_inlet: + self._apply_auto_turbulence_defaults() + self.UIter = ngs.GridFunction(self.fes) self.UIter.vec.data = self.IC.vec @@ -223,6 +244,68 @@ def _post_init(self) -> None: self._normal, _, self._penalty, _ = get_special_functions(self.mesh, self.nu) + def _apply_auto_turbulence_defaults(self) -> None: + """Fill missing inlet and initial k-epsilon data from inlet velocity. + + Explicit user values always take precedence. This first implementation + supports one steady inlet marker. + """ + marker = self.auto_turbulence_inlet + velocity_markers = self.BC.get('dirichlet', {}).get('u', {}) + if marker not in velocity_markers: + raise ValueError( + f"auto_turbulence_inlet '{marker}' has no prescribed Dirichlet " + 'velocity boundary condition.') + + # TODO: Support multiple inlet markers and form the uniform IC from + # flow-rate-weighted inlet turbulence quantities. + # TODO: Re-evaluate automatic inlet values for time-dependent velocity + # data; the present implementation intentionally uses only t=0. + inlet_velocity = velocity_markers[marker][0] + boundary = self.mesh.Boundaries(marker) + area = float(ngs.Integrate(1.0, self.mesh, definedon=boundary)) + if area <= 0.0: + raise ValueError( + f"auto_turbulence_inlet '{marker}' has zero boundary measure.") + + normal = ngs.specialcf.normal(self.mesh.dim) + outward_flux = float(ngs.Integrate( + inlet_velocity * normal, self.mesh, definedon=boundary)) + flux_tolerance = 1e-14 * max(1.0, area) + if outward_flux >= -flux_tolerance: + raise ValueError( + f"auto_turbulence_inlet '{marker}' must have nonzero inward net " + f'flux; computed outward flux is {outward_flux:.6g}.') + + bulk_velocity = -outward_flux / area + reynolds = (bulk_velocity * self.turbulence_hydraulic_diameter + / self.kv[0]) + intensity = 0.16 * reynolds ** (-1.0 / 8.0) + k_value = 1.5 * (bulk_velocity * intensity) ** 2 + length_scale = (self.turbulence_length_scale_ratio + * self.turbulence_hydraulic_diameter) + epsilon_value = (self.C_mu ** 0.75 * k_value ** 1.5 + / length_scale) + + dirichlet = self.BC.setdefault('dirichlet', {}) + for component, value in (('k', k_value), ('epsilon', epsilon_value)): + component_boundaries = dirichlet.setdefault(component, {}) + if marker not in component_boundaries: + component_boundaries[marker] = [value] * len(self.t_param) + existing = self.dirichlet_names.get(component, '') + names = [name for name in existing.split('|') if name] + if marker not in names: + names.append(marker) + self.dirichlet_names[component] = '|'.join(names) + + ic_dict = self.ic_functions.ic_dict.get(self.name(), {}) + explicit_all = 'all' in ic_dict + if not explicit_all and 'k' not in ic_dict: + self.IC.components[self.model_components_ic['k']].Set(k_value) + if not explicit_all and 'epsilon' not in ic_dict: + self.IC.components[self.model_components_ic['epsilon']].Set( + epsilon_value) + def _regularized_turbulence(self, time_step: int): """Floor-bounded k and epsilon, for use in ratios like k**2/epsilon. diff --git a/pytests/models/test_k_epsilon.py b/pytests/models/test_k_epsilon.py index 26dd5bb..98bff6b 100644 --- a/pytests/models/test_k_epsilon.py +++ b/pytests/models/test_k_epsilon.py @@ -15,6 +15,33 @@ from opencmp.models.ins import INS +def _auto_inlet_model(explicit_ic=(), explicit_bc=()) -> KEpsilonINS: + mesh = ngs.Mesh(unit_square.GenerateMesh(maxh=0.5)) + model = object.__new__(KEpsilonINS) + model.mesh = mesh + model.auto_turbulence_inlet = 'left' + model.turbulence_hydraulic_diameter = 2.0 + model.turbulence_length_scale_ratio = 0.07 + model.kv = [0.1] + model.C_mu = 0.09 + model.t_param = [ngs.Parameter(0.0)] + model.model_components_ic = {'u': 0, 'p': 1, 'k': 2, 'epsilon': 3} + model.BC = {'dirichlet': { + 'u': {'left': [ngs.CoefficientFunction((1.0, 0.0))]}, + }} + for component in explicit_bc: + model.BC['dirichlet'][component] = {'left': [9.0]} + model.dirichlet_names = {'u': 'left'} + model.ic_functions = SimpleNamespace(ic_dict={ + model.name(): {component: {'all': [9.0]} for component in explicit_ic} + }) + spaces = [ngs.L2(mesh, order=0) for _ in range(4)] + model.IC = ngs.GridFunction(ngs.FESpace(spaces)) + for component in explicit_ic: + model.IC.components[model.model_components_ic[component]].Set(9.0) + return model + + def _turbulence_stub(k_value: float, epsilon_value: float, ratio: float = 2000.0) -> KEpsilonINS: """Bare model carrying only what _regularized_turbulence reads.""" @@ -128,6 +155,47 @@ def test_k_based_wall_friction_velocity_remains_the_default() -> None: assert KEpsilonINS.DEFAULT_PARAMETERS['wall_u_tau_method'] == 0.0 +def test_auto_turbulence_defaults_use_inlet_bulk_velocity() -> None: + model = _auto_inlet_model() + model._apply_auto_turbulence_defaults() + + reynolds = 1.0 * 2.0 / 0.1 + intensity = 0.16 * reynolds ** (-1.0 / 8.0) + expected_k = 1.5 * intensity ** 2 + expected_epsilon = (0.09 ** 0.75 * expected_k ** 1.5 + / (0.07 * 2.0)) + + assert model.BC['dirichlet']['k']['left'] == pytest.approx([expected_k]) + assert model.BC['dirichlet']['epsilon']['left'] == pytest.approx( + [expected_epsilon]) + assert model.dirichlet_names['k'] == 'left' + assert model.dirichlet_names['epsilon'] == 'left' + assert np.asarray(model.IC.components[2].vec).mean() == pytest.approx( + expected_k) + assert np.asarray(model.IC.components[3].vec).mean() == pytest.approx( + expected_epsilon) + + +def test_auto_turbulence_defaults_preserve_explicit_values() -> None: + model = _auto_inlet_model( + explicit_ic=('k', 'epsilon'), explicit_bc=('k', 'epsilon')) + model._apply_auto_turbulence_defaults() + + assert model.BC['dirichlet']['k']['left'] == [9.0] + assert model.BC['dirichlet']['epsilon']['left'] == [9.0] + assert np.asarray(model.IC.components[2].vec).mean() == pytest.approx(9.0) + assert np.asarray(model.IC.components[3].vec).mean() == pytest.approx(9.0) + + +def test_auto_turbulence_defaults_reject_non_inward_flux() -> None: + model = _auto_inlet_model() + model.BC['dirichlet']['u']['left'] = [ + ngs.CoefficientFunction((-1.0, 0.0))] + + with pytest.raises(ValueError, match='nonzero inward net flux'): + model._apply_auto_turbulence_defaults() + + def test_k_epsilon_wall_function_is_enabled_by_default() -> None: class EmptyConfig: def get_item(self, *_args, **_kwargs): From ca94129b4946bee800fcaf26c1bd787485002d97 Mon Sep 17 00:00:00 2001 From: arshiiyyaa Date: Mon, 10 Aug 2026 21:25:22 -0400 Subject: [PATCH 8/8] add k-epsilon RANS tutorial for backward facing step problem --- docs/_static/tutorial_11.png | Bin 0 -> 814818 bytes docs/tutorials/tutorial_11.rst | 129 +++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 docs/_static/tutorial_11.png create mode 100644 docs/tutorials/tutorial_11.rst diff --git a/docs/_static/tutorial_11.png b/docs/_static/tutorial_11.png new file mode 100644 index 0000000000000000000000000000000000000000..13e17ca43034741cc2fe184ade79c2d5aa07624d GIT binary patch literal 814818 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

&)n_BSgJ)O>W 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

-|EP7vl`N(eV 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∓W1<4~rs-|`1Y10uRoOB3|Zdc-b=qZ%HD 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 zef

qFa@rx&(eqOB7E5&H(7fW2A@ao?PB(WjMDM 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 WwxGi>OPj*=k<#i_iJk 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

`qfd~GR9uO(@2l!f)W-B;^?8*v=PFvu5Q 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

X2m?#%dApszM*F00Ra*F{EepVM~Q4 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