Skip to content

v7.19.0

Compare
Choose a tag to compare
@adtzlr adtzlr released this 08 Mar 12:37
· 885 commits to main since this release

[7.19.0] - 2024-03-08

Added

  • Add FieldDual(disconnect=True) for a dual (secondary) field with an optionally disconnected mesh. This also enables FieldsMixed(disconnect=True) in mixed fields.
  • Add a quadrature scheme for integrating the surface of a unit hemisphere BazantOh(n=21).
  • Add NearlyIncompressible as a simplified version of ThreeFieldVariation. A constitutive material formulation on the distortional part of a strain energy function in terms of the deformation gradient has to be provided, e.g. by umat = NearlyIncompressible(NeoHooke(mu=1), bulk=5000).
  • Add optional kwargs to a job-callback Job(callback=lambda stepnumber, substepnumber, substep, **kwargs: None, **kwargs) and CharacteristicCurve(callback=lambda stepnumber, substepnumber, substep, **kwargs: None, **kwargs).
  • Add DiscreteGeometry properties x, y and z to access the columns of the points-array.
  • Add a new math-function math.equivalent_von_mises(A) for three-dimensional second-order tensors.
  • Add the evaluation of the equivalent von Mises Cauchy stress as cell-data in ViewSolid, available as Solid.plot("Equivalent of Cauchy Stress").
  • Add mesh.stack(meshes) as method to MeshContainer.stack(). Note that this only supports mesh containers with meshes of same cell-types.
  • Add NeoHooke.gradient(out=None) and NeoHooke.hessian(out=None) for a location to store the results. Also for NeoHookeCompressible.
  • Add out-keyword to gradient() and hessian of NearlyIncompressible and ThreeFieldVariation.
  • Add optional initial state variables in ViewMaterial(statevars=None) and ViewMaterialIncompressible(statevars=None).
  • Add the L2-projection as tools.project(values, region, average=True, mean=False, dV=None, solver=scipy.sparse.linalg.spsolve) to project given values at quadrature points to mesh-points. This replaces the old tools.project(values, region, average=True, mean=False) in a backward-compatible way. The new method is computationally more expensive but is also much more flexible.
  • Add fifth-order quadrature schemes quadrature.Triangle(order=5) and quadrature.Tetrahedron(order=5).
  • Add Region.copy(mesh=None, element=None, quadrature=None) to copy a region and re-evaluate this copy if necessary.

Changed

  • Rename Mesh.save() to Mesh.write() and add Mesh.save() as an alias to Mesh.write().
  • Enhance the performance of NeoHooke, NeoHookeCompressible, SolidBody and SolidBodyNearlyIncompressible.
  • Enhance the performance of math.inv(out=None) and math.det(out=None).
  • Use only the offical API of tensortrax. A workaround is used to ensure compatibility with tensortrax <= v0.17.1.
  • Pass optional keyword-arguments in the plot-methods ViewMaterial.plot(**kwargs) and ViewMaterialIncompressible.plot(**kwargs) to the matplotlib axes object ax.plot(**kwargs).
  • Only add off_screen and notebook keyword-arguments to pyvista.Plotter(**kwargs) if they are True. This is needed for not ignoring a global variable like pyvista.OFF_SCREEN = True.
  • Enforce verbose=0 if the environmental variable "FELUPE_VERBOSE" is "false". This is useful for running the examples when building the documentation.
  • Don't require a bilinearform in FormItem(bilinearform=None). An empty FormItem is now a valid item in a Step. For empty vectors/matrices, the shape is inferred from sum(FieldContainer.fieldsizes) instead of FieldContainer.fields[0].values.size.
  • Rename the old-project method to tools.extrapolate(values, region, average=True, mean=False) which extrapolates values at quadrature points to mesh-points.
  • Change the sorting of quadrature points for triangles and tetrahedrons (due to internal code simplifications).
  • The reload-method of a region does only re-evaluate it if at least one of the arguments are not None Region.reload(mesh, element, quadrature).

Fixed

  • Fix missing support for third-order- and second-order tensor combinations to math.dot(A, B, mode=(2,3)) and math.ddot(A, B, mode=(2,3)).
  • Fix error if FieldDual is in the fields of a FieldContainer for IntegralForm.
  • Fix math.inv(A) for arrays with shape A.shape = (1, 1, ...). Also raise an error if shape[:2] not in [(3, 3), (2, 2), (1, 1)].
  • Raise an error in math.det(A) if A.shape[:2] not in [(3, 3), (2, 2), (1, 1)].
  • Fix mutable keyword-arguments in SolidBody._vector(kwargs={}) by SolidBody._vector(kwargs=None). Also for ._matrix() and for SolidBodyNearlyIncompressible.
  • Fix wrong shape and the resulting error during assembly in fem.assembly.expression.Form for the integration of a linear form with different mesh- and field-dimensions.

What's Changed

  • Rename Mesh.save() to Mesh.write() and add Mesh.save() as an alias of it by @adtzlr in #626
  • Refactor constitution by @adtzlr in #628
  • Add FieldDual for the dual (secondary) fields in mixed fields by @adtzlr in #629
  • Add quadrature scheme BazantOh() by @adtzlr in #632
  • Add NearlyIncompressible(material, bulk) by @adtzlr in #633
  • Add math.dot(A, B, mode=(2,3)) and math.ddot(A, B, mode=(2,3)) by @adtzlr in #641
  • Add optional kwargs to Job(callback=lambda i, j, res, **kwargs: None, **kwargs) by @adtzlr in #642
  • Add support for FieldDual in IntegralForm by @adtzlr in #643
  • Fix math.inv(A) for A.shape[:2] == (1, 1) by @adtzlr in #644
  • Add FieldDual(disconnect=None). by @adtzlr in #646
  • Add DiscreteGeometry properties x, y and z by @adtzlr in #648
  • Add math.equivalent_von_mises(A) by @adtzlr in #650
  • Add MeshContainer.stack() by @adtzlr in #652
  • Enhance the performance by @adtzlr in #654
  • Enhance the performance of ``math.inv(out=None)` by @adtzlr in #655
  • Improve the performance of math.det(A, out=None) by @adtzlr in #659
  • Use only the official API of tensortrax.math by @adtzlr in #667
  • Only add off_screen and notebook keyword-arguments to pyvista.Plotter(**kwargs) if they are True by @adtzlr in #670
  • Docs: Examples are generated by Sphinx-Gallery by @adtzlr in #671
  • Fix error during assembly in Form for different mesh- and field-dimensions by @adtzlr in #675
  • Add the L2-projection and replace it with the old tools.project() by @adtzlr in #683

Full Changelog: v7.18.0...v7.19.0