File: ChangeLog.md

package info (click to toggle)
fenics-ufl 2025.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,176 kB
  • sloc: python: 25,267; makefile: 170
file content (388 lines) | stat: -rw-r--r-- 15,942 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
# Changelog

## 2021.1.0

- Mixed dimensional domain support

## 2019.1.0 (2019-04-17)

- Remove scripts
- Remove LaTeX support (not functional)
- Add support for complex valued elements; complex mode
  is chosen by `compute_form_data(form, complex_mode=True)` typically
  by a form compiler; otherwise UFL language is agnostic to the choice
  of real/complex domain

## 2018.1.0 (2018-06-14)

- Remove python2 support

## 2017.2.0 (2017-12-05)

- Add geometric quantity `CellDiameter` defined as a set diameter
  of the cell, i.e., maximal distance between any two points of the
  cell; implemented on simplices and quads/hexes
- Rename internally used reference quantities
  `(Cell|Facet)EdgeVectors` to `Reference(Cell|Facet)EdgeVectors`
- Add internally used quantites `CellVertices`,
  `(Cell|Facet)EdgeVectors` which are physical-coordinates-valued;
  will be useful for further geometry lowering implementations
  for quads/hexes
- Implement geometry lowering of `(Min|Max)(Cell|Facet)EdgeLength`
  for quads and hexes

## 2017.1.0.post1 (2017-09-12)

- Change PyPI package name to fenics-ufl.

## 2017.1.0 (2017-05-09)

- Add the `DirectionalSobolevSpace` subclass of `SobolevSpace`. This
  allows one to use spaces where elements have varying continuity in
  different spatial directions.
- Add `sobolev_space` methods for `HDiv` and `HCurl` finite
  elements.
- Add `sobolev_space` methods for `TensorProductElement` and
  `EnrichedElement`.  The smallest shared Sobolev space will be
  returned for enriched elements. For the tensor product elements, a
  `DirectionalSobolevSpace` is returned depending on the order of the
  spaces associated with the component elements.

## 2016.2.0 (2016-11-30)

- Add call operator syntax to `Form` to replace arguments and
  coefficients. This makes it easier to e.g. express the norm
  defined by a bilinear form as a functional. Example usage:
    ```python
    # Equivalent to replace(a, {u: f, v: f})
    M = a(f, f)
    # Equivalent to replace(a, {f:1})
    c = a(coefficients={f:1})
    ```
- Add call operator syntax to `Form` to replace arguments and
  coefficients:
    ```python
    a(f, g) == replace(a, {u: f, v: g})
    a(coefficients={f:1}) == replace(a, {f:1})
    ```
- Add `@` operator to `Form`: `form @ f == action(form, f)`
  (python 3.5+ only)
- Reduce noise in Mesh str such that `print(form)` gets more short and
  readable
- Fix repeated `split(function)` for arbitrary nested elements
- EnrichedElement: Remove `+/*` warning

  In the distant past, `A + B => MixedElement([A, B])`.  The change
  that `A + B => EnrichedElement([A, B])` was made in `d622c74` (22
  March 2010).  A warning was introduced in `fcbc5ff` (26 March 2010)
  that the meaning of `+` had changed, and that users wanting a
  `MixedElement` should use `*` instead.  People have, presumably,
  been seeing this warning for 6 1/2 years by now, so it's probably safe
  to remove.
- Rework `TensorProductElement` implementation, replaces
  `OuterProductElement`
- Rework `TensorProductCell` implementation, replaces
  `OuterProductCell`
- Remove `OuterProductVectorElement` and `OuterProductTensorElement`
- Add `FacetElement` and `InteriorElement`
- Add `Hellan-Herrmann-Johnson` element
- Add support for double covariant and contravariant mappings in mixed
  elements
- Support discontinuous Taylor elements on all simplices
- Some more performance improvements
- Minor bugfixes
- Improve Python 3 support
- More permissive in integer types accepted some places
- Make ufl pass almost all flake8 tests
- Add bitbucket pipelines testing
- Improve documentation

## 2016.1.0 (2016-06-23)

