Releases: adtzlr/felupe
Releases · adtzlr/felupe
v7.5.1
v7.5.0
[7.5.0] - 2023-07-20
Added
- Add
ViewSolid
, which enablesview = 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()
fromconstitution.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 inViewField
. - Enforce contiguous arrays in
UserMaterialHyperelastic
(enhance performance). View
: Switch fromViewField
toViewSolid
.View
: Always plot the undeformed mesh withopacity=0.2
andshow_edges=False
.- Rename
UserMaterial
toMaterial
,UserMaterialStrain
toMaterialStrain
,UserMaterialHyperelastic
toHyperelastic
(keep old alias names until next major release). - Use consistent indices in
einsum()
for (elementwise operating) trailing axes:q
for quadrature point andc
for cell. - Rename internal
IntegralFormMixed
toIntegralForm
, which is now consistent internally and in the top-level namespace. The previous internal base-class for a single-fieldIntegralForm
is renamed toWeakForm
. - 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()
andvan_der_waals()
.
Removed
- Remove internal (unused) imports of the assembly submodule.
What's Changed
- Enhance
View
: Add optional point- and cell-data toViewMesh
by @adtzlr in #475 - Add
ViewSolid(field, solid=None)
and setView = 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()
, EnhanceFieldsMixed(n=1)
by @adtzlr in #489 Basis
: Rename idx ineinsum()
by @adtzlr in #490- Rename internal
IntegralFormMixed
toIntegralForm
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()
andvan_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
v7.4.0
[7.4.0] - 2023-04-29
Added
- Add
ViewMesh(mesh)
and rebaseView
(internally renamed toViewField
) onViewMesh
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 givenaxis
. - Make last
gravity
anddensity
arguments ofSolidBodyGravity(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 inSolidBodyGravity(field, gravity=None, density=1.0)
by @adtzlr in #472
Full Changelog: v7.3.0...v7.4.0
v7.3.0
[7.3.0] - 2023-04-28
Changed
- Show a progress bar during
Job.evaluate(verbose=True)
(new optional dependencytqdm
). The legacy detailed output is available withJob.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 #467Job.evaluate(verbose=True)
: Further reduce the output by @adtzlr in #469
Full Changelog: v7.2.0...v7.3.0
v7.2.0
[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 onJob.evaluate()
. - Add
View(field, point_data=None, cell_data=None)
, a result plotter powered bypyvista
. - Add
ViewXdmf(filename, time=0)
, a result plotter powered bypyvista
.
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))
andmath.ddot(mode=(2,2))
have to be specified by themode
-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)
fromfun(substep)
tofun(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
: Addtimetrack
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 ofpyvista
by @adtzlr in #460Job.evaluate()
: Change point- and cell-data function arguments by @adtzlr in #461Result.plot(name=None)
: Plot only the undeformed mesh by @adtzlr in #462- Rename
Result
toView
by @adtzlr in #463 View
: Addcell_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
[7.1.0] - 2023-04-15
Added
- Add string representations for
Region
andFieldContainer.
- Add
Job.evaluate(parallel=True)
in addition toJob.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 tomesh.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()
fromCharacteristicCurve.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()
andRegionConstantHexahedron()
. Instead, it is required to pass a dual (disconnected) mesh with one point per cellRegionConstantQuad(mesh.dual(points_per_cell=1))
. - Make requirement
einsumt
optional again due to issues with JupyterLite. - Add
matplotlib
to optional requirements.
Fixed
- Catch
ModuleNotFoundError
iffrom einsumt import einsumt
fails (in JupyterLite) and fall back tofrom numpy import einsum as einsumt
.
What's Changed
- Add string representations for
Region
andFieldContainer
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 rebaseMesh.disconnect()
, create dual-meshes inFieldsMixed()
by @adtzlr in #441 - Add
mesh.stack(meshes)
andmesh.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
[7.0.0] - 2023-04-07
Added
- Add boundary regions
RegionQuadraticQuadBoundary
andRegionBiQuadraticQuadBoundary
for quadratic quads. - Add boundary regions
RegionQuadraticHexahedronBoundary
andRegionTriQuadraticHexahedronBoundary
for quadratic hexahedrons. - Add
mesh.flip(mask=None)
to flip a mirrored or wrong indexed cells array, applied on a given booleanmask
of cells.
Changed
- Change
einsumt
from an optional to a required dependency. - Vectorize implementations of
MultiPointConstraint
andMultiPointContact
and re-implement both asscipy.sparse.lil_matrix()
. - Rename old
Mesh
toDiscreteGeometry
and rebase newMesh
onDiscreteGeometry
. - Simplify the usage of explicit mesh-related tools by adding them as methods to
Mesh
, i.e.mesh.tools.expand(Rectangle())
is equivalent toRectangle().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()
inmesh.expand(z=1)
andmesh.revolve(phi=180)
wherez
orphi
are of typenp.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 ofnewtonrhapson()
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
andtools.project
by @adtzlr in #419 - Fix scalar-checks in
mesh.expand()
andmesh.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
andMultiPointContact
with active skips by @adtzlr in #429
Full Changelog: v6.4.0...v7.0.0
v6.4.0
[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 asfun
-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 addJob(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 forRegionLagrange
(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 argumentsramp
andboundaries
optional by @adtzlr in #405
Full Changelog: v6.3.0...v6.4.0
v6.3.0
[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 ofArbitraryOrderLagrangeElement
). - 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()
andBiQuadraticQuad()
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