# DOF (Degree-of-Freedom) Arrays¶

class meshmode.dof_array.DOFArray(actx: Optional[arraycontext.context.ArrayContext], data: Tuple[Any])[source]

This array type holds degree-of-freedom arrays for use with Discretization, with one entry in the DOFArray for each ElementGroupBase. The arrays contained within a DOFArray are expected to be logically two-dimensional, with shape (nelements, ndofs_per_element), where nelements is the same as nelements of the associated group. ndofs_per_element is typically, but not necessarily, the same as nunit_dofs of the associated group. The entries in this array are further arrays managed by array_context.

One main purpose of this class is to describe the data structure, i.e. when a DOFArray occurs inside of further numpy object array, the level representing the array of element groups can be recognized (by people and programs).

array_context
entry_dtype

The (assumed uniform) numpy.dtype of the group arrays contained in this instance.

__len__()[source]

The following methods and attributes are implemented to mimic the functionality of ndarrays. They require the DOFArray to be thaw()ed.

shape
size
copy()[source]
fill(value)[source]
conj()[source]
real
imag

Implements the usual set of arithmetic operations, including broadcasting of numbers and over numpy object arrays.

Note

DOFArray instances can be pickled and unpickled while the context manager array_context_for_pickling is active. If, for an array to be pickled, the ArrayContext given to array_context_for_pickling() does not agree with array_context, the array is frozen and rethawed. If array_context is None, the DOFArray is thaw()ed into the array context given to array_context_for_pickling().

meshmode.dof_array.rec_map_dof_array_container(f: Callable[[Any], Any], ary)[source]

Applies f recursively to an ArrayContainer.

Similar to map_array_container(), but does not further recurse on DOFArrays.

meshmode.dof_array.mapped_over_dof_arrays(f)[source]
meshmode.dof_array.rec_multimap_dof_array_container(f: Callable[[Any], Any], *args)[source]

Applies f recursively to multiple ArrayContainers.

Similar to multimap_array_container(), but does not further recurse on DOFArrays.

meshmode.dof_array.multimapped_over_dof_arrays(f)[source]
meshmode.dof_array.flat_norm(ary, ord=None) Any[source]

Return an element-wise $$\ell^{\text{ord}}$$ norm of ary.

Unlike arraycontext.ArrayContext.np, this function handles DOFArrays by taking a norm of their flattened values (in the sense of arraycontext.flatten()) regardless of how the group arrays are stored.

Parameters

ary – may be a DOFArray or an ArrayContainer containing them.

meshmode.dof_array.array_context_for_pickling(actx: arraycontext.context.ArrayContext)[source]

A context manager that, for the current thread, sets the array context to be used for pickling and unpickling DOFArrays to actx.

New in version 2021.1.

exception meshmode.dof_array.InconsistentDOFArray[source]
meshmode.dof_array.check_dofarray_against_discr(discr, dof_ary: meshmode.dof_array.DOFArray)[source]

Verify that the DOFArray dof_ary is consistent with the discretization discr, in terms of things like group count, number of elements, and number of DOFs per element. If a discrepancy is detected, InconsistentDOFArray is raised.

Parameters

discr – a Discretization against which dof_ary is to be checked.

# Array Contexts¶

class meshmode.array_context.PyOpenCLArrayContext(queue: pyopencl.CommandQueue, allocator: Optional[pyopencl.tools.AllocatorInterface] = None, wait_event_queue_length: Optional[int] = None, force_device_scalars: bool = False)[source]

Extends arraycontext.PyOpenCLArrayContext with knowledge about program transformation for finite element programs.

See meshmode.transform_metadata for relevant metadata.

class meshmode.array_context.PytatoPyOpenCLArrayContext(queue, allocator=None)[source]