- Add operator A^(i,j) := as_tensor(A, (i,j))
- Updates to old manual for publishing on fenics-ufl.readthedocs.org
- Bugfix for ufl files with utf-8 encoding
- Bugfix in conditional derivatives to avoid inf/nan values in generated
  code. This bugfix may break ffc if uflacs is not used, to get around
  that the old workaround in ufl can be enabled by setting
  ufl.algorithms.apply_derivatives.CONDITIONAL_WORKAROUND = True
  at the top of your program.
- Allow sum([expressions]) where expressions are nonscalar by defining expr+0==expr
- Allow form=0; form -= other;
- Deprecate .cell(), .domain(), .element() in favour of .ufl_cell(),
	.ufl_domain(), .ufl_element(), in multiple classes, to allow
	closer integration with dolfin.
- Remove deprecated properties cell.{d,x,n,volume,circumradius,facet_area}.
- Remove ancient form2ufl script
- Add new class Mesh to replace Domain
- Add new class FunctionSpace(mesh, element)
- Make FiniteElement classes take Cell, not Domain.
- Large reworking of symbolic geometry pipeline
- Implement symbolic Piola mappings

## 1.6.0 (2015-07-28)

- Change approach to attaching __hash__ implementation to accomodate python 3
- Implement new non-recursive traversal based hash computation
- Allow derivative(M, ListTensor(<scalars>), ...) just like list/tuple works
- Add traits is_in_reference_frame, is_restriction, is_evaluation, is_differential
- Add missing linear operators to ArgumentDependencyExtractor
- Add _ufl_is_literal_ type trait
- Add _ufl_is_terminal_modifier_ type trait and Expr._ufl_terminal_modifiers_ list
- Add new types ReferenceDiv and ReferenceCurl
- Outer product element support in degree estimation
- Add TraceElement, InteriorElement, FacetElement, BrokenElement
- Add OuterProductCell to valid Real elements
- Add _cache member to form for use by external frameworks
- Add Sobolev space HEin
- Add measures dI,dO,dC for interface, overlap, cutcell
- Remove Measure constants
- Remove cell2D and cell3D
- Implement reference_value in apply_restrictions
- Rename point integral to vertex integral and kept `*dP` syntax
- Replace lambda functions in ufl_type with named functions for nicer
  stack traces
- Minor bugfixes, removal of unused code and cleanups

## 1.5.0 (2015-01-12)

- Require Python 2.7
- Python 3 support
- Change to py.test
- Rewrite parts of expression representation core, providing
  significant optimizations in speed and memory use, as well
  as a more elaborate type metadata system for internal use
- Use expr.ufl_shape instead of ufl.shape()
- Use expr.ufl_indices instead of ufl.indices(),
  returns tuple of free index ids, not Index objects
- Use expr.ufl_index_dimensions instead of ufl.index_dimensions(),
  returns tuple of dimensions ordered corresponding to expr.ufl_indices, not a dict
- Rewrite core algorithms for expression traversal
- Add new core algorithms map_expr_dag(), map_integrand_dag(),
  similar to python map() but applying a callable MultiFunction
  recursively to each Expr node, without Python recursion
- Highly recommend rewriting algorithms based on Transformer using
  map_expr_dag and MultiFunction, avoiding Python recursion overhead
- Rewrite core algorithms apply_derivatives, apply_restrictions
- Form signature is now computed without applying derivatives first,
  introducing smaller overhead on jit cache hits
- Use form.signature() to compute form signature
- Use form.arguments() instead of extract_arguments(form)
- Use form.coefficients() instead of extract_coefficients(form)
- Small improvement to str and latex output of expressions
- Allow diff(expr, coefficient) without wrapping coefficient in variable
- Add keywords to measures: dx(..., degree=3, rule="canonical")
- Introduce notation from the Periodic Table of the Finite Elements
- Introduce notation for FEEC families of elements: P-, P, Q-, S
- Experimental support for high-order geometric domains
- Algorithms for symbolic rewriting of geometric quantities (used by uflacs)
- Remove the *Constant* classes, using Coefficient with a Real element instead
- Add types for MinValue and MaxValue
- Disable automatic rewriting a+a->2*a, a*a->a**2, a/a->1, these are
  costly and the compiler should handle them instead
- Fix signature stability w.r.t. metadata dicts
- Minor bugfixes, removal of unused code and cleanups

## 1.4.0 (2014-06-02)

- New integral type custom_integral (`*dc`)
- Add analysis of which coefficients each integral actually uses to optimize assembly
- Improved svg rendering of cells and sobolevspaces in ipython notebook
- Add sobolev spaces, use notation "element in HCurl" (HCurl, HDiv, H1, H2, L2)
- Improved error checking of facet geometry in non-facet integrals
- Improved restriction handling, restricting continuous coefficients and constants is now optional
- Introduce notation from the Periodic Table of the Finite Elements (draft)
- Remove alias "Q" for quadrature element, use "Quadrature"
- New derivative type ReferenceGrad
- New discontinuous RT element
- New geometry types Jacobian, JacobianInverse, JacobianDeterminant
- New geometry types FacetJacobian, FacetJacobianInverse, FacetJacobianDeterminant
- New geometry types CellFacetJacobian, CellFacetJacobianInverse, CellFacetJacobianDeterminant
- New geometry types FacetOrigin, CellOrigin
- New geometry types CellCoordinate, FacetCoordinate
- New geometry types CellNormal, CellOrientation, QuadratureWeight
- Argument (and TestFunction, TrialFunction) now use absolute numbering f.number() instead of relative f.count()
- New syntax: integrand*dx(domain)
- New syntax: integrand*dx(1, domain=domain)
- New syntax: integrand*dx(1, subdomain_data=domain_data)
- Using domain instead of cell in many places.
- Deprecated notation 'cell.n', 'cell.x' etc.
- Recommended new notation: FacetNormal(domain)
- Experimental: Argument (and TestFunction, TrialFunction) now can have a specified part index for representing block systems
- Experimental: Domains can now be created with a Coefficient providing coordinates: Domain(Coefficient(VectorElement("CG", domain, 2)))
- Experimental: New concept Domain: domain = Domain(triangle, geometric_dimension=3, label="MyDomain")
- Various general optimizations
- Various minor bugfixes
- Various docstring improvements

## 1.3.0 (2014-01-07)

- Add cell_avg and facet_avg operators, can be applied to a Coefficient or Argument or restrictions thereof
- Fix bug in cofactor: now it is transposed the correct way.
- Add cell.min_facet_edge_length
- Add cell.max_facet_edge_length
- Simplify 0^f -> 0 if f is a non-negative scalar value
- Add atan2 function
- Allow form+0 -> form

## 1.2.0 (2013-03-24)

- NB! Using shapes such as (1,) and (1,1) instead of () for 1D tensor quantities I, x, grad(f)
- Add cell.facet_diameter
- Add new concept Domain
- Add new concept Region, which is the union of numbered subdomains
- Add integration over regions (which may be overlapping by sharing subdomains)
- Add integration over everywhere
- Add functions cosh, sinh, tanh, Max, Min
- Generalize jump(v,n) for rank(v) > 2
- Fix some minor bugs

## 1.1.0 (2013-01-07)

- Add support for pickling of expressions (thanks to Graham Markall)
- Add shorthand notation A**2 == inner(A, A), special cased for power 2.
- Add support for measure sum notation f*(dx(0) + dx(3)) == f*dx(0) + f*dx(3)
- Supporting code for bugfix in PyDOLFIN when comparing test/trial functions
- Remove support for tuple form notation as this was ambiguous
- Bugfix in quadrature degree estimation, never returning <0 now
- Remove use of cmp to accomodate removal from python 3

## 1.1-alpha-prerelease (2012-11-18)

(Not released, snapshot archived with submission of UFL journal paper)
- Support adding 0 to forms, allowing sum([a])
- Major memory savings and optimizations.
- Some bugfixes.
- Add perp operator.
- Support nested tuple syntax like MixedElement((U,V),W)
- Allow outer(a, b, c, ...) by recursive application from left.
- Add simplification f/f -> 1
- Add operators <,>,<=,>= in place of lt,gt,le,ge

## 1.0.0 (2011-12-07)

- No changes since rc1.

## 1.0-rc1 (2011-11-22)

- Added tests covering snippets from UFL chapter in FEniCS book
- Added more unit tests
- Added operators diag and diag_vector
- Added geometric quantities cell.surface_area and cell.facet_area
- Fixed rtruediv bug
- Fixed bug with derivatives of elements of type Real with unspecified cell

