Skip to content

Releases: adtzlr/felupe

v7.5.1

05 Aug 20:37
e612688
Compare
Choose a tag to compare

What's Changed

  • Don't set a pyvista-theme by default in View by @adtzlr in #505

Full Changelog: v7.5.0...v7.5.1

v7.5.0

20 Jul 20:18
Compare
Choose a tag to compare

[7.5.0] - 2023-07-20

Added

  • Add ViewSolid, which enables view = ViewSolid(field, solid=None) the view of cauchy stresses, e.g. view.plot("Principal Values of Cauchy Stress").show().
  • Add constitutive models to top-level namespace, e.g. yeoh() from constitution.yeoh(). This makes typing hyperelastic material formulations shorter: Hyperelastic(yeoh, C10=0.5, C20=-0.1, C30=0.02).
  • Add CharacteristicCurve.plot(swapaxes=False).
  • Add MaterialAD: A user-defined material definition with Automatic Differentiation. Only the first Piola-Kirchhoff stress tensor must be provided.

Changed

  • Add optional point- and cell-data args for ViewMesh(mesh, point_data=None, cell_data=None) like already implemented in ViewField.
  • Enforce contiguous arrays in UserMaterialHyperelastic (enhance performance).
  • View: Switch from ViewField to ViewSolid.
  • View: Always plot the undeformed mesh with opacity=0.2 and show_edges=False.
  • Rename UserMaterial to Material, UserMaterialStrain to MaterialStrain, UserMaterialHyperelastic to Hyperelastic (keep old alias names until next major release).
  • Use consistent indices in einsum() for (elementwise operating) trailing axes: q for quadrature point and c for cell.
  • Rename internal IntegralFormMixed to IntegralForm, which is now consistent internally and in the top-level namespace. The previous internal base-class for a single-field IntegralForm is renamed to WeakForm.
  • Don't plot x- and y-labels in CharacteristicCurve.plot(xlabel=None, ylabel=None) if they are not specified.

Fixed

  • Don't warp the mesh in ViewMesh.plot().
  • Warp the mesh in case no name is passed in View.plot(name=None).
  • Don't modify a given label in Scene.plot(label=None).
  • Fix the second invariant of the distortional part of the right Cauchy-Green deformation tensor in hyperelastic material formulations using tensortrax, i.e. fix the implementations of mooney_rivlin(), third_order_deformation() and van_der_waals().

Removed

  • Remove internal (unused) imports of the assembly submodule.

What's Changed

  • Enhance View: Add optional point- and cell-data to ViewMesh by @adtzlr in #475
  • Add ViewSolid(field, solid=None) and set View = ViewSolid by @adtzlr in #479
  • Warp the mesh for View.plot(name=None) by @adtzlr in #481
  • Rename UserMaterial... to shorter names by @adtzlr in #483
  • Add constitutive material formulations to top-level namespace by @adtzlr in #485
  • Docs: Add Example Inflation by @adtzlr in #484
  • Consistent idx in einsum(), Enhance FieldsMixed(n=1) by @adtzlr in #489
  • Basis: Rename idx in einsum() by @adtzlr in #490
  • Rename internal IntegralFormMixed to IntegralForm by @adtzlr in #491
  • Remove unused imports of the assembly submodule by @adtzlr in #492
  • Don't modify a given label in Scene.plot(label=None) by @adtzlr in #495
  • Enhance plotting in a characteristic-curve job by @adtzlr in #498
  • Fix mooney_rivlin(), third_order_deformation() and van_der_waals() by @adtzlr in #502
  • Add MaterialAD: PK1-based Material w/ Automatic Differentiation by @adtzlr in #493

Full Changelog: v7.4.1...v7.5.0

v7.4.1

02 May 21:51
Compare
Choose a tag to compare

[7.4.1] - 2023-05-02

Changed

  • Change the logo.

Full Changelog: v7.4.0...v7.4.1

v7.4.0

29 Apr 20:24
Compare
Choose a tag to compare

[7.4.0] - 2023-04-29

Added

  • Add ViewMesh(mesh) and rebase View (internally renamed to ViewField) on ViewMesh with additional point- and cell-data.

