From d60cf1ad688eb8ce4ec8afc0211ed13c8b9157b3 Mon Sep 17 00:00:00 2001 From: Andreas Dutzler Date: Sat, 8 Apr 2023 00:09:09 +0200 Subject: [PATCH] Add string representations for `Region` and `FieldContainer` --- CHANGELOG.md | 3 +++ src/felupe/_field/_container.py | 11 +++++++++++ src/felupe/mesh/_mesh.py | 2 +- src/felupe/region/_region.py | 8 ++++++++ tests/test_field.py | 5 +++++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02366af4..fb05ac12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ All notable changes to this project will be documented in this file. The format ## [Unreleased] +### Added +- Add string representations for `Region` and `FieldContainer.` + ## [7.0.0] - 2023-04-07 ### Added diff --git a/src/felupe/_field/_container.py b/src/felupe/_field/_container.py index 309bb400..5fbc37bf 100644 --- a/src/felupe/_field/_container.py +++ b/src/felupe/_field/_container.py @@ -42,6 +42,17 @@ def __init__(self, fields): self.fieldsizes = [f.indices.dof.size for f in self.fields] self.offsets = np.cumsum(self.fieldsizes)[:-1] + def __repr__(self): + header = "" + size = f" Number of fields: {len(self.fields)}" + fields_header = " Dimension of fields:" + fields = [ + f" {type(field).__name__}: {field.dim}" + for a, field in enumerate(self.fields) + ] + + return "\n".join([header, size, fields_header, *fields]) + def extract(self, grad=True, sym=False, add_identity=True): """Generalized extraction method which evaluates either the gradient or the field values at the integration points of all cells diff --git a/src/felupe/mesh/_mesh.py b/src/felupe/mesh/_mesh.py index 8004643f..d622e05b 100644 --- a/src/felupe/mesh/_mesh.py +++ b/src/felupe/mesh/_mesh.py @@ -81,7 +81,7 @@ def __init__(self, points, cells, cell_type=None): self.__mesh__ = Mesh def __repr__(self): - header = "" + header = "" points = f" Number of points: {len(self.points)}" cells_header = " Number of cells:" cells = [f" {self.cell_type}: {self.ncells}"] diff --git a/src/felupe/region/_region.py b/src/felupe/region/_region.py index 7285e09d..b16d76f7 100644 --- a/src/felupe/region/_region.py +++ b/src/felupe/region/_region.py @@ -122,3 +122,11 @@ def __init__(self, mesh, element, quadrature, grad=True): # Partial derivative of element shape function # w.r.t. undeformed coordinates self.dhdX = np.einsum("aIpc,IJpc->aJpc", self.dhdr, self.drdX) + + def __repr__(self): + header = "" + element = f" Element formulation: {type(self.element).__name__}" + quadrature = f" Quadrature rule: {type(self.quadrature).__name__}" + grad = f" Gradient evaluated: {hasattr(self, 'dV')}" + + return "\n".join([header, element, quadrature, grad]) diff --git a/tests/test_field.py b/tests/test_field.py index 54abd791..ba644c06 100644 --- a/tests/test_field.py +++ b/tests/test_field.py @@ -39,6 +39,7 @@ def pre(values=0): r = fe.Region(m, e, q) u = fe.Field(r, dim=3, values=values) v = fe.FieldContainer([u]) + return r, v @@ -52,6 +53,8 @@ def pre_axi(): u = fe.FieldAxisymmetric(r) v = fe.FieldContainer([u]) + print(m), print(r), print(v) + return r, v @@ -69,6 +72,8 @@ def pre_mixed(): f = fe.FieldContainer((u, p, J)) g = fe.FieldsMixed(fe.RegionHexahedron(m), n=3) + print(m), print(r), print(f) + u.values[0] = np.ones(3) assert np.all(f.values()[0][0] == 1) assert len(g.fields) == 3