felupe

finite element analysis for continuum mechanics of solid bodies

GPL-3.0 License

Downloads
5.7K
Stars
75
Committers
1
felupe - v6.2.4

Published by adtzlr almost 2 years ago

[6.2.4] - 2023-01-01

Changed

  • Update actions used in CI/CD workflows.
felupe - v6.2.3

Published by adtzlr almost 2 years ago

[6.2.3] - 2023-01-01

Changed

  • Remove setup.cfg, change pyproject.toml and store the version tag only once within the source code (__about__.py).

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v6.2.2...v6.2.3

felupe - v6.2.2

Published by adtzlr almost 2 years ago

[6.2.2] - 2022-12-20

Fixed

  • Fix init if tensortrax is not installed.

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v6.2.1...v6.2.2

felupe - v6.2.1

Published by adtzlr almost 2 years ago

[6.2.1] - 2022-12-19

Fixed

  • Fix version string.

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v6.2.0...v6.2.1

felupe - v6.2.0

Published by adtzlr almost 2 years ago

[6.2.0] - 2022-12-16

Added

  • Add Total-Lagrange UserMaterialHyperelastic(fun, parallel=False, **kwargs) based on optional tensortrax. Only available if tensortrax is installed.
  • Add constitutive isotropic hyperelastic model formulations to be used with UserMaterialHyperelastic() (constitution.ogden(C, mu, alpha), etc.).

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v6.1.0...v6.2.0

felupe - v6.1.0

Published by adtzlr almost 2 years ago

[6.1.0] - 2022-12-10

Changed

  • Enhance plotting with custom x- and y-data in CharacteristicCurve.plot(x, y) and allow a list of items for force evaluation in CharacteristicCurve(items=[...]) to be passed.
  • Enhance math.linsteps(points=[0, 5, 0], num=[5, 10]) by supporting a list of substeps.
  • Enhance compression of shear loadcase: Apply the compression on the bottom and the top dof.shear(compression=(0, 0)).

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v6.0.0...v6.1.0

felupe - v6.0.0

Published by adtzlr almost 2 years ago

[6.0.0] - 2022-11-20

Added

  • Add project(mean=True) to project cell mean-values to mesh-points. Now project() supports Triangles and Tetrahedrons.
  • Add RegionBoundary.mesh_faces() for a mesh with face-cells on the selected boundary of a region.
  • Add pseudo-elastic material OgdenRoxburgh() which may be used with SolidBodyNearlyIncompressible().
  • Add umat = UserMaterial(stress, elasticity, nstatevars=0, **kwargs) with user-defined functions for the (first Piola-Kirchhoff) stress tensor P, statevars_new = umat.gradient([F, statevars], **kwargs) and the according fourth-order elasticity tensor A = umat.hessian([F, statevars], **kwargs) based on the deformation gradient.
  • Add UserMaterialStrain() for small-strain based user-defined material formulations with an umat-interface suitable for elastic-plastic frameworks.
  • Add LinearElasticPlasticIsotropicHardening() which is based on UserMaterialStrain() and constitution.linear_elastic_plastic_isotropic_hardening().
  • Add new math helpers math.ravel() and math.reshape().
  • Add optional axis argument on which the norm is evaluated math.norm(axis=None).

Changed

  • Unify material definition with methods for the stress P, statevars_new = umat.gradient([F, statevars]) and the elasticity tensor A = umat.hessian([F, statevars]). This breaks support for materials defined by matadi<=0.1.10.
  • Do not broadcast the (constant) elasticity tensor for linear-elastic materials as einsumt>=0.9.3 supports broadcasting along the parallel-executed dimension.
  • Change not-updating attribute of FieldContainer(fields).values to a method FieldContainer(fields).values() which returns the current field values.

Removed

  • Remove unused SolidBodyTensor() and SolidBodyTensorNearlyIncompressible().
  • Remove unused region argument of LinearElastic().hessian().

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v5.3.1...v6.0.0

felupe - v5.3.1

Published by adtzlr almost 2 years ago

Changelog since [5.3.0] - 2022-11-03

Fixed

  • Fix volume evaluation of (nearly) incompressible solids for axisymmetric fields.

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v5.3.0...v5.3.1

felupe - v5.3.0

Published by adtzlr almost 2 years ago

Changelog since [5.2.0] - 2022-10-08

Added

  • Add optional pre-compression to shear-loadcase dof.shear(compression=0.0).
  • Add MeshContainer and string-representation for Mesh objects.
  • Add a mesh-reader using meshio mesh.read(filename, ...).
  • Add SolidBodyNearlyIncompressible(umat, field, bulk) for (nearly) incompressible solids and a given (distortional-part only) constitutive material formulation. This is a pure displacement-based alternative to the three-field-formulation technique.

Changed

  • Support an optional user-defined meshio-object in Job().evaluate(mesh=None, filename="result.xdmf").
  • Support a distortional-part only Neo-Hookean material formulation with no bulk modulus defined NeoHooke(mu=1.0).

Fixed

  • Fix missing ArbitraryOrderLagrangeElement.points attribute.
  • Fix ignored mask only_surface=True for RegionBoundary().mesh.cells_faces.
  • Set default pressure to zero in SolidBodyPressure().
  • Take the mesh from the global x0-field if x0 is passed to job.evaluate(x0=...).
  • Fix missing update of global field x0 in job.evaluate(x0) after each completed substep.

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v5.2.0...v5.3.0

felupe - v5.2.0

Published by adtzlr about 2 years ago

Changelog since [5.1.0] - 2022-09-09

Added

  • Add xscale and yscale arguments to CharacteristicCurve.plot().
  • Add mesh.Grid(*xi) as generalized line, rectangle or cube with custom linspaces.
  • Add mesh.concatenate(meshes) to join a sequence of meshes with identical cell types.
  • Add x0 argument to Job.evaluate(x0=field).
  • Add mask argument to mesh.runouts(mask=slice(None)).
  • Add callback(stepnumber, substepnumber, substep) argument to CharacteristicCurve() (like in Job()).
  • Add an on-the-fly XDMF writer for a job (via meshio) Job.evaluate(filename="result.xdmf") with the possibility to add optional point_data and cell_data dicts.

Changed

  • Remove Warning if einsumt requirement is not found (switch to numpy without any warnings).
  • Requires Python 3.7+.

Fixed

  • Fix ignored axis argument of mesh.revolve(axis=1).

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v5.1.0...v5.2.0

felupe - v5.1.0

Published by adtzlr about 2 years ago

Changelog since [5.0.0] - 2022-08-21

Changed

  • Enhance Boundary: Select Points by value in addition to a callable (fx=lambda x: x == 0 is equivalent to fx=0), also add mode="and" and mode="or" argument.
  • Support line elements within the revolution function mesh.revolve().
  • Import previously hidden functions fun_items() and jac_items() as tools.fun() and tools.jac(), respectively (useful for numeric continuation).
  • Add step- and substep-numbers as arguments to the callback(stepnumber, substepnumber, substep)-function of a Job.

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v5.0.0...v5.1.0

felupe - v5.0.0

Published by adtzlr about 2 years ago

Changelog since [4.0.0] - 2022-08-07

Added

  • Add SolidBodyGravity for body forces acting on a solid body.
  • Support list of linked fields in Newton-Rhapson solver newtonrhapson(fields=[field_1, field_2]).
  • Automatic init of state variables in SolidBodyTensor.
  • Add mesh.runouts() for the creation of runouts of rubber-blocks of rubber-metal structures.
  • Add FieldPlaneStrain which is a 2d-field and returns gradients of shape (3, 3) (for plane strain problems with 3d user materials).
  • Add PointLoad for the creation of external force vectors.
  • Add Step with a generator for substeps, Job and CharacteristicCurve.

Changed

  • Move MultiPointConstraint to mechanics module and unify handling with SolidBody.
  • Rename bodies argument of Newton-Rhapson solver to items (now supports MPC).
  • Return partitioned system as dict from loadcases loadcase=dict(dof0=dof0, dof1=dof1, ext0=ext0).
  • Check function residuals norm in newtonrhapson() instead of incremental field-values norm.

Fixed

  • Fix assembled vectors and results of SolidBodyPressure for initially defined pressure values.
  • Fix verbose=0 option of newtonrhapson().
  • Fix wrong assembly of axisymmetric mixed-fields due to introduced plane strain field-trimming.

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v4.0.0...v5.0.0###

felupe - v4.0.0

Published by adtzlr about 2 years ago

Changelog since [3.1.0] - 2022-05-02

Added

  • Add SolidBody.evaluate.kirchhoff_stress() method. Contrary to the Cauchy stress method, this gives correct results in incompressible plane stress.
  • Add SolidBodyTensor for tensor-based material definitions with state variables.
  • Add bodies argument to newtonrhapson().
  • Add a container class for fields, FieldContainer (renamed from FieldMixed).
  • Add len(field) method for FieldContainer (length = number of fields).

Changed

  • Unify handling of Field and FieldMixed.
  • Constitutive models use lists as in- and output (consistency between single- and mixed-formulations).
  • Allow field updates directly from 1d sparse-solved vector without splitted by field-offsets.

Fixed

  • Fix tovoigt() helper for data with more or less than two trailing axes and 2D tensors.
  • Fix errors for force() and moment() helpers if the residuals are sparse.

Removed

  • Remove wrapper for matADi-materials (not necessary with field containers).
  • Remove IntegralFormMixed and IntegralFormAxisymmetric from global namespace.

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v3.1.0...v4.0.0

felupe - v3.1.0

Published by adtzlr over 2 years ago

Changelog since [3.0.0] - 2022-04-28

Added

  • Add optional parallel (threaded) basis evaluation and add Form(v, u, parallel=True).
  • Add mechanics submodule with SolidBody and SolidBodyPressure.

