@@ -10,45 +10,79 @@ for each release of libCEED.
10
10
v0.6 (Mar 29, 2020)
11
11
----------------------------------------
12
12
13
- libCEED v0.6 was made again publicly available in the third full CEED software
14
- distribution, release CEED 3.0. This release contained notable features, and
15
- substantial additions in the examples suite. Some API changes were introduced,
16
- including the change from ``CeedElemRestrictionCreateIdentity() `` to
17
- ``CeedElemRestrictionCreateStrided() ``
18
- and the addition of ``ElemRestriction `` layout mode. The latter change
19
- requires changing use of ``CEED_TRANSPOSE `` and ``CEED_NOTRANSPOSE `` to
20
- ``CEED_LAYOUT_NODE_COMPONENT `` and ``CEED_LAYOUT_COMPONENT_NODE ``,
21
- respectively, for ``CeedElemRestriction lmode `` in ``CeedElemRestrictionCreate* ``.
22
- The user still has the choice of interlacing fields by node, or viceversa,
23
- interlacing nodes by fields, but this choice now is not declared when the
24
- different ``CeedOperator `` fields are set with the ``CeedOperatorSetField() ``,
25
- rather when the restriction is created with ``CeedElemRestrictionCreate() ``.
26
-
27
- For this release, the libCEED team has deployed libCEED's very first
28
- `user manual <https://libceed.readthedocs.io/en/latest/ >`_!
29
- And a C/Python interface, developed using the C Foreign Function Interface
30
- (`CFFI <https://cffi.readthedocs.io/en/latest/ >`_)
31
- for Python. CFFI allows to reuse most of the C declarations and requires only a
32
- minimal adaptation of some of them. The C and Python APIs are mapped in a nearly
33
- 1:1 correspondence. For instance, data stored in the CeedVector structure are
34
- associated to arrays defined via the numpy package. In fact, since libCEED heavily
35
- relies on pointers and arrays to handle the data, a Python structure that resembles
36
- the C arrays is needed. In details, numpy arrays allow this correspondence obtained
37
- by passing the numpy array memory address as pointers to the libCEED C API.
38
-
39
- Moreover, in this release, libCEED's suite of PETSc application examples has
40
- significantly expanded, including: An expanded Navier-Stokes miniapp, which now
41
- features an implicit time-integration formulation, SU/SUPG stabilization methods,
42
- free slip boundary conditions and quasi-2D computational domain for faster
43
- execution; A Continuum Mechanics example, which features different constitutive
44
- models, such as linear elasticity and hyperelasticity both at small and finite
45
- strain; Calculation of surface areas including the case of the surface of a
46
- cube and a cubed-sphere; And finally, the expansion of the set of PETSc Bakeoff
47
- Problems (BPs) on the cubed-sphere. In what follows, we provide a detailed
48
- description of the added examples.
49
-
50
- Backends available in this release, are the same ones available in :ref: `v0.5 `.
51
-
13
+ libCEED v0.6 contains numerous new features and examples, as well as expanded
14
+ documentation in `this new website <https://libceed.readthedocs.io >`_.
15
+
16
+ New features
17
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18
+ * New Python interface using `CFFI <https://cffi.readthedocs.io/ >`_ provides a nearly
19
+ 1-1 correspondence with the C interface, plus some convenience features. For instance,
20
+ data stored in the :cpp:type: `CeedVector ` structure are available without copy as
21
+ :py:class: `numpy.ndarray `. Short tutorials are provided in
22
+ `Binder <https://mybinder.org/v2/gh/CEED/libCEED/master?urlpath=lab/tree/examples/tutorials/ >`_.
23
+ * Linear QFunctions can be assembled as block-diagonal matrices (per quadrature point,
24
+ :cpp:func: `CeedOperatorAssembleLinearQFunction `) or to evaluate the diagonal
25
+ (:cpp:func: `CeedOperatorAssembleLinearDiagonal `). These operations are useful for
26
+ preconditioning ingredients and are used in the libCEED's multigrid examples.
27
+ * The inverse of separable operators can be obtained using
28
+ :cpp:func: `CeedOperatorCreateFDMElementInverse ` and applied with
29
+ :cpp:func: `CeedOperatorApply `. This is a useful preconditioning ingredient,
30
+ especially for Laplacians and related operators.
31
+ * New functions: :cpp:func: `CeedVectorNorm `, :cpp:func: `CeedOperatorApplyAdd `,
32
+ :cpp:func: `CeedQFunctionView `, :cpp:func: `CeedOperatorView `.
33
+ * Make public accessors for various attributes to facilitate writing composable code.
34
+ * New backend: ``/cpu/self/memcheck/serial ``.
35
+ * QFunctions using variable-length array (VLA) pointer constructs can be used with CUDA
36
+ backends. (Single source is coming soon for OCCA backends.)
37
+ * Fix some missing edge cases in CUDA backend.
38
+
39
+ Performance Improvements
40
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
41
+ * MAGMA backend performance optimization and non-tensor bases.
42
+ * No-copy optimization in :cpp:func: `CeedOperatorApply `.
43
+
44
+ Interface changes
45
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
46
+ * Replace :code: `CeedElemRestrictionCreateIdentity ` and
47
+ :code: `CeedElemRestrictionCreateBlocked ` with more flexible
48
+ :cpp:func: `CeedElemRestrictionCreateStrided ` and
49
+ :cpp:func: `CeedElemRestrictionCreateBlockedStrided `.
50
+ * Add arguments to :cpp:func: `CeedQFunctionCreateIdentity `.
51
+ * Replace ambiguous uses of :cpp:enum: `CeedTransposeMode ` for L-vector identification
52
+ with :cpp:enum: `CeedInterlaceMode `. This is now an attribute of the
53
+ :cpp:type: `CeedElemRestriction ` (see :cpp:func: `CeedElemRestrictionCreate `) and no
54
+ longer passed as ``lmode `` arguments to :cpp:func: `CeedOperatorSetField ` and
55
+ :cpp:func: `CeedElemRestrictionApply `.
56
+
57
+ Examples
58
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
59
+
60
+ libCEED-0.6 contains greatly expanded examples with :ref: `new documentation <Examples >`.
61
+ Notable additions include:
62
+
63
+ * Standalone :ref: `ex2-surface ` (:file: `examples/ceed/ex2-surface `): compute the area of
64
+ a domain in 1, 2, and 3 dimensions by applying a Laplacian.
65
+ * PETSc :ref: `example-petsc-area ` (:file: `examples/petsc/area.c `): computes surface area
66
+ of domains (like the cube and sphere) by direct integration on a surface mesh;
67
+ demonstrates geometric dimension different from topological dimension.
68
+ * PETSc :ref: `example-petsc-bps `:
69
+
70
+ * :file: `examples/petsc/bpsraw.c ` (formerly ``bps.c ``): transparent CUDA support.
71
+ * :file: `examples/petsc/bps.c ` (formerly ``bpsdmplex.c ``): performance improvements
72
+ and transparent CUDA support.
73
+ * :ref: `example-petsc-bps-sphere ` (:file: `examples/petsc/bpssphere.c `):
74
+ generalizations of all CEED BPs to the surface of the sphere; demonstrates geometric
75
+ dimension different from topological dimension.
76
+
77
+ * :ref: `example-petsc-multigrid ` (:file: `examples/petsc/multigrid.c `): new p-multigrid
78
+ solver with algebraic multigrid coarse solve.
79
+ * :ref: `example-petsc-navier-stokes ` (:file: `examples/fluids/navierstokes.c `; formerly
80
+ ``examples/navier-stokes ``): unstructured grid support (using PETSc's ``DMPlex ``),
81
+ implicit time integration, SU/SUPG stabilization, free-slip boundary conditions, and
82
+ quasi-2D computational domain support.
83
+ * :ref: `example-petsc-elasticity ` (:file: `examples/solids/elasticity.c `): new solver for
84
+ linear elasticity, small-strain hyperelasticity, and globalized finite-strain
85
+ hyperelasticity using p-multigrid with algebraic multigrid coarse solve.
52
86
53
87
.. _v0.5 :
54
88
0 commit comments