Surface Discretization with Surfers¶
In fmm3dBIE, a smooth, regular surface is discretized by dividing
it into pieces, called “patches”, which are then represented
by polynomial interpolants using appropriate discretization nodes. This
information is stored in a surfer object.
The surfer class documentation gives a survey of the available methods:
%SURFER class which describes a surface divided into triangles/quads (patches).
%
% On each patch the surface is represented by the values of its position,
% its two tangential derivatives, and the corresponding basis function
% expansions on either an RV grid on triangles or a tensor product GL/Chebyshev
% grid on quads.
%
% Notes:
%
% Cell arrays have one element per patch. For scalar quantities per patch,
% a plain array is used.
%
% The types for each patch are:
% * iptype = 1, triangular patch discretized using
% Rokhlin-Vioreanu nodes
% * iptype = 11, quadrangular patch discretized using tensor
% product Gauss-Legendre nodes
% * iptype = 12, quadrangular patch discretized using tensor
% product Chebyshev
% For order p=norder, a triangle patch uses (p+1)(p+2)/2 nodes, whereas
% either quad patch type uses p^2 nodes. The number of coeffs equals this
% number of nodes.
%
% Surfer properties:
% obj.iptype - type of each patch
% obj.weights - cell array of quadrature weight arrays per patch
% obj.norders - exapnsion order p of each patch
% obj.npatches - numbers of patches
% obj.npts - total number of discretization points
% obj.srcccoefs - cell array of orthogonal polynomial coefs of
% [r; du; dv] per patch
% obj.r - discretization node locations (3,npts)
% obj.du - dr/du tangent vectors at nodes (3,npts)
% obj.dv - dr/dv tangent vectors at nodes (3,npts)
% obj.n - unit outward normals at nodes (3,npts)
% obj.wts - quadrature weights for integrating smooth functions
% on surface (surface element) (npts,1)
% obj.patch_id - which patch each node belongs to (npts,1)
% obj.uvs_targ - (u,v) param coords of nodes within own patch (2,npts)
% obj.mean_curv - mean curvatures at nodes (npts*1)
% obj.ffform - cell array of first fundamental forms at nodes (2,2,n)
% obj.ffforminv - cell array of inverses of ffforms at nodes (2,2,n)
%
%
% Surfer methods
% plot(obj, varargin) - plot the surface, by default plots the mean
% curvature
% scatter(obj,s,c, ...) - scatter plot of surface
% plot_nodes(obj,v, ...) - plot discretization nodes describing the
% surface
% extract_arrays(obj) - extract flattened arrays for srcvals,
% srccoefs, norders, ixyzs, iptype, and wts
% oversample(obj, novers) - oversample patch(i) on the surface
% to expansion order novers(i)
% affine_transf(obj,mat,s) - apply affine transformation, and translation
% conv_rsc_spmat(obj, ...) - convert row sparse representation of
% near quadrature to sparse matrix
% representation
% rotate(obj, eul) - rotate surface based on euler angles
% scale(obj, sf) - scale object
% translate(obj, r) - translate object
% merge([array of objs]) - merge an array of surface objects
% area(obj) - compute the surface area of object
% surf_fun_error(obj,f,p) - estimate error in function approximation
% on surface via basis expansion tails
% vals2coefs(obj, vals) - construct basis function expansions
% of function on surface
Note
To obtain the documentation of a class method which has
overloaded the name of a MATLAB built-in, use the syntax
help class_name/method_name. For example:
help surfer/area