Fixed

  • Fix matADi materials for (mixed) axisymmetric analyses.
  • Fix missing radius in axisymmetric integral forms.

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v3.0.0...v3.1.0

felupe - v3.0.0

Published by adtzlr over 2 years ago

Changelog since [2.0.1] - 2022-01-11

Added

  • Add sym argument to Bilinearform.integrate() and Bilinearform.assemble().
  • Add FieldsMixed which creates a FieldMixed of length n based on a template region.
  • Add function to mirror a Mesh mesh.mirror().
  • Add a new parallel assembly that uses a threaded version of np.einsum instead (einsumt).
  • Add parallel versions of math helpers (dya, cdya, dot, ddot) using einsumt.
  • Add parallel keyword to constitutive models (NeoHooke, LinearElasticTensorNotation and ThreeFieldVariation).
  • Add RegionBoundary along with template regions for Quad and Hexahedron and GaussLegendreBoundary.
  • Add optional normal vector argument for function and gradient methods of AreaChange.
  • Add a new Mesh-tool triangulate(), applicable on Quad and Hexahedron meshes.
  • Add a new Mesh-method Mesh.as_meshio().
  • Add a function decorator @Form(...) for linear and bilinear form objects.

Changed

  • Enforce consistent arguments for functions inside mesh (points, cells, cell_data or Mesh).
  • Rename Numba-parallel assembly to jit.
  • Move single element shape functions and their derivatives from region.h to region.element.h and region.dhdr to region.element.dhdr.
  • Repeat element shape functions and their derivatives for each cell (as preparation for an upcoming RegionBoundary).
  • Improve mesh.convert() by using the function decorator @mesh_or_data.
  • Allow an array to be passed as the expansion arguments of mesh.expand() and mesh.revolve().
  • Allow optional keyword args to be passed to Mesh.save(**kwargs), acts as a wrapper for Mesh.as_meshio(**kwargs).write().

Fixed

  • Fix area normal vectors of RegionBoundary.
  • Fix integration and subsequent assembly of BilinearForm if field and mesh dimensions are not equal.

Auto-Generated Release-Notes

What's Changed

Full Changelog: https://github.com/adtzlr/felupe/compare/v2.0.1...v3.0.0

felupe - v2.0.1

Published by adtzlr almost 3 years ago

Changelog since [2.0.0] - 2022-01-10

Fixed

  • Fixed wrong result of assembly generated by a parallel loop with prange.
felupe - v2.0.0

Published by adtzlr almost 3 years ago

Changelog since [1.6.0] - 2021-12-02

Added

  • Add a new method to deepcopy a Mesh with Mesh.copy()
  • Add broadcasting capability for trailing axes inside the parallel form integrators.
  • Add Basis on top of a field for virtual fields used in linear and bilinear forms.
  • Add LinearForm and BilinearForm (including mixed variants) for vector/matrix assembly out of weak form expressions.
  • Add parallel keyword for threaded integration/assembly of LinearForm and BilinearForm.

Changed

  • Enhance Boundary for the application of prescribed values of any user-defined Field which is part of FieldMixed.
  • The whole mixed-field has to be passed to dof.apply() along with the offsets returned from dof.partition for mixed-field formulations.
  • Set default value shape=(1, 1) for hessian() methods of linear elastic materials.

Fixed

  • Fixed einstein summation of math.dot() for two vectors with trailing axes.

Removed

  • Remove dof.extend because dof.partition does not need it anymore.
felupe - v1.6.0

Published by adtzlr almost 3 years ago

Changelog since [1.5.0] - 2021-11-29

Added

  • Add LinearElasticPlaneStress and LinearElasticPlaneStrain material formulations.
  • Add region argument for LinearElastic.hessian().

Changed

  • Re-formulate LinearElastic materials in terms of the deformation gradient.
  • Re-formulate LinearElastic material in matrix notation (Speed-up of ~10 for elasticity matrix compared to previous implementation.)
  • Move previous LinearElastic to constitution.LinearElasticTensorNotation.
felupe - v1.5.0

Published by adtzlr almost 3 years ago

Changelog since [1.4.0] - 2021-11-15

Added

  • Add kwargs of field.extract() to fun and jac of newtonrhapson.

Changed

  • Set default number of threads in MatadiMaterial to multiprocessing.cpu_count().
  • Moved documentation to Read the Docs (Sphinx).

Fixed

  • Fix dim in calculation of reaction forces (tools.force) for FieldMixed.
  • Fix calculation of reaction moments (tools.moment) for FieldMixed.
felupe - v1.4.0

Published by adtzlr almost 3 years ago

Changelog since [1.3.0]

[1.4.0] - 2021-11-15

Added

  • Add mask argument to Boundary for the selection of user-defined points.
  • Add shear loadcase.
  • Add a wrapper for matadi materials as MatadiMaterial.
  • Add verbose and timing arguments to newtonrhapson.

Fixed

  • Obtain internal dim from Field in calculation of reaction force tools.force.
  • Fix math.dot for combinations of rank 1 (vectors), rank 2 (matrices) and rank 4 tensors.