Changed

  • Change math.linsteps(axis=None, axes=None) to create optional multi-column arrays, where the steps are inserted at the given axis.
  • Make last gravity and density arguments of SolidBodyGravity(field, gravity=None, density=1.0) optional.

What's Changed

  • Add ViewMesh(mesh, cell_type=None) by @adtzlr in #470
  • Multi-column math.linsteps(axis=None, axes=None) and optional args in SolidBodyGravity(field, gravity=None, density=1.0) by @adtzlr in #472

Full Changelog: v7.3.0...v7.4.0

v7.3.0

28 Apr 06:42
Compare
Choose a tag to compare

[7.3.0] - 2023-04-28

Changed

  • Show a progress bar during Job.evaluate(verbose=True) (new optional dependency tqdm). The legacy detailed output is available with Job.evaluate(verbose=2).

Removed

  • Remove config files for MyBinder. They are now located in a different repository adtzlr/felupe-web.

What's Changed

  • Job: Add progress bar by @adtzlr in #467
  • Job.evaluate(verbose=True): Further reduce the output by @adtzlr in #469

Full Changelog: v7.2.0...v7.3.0

v7.2.0

26 Apr 20:10
Compare
Choose a tag to compare

[7.2.0] - 2023-04-26

Added

  • Add environment.yml config file for MyBinder.
  • Add a timetrack-list as Job.timetrack which is updated incrementally on Job.evaluate().
  • Add View(field, point_data=None, cell_data=None), a result plotter powered by pyvista.
  • Add ViewXdmf(filename, time=0), a result plotter powered by pyvista.

Changed

  • Make everything in /src compliant with flake8.
  • Generalize the math-module so that all functions handle an arbitrary number of elementwise-operating trailing axes.
  • The special contraction modes of math.dot(mode=(2,2)) and math.ddot(mode=(2,2)) have to be specified by the mode-argument and are not detected by the shapes of the operands.
  • Enhance the overall performance by enforcing the identity matrix to a C-contiguous array.
  • Change point- and cell-data functions used in Job.evaluate(point_data=None, cell_data=None) from fun(substep) to fun(field, substep).

Fixed

  • Fix timings shown in newtonrhapson(verbose=True): The solve time was only related to one call of the solver while the assembly time referred to the whole runtime subtracted by the single-call solve time.

What's Changed

  • Flake8 Compliance (without tests) by @adtzlr in #448
  • Flake8: Remove E741 from ignore list by @adtzlr in #449
  • math: Handle arbitrary number of trailing axes by @adtzlr in #451
  • Fix timings in newtonrhapson() by @adtzlr in #453
  • Job: Add timetrack attribute by @adtzlr in #455
  • Add Result() for plotting XDMF-files by @adtzlr in #456
  • Enhance and simplify Result by @adtzlr in #458
  • Result: Switch to more default args of pyvista by @adtzlr in #460
  • Job.evaluate(): Change point- and cell-data function arguments by @adtzlr in #461
  • Result.plot(name=None): Plot only the undeformed mesh by @adtzlr in #462
  • Rename Result to View by @adtzlr in #463
  • View: Add cell_type-argument by @adtzlr in #464
  • Docs: Add Notebook support by @adtzlr in #465

Full Changelog: v7.1.0...v7.2.0

v7.1.0

14 Apr 22:56
Compare
Choose a tag to compare

[7.1.0] - 2023-04-15

Added

  • Add string representations for Region and FieldContainer.
  • Add Job.evaluate(parallel=True) in addition to Job.evaluate(kwargs={"parallel": True}). If both are given, the key in the dict is overwritten by the user-defined value.
  • Add mesh.stack(meshes) for joining meshes with identical points-arrays and cell-types. Contrary to mesh.concatenate(meshes), the points are not stacked and no offsets are inserted into the cells-arrays.
  • Add mesh.translate(move, axis) for the translation of mesh-points.

Changed

  • Pass optional keyword-arguments in CharacteristicCurve.plot(**kwargs) to the figure.
  • Don't invoke CharacteristicCurve.evaluate() from CharacteristicCurve.plot(), raise an error if the current job is not evaluated instead.
  • Make the endpoint of math.linsteps(endpoint=True) optional.
  • Don't modify the mesh for the dual regions RegionConstantQuad() and RegionConstantHexahedron(). Instead, it is required to pass a dual (disconnected) mesh with one point per cell RegionConstantQuad(mesh.dual(points_per_cell=1)).
  • Make requirement einsumt optional again due to issues with JupyterLite.
  • Add matplotlib to optional requirements.

Fixed

  • Catch ModuleNotFoundError if from einsumt import einsumt fails (in JupyterLite) and fall back to from numpy import einsum as einsumt.

What's Changed

  • Add string representations for Region and FieldContainer by @adtzlr in #432
  • CharacteristicCurve: Pass kwargs to the plot by @adtzlr in #435
  • Add Job.evaluate(parallel=False) by @adtzlr in #437
  • Add Mesh.dual() and rebase Mesh.disconnect(), create dual-meshes in FieldsMixed() by @adtzlr in #441
  • Add mesh.stack(meshes) and mesh.translate(move, axis) by @adtzlr in #443
  • Threaded einsum: Fall-back to numpy if einsumt is not available by @adtzlr in #446

Full Changelog: v7.0.0...v7.1.0

v7.0.0

07 Apr 11:57
Compare
Choose a tag to compare

[7.0.0] - 2023-04-07

Added

  • Add boundary regions RegionQuadraticQuadBoundary and RegionBiQuadraticQuadBoundary for quadratic quads.
  • Add boundary regions RegionQuadraticHexahedronBoundary and RegionTriQuadraticHexahedronBoundary for quadratic hexahedrons.
  • Add mesh.flip(mask=None) to flip a mirrored or wrong indexed cells array, applied on a given boolean mask of cells.

Changed

  • Change einsumt from an optional to a required dependency.
  • Vectorize implementations of MultiPointConstraint and MultiPointContact and re-implement both as scipy.sparse.lil_matrix().
  • Rename old Mesh to DiscreteGeometry and rebase new Mesh on DiscreteGeometry.
  • Simplify the usage of explicit mesh-related tools by adding them as methods to Mesh, i.e. mesh.tools.expand(Rectangle()) is equivalent to Rectangle().expand().
  • Print runtimes for time spent on Assembly and Solve in newtonrhapson(verbose=True).
  • Check for negative cell-volumes at quadrature points and print a warning along with a possible fix.

Fixed

  • Fix tools.project() for higher-order quad- and hexahedron elements.
  • Fix transposed output of tools.project().
  • Fix failed scalar-value checks by using np.isscalar() in mesh.expand(z=1) and mesh.revolve(phi=180) where z or phi are of type np.int32.
  • Fix read a Mesh with no cells in mesh.read().

Removed

  • Remove jit-compilation of forms (parallel is the preferred method).
  • Remove unused tools.check().
  • Remove optional dependency sparse.

What's Changed

  • Remove jit and reduce complexity of newtonrhapson() by @adtzlr in #408
  • Enforce einsumt by @adtzlr in #409
  • Vectorize implementation of MultiPointConstraint by @adtzlr in #412
  • Add boundary regions for quadratic quads by @adtzlr in #414
  • Add boundary regions for quadratic hexahedrons by @adtzlr in #415
  • Fix TriQuadraticHexahedron().points and tools.project by @adtzlr in #419
  • Fix scalar-checks in mesh.expand() and mesh.revolve() by @adtzlr in #421
  • Fix read a mesh with no cells in mesh.read() by @adtzlr in #423
  • Enhance Mesh: Mesh tools as methods by @adtzlr in #425
  • Print newton-timings for time spent on Assembly and Solve by @adtzlr in #427
  • Fix MultiPointConstraint and MultiPointContact with active skips by @adtzlr in #429

Full Changelog: v6.4.0...v7.0.0

v6.4.0

01 Apr 08:03
Compare
Choose a tag to compare

[6.4.0] - 2023-04-01

