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... | |
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
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.
|
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.
twoD | : True if problem is 2D, false if problem is 3D |
outlevel | : Level of output information written to stdout ( 0 - 10 ) |
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.
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.
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.
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.
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().