46PolylineNonlocalBarrier :: PolylineNonlocalBarrier(
int n,
Domain *aDomain) :
55PolylineNonlocalBarrier :: ~PolylineNonlocalBarrier()
61PolylineNonlocalBarrier :: applyConstraint(
const double cl,
const FloatArray &c1,
const FloatArray &c2,
double &weight,
78 double xc1, xc2, xa, xb, yc1, yc2, ya, yb;
79 double a11, a12, a21, a22, b1, b2,
det, t, s;
87 for ( indx = 1; indx < size; indx++ ) {
102 det = a11 * a22 - a21 * a12;
107 t = ( b1 * a22 - b2 * a12 ) /
det;
108 if ( t < 0. || t > 1. ) {
112 s = ( -b1 * a21 + b2 * a11 ) /
det;
113 if ( s >= 0. && s <= 1. ) {
122PolylineNonlocalBarrier :: calculateMinimumDistanceFromBoundary(
const FloatArray &coords)
127 for (
int i = 1; i <
vertexNodes.giveSize(); i++ ) {
131 for (
int j = 1; j <= coords.
giveSize(); j++ ) {
138 if (
min > tempDistance ) {
161 if ( scaleFactor < 0. || scaleFactor > 1. ) {
172 lineAB.
times(scaleFactor);
#define REGISTER_NonlocalBarrier(class)
double giveCoordinate(int i) const
Domain * domain
Link to domain object, useful for communicating with other FEM components.
double computeNorm() const
double computeSquaredNorm() const
double dotProduct(const FloatArray &x) const
Index giveSize() const
Returns the size of receiver.
void add(const FloatArray &src)
void subtract(const FloatArray &src)
virtual bool isActivated(const FloatArray &c1, const FloatArray &c2)
double giveDistancePointLine(const FloatArray &coordsA, const FloatArray &coordsB, const FloatArray &coordsGP)
int localXCoordIndx
Local x-coordinate index.
int localYCoordIndx
Local y-coordinate index.
IntArray vertexNodes
List of polyline vertices.
FloatArrayF< N > min(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
double det(const FloatMatrixF< 2, 2 > &mat)
Computes the determinant.
#define _IFT_PolylineNonlocalBarrier_vertexnodes
#define _IFT_PolylineNonlocalBarrier_ycoordindx
#define _IFT_PolylineNonlocalBarrier_xcoordindx