Releases: adtzlr/felupe
Releases · adtzlr/felupe
v8.7.0
[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 ofmath.solve_2d(A, b)with supported broadcasting on the elementwise-operating trailing axes.
Changed
- Rebase
math.solve_2d(A, b)onmath.solve_nd(A, b, n=2)with a batched-rhs supported in NumPy 2.0. - Change
ogden_roxburgh()andOgdenRoxburghto use the Gauss error functionerfinstead oftanhas internal sigmoid function. - Flatten the returned
inverseindices-array ofnp.unique(..., return_inverse=True)inmesh.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()andOgdenRoxburghto useerfinstead oftanhby @adtzlr in #788 - Add support for NumPy 2.0 by @adtzlr in #789
Full Changelog: v8.6.0...v8.7.0
v8.6.0
[8.6.0] - 2024-05-29
Added
- Add the isotropic-hyperelastic
alexander(C1, C2, C2, gamma, k)material model formulation to be used inHyperelastic(). - Add the isotropic-hyperelastic Micro-Sphere
miehe_goektepe_lulei(mu, N, U, p, q)material model formulation to be used inHyperelastic(). - Add the pseudo-elastic
ogden_roxburgh(r, m, beta, material, **kwargs)material model formulation to be used inHyperelastic(). - 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 inMaterialAD(). - Add the Total-Lagrange (original) MORPH material formulation
morph(p)to be used inHyperelastic(). - Add decorators
@total_lagrangeand@updated_lagrangefor Total / Updated Lagrange material formulations to be used inMaterialAD. - Add the isotropic-hyperelastic
anssari_benam_bucchi(mu, N)material model formulation to be used inHyperelastic(). - Add the isotropic-hyperelastic
lopez_pamies(mu, alpha)material model formulation to be used inHyperelastic().
Changed
- Recfactor the
constitutionmodule.
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_roxburghusing AD forHyperelasticby @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_lagrangeand@updated_lagrangedecorators forMaterialADby @adtzlr in #773 - Rebase
morph_representative_directions()as Total-Lagrange material forMaterialADby @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
- @tkoyama010 made their first contribution in #781
- @bhaveshshrimali made their first contribution in #780
Full Changelog: v8.5.1...v8.6.0
v8.5.1
[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
[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 byscipy.optimize.least_squares(). - Add initial default material parameters for the hyperelastic material model formulations.
What's Changed
Full Changelog: v8.4.0...v8.5.0
v8.4.0
[8.4.0] - 2024-04-12
Added
- Add
math.solve_2d(A, b, solver=np.linalg.solve, **kwargs)to be used innewtonrhapson(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
[8.3.1] - 2024-04-06
Fixed
- Set the default verbosity level to None in
newtonrhapson(verbose=None)andJob.evaluate(verbose=None). If None, this defaults to True (as before) but evaluates the environmental variableFELUPE_VERBOSEif present withFELUPE_VERBOSE == "true". This does not ignore custom verbosity levels.
What's Changed
Full Changelog: v8.3.0...v8.3.1
v8.3.0
[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.0to2.0inViewMesh.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
Full Changelog: v8.2.1...v8.3.0
v8.2.1
[8.2.1] - 2024-03-30
Fixed
- Fix
FieldContainer.evaluate.strain(fun=lambda stretch: stretch)for custom strain-stretch callables. Thefun-argument was previously ignored.
What's Changed
- Add
field.EvaluateFieldContainer(field)by @adtzlr in #728 - Outsource
EvaluateFieldContainertofield/_evaluate.pyby @adtzlr in #729 - Fix
FieldContainer.evaluate.strain(fun=lambda stretch: stretch)for customfun-callables by @adtzlr in #731
Full Changelog: v8.2.0...v8.2.1
v8.2.0
[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)orFieldContainer.evaluate.green_lagrange_strain(tensor=True, asvoigt=False). These methods refer tomath.strain(k=0)which usesmath.strain_stretch_1d(k=0)by default with the strain exponentkof the Seth-Hill strain formulation.
Changed
- Change the return type of
math.eig()which returns a namedtuple with attributeseigenvaluesandeigenvectors. Now consistent with NumPy. This also affectsmath.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 affectsmath.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 ofk=0which returns the logarithmic strain.
What's Changed
- Enhance plots of quadrature schemes by @adtzlr in #723
- Enhance the plots of
GaussLegendreBoundaryby @adtzlr in #724 - Add
FieldContainer.evaluate.strain()by @adtzlr in #726
Full Changelog: v8.1.0...v8.2.0
v8.1.0
[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)andmesh.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)andmesh.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