46. isopar — Isoparametric transformations
Classes defined in module isopar
-
class isopar.Isopar(eltype, coords, oldcoords)
A class representing an isoparametric transformation
eltype is one of the keys in Isopar.isodata
coords and oldcoords can be either arrays, Coords or Formex instances,
but should be of equal shape, and match the number of atoms in the
specified transformation type
The following three formulations are equivalent
trf = Isopar(eltype,coords,oldcoords)
G = F.isopar(trf)
trf = Isopar(eltype,coords,oldcoords)
G = trf.transform(F)
G = isopar(F,eltype,coords,oldcoords)
-
transform(X)
Apply isoparametric transform to a set of coordinates.
Returns a Coords array with same shape as X
Functions defined in module isopar
-
isopar.evaluate(atoms, x, y=0, z=0)
Build a matrix of functions of coords.
- atoms: a list of text strings representing a mathematical function of
x, and possibly of y and z.
- x, y, z: a list of x- (and optionally y-, z-) values at which the
atoms will be evaluated. The lists should have the same length.
Returns a matrix with nvalues rows and natoms colums.
-
isopar.exponents(n, layout='lag')
Create tuples of polynomial exponents.
This function creates the exponents of polynomials in 1 to 3 dimensions
which can be used to construct interpolation function over lagrangian,
triangular or serendipity grids.
Parameters:
- n: a tuple of 1 to 3 integers, specifying the degree of the polynomials
in the x up to z directions. For a lagrangian layout, this is one less
than the number of points in each direction.
- layout: string, specifying the layout of grid and the selection of
monomials to be used. Should be one of ‘lagrangian’, ‘triangular’,
‘serendipity’ or ‘border’. The string can be abbreviated to its
first 3 characters.
Returns an integer array of shape (ndim,npoints), where ndim = len(n)
and npoints depends on the layout:
- lagrangian: npoints = prod(n). The point layout is a rectangular
lagrangian grid form by n[i] points in direction i. As an example,
specifying n=(3,2) uses a grid of 3 points in x-direction and 2 points
in y-direction.
- triangular: requires that all values in n are equal. For ndim=2, the
number of points is n*(n+1)/2.
- border: this is like the lagrangian grid with all internal points
removed. For ndim=2, we have npoints = 2 * sum(n) - 4. For ndim=3 we
have npoints = 2 * sum(nx*ny+ny*nz+nz*nx) - 4 * sum(n) + 8.
Thus n=(3,3,3) will yield 2*3*3*3 - 4*(3+3+3) + 8 = 26
- serendipity: tries to use only the corner and edge nodes, but uses
a convex domain of the monomials. This may require some nodes inside
the faces or the volume. Currently works up to (4,4) in 2D or (3,3,3)
in 3D.
-
isopar.interpoly(n, layout='lag')
Create an interpolation polynomial
parameters are like for exponents.
Returns a Polynomial that can be used for interpolation over
the element.