FEM3D_SAMPLE
Evaluate a Finite Element Function of a 3D Argument
FEM3D_SAMPLE
is a C++ program which
can evaluate a finite element function of a 3D argument.
The current version of the program can only handle tetrahedral finite element
meshes using linear basis functions.
The current version of the program uses a NAIVE search algorithm to locate
points within the mesh. It is intended that this search algorithm be replaced
by a Delaunay search.
Usage:
fem3d_sample fem_prefix sample_prefix
where fem_prefix is the common prefix for the FEM files:
-
fem_prefix_nodes.txt, the node coordinates.
-
fem_prefix_elements.txt, the nodes that make up each element;
-
fem_prefix_values.txt, the values defined at each node.
and sample_prefix is the common prefix for the SAMPLE files,
for which the node file is input, and the values file is created by the program:
-
sample_prefix_nodes.txt, the node coordinates where samples are desired.
-
sample_prefix_values.txt, the values computed at each sample node.
Licensing:
The computer code and data files described and made available on this web page
are distributed under
the GNU LGPL license.
Languages:
FEM3D_SAMPLE is available in
a C++ version and
a FORTRAN77 version and
a FORTRAN90 version and
a MATLAB version.
Related Data and Programs:
FEM_IO,
a C++ library which
reads or writes node, element and data files defining a finite element model.
FEM_TO_TEC,
a MATLAB program which
converts FEM models into TEC graphics files.
FEM1D_SAMPLE,
a C++ program which
samples a scalar or vector finite element function of one variable,
defined by FEM files,
returning interpolated values at the sample points.
FEM2D_SAMPLE,
a C++ program which
samples a scalar or vector finite element function of 2 variables
defined by FEM files,
returning interpolated values at the sample points.
FEM3D,
a data directory which
contains examples of 3D FEM files,
three text files that describe a 3D finite element geometry;
FEM3D_PACK,
a C++ library which
contains utilities for 3D finite element calculations.
FEM3D_PROJECT,
a C++ program which
projects a function F(X,Y,Z), given as a data, into a given finite element space
of piecewise linear tetrahedral elements.
Reference:
-
Hans Rudolf Schwarz,
Finite Element Methods,
Academic Press, 1988,
ISBN: 0126330107,
LC: TA347.F5.S3313.
-
Gilbert Strang, George Fix,
An Analysis of the Finite Element Method,
Cambridge, 1973,
ISBN: 096140888X,
LC: TA335.S77.
-
Olgierd Zienkiewicz,
The Finite Element Method,
Sixth Edition,
Butterworth-Heinemann, 2005,
ISBN: 0750663200,
LC: TA640.2.Z54.
Source Code:
Examples and Tests:
SQ is FEM data for the function f(x,y,z)=x^2+2*y^2-z^2, on a 5x5x5 grid
of nodes in the cube [0,4]x[0,4]x[0,4], organized into linear linear tetrahedrons.
The sample data seeks the values of this function on a 4x4x4
evenly spaced grid.
List of Routines:
-
MAIN is the main program for FEM3D_SAMPLE.
-
BASIS_MN_TET4: all bases at N points for a T4 element.
-
CH_CAP capitalizes a single character.
-
CH_EQI is true if two characters are equal, disregarding case.
-
CH_TO_DIGIT returns the integer value of a base 10 digit.
-
FEM3D_EVALUATE samples an FEM function on a T4 tet mesh.
-
FILE_COLUMN_COUNT counts the number of columns in the first line of a file.
-
FILE_ROW_COUNT counts the number of row records in a file.
-
I4_MAX returns the maximum of two I4's.
-
I4_MIN returns the minimum of two I4's.
-
I4_UNIFORM returns a scaled pseudorandom I4.
-
I4COL_COMPARE compares columns I and J of an I4COL.
-
I4COL_SORT_A ascending sorts an I4COL.
-
I4COL_SWAP swaps two columns of an I4COL.
-
I4I4I4_SORT_A ascending sorts a triple of I4's.
-
I4MAT_DATA_READ reads data from an I4MAT file.
-
I4MAT_HEADER_READ reads the header from an I4MAT file.
-
R4_ABS returns the absolute value of an R4.
-
R4_NINT returns the nearest integer to an R4.
-
R4_UNIFORM_01 returns a unit pseudorandom R4.
-
R8_HUGE returns a "huge" R8.
-
R8_MAX returns the maximum of two R8's.
-
R8_MIN returns the minimum of two R8's.
-
R8_NINT returns the nearest integer to an R8.
-
R8MAT_DATA_READ reads the data from an R8MAT file.
-
R8MAT_HEADER_READ reads the header from an R8MAT file.
-
R8MAT_SOLVE uses Gauss-Jordan elimination to solve an N by N linear system.
-
R8MAT_WRITE0 writes an R8MAT file with no header.
-
R8VEC_IS_NONNEGATIVE is true if all entries in an R8VEC are nonnegative.
-
S_LEN_TRIM returns the length of a string to the last nonblank.
-
S_TO_I4 reads an I4 from a string.
-
S_TO_I4VEC reads an I4VEC from a string.
-
S_TO_R8 reads an R8 from a string.
-
S_TO_R8VEC reads an R8VEC from a string.
-
S_WORD_COUNT counts the number of "words" in a string.
-
SORT_HEAP_EXTERNAL externally sorts a list of items into ascending order.
-
TET_MESH_NEIGHBOR_TETS determines tetrahedron neighbors.
-
TET_MESH_SEARCH_NAIVE naively searches a tet mesh.
-
TETRAHEDRON_BARYCENTRIC returns the barycentric coordinates of a point.
-
TIMESTAMP prints the current YMDHMS date as a time stamp.
You can go up one level to
the C++ source codes.
Last revised on 07 August 2009.