diff --git a/felupe/__init__.py b/felupe/__init__.py index 43642254..a746e32a 100644 --- a/felupe/__init__.py +++ b/felupe/__init__.py @@ -21,9 +21,10 @@ FieldMixed, ) from .dof import Boundary + try: from .dof import ( - MultiPointConstraint, + MultiPointConstraint, MultiPointContact, ) except: diff --git a/felupe/_field/_axi.py b/felupe/_field/_axi.py index 8b01380f..31da2cfb 100644 --- a/felupe/_field/_axi.py +++ b/felupe/_field/_axi.py @@ -98,7 +98,9 @@ def _grad_2d(self, sym=False): # w.r.t. undeformed coordinate "J" evaluated at quadrature point "p" # for each cell "e" g = np.einsum( - "ca...,aJpc->...Jpc", self.values[self.region.mesh.cells], self.region.dhdX, + "ca...,aJpc->...Jpc", + self.values[self.region.mesh.cells], + self.region.dhdX, ) if sym: diff --git a/felupe/_field/_base.py b/felupe/_field/_base.py index 7132f63f..92f16272 100644 --- a/felupe/_field/_base.py +++ b/felupe/_field/_base.py @@ -126,7 +126,9 @@ def grad(self, sym=False): # w.r.t. undeformed coordinates "J" evaluated at quadrature point "p" # for each cell "e" g = np.einsum( - "ea...,aJpe->...Jpe", self.values[self.region.mesh.cells], self.region.dhdX, + "ea...,aJpe->...Jpe", + self.values[self.region.mesh.cells], + self.region.dhdX, ) if sym: diff --git a/felupe/dof/__init__.py b/felupe/dof/__init__.py index 292a63e3..99e62d4d 100644 --- a/felupe/dof/__init__.py +++ b/felupe/dof/__init__.py @@ -10,6 +10,7 @@ symmetry, uniaxial, ) + try: from ._multipoint import ( MultiPointConstraint, diff --git a/felupe/element/_triangle.py b/felupe/element/_triangle.py index 5c660cca..9924dd68 100644 --- a/felupe/element/_triangle.py +++ b/felupe/element/_triangle.py @@ -104,7 +104,11 @@ def gradient(self, rs): dhdr_a = np.array([[-1, -1], [1, 0], [0, 1]], dtype=float) dhdr_b = np.array( - [[4 * (t1 - t2), -4 * t2], [4 * t3, 4 * t2], [-4 * t3, 4 * (t1 - t2)],] + [ + [4 * (t1 - t2), -4 * t2], + [4 * t3, 4 * t2], + [-4 * t3, 4 * (t1 - t2)], + ] ) dhdr = np.vstack((dhdr_a, dhdr_b)) dhdr[0] += -dhdr[3] / 2 - dhdr[5] / 2 diff --git a/felupe/mesh/_tools.py b/felupe/mesh/_tools.py index 225fafdb..5ef85b50 100644 --- a/felupe/mesh/_tools.py +++ b/felupe/mesh/_tools.py @@ -395,7 +395,11 @@ def add_midpoints_edges(points, cells, cell_type): } # collect edges - points_edges, cells_edges = collect_edges(points, cells, cell_type,) + points_edges, cells_edges = collect_edges( + points, + cells, + cell_type, + ) # add offset to point index for edge-midpoints # in additional cells array @@ -424,7 +428,11 @@ def add_midpoints_faces(points, cells, cell_type): } # collect faces - points_faces, cells_faces = collect_faces(points, cells, cell_type,) + points_faces, cells_faces = collect_faces( + points, + cells, + cell_type, + ) # add offset to point index for faces-midpoints # in additional cells array @@ -452,7 +460,11 @@ def add_midpoints_volumes(points, cells, cell_type): } # collect volumes - points_volumes, cells_volumes = collect_volumes(points, cells, cell_type,) + points_volumes, cells_volumes = collect_volumes( + points, + cells, + cell_type, + ) # add offset to point index for volumes-midpoints # in additional cells array diff --git a/felupe/quadrature/_gausslegendre.py b/felupe/quadrature/_gausslegendre.py index e3ee1a38..3e285aa5 100644 --- a/felupe/quadrature/_gausslegendre.py +++ b/felupe/quadrature/_gausslegendre.py @@ -25,7 +25,8 @@ """ -import quadpy +import numpy as np +from string import ascii_lowercase from . import Scheme @@ -44,23 +45,16 @@ def __init__(self, order: int, dim: int): """ # integration point weights and coordinates - if dim == 3: - scheme = quadpy.c3.product(quadpy.c1.gauss_legendre(order + 1)) - - elif dim == 2: - scheme = quadpy.c2.product(quadpy.c1.gauss_legendre(order + 1)) - - elif dim == 1: - scheme = quadpy.c1.gauss_legendre(order + 1) - scheme.points = scheme.points.reshape(1, -1) - - else: + if dim not in [1, 2, 3]: raise ValueError("Wrong dimension.") - if dim > 1: - weights = scheme.weights * 2 ** dim + x, w = np.polynomial.legendre.leggauss(1 + order) + + points = ( + np.stack(np.meshgrid(*([x] * dim), indexing="ij"))[::-1].reshape(dim, -1).T + ) - else: - weights = scheme.weights + idx = list(ascii_lowercase)[:dim] + weights = np.einsum(", ".join(idx), *([w] * dim)).ravel() - super().__init__(scheme.points.T, weights) + super().__init__(points, weights) diff --git a/felupe/tools/_save.py b/felupe/tools/_save.py index 8b28b1f0..8d97d559 100644 --- a/felupe/tools/_save.py +++ b/felupe/tools/_save.py @@ -92,7 +92,9 @@ def save( mesh = meshio.Mesh( points=mesh.points, - cells=[(mesh.cell_type, mesh.cells),], + cells=[ + (mesh.cell_type, mesh.cells), + ], point_data=point_data, cell_data=cell_data, ) diff --git a/pyproject.toml b/pyproject.toml index 826cdc01..85c1ab7f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,6 @@ classifiers = [ dependencies = [ "numpy", "scipy", - "quadpy", "h5py", "meshio", ] diff --git a/setup.cfg b/setup.cfg index d7622b2f..19d7dbb3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -33,7 +33,6 @@ packages = find: install_requires = numpy scipy - quadpy h5py meshio python_requires = >=3.6 diff --git a/tests/test_tools.py b/tests/test_tools.py index 1158b8cd..da38e916 100644 --- a/tests/test_tools.py +++ b/tests/test_tools.py @@ -71,7 +71,11 @@ def test_solve_check(): fe.tools.save(r, u) fe.tools.save(r, u, r=b) fe.tools.save( - r, u, r=b, F=F, gradient=W.gradient(F), + r, + u, + r=b, + F=F, + gradient=W.gradient(F), ) force = fe.tools.force(u, b, bounds["symx"]) @@ -118,7 +122,12 @@ def test_solve_mixed_check(): fe.tools.save(r, f, unstack=unstack) fe.tools.save(r, f, r=b, unstack=unstack) fe.tools.save( - r, f, r=b, unstack=unstack, F=F, gradient=W_mixed.gradient(F, p, J), + r, + f, + r=b, + unstack=unstack, + F=F, + gradient=W_mixed.gradient(F, p, J), ) force = fe.tools.force(u, b, bounds["symx"], unstack=unstack)