Volume
- class pyspline.pyVolume.Volume(recompute=True, **kwargs)[source]
Create an instance of a b-spline surface. There are two ways to initialize the class
Creation: Create an instance of the Volume class directly by supplying the required information: kwargs MUST contain the following information:
ku, kv, kw, tu, tv, tw, coef
.LMS/Interpolation: Create an instance of the Volume class by using an interpolating spline to given data points or a LMS spline. The following keyword argument information is required:
ku
andkv
andkw
Spline OrdersX
real array size (Nu, Nv, Nw, nDim) of data to fit. ORx
(3D) andy
(3D)z
(3D) 3D volume interpolation/fitting
u
,v
,w
real array of size (Nu, Nv, Nw). OptionalnCtlu
,nCtlv
,nCtlw
. Specify number of control points. Only for LMS fitting.
- Parameters:
- kuint
Spline order in u
- kvint
Spline order in v
- kwint
Spline order in w
- nCtluint
Number of control points in u
- nCtlvint
Number of control points in v
- nCtlwint
Number of control points in w
- coefarray, size (nCtlu, nCtl, nDim)
b-spline coefficient array.
- tuarray, size(nCtlu + ku)
knot array in u
- tvarray, size(nCtlv + kv)
knot array in v
- twarray, size(nCtlw + kw)
knot array in w
- Xarray, size (Nu, Nv, Nw, ndim)
Full data array to fit
- xarray, size (Nu, Nv)
Just x data to fit/interpolate
- yarray, size (Nu, Nv, Nw)
Just y data to fit/interpolate
- zarray, size (Nu, Nv, Nw)
Just z data to fit/interpolate
- uarray, size (Nu, Nv, Nw)
Explicit u parameters to use. Optional.
- varray, size (Nu, Nv, Nw)
Explicit v parameters to use. Optional.
- warray, size (Nu, Nv, Nw)
Explicit w parameters to use. Optional.
- nIterint
Number of Hoscheks parameter corrections to run
- recomputebool
Specifies whether the actual fitting is completed.
Notes
The orientation of the nodes, edges and faces for the volumes is given below:
NODES | EDGES | FACES 6 7| 5 | #-----------#| #------------# | #-----------# / / | /| /| | /| /| / / | / | / | | / | / | / / | 6/ | 7/ | | / | 1 / | / / | / |10 / |11| / | ---------- 5 / / | / | 4 / | | / | / |(back) #-----------# | #------------# | | #-----------# | 4 5 | | | | | | | | | | | | | | | | | | | | <-3 2 3| | | 1 | | |2-> | | | | #-----------#| | #------|-----# | | #-----|-----# / / | |8 / |9 / |4 ---------- | / / / | | / | / | | / | / / / | | /2 | /3 | | / 0 | / / / | | / | / | | / | / / / | |/ |/ | |/ |/ #-----------# | #------------# | #-----------# 0 1 | 0 |
- calcParameterization()[source]
Compute distance based parametrization. Use the fortran function for this
- computeData(recompute=False)[source]
Compute discrete data that is used for the Tecplot Visualization as well as the data for doing the brute-force checks
- Parameters:
- recomputebool
If True, recompute the data even if it has already been computed.
- getBasisPt(u, v, w, vals, istart, colInd, lIndex)[source]
This function should only be called from pyBlock The purpose is to compute the basis function for a u, v, w point and add it to pyBlocks’s global dPt/dCoef matrix. vals, rowPtr, colInd is the CSR data and lIndex in the local -> global mapping for this volume
- getBounds()[source]
Determine the extents of the volume
- Returns:
- xMinarray of length 3
Lower corner of the bounding box
- xMaxarray of length 3
Upper corner of the bounding box
- getMidPointEdge(edge)[source]
Get the midpoint of the edge using the original data.
- Parameters:
- edgeint
Edge index. Must be 0<edge<11.
- Returns:
- midpointarray of length nDim
Mid point of edge
- getMidPointFace(face)[source]
Get the midpoint of the face using the original data.
- Parameters:
- faceint
Face index. Must be 0, 1, 2, 3, 4 or 5
- Returns:
- midpointarray of length nDim
Mid point of face
- getOrigValueCorner(corner)[source]
Get the value of the original spline data on the corner if it exists
- Parameters:
- cornerint
Index of corner, 0<=corner<=7
- Returns:
- valuefloat
Original data on corner.
- getOrigValuesFace(face)[source]
For a given face index, face, return the 4 corners and the values of the midpoints of the 4 edges on that face.
- Parameters:
- faceint
Index of face, 0<=face<=5
- Returns:
- coordsarray of size (8, ndim)
The first 4 entries are the corner, and the last 4 are the midpoints.
- getValue(u, v, w)[source]
Get the value at the volume points(s) u, v, w. This is the main evaluation routine for the volume object.
- Parameters:
- uscalar, vector or matrix or tensor of values
u position
- vscalar, vector or matrix or tensor of values
v position
- wscalar, vector or matrix or tensor of values
w position
- Returns:
- valuesscalar, vector, matrix or tensor of values
The spline evaluation at (u, v, w)
- getValueCorner(corner)[source]
Get the value of the volume spline on the corner.
- Parameters:
- cornerint
Index of corner, 0<=corner<=7
- Returns:
- valuefloat
Volume spline evaluation at corner.
- getValueEdge(edge, s)[source]
Get the value at the volume points(s) u, v, w
- Parameters:
- edgeint
Index of edge. Must be between 0 and 11.
- sfloat or array
Parameter position(s) along edge to evaluate.
- Returns:
- valuesarray
Array of values evaluated along edge.
- insertKnot(direction, s, r)[source]
Insert a knot into the volume along either u, v, w:
- Parameters:
- directionstr
Parameteric direction to insert. Either ‘u’, ‘v’, or ‘w’
- sfloat
Parametric position along ‘direction’ to insert
- rint
Desired number of times to insert.
- Returns:
- rint
The actual number of times the knot was inserted.
- projectPoint(x0, nIter=25, eps=1e-10, volBounds=None, **kwargs)[source]
Project a point x0 or points x0 onto the volume and return parametric positions
- Parameters:
- x0array of length 3 or array of size (N, 3)
Points to embed in the volume. If the points do not actually lie in the volume, the closest point is returned
- nIterint
Maximum number of Newton iterations to perform
- epsfloat
Tolerance for the Newton iteration
- volBoundslist of lists
Optional input to prescribe bounds to the parametric coordinates during the projection. The value is a list that must contain 3 lists with 2 float entries each. First list contains the min and max bounds for the u parameter, second v, third w. E.g.
volBounds = [[0.0, 0.5], [0.5, 1.0], [0.25, 0.75]]
- ufloat or array of len(X0)
Optional initial guess for u position.
- vfloat or array of len(X0)
Optional initial guess for v position.
- wfloat or array of len(X0)
Optional initial guess for w position.
- Returns:
- ufloat or array of length N
u parametric position of closest point
- vfloat or array of length N
v parametric position of closest point
- wfloat or array of length N
w parametric position of closest point
- Dfloat or array of length N
Distance between projected point and closest point If the points are ‘inside’ the volume, D should be less than eps.
- writeTecplot(fileName, vols=True, coef=True, orig=False)[source]
Write the volume to a tecplot data file.
- Parameters:
- fileNamestr
Tecplot filename. Should end in .dat
- volsbool
Flag specifying whether the interpolated volume should be used. This is usually True if you want to get an approximation of the entire volume.
- coefbool
Flag specifying if the control points are to be plotted
- origbool
Flag specifying if original data (used for fitting) is to be included. If on original data exists, this argument is ignored.