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