## 1.0-beta3 (2011-10-26)

- Added nabla_grad and nabla_div operators
- Added error function erf(x)
- Added bessel functions of first and second kind, normal and modified,
  bessel_J(nu, x), bessel_Y(nu, x), bessel_I(nu, x), bessel_K(nu, x)
- Extended derivative() to allow indexed coefficient(s) as differentiation variable
- Made `*Constant` use the `Real` space instead of `DG0`
- Bugfix in adjoint where test and trial functions were in different spaces
- Bugfix in replace where the argument to a grad was replaced with 0
- Bugfix in reconstruction of tensor elements
- Some other minor bugfixes

## 1.0-beta2 (2011-08-11)

- Support c*form where c depends on a coefficient in a Real space

## 1.0-beta (2011-07-08)

- Add script ufl-version
- Added syntax for associating an arbitrary domain data object with a measure:
	dss = ds[boundaries]; M = f*dss(1) + g*dss(2)
- Added new operators elem_mult, elem_div, elem_pow and elem_op for
  elementwise application of scalar operators to tensors of equal shape
- Added condition operators And(lhs,rhs) and Or(lhs,rhs) and Not(cond)
- Fixed support for symmetries in subelements of a mixed element
- Add support for specifying derivatives of coefficients to derivative()

## 0.9.1 (2011-05-16)

- Remove set_foo functions in finite element classes
- Change license from GPL v3 or later to LGPL v3 or later
- Change behavior of preprocess(), form.compute_form_data(), form_data.preprocessed_form
- Allowing grad, div, inner, dot, det, inverse on scalars
- Simplify Identity(1) -> IntValue(1) automatically
- Added Levi-Cevita symbol: e = PermutationSymbol(3); e[i,j,k]
- Fix bug with future division behaviour (ufl does not support floor division)
- Add subdomain member variables to form class
- Allow action on forms of arbitrary rank

## 0.9.0 (2011-02-23)

- Allow jump(Sigma, n) for matrix-valued expression Sigma
- Bug fix in scalar curl operator
- Bug fix in deviatoric operator

## 0.5.4 (2010-09-01)

- Bug fixes in PartExtracter
- Do not import x for coordinate
- Add Circumradius to Cell (Cell.circumradius)
- Add CellVolume to Cell (Cell.volume)

## 0.5.3 (2010-07-01)

- Rename ElementRestriction --> RestrictedElement
- Experimental import of x from tetrahedron
- Make lhs/rhs work for resrictions
- Redefine operator + for FiniteElements and replace + by *
- Rename ElementUnion -> EnrichedElement
- Add support for tan() and inverse trigonometric functions

## 0.5.2 (2010-02-15)

- Attach form data to preprocessed form, accessible by form.form_data()

## 0.5.1 (2010-02-03)

- Fix bug in propagate_restriction

## 0.5.0 (2010-02-01)

- Several interface changes in FormData class
- Introduce call preprocess(form) to be called at beginning of compilation
- Rename BasisFunction --> Argument
- Rename Function --> Coefficient

## 0.4.1 (2009-12-04)

- Redefine grad().T --> grad()
- New meaning of estimate_max_polynomial_degree
- New function estimate_total_polynomial_degree
- Allow degree = None and cell = None for elements

## 0.4.0 (2009-09-23)

- Extensions for ElementRestriction (restrict FiniteElement to Cell)
- Bug fix for lhs/rhs with list tensor types
- Add new log function set_prefix
- Add new log function log(level, message)
- Added macro cell integral `*dE`
- Added mechanism to add additional integral types
- Added LiftingOperator and LiftingFunction
- Added ElementRestriction

## 0.3.0 (2009-05-28)

- Some critical bugfixes, in particular in differentiation.
- Added form operators "system" and "sensitivity_rhs".
- diff can take form as argument, applies to all integrands.
- Rudimentary precedence handling for better
  use of parentheses in str(expression).
- Added script ufl2py, mainly for debugging purposes.
- Crude implementation of estimate_max_polynomial_degree
  for quadrature degree estimation.
- Improved manual.

## 0.2.0 (2009-04-07)

- Initial release of UFL.

## 0.1.0 (unreleased)

- Unreleased development versions of UFL.