Added

  • Add a new argument to pass a mesh for the dual regions in FieldsMixed(mesh=None).
  • Add quadrature and grad arguments to RegionLagrange.
  • Add order attribute to RegionLagrange.
  • Add items-argument for custom slicing of characteristic curve plots in CharacteristicCurve.plot(items=None).

Changed

  • Enhance Domain integration in IntegralForm: Ensure C-contiguous arrays as fun-argument.
  • Enhance performance of hyperelastic material model formulations using automatic differentiation.
  • Perform reshape and broadcasting if user-defined Field-values with correct size are given.
  • Make symmetry-related boundary conditions in uniaxial loadcase optional dof.uniaxial(sym=True).
  • Merge custom point- and cell-data dicts with default dicts in Job instead of replacing them, also add Job(point_data_default=True, cell_data_default=True).
  • Allow to change cell-type in Mesh.update(cells, cell_type=None).
  • Enhance the creation of a disconnected mesh for mixed-field formulations by Mesh.disconnect(points_per_cell=None, calc_points=True).
  • Change required to optional arguments in Step(items, ramp=None, boundaries=None).

Fixed

  • Fix broadcast arrays for the geometric stiffness contribution of hyperelastic material model formulations using automatic differentiation.

What's Changed

  • IntegralForm: Ensure C-contiguous arrays as fun-argument by @adtzlr in #386
  • Perform reshape and broadcasting if user-defined Field-values with correct size are given. by @adtzlr in #388
  • Make symmetry boundary conditions optional in dof.uniaxial(sym=True) by @adtzlr in #392
  • Job: Append point- and cell-data to default instead of replacing them by @adtzlr in #394
  • Add a custom mesh for the dual regions in FieldsMixed(mesh=None) by @adtzlr in #396
  • Enhance FieldsMixed(): Add support for RegionLagrange (family of Taylor-Hood elements) by @adtzlr in #400
  • Characteristic Curve - Job plot: Add items-argument for custom slicing by @adtzlr in #390
  • Enhance Mesh.disconnect(points_per_cell=None, calc_points=True) by @adtzlr in #403
  • Step: Make arguments ramp and boundaries optional by @adtzlr in #405

Full Changelog: v6.3.0...v6.4.0

v6.3.0

06 Feb 22:39
Compare
Choose a tag to compare

[6.3.0] - 2023-02-06

Added

  • Add more hyperelastic material formulations: Saint Venant-Kirchhoff, Mooney-Rivlin, Arruda-Boyce, Extended Tube and Van der Waals.
  • Add BiQuadraticQuad element (as a permuted version of ArbitraryOrderLagrangeElement).
  • Add Quadratic element.
  • Add new arguments for more flexible region templates, e.g. RegionQuad(mesh, quadrature=GaussLegendre(order=1, dim=2), grad=True).
  • Add support for triangle/tetra in FieldsMixed().
  • Add optional state variables to UserMaterialHyperelastic(model, nstatevars=0).
  • Add finite-strain viscoelastic material formulation.

Changed

  • Switch to a src/-layout.
  • Import base-element class as element.Element().
  • Auto-detect min/max-coordinates of mesh-points for loadcases if dof.uniaxial(right=None).
  • Ensure compatibility with tensortrax>0.6.0 (Van-der-Waals and Viscoelastic models).

Fixed

  • Fix rotation matrix for a rotation around the y-axis.

What's Changed

  • Add more hyperelastic material formulations by @adtzlr in #369
  • Fix rotation matrix around y-axis by @adtzlr in #370
  • Add QuadraticQuad() and BiQuadraticQuad() elements by @adtzlr in #371
  • Add support for dual triangle/tetra-regions by @adtzlr in #373
  • Switch to src/-layout by @adtzlr in #374
  • Add optional state variables to UserMaterialHyperelastic(nstatevars=0) by @adtzlr in #377
  • Import base-element class element.Element() by @adtzlr in #378
  • Change loadcases: Detect Min/Max Coordinates of mesh.points by @adtzlr in #381
  • Fix tensortrax>0.6.0 compatibility by @adtzlr in #382

Full Changelog: v6.2.5...v6.3.0