Releases: kinnala/scikit-fem
12.0.0
- Changed: Mesh.with_defaults now uses np.isclose for finding facets matching left, right, top, bottom, etc. instead of direct floating point comparison. Tolerance for np.isclose is calculated automatically from the smallest element size. This may result in backwards-incompatible behaviour, i.e., more edge cases are now covered by the matching and it is more likely that Mesh.boundaries gets filled by the call.
- Added: Basis.interpolator now supports interpolating vectorial and tensorial elements
- Added: Basic support for assembling PETSc matrices via form.elemental(basis).topetsc(), see ex52. Requires the optional dependency petsc4py.
- Added: Basic support for distributed assembly of PETSc matrices via decorator Dofs.decompose. Requires the optional dependencies petsc4py and pymetis. The decorator Dofs.decompose is applied on a function which returns 2-tuple with Mesh and Dofs objects. This will run METIS on the mesh and distribute the degrees-of-freedom according to the decomposition. It is then possible to use the standard objects in scikit-fem such as Basis and BilinearForm to assemble matrices for each of the subdomains in parallel, assuming the script is run using mpirun. These can be turned into distributed PETSc matrices via form.elemental(basis).topetsc(dofs). See ex53 and ex54 for examples.
- Added: ElementTriN3, a third order Nedelec element for triangular meshes.
- Added: Support for Python 3.14.
- Removed: Support for Python 3.9.
11.0.0
- Added: Support for Python 3.13.
- Added:
skfem.autodiffmodule for linearizing nonlinear variational forms
and solving them using the Newton method.
This is done
with the help of the new decoratorNonlinearForm.
There are currently two examples using this functionality: ex45 and ex51.
The use ofskfem.autodiffrequires the optional
dependency JAX. - Added: A corresponding set of helper functions
skfem.autodiff.helpers
for defining nonlinear variational forms. - Removed: Support for Python 3.8.
10.0.2
10.0.1
10.0.0
- Fixed:
Mesh.p2ereturned incorrect incidence - Fixed:
InteriorFacetBasis.get_dofsdid not return all edge DOFs for 3D elements - Added: The lowest order, one point integration rule for tetrahedral elements
- Added:
asmwill now wrap functions with three arguments usingBilinearForm,
functions with two arguments usingLinearForm, etc. - Changed: Initializing
BasisforElementTetP0without specifying
intorderorquadraturewill now automatically fall back to a one
point integration rule - Changed: Default tags (left, right, top, ...) are no more
added automatically during mesh initialization, as a workaround you
can add them explicitly by callingmesh = mesh.with_defaults() - Changed: All indices within the library are now using
np.int32for
around 10% boost in performance and the corresponding reduction in
memory usage for larger meshes - theoretically, the largest possible
tetrahedral tensor product mesh is now roughly 550 ** 3 = 166 M vertices
and 993 M elements, without the facet indexing wrapping over 2 ** 32
9.1.1
Fixed: Tests now pass with numpy==2.0rc1
Fixed: MappingAffine now uses lazy evaluation also for element mappings, in addition to boundary mappings
Fixed: MeshTet.init_tensor uses significantly less memory for large meshes
Fixed: Mesh.load uses less memory when loading and matching tags
Added: Basis has new optional disable_doflocs kwarg which can be set to True to avoid computing Basis.doflocs, to reduce memory usage
9.0.1
9.0.0
Removed: Python 3.7 support
Removed: MappingMortar and MortarFacetBasis in favor of skfem.supermeshing
Deprecated: skfem.visuals.glvis; current version is broken and no replacement is being planned
Added: Python 3.12 support
Added: Mesh.load supports new keyword arguments ignore_orientation=True and ignore_interior_facets=True which will both speed up the loading of larger three-dimensional meshes by ignoring facet orientation and all tags not on the boundary, respectively.
Added: skfem.supermeshing (requires shapely>=2) for creating quadrature rules for interpolating between two 1D or 2D meshes.
Added: Mesh.remove_unused_nodes
Added: Mesh.remove_duplicate_nodes
Added: Mesh.remove_elements now supports passing any subdomain reference through Mesh.normalize_elements; subdomains and boundaries are also properly preserved
Fixed: MeshTet uniform refine was reindexing subdomains incorrectly
Fixed: MeshDG.draw did not work; now calls Basis.draw which works for any mesh topology
Fixed: FacetBasis now works with MeshTri2, MeshQuad2, MeshTet2 and MeshHex2
Fixed: ElementGlobal now uses outward normals to initialize DOFs on boundary facets
8.1.0
Added: ElementTriHHJ0 and ElementTriHHJ1 matrix finite elements for implementing the Hellan-Hermann-Johnson mixed method (see ex48.py)
Added: ElementHexSkeleton0, piecewise constant element on the skeleton of a hexahedral mesh
Added: ElementHexC1, C1-continuous hexahedral element
Added: Mesh.restrict now preserves subdomains and boundaries
Added: skfem.utils.mpc for setting multipoint constraints
Added: Basis.get_dofs now supports fetching DOFs at specific nodes through kwarg nodes
Added: DofsView.sort for sorting a set of DOFs returned by Basis.get_dofs
Added: CellBasis.with_elements as a shortcut for initiating a new Basis with subset of elements
Added: Mesh.refined now preserves subdomains in adaptive mesh refinement
Fixed: Mesh.refined used to modify the element connectivity of the original mesh