#include <mc/mc_base.h>
#include <mc/gem.h>
#include <mc/bam.h>
#include <mc/whb.h>
#include <mc/re.h>
#include <mc/node.h>
#include <mc/bnode.h>
Go to the source code of this file.
Classes | |
struct | sAprx |
Class Aprx: Parameters and datatypes Class Aprx: Definition. More... | |
Typedefs | |
typedef struct sAprx | Aprx |
Declaration of the Aprx class as the Aprx structure. | |
Functions | |
Aprx * | Aprx_ctor (Vmem *vmem, Gem *tgm, PDE *tpde) |
Construct a linear Approximation object. | |
Aprx * | Aprx_ctor2 (Vmem *vmem, Gem *tgm, PDE *tpde, int order) |
Approximation object constructor. | |
void | Aprx_dtor (Aprx **thee) |
Approximation object destructor. | |
int | Aprx_numB (Aprx *thee) |
Return the number of blocks. | |
Bmat * | Aprx_P (Aprx *thee) |
Return a pointer to the current prolongation matrix. | |
int | Aprx_read (Aprx *thee, int key, Vio *sock) |
Read in the user-specified initial mesh given in the "MCSF" or "MCEF" format, and transform into our internal datastructures. Do a little more than a "Gem_read", in that we also initialize the extrinsic and intrinsic spatial dimensions corresponding to the input mesh, and we also then build the reference elements. | |
void | Aprx_reset (Aprx *thee) |
Reset all of the datastructures. | |
void | Aprx_initNodes (Aprx *thee) |
Make node information. | |
void | Aprx_buildNodes (Aprx *thee) |
Determine the node types via a single fast traversal of the elements by looking at the element faces. | |
void | Aprx_evalTrace (Aprx *thee, Bvec *Wud, Bvec *Wui, Bvec *Wut) |
Evaluate the trace information. | |
int | Aprx_refine (Aprx *thee, int rkey, int bkey, int pkey) |
Refine the mesh. | |
int | Aprx_unRefine (Aprx *thee, int rkey, int pkey) |
Unrefine the mesh. | |
int | Aprx_deform (Aprx *thee, Bvec *def) |
Deform the mesh. | |
void | Aprx_buildProlong (Aprx *thee, int numRc, int numR, int pkey) |
Create storage for and build prolongation operator; the operator prolongates a vector FROM a coarser level TO this level. | |
void | Aprx_buildProlongBmat (Aprx *thee, Mat *p) |
Create block version of prolongation operator; also updates the Bnode object. | |
int | Aprx_nodeCount (Aprx *thee, Re *re) |
Count up the total number of basis functions (nodes). This is basically an a priori count of the number of rows in the stiffness matrix. | |
void | Aprx_interact (Aprx *thee, Re *re, Re *reT, int *numR, int *numO, int *numOYR, int **IJA, int **IJAYR) |
Count the number of basis (linear/quadratic/etc) functions which interact with a given basis function. This is basically an a priori count of the number of nonzeros per row in the stiffness matrix, and the number of nozeros per row above the diagonal (and thus the number of nonzeros per column below the diagonal if we have symmetric nonzero structure). By doing this count, we can one-time malloc storage for matrices before assembly, and avoid extra copies as well as avoid the use of linked list structures for representing matrices with a priori unknown nonzero structure. | |
void | Aprx_interactBlock (Aprx *thee, Re *re[MAXV], Re *reT[MAXV], MATsym sym[MAXV][MAXV], MATmirror mirror[MAXV][MAXV], MATformat frmt[MAXV][MAXV], int numR[MAXV], int numO[MAXV][MAXV], int *IJA[MAXV][MAXV]) |
Determine all basis function interations. | |
int | Aprx_nodeIndex (Aprx *thee, Re *re, int i, int dim, int q) |
Compute global index of node of dimension dim in the matrix. | |
int | Aprx_nodeIndexTT (Aprx *thee, Re *re, TT *t, int idf) |
Given an index of node DF within the simplex and its TT structure, compute global index for that node. | |
void | Aprx_buildBRC (Aprx *thee, Bmat *A, Bmat *M) |
Build boundary Bnode information into two Bmats. | |
void | Aprx_initSpace (Aprx *thee, int i, int r, double phi[], double phix[][3], double V[], double dV[][3]) |
Initialize vector test function "i" and its gradient, generated by scalar test function "r" for this element. | |
void | Aprx_initEmat (Aprx *thee, int bumpKey, TT *t, Emat *em) |
Initialize an element matrix. | |
void | Aprx_quadEmat (Aprx *thee, int evalKey, int energyKey, int residKey, int tangKey, int massKey, int bumpKey, int face, TT *t, Emat *em, Bvec *Wu, Bvec *Wud) |
Build an element matrix and an element load vector for a single given element, using quadrature. | |
void | Aprx_fanEmat (Aprx *thee, int evalKey, int energyKey, int residKey, int tangKey, int massKey, int bumpKey, Emat *em, Bmat *A, Bmat *M, Bvec *F) |
Fan out an element matrix to the global matrix, and fan out an element vector to the global vector. | |
void | Aprx_assemEmat (Aprx *thee, SS *sm, int evalKey, int energyKey, int residKey, int tangKey, int massKey, int bumpKey, Emat *em, Bvec *Wu, Bvec *Wud) |
Assemble one element matrix. | |
double | Aprx_assem (Aprx *thee, int evalKey, int energyKey, int residKey, int tangKey, int massKey, int bumpKey, int ip[], double rp[], Bmat *A, Bmat *M, Bvec *F, Bvec *Wu, Bvec *Wud) |
Assemble the tangent matrix and nonlinear residual vector (which reduces to the normal stiffness matrix and load vector in the case of a linear problem) for a general nonlinear system of m components in spatial dimension d. | |
int | Aprx_markRefine (Aprx *thee, int key, int color, int bkey, double elevel, Bvec *u, Bvec *ud, Bvec *f, Bvec *r) |
Mark simplices to be refined. | |
int | Aprx_estRefine (Aprx *thee, int key, int color, int bkey, double elevel, Bvec *u, Bvec *ud, Bvec *f, Bvec *r) |
A posteriori error estimation via several different approaches. | |
int | Aprx_markRefineFixed (Aprx *thee, int num2ref, int color) |
Selects a fixed number/fraction of simplicies to be refined. | |
void | Aprx_evalFunc (Aprx *thee, Bvec *u, int block, int numPts, double *pts, double *vals, int *marks) |
Evaluate a finite element solution at a set of arbitrary points. | |
void | Aprx_fe2fd (Aprx *thee, Bvec *u, int block, int nx, int ny, int nz, double x0, double y0, double z0, double dx, double dy, double dz, int derivs, int outTypeKey) |
Interpolates data onto finite difference grid. | |
void | Aprx_bndIntegral (Aprx *thee, Bvec *u, Bvec *ud, Bvec *ut) |
Evaluate a given boundary integral. | |
void | Aprx_admMass (Aprx *thee, Bvec *u, Bvec *ud, Bvec *ut, int block) |
Evaluate ADM mass from conformal factor. | |
double | Aprx_evalError (Aprx *thee, int pcolor, int key, Bvec *u, Bvec *ud, Bvec *ut) |
Evaluate error in solution in one of several norms. | |
double | Aprx_evalH1 (Aprx *thee, SS *sm, Bvec *u, Bvec *ud, Bvec *ut) |
Evaluate difference of two functions in H1 norm in one element. | |
void | Aprx_writeGEOM (Aprx *thee, Vio *sock, int defKey, int colKey, int chartKey, double gluVal, int fkey, Bvec *u, char *format) |
Write a finite element mesh or mesh function in some format. | |
void | Aprx_writeSOL (Aprx *thee, Vio *sock, Bvec *u, char *format) |
Write a finite element mesh or mesh function in some format. | |
int | Aprx_partSet (Aprx *thee, int pcolor) |
Clear the partitioning (set all colors to pcolor). | |
int | Aprx_partSmooth (Aprx *thee) |
Smooth the partitioning. | |
int | Aprx_partInert (Aprx *thee, int pcolor, int numC, double *evec, simHelper *simH) |
Partition the domain using inertial bisection. Partition sets of points in R^d (d=2 or d=3) by viewing them as point masses of a rigid body, and by then employing the classical mechanics ideas of inertia and Euler axes. | |
int | Aprx_partSpect (Aprx *thee, int pcolor, int numC, double *evec, simHelper *simH, int *ford, int *rord, int general) |
Partition the domain using spectral bisection. | |
int | Aprx_part (Aprx *thee, int pkey, int pwht, int ppow) |
Do recursive bisection. | |
int | Aprx_partOne (Aprx *thee, int pkey, int pwht, int pcolor, int poff) |
Do a single bisection step. |
* * MC = < Manifold Code > * Copyright (C) 1994--2008 Michael Holst * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *