FEBio  1.5.0
Public Member Functions | Data Fields | Protected Attributes
FESurface Class Reference

Surface mesh. More...

#include <FESurface.h>

Inheritance diagram for FESurface:
FEDomain FEContactSurface FERigidWallSurface FEFacetSlidingSurface FEMergedSurface FEPeriodicSurface FESlidingSurface FESlidingSurface2 FESlidingSurface3 FESurfaceConstraintSurface FETiedContactSurface

Public Member Functions

 FESurface (FEMesh *pm)
 constructor
virtual ~FESurface ()
 destructor
void create (int n)
 creates surface
void Serialize (DumpFile &ar)
 serialization
FESurfaceElementElement (int i)
 return an element of the surface
FEElementElementRef (int n)
int Elements ()
 return number of surface elements
vec3d ProjectToSurface (FESurfaceElement &el, vec3d x, double &r, double &s)
 Project a node onto a surface element.
void UnpackLM (FEElement &el, vector< int > &lm)
 Unpack surface element data.
FEMeshGetMesh ()
 return the mesh to which this surface is attached
int Nodes ()
 number of nodes on this surface
virtual bool Init ()
 initialize surface data structure
FENodeNode (int n)
 return the FENode object for local node n
double FaceArea (FESurfaceElement &el)
 calculate the surface area of a surface element
mat2d Metric (FESurfaceElement &el, double r, double s)
 calculate the metric tensor in the reference configuration
mat2d Metric0 (FESurfaceElement &el, double r, double s)
 calculate the metric tensor in the reference configuration
vec3d SurfaceNormal (FESurfaceElement &el, double r, double s)
 calculate the surface normal
vec3d SurfaceNormal (FESurfaceElement &el, int n)
 calculate the surface normal at an integration point
vec3d Local2Global (FESurfaceElement &el, double r, double s)
 calculate the global position of a point on the surface
vec3d Local2Global (FESurfaceElement &el, int n)
 calculate the global position of an integration point
bool IsInsideElement (FESurfaceElement &el, double r, double s, double tol=0)
 check to see if a point is on element
void CoBaseVectors (FESurfaceElement &el, int j, vec3d t[2])
 calculates the covariant base vectors of a surface at an integration point
void CoBaseVectors (FESurfaceElement &el, double r, double s, vec3d t[2])
 calculates the covariant base vectors of a surface at an integration point
void CoBaseVectors0 (FESurfaceElement &el, double r, double s, vec3d t[2])
 calculates covariant base vectors of a surface
void ContraBaseVectors (FESurfaceElement &el, double r, double s, vec3d t[2])
 calculates contravariant base vectors of a surface
void ContraBaseVectors0 (FESurfaceElement &el, double r, double s, vec3d t[2])
 calculates contravariant base vectors of a surface
FESurfaceElementFindIntersection (vec3d r, vec3d n, double rs[2], double eps, int *pei=0)
 find the intersection of a ray with the surface
bool Intersect (FESurfaceElement &el, vec3d r, vec3d n, double rs[2], double &g, double eps)
bool IntersectTri (vec3d *y, vec3d r, vec3d n, double rs[2], double &g, double eps)
bool IntersectQuad (vec3d *y, vec3d r, vec3d n, double rs[2], double &g, double eps)
int FindElement (FESurfaceElement &el)

Data Fields

vector< int > node
 array of node indices
FENodeElemList m_NEL
 the node element list

Protected Attributes

vector< FESurfaceElementm_el
 surface elements

Detailed Description

Surface mesh.

This class implements the basic functionality for an FE surface. More specialized surfaces are derived from this class


Member Function Documentation

void FESurface::CoBaseVectors ( FESurfaceElement el,
int  j,
vec3d  t[2] 
)

calculates the covariant base vectors of a surface at an integration point

This function calculates the covariant base vectors of a surface element at an integration point

void FESurface::CoBaseVectors ( FESurfaceElement el,
double  r,
double  s,
vec3d  t[2] 
)

calculates the covariant base vectors of a surface at an integration point

This function calculates the covariant base vectors of a surface element at an integration point

void FESurface::CoBaseVectors0 ( FESurfaceElement el,
double  r,
double  s,
vec3d  t[2] 
)

calculates covariant base vectors of a surface

This function calculates the covariant base vectors of a surface element at the natural coordinates (r,s)

double FESurface::FaceArea ( FESurfaceElement el)

calculate the surface area of a surface element

This function calculates the area of a surface element.

int FESurface::FindElement ( FESurfaceElement el)

Find the element that a face belongs to

FESurfaceElement * FESurface::FindIntersection ( vec3d  r,
vec3d  n,
double  rs[2],
double  eps,
int *  pei = 0 
)

find the intersection of a ray with the surface

This function finds the element which is intersected by the ray (r,n). It returns a pointer to the element, as well as the isoparametric coordinates of the intersection point.

bool FESurface::Init ( ) [virtual]

initialize surface data structure

Initialize surface node data structure Note that it is assumed that the element array is already created and initialized.

Reimplemented in FERigidWallSurface, FESlidingSurface, FETiedContactSurface, FESlidingSurface3, FEFacetSlidingSurface, FEMergedSurface, FEPeriodicSurface, FESurfaceConstraintSurface, and FESlidingSurface2.

bool FESurface::Intersect ( FESurfaceElement el,
vec3d  r,
vec3d  n,
double  rs[2],
double &  g,
double  eps 
)

This function calculates the intersection of a ray with a surface element. It simply calls the tri or quad intersection function based on the type of element.

bool FESurface::IntersectQuad ( vec3d y,
vec3d  r,
vec3d  n,
double  rs[2],
double &  g,
double  eps 
)

This function calculates the intersection of a ray with a quad and returns true if the ray intersected.

bool FESurface::IsInsideElement ( FESurfaceElement el,
double  r,
double  s,
double  tol = 0 
)

check to see if a point is on element

This function checks whether the point with natural coordinates (r,s) is inside the element, within a tolerance of tol.

vec3d FESurface::Local2Global ( FESurfaceElement el,
int  n 
)

calculate the global position of an integration point

This function calculates the global location of an integration point

mat2d FESurface::Metric ( FESurfaceElement el,
double  r,
double  s 
)

calculate the metric tensor in the reference configuration

Calculates the metric tensor at the point with surface coordinates (r,s)

mat2d FESurface::Metric0 ( FESurfaceElement el,
double  r,
double  s 
)

calculate the metric tensor in the reference configuration

Calculates the metric tensor at the point with surface coordinates (r,s)

vec3d FESurface::ProjectToSurface ( FESurfaceElement el,
vec3d  x,
double &  r,
double &  s 
)

Project a node onto a surface element.

This function calculates the projection of x on the surface element el. It does this by finding the solution of the nonlinear equation (x-y)*y,[a]=0, where the comma denotes differentation and a ranges from 1 to 2. The system is solved using the Newton-Raphson method. The surface element may be either a quad or a triangular element.

vec3d FESurface::SurfaceNormal ( FESurfaceElement el,
double  r,
double  s 
)

calculate the surface normal

This function calculates the normal of a surface element at the natural coordinates (r,s)

vec3d FESurface::SurfaceNormal ( FESurfaceElement el,
int  n 
)

calculate the surface normal at an integration point

This function calculates the noraml of a surface element at integration point n


The documentation for this class was generated from the following files: