Moertel  Development
 All Classes Namespaces Files Functions Enumerations Friends Pages
List of all members
MOERTEL::Projector Class Reference

A class to perform projections of nodes onto opposing segments in 2D and 3D. More...

#include <mrtr_projector.H>

Public Member Functions

 Projector (bool twoD, int outlevel)
 Constructor. More...
 
virtual ~Projector ()
 Destructor.
 
int OutLevel ()
 Return the level of output written to stdout ( 0 - 10 )
 
bool IsTwoDimensional ()
 Return whether this instance was constructed for 2D or 3D projections.
 
bool ProjectNodetoSegment_NodalNormal (MOERTEL::Node &node, MOERTEL::Segment &seg, double xi[], double &gap)
 Project a Node onto a Segment along the Node 's normal. More...
 
bool ProjectNodetoSegment_SegmentNormal (MOERTEL::Node &node, MOERTEL::Segment &seg, double xi[], double &gap)
 Project a Node onto a Segment along the interpolated outward normal field of the Segment. More...
 
bool ProjectNodetoSegment_SegmentOrthogonal (MOERTEL::Node &node, MOERTEL::Segment &seg, double xi[], double &gap)
 Project a Node onto a Segment orthogonal to the Segment (2D problems only) More...
 
bool ProjectNodetoSegment_Orthogonal_to_Slave (MOERTEL::Node &snode, MOERTEL::Segment &seg, double xi[], double &gap, MOERTEL::Segment &sseg)
 Project a Node onto a Segment orthogonal another Segment (2D problems only) More...
 

Detailed Description

A class to perform projections of nodes onto opposing segments in 2D and 3D.

A class to perform projections of nodes onto opposing segments in 2D and 3D

Date
Last update do Doxygen: 10-June-2010

This class performs all necessary projections of nodes onto opposing segment surfaces in 2D and 3D applying 2 different kinds of projection techniques.
In 2D problems, the user has a choice of projecting nodes onto opposing segment surfaces either orthogonal to that segment surface or along a previously constructed C0-continuous normal field of the slave side.
In both cases finding the projection of a Node on a Segment in terms of the segment's local coordinates of the projection point is a nonlinear operation. A local Newton iteration is involved and a dense solve of a 2x2 system is necessary within the Newton iteration.

When projecting along the C0-continuous normal field, the field of normals is defined over the slave side discretization and is an interpolation of (weighted averaged) nodal normals of the slave side. Projections in both directions are performed along that same normal field making it necessary to have different methods for projecting slave to mortar and vice versa.

In 3D projection is always performed along a previously constructed outward field of nodal normals. The projection of a point in 3D along a field onto a 2D surface is always a nonlinear iteration and a Newton method is applied here involving a dense 3x3 solve in each Newton step.

These projections make up for a pretty good share of the overall computational cost of the mortar method though convergence in the Newton iterations is usually excellent.

Author
Glen Hansen (gahan.nosp@m.se@s.nosp@m.andia.nosp@m..gov)

Constructor & Destructor Documentation

MOERTEL::Projector::Projector ( bool  twoD,
int  outlevel 
)
explicit

Constructor.

Constructs an instance of this class.
Note that this is not a collective call as projections are performed in parallel by individual processes.

Parameters
twoD: True if problem is 2D, false if problem is 3D
outlevel: Level of output information written to stdout ( 0 - 10 )

Member Function Documentation

bool MOERTEL::Projector::ProjectNodetoSegment_NodalNormal ( MOERTEL::Node node,
MOERTEL::Segment seg,
double  xi[],
double &  gap 
)

Project a Node onto a Segment along the Node 's normal.

Used to project a Node from the slave side onto a Segment on the mortar side

This method will compute the coordinates of a projection of a Node in the local coordinate system of a Segment. The projection point will not necessarily fall inside the Segment. However, if the projection point is far outside the segment's boundaries, problems with the internal nonlinear iteration might occur and a warning is issued when convergence can not be achieved in a limited number of iterations.

Parameters
node(in): Node to project
seg(in) : Segment to project on
xi(out) : Local coordinates if projection of Node in Segment 's coordinate System
gap(out) : Gap between node and projection along projection vector.

References MOERTEL::dot(), MOERTEL::Node::Id(), MOERTEL::Segment::Id(), and MOERTEL::solve33().

Referenced by MOERTEL::Integrator::Integrate().

bool MOERTEL::Projector::ProjectNodetoSegment_Orthogonal_to_Slave ( MOERTEL::Node snode,
MOERTEL::Segment seg,
double  xi[],
double &  gap,
MOERTEL::Segment sseg 
)

Project a Node onto a Segment orthogonal another Segment (2D problems only)

Used to project a Node from the slave side onto a Segment on the mortar side orthogonal to some slave Segment

This method will compute the coordinates of a projection of a Node in the local coordinate system of a Segment. The projection point will not necessarily fall inside the Segment. However, if the projection point is far outside the segment's boundaries, problems with the internal nonlinear iteration might occur and a warning is issued when convergence can not be achieved in a limited number of iterations.

Parameters
node(in): Node to project
seg(in) : Segment to project on
xi(out) : Local coordinates if projection of Node in Segment 's coordinate System
gap(out) : Gap between node and projection along projection vector.
sseg(in) : Segment to project orthogonal to

References MOERTEL::Segment::GetLocalNodeId(), MOERTEL::Node::Id(), MOERTEL::Segment::Id(), MOERTEL::Segment::LocalCoordinatesOfNode(), MOERTEL::Segment::Metric(), and MOERTEL::ReportError().

bool MOERTEL::Projector::ProjectNodetoSegment_SegmentNormal ( MOERTEL::Node node,
MOERTEL::Segment seg,
double  xi[],
double &  gap 
)

Project a Node onto a Segment along the interpolated outward normal field of the Segment.

Used to project a Node from the mortar side onto a Segment on the slave side

This method will compute the coordinates of a projection of a Node in the local coordinate system of a Segment. The projection point will not necessarily fall inside the Segment. However, if the projection point is far outside the segment's boundaries, problems with the internal nonlinear iteration might occur and a warning is issued when convergence can not be achieved in a limited number of iterations.

Parameters
node(in): Node to project
seg(in) : Segment to project on
xi(out) : Local coordinates if projection of Node in Segment 's coordinate System
gap(out) : Gap between node and projection along projection vector.

References MOERTEL::dot(), MOERTEL::Node::Id(), MOERTEL::Segment::Id(), and MOERTEL::solve33().

bool MOERTEL::Projector::ProjectNodetoSegment_SegmentOrthogonal ( MOERTEL::Node node,
MOERTEL::Segment seg,
double  xi[],
double &  gap 
)

Project a Node onto a Segment orthogonal to the Segment (2D problems only)

Used to project a Node from the mortar side onto a Segment on the slave side

This method will compute the coordinates of a projection of a Node in the local coordinate system of a Segment. The projection point will not necessarily fall inside the Segment. However, if the projection point is far outside the segment's boundaries, problems with the internal nonlinear iteration might occur and a warning is issued when convergence can not be achieved in a limited number of iterations.

Parameters
node(in): Node to project
seg(in) : Segment to project on
xi(out) : Local coordinates if projection of Node in Segment 's coordinate System
gap(out) : Gap between node and projection along projection vector.

References MOERTEL::Node::Id(), MOERTEL::Segment::Id(), and MOERTEL::ReportError().


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