Skip to content

Releases: adtzlr/felupe

v8.7.0

07 Jun 07:11

Choose a tag to compare

[8.7.0] - 2024-06-07

Note

This is the first release with support for NumPy 2.0.

Added

  • Add math.solve_nd(A, b, n=1) as a generalized function of math.solve_2d(A, b) with supported broadcasting on the elementwise-operating trailing axes.

Changed

  • Rebase math.solve_2d(A, b) on math.solve_nd(A, b, n=2) with a batched-rhs supported in NumPy 2.0.
  • Change ogden_roxburgh() and OgdenRoxburgh to use the Gauss error function erf instead of tanh as internal sigmoid function.
  • Flatten the returned inverse indices-array of np.unique(..., return_inverse=True) in mesh.merge_duplicate_points() to ensure compatibility with NumPy 2.0.

Fixes

  • Reset state variables in PlotMaterial.evaluate() after each completed load case.

What's Changed

  • Reset state variables in PlotMaterial.evaluate() after each completed load case by @adtzlr in #784
  • Add math.solve_nd(A, b, n=1) by @adtzlr in #785
  • Support broadcasting in matrix-axes of math.solve_nd() by @adtzlr in #787
  • Fix small typo focusses -> focuses by @tkoyama010 in #786
  • Change ogden_roxburgh() and OgdenRoxburgh to use erf instead of tanh by @adtzlr in #788
  • Add support for NumPy 2.0 by @adtzlr in #789

Full Changelog: v8.6.0...v8.7.0

v8.6.0

28 May 22:04

Choose a tag to compare

[8.6.0] - 2024-05-29

Added

  • Add the isotropic-hyperelastic alexander(C1, C2, C2, gamma, k) material model formulation to be used in Hyperelastic().
  • Add the isotropic-hyperelastic Micro-Sphere miehe_goektepe_lulei(mu, N, U, p, q) material model formulation to be used in Hyperelastic().
  • Add the pseudo-elastic ogden_roxburgh(r, m, beta, material, **kwargs) material model formulation to be used in Hyperelastic().
  • Add an optional relative-residuals argument to ConstitutiveMaterial.optimize(relative=False).
  • Add a class-decorator constitutive_material(Msterial, name=None).
  • Add the Total-Lagrange MORPH material formulation implemented by the concept of representative directions morph_representative_directions(p) to be used in MaterialAD().
  • Add the Total-Lagrange (original) MORPH material formulation morph(p) to be used in Hyperelastic().
  • Add decorators @total_lagrange and @updated_lagrange for Total / Updated Lagrange material formulations to be used in MaterialAD.
  • Add the isotropic-hyperelastic anssari_benam_bucchi(mu, N) material model formulation to be used in Hyperelastic().
  • Add the isotropic-hyperelastic lopez_pamies(mu, alpha) material model formulation to be used in Hyperelastic().

Changed

  • Recfactor the constitution module.

Fixed

  • Fix plotting the keyword-arguments of a constitutive material ConstitutiveMaterial.plot(show_kwargs=True). For list-based material parameters of length 1, the brackets aren't shown now. E.g., this affects optimized material parameters.
  • Don't update the material parameters in-place in ConstitutiveMaterial.optimize().
  • Don't convert material parameter scalars to arrays in ConstitutiveMaterial.optimize().

What's Changed

  • Add the isotropic-hyperelastic Alexander model by @adtzlr in #756
  • Re-organize the constitution module by @adtzlr in #758
  • Delete _models_hyperelasticity_ad.py by @adtzlr in #759
  • Fix the Alexander model by @adtzlr in #761
  • Add ogden_roxburgh using AD for Hyperelastic by @adtzlr in #762
  • Add ConstitutiveMaterial.optimize(relative=False) by @adtzlr in #764
  • Add the Micro-Sphere hyperelastic material model framework by @adtzlr in #766
  • Add constitutive_material(Material) decorator by @adtzlr in #768
  • Add the MORPH material model (by the method of representative directions) by @adtzlr in #770
  • Add the MORPH material model formulation by @adtzlr in #771
  • Add @total_lagrange and @updated_lagrange decorators for MaterialAD by @adtzlr in #773
  • Rebase morph_representative_directions() as Total-Lagrange material for MaterialAD by @adtzlr in #774
  • Add the Anssari-Benam Bucchi isotropic-hyperelastic material model formulation by @adtzlr in #775
  • Don't update the material parameters in-place and don't convert them to arrays in ConstitutiveMaterial.optimize() by @adtzlr in #778
  • Add the Lopez-Pamies hyperelastic model lopez_pamies(mu, alpha) by @adtzlr in #779
  • Fix small typo cartesion -> cartesian by @tkoyama010 in #781
  • add example for nonlinear viscoelasticity by @bhaveshshrimali in #780

New Contributors

Full Changelog: v8.5.1...v8.6.0

v8.5.1

08 May 14:41

Choose a tag to compare

[8.5.1] - 2024-05-08

Fixed

  • Fix the gradient evaluation in NeoHookeCompressible(mu=1, lmbda=None).
  • Fix MaterialStrain.plot().

What's Changed

  • Fix gradient-evaluation in NeoHookeCompressible(lmbda=None) by @adtzlr in #754
  • Fix MaterialStrain.plot() by @adtzlr in #755

Full Changelog: v8.5.0...v8.5.1

v8.5.0

27 Apr 14:13

Choose a tag to compare

[8.5.0] - 2024-04-27

Added

  • Add umat_new, res = ConstitutiveMaterial.optimize(ux=[stretches, stresses], ps=None, bx=None) to optimize the material parameters on given experimental data for incompressible uniaxial, biaxial and / or planar tension / compression data by scipy.optimize.least_squares().
  • Add initial default material parameters for the hyperelastic material model formulations.

What's Changed

  • Add ConstitutiveMaterial.optimize() by @adtzlr in #750

Full Changelog: v8.4.0...v8.5.0

v8.4.0

12 Apr 12:08

Choose a tag to compare

[8.4.0] - 2024-04-12

Added

  • Add math.solve_2d(A, b, solver=np.linalg.solve, **kwargs) to be used in newtonrhapson(solve=solve_2d, ...) for two-dimensional unknowns. This is useful for local Newton-iterations related to viscoelastic evolution equations inside constitutive material formulations.
  • Add x- and y-offsets in Job.plot(xoffset=0.0, yoffset=0.0).

Changed

  • Wrap the ax-title with the parameters of the material model in ConstitutiveMaterial.plot().

Fixed

  • Sort array of principal values in descending order before plotting in Scene.plot("Principal Values of ..."). This ensures that the labels are matching user-defined arrays of principal values.

What's Changed

  • Sort array of principal values in Scene.plot() by @adtzlr in #739
  • Add math.solve_2d(A, b) by @adtzlr in #742
  • Wrap the ax-title ConstitutiveMaterial.plot() by @adtzlr in #743

Full Changelog: v8.3.1...v8.4.0

v8.3.1

06 Apr 21:27

Choose a tag to compare

[8.3.1] - 2024-04-06

Fixed

  • Set the default verbosity level to None in newtonrhapson(verbose=None) and Job.evaluate(verbose=None). If None, this defaults to True (as before) but evaluates the environmental variable FELUPE_VERBOSE if present with FELUPE_VERBOSE == "true". This does not ignore custom verbosity levels.

What's Changed

  • Change default verbose=None in Job.evaluate() and newtonrhapson() by @adtzlr in #736

Full Changelog: v8.3.0...v8.3.1

v8.3.0

02 Apr 15:37

Choose a tag to compare

[8.3.0] - 2024-04-02

Added

  • Add a method to convert a mesh to a PyVista unstructured grid Mesh.as_pyvista(cell_type=None).

Changed

  • Change default line-width from 1.0 to 2.0 in ViewMesh.plot(line_width=2.0).
  • Enforce a 3d points-array in Mesh.as_meshio().

Fixed

  • Fix previously ignored line-width in the plot of a mesh ViewMesh.plot(line_width=1.0).
  • Fix math.tovoigt() for one-dimensional tensors.

What's Changed

  • Add Mesh.as_pyvista(), fix and change default ViewMesh.plot(line_width=1.0) by @adtzlr in #733

Full Changelog: v8.2.1...v8.3.0

v8.2.1

30 Mar 21:56
03ca271

Choose a tag to compare

[8.2.1] - 2024-03-30

Fixed

  • Fix FieldContainer.evaluate.strain(fun=lambda stretch: stretch) for custom strain-stretch callables. The fun-argument was previously ignored.

What's Changed

  • Add field.EvaluateFieldContainer(field) by @adtzlr in #728
  • Outsource EvaluateFieldContainer to field/_evaluate.py by @adtzlr in #729
  • Fix FieldContainer.evaluate.strain(fun=lambda stretch: stretch) for custom fun-callables by @adtzlr in #731

Full Changelog: v8.2.0...v8.2.1

v8.2.0

25 Mar 15:40

Choose a tag to compare

[8.2.0] - 2024-03-25

Added

  • Add methods to evaluate different strain measures of a field container, i.e. FieldContainer.evaluate.strain(tensor=True, asvoigt=False, k=0), FieldContainer.evaluate.log_strain(tensor=True, asvoigt=False) or FieldContainer.evaluate.green_lagrange_strain(tensor=True, asvoigt=False). These methods refer to math.strain(k=0) which uses math.strain_stretch_1d(k=0) by default with the strain exponent k of the Seth-Hill strain formulation.

Changed

  • Change the return type of math.eig() which returns a namedtuple with attributes eigenvalues and eigenvectors. Now consistent with NumPy. This also affects math.eigh().
  • Change the shape of the array of eigenvectors returned by math.eig() from (a, i, ...) to (i, a, ...). Now consistent with NumPy. This also affects math.eigh().
  • Switch from a hard-coded logarithmic strain evaluation to a more generalized Seth-Hill strain-stretch relation in math.strain(fun=math.strain_stretch_1d, k=0) with a default strain-exponent of k=0 which returns the logarithmic strain.

What's Changed

  • Enhance plots of quadrature schemes by @adtzlr in #723
  • Enhance the plots of GaussLegendreBoundary by @adtzlr in #724
  • Add FieldContainer.evaluate.strain() by @adtzlr in #726

Full Changelog: v8.1.0...v8.2.0

v8.1.0

23 Mar 22:35

Choose a tag to compare

[8.1.0] - 2024-03-23

Added

  • Add an argument to disable the (default) expansion of the points-array of a mesh in mesh.expand(expand_dim=True) and mesh.revolve(expand_dim=True). E.g., this allows the expansion and / or revolution of a quad-mesh with points in 3d-space.
  • Add MultiPointContact.plot(offset=0, **kwargs) to plot the rigid contact plane(s) or line(s) at a given offset.
  • Add MultiPointConstraint.plot(**kwargs) to plot the lines of a multi-point constraint.

Changed

  • Don't raise an error if the total angle of revolution is greater than 360 degree in mesh.revolve(phi=361).

What's Changed

  • Don't raise an error for mesh-revolutions with >360 degree, e.g. mesh.revolve(phi=361) by @adtzlr in #715
  • Enhance mesh.expand(expand_dim=True) and mesh.revolve(expand_dim=True) by @adtzlr in #716
  • Add MultiPointContact.plot(**kwargs) method by @adtzlr in #718
  • Add MultiPointConstraint.plot(**kwargs) by @adtzlr in #719
  • Enhance the plot()-methods of region, element and quadrature by @adtzlr in #721
  • Enhance element plots by @adtzlr in #722

Full Changelog: v8.0.0...v8.1.0